furi_hal_mpu.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /**
  2. * @file furi_hal_light.h
  3. * Light control HAL API
  4. */
  5. #pragma once
  6. #include <stdbool.h>
  7. #include <stdint.h>
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. typedef enum {
  12. FuriHalMpuRegionNULL = 0x00, // region 0 used to protect null pointer dereference
  13. FuriHalMpuRegionStack = 0x01, // region 1 used to protect stack
  14. FuriHalMpuRegion2 = 0x02,
  15. FuriHalMpuRegion3 = 0x03,
  16. FuriHalMpuRegion4 = 0x04,
  17. FuriHalMpuRegion5 = 0x05,
  18. FuriHalMpuRegion6 = 0x06,
  19. FuriHalMpuRegion7 = 0x07,
  20. } FuriHalMpuRegion;
  21. typedef enum {
  22. FuriHalMPURegionSize32B = 0x04U,
  23. FuriHalMPURegionSize64B = 0x05U,
  24. FuriHalMPURegionSize128B = 0x06U,
  25. FuriHalMPURegionSize256B = 0x07U,
  26. FuriHalMPURegionSize512B = 0x08U,
  27. FuriHalMPURegionSize1KB = 0x09U,
  28. FuriHalMPURegionSize2KB = 0x0AU,
  29. FuriHalMPURegionSize4KB = 0x0BU,
  30. FuriHalMPURegionSize8KB = 0x0CU,
  31. FuriHalMPURegionSize16KB = 0x0DU,
  32. FuriHalMPURegionSize32KB = 0x0EU,
  33. FuriHalMPURegionSize64KB = 0x0FU,
  34. FuriHalMPURegionSize128KB = 0x10U,
  35. FuriHalMPURegionSize256KB = 0x11U,
  36. FuriHalMPURegionSize512KB = 0x12U,
  37. FuriHalMPURegionSize1MB = 0x13U,
  38. FuriHalMPURegionSize2MB = 0x14U,
  39. FuriHalMPURegionSize4MB = 0x15U,
  40. FuriHalMPURegionSize8MB = 0x16U,
  41. FuriHalMPURegionSize16MB = 0x17U,
  42. FuriHalMPURegionSize32MB = 0x18U,
  43. FuriHalMPURegionSize64MB = 0x19U,
  44. FuriHalMPURegionSize128MB = 0x1AU,
  45. FuriHalMPURegionSize256MB = 0x1BU,
  46. FuriHalMPURegionSize512MB = 0x1CU,
  47. FuriHalMPURegionSize1GB = 0x1DU,
  48. FuriHalMPURegionSize2GB = 0x1EU,
  49. FuriHalMPURegionSize4GB = 0x1FU,
  50. } FuriHalMPURegionSize;
  51. /**
  52. * @brief Initialize memory protection unit
  53. */
  54. void furi_hal_mpu_init();
  55. /**
  56. * @brief Enable memory protection unit
  57. */
  58. void furi_hal_mpu_enable();
  59. /**
  60. * @brief Disable memory protection unit
  61. */
  62. void furi_hal_mpu_disable();
  63. void furi_hal_mpu_protect_no_access(
  64. FuriHalMpuRegion region,
  65. uint32_t address,
  66. FuriHalMPURegionSize size);
  67. void furi_hal_mpu_protect_read_only(
  68. FuriHalMpuRegion region,
  69. uint32_t address,
  70. FuriHalMPURegionSize size);
  71. void furi_hal_mpu_protect_disable(FuriHalMpuRegion region);
  72. #ifdef __cplusplus
  73. }
  74. #endif