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