aboutsummaryrefslogtreecommitdiff
path: root/product/rcar/src/CMSIS-FreeRTOS/Source/include/portable.h
diff options
context:
space:
mode:
Diffstat (limited to 'product/rcar/src/CMSIS-FreeRTOS/Source/include/portable.h')
-rw-r--r--product/rcar/src/CMSIS-FreeRTOS/Source/include/portable.h236
1 files changed, 236 insertions, 0 deletions
diff --git a/product/rcar/src/CMSIS-FreeRTOS/Source/include/portable.h b/product/rcar/src/CMSIS-FreeRTOS/Source/include/portable.h
new file mode 100644
index 00000000..3661a892
--- /dev/null
+++ b/product/rcar/src/CMSIS-FreeRTOS/Source/include/portable.h
@@ -0,0 +1,236 @@
+/*
+ * FreeRTOS Kernel V10.3.1
+ * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * 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.
+ *
+ * http://www.FreeRTOS.org
+ * http://aws.amazon.com/freertos
+ *
+ * 1 tab == 4 spaces!
+ */
+
+/*-----------------------------------------------------------
+ * Portable layer API. Each function must be defined for each port.
+ *----------------------------------------------------------*/
+
+#ifndef PORTABLE_H
+#define PORTABLE_H
+
+/* Each FreeRTOS port has a unique portmacro.h header file. Originally a
+pre-processor definition was used to ensure the pre-processor found the correct
+portmacro.h file for the port being used. That scheme was deprecated in favour
+of setting the compiler's include path such that it found the correct
+portmacro.h file - removing the need for the constant and allowing the
+portmacro.h file to be located anywhere in relation to the port being used.
+Purely for reasons of backward compatibility the old method is still valid, but
+to make it clear that new projects should not use it, support for the port
+specific constants has been moved into the deprecated_definitions.h header
+file. */
+#include "deprecated_definitions.h"
+
+/* If portENTER_CRITICAL is not defined then including deprecated_definitions.h
+did not result in a portmacro.h header file being included - and it should be
+included here. In this case the path to the correct portmacro.h header file
+must be set in the compiler's include path. */
+#ifndef portENTER_CRITICAL
+# include "portmacro.h"
+#endif
+
+#if portBYTE_ALIGNMENT == 32
+# define portBYTE_ALIGNMENT_MASK (0x001f)
+#endif
+
+#if portBYTE_ALIGNMENT == 16
+# define portBYTE_ALIGNMENT_MASK (0x000f)
+#endif
+
+#if portBYTE_ALIGNMENT == 8
+# define portBYTE_ALIGNMENT_MASK (0x0007)
+#endif
+
+#if portBYTE_ALIGNMENT == 4
+# define portBYTE_ALIGNMENT_MASK (0x0003)
+#endif
+
+#if portBYTE_ALIGNMENT == 2
+# define portBYTE_ALIGNMENT_MASK (0x0001)
+#endif
+
+#if portBYTE_ALIGNMENT == 1
+# define portBYTE_ALIGNMENT_MASK (0x0000)
+#endif
+
+#ifndef portBYTE_ALIGNMENT_MASK
+# error "Invalid portBYTE_ALIGNMENT definition"
+#endif
+
+#ifndef portNUM_CONFIGURABLE_REGIONS
+# define portNUM_CONFIGURABLE_REGIONS 1
+#endif
+
+#ifndef portHAS_STACK_OVERFLOW_CHECKING
+# define portHAS_STACK_OVERFLOW_CHECKING 0
+#endif
+
+#ifndef portARCH_NAME
+# define portARCH_NAME NULL
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "mpu_wrappers.h"
+
+/*
+ * Setup the stack of a new task so it is ready to be placed under the
+ * scheduler control. The registers have to be placed on the stack in
+ * the order that the port expects to find them.
+ *
+ */
+#if (portUSING_MPU_WRAPPERS == 1)
+# if (portHAS_STACK_OVERFLOW_CHECKING == 1)
+StackType_t *pxPortInitialiseStack(
+ StackType_t *pxTopOfStack,
+ StackType_t *pxEndOfStack,
+ TaskFunction_t pxCode,
+ void *pvParameters,
+ BaseType_t xRunPrivileged) PRIVILEGED_FUNCTION;
+# else
+StackType_t *pxPortInitialiseStack(
+ StackType_t *pxTopOfStack,
+ TaskFunction_t pxCode,
+ void *pvParameters,
+ BaseType_t xRunPrivileged) PRIVILEGED_FUNCTION;
+# endif
+#else
+# if (portHAS_STACK_OVERFLOW_CHECKING == 1)
+StackType_t *pxPortInitialiseStack(
+ StackType_t *pxTopOfStack,
+ StackType_t *pxEndOfStack,
+ TaskFunction_t pxCode,
+ void *pvParameters) PRIVILEGED_FUNCTION;
+# else
+StackType_t *pxPortInitialiseStack(
+ StackType_t *pxTopOfStack,
+ TaskFunction_t pxCode,
+ void *pvParameters) PRIVILEGED_FUNCTION;
+# endif
+#endif
+
+/* Used by heap_5.c to define the start address and size of each memory region
+that together comprise the total FreeRTOS heap space. */
+typedef struct HeapRegion {
+ uint8_t *pucStartAddress;
+ size_t xSizeInBytes;
+} HeapRegion_t;
+
+/* Used to pass information about the heap out of vPortGetHeapStats(). */
+typedef struct xHeapStats {
+ size_t xAvailableHeapSpaceInBytes; /* The total heap size currently
+ available - this is the sum of all the
+ free blocks, not the largest block
+ that can be allocated. */
+ size_t xSizeOfLargestFreeBlockInBytes; /* The maximum size, in bytes, of all
+ the free blocks within the heap at
+ the time vPortGetHeapStats() is
+ called. */
+ size_t xSizeOfSmallestFreeBlockInBytes; /* The minimum size, in bytes, of
+ all the free blocks within the
+ heap at the time
+ vPortGetHeapStats() is called. */
+ size_t
+ xNumberOfFreeBlocks; /* The number of free memory blocks within the heap
+ at the time vPortGetHeapStats() is called. */
+ size_t xMinimumEverFreeBytesRemaining; /* The minimum amount of total free
+ memory (sum of all free blocks)
+ there has been in the heap since
+ the system booted. */
+ size_t xNumberOfSuccessfulAllocations; /* The number of calls to
+ pvPortMalloc() that have returned
+ a valid memory block. */
+ size_t
+ xNumberOfSuccessfulFrees; /* The number of calls to vPortFree() that has
+ successfully freed a block of memory. */
+} HeapStats_t;
+
+/*
+ * Used to define multiple heap regions for use by heap_5.c. This function
+ * must be called before any calls to pvPortMalloc() - not creating a task,
+ * queue, semaphore, mutex, software timer, event group, etc. will result in
+ * pvPortMalloc being called.
+ *
+ * pxHeapRegions passes in an array of HeapRegion_t structures - each of which
+ * defines a region of memory that can be used as the heap. The array is
+ * terminated by a HeapRegions_t structure that has a size of 0. The region
+ * with the lowest start address must appear first in the array.
+ */
+void vPortDefineHeapRegions(const HeapRegion_t *const pxHeapRegions)
+ PRIVILEGED_FUNCTION;
+
+/*
+ * Returns a HeapStats_t structure filled with information about the current
+ * heap state.
+ */
+void vPortGetHeapStats(HeapStats_t *pxHeapStats);
+
+/*
+ * Map to the memory management routines required for the port.
+ */
+void *pvPortMalloc(size_t xSize) PRIVILEGED_FUNCTION;
+void vPortFree(void *pv) PRIVILEGED_FUNCTION;
+void vPortInitialiseBlocks(void) PRIVILEGED_FUNCTION;
+size_t xPortGetFreeHeapSize(void) PRIVILEGED_FUNCTION;
+size_t xPortGetMinimumEverFreeHeapSize(void) PRIVILEGED_FUNCTION;
+
+/*
+ * Setup the hardware ready for the scheduler to take control. This generally
+ * sets up a tick interrupt and sets timers for the correct tick frequency.
+ */
+BaseType_t xPortStartScheduler(void) PRIVILEGED_FUNCTION;
+
+/*
+ * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so
+ * the hardware is left in its original condition after the scheduler stops
+ * executing.
+ */
+void vPortEndScheduler(void) PRIVILEGED_FUNCTION;
+
+/*
+ * The structures and methods of manipulating the MPU are contained within the
+ * port layer.
+ *
+ * Fills the xMPUSettings structure with the memory region information
+ * contained in xRegions.
+ */
+#if (portUSING_MPU_WRAPPERS == 1)
+struct xMEMORY_REGION;
+void vPortStoreTaskMPUSettings(
+ xMPU_SETTINGS *xMPUSettings,
+ const struct xMEMORY_REGION *const xRegions,
+ StackType_t *pxBottomOfStack,
+ uint32_t ulStackDepth) PRIVILEGED_FUNCTION;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PORTABLE_H */