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