Welcome to mirror list, hosted at ThFree Co, Russian Federation.

mpu_wrappers.h « include - github.com/FreeRTOS/FreeRTOS-Kernel.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: b355ae44a416063c21153da3ac2100c98cdeb8ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/*
 * FreeRTOS Kernel <DEVELOPMENT BRANCH>
 * Copyright (C) 2021 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
 *
 * SPDX-License-Identifier: MIT
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 * the Software, and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * https://www.FreeRTOS.org
 * https://github.com/FreeRTOS
 *
 */

#ifndef MPU_WRAPPERS_H
#define MPU_WRAPPERS_H

/* This file redefines API functions to be called through a wrapper macro, but
 * only for ports that are using the MPU. */
#if ( portUSING_MPU_WRAPPERS == 1 )

/* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is
 * included from queue.c or task.c to prevent it from having an effect within
 * those files. */
    #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE

/*
 * Map standard (non MPU) API functions to equivalents that start
 * "MPU_".  This will cause the application code to call the MPU_
 * version, which wraps the non-MPU version with privilege promoting
 * then demoting code, so the kernel code always runs will full
 * privileges.
 */

/* Map standard task.h API functions to the MPU equivalents. */
        #define xTaskCreate                            MPU_xTaskCreate
        #define xTaskCreateStatic                      MPU_xTaskCreateStatic
        #define vTaskDelete                            MPU_vTaskDelete
        #define vTaskDelay                             MPU_vTaskDelay
        #define xTaskDelayUntil                        MPU_xTaskDelayUntil
        #define xTaskAbortDelay                        MPU_xTaskAbortDelay
        #define uxTaskPriorityGet                      MPU_uxTaskPriorityGet
        #define eTaskGetState                          MPU_eTaskGetState
        #define vTaskGetInfo                           MPU_vTaskGetInfo
        #define vTaskPrioritySet                       MPU_vTaskPrioritySet
        #define vTaskSuspend                           MPU_vTaskSuspend
        #define vTaskResume                            MPU_vTaskResume
        #define vTaskSuspendAll                        MPU_vTaskSuspendAll
        #define xTaskResumeAll                         MPU_xTaskResumeAll
        #define xTaskGetTickCount                      MPU_xTaskGetTickCount
        #define uxTaskGetNumberOfTasks                 MPU_uxTaskGetNumberOfTasks
        #define pcTaskGetName                          MPU_pcTaskGetName
        #define xTaskGetHandle                         MPU_xTaskGetHandle
        #define uxTaskGetStackHighWaterMark            MPU_uxTaskGetStackHighWaterMark
        #define uxTaskGetStackHighWaterMark2           MPU_uxTaskGetStackHighWaterMark2
        #define vTaskSetApplicationTaskTag             MPU_vTaskSetApplicationTaskTag
        #define xTaskGetApplicationTaskTag             MPU_xTaskGetApplicationTaskTag
        #define vTaskSetThreadLocalStoragePointer      MPU_vTaskSetThreadLocalStoragePointer
        #define pvTaskGetThreadLocalStoragePointer     MPU_pvTaskGetThreadLocalStoragePointer
        #define xTaskCallApplicationTaskHook           MPU_xTaskCallApplicationTaskHook
        #define xTaskGetIdleTaskHandle                 MPU_xTaskGetIdleTaskHandle
        #define uxTaskGetSystemState                   MPU_uxTaskGetSystemState
        #define vTaskList                              MPU_vTaskList
        #define vTaskGetRunTimeStats                   MPU_vTaskGetRunTimeStats
        #define ulTaskGetIdleRunTimeCounter            MPU_ulTaskGetIdleRunTimeCounter
        #define ulTaskGetIdleRunTimePercent            MPU_ulTaskGetIdleRunTimePercent
        #define xTaskGenericNotify                     MPU_xTaskGenericNotify
        #define xTaskGenericNotifyWait                 MPU_xTaskGenericNotifyWait
        #define ulTaskGenericNotifyTake                MPU_ulTaskGenericNotifyTake
        #define xTaskGenericNotifyStateClear           MPU_xTaskGenericNotifyStateClear
        #define ulTaskGenericNotifyValueClear          MPU_ulTaskGenericNotifyValueClear
        #define xTaskCatchUpTicks                      MPU_xTaskCatchUpTicks

        #define xTaskGetCurrentTaskHandle              MPU_xTaskGetCurrentTaskHandle
        #define vTaskSetTimeOutState                   MPU_vTaskSetTimeOutState
        #define xTaskCheckForTimeOut                   MPU_xTaskCheckForTimeOut
        #define xTaskGetSchedulerState                 MPU_xTaskGetSchedulerState

/* Map standard queue.h API functions to the MPU equivalents. */
        #define xQueueGenericSend                      MPU_xQueueGenericSend
        #define xQueueReceive                          MPU_xQueueReceive
        #define xQueuePeek                             MPU_xQueuePeek
        #define xQueueSemaphoreTake                    MPU_xQueueSemaphoreTake
        #define uxQueueMessagesWaiting                 MPU_uxQueueMessagesWaiting
        #define uxQueueSpacesAvailable                 MPU_uxQueueSpacesAvailable
        #define vQueueDelete                           MPU_vQueueDelete
        #define xQueueCreateMutex                      MPU_xQueueCreateMutex
        #define xQueueCreateMutexStatic                MPU_xQueueCreateMutexStatic
        #define xQueueCreateCountingSemaphore          MPU_xQueueCreateCountingSemaphore
        #define xQueueCreateCountingSemaphoreStatic    MPU_xQueueCreateCountingSemaphoreStatic
        #define xQueueGetMutexHolder                   MPU_xQueueGetMutexHolder
        #define xQueueTakeMutexRecursive               MPU_xQueueTakeMutexRecursive
        #define xQueueGiveMutexRecursive               MPU_xQueueGiveMutexRecursive
        #define xQueueGenericCreate                    MPU_xQueueGenericCreate
        #define xQueueGenericCreateStatic              MPU_xQueueGenericCreateStatic
        #define xQueueCreateSet                        MPU_xQueueCreateSet
        #define xQueueAddToSet                         MPU_xQueueAddToSet
        #define xQueueRemoveFromSet                    MPU_xQueueRemoveFromSet
        #define xQueueSelectFromSet                    MPU_xQueueSelectFromSet
        #define xQueueGenericReset                     MPU_xQueueGenericReset

        #if ( configQUEUE_REGISTRY_SIZE > 0 )
            #define vQueueAddToRegistry                MPU_vQueueAddToRegistry
            #define vQueueUnregisterQueue              MPU_vQueueUnregisterQueue
            #define pcQueueGetName                     MPU_pcQueueGetName
        #endif

/* Map standard timer.h API functions to the MPU equivalents. */
        #define pvTimerGetTimerID                      MPU_pvTimerGetTimerID
        #define vTimerSetTimerID                       MPU_vTimerSetTimerID
        #define xTimerIsTimerActive                    MPU_xTimerIsTimerActive
        #define xTimerGetTimerDaemonTaskHandle         MPU_xTimerGetTimerDaemonTaskHandle
        #define pcTimerGetName                         MPU_pcTimerGetName
        #define vTimerSetReloadMode                    MPU_vTimerSetReloadMode
        #define uxTimerGetReloadMode                   MPU_uxTimerGetReloadMode
        #define xTimerGetPeriod                        MPU_xTimerGetPeriod
        #define xTimerGetExpiryTime                    MPU_xTimerGetExpiryTime
        #define xTimerGenericCommand                   MPU_xTimerGenericCommand

/* Map standard event_group.h API functions to the MPU equivalents. */
        #define xEventGroupCreate                      MPU_xEventGroupCreate
        #define xEventGroupCreateStatic                MPU_xEventGroupCreateStatic
        #define xEventGroupWaitBits                    MPU_xEventGroupWaitBits
        #define xEventGroupClearBits                   MPU_xEventGroupClearBits
        #define xEventGroupSetBits                     MPU_xEventGroupSetBits
        #define xEventGroupSync                        MPU_xEventGroupSync
        #define vEventGroupDelete                      MPU_vEventGroupDelete

/* Map standard message/stream_buffer.h API functions to the MPU
 * equivalents. */
        #define xStreamBufferSend                      MPU_xStreamBufferSend
        #define xStreamBufferReceive                   MPU_xStreamBufferReceive
        #define xStreamBufferNextMessageLengthBytes    MPU_xStreamBufferNextMessageLengthBytes
        #define vStreamBufferDelete                    MPU_vStreamBufferDelete
        #define xStreamBufferIsFull                    MPU_xStreamBufferIsFull
        #define xStreamBufferIsEmpty                   MPU_xStreamBufferIsEmpty
        #define xStreamBufferReset                     MPU_xStreamBufferReset
        #define xStreamBufferSpacesAvailable           MPU_xStreamBufferSpacesAvailable
        #define xStreamBufferBytesAvailable            MPU_xStreamBufferBytesAvailable
        #define xStreamBufferSetTriggerLevel           MPU_xStreamBufferSetTriggerLevel
        #define xStreamBufferGenericCreate             MPU_xStreamBufferGenericCreate
        #define xStreamBufferGenericCreateStatic       MPU_xStreamBufferGenericCreateStatic


/* Remove the privileged function macro, but keep the PRIVILEGED_DATA
 * macro so applications can place data in privileged access sections
 * (useful when using statically allocated objects). */
        #define PRIVILEGED_FUNCTION
        #define PRIVILEGED_DATA    __attribute__( ( section( "privileged_data" ) ) )
        #define FREERTOS_SYSTEM_CALL

    #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */

/* Ensure API functions go in the privileged execution section. */
        #define PRIVILEGED_FUNCTION     __attribute__( ( section( "privileged_functions" ) ) )
        #define PRIVILEGED_DATA         __attribute__( ( section( "privileged_data" ) ) )
        #define FREERTOS_SYSTEM_CALL    __attribute__( ( section( "freertos_system_calls" ) ) )

    #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */

#else /* portUSING_MPU_WRAPPERS */

    #define PRIVILEGED_FUNCTION
    #define PRIVILEGED_DATA
    #define FREERTOS_SYSTEM_CALL

#endif /* portUSING_MPU_WRAPPERS */


#endif /* MPU_WRAPPERS_H */