/* | |
* 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 tasks.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 xTimerCreate MPU_xTimerCreate | |
#define xTimerCreateStatic MPU_xTimerCreateStatic | |
#define pvTimerGetTimerID MPU_pvTimerGetTimerID | |
#define vTimerSetTimerID MPU_vTimerSetTimerID | |
#define xTimerIsTimerActive MPU_xTimerIsTimerActive | |
#define xTimerGetTimerDaemonTaskHandle MPU_xTimerGetTimerDaemonTaskHandle | |
#define xTimerPendFunctionCall MPU_xTimerPendFunctionCall | |
#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 */ |