mpu_wrappers.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. /*
  2. * FreeRTOS Kernel V11.1.0
  3. * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
  4. *
  5. * SPDX-License-Identifier: MIT
  6. *
  7. * Permission is hereby granted, free of charge, to any person obtaining a copy of
  8. * this software and associated documentation files (the "Software"), to deal in
  9. * the Software without restriction, including without limitation the rights to
  10. * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  11. * the Software, and to permit persons to whom the Software is furnished to do so,
  12. * subject to the following conditions:
  13. *
  14. * The above copyright notice and this permission notice shall be included in all
  15. * copies or substantial portions of the Software.
  16. *
  17. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  19. * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  20. * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  21. * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  22. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  23. *
  24. * https://www.FreeRTOS.org
  25. * https://github.com/FreeRTOS
  26. *
  27. */
  28. #ifndef MPU_WRAPPERS_H
  29. #define MPU_WRAPPERS_H
  30. /* This file redefines API functions to be called through a wrapper macro, but
  31. * only for ports that are using the MPU. */
  32. #if ( portUSING_MPU_WRAPPERS == 1 )
  33. /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is
  34. * included from queue.c or task.c to prevent it from having an effect within
  35. * those files. */
  36. #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
  37. /*
  38. * Map standard (non MPU) API functions to equivalents that start
  39. * "MPU_". This will cause the application code to call the MPU_
  40. * version, which wraps the non-MPU version with privilege promoting
  41. * then demoting code, so the kernel code always runs will full
  42. * privileges.
  43. */
  44. /* Map standard task.h API functions to the MPU equivalents. */
  45. #define vTaskDelay MPU_vTaskDelay
  46. #define xTaskDelayUntil MPU_xTaskDelayUntil
  47. #define xTaskAbortDelay MPU_xTaskAbortDelay
  48. #define uxTaskPriorityGet MPU_uxTaskPriorityGet
  49. #define eTaskGetState MPU_eTaskGetState
  50. #define vTaskGetInfo MPU_vTaskGetInfo
  51. #define vTaskSuspend MPU_vTaskSuspend
  52. #define vTaskResume MPU_vTaskResume
  53. #define xTaskGetTickCount MPU_xTaskGetTickCount
  54. #define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks
  55. #define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark
  56. #define uxTaskGetStackHighWaterMark2 MPU_uxTaskGetStackHighWaterMark2
  57. #define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag
  58. #define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag
  59. #define vTaskSetThreadLocalStoragePointer MPU_vTaskSetThreadLocalStoragePointer
  60. #define pvTaskGetThreadLocalStoragePointer MPU_pvTaskGetThreadLocalStoragePointer
  61. #define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle
  62. #define uxTaskGetSystemState MPU_uxTaskGetSystemState
  63. #define ulTaskGetIdleRunTimeCounter MPU_ulTaskGetIdleRunTimeCounter
  64. #define ulTaskGetIdleRunTimePercent MPU_ulTaskGetIdleRunTimePercent
  65. #define xTaskGenericNotify MPU_xTaskGenericNotify
  66. #define xTaskGenericNotifyWait MPU_xTaskGenericNotifyWait
  67. #define ulTaskGenericNotifyTake MPU_ulTaskGenericNotifyTake
  68. #define xTaskGenericNotifyStateClear MPU_xTaskGenericNotifyStateClear
  69. #define ulTaskGenericNotifyValueClear MPU_ulTaskGenericNotifyValueClear
  70. #define vTaskSetTimeOutState MPU_vTaskSetTimeOutState
  71. #define xTaskCheckForTimeOut MPU_xTaskCheckForTimeOut
  72. #define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle
  73. #define xTaskGetSchedulerState MPU_xTaskGetSchedulerState
  74. #if ( configUSE_MPU_WRAPPERS_V1 == 0 )
  75. #define ulTaskGetRunTimeCounter MPU_ulTaskGetRunTimeCounter
  76. #define ulTaskGetRunTimePercent MPU_ulTaskGetRunTimePercent
  77. #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
  78. /* Privileged only wrappers for Task APIs. These are needed so that
  79. * the application can use opaque handles maintained in mpu_wrappers.c
  80. * with all the APIs. */
  81. #define xTaskCreate MPU_xTaskCreate
  82. #define xTaskCreateStatic MPU_xTaskCreateStatic
  83. #define vTaskDelete MPU_vTaskDelete
  84. #define vTaskPrioritySet MPU_vTaskPrioritySet
  85. #define xTaskGetHandle MPU_xTaskGetHandle
  86. #define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook
  87. #if ( configUSE_MPU_WRAPPERS_V1 == 0 )
  88. #define pcTaskGetName MPU_pcTaskGetName
  89. #define xTaskCreateRestricted MPU_xTaskCreateRestricted
  90. #define xTaskCreateRestrictedStatic MPU_xTaskCreateRestrictedStatic
  91. #define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions
  92. #define xTaskGetStaticBuffers MPU_xTaskGetStaticBuffers
  93. #define uxTaskPriorityGetFromISR MPU_uxTaskPriorityGetFromISR
  94. #define uxTaskBasePriorityGet MPU_uxTaskBasePriorityGet
  95. #define uxTaskBasePriorityGetFromISR MPU_uxTaskBasePriorityGetFromISR
  96. #define xTaskResumeFromISR MPU_xTaskResumeFromISR
  97. #define xTaskGetApplicationTaskTagFromISR MPU_xTaskGetApplicationTaskTagFromISR
  98. #define xTaskGenericNotifyFromISR MPU_xTaskGenericNotifyFromISR
  99. #define vTaskGenericNotifyGiveFromISR MPU_vTaskGenericNotifyGiveFromISR
  100. #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
  101. /* Map standard queue.h API functions to the MPU equivalents. */
  102. #define xQueueGenericSend MPU_xQueueGenericSend
  103. #define xQueueReceive MPU_xQueueReceive
  104. #define xQueuePeek MPU_xQueuePeek
  105. #define xQueueSemaphoreTake MPU_xQueueSemaphoreTake
  106. #define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting
  107. #define uxQueueSpacesAvailable MPU_uxQueueSpacesAvailable
  108. #define xQueueGetMutexHolder MPU_xQueueGetMutexHolder
  109. #define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive
  110. #define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive
  111. #define xQueueAddToSet MPU_xQueueAddToSet
  112. #define xQueueSelectFromSet MPU_xQueueSelectFromSet
  113. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  114. #define vQueueAddToRegistry MPU_vQueueAddToRegistry
  115. #define vQueueUnregisterQueue MPU_vQueueUnregisterQueue
  116. #define pcQueueGetName MPU_pcQueueGetName
  117. #endif /* #if ( configQUEUE_REGISTRY_SIZE > 0 ) */
  118. /* Privileged only wrappers for Queue APIs. These are needed so that
  119. * the application can use opaque handles maintained in mpu_wrappers.c
  120. * with all the APIs. */
  121. #define vQueueDelete MPU_vQueueDelete
  122. #define xQueueCreateMutex MPU_xQueueCreateMutex
  123. #define xQueueCreateMutexStatic MPU_xQueueCreateMutexStatic
  124. #define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore
  125. #define xQueueCreateCountingSemaphoreStatic MPU_xQueueCreateCountingSemaphoreStatic
  126. #define xQueueGenericCreate MPU_xQueueGenericCreate
  127. #define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic
  128. #define xQueueGenericReset MPU_xQueueGenericReset
  129. #define xQueueCreateSet MPU_xQueueCreateSet
  130. #define xQueueRemoveFromSet MPU_xQueueRemoveFromSet
  131. #if ( configUSE_MPU_WRAPPERS_V1 == 0 )
  132. #define xQueueGenericGetStaticBuffers MPU_xQueueGenericGetStaticBuffers
  133. #define xQueueGenericSendFromISR MPU_xQueueGenericSendFromISR
  134. #define xQueueGiveFromISR MPU_xQueueGiveFromISR
  135. #define xQueuePeekFromISR MPU_xQueuePeekFromISR
  136. #define xQueueReceiveFromISR MPU_xQueueReceiveFromISR
  137. #define xQueueIsQueueEmptyFromISR MPU_xQueueIsQueueEmptyFromISR
  138. #define xQueueIsQueueFullFromISR MPU_xQueueIsQueueFullFromISR
  139. #define uxQueueMessagesWaitingFromISR MPU_uxQueueMessagesWaitingFromISR
  140. #define xQueueGetMutexHolderFromISR MPU_xQueueGetMutexHolderFromISR
  141. #define xQueueSelectFromSetFromISR MPU_xQueueSelectFromSetFromISR
  142. #endif /* if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
  143. /* Map standard timer.h API functions to the MPU equivalents. */
  144. #define pvTimerGetTimerID MPU_pvTimerGetTimerID
  145. #define vTimerSetTimerID MPU_vTimerSetTimerID
  146. #define xTimerIsTimerActive MPU_xTimerIsTimerActive
  147. #define xTimerGetTimerDaemonTaskHandle MPU_xTimerGetTimerDaemonTaskHandle
  148. #define xTimerGenericCommandFromTask MPU_xTimerGenericCommandFromTask
  149. #define pcTimerGetName MPU_pcTimerGetName
  150. #define vTimerSetReloadMode MPU_vTimerSetReloadMode
  151. #define uxTimerGetReloadMode MPU_uxTimerGetReloadMode
  152. #define xTimerGetPeriod MPU_xTimerGetPeriod
  153. #define xTimerGetExpiryTime MPU_xTimerGetExpiryTime
  154. /* Privileged only wrappers for Timer APIs. These are needed so that
  155. * the application can use opaque handles maintained in mpu_wrappers.c
  156. * with all the APIs. */
  157. #if ( configUSE_MPU_WRAPPERS_V1 == 0 )
  158. #define xTimerGetReloadMode MPU_xTimerGetReloadMode
  159. #define xTimerCreate MPU_xTimerCreate
  160. #define xTimerCreateStatic MPU_xTimerCreateStatic
  161. #define xTimerGetStaticBuffer MPU_xTimerGetStaticBuffer
  162. #define xTimerGenericCommandFromISR MPU_xTimerGenericCommandFromISR
  163. #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
  164. /* Map standard event_group.h API functions to the MPU equivalents. */
  165. #define xEventGroupWaitBits MPU_xEventGroupWaitBits
  166. #define xEventGroupClearBits MPU_xEventGroupClearBits
  167. #define xEventGroupSetBits MPU_xEventGroupSetBits
  168. #define xEventGroupSync MPU_xEventGroupSync
  169. #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
  170. #define uxEventGroupGetNumber MPU_uxEventGroupGetNumber
  171. #define vEventGroupSetNumber MPU_vEventGroupSetNumber
  172. #endif /* #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) ) */
  173. /* Privileged only wrappers for Event Group APIs. These are needed so that
  174. * the application can use opaque handles maintained in mpu_wrappers.c
  175. * with all the APIs. */
  176. #define xEventGroupCreate MPU_xEventGroupCreate
  177. #define xEventGroupCreateStatic MPU_xEventGroupCreateStatic
  178. #define vEventGroupDelete MPU_vEventGroupDelete
  179. #if ( configUSE_MPU_WRAPPERS_V1 == 0 )
  180. #define xEventGroupGetStaticBuffer MPU_xEventGroupGetStaticBuffer
  181. #define xEventGroupClearBitsFromISR MPU_xEventGroupClearBitsFromISR
  182. #define xEventGroupSetBitsFromISR MPU_xEventGroupSetBitsFromISR
  183. #define xEventGroupGetBitsFromISR MPU_xEventGroupGetBitsFromISR
  184. #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
  185. /* Map standard message/stream_buffer.h API functions to the MPU
  186. * equivalents. */
  187. #define xStreamBufferSend MPU_xStreamBufferSend
  188. #define xStreamBufferReceive MPU_xStreamBufferReceive
  189. #define xStreamBufferIsFull MPU_xStreamBufferIsFull
  190. #define xStreamBufferIsEmpty MPU_xStreamBufferIsEmpty
  191. #define xStreamBufferSpacesAvailable MPU_xStreamBufferSpacesAvailable
  192. #define xStreamBufferBytesAvailable MPU_xStreamBufferBytesAvailable
  193. #define xStreamBufferSetTriggerLevel MPU_xStreamBufferSetTriggerLevel
  194. #define xStreamBufferNextMessageLengthBytes MPU_xStreamBufferNextMessageLengthBytes
  195. /* Privileged only wrappers for Stream Buffer APIs. These are needed so that
  196. * the application can use opaque handles maintained in mpu_wrappers.c
  197. * with all the APIs. */
  198. #define xStreamBufferGenericCreate MPU_xStreamBufferGenericCreate
  199. #define xStreamBufferGenericCreateStatic MPU_xStreamBufferGenericCreateStatic
  200. #define vStreamBufferDelete MPU_vStreamBufferDelete
  201. #define xStreamBufferReset MPU_xStreamBufferReset
  202. #if ( configUSE_MPU_WRAPPERS_V1 == 0 )
  203. #define xStreamBufferGetStaticBuffers MPU_xStreamBufferGetStaticBuffers
  204. #define xStreamBufferSendFromISR MPU_xStreamBufferSendFromISR
  205. #define xStreamBufferReceiveFromISR MPU_xStreamBufferReceiveFromISR
  206. #define xStreamBufferSendCompletedFromISR MPU_xStreamBufferSendCompletedFromISR
  207. #define xStreamBufferReceiveCompletedFromISR MPU_xStreamBufferReceiveCompletedFromISR
  208. #define xStreamBufferResetFromISR MPU_xStreamBufferResetFromISR
  209. #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
  210. #if ( ( configUSE_MPU_WRAPPERS_V1 == 0 ) && ( configENABLE_ACCESS_CONTROL_LIST == 1 ) )
  211. #define vGrantAccessToTask( xTask, xTaskToGrantAccess ) vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xTaskToGrantAccess ) )
  212. #define vRevokeAccessToTask( xTask, xTaskToRevokeAccess ) vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xTaskToRevokeAccess ) )
  213. #define vGrantAccessToSemaphore( xTask, xSemaphoreToGrantAccess ) vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xSemaphoreToGrantAccess ) )
  214. #define vRevokeAccessToSemaphore( xTask, xSemaphoreToRevokeAccess ) vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xSemaphoreToRevokeAccess ) )
  215. #define vGrantAccessToQueue( xTask, xQueueToGrantAccess ) vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xQueueToGrantAccess ) )
  216. #define vRevokeAccessToQueue( xTask, xQueueToRevokeAccess ) vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xQueueToRevokeAccess ) )
  217. #define vGrantAccessToQueueSet( xTask, xQueueSetToGrantAccess ) vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xQueueSetToGrantAccess ) )
  218. #define vRevokeAccessToQueueSet( xTask, xQueueSetToRevokeAccess ) vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xQueueSetToRevokeAccess ) )
  219. #define vGrantAccessToEventGroup( xTask, xEventGroupToGrantAccess ) vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xEventGroupToGrantAccess ) )
  220. #define vRevokeAccessToEventGroup( xTask, xEventGroupToRevokeAccess ) vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xEventGroupToRevokeAccess ) )
  221. #define vGrantAccessToStreamBuffer( xTask, xStreamBufferToGrantAccess ) vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xStreamBufferToGrantAccess ) )
  222. #define vRevokeAccessToStreamBuffer( xTask, xStreamBufferToRevokeAccess ) vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xStreamBufferToRevokeAccess ) )
  223. #define vGrantAccessToMessageBuffer( xTask, xMessageBufferToGrantAccess ) vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xMessageBufferToGrantAccess ) )
  224. #define vRevokeAccessToMessageBuffer( xTask, xMessageBufferToRevokeAccess ) vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xMessageBufferToRevokeAccess ) )
  225. #define vGrantAccessToTimer( xTask, xTimerToGrantAccess ) vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xTimerToGrantAccess ) )
  226. #define vRevokeAccessToTimer( xTask, xTimerToRevokeAccess ) vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xTimerToRevokeAccess ) )
  227. #endif /* #if ( ( configUSE_MPU_WRAPPERS_V1 == 0 ) && ( configENABLE_ACCESS_CONTROL_LIST == 1 ) ) */
  228. #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
  229. #define PRIVILEGED_FUNCTION __attribute__( ( section( "privileged_functions" ) ) )
  230. #define PRIVILEGED_DATA __attribute__( ( section( "privileged_data" ) ) )
  231. #define FREERTOS_SYSTEM_CALL __attribute__( ( section( "freertos_system_calls" ) ) )
  232. #else /* portUSING_MPU_WRAPPERS */
  233. #define PRIVILEGED_FUNCTION
  234. #define PRIVILEGED_DATA
  235. #define FREERTOS_SYSTEM_CALL
  236. #endif /* portUSING_MPU_WRAPPERS */
  237. #endif /* MPU_WRAPPERS_H */