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 #else
33 
34 /* Default definitions when no architecture specific definitions exist. */
35 
36 /* Per CPU architecture specifics (empty) */
37 struct _cpu_arch {
38 #ifdef __cplusplus
39 	/* This struct will have a size 0 in C which is not allowed in C++ (it'll have a size 1). To
40 	 * prevent this, we add a 1 byte dummy variable.
41 	 */
42 	uint8_t dummy;
43 #endif
44 };
45 
46 #endif
47 
48 /* typedefs to be used with GEN_OFFSET_SYM(), etc. */
49 typedef struct _cpu_arch _cpu_arch_t;
50 
51 #endif /* _ASMLANGUAGE */
52 
53 #endif /* ZEPHYR_INCLUDE_ARCH_STRUCTS_H_ */
54