]> begriffs open source - freertos/blob - include/mpu_prototypes.h
Add support for privileged heap to ARMV8-M ports (#85)
[freertos] / include / mpu_prototypes.h
1 /*\r
2  * FreeRTOS Kernel V10.3.1\r
3  * Copyright (C) 2020 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 /*\r
29  * When the MPU is used the standard (non MPU) API functions are mapped to\r
30  * equivalents that start "MPU_", the prototypes for which are defined in this\r
31  * header files.  This will cause the application code to call the MPU_ version\r
32  * which wraps the non-MPU version with privilege promoting then demoting code,\r
33  * so the kernel code always runs will full privileges.\r
34  */\r
35 \r
36 \r
37 #ifndef MPU_PROTOTYPES_H\r
38 #define MPU_PROTOTYPES_H\r
39 \r
40 /* MPU versions of tasks.h API functions. */\r
41 BaseType_t MPU_xTaskCreate( TaskFunction_t pxTaskCode,\r
42                             const char * const pcName,\r
43                             const uint16_t usStackDepth,\r
44                             void * const pvParameters,\r
45                             UBaseType_t uxPriority,\r
46                             TaskHandle_t * const pxCreatedTask ) FREERTOS_SYSTEM_CALL;\r
47 TaskHandle_t MPU_xTaskCreateStatic( TaskFunction_t pxTaskCode,\r
48                                     const char * const pcName,\r
49                                     const uint32_t ulStackDepth,\r
50                                     void * const pvParameters,\r
51                                     UBaseType_t uxPriority,\r
52                                     StackType_t * const puxStackBuffer,\r
53                                     StaticTask_t * const pxTaskBuffer ) FREERTOS_SYSTEM_CALL;\r
54 BaseType_t MPU_xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition,\r
55                                       TaskHandle_t * pxCreatedTask ) FREERTOS_SYSTEM_CALL;\r
56 BaseType_t MPU_xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition,\r
57                                             TaskHandle_t * pxCreatedTask ) FREERTOS_SYSTEM_CALL;\r
58 void MPU_vTaskAllocateMPURegions( TaskHandle_t xTask,\r
59                                   const MemoryRegion_t * const pxRegions ) FREERTOS_SYSTEM_CALL;\r
60 void MPU_vTaskDelete( TaskHandle_t xTaskToDelete ) FREERTOS_SYSTEM_CALL;\r
61 void MPU_vTaskDelay( const TickType_t xTicksToDelay ) FREERTOS_SYSTEM_CALL;\r
62 void MPU_vTaskDelayUntil( TickType_t * const pxPreviousWakeTime,\r
63                           const TickType_t xTimeIncrement ) FREERTOS_SYSTEM_CALL;\r
64 BaseType_t MPU_xTaskAbortDelay( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
65 UBaseType_t MPU_uxTaskPriorityGet( const TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
66 eTaskState MPU_eTaskGetState( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
67 void MPU_vTaskGetInfo( TaskHandle_t xTask,\r
68                        TaskStatus_t * pxTaskStatus,\r
69                        BaseType_t xGetFreeStackSpace,\r
70                        eTaskState eState ) FREERTOS_SYSTEM_CALL;\r
71 void MPU_vTaskPrioritySet( TaskHandle_t xTask,\r
72                            UBaseType_t uxNewPriority ) FREERTOS_SYSTEM_CALL;\r
73 void MPU_vTaskSuspend( TaskHandle_t xTaskToSuspend ) FREERTOS_SYSTEM_CALL;\r
74 void MPU_vTaskResume( TaskHandle_t xTaskToResume ) FREERTOS_SYSTEM_CALL;\r
75 void MPU_vTaskStartScheduler( void ) FREERTOS_SYSTEM_CALL;\r
76 void MPU_vTaskSuspendAll( void ) FREERTOS_SYSTEM_CALL;\r
77 BaseType_t MPU_xTaskResumeAll( void ) FREERTOS_SYSTEM_CALL;\r
78 TickType_t MPU_xTaskGetTickCount( void ) FREERTOS_SYSTEM_CALL;\r
79 UBaseType_t MPU_uxTaskGetNumberOfTasks( void ) FREERTOS_SYSTEM_CALL;\r
80 char * MPU_pcTaskGetName( TaskHandle_t xTaskToQuery ) FREERTOS_SYSTEM_CALL;\r
81 TaskHandle_t MPU_xTaskGetHandle( const char * pcNameToQuery ) FREERTOS_SYSTEM_CALL;\r
82 UBaseType_t MPU_uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
83 configSTACK_DEPTH_TYPE MPU_uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
84 void MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask,\r
85                                      TaskHookFunction_t pxHookFunction ) FREERTOS_SYSTEM_CALL;\r
86 TaskHookFunction_t MPU_xTaskGetApplicationTaskTag( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\r
87 void MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet,\r
88                                             BaseType_t xIndex,\r
89                                             void * pvValue ) FREERTOS_SYSTEM_CALL;\r
90 void * MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery,\r
91                                                BaseType_t xIndex ) FREERTOS_SYSTEM_CALL;\r
92 BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask,\r
93                                              void * pvParameter ) FREERTOS_SYSTEM_CALL;\r
94 TaskHandle_t MPU_xTaskGetIdleTaskHandle( void ) FREERTOS_SYSTEM_CALL;\r
95 UBaseType_t MPU_uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,\r
96                                       const UBaseType_t uxArraySize,\r
97                                       uint32_t * const pulTotalRunTime ) FREERTOS_SYSTEM_CALL;\r
98 uint32_t MPU_ulTaskGetIdleRunTimeCounter( void ) FREERTOS_SYSTEM_CALL;\r
99 void MPU_vTaskList( char * pcWriteBuffer ) FREERTOS_SYSTEM_CALL;\r
100 void MPU_vTaskGetRunTimeStats( char * pcWriteBuffer ) FREERTOS_SYSTEM_CALL;\r
101 BaseType_t MPU_xTaskGenericNotify( TaskHandle_t xTaskToNotify,\r
102                                    UBaseType_t uxIndexToNotify,\r
103                                    uint32_t ulValue,\r
104                                    eNotifyAction eAction,\r
105                                    uint32_t * pulPreviousNotificationValue ) FREERTOS_SYSTEM_CALL;\r
106 BaseType_t MPU_xTaskGenericNotifyWait( UBaseType_t uxIndexToWaitOn,\r
107                                        uint32_t ulBitsToClearOnEntry,\r
108                                        uint32_t ulBitsToClearOnExit,\r
109                                        uint32_t * pulNotificationValue,\r
110                                        TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
111 uint32_t MPU_ulTaskGenericNotifyTake( UBaseType_t uxIndexToWaitOn,\r
112                                       BaseType_t xClearCountOnExit,\r
113                                       TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
114 BaseType_t MPU_xTaskGenericNotifyStateClear( TaskHandle_t xTask,\r
115                                              UBaseType_t uxIndexToClear ) FREERTOS_SYSTEM_CALL;\r
116 uint32_t MPU_ulTaskGenericNotifyValueClear( TaskHandle_t xTask,\r
117                                             UBaseType_t uxIndexToClear,\r
118                                             uint32_t ulBitsToClear ) FREERTOS_SYSTEM_CALL;\r
119 BaseType_t MPU_xTaskIncrementTick( void ) FREERTOS_SYSTEM_CALL;\r
120 TaskHandle_t MPU_xTaskGetCurrentTaskHandle( void ) FREERTOS_SYSTEM_CALL;\r
121 void MPU_vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) FREERTOS_SYSTEM_CALL;\r
122 BaseType_t MPU_xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut,\r
123                                      TickType_t * const pxTicksToWait ) FREERTOS_SYSTEM_CALL;\r
124 void MPU_vTaskMissedYield( void ) FREERTOS_SYSTEM_CALL;\r
125 BaseType_t MPU_xTaskGetSchedulerState( void ) FREERTOS_SYSTEM_CALL;\r
126 BaseType_t MPU_xTaskCatchUpTicks( TickType_t xTicksToCatchUp ) FREERTOS_SYSTEM_CALL;\r
127 \r
128 /* MPU versions of queue.h API functions. */\r
129 BaseType_t MPU_xQueueGenericSend( QueueHandle_t xQueue,\r
130                                   const void * const pvItemToQueue,\r
131                                   TickType_t xTicksToWait,\r
132                                   const BaseType_t xCopyPosition ) FREERTOS_SYSTEM_CALL;\r
133 BaseType_t MPU_xQueueReceive( QueueHandle_t xQueue,\r
134                               void * const pvBuffer,\r
135                               TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
136 BaseType_t MPU_xQueuePeek( QueueHandle_t xQueue,\r
137                            void * const pvBuffer,\r
138                            TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
139 BaseType_t MPU_xQueueSemaphoreTake( QueueHandle_t xQueue,\r
140                                     TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
141 UBaseType_t MPU_uxQueueMessagesWaiting( const QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
142 UBaseType_t MPU_uxQueueSpacesAvailable( const QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
143 void MPU_vQueueDelete( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
144 QueueHandle_t MPU_xQueueCreateMutex( const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL;\r
145 QueueHandle_t MPU_xQueueCreateMutexStatic( const uint8_t ucQueueType,\r
146                                            StaticQueue_t * pxStaticQueue ) FREERTOS_SYSTEM_CALL;\r
147 QueueHandle_t MPU_xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount,\r
148                                                  const UBaseType_t uxInitialCount ) FREERTOS_SYSTEM_CALL;\r
149 QueueHandle_t MPU_xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount,\r
150                                                        const UBaseType_t uxInitialCount,\r
151                                                        StaticQueue_t * pxStaticQueue ) FREERTOS_SYSTEM_CALL;\r
152 TaskHandle_t MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore ) FREERTOS_SYSTEM_CALL;\r
153 BaseType_t MPU_xQueueTakeMutexRecursive( QueueHandle_t xMutex,\r
154                                          TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
155 BaseType_t MPU_xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) FREERTOS_SYSTEM_CALL;\r
156 void MPU_vQueueAddToRegistry( QueueHandle_t xQueue,\r
157                               const char * pcName ) FREERTOS_SYSTEM_CALL;\r
158 void MPU_vQueueUnregisterQueue( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
159 const char * MPU_pcQueueGetName( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
160 QueueHandle_t MPU_xQueueGenericCreate( const UBaseType_t uxQueueLength,\r
161                                        const UBaseType_t uxItemSize,\r
162                                        const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL;\r
163 QueueHandle_t MPU_xQueueGenericCreateStatic( const UBaseType_t uxQueueLength,\r
164                                              const UBaseType_t uxItemSize,\r
165                                              uint8_t * pucQueueStorage,\r
166                                              StaticQueue_t * pxStaticQueue,\r
167                                              const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL;\r
168 QueueSetHandle_t MPU_xQueueCreateSet( const UBaseType_t uxEventQueueLength ) FREERTOS_SYSTEM_CALL;\r
169 BaseType_t MPU_xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore,\r
170                                QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL;\r
171 BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,\r
172                                     QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL;\r
173 QueueSetMemberHandle_t MPU_xQueueSelectFromSet( QueueSetHandle_t xQueueSet,\r
174                                                 const TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
175 BaseType_t MPU_xQueueGenericReset( QueueHandle_t xQueue,\r
176                                    BaseType_t xNewQueue ) FREERTOS_SYSTEM_CALL;\r
177 void MPU_vQueueSetQueueNumber( QueueHandle_t xQueue,\r
178                                UBaseType_t uxQueueNumber ) FREERTOS_SYSTEM_CALL;\r
179 UBaseType_t MPU_uxQueueGetQueueNumber( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
180 uint8_t MPU_ucQueueGetQueueType( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\r
181 \r
182 /* MPU versions of timers.h API functions. */\r
183 TimerHandle_t MPU_xTimerCreate( const char * const pcTimerName,\r
184                                 const TickType_t xTimerPeriodInTicks,\r
185                                 const UBaseType_t uxAutoReload,\r
186                                 void * const pvTimerID,\r
187                                 TimerCallbackFunction_t pxCallbackFunction ) FREERTOS_SYSTEM_CALL;\r
188 TimerHandle_t MPU_xTimerCreateStatic( const char * const pcTimerName,\r
189                                       const TickType_t xTimerPeriodInTicks,\r
190                                       const UBaseType_t uxAutoReload,\r
191                                       void * const pvTimerID,\r
192                                       TimerCallbackFunction_t pxCallbackFunction,\r
193                                       StaticTimer_t * pxTimerBuffer ) FREERTOS_SYSTEM_CALL;\r
194 void * MPU_pvTimerGetTimerID( const TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
195 void MPU_vTimerSetTimerID( TimerHandle_t xTimer,\r
196                            void * pvNewID ) FREERTOS_SYSTEM_CALL;\r
197 BaseType_t MPU_xTimerIsTimerActive( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
198 TaskHandle_t MPU_xTimerGetTimerDaemonTaskHandle( void ) FREERTOS_SYSTEM_CALL;\r
199 BaseType_t MPU_xTimerPendFunctionCall( PendedFunction_t xFunctionToPend,\r
200                                        void * pvParameter1,\r
201                                        uint32_t ulParameter2,\r
202                                        TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
203 const char * MPU_pcTimerGetName( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
204 void MPU_vTimerSetReloadMode( TimerHandle_t xTimer,\r
205                               const UBaseType_t uxAutoReload ) FREERTOS_SYSTEM_CALL;\r
206 UBaseType_t MPU_uxTimerGetReloadMode( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
207 TickType_t MPU_xTimerGetPeriod( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
208 TickType_t MPU_xTimerGetExpiryTime( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\r
209 BaseType_t MPU_xTimerCreateTimerTask( void ) FREERTOS_SYSTEM_CALL;\r
210 BaseType_t MPU_xTimerGenericCommand( TimerHandle_t xTimer,\r
211                                      const BaseType_t xCommandID,\r
212                                      const TickType_t xOptionalValue,\r
213                                      BaseType_t * const pxHigherPriorityTaskWoken,\r
214                                      const TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
215 \r
216 /* MPU versions of event_group.h API functions. */\r
217 EventGroupHandle_t MPU_xEventGroupCreate( void ) FREERTOS_SYSTEM_CALL;\r
218 EventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer ) FREERTOS_SYSTEM_CALL;\r
219 EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup,\r
220                                      const EventBits_t uxBitsToWaitFor,\r
221                                      const BaseType_t xClearOnExit,\r
222                                      const BaseType_t xWaitForAllBits,\r
223                                      TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
224 EventBits_t MPU_xEventGroupClearBits( EventGroupHandle_t xEventGroup,\r
225                                       const EventBits_t uxBitsToClear ) FREERTOS_SYSTEM_CALL;\r
226 EventBits_t MPU_xEventGroupSetBits( EventGroupHandle_t xEventGroup,\r
227                                     const EventBits_t uxBitsToSet ) FREERTOS_SYSTEM_CALL;\r
228 EventBits_t MPU_xEventGroupSync( EventGroupHandle_t xEventGroup,\r
229                                  const EventBits_t uxBitsToSet,\r
230                                  const EventBits_t uxBitsToWaitFor,\r
231                                  TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
232 void MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ) FREERTOS_SYSTEM_CALL;\r
233 UBaseType_t MPU_uxEventGroupGetNumber( void * xEventGroup ) FREERTOS_SYSTEM_CALL;\r
234 \r
235 /* MPU versions of message/stream_buffer.h API functions. */\r
236 size_t MPU_xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,\r
237                               const void * pvTxData,\r
238                               size_t xDataLengthBytes,\r
239                               TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
240 size_t MPU_xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,\r
241                                  void * pvRxData,\r
242                                  size_t xBufferLengthBytes,\r
243                                  TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\r
244 size_t MPU_xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
245 void MPU_vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
246 BaseType_t MPU_xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
247 BaseType_t MPU_xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
248 BaseType_t MPU_xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
249 size_t MPU_xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
250 size_t MPU_xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
251 BaseType_t MPU_xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer,\r
252                                              size_t xTriggerLevel ) FREERTOS_SYSTEM_CALL;\r
253 StreamBufferHandle_t MPU_xStreamBufferGenericCreate( size_t xBufferSizeBytes,\r
254                                                      size_t xTriggerLevelBytes,\r
255                                                      BaseType_t xIsMessageBuffer ) FREERTOS_SYSTEM_CALL;\r
256 StreamBufferHandle_t MPU_xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,\r
257                                                            size_t xTriggerLevelBytes,\r
258                                                            BaseType_t xIsMessageBuffer,\r
259                                                            uint8_t * const pucStreamBufferStorageArea,\r
260                                                            StaticStreamBuffer_t * const pxStaticStreamBuffer ) FREERTOS_SYSTEM_CALL;\r
261 \r
262 \r
263 \r
264 #endif /* MPU_PROTOTYPES_H */\r