1 /* multiboot.h 2 * tag: header for multiboot 3 * 4 * Copyright (C) 2003 Stefan Reinauer 5 * 6 * See the file "COPYING" for further information about 7 * the copyright and warranty status of this work. 8 */ 9 10 /* magic number for multiboot header */ 11 #define MULTIBOOT_HEADER_MAGIC 0x1BADB002 12 13 /* flags for multiboot header */ 14 #define MULTIBOOT_HEADER_FLAGS 0x00010003 15 16 /* magic number passed by multiboot-compliant boot loader. */ 17 #define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 18 19 /* The size of our stack (8KB). */ 20 #define STACK_SIZE 0x2000 21 22 /* C symbol format. HAVE_ASM_USCORE is defined by configure. */ 23 #ifdef HAVE_ASM_USCORE 24 # define EXT_C(sym) _ ## sym 25 #else 26 # define EXT_C(sym) sym 27 #endif 28 29 #ifndef ASM 30 /* We don't want these declarations in boot.S */ 31 32 /* multiboot header */ 33 typedef struct multiboot_header { 34 unsigned long magic; 35 unsigned long flags; 36 unsigned long checksum; 37 unsigned long header_addr; 38 unsigned long load_addr; 39 unsigned long load_end_addr; 40 unsigned long bss_end_addr; 41 unsigned long entry_addr; 42 } multiboot_header_t; 43 44 /* symbol table for a.out */ 45 typedef struct aout_symbol_table { 46 unsigned long tabsize; 47 unsigned long strsize; 48 unsigned long addr; 49 unsigned long reserved; 50 } aout_symbol_table_t; 51 52 /* section header table for ELF */ 53 typedef struct elf_section_header_table { 54 unsigned long num; 55 unsigned long size; 56 unsigned long addr; 57 unsigned long shndx; 58 } elf_section_header_table_t; 59 60 /* multiboot information */ 61 typedef struct multiboot_info { 62 unsigned long flags; 63 unsigned long mem_lower; 64 unsigned long mem_upper; 65 unsigned long boot_device; 66 unsigned long cmdline; 67 unsigned long mods_count; 68 unsigned long mods_addr; 69 union { 70 aout_symbol_table_t aout_sym; 71 elf_section_header_table_t elf_sec; 72 } u; 73 unsigned long mmap_length; 74 unsigned long mmap_addr; 75 } multiboot_info_t; 76 77 /* module structure */ 78 typedef struct module { 79 unsigned long mod_start; 80 unsigned long mod_end; 81 unsigned long string; 82 unsigned long reserved; 83 } module_t; 84 85 /* memory map. Be careful that the offset 0 is base_addr_low 86 but no size. */ 87 typedef struct memory_map { 88 unsigned long size; 89 unsigned long base_addr_low; 90 unsigned long base_addr_high; 91 unsigned long length_low; 92 unsigned long length_high; 93 unsigned long type; 94 } memory_map_t; 95 96 #endif /* ! ASM */ 97