nuclear@17: #ifndef MBOOT_H_ nuclear@17: #define MBOOT_H_ nuclear@17: nuclear@17: #include nuclear@17: nuclear@17: #define MB_MEM (1 << 0) nuclear@17: #define MB_BOOTDEV (1 << 1) nuclear@17: #define MB_CMDLINE (1 << 2) nuclear@17: #define MB_MODULES (1 << 3) nuclear@17: #define MB_AOUT_SYM (1 << 4) nuclear@17: #define MB_ELF_SHDR (1 << 5) nuclear@17: #define MB_MMAP (1 << 6) nuclear@17: #define MB_DRIVES (1 << 7) nuclear@17: #define MB_CFGTAB (1 << 8) nuclear@17: #define MB_LDRNAME (1 << 9) nuclear@17: #define MB_APM (1 << 10) nuclear@17: #define MB_GFX (1 << 11) nuclear@17: nuclear@17: #define MB_MEM_VALID 1 nuclear@17: #define MB_DRIVE_CHS 0 nuclear@17: #define MB_DRIVE_LBA 1 nuclear@17: nuclear@17: struct mboot_module { nuclear@17: uint32_t start_addr, end_addr; nuclear@17: char *str; nuclear@17: uint32_t reserved; nuclear@17: }; nuclear@17: nuclear@17: struct mboot_elf_shdr_table { nuclear@17: uint32_t num; nuclear@17: uint32_t size; nuclear@17: uint32_t addr; nuclear@17: uint32_t shndx; nuclear@17: }; nuclear@17: nuclear@17: struct mboot_mmap { nuclear@17: uint32_t skip; nuclear@17: uint32_t base_low, base_high; nuclear@17: uint32_t length_low, length_high; nuclear@17: uint32_t type; nuclear@17: }; nuclear@17: nuclear@17: struct mboot_drive { nuclear@17: uint32_t size; nuclear@17: uint8_t id; nuclear@17: uint8_t mode; nuclear@17: uint16_t cyl; nuclear@17: uint8_t heads, sect; nuclear@17: uint16_t ports[1]; /* zero-terminated */ nuclear@17: } __attribute__ ((packed)); nuclear@17: nuclear@17: struct mboot_apm { nuclear@17: uint16_t ver; nuclear@17: uint16_t cseg; nuclear@17: uint32_t offs; nuclear@17: uint16_t cseg16; nuclear@17: uint16_t dseg; nuclear@17: uint16_t flags; nuclear@17: uint16_t cseg_len; nuclear@17: uint16_t cseg16_len; nuclear@17: uint16_t dseg_len; nuclear@17: } __attribute__ ((packed)); nuclear@17: nuclear@17: struct mboot_vbe { nuclear@17: uint32_t ctl_info; nuclear@17: uint32_t mode_info; nuclear@17: uint16_t mode; nuclear@17: uint16_t ifseg, ifoffs, iflen; nuclear@17: } __attribute__ ((packed)); nuclear@17: nuclear@17: nuclear@17: /* multiboot information structure */ nuclear@17: struct mboot_info { nuclear@17: uint32_t flags; nuclear@17: /* mem_lower: available low memory (up to 640kb) nuclear@17: * mem_upper: available upper memory (from 1mb and upwards) nuclear@17: */ nuclear@17: uint32_t mem_lower, mem_upper; nuclear@17: /* boot device fields: MSB -> [part3|part2|part1|drive] <- LSB */ nuclear@17: uint32_t boot_dev; nuclear@17: char *cmdline; nuclear@17: /* loaded kernel modules */ nuclear@17: uint32_t mods_count; nuclear@17: struct mboot_module *mods; nuclear@17: /* elf sections table */ nuclear@17: struct mboot_elf_shdr_table elf; nuclear@17: /* memory map */ nuclear@17: uint32_t mmap_len; nuclear@17: struct mboot_mmap *mmap; nuclear@17: /* drives table */ nuclear@17: uint32_t drives_len; nuclear@17: struct mboot_drive *drives; nuclear@17: /* address of BIOS ROM configuration table */ nuclear@17: uint32_t cfgtable; nuclear@17: char *boot_loader_name; nuclear@17: /* advanced power management */ nuclear@17: struct mboot_apm *apm; nuclear@17: /* video bios extensions */ nuclear@17: struct mboot_vbe vbe; nuclear@17: }; nuclear@17: nuclear@17: nuclear@17: #endif /* MBOOT_H_ */