xref: /titanic_44/usr/src/uts/common/sys/multiboot2.h (revision e84622ca60e336e723b4e107b019b1ecb4542eb3)
1*e84622caSToomas Soome /*
2*e84622caSToomas Soome  * Copyright (C) 1999,2003,2007,2008,2009,2010  Free Software Foundation, Inc.
3*e84622caSToomas Soome  *
4*e84622caSToomas Soome  * Permission is hereby granted, free of charge, to any person obtaining a copy
5*e84622caSToomas Soome  * of this software and associated documentation files (the "Software"), to
6*e84622caSToomas Soome  * deal in the Software without restriction, including without limitation the
7*e84622caSToomas Soome  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8*e84622caSToomas Soome  * sell copies of the Software, and to permit persons to whom the Software is
9*e84622caSToomas Soome  * furnished to do so, subject to the following conditions:
10*e84622caSToomas Soome  *
11*e84622caSToomas Soome  * The above copyright notice and this permission notice shall be included in
12*e84622caSToomas Soome  * all copies or substantial portions of the Software.
13*e84622caSToomas Soome  *
14*e84622caSToomas Soome  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*e84622caSToomas Soome  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*e84622caSToomas Soome  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL ANY
17*e84622caSToomas Soome  * DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18*e84622caSToomas Soome  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
19*e84622caSToomas Soome  * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20*e84622caSToomas Soome  */
21*e84622caSToomas Soome 
22*e84622caSToomas Soome /*
23*e84622caSToomas Soome  * Copyright 2016 Toomas Soome <tsoome@me.com>
24*e84622caSToomas Soome  */
25*e84622caSToomas Soome 
26*e84622caSToomas Soome /*
27*e84622caSToomas Soome  * This header contains definitions for Multiboot 2 boot protocol, based on
28*e84622caSToomas Soome  * the reference implementation by grub 2.
29*e84622caSToomas Soome  *
30*e84622caSToomas Soome  * At the time this was written (Jan 2017), the Multiboot 2 documentation is in
31*e84622caSToomas Soome  * process of being rewritten and the information in the specification is not
32*e84622caSToomas Soome  * entirely correct. Instead, you must rely on grub 2 source code.
33*e84622caSToomas Soome  *
34*e84622caSToomas Soome  * This header provides essential support for the Multiboot 2 specification
35*e84622caSToomas Soome  * for illumos and makes it possible to pass the needed structures from the
36*e84622caSToomas Soome  * boot loader to the kernel.
37*e84622caSToomas Soome  */
38*e84622caSToomas Soome 
39*e84622caSToomas Soome #ifndef	_SYS_MULTIBOOT2_H
40*e84622caSToomas Soome #define	_SYS_MULTIBOOT2_H
41*e84622caSToomas Soome 
42*e84622caSToomas Soome #ifdef	__cplusplus
43*e84622caSToomas Soome extern "C" {
44*e84622caSToomas Soome #endif
45*e84622caSToomas Soome 
46*e84622caSToomas Soome /* How many bytes from the start of the file we search for the header.  */
47*e84622caSToomas Soome #define	MULTIBOOT_SEARCH			32768
48*e84622caSToomas Soome #define	MULTIBOOT_HEADER_ALIGN			8
49*e84622caSToomas Soome 
50*e84622caSToomas Soome /* The magic field should contain this.  */
51*e84622caSToomas Soome #define	MULTIBOOT2_HEADER_MAGIC			0xe85250d6
52*e84622caSToomas Soome 
53*e84622caSToomas Soome /* This should be in %eax.  */
54*e84622caSToomas Soome #define	MULTIBOOT2_BOOTLOADER_MAGIC		0x36d76289
55*e84622caSToomas Soome 
56*e84622caSToomas Soome /* Alignment of multiboot modules.  */
57*e84622caSToomas Soome #if defined(__i386) || defined(__amd64)
58*e84622caSToomas Soome #define	MULTIBOOT_MOD_ALIGN			0x00001000
59*e84622caSToomas Soome #else
60*e84622caSToomas Soome #error No architecture defined
61*e84622caSToomas Soome #endif
62*e84622caSToomas Soome 
63*e84622caSToomas Soome /* Alignment of the multiboot info structure.  */
64*e84622caSToomas Soome #define	MULTIBOOT_INFO_ALIGN			0x00000008
65*e84622caSToomas Soome 
66*e84622caSToomas Soome /* Flags set in the 'flags' member of the multiboot header.  */
67*e84622caSToomas Soome 
68*e84622caSToomas Soome #define	MULTIBOOT_TAG_ALIGN			8
69*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_END			0
70*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_CMDLINE		1
71*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_BOOT_LOADER_NAME	2
72*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_MODULE		3
73*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_BASIC_MEMINFO	4
74*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_BOOTDEV		5
75*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_MMAP			6
76*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_VBE			7
77*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_FRAMEBUFFER		8
78*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_ELF_SECTIONS		9
79*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_APM			10
80*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_EFI32		11
81*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_EFI64		12
82*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_SMBIOS		13
83*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_ACPI_OLD		14
84*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_ACPI_NEW		15
85*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_NETWORK		16
86*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_EFI_MMAP		17
87*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_EFI_BS		18
88*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_EFI32_IH		19
89*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_EFI64_IH		20
90*e84622caSToomas Soome #define	MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR	21
91*e84622caSToomas Soome 
92*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_END			0
93*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST	1
94*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_ADDRESS			2
95*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS		3
96*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS		4
97*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_FRAMEBUFFER		5
98*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_MODULE_ALIGN		6
99*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_EFI_BS			7
100*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32	8
101*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64	9
102*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_RELOCATABLE		10
103*e84622caSToomas Soome 
104*e84622caSToomas Soome #define	MULTIBOOT_ARCHITECTURE_I386	0
105*e84622caSToomas Soome #define	MULTIBOOT_ARCHITECTURE_MIPS32	4
106*e84622caSToomas Soome #define	MULTIBOOT_HEADER_TAG_OPTIONAL	1
107*e84622caSToomas Soome 
108*e84622caSToomas Soome /* Hints for relocatable kernel load preference */
109*e84622caSToomas Soome #define	MULTIBOOT_LOAD_PREFERENCE_NONE	0
110*e84622caSToomas Soome #define	MULTIBOOT_LOAD_PREFERENCE_LOW	1
111*e84622caSToomas Soome #define	MULTIBOOT_LOAD_PREFERENCE_HIGH	2
112*e84622caSToomas Soome 
113*e84622caSToomas Soome /* Values for console_flags field in tag multiboot_header_tag_console_flags. */
114*e84622caSToomas Soome #define	MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED	1
115*e84622caSToomas Soome #define	MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED	2
116*e84622caSToomas Soome 
117*e84622caSToomas Soome #ifndef _ASM
118*e84622caSToomas Soome 
119*e84622caSToomas Soome #include <sys/stdint.h>
120*e84622caSToomas Soome 
121*e84622caSToomas Soome #pragma pack(1)
122*e84622caSToomas Soome 
123*e84622caSToomas Soome typedef struct multiboot_header_tag {
124*e84622caSToomas Soome 	uint16_t mbh_type;
125*e84622caSToomas Soome 	uint16_t mbh_flags;
126*e84622caSToomas Soome 	uint32_t mbh_size;
127*e84622caSToomas Soome } multiboot_header_tag_t;
128*e84622caSToomas Soome 
129*e84622caSToomas Soome typedef struct multiboot2_header {
130*e84622caSToomas Soome 	/* Must be MULTIBOOT2_MAGIC - see above.  */
131*e84622caSToomas Soome 	uint32_t mb2_magic;
132*e84622caSToomas Soome 
133*e84622caSToomas Soome 	/* ISA */
134*e84622caSToomas Soome 	uint32_t mb2_architecture;
135*e84622caSToomas Soome 
136*e84622caSToomas Soome 	/* Total header length.  */
137*e84622caSToomas Soome 	uint32_t mb2_header_length;
138*e84622caSToomas Soome 
139*e84622caSToomas Soome 	/* The above fields plus this one must equal 0 mod 2^32. */
140*e84622caSToomas Soome 	uint32_t mb2_checksum;
141*e84622caSToomas Soome 	multiboot_header_tag_t mb2_tags[];
142*e84622caSToomas Soome } multiboot2_header_t;
143*e84622caSToomas Soome 
144*e84622caSToomas Soome typedef struct multiboot_header_tag_information_request {
145*e84622caSToomas Soome 	uint16_t mbh_type;
146*e84622caSToomas Soome 	uint16_t mbh_flags;
147*e84622caSToomas Soome 	uint32_t mbh_size;
148*e84622caSToomas Soome 	uint32_t mbh_requests[];
149*e84622caSToomas Soome } multiboot_header_tag_information_request_t;
150*e84622caSToomas Soome 
151*e84622caSToomas Soome typedef struct multiboot_header_tag_address {
152*e84622caSToomas Soome 	uint16_t mbh_type;
153*e84622caSToomas Soome 	uint16_t mbh_flags;
154*e84622caSToomas Soome 	uint32_t mbh_size;
155*e84622caSToomas Soome 	uint32_t mbh_header_addr;
156*e84622caSToomas Soome 	uint32_t mbh_load_addr;
157*e84622caSToomas Soome 	uint32_t mbh_load_end_addr;
158*e84622caSToomas Soome 	uint32_t mbh_bss_end_addr;
159*e84622caSToomas Soome } multiboot_header_tag_address_t;
160*e84622caSToomas Soome 
161*e84622caSToomas Soome typedef struct multiboot_header_tag_entry_address {
162*e84622caSToomas Soome 	uint16_t mbh_type;
163*e84622caSToomas Soome 	uint16_t mbh_flags;
164*e84622caSToomas Soome 	uint32_t mbh_size;
165*e84622caSToomas Soome 	uint32_t mbh_entry_addr;
166*e84622caSToomas Soome } multiboot_header_tag_entry_address_t;
167*e84622caSToomas Soome 
168*e84622caSToomas Soome typedef struct multiboot_header_tag_console_flags {
169*e84622caSToomas Soome 	uint16_t mbh_type;
170*e84622caSToomas Soome 	uint16_t mbh_flags;
171*e84622caSToomas Soome 	uint32_t mbh_size;
172*e84622caSToomas Soome 	uint32_t mbh_console_flags;
173*e84622caSToomas Soome } multiboot_header_tag_console_flags_t;
174*e84622caSToomas Soome 
175*e84622caSToomas Soome typedef struct multiboot_header_tag_framebuffer {
176*e84622caSToomas Soome 	uint16_t mbh_type;
177*e84622caSToomas Soome 	uint16_t mbh_flags;
178*e84622caSToomas Soome 	uint32_t mbh_size;
179*e84622caSToomas Soome 	uint32_t mbh_width;
180*e84622caSToomas Soome 	uint32_t mbh_height;
181*e84622caSToomas Soome 	uint32_t mbh_depth;
182*e84622caSToomas Soome } multiboot_header_tag_framebuffer_t;
183*e84622caSToomas Soome 
184*e84622caSToomas Soome typedef struct multiboot_header_tag_module_align {
185*e84622caSToomas Soome 	uint16_t mbh_type;
186*e84622caSToomas Soome 	uint16_t mbh_flags;
187*e84622caSToomas Soome 	uint32_t mbh_size;
188*e84622caSToomas Soome } multiboot_header_tag_module_align_t;
189*e84622caSToomas Soome 
190*e84622caSToomas Soome typedef struct multiboot_header_tag_relocatable {
191*e84622caSToomas Soome 	uint16_t mbh_type;
192*e84622caSToomas Soome 	uint16_t mbh_flags;
193*e84622caSToomas Soome 	uint32_t mbh_size;
194*e84622caSToomas Soome 	uint32_t mbh_min_addr;
195*e84622caSToomas Soome 	uint32_t mbh_max_addr;
196*e84622caSToomas Soome 	uint32_t mbh_align;
197*e84622caSToomas Soome 	uint32_t mbh_preference;
198*e84622caSToomas Soome } multiboot_header_tag_relocatable_t;
199*e84622caSToomas Soome 
200*e84622caSToomas Soome typedef struct multiboot_color {
201*e84622caSToomas Soome 	uint8_t mb_red;
202*e84622caSToomas Soome 	uint8_t mb_green;
203*e84622caSToomas Soome 	uint8_t mb_blue;
204*e84622caSToomas Soome } multiboot_color_t;
205*e84622caSToomas Soome 
206*e84622caSToomas Soome typedef struct multiboot_mmap_entry {
207*e84622caSToomas Soome 	uint64_t mmap_addr;
208*e84622caSToomas Soome 	uint64_t mmap_len;
209*e84622caSToomas Soome #define	MULTIBOOT_MEMORY_AVAILABLE		1
210*e84622caSToomas Soome #define	MULTIBOOT_MEMORY_RESERVED		2
211*e84622caSToomas Soome #define	MULTIBOOT_MEMORY_ACPI_RECLAIMABLE	3
212*e84622caSToomas Soome #define	MULTIBOOT_MEMORY_NVS			4
213*e84622caSToomas Soome #define	MULTIBOOT_MEMORY_BADRAM			5
214*e84622caSToomas Soome 	uint32_t mmap_type;
215*e84622caSToomas Soome 	uint32_t mmap_reserved;
216*e84622caSToomas Soome } multiboot_mmap_entry_t;
217*e84622caSToomas Soome 
218*e84622caSToomas Soome typedef struct multiboot_tag {
219*e84622caSToomas Soome 	uint32_t mb_type;
220*e84622caSToomas Soome 	uint32_t mb_size;
221*e84622caSToomas Soome } multiboot_tag_t;
222*e84622caSToomas Soome 
223*e84622caSToomas Soome typedef struct multiboot2_info_header {
224*e84622caSToomas Soome 	uint32_t mbi_total_size;
225*e84622caSToomas Soome 	uint32_t mbi_reserved;
226*e84622caSToomas Soome 	multiboot_tag_t mbi_tags[];
227*e84622caSToomas Soome } multiboot2_info_header_t;
228*e84622caSToomas Soome 
229*e84622caSToomas Soome typedef struct multiboot_tag_string {
230*e84622caSToomas Soome 	uint32_t mb_type;
231*e84622caSToomas Soome 	uint32_t mb_size;
232*e84622caSToomas Soome 	char mb_string[];
233*e84622caSToomas Soome } multiboot_tag_string_t;
234*e84622caSToomas Soome 
235*e84622caSToomas Soome typedef struct multiboot_tag_module {
236*e84622caSToomas Soome 	uint32_t mb_type;
237*e84622caSToomas Soome 	uint32_t mb_size;
238*e84622caSToomas Soome 	uint32_t mb_mod_start;
239*e84622caSToomas Soome 	uint32_t mb_mod_end;
240*e84622caSToomas Soome 	char mb_cmdline[];
241*e84622caSToomas Soome } multiboot_tag_module_t;
242*e84622caSToomas Soome 
243*e84622caSToomas Soome typedef struct multiboot_tag_basic_meminfo {
244*e84622caSToomas Soome 	uint32_t mb_type;
245*e84622caSToomas Soome 	uint32_t mb_size;
246*e84622caSToomas Soome 	uint32_t mb_mem_lower;
247*e84622caSToomas Soome 	uint32_t mb_mem_upper;
248*e84622caSToomas Soome } multiboot_tag_basic_meminfo_t;
249*e84622caSToomas Soome 
250*e84622caSToomas Soome typedef struct multiboot_tag_bootdev {
251*e84622caSToomas Soome 	uint32_t mb_type;
252*e84622caSToomas Soome 	uint32_t mb_size;
253*e84622caSToomas Soome 	uint32_t mb_biosdev;
254*e84622caSToomas Soome 	uint32_t mb_slice;
255*e84622caSToomas Soome 	uint32_t mb_part;
256*e84622caSToomas Soome } multiboot_tag_bootdev_t;
257*e84622caSToomas Soome 
258*e84622caSToomas Soome typedef struct multiboot_tag_mmap {
259*e84622caSToomas Soome 	uint32_t mb_type;
260*e84622caSToomas Soome 	uint32_t mb_size;
261*e84622caSToomas Soome 	uint32_t mb_entry_size;
262*e84622caSToomas Soome 	uint32_t mb_entry_version;
263*e84622caSToomas Soome 	uint8_t mb_entries[];
264*e84622caSToomas Soome } multiboot_tag_mmap_t;
265*e84622caSToomas Soome 
266*e84622caSToomas Soome struct multiboot_vbe_info_block {
267*e84622caSToomas Soome 	uint8_t vbe_external_specification[512];
268*e84622caSToomas Soome };
269*e84622caSToomas Soome 
270*e84622caSToomas Soome struct multiboot_vbe_mode_info_block {
271*e84622caSToomas Soome 	uint8_t vbe_external_specification[256];
272*e84622caSToomas Soome };
273*e84622caSToomas Soome 
274*e84622caSToomas Soome typedef struct multiboot_tag_vbe {
275*e84622caSToomas Soome 	uint32_t mb_type;
276*e84622caSToomas Soome 	uint32_t mb_size;
277*e84622caSToomas Soome 
278*e84622caSToomas Soome 	uint16_t vbe_mode;
279*e84622caSToomas Soome 	uint16_t vbe_interface_seg;
280*e84622caSToomas Soome 	uint16_t vbe_interface_off;
281*e84622caSToomas Soome 	uint16_t vbe_interface_len;
282*e84622caSToomas Soome 
283*e84622caSToomas Soome 	struct multiboot_vbe_info_block vbe_control_info;
284*e84622caSToomas Soome 	struct multiboot_vbe_mode_info_block vbe_mode_info;
285*e84622caSToomas Soome } multiboot_tag_vbe_t;
286*e84622caSToomas Soome 
287*e84622caSToomas Soome struct multiboot_tag_framebuffer_common {
288*e84622caSToomas Soome 	uint32_t mb_type;
289*e84622caSToomas Soome 	uint32_t mb_size;
290*e84622caSToomas Soome 
291*e84622caSToomas Soome 	uint64_t framebuffer_addr;
292*e84622caSToomas Soome 	uint32_t framebuffer_pitch;
293*e84622caSToomas Soome 	uint32_t framebuffer_width;
294*e84622caSToomas Soome 	uint32_t framebuffer_height;
295*e84622caSToomas Soome 	uint8_t framebuffer_bpp;
296*e84622caSToomas Soome #define	MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED	0
297*e84622caSToomas Soome #define	MULTIBOOT_FRAMEBUFFER_TYPE_RGB		1
298*e84622caSToomas Soome #define	MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT	2
299*e84622caSToomas Soome 	uint8_t framebuffer_type;
300*e84622caSToomas Soome 	uint16_t mb_reserved;
301*e84622caSToomas Soome };
302*e84622caSToomas Soome 
303*e84622caSToomas Soome typedef struct multiboot_tag_framebuffer {
304*e84622caSToomas Soome 	struct multiboot_tag_framebuffer_common framebuffer_common;
305*e84622caSToomas Soome 
306*e84622caSToomas Soome 	union {
307*e84622caSToomas Soome 		struct {
308*e84622caSToomas Soome 			uint16_t framebuffer_palette_num_colors;
309*e84622caSToomas Soome 			multiboot_color_t framebuffer_palette[];
310*e84622caSToomas Soome 		} fb1;
311*e84622caSToomas Soome 		struct {
312*e84622caSToomas Soome 			uint8_t framebuffer_red_field_position;
313*e84622caSToomas Soome 			uint8_t framebuffer_red_mask_size;
314*e84622caSToomas Soome 			uint8_t framebuffer_green_field_position;
315*e84622caSToomas Soome 			uint8_t framebuffer_green_mask_size;
316*e84622caSToomas Soome 			uint8_t framebuffer_blue_field_position;
317*e84622caSToomas Soome 			uint8_t framebuffer_blue_mask_size;
318*e84622caSToomas Soome 		} fb2;
319*e84622caSToomas Soome 	} u;
320*e84622caSToomas Soome } multiboot_tag_framebuffer_t;
321*e84622caSToomas Soome 
322*e84622caSToomas Soome typedef struct multiboot_tag_elf_sections {
323*e84622caSToomas Soome 	uint32_t mb_type;
324*e84622caSToomas Soome 	uint32_t mb_size;
325*e84622caSToomas Soome 	uint32_t mb_num;
326*e84622caSToomas Soome 	uint32_t mb_entsize;
327*e84622caSToomas Soome 	uint32_t mb_shndx;
328*e84622caSToomas Soome 	char mb_sections[];
329*e84622caSToomas Soome } multiboot_tag_elf_sections_t;
330*e84622caSToomas Soome 
331*e84622caSToomas Soome typedef struct multiboot_tag_apm {
332*e84622caSToomas Soome 	uint32_t mb_type;
333*e84622caSToomas Soome 	uint32_t mb_size;
334*e84622caSToomas Soome 	uint16_t mb_version;
335*e84622caSToomas Soome 	uint16_t mb_cseg;
336*e84622caSToomas Soome 	uint32_t mb_offset;
337*e84622caSToomas Soome 	uint16_t mb_cseg_16;
338*e84622caSToomas Soome 	uint16_t mb_dseg;
339*e84622caSToomas Soome 	uint16_t mb_flags;
340*e84622caSToomas Soome 	uint16_t mb_cseg_len;
341*e84622caSToomas Soome 	uint16_t mb_cseg_16_len;
342*e84622caSToomas Soome 	uint16_t mb_dseg_len;
343*e84622caSToomas Soome } multiboot_tag_apm_t;
344*e84622caSToomas Soome 
345*e84622caSToomas Soome typedef struct multiboot_tag_efi32 {
346*e84622caSToomas Soome 	uint32_t mb_type;
347*e84622caSToomas Soome 	uint32_t mb_size;
348*e84622caSToomas Soome 	uint32_t mb_pointer;
349*e84622caSToomas Soome } multiboot_tag_efi32_t;
350*e84622caSToomas Soome 
351*e84622caSToomas Soome typedef struct multiboot_tag_efi64 {
352*e84622caSToomas Soome 	uint32_t mb_type;
353*e84622caSToomas Soome 	uint32_t mb_size;
354*e84622caSToomas Soome 	uint64_t mb_pointer;
355*e84622caSToomas Soome } multiboot_tag_efi64_t;
356*e84622caSToomas Soome 
357*e84622caSToomas Soome typedef struct multiboot_tag_smbios {
358*e84622caSToomas Soome 	uint32_t mb_type;
359*e84622caSToomas Soome 	uint32_t mb_size;
360*e84622caSToomas Soome 	uint8_t mb_major;
361*e84622caSToomas Soome 	uint8_t mb_minor;
362*e84622caSToomas Soome 	uint8_t mb_reserved[6];
363*e84622caSToomas Soome 	uint8_t mb_tables[];
364*e84622caSToomas Soome } multiboot_tag_smbios_t;
365*e84622caSToomas Soome 
366*e84622caSToomas Soome typedef struct multiboot_tag_old_acpi {
367*e84622caSToomas Soome 	uint32_t mb_type;
368*e84622caSToomas Soome 	uint32_t mb_size;
369*e84622caSToomas Soome 	uint8_t mb_rsdp[];
370*e84622caSToomas Soome } multiboot_tag_old_acpi_t;
371*e84622caSToomas Soome 
372*e84622caSToomas Soome typedef struct multiboot_tag_new_acpi {
373*e84622caSToomas Soome 	uint32_t mb_type;
374*e84622caSToomas Soome 	uint32_t mb_size;
375*e84622caSToomas Soome 	uint8_t mb_rsdp[];
376*e84622caSToomas Soome } multiboot_tag_new_acpi_t;
377*e84622caSToomas Soome 
378*e84622caSToomas Soome typedef struct multiboot_tag_network {
379*e84622caSToomas Soome 	uint32_t mb_type;
380*e84622caSToomas Soome 	uint32_t mb_size;
381*e84622caSToomas Soome 	uint8_t mb_dhcpack[];
382*e84622caSToomas Soome } multiboot_tag_network_t;
383*e84622caSToomas Soome 
384*e84622caSToomas Soome typedef struct multiboot_tag_efi_mmap {
385*e84622caSToomas Soome 	uint32_t mb_type;
386*e84622caSToomas Soome 	uint32_t mb_size;
387*e84622caSToomas Soome 	uint32_t mb_descr_size;
388*e84622caSToomas Soome 	uint32_t mb_descr_vers;
389*e84622caSToomas Soome 	uint8_t mb_efi_mmap[];
390*e84622caSToomas Soome } multiboot_tag_efi_mmap_t;
391*e84622caSToomas Soome 
392*e84622caSToomas Soome typedef struct multiboot_tag_efi32_ih {
393*e84622caSToomas Soome 	uint32_t mb_type;
394*e84622caSToomas Soome 	uint32_t mb_size;
395*e84622caSToomas Soome 	uint32_t mb_pointer;
396*e84622caSToomas Soome } multiboot_tag_efi32_ih_t;
397*e84622caSToomas Soome 
398*e84622caSToomas Soome typedef struct multiboot_tag_efi64_ih {
399*e84622caSToomas Soome 	uint32_t mb_type;
400*e84622caSToomas Soome 	uint32_t mb_size;
401*e84622caSToomas Soome 	uint64_t mb_pointer;
402*e84622caSToomas Soome } multiboot_tag_efi64_ih_t;
403*e84622caSToomas Soome 
404*e84622caSToomas Soome typedef struct multiboot_tag_load_base_addr {
405*e84622caSToomas Soome 	uint32_t mb_type;
406*e84622caSToomas Soome 	uint32_t mb_size;
407*e84622caSToomas Soome 	uint32_t mb_load_base_addr;
408*e84622caSToomas Soome } multiboot_tag_load_base_addr_t;
409*e84622caSToomas Soome 
410*e84622caSToomas Soome #pragma pack()
411*e84622caSToomas Soome 
412*e84622caSToomas Soome #endif /* !_ASM */
413*e84622caSToomas Soome 
414*e84622caSToomas Soome #ifdef	__cplusplus
415*e84622caSToomas Soome }
416*e84622caSToomas Soome #endif
417*e84622caSToomas Soome 
418*e84622caSToomas Soome #endif /* !_SYS_MULTIBOOT2_H */
419