1 /* 2 * FreeRTOS Kernel V10.3.1 3 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a copy 6 * of this software and associated documentation files (the "Software"), to deal 7 * in the Software without restriction, including without limitation the rights 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 * copies of the Software, and to permit persons to whom the Software is 10 * furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be included in 13 * all copies or substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 * SOFTWARE. 22 * 23 * http://www.FreeRTOS.org 24 * http://aws.amazon.com/freertos 25 * 26 * 1 tab == 4 spaces! 27 */ 28 29 #ifndef MPU_WRAPPERS_H 30 #define MPU_WRAPPERS_H 31 32 /* This file redefines API functions to be called through a wrapper macro, but 33 only for ports that are using the MPU. */ 34 #ifdef portUSING_MPU_WRAPPERS 35 36 /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is 37 included from queue.c or task.c to prevent it from having an effect within 38 those files. */ 39 # ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE 40 41 /* 42 * Map standard (non MPU) API functions to equivalents that start 43 * "MPU_". This will cause the application code to call the MPU_ 44 * version, which wraps the non-MPU version with privilege promoting 45 * then demoting code, so the kernel code always runs will full 46 * privileges. 47 */ 48 49 /* Map standard tasks.h API functions to the MPU equivalents. */ 50 # define xTaskCreate MPU_xTaskCreate 51 # define xTaskCreateStatic MPU_xTaskCreateStatic 52 # define xTaskCreateRestricted MPU_xTaskCreateRestricted 53 # define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions 54 # define vTaskDelete MPU_vTaskDelete 55 # define vTaskDelay MPU_vTaskDelay 56 # define vTaskDelayUntil MPU_vTaskDelayUntil 57 # define xTaskAbortDelay MPU_xTaskAbortDelay 58 # define uxTaskPriorityGet MPU_uxTaskPriorityGet 59 # define eTaskGetState MPU_eTaskGetState 60 # define vTaskGetInfo MPU_vTaskGetInfo 61 # define vTaskPrioritySet MPU_vTaskPrioritySet 62 # define vTaskSuspend MPU_vTaskSuspend 63 # define vTaskResume MPU_vTaskResume 64 # define vTaskSuspendAll MPU_vTaskSuspendAll 65 # define xTaskResumeAll MPU_xTaskResumeAll 66 # define xTaskGetTickCount MPU_xTaskGetTickCount 67 # define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks 68 # define pcTaskGetName MPU_pcTaskGetName 69 # define xTaskGetHandle MPU_xTaskGetHandle 70 # define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark 71 # define uxTaskGetStackHighWaterMark2 MPU_uxTaskGetStackHighWaterMark2 72 # define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag 73 # define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag 74 # define vTaskSetThreadLocalStoragePointer \ 75 MPU_vTaskSetThreadLocalStoragePointer 76 # define pvTaskGetThreadLocalStoragePointer \ 77 MPU_pvTaskGetThreadLocalStoragePointer 78 # define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook 79 # define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle 80 # define uxTaskGetSystemState MPU_uxTaskGetSystemState 81 # define vTaskList MPU_vTaskList 82 # define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats 83 # define ulTaskGetIdleRunTimeCounter MPU_ulTaskGetIdleRunTimeCounter 84 # define xTaskGenericNotify MPU_xTaskGenericNotify 85 # define xTaskNotifyWait MPU_xTaskNotifyWait 86 # define ulTaskNotifyTake MPU_ulTaskNotifyTake 87 # define xTaskNotifyStateClear MPU_xTaskNotifyStateClear 88 # define ulTaskNotifyValueClear MPU_ulTaskNotifyValueClear 89 # define xTaskCatchUpTicks MPU_xTaskCatchUpTicks 90 91 # define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle 92 # define vTaskSetTimeOutState MPU_vTaskSetTimeOutState 93 # define xTaskCheckForTimeOut MPU_xTaskCheckForTimeOut 94 # define xTaskGetSchedulerState MPU_xTaskGetSchedulerState 95 96 /* Map standard queue.h API functions to the MPU equivalents. */ 97 # define xQueueGenericSend MPU_xQueueGenericSend 98 # define xQueueReceive MPU_xQueueReceive 99 # define xQueuePeek MPU_xQueuePeek 100 # define xQueueSemaphoreTake MPU_xQueueSemaphoreTake 101 # define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting 102 # define uxQueueSpacesAvailable MPU_uxQueueSpacesAvailable 103 # define vQueueDelete MPU_vQueueDelete 104 # define xQueueCreateMutex MPU_xQueueCreateMutex 105 # define xQueueCreateMutexStatic MPU_xQueueCreateMutexStatic 106 # define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore 107 # define xQueueCreateCountingSemaphoreStatic \ 108 MPU_xQueueCreateCountingSemaphoreStatic 109 # define xQueueGetMutexHolder MPU_xQueueGetMutexHolder 110 # define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive 111 # define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive 112 # define xQueueGenericCreate MPU_xQueueGenericCreate 113 # define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic 114 # define xQueueCreateSet MPU_xQueueCreateSet 115 # define xQueueAddToSet MPU_xQueueAddToSet 116 # define xQueueRemoveFromSet MPU_xQueueRemoveFromSet 117 # define xQueueSelectFromSet MPU_xQueueSelectFromSet 118 # define xQueueGenericReset MPU_xQueueGenericReset 119 120 # if (configQUEUE_REGISTRY_SIZE > 0) 121 # define vQueueAddToRegistry MPU_vQueueAddToRegistry 122 # define vQueueUnregisterQueue MPU_vQueueUnregisterQueue 123 # define pcQueueGetName MPU_pcQueueGetName 124 # endif 125 126 /* Map standard timer.h API functions to the MPU equivalents. */ 127 # define xTimerCreate MPU_xTimerCreate 128 # define xTimerCreateStatic MPU_xTimerCreateStatic 129 # define pvTimerGetTimerID MPU_pvTimerGetTimerID 130 # define vTimerSetTimerID MPU_vTimerSetTimerID 131 # define xTimerIsTimerActive MPU_xTimerIsTimerActive 132 # define xTimerGetTimerDaemonTaskHandle \ 133 MPU_xTimerGetTimerDaemonTaskHandle 134 # define xTimerPendFunctionCall MPU_xTimerPendFunctionCall 135 # define pcTimerGetName MPU_pcTimerGetName 136 # define vTimerSetReloadMode MPU_vTimerSetReloadMode 137 # define uxTimerGetReloadMode MPU_uxTimerGetReloadMode 138 # define xTimerGetPeriod MPU_xTimerGetPeriod 139 # define xTimerGetExpiryTime MPU_xTimerGetExpiryTime 140 # define xTimerGenericCommand MPU_xTimerGenericCommand 141 142 /* Map standard event_group.h API functions to the MPU equivalents. */ 143 # define xEventGroupCreate MPU_xEventGroupCreate 144 # define xEventGroupCreateStatic MPU_xEventGroupCreateStatic 145 # define xEventGroupWaitBits MPU_xEventGroupWaitBits 146 # define xEventGroupClearBits MPU_xEventGroupClearBits 147 # define xEventGroupSetBits MPU_xEventGroupSetBits 148 # define xEventGroupSync MPU_xEventGroupSync 149 # define vEventGroupDelete MPU_vEventGroupDelete 150 151 /* Map standard message/stream_buffer.h API functions to the MPU 152 equivalents. */ 153 # define xStreamBufferSend MPU_xStreamBufferSend 154 # define xStreamBufferReceive MPU_xStreamBufferReceive 155 # define xStreamBufferNextMessageLengthBytes \ 156 MPU_xStreamBufferNextMessageLengthBytes 157 # define vStreamBufferDelete MPU_vStreamBufferDelete 158 # define xStreamBufferIsFull MPU_xStreamBufferIsFull 159 # define xStreamBufferIsEmpty MPU_xStreamBufferIsEmpty 160 # define xStreamBufferReset MPU_xStreamBufferReset 161 # define xStreamBufferSpacesAvailable MPU_xStreamBufferSpacesAvailable 162 # define xStreamBufferBytesAvailable MPU_xStreamBufferBytesAvailable 163 # define xStreamBufferSetTriggerLevel MPU_xStreamBufferSetTriggerLevel 164 # define xStreamBufferGenericCreate MPU_xStreamBufferGenericCreate 165 # define xStreamBufferGenericCreateStatic \ 166 MPU_xStreamBufferGenericCreateStatic 167 168 /* Remove the privileged function macro, but keep the PRIVILEGED_DATA 169 macro so applications can place data in privileged access sections 170 (useful when using statically allocated objects). */ 171 # define PRIVILEGED_FUNCTION 172 # define PRIVILEGED_DATA __attribute__((section("privileged_data"))) 173 # define FREERTOS_SYSTEM_CALL 174 175 # else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ 176 177 /* Ensure API functions go in the privileged execution section. */ 178 # define PRIVILEGED_FUNCTION \ 179 __attribute__((section("privileged_functions"))) 180 # define PRIVILEGED_DATA __attribute__((section("privileged_data"))) 181 # define FREERTOS_SYSTEM_CALL \ 182 __attribute__((section("freertos_system_calls"))) 183 184 # endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */ 185 186 #else /* portUSING_MPU_WRAPPERS */ 187 188 # define PRIVILEGED_FUNCTION 189 # define PRIVILEGED_DATA 190 # define FREERTOS_SYSTEM_CALL 191 # define portUSING_MPU_WRAPPERS 0 192 193 #endif /* portUSING_MPU_WRAPPERS */ 194 195 #endif /* MPU_WRAPPERS_H */ 196