1 /* Copyright (C) 1999, 2001 Free Software Foundation, Inc. 2 3 This program is free software; you can redistribute it and/or modify 4 it under the terms of the GNU General Public License as published by 5 the Free Software Foundation; either version 2 of the License, or 6 (at your option) any later version. 7 8 This program is distributed in the hope that it will be useful, 9 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 GNU General Public License for more details. 12 13 You should have received a copy of the GNU General Public License 14 along with this program; if not, write to the Free Software 15 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ 16 17 #ifndef __MULTIBOOT_H__ 18 #define __MULTIBOOT_H__ 19 20 /* 21 * Multiboot header structure. 22 */ 23 #define MULTIBOOT_HEADER_MAGIC 0x1BADB002 24 #define MULTIBOOT_HEADER_MODS_ALIGNED 0x00000001 25 #define MULTIBOOT_HEADER_WANT_MEMORY 0x00000002 26 #define MULTIBOOT_HEADER_HAS_VBE 0x00000004 27 #define MULTIBOOT_HEADER_HAS_ADDR 0x00010000 28 29 /* The magic number passed by a Multiboot-compliant boot loader. */ 30 #define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 31 32 #define MBI_MEMLIMITS (1u<< 0) 33 #define MBI_BOOTDEV (1u<< 1) 34 #define MBI_CMDLINE (1u<< 2) 35 #define MBI_MODULES (1u<< 3) 36 #define MBI_AOUT_SYMS (1u<< 4) 37 #define MBI_ELF_SYMS (1u<< 5) 38 #define MBI_MEMMAP (1u<< 6) 39 #define MBI_DRIVES (1u<< 7) 40 #define MBI_BIOSCONFIG (1u<< 8) 41 #define MBI_LOADERNAME (1u<< 9) 42 #define MBI_APM (1u<<10) 43 44 #ifndef __ASSEMBLY__ 45 46 /* The symbol table for a.out. */ 47 typedef struct { 48 u32 tabsize; 49 u32 strsize; 50 u32 addr; 51 u32 reserved; 52 } aout_symbol_table_t; 53 54 /* The section header table for ELF. */ 55 typedef struct { 56 u32 num; 57 u32 size; 58 u32 addr; 59 u32 shndx; 60 } elf_section_header_table_t; 61 62 /* The Multiboot information. */ 63 typedef struct { 64 u32 flags; 65 66 /* Valid if flags sets MBI_MEMLIMITS */ 67 u32 mem_lower; 68 u32 mem_upper; 69 70 /* Valid if flags sets MBI_BOOTDEV */ 71 u32 boot_device; 72 73 /* Valid if flags sets MBI_CMDLINE */ 74 u32 cmdline; 75 76 /* Valid if flags sets MBI_MODULES */ 77 u32 mods_count; 78 u32 mods_addr; 79 80 /* Valid if flags sets ... */ 81 union { 82 aout_symbol_table_t aout_sym; /* ... MBI_AOUT_SYMS */ 83 elf_section_header_table_t elf_sec; /* ... MBI_ELF_SYMS */ 84 } u; 85 86 /* Valid if flags sets MBI_MEMMAP */ 87 u32 mmap_length; 88 u32 mmap_addr; 89 90 /* Valid if flags sets MBI_DRIVES */ 91 u32 drives_length; 92 u32 drives_addr; 93 94 /* Valid if flags sets MBI_BIOSCONFIG */ 95 u32 config_table; 96 97 /* Valid if flags sets MBI_LOADERNAME */ 98 u32 boot_loader_name; 99 100 /* Valid if flags sets MBI_APM */ 101 u32 apm_table; 102 } multiboot_info_t; 103 104 /* The module structure. */ 105 typedef struct { 106 u32 mod_start; 107 u32 mod_end; 108 u32 string; 109 u32 reserved; 110 } module_t; 111 112 /* The memory map. Be careful that the offset 0 is base_addr_low 113 but no size. */ 114 typedef struct { 115 u32 size; 116 u32 base_addr_low; 117 u32 base_addr_high; 118 u32 length_low; 119 u32 length_high; 120 u32 type; 121 } memory_map_t; 122 123 124 #endif /* __ASSEMBLY__ */ 125 126 127 #endif /* _BOOTSTUB_MB_H */ 128