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