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