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