Path: blob/main/stand/efi/loader/arch/amd64/multiboot2.h
34907 views
/* multiboot2.h - Multiboot 2 header file. */1/* Copyright (C) 1999,2003,2007,2008,2009,2010 Free Software Foundation, Inc.2*3* Permission is hereby granted, free of charge, to any person obtaining a copy4* of this software and associated documentation files (the "Software"), to5* deal in the Software without restriction, including without limitation the6* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or7* sell copies of the Software, and to permit persons to whom the Software is8* furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice shall be included in11* all copies or substantial portions of the Software.12*13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,15* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY16* DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,17* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR18* IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.19*/2021#ifndef MULTIBOOT_HEADER22#define MULTIBOOT_HEADER 12324/* How many bytes from the start of the file we search for the header. */25#define MULTIBOOT_SEARCH 3276826#define MULTIBOOT_HEADER_ALIGN 82728/* The magic field should contain this. */29#define MULTIBOOT2_HEADER_MAGIC 0xe85250d63031/* This should be in %eax. */32#define MULTIBOOT2_BOOTLOADER_MAGIC 0x36d762893334/* Alignment of multiboot modules. */35#define MULTIBOOT_MOD_ALIGN 0x000010003637/* Alignment of the multiboot info structure. */38#define MULTIBOOT_INFO_ALIGN 0x000000083940/* Flags set in the 'flags' member of the multiboot header. */4142#define MULTIBOOT_TAG_ALIGN 843#define MULTIBOOT_TAG_TYPE_END 044#define MULTIBOOT_TAG_TYPE_CMDLINE 145#define MULTIBOOT_TAG_TYPE_BOOT_LOADER_NAME 246#define MULTIBOOT_TAG_TYPE_MODULE 347#define MULTIBOOT_TAG_TYPE_BASIC_MEMINFO 448#define MULTIBOOT_TAG_TYPE_BOOTDEV 549#define MULTIBOOT_TAG_TYPE_MMAP 650#define MULTIBOOT_TAG_TYPE_VBE 751#define MULTIBOOT_TAG_TYPE_FRAMEBUFFER 852#define MULTIBOOT_TAG_TYPE_ELF_SECTIONS 953#define MULTIBOOT_TAG_TYPE_APM 1054#define MULTIBOOT_TAG_TYPE_EFI32 1155#define MULTIBOOT_TAG_TYPE_EFI64 1256#define MULTIBOOT_TAG_TYPE_SMBIOS 1357#define MULTIBOOT_TAG_TYPE_ACPI_OLD 1458#define MULTIBOOT_TAG_TYPE_ACPI_NEW 1559#define MULTIBOOT_TAG_TYPE_NETWORK 1660#define MULTIBOOT_TAG_TYPE_EFI_MMAP 1761#define MULTIBOOT_TAG_TYPE_EFI_BS 1862#define MULTIBOOT_TAG_TYPE_EFI32_IH 1963#define MULTIBOOT_TAG_TYPE_EFI64_IH 2064#define MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR 216566#define MULTIBOOT_HEADER_TAG_END 067#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 168#define MULTIBOOT_HEADER_TAG_ADDRESS 269#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS 370#define MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS 471#define MULTIBOOT_HEADER_TAG_FRAMEBUFFER 572#define MULTIBOOT_HEADER_TAG_MODULE_ALIGN 673#define MULTIBOOT_HEADER_TAG_EFI_BS 774#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 975#define MULTIBOOT_HEADER_TAG_RELOCATABLE 107677#define MULTIBOOT2_ARCHITECTURE_I386 078#define MULTIBOOT2_ARCHITECTURE_MIPS32 479#define MULTIBOOT_HEADER_TAG_OPTIONAL 18081#define MULTIBOOT_LOAD_PREFERENCE_NONE 082#define MULTIBOOT_LOAD_PREFERENCE_LOW 183#define MULTIBOOT_LOAD_PREFERENCE_HIGH 28485#define MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED 186#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 28788#ifndef ASM_FILE8990typedef unsigned char multiboot_uint8_t;91typedef unsigned short multiboot_uint16_t;92typedef unsigned int multiboot_uint32_t;93typedef unsigned long long multiboot_uint64_t;9495struct multiboot_header96{97/* Must be MULTIBOOT_MAGIC - see above. */98multiboot_uint32_t magic;99100/* ISA */101multiboot_uint32_t architecture;102103/* Total header length. */104multiboot_uint32_t header_length;105106/* The above fields plus this one must equal 0 mod 2^32. */107multiboot_uint32_t checksum;108};109110struct multiboot_header_tag111{112multiboot_uint16_t type;113multiboot_uint16_t flags;114multiboot_uint32_t size;115};116117struct multiboot_header_tag_information_request118{119multiboot_uint16_t type;120multiboot_uint16_t flags;121multiboot_uint32_t size;122multiboot_uint32_t requests[0];123};124125struct multiboot_header_tag_address126{127multiboot_uint16_t type;128multiboot_uint16_t flags;129multiboot_uint32_t size;130multiboot_uint32_t header_addr;131multiboot_uint32_t load_addr;132multiboot_uint32_t load_end_addr;133multiboot_uint32_t bss_end_addr;134};135136struct multiboot_header_tag_entry_address137{138multiboot_uint16_t type;139multiboot_uint16_t flags;140multiboot_uint32_t size;141multiboot_uint32_t entry_addr;142};143144struct multiboot_header_tag_console_flags145{146multiboot_uint16_t type;147multiboot_uint16_t flags;148multiboot_uint32_t size;149multiboot_uint32_t console_flags;150};151152struct multiboot_header_tag_framebuffer153{154multiboot_uint16_t type;155multiboot_uint16_t flags;156multiboot_uint32_t size;157multiboot_uint32_t width;158multiboot_uint32_t height;159multiboot_uint32_t depth;160};161162struct multiboot_header_tag_module_align163{164multiboot_uint16_t type;165multiboot_uint16_t flags;166multiboot_uint32_t size;167};168169struct multiboot_header_tag_relocatable170{171multiboot_uint16_t type;172multiboot_uint16_t flags;173multiboot_uint32_t size;174multiboot_uint32_t min_addr;175multiboot_uint32_t max_addr;176multiboot_uint32_t align;177multiboot_uint32_t preference;178};179180struct multiboot_color181{182multiboot_uint8_t red;183multiboot_uint8_t green;184multiboot_uint8_t blue;185};186187struct multiboot_mmap_entry188{189multiboot_uint64_t addr;190multiboot_uint64_t len;191#define MULTIBOOT_MEMORY_AVAILABLE 1192#define MULTIBOOT_MEMORY_RESERVED 2193#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3194#define MULTIBOOT_MEMORY_NVS 4195#define MULTIBOOT_MEMORY_BADRAM 5196multiboot_uint32_t type;197multiboot_uint32_t zero;198};199typedef struct multiboot_mmap_entry multiboot_memory_map_t;200201struct multiboot_tag202{203multiboot_uint32_t type;204multiboot_uint32_t size;205};206207struct multiboot_tag_string208{209multiboot_uint32_t type;210multiboot_uint32_t size;211char string[0];212};213214struct multiboot_tag_module215{216multiboot_uint32_t type;217multiboot_uint32_t size;218multiboot_uint32_t mod_start;219multiboot_uint32_t mod_end;220char cmdline[0];221};222223struct multiboot_tag_basic_meminfo224{225multiboot_uint32_t type;226multiboot_uint32_t size;227multiboot_uint32_t mem_lower;228multiboot_uint32_t mem_upper;229};230231struct multiboot_tag_bootdev232{233multiboot_uint32_t type;234multiboot_uint32_t size;235multiboot_uint32_t biosdev;236multiboot_uint32_t slice;237multiboot_uint32_t part;238};239240struct multiboot_tag_mmap241{242multiboot_uint32_t type;243multiboot_uint32_t size;244multiboot_uint32_t entry_size;245multiboot_uint32_t entry_version;246struct multiboot_mmap_entry entries[0];247};248249struct multiboot_vbe_info_block250{251multiboot_uint8_t external_specification[512];252};253254struct multiboot_vbe_mode_info_block255{256multiboot_uint8_t external_specification[256];257};258259struct multiboot_tag_vbe260{261multiboot_uint32_t type;262multiboot_uint32_t size;263264multiboot_uint16_t vbe_mode;265multiboot_uint16_t vbe_interface_seg;266multiboot_uint16_t vbe_interface_off;267multiboot_uint16_t vbe_interface_len;268269struct multiboot_vbe_info_block vbe_control_info;270struct multiboot_vbe_mode_info_block vbe_mode_info;271};272273struct multiboot_tag_framebuffer_common274{275multiboot_uint32_t type;276multiboot_uint32_t size;277278multiboot_uint64_t framebuffer_addr;279multiboot_uint32_t framebuffer_pitch;280multiboot_uint32_t framebuffer_width;281multiboot_uint32_t framebuffer_height;282multiboot_uint8_t framebuffer_bpp;283#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0284#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1285#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2286multiboot_uint8_t framebuffer_type;287multiboot_uint16_t reserved;288};289290struct multiboot_tag_framebuffer291{292struct multiboot_tag_framebuffer_common common;293294union295{296struct297{298multiboot_uint16_t framebuffer_palette_num_colors;299struct multiboot_color framebuffer_palette[0];300};301struct302{303multiboot_uint8_t framebuffer_red_field_position;304multiboot_uint8_t framebuffer_red_mask_size;305multiboot_uint8_t framebuffer_green_field_position;306multiboot_uint8_t framebuffer_green_mask_size;307multiboot_uint8_t framebuffer_blue_field_position;308multiboot_uint8_t framebuffer_blue_mask_size;309};310};311};312313struct multiboot_tag_elf_sections314{315multiboot_uint32_t type;316multiboot_uint32_t size;317multiboot_uint32_t num;318multiboot_uint32_t entsize;319multiboot_uint32_t shndx;320char sections[0];321};322323struct multiboot_tag_apm324{325multiboot_uint32_t type;326multiboot_uint32_t size;327multiboot_uint16_t version;328multiboot_uint16_t cseg;329multiboot_uint32_t offset;330multiboot_uint16_t cseg_16;331multiboot_uint16_t dseg;332multiboot_uint16_t flags;333multiboot_uint16_t cseg_len;334multiboot_uint16_t cseg_16_len;335multiboot_uint16_t dseg_len;336};337338struct multiboot_tag_efi32339{340multiboot_uint32_t type;341multiboot_uint32_t size;342multiboot_uint32_t pointer;343};344345struct multiboot_tag_efi64346{347multiboot_uint32_t type;348multiboot_uint32_t size;349multiboot_uint64_t pointer;350};351352struct multiboot_tag_smbios353{354multiboot_uint32_t type;355multiboot_uint32_t size;356multiboot_uint8_t major;357multiboot_uint8_t minor;358multiboot_uint8_t reserved[6];359multiboot_uint8_t tables[0];360};361362struct multiboot_tag_old_acpi363{364multiboot_uint32_t type;365multiboot_uint32_t size;366multiboot_uint8_t rsdp[0];367};368369struct multiboot_tag_new_acpi370{371multiboot_uint32_t type;372multiboot_uint32_t size;373multiboot_uint8_t rsdp[0];374};375376struct multiboot_tag_network377{378multiboot_uint32_t type;379multiboot_uint32_t size;380multiboot_uint8_t dhcpack[0];381};382383struct multiboot_tag_efi_mmap384{385multiboot_uint32_t type;386multiboot_uint32_t size;387multiboot_uint32_t descr_size;388multiboot_uint32_t descr_vers;389multiboot_uint8_t efi_mmap[0];390};391392struct multiboot_tag_efi32_ih393{394multiboot_uint32_t type;395multiboot_uint32_t size;396multiboot_uint32_t pointer;397};398399struct multiboot_tag_efi64_ih400{401multiboot_uint32_t type;402multiboot_uint32_t size;403multiboot_uint64_t pointer;404};405406struct multiboot_tag_load_base_addr407{408multiboot_uint32_t type;409multiboot_uint32_t size;410multiboot_uint32_t load_base_addr;411};412413#endif /* ! ASM_FILE */414415#endif /* ! MULTIBOOT_HEADER */416417418