18e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* Copyright (C) 1999, 2001 Free Software Foundation, Inc. 28e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 38e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin This program is free software; you can redistribute it and/or modify 48e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin it under the terms of the GNU General Public License as published by 58e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin the Free Software Foundation; either version 2 of the License, or 68e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin (at your option) any later version. 78e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 88e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin This program is distributed in the hope that it will be useful, 98e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin but WITHOUT ANY WARRANTY; without even the implied warranty of 108e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 118e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin GNU General Public License for more details. 128e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 138e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin You should have received a copy of the GNU General Public License 148e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin along with this program; if not, write to the Free Software 158e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ 168e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 178e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#ifndef __MULTIBOOT_H__ 188e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define __MULTIBOOT_H__ 198e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 208e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* 218e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin * Multiboot header structure. 228e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin */ 238e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 248e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_HEADER_MODS_ALIGNED 0x00000001 258e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_HEADER_WANT_MEMORY 0x00000002 268e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_HEADER_HAS_VBE 0x00000004 278e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_HEADER_HAS_ADDR 0x00010000 288e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 298e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The magic number passed by a Multiboot-compliant boot loader. */ 308e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 318e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 328e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_MEMLIMITS (1u<< 0) 338e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_BOOTDEV (1u<< 1) 348e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_CMDLINE (1u<< 2) 358e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_MODULES (1u<< 3) 368e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_AOUT_SYMS (1u<< 4) 378e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_ELF_SYMS (1u<< 5) 388e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_MEMMAP (1u<< 6) 398e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_DRIVES (1u<< 7) 408e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_BIOSCONFIG (1u<< 8) 418e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_LOADERNAME (1u<< 9) 428e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#define MBI_APM (1u<<10) 438e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 448e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#ifndef __ASSEMBLY__ 458e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 468e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The symbol table for a.out. */ 478e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct { 488e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 tabsize; 498e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 strsize; 508e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 addr; 518e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 reserved; 528e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} aout_symbol_table_t; 538e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 548e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The section header table for ELF. */ 558e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct { 568e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 num; 578e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 size; 588e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 addr; 598e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 shndx; 608e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} elf_section_header_table_t; 618e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 628e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The Multiboot information. */ 638e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct { 648e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 flags; 658e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 668e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin /* Valid if flags sets MBI_MEMLIMITS */ 678e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 mem_lower; 688e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 mem_upper; 698e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 708e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin /* Valid if flags sets MBI_BOOTDEV */ 718e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 boot_device; 728e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 738e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin /* Valid if flags sets MBI_CMDLINE */ 748e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 cmdline; 758e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 768e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin /* Valid if flags sets MBI_MODULES */ 778e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 mods_count; 788e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 mods_addr; 798e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 808e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin /* Valid if flags sets ... */ 818e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin union { 828e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin aout_symbol_table_t aout_sym; /* ... MBI_AOUT_SYMS */ 838e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin elf_section_header_table_t elf_sec; /* ... MBI_ELF_SYMS */ 848e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin } u; 858e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 868e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin /* Valid if flags sets MBI_MEMMAP */ 878e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 mmap_length; 888e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 mmap_addr; 898e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 908e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin /* Valid if flags sets MBI_DRIVES */ 918e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 drives_length; 928e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 drives_addr; 938e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 948e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin /* Valid if flags sets MBI_BIOSCONFIG */ 958e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 config_table; 968e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 978e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin /* Valid if flags sets MBI_LOADERNAME */ 988e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 boot_loader_name; 998e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 1008e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin /* Valid if flags sets MBI_APM */ 1018e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 apm_table; 1028e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} multiboot_info_t; 1038e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 1048e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The module structure. */ 1058e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct { 1068e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 mod_start; 1078e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 mod_end; 1088e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 string; 1098e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 reserved; 1108e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} module_t; 1118e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 1128e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin/* The memory map. Be careful that the offset 0 is base_addr_low 1138e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin but no size. */ 1148e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugintypedef struct { 1158e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 size; 1168e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 base_addr_low; 1178e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 base_addr_high; 1188e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 length_low; 1198e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 length_high; 1208e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin u32 type; 1218e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin} memory_map_t; 1228e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 1238e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 1248e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#endif /* __ASSEMBLY__ */ 1258e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 1268e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin 1278e8bf00a43ca772040ce02b2a8096d523171a8a4Evgeny Kalugin#endif /* _BOOTSTUB_MB_H */ 128