mm_fault.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * Copyright (c) 2006-2022, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-12-06 WangXiaoyao the first version
  9. */
  10. #ifndef __MM_FAULT_H__
  11. #define __MM_FAULT_H__
  12. #include <rtthread.h>
  13. #include <stddef.h>
  14. #include <stdint.h>
  15. /* fast path fault handler, a page frame on kernel space is returned */
  16. #define MM_FAULT_STATUS_OK 0
  17. /* customized fault handler, done by using rt_varea_map_* */
  18. #define MM_FAULT_STATUS_OK_MAPPED 1
  19. #define MM_FAULT_STATUS_UNRECOVERABLE 4
  20. struct rt_mm_fault_res
  21. {
  22. void *vaddr;
  23. rt_size_t size;
  24. int status;
  25. };
  26. enum rt_mm_fault_op
  27. {
  28. MM_FAULT_OP_READ = 1,
  29. MM_FAULT_OP_WRITE,
  30. MM_FAULT_OP_EXECUTE,
  31. };
  32. enum rt_mm_fault_type
  33. {
  34. MM_FAULT_TYPE_ACCESS_FAULT,
  35. MM_FAULT_TYPE_PAGE_FAULT,
  36. MM_FAULT_TYPE_BUS_ERROR,
  37. MM_FAULT_TYPE_GENERIC,
  38. };
  39. struct rt_aspace_fault_msg
  40. {
  41. enum rt_mm_fault_op fault_op;
  42. enum rt_mm_fault_type fault_type;
  43. rt_size_t off;
  44. void *fault_vaddr;
  45. struct rt_mm_fault_res response;
  46. };
  47. /* MMU base page fault handler, return 1 is */
  48. int rt_aspace_fault_try_fix(struct rt_aspace_fault_msg *msg);
  49. #endif /* __MM_FAULT_H__ */