mm_fault.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. #define MM_FAULT_STATUS_OK 0
  16. #define MM_FAULT_STATUS_UNRECOVERABLE 1
  17. struct rt_mm_fault_res
  18. {
  19. void *vaddr;
  20. rt_size_t size;
  21. int status;
  22. };
  23. enum rt_mm_fault_op
  24. {
  25. MM_FAULT_OP_READ = 1,
  26. MM_FAULT_OP_WRITE,
  27. MM_FAULT_OP_EXECUTE,
  28. };
  29. enum rt_mm_fault_type
  30. {
  31. MM_FAULT_TYPE_ACCESS_FAULT,
  32. MM_FAULT_TYPE_PAGE_FAULT,
  33. MM_FAULT_TYPE_BUS_ERROR,
  34. MM_FAULT_TYPE_GENERIC,
  35. };
  36. struct rt_mm_fault_msg
  37. {
  38. enum rt_mm_fault_op fault_op;
  39. enum rt_mm_fault_type fault_type;
  40. rt_size_t off;
  41. void *vaddr;
  42. struct rt_mm_fault_res response;
  43. };
  44. /* MMU base page fault handler, return 1 is */
  45. int rt_mm_fault_try_fix(struct rt_mm_fault_msg *msg);
  46. #endif /* __MM_FAULT_H__ */