|
16 | 16 | #define ZEPHYR_INCLUDE_ARCH_ARM_AARCH32_EXC_H_ |
17 | 17 |
|
18 | 18 | #if defined(CONFIG_CPU_CORTEX_M) |
19 | | -#include <zephyr/devicetree.h> |
20 | | - |
21 | | -#include <zephyr/arch/arm/cortex_m/nvic.h> |
22 | | - |
23 | | -/* for assembler, only works with constants */ |
24 | | -#define Z_EXC_PRIO(pri) (((pri) << (8 - NUM_IRQ_PRIO_BITS)) & 0xff) |
25 | | - |
26 | | -/* |
27 | | - * In architecture variants with non-programmable fault exceptions |
28 | | - * (e.g. Cortex-M Baseline variants), hardware ensures processor faults |
29 | | - * are given the highest interrupt priority level. SVCalls are assigned |
30 | | - * the highest configurable priority level (level 0); note, however, that |
31 | | - * this interrupt level may be shared with HW interrupts. |
32 | | - * |
33 | | - * In Cortex variants with programmable fault exception priorities we |
34 | | - * assign the highest interrupt priority level (level 0) to processor faults |
35 | | - * with configurable priority. |
36 | | - * The highest priority level may be shared with either Zero-Latency IRQs (if |
37 | | - * support for the feature is enabled) or with SVCall priority level. |
38 | | - * Regular HW IRQs are always assigned priority levels lower than the priority |
39 | | - * levels for SVCalls, Zero-Latency IRQs and processor faults. |
40 | | - * |
41 | | - * PendSV IRQ (which is used in Cortex-M variants to implement thread |
42 | | - * context-switching) is assigned the lowest IRQ priority level. |
43 | | - */ |
44 | | -#if defined(CONFIG_CPU_CORTEX_M_HAS_PROGRAMMABLE_FAULT_PRIOS) |
45 | | -#define _EXCEPTION_RESERVED_PRIO 1 |
| 19 | +#include <zephyr/arch/arm/cortex_m/exc.h> |
| 20 | +#elif defined(CONFIG_CPU_AARCH32_CORTEX_A) || defined(CONFIG_CPU_AARCH32_CORTEX_R) |
| 21 | +#include <zephyr/arch/arm/cortex_a_r/exc.h> |
46 | 22 | #else |
47 | | -#define _EXCEPTION_RESERVED_PRIO 0 |
48 | | -#endif |
49 | | - |
50 | | -#define _EXC_FAULT_PRIO 0 |
51 | | -#define _EXC_ZERO_LATENCY_IRQS_PRIO 0 |
52 | | -#define _EXC_SVC_PRIO COND_CODE_1(CONFIG_ZERO_LATENCY_IRQS, \ |
53 | | - (CONFIG_ZERO_LATENCY_LEVELS), (0)) |
54 | | -#define _IRQ_PRIO_OFFSET (_EXCEPTION_RESERVED_PRIO + _EXC_SVC_PRIO) |
55 | | -#define IRQ_PRIO_LOWEST (BIT(NUM_IRQ_PRIO_BITS) - (_IRQ_PRIO_OFFSET) - 1) |
56 | | - |
57 | | -#define _EXC_IRQ_DEFAULT_PRIO Z_EXC_PRIO(_IRQ_PRIO_OFFSET) |
58 | | - |
59 | | -/* Use lowest possible priority level for PendSV */ |
60 | | -#define _EXC_PENDSV_PRIO 0xff |
61 | | -#define _EXC_PENDSV_PRIO_MASK Z_EXC_PRIO(_EXC_PENDSV_PRIO) |
| 23 | +#error Unknown ARM architecture |
62 | 24 | #endif /* CONFIG_CPU_CORTEX_M */ |
63 | 25 |
|
64 | | -#ifdef _ASMLANGUAGE |
65 | | -GTEXT(z_arm_exc_exit); |
66 | | -#else |
67 | | -#include <zephyr/types.h> |
68 | | - |
69 | | -#ifdef __cplusplus |
70 | | -extern "C" { |
71 | | -#endif |
72 | | - |
73 | | -#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING) |
74 | | - |
75 | | -/* Registers s16-s31 (d8-d15, q4-q7) must be preserved across subroutine calls. |
76 | | - * |
77 | | - * Registers s0-s15 (d0-d7, q0-q3) do not have to be preserved (and can be used |
78 | | - * for passing arguments or returning results in standard procedure-call variants). |
79 | | - * |
80 | | - * Registers d16-d31 (q8-q15), do not have to be preserved. |
81 | | - */ |
82 | | -struct __fpu_sf { |
83 | | - uint32_t s[16]; /* s0~s15 (d0-d7) */ |
84 | | -#ifdef CONFIG_VFP_FEATURE_REGS_S64_D32 |
85 | | - uint64_t d[16]; /* d16~d31 */ |
86 | | -#endif |
87 | | - uint32_t fpscr; |
88 | | - uint32_t undefined; |
89 | | -}; |
90 | | -#endif |
91 | | - |
92 | | -/* Additional register state that is not stacked by hardware on exception |
93 | | - * entry. |
94 | | - * |
95 | | - * These fields are ONLY valid in the ESF copy passed into z_arm_fatal_error(). |
96 | | - * When information for a member is unavailable, the field is set to zero. |
97 | | - */ |
98 | | -#if defined(CONFIG_EXTRA_EXCEPTION_INFO) |
99 | | -struct __extra_esf_info { |
100 | | - _callee_saved_t *callee; |
101 | | - uint32_t msp; |
102 | | - uint32_t exc_return; |
103 | | -}; |
104 | | -#endif /* CONFIG_EXTRA_EXCEPTION_INFO */ |
105 | | - |
106 | | -#if defined(CONFIG_CPU_CORTEX_M) |
107 | | - |
108 | | -struct __esf { |
109 | | - struct __basic_sf { |
110 | | - sys_define_gpr_with_alias(a1, r0); |
111 | | - sys_define_gpr_with_alias(a2, r1); |
112 | | - sys_define_gpr_with_alias(a3, r2); |
113 | | - sys_define_gpr_with_alias(a4, r3); |
114 | | - sys_define_gpr_with_alias(ip, r12); |
115 | | - sys_define_gpr_with_alias(lr, r14); |
116 | | - sys_define_gpr_with_alias(pc, r15); |
117 | | - uint32_t xpsr; |
118 | | - } basic; |
119 | | -#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING) |
120 | | - struct __fpu_sf fpu; |
121 | | -#endif |
122 | | -#if defined(CONFIG_EXTRA_EXCEPTION_INFO) |
123 | | - struct __extra_esf_info extra_info; |
124 | | -#endif |
125 | | -}; |
126 | | - |
127 | | -#else |
128 | | - |
129 | | -struct __esf { |
130 | | -#if defined(CONFIG_EXTRA_EXCEPTION_INFO) |
131 | | - struct __extra_esf_info extra_info; |
132 | | -#endif |
133 | | -#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING) |
134 | | - struct __fpu_sf fpu; |
135 | | -#endif |
136 | | - struct __basic_sf { |
137 | | - sys_define_gpr_with_alias(a1, r0); |
138 | | - sys_define_gpr_with_alias(a2, r1); |
139 | | - sys_define_gpr_with_alias(a3, r2); |
140 | | - sys_define_gpr_with_alias(a4, r3); |
141 | | - sys_define_gpr_with_alias(ip, r12); |
142 | | - sys_define_gpr_with_alias(lr, r14); |
143 | | - sys_define_gpr_with_alias(pc, r15); |
144 | | - uint32_t xpsr; |
145 | | - } basic; |
146 | | -}; |
147 | | - |
148 | | -#endif |
149 | | - |
150 | | -extern uint32_t z_arm_coredump_fault_sp; |
151 | | - |
152 | | -typedef struct __esf z_arch_esf_t; |
153 | | - |
154 | | -#ifdef CONFIG_CPU_CORTEX_M |
155 | | -extern void z_arm_exc_exit(void); |
156 | | -#else |
157 | | -extern void z_arm_exc_exit(bool fatal); |
158 | | -#endif |
159 | | - |
160 | | -#ifdef __cplusplus |
161 | | -} |
162 | | -#endif |
163 | | - |
164 | | -#endif /* _ASMLANGUAGE */ |
165 | | - |
166 | 26 | #endif /* ZEPHYR_INCLUDE_ARCH_ARM_AARCH32_EXC_H_ */ |
0 commit comments