Prusa MINI Firmware overview
mpu_wrappers.h
Go to the documentation of this file.
1 /*
2  FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.
3  All rights reserved
4 
5  VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
6 
7  This file is part of the FreeRTOS distribution.
8 
9  FreeRTOS is free software; you can redistribute it and/or modify it under
10  the terms of the GNU General Public License (version 2) as published by the
11  Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.
12 
13  ***************************************************************************
14  >>! NOTE: The modification to the GPL is included to allow you to !<<
15  >>! distribute a combined work that includes FreeRTOS without being !<<
16  >>! obliged to provide the source code for proprietary components !<<
17  >>! outside of the FreeRTOS kernel. !<<
18  ***************************************************************************
19 
20  FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
21  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
22  FOR A PARTICULAR PURPOSE. Full license text is available on the following
23  link: http://www.freertos.org/a00114.html
24 
25  ***************************************************************************
26  * *
27  * FreeRTOS provides completely free yet professionally developed, *
28  * robust, strictly quality controlled, supported, and cross *
29  * platform software that is more than just the market leader, it *
30  * is the industry's de facto standard. *
31  * *
32  * Help yourself get started quickly while simultaneously helping *
33  * to support the FreeRTOS project by purchasing a FreeRTOS *
34  * tutorial book, reference manual, or both: *
35  * http://www.FreeRTOS.org/Documentation *
36  * *
37  ***************************************************************************
38 
39  http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
40  the FAQ page "My application does not run, what could be wrong?". Have you
41  defined configASSERT()?
42 
43  http://www.FreeRTOS.org/support - In return for receiving this top quality
44  embedded software for free we request you assist our global community by
45  participating in the support forum.
46 
47  http://www.FreeRTOS.org/training - Investing in training allows your team to
48  be as productive as possible as early as possible. Now you can receive
49  FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
50  Ltd, and the world's leading authority on the world's leading RTOS.
51 
52  http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
53  including FreeRTOS+Trace - an indispensable productivity tool, a DOS
54  compatible FAT file system, and our tiny thread aware UDP/IP stack.
55 
56  http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
57  Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
58 
59  http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
60  Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
61  licenses offer ticketed support, indemnification and commercial middleware.
62 
63  http://www.SafeRTOS.com - High Integrity Systems also provide a safety
64  engineered and independently SIL3 certified version for use in safety and
65  mission critical applications that require provable dependability.
66 
67  1 tab == 4 spaces!
68 */
69 
70 #ifndef MPU_WRAPPERS_H
71 #define MPU_WRAPPERS_H
72 
73 /* This file redefines API functions to be called through a wrapper macro, but
74 only for ports that are using the MPU. */
75 #ifdef portUSING_MPU_WRAPPERS
76 
77  /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is
78  included from queue.c or task.c to prevent it from having an effect within
79  those files. */
80  #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
81 
82  /*
83  * Map standard (non MPU) API functions to equivalents that start
84  * "MPU_". This will cause the application code to call the MPU_
85  * version, which wraps the non-MPU version with privilege promoting
86  * then demoting code, so the kernel code always runs will full
87  * privileges.
88  */
89 
90  /* Map standard tasks.h API functions to the MPU equivalents. */
91  #define xTaskCreate MPU_xTaskCreate
92  #define xTaskCreateStatic MPU_xTaskCreateStatic
93  #define xTaskCreateRestricted MPU_xTaskCreateRestricted
94  #define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions
95  #define vTaskDelete MPU_vTaskDelete
96  #define vTaskDelay MPU_vTaskDelay
97  #define vTaskDelayUntil MPU_vTaskDelayUntil
98  #define xTaskAbortDelay MPU_xTaskAbortDelay
99  #define uxTaskPriorityGet MPU_uxTaskPriorityGet
100  #define eTaskGetState MPU_eTaskGetState
101  #define vTaskGetInfo MPU_vTaskGetInfo
102  #define vTaskPrioritySet MPU_vTaskPrioritySet
103  #define vTaskSuspend MPU_vTaskSuspend
104  #define vTaskResume MPU_vTaskResume
105  #define vTaskSuspendAll MPU_vTaskSuspendAll
106  #define xTaskResumeAll MPU_xTaskResumeAll
107  #define xTaskGetTickCount MPU_xTaskGetTickCount
108  #define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks
109  #define pcTaskGetName MPU_pcTaskGetName
110  #define xTaskGetHandle MPU_xTaskGetHandle
111  #define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark
112  #define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag
113  #define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag
114  #define vTaskSetThreadLocalStoragePointer MPU_vTaskSetThreadLocalStoragePointer
115  #define pvTaskGetThreadLocalStoragePointer MPU_pvTaskGetThreadLocalStoragePointer
116  #define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook
117  #define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle
118  #define uxTaskGetSystemState MPU_uxTaskGetSystemState
119  #define vTaskList MPU_vTaskList
120  #define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats
121  #define xTaskGenericNotify MPU_xTaskGenericNotify
122  #define xTaskNotifyWait MPU_xTaskNotifyWait
123  #define ulTaskNotifyTake MPU_ulTaskNotifyTake
124  #define xTaskNotifyStateClear MPU_xTaskNotifyStateClear
125 
126  #define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle
127  #define vTaskSetTimeOutState MPU_vTaskSetTimeOutState
128  #define xTaskCheckForTimeOut MPU_xTaskCheckForTimeOut
129  #define xTaskGetSchedulerState MPU_xTaskGetSchedulerState
130 
131  /* Map standard queue.h API functions to the MPU equivalents. */
132  #define xQueueGenericSend MPU_xQueueGenericSend
133  #define xQueueGenericReceive MPU_xQueueGenericReceive
134  #define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting
135  #define uxQueueSpacesAvailable MPU_uxQueueSpacesAvailable
136  #define vQueueDelete MPU_vQueueDelete
137  #define xQueueCreateMutex MPU_xQueueCreateMutex
138  #define xQueueCreateMutexStatic MPU_xQueueCreateMutexStatic
139  #define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore
140  #define xQueueCreateCountingSemaphoreStatic MPU_xQueueCreateCountingSemaphoreStatic
141  #define xQueueGetMutexHolder MPU_xQueueGetMutexHolder
142  #define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive
143  #define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive
144  #define xQueueGenericCreate MPU_xQueueGenericCreate
145  #define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic
146  #define xQueueCreateSet MPU_xQueueCreateSet
147  #define xQueueAddToSet MPU_xQueueAddToSet
148  #define xQueueRemoveFromSet MPU_xQueueRemoveFromSet
149  #define xQueueSelectFromSet MPU_xQueueSelectFromSet
150  #define xQueueGenericReset MPU_xQueueGenericReset
151 
152  #if( configQUEUE_REGISTRY_SIZE > 0 )
153  #define vQueueAddToRegistry MPU_vQueueAddToRegistry
154  #define vQueueUnregisterQueue MPU_vQueueUnregisterQueue
155  #define pcQueueGetName MPU_pcQueueGetName
156  #endif
157 
158  /* Map standard timer.h API functions to the MPU equivalents. */
159  #define xTimerCreate MPU_xTimerCreate
160  #define xTimerCreateStatic MPU_xTimerCreateStatic
161  #define pvTimerGetTimerID MPU_pvTimerGetTimerID
162  #define vTimerSetTimerID MPU_vTimerSetTimerID
163  #define xTimerIsTimerActive MPU_xTimerIsTimerActive
164  #define xTimerGetTimerDaemonTaskHandle MPU_xTimerGetTimerDaemonTaskHandle
165  #define xTimerPendFunctionCall MPU_xTimerPendFunctionCall
166  #define pcTimerGetName MPU_pcTimerGetName
167  #define xTimerGetPeriod MPU_xTimerGetPeriod
168  #define xTimerGetExpiryTime MPU_xTimerGetExpiryTime
169  #define xTimerGenericCommand MPU_xTimerGenericCommand
170 
171  /* Map standard event_group.h API functions to the MPU equivalents. */
172  #define xEventGroupCreate MPU_xEventGroupCreate
173  #define xEventGroupCreateStatic MPU_xEventGroupCreateStatic
174  #define xEventGroupWaitBits MPU_xEventGroupWaitBits
175  #define xEventGroupClearBits MPU_xEventGroupClearBits
176  #define xEventGroupSetBits MPU_xEventGroupSetBits
177  #define xEventGroupSync MPU_xEventGroupSync
178  #define vEventGroupDelete MPU_vEventGroupDelete
179 
180  /* Remove the privileged function macro. */
181  #define PRIVILEGED_FUNCTION
182 
183  #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
184 
185  /* Ensure API functions go in the privileged execution section. */
186 #if defined(__ICCARM__)
187 
188 #define PRIVILEGED_FUNCTION _Pragma("location= \"privileged_functions\"")
189 #define PRIVILEGED_DATA _Pragma("location= \"privileged_data\"")
190 #define PRIVILEGED_INITIALIZED_DATA _Pragma("location= \"privileged_initialized_data\"")
191 
192 #else
193 
194 #define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions")))
195 #define PRIVILEGED_DATA __attribute__((section("privileged_data")))
196 #define PRIVILEGED_INITIALIZED_DATA PRIVILEGED_DATA
197 
198 #endif
199 
200  #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
201 
202 #else /* portUSING_MPU_WRAPPERS */
203 
204  #define PRIVILEGED_FUNCTION
205  #define PRIVILEGED_DATA
206  #define PRIVILEGED_INITIALIZED_DATA
207  #define portUSING_MPU_WRAPPERS 0
208 
209 #endif /* portUSING_MPU_WRAPPERS */
210 
211 
212 #endif /* MPU_WRAPPERS_H */