176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _MULTIBOOT_H 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _MULTIBOOT_H 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @file 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Multiboot operating systems 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1176d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanFILE_LICENCE ( GPL2_OR_LATER ); 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdint.h> 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** The magic number for the Multiboot header */ 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Boot modules must be page aligned */ 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_FLAG_PGALIGN 0x00000001 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Memory map must be provided */ 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_FLAG_MEMMAP 0x00000002 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Video mode information must be provided */ 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_FLAG_VIDMODE 0x00000004 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Image is a raw multiboot image (not ELF) */ 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MB_FLAG_RAW 0x00010000 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * The magic number passed by a Multiboot-compliant boot loader 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Must be passed in register %eax when jumping to the Multiboot OS 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * image. 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure mem_* fields are valid */ 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_MEM 0x00000001 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure boot_device field is valid */ 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_BOOTDEV 0x00000002 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure cmdline field is valid */ 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_CMDLINE 0x00000004 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure module fields are valid */ 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_MODS 0x00000008 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure a.out symbol table is valid */ 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_AOUT 0x00000010 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information struture ELF section header table is valid */ 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_ELF 0x00000020 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure memory map is valid */ 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_MMAP 0x00000040 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure drive list is valid */ 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_DRIVES 0x00000080 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure ROM configuration field is valid */ 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_CFGTBL 0x00000100 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure boot loader name field is valid */ 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_LOADER 0x00000200 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure APM table is valid */ 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_APM 0x00000400 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Multiboot information structure video information is valid */ 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBI_FLAG_VBE 0x00000800 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A multiboot header */ 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct multiboot_header { 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t magic; 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t flags; 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t checksum; 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t header_addr; 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t load_addr; 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t load_end_addr; 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t bss_end_addr; 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t entry_addr; 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed, may_alias )); 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A multiboot a.out symbol table */ 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct multiboot_aout_symbol_table { 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t tabsize; 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t strsize; 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t addr; 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t reserved; 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed, may_alias )); 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A multiboot ELF section header table */ 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct multiboot_elf_section_header_table { 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t num; 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t size; 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t addr; 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t shndx; 10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed, may_alias )); 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A multiboot information structure */ 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct multiboot_info { 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t flags; 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mem_lower; 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mem_upper; 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t boot_device; 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t cmdline; 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mods_count; 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mods_addr; 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union { 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct multiboot_aout_symbol_table aout_syms; 11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman struct multiboot_elf_section_header_table elf_sections; 11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } syms; 11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mmap_length; 11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mmap_addr; 11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t drives_length; 11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t drives_addr; 11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t config_table; 12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t boot_loader_name; 12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t apm_table; 12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t vbe_control_info; 12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t vbe_mode_info; 12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t vbe_mode; 12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t vbe_interface_seg; 12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t vbe_interface_off; 12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint16_t vbe_interface_len; 12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed, may_alias )); 12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A multiboot module structure */ 13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct multiboot_module { 13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mod_start; 13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t mod_end; 13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t string; 13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t reserved; 13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed, may_alias )); 13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** A multiboot memory map entry */ 13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct multiboot_memory_map { 14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t size; 14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint64_t base_addr; 14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint64_t length; 14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t type; 14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} __attribute__ (( packed, may_alias )); 14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** Usable RAM */ 14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBMEM_RAM 1 14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* _MULTIBOOT_H */ 150