/*
 * FreeRTOS Kernel V10.5.1
 * 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 */
