## multiboot.h - Multiboot header file. ## Copyright (C) 1999,2003,2007,2008,2009,2010 Free Software Foundation, Inc. ## ## Permission is hereby granted, free of charge, to any person obtaining a copy ## of this software and associated documentation files (the "Software"), to ## deal in the Software without restriction, including without limitation the ## rights to use, copy, modify, merge, publish, distribute, sublicense, and/or ## sell copies of the Software, and to permit persons to whom the Software is ## furnished to do so, subject to the following conditions: ## ## The above copyright notice and this permission notice shall be included in ## all copies or substantial portions of the Software. ## ## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY ## DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ## WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR ## IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ## ## How many bytes from the start of the file we search for the header. const MULTIBOOT_SEARCH* = 8192 MULTIBOOT_HEADER_ALIGN* = 4 ## The magic field should contain this. const MULTIBOOT_HEADER_MAGIC* = 0x1BADB002 ## This should be in %eax. const MULTIBOOT_BOOTLOADER_MAGIC* = 0x2BADB002 ## Alignment of multiboot modules. const MULTIBOOT_MOD_ALIGN* = 0x00001000 ## Alignment of the multiboot info structure. const MULTIBOOT_INFO_ALIGN* = 0x00000004 ## Flags set in the 'flags' member of the multiboot header. ## Align all boot modules on i386 page (4KB) boundaries. const MULTIBOOT_PAGE_ALIGN* = 0x00000001 ## Must pass memory information to OS. const MULTIBOOT_MEMORY_INFO* = 0x00000002 ## Must pass video information to OS. const MULTIBOOT_VIDEO_MODE* = 0x00000004 ## This flag indicates the use of the address fields in the header. const MULTIBOOT_AOUT_KLUDGE* = 0x00010000 ## Flags to be set in the 'flags' member of the multiboot info structure. ## is there basic lower/upper memory information? const MULTIBOOT_INFO_MEMORY* = 0x00000001 ## is there a boot device set? const MULTIBOOT_INFO_BOOTDEV* = 0x00000002 ## is the command-line defined? const MULTIBOOT_INFO_CMDLINE* = 0x00000004 ## are there modules to do something with? const MULTIBOOT_INFO_MODS* = 0x00000008 ## These next two are mutually exclusive ## is there a symbol table loaded? const MULTIBOOT_INFO_AOUT_SYMS* = 0x00000010 ## is there an ELF section header table? const MULTIBOOT_INFO_ELF_SHDR* = 0x00000020 ## is there a full memory map? const MULTIBOOT_INFO_MEM_MAP* = 0x00000040 ## Is there drive info? const MULTIBOOT_INFO_DRIVE_INFO* = 0x00000080 ## Is there a config table? const MULTIBOOT_INFO_CONFIG_TABLE* = 0x00000100 ## Is there a boot loader name? const MULTIBOOT_INFO_BOOT_LOADER_NAME* = 0x00000200 ## Is there a APM table? const MULTIBOOT_INFO_APM_TABLE* = 0x00000400 ## Is there video information? const MULTIBOOT_INFO_VBE_INFO* = 0x00000800 MULTIBOOT_INFO_FRAMEBUFFER_INFO* = 0x00001000 when not defined(ASM_FILE): type multiboot_uint8_t* = cuchar multiboot_uint16_t* = cushort multiboot_uint32_t* = cuint multiboot_uint64_t* = culonglong type multiboot_header* {.bycopy.} = object magic*: multiboot_uint32_t ## Must be MULTIBOOT_MAGIC - see above. ## Feature flags. flags*: multiboot_uint32_t ## The above fields plus this one must equal 0 mod 2^32. checksum*: multiboot_uint32_t ## These are only valid if MULTIBOOT_AOUT_KLUDGE is set. header_addr*: multiboot_uint32_t load_addr*: multiboot_uint32_t load_end_addr*: multiboot_uint32_t bss_end_addr*: multiboot_uint32_t entry_addr*: multiboot_uint32_t ## These are only valid if MULTIBOOT_VIDEO_MODE is set. mode_type*: multiboot_uint32_t width*: multiboot_uint32_t height*: multiboot_uint32_t depth*: multiboot_uint32_t ## The symbol table for a.out. type multiboot_aout_symbol_table* {.bycopy.} = object tabsize*: multiboot_uint32_t strsize*: multiboot_uint32_t `addr`*: multiboot_uint32_t reserved*: multiboot_uint32_t type multiboot_aout_symbol_table_t* = multiboot_aout_symbol_table ## The section header table for ELF. type multiboot_elf_section_header_table* {.bycopy.} = object num*: multiboot_uint32_t size*: multiboot_uint32_t `addr`*: multiboot_uint32_t shndx*: multiboot_uint32_t type multiboot_elf_section_header_table_t* = multiboot_elf_section_header_table type INNER_C_UNION_181031587* {.bycopy.} = object {.union.} aout_sym*: multiboot_aout_symbol_table_t elf_sec*: multiboot_elf_section_header_table_t type INNER_C_STRUCT_3866696476* {.bycopy.} = object framebuffer_palette_addr*: multiboot_uint32_t framebuffer_palette_num_colors*: multiboot_uint16_t type INNER_C_STRUCT_1103324769* {.bycopy.} = object framebuffer_red_field_position*: multiboot_uint8_t framebuffer_red_mask_size*: multiboot_uint8_t framebuffer_green_field_position*: multiboot_uint8_t framebuffer_green_mask_size*: multiboot_uint8_t framebuffer_blue_field_position*: multiboot_uint8_t framebuffer_blue_mask_size*: multiboot_uint8_t type INNER_C_UNION_2305456475* {.bycopy.} = object {.union.} ano_2282080798*: INNER_C_STRUCT_3866696476 ano_3054406492*: INNER_C_STRUCT_1103324769 const MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED* = 0 MULTIBOOT_FRAMEBUFFER_TYPE_RGB* = 1 MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT* = 2 type multiboot_info* {.bycopy.} = object flags*: multiboot_uint32_t ## Multiboot info version number ## Available memory from BIOS mem_lower*: multiboot_uint32_t mem_upper*: multiboot_uint32_t ## "root" partition boot_device*: multiboot_uint32_t ## Kernel command line cmdline*: multiboot_uint32_t ## Boot-Module list mods_count*: multiboot_uint32_t mods_addr*: multiboot_uint32_t u*: INNER_C_UNION_181031587 ## Memory Mapping buffer mmap_length*: multiboot_uint32_t mmap_addr*: multiboot_uint32_t ## Drive Info buffer drives_length*: multiboot_uint32_t drives_addr*: multiboot_uint32_t ## ROM configuration table config_table*: multiboot_uint32_t ## Boot Loader Name boot_loader_name*: multiboot_uint32_t ## APM table apm_table*: multiboot_uint32_t ## Video vbe_control_info*: multiboot_uint32_t vbe_mode_info*: multiboot_uint32_t vbe_mode*: multiboot_uint16_t vbe_interface_seg*: multiboot_uint16_t vbe_interface_off*: multiboot_uint16_t vbe_interface_len*: multiboot_uint16_t framebuffer_addr*: multiboot_uint64_t framebuffer_pitch*: multiboot_uint32_t framebuffer_width*: multiboot_uint32_t framebuffer_height*: multiboot_uint32_t framebuffer_bpp*: multiboot_uint8_t framebuffer_type*: multiboot_uint8_t ano_3062667995*: INNER_C_UNION_2305456475 type multiboot_info_t* = multiboot_info type multiboot_color* {.bycopy.} = object red*: multiboot_uint8_t green*: multiboot_uint8_t blue*: multiboot_uint8_t const MULTIBOOT_MEMORY_AVAILABLE* = 1 MULTIBOOT_MEMORY_RESERVED* = 2 MULTIBOOT_MEMORY_ACPI_RECLAIMABLE* = 3 MULTIBOOT_MEMORY_NVS* = 4 MULTIBOOT_MEMORY_BADRAM* = 5 type multiboot_mmap_entry* {.bycopy,packed.} = object size*: multiboot_uint32_t `addr`*: multiboot_uint64_t len*: multiboot_uint64_t `type`*: multiboot_uint32_t type multiboot_memory_map_t* = multiboot_mmap_entry type multiboot_mod_list* {.bycopy.} = object mod_start*: multiboot_uint32_t ## the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive mod_end*: multiboot_uint32_t ## Module command line cmdline*: multiboot_uint32_t ## padding to take it to 16 bytes (must be zero) pad*: multiboot_uint32_t type multiboot_module_t* = multiboot_mod_list ## APM BIOS info. type multiboot_apm_info* {.bycopy.} = object version*: multiboot_uint16_t cseg*: multiboot_uint16_t offset*: multiboot_uint32_t cseg_16*: multiboot_uint16_t dseg*: multiboot_uint16_t flags*: multiboot_uint16_t cseg_len*: multiboot_uint16_t cseg_16_len*: multiboot_uint16_t dseg_len*: multiboot_uint16_t