1 /*
2  * Copyright (c) BayLibre SAS
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /*
8  * The purpose of this file is to provide essential/minimal architecture-
9  * specific structure definitions to be included in generic kernel
10  * structures.
11  *
12  * The following rules must be observed:
13  *  1. arch/structs.h shall not depend on kernel.h both directly and
14  *     indirectly (i.e. it shall not include any header files that include
15  *     kernel.h in their dependency chain).
16  *  2. kernel.h shall imply arch/structs.h via kernel_structs.h , such that
17  *     it shall not be necessary to include arch/structs.h explicitly when
18  *     kernel.h is included.
19  */
20 
21 #ifndef ZEPHYR_INCLUDE_ARCH_STRUCTS_H_
22 #define ZEPHYR_INCLUDE_ARCH_STRUCTS_H_
23 
24 #if !defined(_ASMLANGUAGE)
25 
26 #if defined(CONFIG_ARM64)
27 #include <zephyr/arch/arm64/structs.h>
28 #elif defined(CONFIG_RISCV)
29 #include <zephyr/arch/riscv/structs.h>
30 #elif defined(CONFIG_ARM)
31 #include <zephyr/arch/arm/structs.h>
32 #elif defined(CONFIG_X86) && !defined(CONFIG_X86_64)
33 #include <zephyr/arch/x86/ia32/structs.h>
34 #elif defined(CONFIG_XTENSA)
35 #include <zephyr/arch/xtensa/structs.h>
36 #else
37 
38 /* Default definitions when no architecture specific definitions exist. */
39 
40 /* Per CPU architecture specifics (empty) */
41 struct _cpu_arch {
42 #ifdef __cplusplus
43 	/* This struct will have a size 0 in C which is not allowed in C++ (it'll have a size 1). To
44 	 * prevent this, we add a 1 byte dummy variable.
45 	 */
46 	uint8_t dummy;
47 #endif
48 };
49 
50 #endif
51 
52 /* typedefs to be used with GEN_OFFSET_SYM(), etc. */
53 typedef struct _cpu_arch _cpu_arch_t;
54 
55 #endif /* _ASMLANGUAGE */
56 
57 #endif /* ZEPHYR_INCLUDE_ARCH_STRUCTS_H_ */
58