xref: /openbmc/u-boot/arch/x86/include/asm/bootparam.h (revision 88d915b10f44e044dfd874e201a4ce1fcdbff59a)
1fea25720SGraeme Russ #ifndef _ASM_X86_BOOTPARAM_H
2fea25720SGraeme Russ #define _ASM_X86_BOOTPARAM_H
3fea25720SGraeme Russ 
4fea25720SGraeme Russ #include <linux/types.h>
5fea25720SGraeme Russ #include <linux/screen_info.h>
6fea25720SGraeme Russ #include <linux/apm_bios.h>
7fea25720SGraeme Russ #include <linux/edd.h>
8fea25720SGraeme Russ #include <asm/e820.h>
9fea25720SGraeme Russ #include <asm/ist.h>
10fea25720SGraeme Russ #include <asm/video/edid.h>
11fea25720SGraeme Russ 
12fea25720SGraeme Russ /* setup data types */
13fea25720SGraeme Russ #define SETUP_NONE			0
14fea25720SGraeme Russ #define SETUP_E820_EXT			1
15fea25720SGraeme Russ 
16fea25720SGraeme Russ /* extensible setup data list node */
17fea25720SGraeme Russ struct setup_data {
18fea25720SGraeme Russ 	__u64 next;
19fea25720SGraeme Russ 	__u32 type;
20fea25720SGraeme Russ 	__u32 len;
21fea25720SGraeme Russ 	__u8 data[0];
22fea25720SGraeme Russ };
23fea25720SGraeme Russ 
24fea25720SGraeme Russ struct setup_header {
25fea25720SGraeme Russ 	__u8	setup_sects;
26fea25720SGraeme Russ 	__u16	root_flags;
27fea25720SGraeme Russ 	__u32	syssize;
28fea25720SGraeme Russ 	__u16	ram_size;
29fea25720SGraeme Russ #define RAMDISK_IMAGE_START_MASK	0x07FF
30fea25720SGraeme Russ #define RAMDISK_PROMPT_FLAG		0x8000
31fea25720SGraeme Russ #define RAMDISK_LOAD_FLAG		0x4000
32fea25720SGraeme Russ 	__u16	vid_mode;
33fea25720SGraeme Russ 	__u16	root_dev;
34fea25720SGraeme Russ 	__u16	boot_flag;
35fea25720SGraeme Russ 	__u16	jump;
36fea25720SGraeme Russ 	__u32	header;
37fea25720SGraeme Russ 	__u16	version;
38fea25720SGraeme Russ 	__u32	realmode_swtch;
39fea25720SGraeme Russ 	__u16	start_sys;
40fea25720SGraeme Russ 	__u16	kernel_version;
41fea25720SGraeme Russ 	__u8	type_of_loader;
42fea25720SGraeme Russ 	__u8	loadflags;
43fea25720SGraeme Russ #define LOADED_HIGH	(1<<0)
44fea25720SGraeme Russ #define QUIET_FLAG	(1<<5)
45fea25720SGraeme Russ #define KEEP_SEGMENTS	(1<<6)
46fea25720SGraeme Russ #define CAN_USE_HEAP	(1<<7)
47fea25720SGraeme Russ 	__u16	setup_move_size;
48fea25720SGraeme Russ 	__u32	code32_start;
49fea25720SGraeme Russ 	__u32	ramdisk_image;
50fea25720SGraeme Russ 	__u32	ramdisk_size;
51fea25720SGraeme Russ 	__u32	bootsect_kludge;
52fea25720SGraeme Russ 	__u16	heap_end_ptr;
53fea25720SGraeme Russ 	__u8	ext_loader_ver;
54fea25720SGraeme Russ 	__u8	ext_loader_type;
55fea25720SGraeme Russ 	__u32	cmd_line_ptr;
56fea25720SGraeme Russ 	__u32	initrd_addr_max;
57fea25720SGraeme Russ 	__u32	kernel_alignment;
58fea25720SGraeme Russ 	__u8	relocatable_kernel;
59fea25720SGraeme Russ 	__u8	_pad2[3];
60fea25720SGraeme Russ 	__u32	cmdline_size;
61fea25720SGraeme Russ 	__u32	hardware_subarch;
62fea25720SGraeme Russ 	__u64	hardware_subarch_data;
63fea25720SGraeme Russ 	__u32	payload_offset;
64fea25720SGraeme Russ 	__u32	payload_length;
65fea25720SGraeme Russ 	__u64	setup_data;
66*88d915b1SStefan Roese 	__u64	pref_address;
67*88d915b1SStefan Roese 	__u32	init_size;
68*88d915b1SStefan Roese 	__u32	handover_offset;
69fea25720SGraeme Russ } __attribute__((packed));
70fea25720SGraeme Russ 
71fea25720SGraeme Russ struct sys_desc_table {
72fea25720SGraeme Russ 	__u16 length;
73fea25720SGraeme Russ 	__u8  table[14];
74fea25720SGraeme Russ };
75fea25720SGraeme Russ 
76fea25720SGraeme Russ struct efi_info {
77fea25720SGraeme Russ 	__u32 efi_loader_signature;
78fea25720SGraeme Russ 	__u32 efi_systab;
79fea25720SGraeme Russ 	__u32 efi_memdesc_size;
80fea25720SGraeme Russ 	__u32 efi_memdesc_version;
81fea25720SGraeme Russ 	__u32 efi_memmap;
82fea25720SGraeme Russ 	__u32 efi_memmap_size;
83fea25720SGraeme Russ 	__u32 efi_systab_hi;
84fea25720SGraeme Russ 	__u32 efi_memmap_hi;
85fea25720SGraeme Russ };
86fea25720SGraeme Russ 
87fea25720SGraeme Russ /* The so-called "zeropage" */
88fea25720SGraeme Russ struct boot_params {
89fea25720SGraeme Russ 	struct screen_info screen_info;			/* 0x000 */
90fea25720SGraeme Russ 	struct apm_bios_info apm_bios_info;		/* 0x040 */
91fea25720SGraeme Russ 	__u8  _pad2[4];					/* 0x054 */
92fea25720SGraeme Russ 	__u64  tboot_addr;				/* 0x058 */
93fea25720SGraeme Russ 	struct ist_info ist_info;			/* 0x060 */
94fea25720SGraeme Russ 	__u8  _pad3[16];				/* 0x070 */
95fea25720SGraeme Russ 	__u8  hd0_info[16];	/* obsolete! */		/* 0x080 */
96fea25720SGraeme Russ 	__u8  hd1_info[16];	/* obsolete! */		/* 0x090 */
97fea25720SGraeme Russ 	struct sys_desc_table sys_desc_table;		/* 0x0a0 */
98fea25720SGraeme Russ 	__u8  _pad4[144];				/* 0x0b0 */
99fea25720SGraeme Russ 	struct edid_info edid_info;			/* 0x140 */
100fea25720SGraeme Russ 	struct efi_info efi_info;			/* 0x1c0 */
101fea25720SGraeme Russ 	__u32 alt_mem_k;				/* 0x1e0 */
102fea25720SGraeme Russ 	__u32 scratch;		/* Scratch field! */	/* 0x1e4 */
103fea25720SGraeme Russ 	__u8  e820_entries;				/* 0x1e8 */
104fea25720SGraeme Russ 	__u8  eddbuf_entries;				/* 0x1e9 */
105fea25720SGraeme Russ 	__u8  edd_mbr_sig_buf_entries;			/* 0x1ea */
106fea25720SGraeme Russ 	__u8  _pad6[6];					/* 0x1eb */
107fea25720SGraeme Russ 	struct setup_header hdr;    /* setup header */	/* 0x1f1 */
108fea25720SGraeme Russ 	__u8  _pad7[0x290-0x1f1-sizeof(struct setup_header)];
109fea25720SGraeme Russ 	__u32 edd_mbr_sig_buffer[EDD_MBR_SIG_MAX];	/* 0x290 */
110fea25720SGraeme Russ 	struct e820entry e820_map[E820MAX];		/* 0x2d0 */
111fea25720SGraeme Russ 	__u8  _pad8[48];				/* 0xcd0 */
112fea25720SGraeme Russ 	struct edd_info eddbuf[EDDMAXNR];		/* 0xd00 */
113fea25720SGraeme Russ 	__u8  _pad9[276];				/* 0xeec */
114fea25720SGraeme Russ } __attribute__((packed));
115fea25720SGraeme Russ 
116fea25720SGraeme Russ enum {
117fea25720SGraeme Russ 	X86_SUBARCH_PC = 0,
118fea25720SGraeme Russ 	X86_SUBARCH_LGUEST,
119fea25720SGraeme Russ 	X86_SUBARCH_XEN,
120fea25720SGraeme Russ 	X86_SUBARCH_MRST,
121fea25720SGraeme Russ 	X86_NR_SUBARCHS,
122fea25720SGraeme Russ };
123fea25720SGraeme Russ #endif /* _ASM_X86_BOOTPARAM_H */
124