1 /* 2 * Copyright 2021-2022 NXP 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 #ifndef OSIF_INTERNAL_H 7 #define OSIF_INTERNAL_H 8 9 /** 10 * @file 11 * @implements OsIf_Internal.h_Artifact 12 * @addtogroup osif_drv 13 * @{ 14 */ 15 16 #ifdef __cplusplus 17 extern "C"{ 18 #endif 19 20 /*================================================================================================== 21 * INCLUDE FILES 22 * 1) system and project includes 23 * 2) needed interfaces from external units 24 * 3) internal and external interfaces from this unit 25 ==================================================================================================*/ 26 #include "StandardTypes.h" 27 #include "Soc_Ips.h" 28 #include "OsIf_Cfg.h" 29 30 #if defined(USING_OS_AUTOSAROS) 31 #include "Os.h" 32 #endif /* defined(USING_OS_AUTOSAROS) */ 33 34 #if defined(USING_OS_ZEPHYR) 35 #include "OsIf_Interrupts.h" 36 #ifdef MCAL_ENABLE_USER_MODE_SUPPORT 37 #include "rtd.h" /* System calls for RTD */ 38 #endif 39 #endif /* defined(USING_OS_ZEPHYR) */ 40 41 #if !defined(USING_OS_AUTOSAROS) 42 #ifdef MCAL_ENABLE_USER_MODE_SUPPORT 43 #if (MCAL_PLATFORM_ARM == MCAL_ARM_MARCH) 44 /* prototypes defined in system.h*/ 45 uint32 Sys_GoToUser_Return(uint32 u32SwitchToSupervisor, uint32 u32returnValue); 46 uint32 Sys_GoToSupervisor(void); 47 uint32 Sys_GoToUser(void); 48 #else 49 /*import inline function for switch context from system.h */ 50 #include "system.h" 51 #endif 52 void Sys_SuspendInterrupts(void); 53 void Sys_ResumeInterrupts(void); 54 #endif /* def MCAL_ENABLE_USER_MODE_SUPPORT */ 55 uint8 Sys_GetCoreID(void); 56 #endif /* !defined(USING_OS_AUTOSAROS) */ 57 58 #if (MCAL_PLATFORM_ARM == MCAL_ARM_AARCH32) || (MCAL_PLATFORM_ARM == MCAL_ARM_RARCH) 59 void Sys_EL1SuspendInterrupts(void); 60 void Sys_EL1ResumeInterrupts(void); 61 #endif 62 /*================================================================================================== 63 * SOURCE FILE VERSION INFORMATION 64 ==================================================================================================*/ 65 #define OSIF_INTERNAL_VENDOR_ID 43 66 #define OSIF_INTERNAL_AR_RELEASE_MAJOR_VERSION 4 67 #define OSIF_INTERNAL_AR_RELEASE_MINOR_VERSION 7 68 #define OSIF_INTERNAL_AR_RELEASE_REVISION_VERSION 0 69 #define OSIF_INTERNAL_SW_MAJOR_VERSION 0 70 #define OSIF_INTERNAL_SW_MINOR_VERSION 9 71 #define OSIF_INTERNAL_SW_PATCH_VERSION 0 72 73 /*================================================================================================== 74 * FILE VERSION CHECKS 75 ==================================================================================================*/ 76 /* Checks against StandardTypes.h */ 77 #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK 78 #if ((OSIF_INTERNAL_AR_RELEASE_MAJOR_VERSION != STD_AR_RELEASE_MAJOR_VERSION) || \ 79 (OSIF_INTERNAL_AR_RELEASE_MINOR_VERSION != STD_AR_RELEASE_MINOR_VERSION)) 80 #error "AutoSar Version Numbers of OsIf_Internal.h and StandardTypes.h are different" 81 #endif 82 #endif 83 84 /* Checks against Soc_Ips.h */ 85 #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK 86 #if ((OSIF_INTERNAL_AR_RELEASE_MAJOR_VERSION != SOC_IPS_AR_RELEASE_MAJOR_VERSION) || \ 87 (OSIF_INTERNAL_AR_RELEASE_MINOR_VERSION != SOC_IPS_AR_RELEASE_MINOR_VERSION)) 88 #error "AutoSar Version Numbers of OsIf_Internal.h and Soc_Ips.h are different" 89 #endif 90 #endif 91 92 #if defined(USING_OS_AUTOSAROS) 93 /* Checks against Os.h */ 94 #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK 95 #if ((OSIF_INTERNAL_AR_RELEASE_MAJOR_VERSION != OS_AR_RELEASE_MAJOR_VERSION) || \ 96 (OSIF_INTERNAL_AR_RELEASE_MINOR_VERSION != OS_AR_RELEASE_MINOR_VERSION)) 97 #error "AutoSar Version Numbers of OsIf_Internal.h and Os.h are different" 98 #endif 99 #endif 100 #endif /* defined(USING_OS_AUTOSAROS) */ 101 102 /*================================================================================================== 103 * CONSTANTS 104 ==================================================================================================*/ 105 106 /*================================================================================================== 107 * DEFINES AND MACROS 108 ==================================================================================================*/ 109 110 /* 111 * OsIf_Trusted_Call* 112 */ 113 #ifdef MCAL_ENABLE_USER_MODE_SUPPORT 114 #if (defined(USING_OS_AUTOSAROS) || defined(USING_OS_ZEPHYR)) 115 #define OsIf_Trusted_Call(name) Call_##name##_TRUSTED() 116 #define OsIf_Trusted_Call1param(name,param) Call_##name##_TRUSTED(param) 117 #define OsIf_Trusted_Call2params(name,param1,param2) Call_##name##_TRUSTED(param1,param2) 118 #define OsIf_Trusted_Call3params(name,param1,param2,param3) Call_##name##_TRUSTED(param1,param2,param3) 119 #define OsIf_Trusted_Call4params(name,param1,param2,param3,param4) Call_##name##_TRUSTED(param1,param2,param3,param4) 120 #define OsIf_Trusted_Call5params(name,param1,param2,param3,param4,param5) Call_##name##_TRUSTED(param1,param2,param3,param4,param5) 121 #define OsIf_Trusted_Call6params(name,param1,param2,param3,param4,param5,param6) Call_##name##_TRUSTED(param1,param2,param3,param4,param5,param6) 122 123 #define OsIf_Trusted_Call_Return(name) Call_##name##_TRUSTED() 124 #define OsIf_Trusted_Call_Return1param(name,param1) Call_##name##_TRUSTED(param1) 125 #define OsIf_Trusted_Call_Return2param(name,param1,param2) Call_##name##_TRUSTED(param1,param2) 126 #define OsIf_Trusted_Call_Return3param(name,param1,param2,param3) Call_##name##_TRUSTED(param1,param2,param3) 127 #define OsIf_Trusted_Call_Return4param(name,param1,param2,param3,param4) Call_##name##_TRUSTED(param1,param2,param3,param4) 128 #define OsIf_Trusted_Call_Return5param(name,param1,param2,param3,param4,param5) Call_##name##_TRUSTED(param1,param2,param3,param4,param5) 129 #define OsIf_Trusted_Call_Return6param(name,param1,param2,param3,param4,param5,param6) Call_##name##_TRUSTED(param1,param2,param3,param4,param5,param6) 130 131 #else /* USING_OS_AUTOSAROS */ 132 /* Baremetal and FreeRTOS */ 133 #define OsIf_Trusted_Call(name) \ 134 ((1UL == Sys_GoToSupervisor()) ? (name(), (void)Sys_GoToUser()) : (name(),(void)0U)) 135 #define OsIf_Trusted_Call1param(name,param) \ 136 ((1UL == Sys_GoToSupervisor()) ? (name(param), (void)Sys_GoToUser()) : (name(param),(void)0U)) 137 #define OsIf_Trusted_Call2params(name,param1,param2) \ 138 ((1UL == Sys_GoToSupervisor()) ? (name(param1,param2), (void)Sys_GoToUser()) : (name(param1,param2),(void)0U)) 139 #define OsIf_Trusted_Call3params(name,param1,param2,param3) \ 140 ((1UL == Sys_GoToSupervisor()) ? (name(param1,param2,param3), (void)Sys_GoToUser()) : (name(param1,param2,param3),(void)0U)) 141 #define OsIf_Trusted_Call4params(name,param1,param2,param3,param4) \ 142 ((1UL == Sys_GoToSupervisor()) ? (name(param1,param2,param3,param4), (void)Sys_GoToUser()) : (name(param1,param2,param3,param4),(void)0U)) 143 #define OsIf_Trusted_Call5params(name,param1,param2,param3,param4,param5) \ 144 ((1UL == Sys_GoToSupervisor()) ? (name(param1,param2,param3,param4,param5), (void)Sys_GoToUser()) : (name(param1,param2,param3,param4,param5),(void)0U)) 145 #define OsIf_Trusted_Call6params(name,param1,param2,param3,param4,param5,param6) \ 146 ((1UL == Sys_GoToSupervisor()) ? (name(param1,param2,param3,param4,param5,param6), (void)Sys_GoToUser()) : (name(param1,param2,param3,param4,param5,param6),(void)0U)) 147 148 #define OsIf_Trusted_Call_Return(name) \ 149 ((1UL == Sys_GoToSupervisor()) ? Sys_GoToUser_Return(1U, name()) : Sys_GoToUser_Return(0U, name())) 150 #define OsIf_Trusted_Call_Return1param(name,param) \ 151 ((1UL == Sys_GoToSupervisor()) ? Sys_GoToUser_Return(1U, name(param)) : Sys_GoToUser_Return(0U, name(param))) 152 #define OsIf_Trusted_Call_Return2param(name,param1,param2) \ 153 ((1UL == Sys_GoToSupervisor()) ? Sys_GoToUser_Return(1U, name(param1,param2)) : Sys_GoToUser_Return(0U, name(param1,param2))) 154 #define OsIf_Trusted_Call_Return3param(name,param1,param2,param3) \ 155 ((1UL == Sys_GoToSupervisor()) ? Sys_GoToUser_Return(1U, name(param1,param2,param3)) : Sys_GoToUser_Return(0U, name(param1,param2,param3))) 156 #define OsIf_Trusted_Call_Return4param(name,param1,param2,param3,param4) \ 157 ((1UL == Sys_GoToSupervisor()) ? Sys_GoToUser_Return(1U, name(param1,param2,param3,param4)) : Sys_GoToUser_Return(0U, name(param1,param2,param3,param4))) 158 #define OsIf_Trusted_Call_Return5param(name,param1,param2,param3,param4,param5) \ 159 ((1UL == Sys_GoToSupervisor()) ? Sys_GoToUser_Return(1U, name(param1,param2,param3,param4,param5)) : Sys_GoToUser_Return(0U, name(param1,param2,param3,param4,param5))) 160 #define OsIf_Trusted_Call_Return6param(name,param1,param2,param3,param4,param5,param6) \ 161 ((1UL == Sys_GoToSupervisor()) ? Sys_GoToUser_Return(1U, name(param1,param2,param3,param4,param5,param6)) : Sys_GoToUser_Return(0U, name(param1,param2,param3,param4,param5,param6))) 162 #endif /* USING_OS_AUTOSAROS */ 163 #endif /* MCAL_ENABLE_USER_MODE_SUPPORT */ 164 165 /* 166 * OsIf_GetCoreID 167 */ 168 #ifdef USING_OS_AUTOSAROS 169 #define OsIf_GetCoreID() GetCoreID() 170 #else /* USING_OS_AUTOSAROS */ 171 /* Baremetal and FreeRTOS and ZephyrOS */ 172 #ifdef MCAL_ENABLE_USER_MODE_SUPPORT 173 #define OsIf_GetCoreID() OsIf_Trusted_Call_Return(Sys_GetCoreID) 174 #else 175 /* @implements OsIf_GetCoreID_define */ 176 #define OsIf_GetCoreID() Sys_GetCoreID() 177 #endif 178 #endif 179 180 /* 181 * OsIf_SuspendAllInterrupts 182 * OsIf_ResumeAllInterrupts 183 */ 184 #if (!defined(USING_OS_AUTOSAROS) && !defined(USING_OS_ZEPHYR)) 185 #ifndef MCAL_ENABLE_USER_MODE_SUPPORT /*Bare metal not enable user mode*/ 186 /* Baremetal or FreeRTOS case */ 187 #if (MCAL_PLATFORM_ARM == MCAL_ARM_AARCH64) 188 #define ResumeAllInterrupts() ASM_KEYWORD(" msr DAIFClr,#0x3") 189 #define SuspendAllInterrupts() ASM_KEYWORD(" msr DAIFSet,#0x3") 190 #elif (MCAL_PLATFORM_ARM == MCAL_ARM_AARCH32) || (MCAL_PLATFORM_ARM == MCAL_ARM_RARCH) 191 #define ResumeAllInterrupts() Sys_EL1ResumeInterrupts() 192 #define SuspendAllInterrupts() Sys_EL1SuspendInterrupts() 193 #else 194 #define ResumeAllInterrupts() ASM_KEYWORD(" cpsie i") 195 #define SuspendAllInterrupts() ASM_KEYWORD(" cpsid i") 196 #endif /* MCAL_PLATFORM_ARM == MCAL_ARM_AARCH64 */ 197 #else 198 #if (MCAL_PLATFORM_ARM == MCAL_ARM_AARCH32) || (MCAL_PLATFORM_ARM == MCAL_ARM_RARCH) 199 #define ResumeAllInterrupts() OsIf_Trusted_Call(Sys_EL1ResumeInterrupts) 200 #define SuspendAllInterrupts() OsIf_Trusted_Call(Sys_EL1SuspendInterrupts) 201 #else 202 #define ResumeAllInterrupts() Sys_ResumeInterrupts() 203 #define SuspendAllInterrupts() Sys_SuspendInterrupts() 204 #endif 205 #endif /*MCAL_ENABLE_USER_MODE_SUPPORT */ 206 #elif defined(USING_OS_ZEPHYR) 207 #ifdef MCAL_ENABLE_USER_MODE_SUPPORT 208 #define ResumeAllInterrupts() OsIf_Trusted_Call(OsIf_Interrupts_ResumeAllInterrupts) 209 #define SuspendAllInterrupts() OsIf_Trusted_Call(OsIf_Interrupts_SuspendAllInterrupts) 210 #else 211 #define ResumeAllInterrupts() OsIf_Interrupts_ResumeAllInterrupts() 212 #define SuspendAllInterrupts() OsIf_Interrupts_SuspendAllInterrupts() 213 #endif /* MCAL_ENABLE_USER_MODE_SUPPORT */ 214 #endif /* !defined(USING_OS_AUTOSAROS) && !defined(USING_OS_ZEPHYR) */ 215 216 /* @implements OsIf_SuspendAllInterrupts_define */ 217 #define OsIf_SuspendAllInterrupts() SuspendAllInterrupts() 218 /* @implements OsIf_ResumeAllInterrupts_define */ 219 #define OsIf_ResumeAllInterrupts() ResumeAllInterrupts() 220 221 /* 222 * ISR macro definition 223 */ 224 #ifdef USING_OS_AUTOSAROS 225 /* ISR() macro defined by Autosar OS*/ 226 #else 227 /* Baremetal or FreeRTOS case */ 228 #if defined (USE_SW_VECTOR_MODE) 229 #define ISR(IsrName) void IsrName(void) 230 #else 231 #define ISR(IsrName) INTERRUPT_FUNC void IsrName(void) 232 #endif /* defined (USE_SW_VECTOR_MODE) */ 233 #endif /* USING_OS_AUTOSAROS */ 234 235 /*================================================================================================== 236 * ENUMS 237 ==================================================================================================*/ 238 239 /*================================================================================================== 240 * STRUCTURES AND OTHER TYPEDEFS 241 ==================================================================================================*/ 242 243 /*================================================================================================== 244 * GLOBAL VARIABLE DECLARATIONS 245 ==================================================================================================*/ 246 247 /*================================================================================================== 248 * FUNCTION PROTOTYPES 249 ==================================================================================================*/ 250 251 #ifdef __cplusplus 252 } 253 #endif 254 255 /** @} */ 256 257 #endif /* OSIF_INTERNAL_H */ 258