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)126 void 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)136 void 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