1 /* 2 * Copyright 2020-2023 NXP. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 /** 8 * @file 9 * 10 * @addtogroup osif_drv 11 * @{ 12 */ 13 14 #ifdef __cplusplus 15 extern "C"{ 16 #endif 17 18 /*================================================================================================== 19 * INCLUDE FILES 20 * 1) system and project includes 21 * 2) needed interfaces from external units 22 * 3) internal and external interfaces from this unit 23 ==================================================================================================*/ 24 #include "OsIf.h" 25 #include "OsIf_Interrupts.h" 26 27 #if defined(USING_OS_ZEPHYR) 28 #include <zephyr/kernel.h> 29 30 /*================================================================================================== 31 * SOURCE FILE VERSION INFORMATION 32 ==================================================================================================*/ 33 #define OSIF_INTERRUPTS_VENDOR_ID_C 43 34 #define OSIF_INTERRUPTS_AR_RELEASE_MAJOR_VERSION_C 4 35 #define OSIF_INTERRUPTS_AR_RELEASE_MINOR_VERSION_C 7 36 #define OSIF_INTERRUPTS_AR_RELEASE_REVISION_VERSION_C 0 37 #define OSIF_INTERRUPTS_SW_MAJOR_VERSION_C 3 38 #define OSIF_INTERRUPTS_SW_MINOR_VERSION_C 0 39 #define OSIF_INTERRUPTS_SW_PATCH_VERSION_C 0 40 41 /*================================================================================================== 42 * FILE VERSION CHECKS 43 ==================================================================================================*/ 44 /* Checks against OsIf.h */ 45 #if (OSIF_INTERRUPTS_VENDOR_ID_C != OSIF_VENDOR_ID) 46 #error "OsIf_Interrupts.c and OsIf.h have different vendor ids" 47 #endif 48 #if ((OSIF_INTERRUPTS_AR_RELEASE_MAJOR_VERSION_C != OSIF_AR_RELEASE_MAJOR_VERSION) || \ 49 (OSIF_INTERRUPTS_AR_RELEASE_MINOR_VERSION_C != OSIF_AR_RELEASE_MINOR_VERSION) || \ 50 (OSIF_INTERRUPTS_AR_RELEASE_REVISION_VERSION_C != OSIF_AR_RELEASE_REVISION_VERSION)) 51 #error "AUTOSAR Version Numbers of OsIf_Interrupts.c and OsIf.h are different" 52 #endif 53 #if ((OSIF_INTERRUPTS_SW_MAJOR_VERSION_C != OSIF_SW_MAJOR_VERSION) || \ 54 (OSIF_INTERRUPTS_SW_MINOR_VERSION_C != OSIF_SW_MINOR_VERSION) || \ 55 (OSIF_INTERRUPTS_SW_PATCH_VERSION_C != OSIF_SW_PATCH_VERSION) \ 56 ) 57 #error "Software Version Numbers of OsIf_Interrupts.c and OsIf.h are different" 58 #endif 59 60 /* Checks against OsIf_Interrupts.h */ 61 #if (OSIF_INTERRUPTS_VENDOR_ID_C != OSIF_INTERRUPTS_VENDOR_ID) 62 #error "OsIf_Interrupts.c and OsIf_Interrupts.h have different vendor ids" 63 #endif 64 #if ((OSIF_INTERRUPTS_AR_RELEASE_MAJOR_VERSION_C != OSIF_INTERRUPTS_AR_RELEASE_MAJOR_VERSION) || \ 65 (OSIF_INTERRUPTS_AR_RELEASE_MINOR_VERSION_C != OSIF_INTERRUPTS_AR_RELEASE_MINOR_VERSION) || \ 66 (OSIF_INTERRUPTS_AR_RELEASE_REVISION_VERSION_C != OSIF_INTERRUPTS_AR_RELEASE_REVISION_VERSION)) 67 #error "AUTOSAR Version Numbers of OsIf_Interrupts.c and OsIf_Interrupts.h are different" 68 #endif 69 #if ((OSIF_INTERRUPTS_SW_MAJOR_VERSION_C != OSIF_INTERRUPTS_SW_MAJOR_VERSION) || \ 70 (OSIF_INTERRUPTS_SW_MINOR_VERSION_C != OSIF_INTERRUPTS_SW_MINOR_VERSION) || \ 71 (OSIF_INTERRUPTS_SW_PATCH_VERSION_C != OSIF_INTERRUPTS_SW_PATCH_VERSION) \ 72 ) 73 #error "Software Version Numbers of OsIf_Interrupts.c and OsIf_Interrupts.h are different" 74 #endif 75 76 /*================================================================================================== 77 * LOCAL TYPEDEFS (STRUCTURES, UNIONS, ENUMS) 78 ==================================================================================================*/ 79 80 /*================================================================================================== 81 * LOCAL MACROS 82 ==================================================================================================*/ 83 #if (STD_ON == OSIF_ENABLE_MULTICORE_SUPPORT) 84 #define OsIfCoreID() (OsIf_GetCoreID()) 85 #else 86 #define OsIfCoreID() (0U) 87 #endif 88 /*================================================================================================== 89 * LOCAL CONSTANTS 90 ==================================================================================================*/ 91 92 /*================================================================================================== 93 * LOCAL VARIABLES 94 ==================================================================================================*/ 95 #define BASENXP_START_SEC_VAR_CLEARED_32 96 #include "BaseNXP_MemMap.h" 97 98 static uint32 OsIf_au32OldIrqMask[OSIF_MAX_COREIDX_SUPPORTED]; 99 static uint32 OsIf_au32SuspendLevel[OSIF_MAX_COREIDX_SUPPORTED]; 100 101 #define BASENXP_STOP_SEC_VAR_CLEARED_32 102 #include "BaseNXP_MemMap.h" 103 104 /*================================================================================================== 105 * GLOBAL CONSTANTS 106 ==================================================================================================*/ 107 108 /*================================================================================================== 109 * GLOBAL VARIABLES 110 ==================================================================================================*/ 111 112 /*================================================================================================== 113 * LOCAL FUNCTION PROTOTYPES 114 ==================================================================================================*/ 115 116 /*================================================================================================== 117 * LOCAL FUNCTIONS 118 ==================================================================================================*/ 119 120 /*================================================================================================== 121 * GLOBAL FUNCTIONS 122 ==================================================================================================*/ 123 #define BASENXP_START_SEC_CODE 124 #include "BaseNXP_MemMap.h" 125 OsIf_Interrupts_SuspendAllInterrupts(void)126void OsIf_Interrupts_SuspendAllInterrupts(void) 127 { 128 uint32 CoreId = OsIfCoreID(); 129 130 if (OsIf_au32SuspendLevel[CoreId]++ == 0U) 131 { 132 OsIf_au32OldIrqMask[CoreId] = arch_irq_lock(); 133 } 134 } 135 OsIf_Interrupts_ResumeAllInterrupts(void)136void OsIf_Interrupts_ResumeAllInterrupts(void) 137 { 138 uint32 CoreId = OsIfCoreID(); 139 140 if (--OsIf_au32SuspendLevel[CoreId] == 0U) 141 { 142 arch_irq_unlock(OsIf_au32OldIrqMask[CoreId]); 143 } 144 } 145 146 #define BASENXP_STOP_SEC_CODE 147 #include "BaseNXP_MemMap.h" 148 149 #endif /* defined(USING_OS_ZEPHYR) */ 150 151 #ifdef __cplusplus 152 } 153 #endif 154 155 /** @} */ 156