Linux Audio
Check our new training course
Embedded Linux Audio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
/* * Copyright (c) 2014-2016 Wind River Systems, Inc. * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief Private kernel definitions * * This file contains private kernel structures definitions and various * other definitions for the ARCv2 processor architecture. * * This file is also included by assembly language files which must #define * _ASMLANGUAGE before including this header file. Note that kernel * assembly source files obtains structure offset values via "absolute * symbols" in the offsets.o module. */ #ifndef ZEPHYR_ARCH_ARC_INCLUDE_KERNEL_ARCH_DATA_H_ #define ZEPHYR_ARCH_ARC_INCLUDE_KERNEL_ARCH_DATA_H_ #include <zephyr/toolchain.h> #include <zephyr/linker/sections.h> #include <zephyr/arch/cpu.h> #include <vector_table.h> #ifndef _ASMLANGUAGE #include <zephyr/kernel.h> #include <zephyr/types.h> #include <zephyr/sys/util.h> #include <zephyr/sys/dlist.h> #ifdef __cplusplus extern "C" { #endif #ifdef CONFIG_ARC_HAS_SECURE struct _irq_stack_frame { #ifdef CONFIG_ARC_HAS_ZOL uintptr_t lp_end; uintptr_t lp_start; uintptr_t lp_count; #endif /* CONFIG_ARC_HAS_ZOL */ #ifdef CONFIG_CODE_DENSITY /* * Currently unsupported. This is where those registers are * automatically pushed on the stack by the CPU when taking a regular * IRQ. */ uintptr_t ei_base; uintptr_t ldi_base; uintptr_t jli_base; #endif uintptr_t r0; uintptr_t r1; uintptr_t r2; uintptr_t r3; uintptr_t r4; uintptr_t r5; uintptr_t r6; uintptr_t r7; uintptr_t r8; uintptr_t r9; uintptr_t r10; uintptr_t r11; uintptr_t r12; uintptr_t r13; uintptr_t blink; uintptr_t pc; uintptr_t sec_stat; uintptr_t status32; }; #else struct _irq_stack_frame { uintptr_t r0; uintptr_t r1; uintptr_t r2; uintptr_t r3; uintptr_t r4; uintptr_t r5; uintptr_t r6; uintptr_t r7; uintptr_t r8; uintptr_t r9; uintptr_t r10; uintptr_t r11; uintptr_t r12; uintptr_t r13; uintptr_t blink; #ifdef CONFIG_ARC_HAS_ZOL uintptr_t lp_end; uintptr_t lp_start; uintptr_t lp_count; #endif /* CONFIG_ARC_HAS_ZOL */ #ifdef CONFIG_CODE_DENSITY /* * Currently unsupported. This is where those registers are * automatically pushed on the stack by the CPU when taking a regular * IRQ. */ uintptr_t ei_base; uintptr_t ldi_base; uintptr_t jli_base; #endif uintptr_t pc; uintptr_t status32; }; #endif typedef struct _irq_stack_frame _isf_t; /* callee-saved registers pushed on the stack, not in k_thread */ struct _callee_saved_stack { uintptr_t r13; uintptr_t r14; uintptr_t r15; uintptr_t r16; uintptr_t r17; uintptr_t r18; uintptr_t r19; uintptr_t r20; uintptr_t r21; uintptr_t r22; uintptr_t r23; uintptr_t r24; uintptr_t r25; uintptr_t r26; uintptr_t fp; /* r27 */ #ifdef CONFIG_USERSPACE #ifdef CONFIG_ARC_HAS_SECURE uintptr_t user_sp; uintptr_t kernel_sp; #else uintptr_t user_sp; #endif #endif /* r28 is the stack pointer and saved separately */ /* r29 is ILINK and does not need to be saved */ uintptr_t r30; #ifdef CONFIG_ARC_HAS_ACCL_REGS uintptr_t r58; #ifndef CONFIG_64BIT uintptr_t r59; #endif /* !CONFIG_64BIT */ #endif #ifdef CONFIG_FPU_SHARING uintptr_t fpu_status; uintptr_t fpu_ctrl; #ifdef CONFIG_FP_FPU_DA uintptr_t dpfp2h; uintptr_t dpfp2l; uintptr_t dpfp1h; uintptr_t dpfp1l; #endif #endif #ifdef CONFIG_DSP_SHARING #ifdef CONFIG_ARC_DSP_BFLY_SHARING uintptr_t dsp_fft_ctrl; uintptr_t dsp_bfly0; #endif uintptr_t acc0_ghi; uintptr_t acc0_glo; uintptr_t dsp_ctrl; #endif #ifdef CONFIG_ARC_AGU_SHARING uintptr_t agu_ap0; uintptr_t agu_ap1; uintptr_t agu_ap2; uintptr_t agu_ap3; uintptr_t agu_os0; uintptr_t agu_os1; uintptr_t agu_mod0; uintptr_t agu_mod1; uintptr_t agu_mod2; uintptr_t agu_mod3; #ifdef CONFIG_ARC_AGU_MEDIUM uintptr_t agu_ap4; uintptr_t agu_ap5; uintptr_t agu_ap6; uintptr_t agu_ap7; uintptr_t agu_os2; uintptr_t agu_os3; uintptr_t agu_mod4; uintptr_t agu_mod5; uintptr_t agu_mod6; uintptr_t agu_mod7; uintptr_t agu_mod8; uintptr_t agu_mod9; uintptr_t agu_mod10; uintptr_t agu_mod11; #endif #ifdef CONFIG_ARC_AGU_LARGE uintptr_t agu_ap8; uintptr_t agu_ap9; uintptr_t agu_ap10; uintptr_t agu_ap11; uintptr_t agu_os4; uintptr_t agu_os5; uintptr_t agu_os6; uintptr_t agu_os7; uintptr_t agu_mod12; uintptr_t agu_mod13; uintptr_t agu_mod14; uintptr_t agu_mod15; uintptr_t agu_mod16; uintptr_t agu_mod17; uintptr_t agu_mod18; uintptr_t agu_mod19; uintptr_t agu_mod20; uintptr_t agu_mod21; uintptr_t agu_mod22; uintptr_t agu_mod23; #endif #endif /* * No need to save r31 (blink), it's either already pushed as the pc or * blink on an irq stack frame. */ }; typedef struct _callee_saved_stack _callee_saved_stack_t; #ifdef __cplusplus } #endif #endif /* _ASMLANGUAGE */ #endif /* ZEPHYR_ARCH_ARC_INCLUDE_KERNEL_ARCH_DATA_H_ */