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