1ab0c7fb2SPaolo Bonzini /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2ab0c7fb2SPaolo Bonzini #ifndef _ASM_X86_SETUP_DATA_H 3ab0c7fb2SPaolo Bonzini #define _ASM_X86_SETUP_DATA_H 4ab0c7fb2SPaolo Bonzini 5ab0c7fb2SPaolo Bonzini /* setup_data/setup_indirect types */ 6ab0c7fb2SPaolo Bonzini #define SETUP_NONE 0 7ab0c7fb2SPaolo Bonzini #define SETUP_E820_EXT 1 8ab0c7fb2SPaolo Bonzini #define SETUP_DTB 2 9ab0c7fb2SPaolo Bonzini #define SETUP_PCI 3 10ab0c7fb2SPaolo Bonzini #define SETUP_EFI 4 11ab0c7fb2SPaolo Bonzini #define SETUP_APPLE_PROPERTIES 5 12ab0c7fb2SPaolo Bonzini #define SETUP_JAILHOUSE 6 13ab0c7fb2SPaolo Bonzini #define SETUP_CC_BLOB 7 14ab0c7fb2SPaolo Bonzini #define SETUP_IMA 8 15ab0c7fb2SPaolo Bonzini #define SETUP_RNG_SEED 9 16ab0c7fb2SPaolo Bonzini #define SETUP_ENUM_MAX SETUP_RNG_SEED 17ab0c7fb2SPaolo Bonzini 18ab0c7fb2SPaolo Bonzini #define SETUP_INDIRECT (1<<31) 19ab0c7fb2SPaolo Bonzini #define SETUP_TYPE_MAX (SETUP_ENUM_MAX | SETUP_INDIRECT) 20ab0c7fb2SPaolo Bonzini 21ab0c7fb2SPaolo Bonzini #ifndef __ASSEMBLY__ 22ab0c7fb2SPaolo Bonzini 23ab0c7fb2SPaolo Bonzini #include "standard-headers/linux/types.h" 24ab0c7fb2SPaolo Bonzini 25ab0c7fb2SPaolo Bonzini /* extensible setup data list node */ 26ab0c7fb2SPaolo Bonzini struct setup_data { 27ab0c7fb2SPaolo Bonzini uint64_t next; 28ab0c7fb2SPaolo Bonzini uint32_t type; 29ab0c7fb2SPaolo Bonzini uint32_t len; 30ab0c7fb2SPaolo Bonzini uint8_t data[]; 31ab0c7fb2SPaolo Bonzini }; 32ab0c7fb2SPaolo Bonzini 33ab0c7fb2SPaolo Bonzini /* extensible setup indirect data node */ 34ab0c7fb2SPaolo Bonzini struct setup_indirect { 35ab0c7fb2SPaolo Bonzini uint32_t type; 36ab0c7fb2SPaolo Bonzini uint32_t reserved; /* Reserved, must be set to zero. */ 37ab0c7fb2SPaolo Bonzini uint64_t len; 38ab0c7fb2SPaolo Bonzini uint64_t addr; 39ab0c7fb2SPaolo Bonzini }; 40ab0c7fb2SPaolo Bonzini 41ab0c7fb2SPaolo Bonzini /* 42ab0c7fb2SPaolo Bonzini * The E820 memory region entry of the boot protocol ABI: 43ab0c7fb2SPaolo Bonzini */ 44ab0c7fb2SPaolo Bonzini struct boot_e820_entry { 45ab0c7fb2SPaolo Bonzini uint64_t addr; 46ab0c7fb2SPaolo Bonzini uint64_t size; 47ab0c7fb2SPaolo Bonzini uint32_t type; 48ab0c7fb2SPaolo Bonzini } QEMU_PACKED; 49ab0c7fb2SPaolo Bonzini 50ab0c7fb2SPaolo Bonzini /* 51ab0c7fb2SPaolo Bonzini * The boot loader is passing platform information via this Jailhouse-specific 52ab0c7fb2SPaolo Bonzini * setup data structure. 53ab0c7fb2SPaolo Bonzini */ 54ab0c7fb2SPaolo Bonzini struct jailhouse_setup_data { 55ab0c7fb2SPaolo Bonzini struct { 56ab0c7fb2SPaolo Bonzini uint16_t version; 57ab0c7fb2SPaolo Bonzini uint16_t compatible_version; 58ab0c7fb2SPaolo Bonzini } QEMU_PACKED hdr; 59ab0c7fb2SPaolo Bonzini struct { 60ab0c7fb2SPaolo Bonzini uint16_t pm_timer_address; 61ab0c7fb2SPaolo Bonzini uint16_t num_cpus; 62ab0c7fb2SPaolo Bonzini uint64_t pci_mmconfig_base; 63ab0c7fb2SPaolo Bonzini uint32_t tsc_khz; 64ab0c7fb2SPaolo Bonzini uint32_t apic_khz; 65ab0c7fb2SPaolo Bonzini uint8_t standard_ioapic; 66ab0c7fb2SPaolo Bonzini uint8_t cpu_ids[255]; 67ab0c7fb2SPaolo Bonzini } QEMU_PACKED v1; 68ab0c7fb2SPaolo Bonzini struct { 69ab0c7fb2SPaolo Bonzini uint32_t flags; 70ab0c7fb2SPaolo Bonzini } QEMU_PACKED v2; 71ab0c7fb2SPaolo Bonzini } QEMU_PACKED; 72ab0c7fb2SPaolo Bonzini 73ab0c7fb2SPaolo Bonzini /* 74ab0c7fb2SPaolo Bonzini * IMA buffer setup data information from the previous kernel during kexec 75ab0c7fb2SPaolo Bonzini */ 76ab0c7fb2SPaolo Bonzini struct ima_setup_data { 77ab0c7fb2SPaolo Bonzini uint64_t addr; 78ab0c7fb2SPaolo Bonzini uint64_t size; 79ab0c7fb2SPaolo Bonzini } QEMU_PACKED; 80ab0c7fb2SPaolo Bonzini 81ab0c7fb2SPaolo Bonzini #endif /* __ASSEMBLY__ */ 82ab0c7fb2SPaolo Bonzini 83ab0c7fb2SPaolo Bonzini #endif /* _ASM_X86_SETUP_DATA_H */ 84