]> begriffs open source - freertos/blob - portable/ARMv8M/secure/context/secure_context.h
[AUTO][RELEASE]: Bump file header version to "10.4.3"
[freertos] / portable / ARMv8M / secure / context / secure_context.h
1 /*\r
2  * FreeRTOS Kernel V10.4.3\r
3  * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6  * this software and associated documentation files (the "Software"), to deal in\r
7  * the Software without restriction, including without limitation the rights to\r
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9  * the Software, and to permit persons to whom the Software is furnished to do so,\r
10  * subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in all\r
13  * copies or substantial portions of the Software.\r
14  *\r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21  *\r
22  * https://www.FreeRTOS.org\r
23  * https://github.com/FreeRTOS\r
24  *\r
25  * 1 tab == 4 spaces!\r
26  */\r
27 \r
28 #ifndef __SECURE_CONTEXT_H__\r
29 #define __SECURE_CONTEXT_H__\r
30 \r
31 /* Standard includes. */\r
32 #include <stdint.h>\r
33 \r
34 /* FreeRTOS includes. */\r
35 #include "FreeRTOSConfig.h"\r
36 \r
37 /**\r
38  * @brief PSP value when no task's context is loaded.\r
39  */\r
40 #define securecontextNO_STACK    0x0\r
41 \r
42 /**\r
43  * @brief Opaque handle.\r
44  */\r
45 struct SecureContext;\r
46 typedef struct SecureContext * SecureContextHandle_t;\r
47 /*-----------------------------------------------------------*/\r
48 \r
49 /**\r
50  * @brief Initializes the secure context management system.\r
51  *\r
52  * PSP is set to NULL and therefore a task must allocate and load a context\r
53  * before calling any secure side function in the thread mode.\r
54  *\r
55  * @note This function must be called in the handler mode. It is no-op if called\r
56  * in the thread mode.\r
57  */\r
58 void SecureContext_Init( void );\r
59 \r
60 /**\r
61  * @brief Allocates a context on the secure side.\r
62  *\r
63  * @note This function must be called in the handler mode. It is no-op if called\r
64  * in the thread mode.\r
65  *\r
66  * @param[in] ulSecureStackSize Size of the stack to allocate on secure side.\r
67  * @param[in] ulIsTaskPrivileged 1 if the calling task is privileged, 0 otherwise.\r
68  *\r
69  * @return Opaque context handle if context is successfully allocated, NULL\r
70  * otherwise.\r
71  */\r
72 #if ( configENABLE_MPU == 1 )\r
73     SecureContextHandle_t SecureContext_AllocateContext( uint32_t ulSecureStackSize,\r
74                                                          uint32_t ulIsTaskPrivileged );\r
75 #else /* configENABLE_MPU */\r
76     SecureContextHandle_t SecureContext_AllocateContext( uint32_t ulSecureStackSize );\r
77 #endif /* configENABLE_MPU */\r
78 \r
79 /**\r
80  * @brief Frees the given context.\r
81  *\r
82  * @note This function must be called in the handler mode. It is no-op if called\r
83  * in the thread mode.\r
84  *\r
85  * @param[in] xSecureContextHandle Context handle corresponding to the\r
86  * context to be freed.\r
87  */\r
88 void SecureContext_FreeContext( SecureContextHandle_t xSecureContextHandle );\r
89 \r
90 /**\r
91  * @brief Loads the given context.\r
92  *\r
93  * @note This function must be called in the handler mode. It is no-op if called\r
94  * in the thread mode.\r
95  *\r
96  * @param[in] xSecureContextHandle Context handle corresponding to the context\r
97  * to be loaded.\r
98  */\r
99 void SecureContext_LoadContext( SecureContextHandle_t xSecureContextHandle );\r
100 \r
101 /**\r
102  * @brief Saves the given context.\r
103  *\r
104  * @note This function must be called in the handler mode. It is no-op if called\r
105  * in the thread mode.\r
106  *\r
107  * @param[in] xSecureContextHandle Context handle corresponding to the context\r
108  * to be saved.\r
109  */\r
110 void SecureContext_SaveContext( SecureContextHandle_t xSecureContextHandle );\r
111 \r
112 #endif /* __SECURE_CONTEXT_H__ */\r