1*8044SWilliam.Kucharski@Sun.COM /* multiboot.h - the header for Multiboot */ 2*8044SWilliam.Kucharski@Sun.COM /* Copyright (C) 1999, 2001 Free Software Foundation, Inc. 3*8044SWilliam.Kucharski@Sun.COM 4*8044SWilliam.Kucharski@Sun.COM This program is free software; you can redistribute it and/or modify 5*8044SWilliam.Kucharski@Sun.COM it under the terms of the GNU General Public License as published by 6*8044SWilliam.Kucharski@Sun.COM the Free Software Foundation; either version 2 of the License, or 7*8044SWilliam.Kucharski@Sun.COM (at your option) any later version. 8*8044SWilliam.Kucharski@Sun.COM 9*8044SWilliam.Kucharski@Sun.COM This program is distributed in the hope that it will be useful, 10*8044SWilliam.Kucharski@Sun.COM but WITHOUT ANY WARRANTY; without even the implied warranty of 11*8044SWilliam.Kucharski@Sun.COM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12*8044SWilliam.Kucharski@Sun.COM GNU General Public License for more details. 13*8044SWilliam.Kucharski@Sun.COM 14*8044SWilliam.Kucharski@Sun.COM You should have received a copy of the GNU General Public License 15*8044SWilliam.Kucharski@Sun.COM along with this program; if not, write to the Free Software 16*8044SWilliam.Kucharski@Sun.COM Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ 17*8044SWilliam.Kucharski@Sun.COM 18*8044SWilliam.Kucharski@Sun.COM /* Macros. */ 19*8044SWilliam.Kucharski@Sun.COM 20*8044SWilliam.Kucharski@Sun.COM /* The magic number for the Multiboot header. */ 21*8044SWilliam.Kucharski@Sun.COM #define MULTIBOOT_HEADER_MAGIC 0x1BADB002 22*8044SWilliam.Kucharski@Sun.COM 23*8044SWilliam.Kucharski@Sun.COM /* The flags for the Multiboot header. */ 24*8044SWilliam.Kucharski@Sun.COM #ifdef __ELF__ 25*8044SWilliam.Kucharski@Sun.COM # define MULTIBOOT_HEADER_FLAGS 0x00000003 26*8044SWilliam.Kucharski@Sun.COM #else 27*8044SWilliam.Kucharski@Sun.COM # define MULTIBOOT_HEADER_FLAGS 0x00010003 28*8044SWilliam.Kucharski@Sun.COM #endif 29*8044SWilliam.Kucharski@Sun.COM 30*8044SWilliam.Kucharski@Sun.COM /* The magic number passed by a Multiboot-compliant boot loader. */ 31*8044SWilliam.Kucharski@Sun.COM #define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 32*8044SWilliam.Kucharski@Sun.COM 33*8044SWilliam.Kucharski@Sun.COM /* The size of our stack (16KB). */ 34*8044SWilliam.Kucharski@Sun.COM #define STACK_SIZE 0x4000 35*8044SWilliam.Kucharski@Sun.COM 36*8044SWilliam.Kucharski@Sun.COM /* C symbol format. HAVE_ASM_USCORE is defined by configure. */ 37*8044SWilliam.Kucharski@Sun.COM #ifdef HAVE_ASM_USCORE 38*8044SWilliam.Kucharski@Sun.COM # define EXT_C(sym) _ ## sym 39*8044SWilliam.Kucharski@Sun.COM #else 40*8044SWilliam.Kucharski@Sun.COM # define EXT_C(sym) sym 41*8044SWilliam.Kucharski@Sun.COM #endif 42*8044SWilliam.Kucharski@Sun.COM 43*8044SWilliam.Kucharski@Sun.COM #ifndef ASM 44*8044SWilliam.Kucharski@Sun.COM /* Do not include here in boot.S. */ 45*8044SWilliam.Kucharski@Sun.COM 46*8044SWilliam.Kucharski@Sun.COM /* Types. */ 47*8044SWilliam.Kucharski@Sun.COM 48*8044SWilliam.Kucharski@Sun.COM /* The Multiboot header. */ 49*8044SWilliam.Kucharski@Sun.COM typedef struct multiboot_header 50*8044SWilliam.Kucharski@Sun.COM { 51*8044SWilliam.Kucharski@Sun.COM unsigned long magic; 52*8044SWilliam.Kucharski@Sun.COM unsigned long flags; 53*8044SWilliam.Kucharski@Sun.COM unsigned long checksum; 54*8044SWilliam.Kucharski@Sun.COM unsigned long header_addr; 55*8044SWilliam.Kucharski@Sun.COM unsigned long load_addr; 56*8044SWilliam.Kucharski@Sun.COM unsigned long load_end_addr; 57*8044SWilliam.Kucharski@Sun.COM unsigned long bss_end_addr; 58*8044SWilliam.Kucharski@Sun.COM unsigned long entry_addr; 59*8044SWilliam.Kucharski@Sun.COM } multiboot_header_t; 60*8044SWilliam.Kucharski@Sun.COM 61*8044SWilliam.Kucharski@Sun.COM /* The symbol table for a.out. */ 62*8044SWilliam.Kucharski@Sun.COM typedef struct aout_symbol_table 63*8044SWilliam.Kucharski@Sun.COM { 64*8044SWilliam.Kucharski@Sun.COM unsigned long tabsize; 65*8044SWilliam.Kucharski@Sun.COM unsigned long strsize; 66*8044SWilliam.Kucharski@Sun.COM unsigned long addr; 67*8044SWilliam.Kucharski@Sun.COM unsigned long reserved; 68*8044SWilliam.Kucharski@Sun.COM } aout_symbol_table_t; 69*8044SWilliam.Kucharski@Sun.COM 70*8044SWilliam.Kucharski@Sun.COM /* The section header table for ELF. */ 71*8044SWilliam.Kucharski@Sun.COM typedef struct elf_section_header_table 72*8044SWilliam.Kucharski@Sun.COM { 73*8044SWilliam.Kucharski@Sun.COM unsigned long num; 74*8044SWilliam.Kucharski@Sun.COM unsigned long size; 75*8044SWilliam.Kucharski@Sun.COM unsigned long addr; 76*8044SWilliam.Kucharski@Sun.COM unsigned long shndx; 77*8044SWilliam.Kucharski@Sun.COM } elf_section_header_table_t; 78*8044SWilliam.Kucharski@Sun.COM 79*8044SWilliam.Kucharski@Sun.COM /* The Multiboot information. */ 80*8044SWilliam.Kucharski@Sun.COM typedef struct multiboot_info 81*8044SWilliam.Kucharski@Sun.COM { 82*8044SWilliam.Kucharski@Sun.COM unsigned long flags; 83*8044SWilliam.Kucharski@Sun.COM unsigned long mem_lower; 84*8044SWilliam.Kucharski@Sun.COM unsigned long mem_upper; 85*8044SWilliam.Kucharski@Sun.COM unsigned long boot_device; 86*8044SWilliam.Kucharski@Sun.COM unsigned long cmdline; 87*8044SWilliam.Kucharski@Sun.COM unsigned long mods_count; 88*8044SWilliam.Kucharski@Sun.COM unsigned long mods_addr; 89*8044SWilliam.Kucharski@Sun.COM union 90*8044SWilliam.Kucharski@Sun.COM { 91*8044SWilliam.Kucharski@Sun.COM aout_symbol_table_t aout_sym; 92*8044SWilliam.Kucharski@Sun.COM elf_section_header_table_t elf_sec; 93*8044SWilliam.Kucharski@Sun.COM } u; 94*8044SWilliam.Kucharski@Sun.COM unsigned long mmap_length; 95*8044SWilliam.Kucharski@Sun.COM unsigned long mmap_addr; 96*8044SWilliam.Kucharski@Sun.COM } multiboot_info_t; 97*8044SWilliam.Kucharski@Sun.COM 98*8044SWilliam.Kucharski@Sun.COM /* The module structure. */ 99*8044SWilliam.Kucharski@Sun.COM typedef struct module 100*8044SWilliam.Kucharski@Sun.COM { 101*8044SWilliam.Kucharski@Sun.COM unsigned long mod_start; 102*8044SWilliam.Kucharski@Sun.COM unsigned long mod_end; 103*8044SWilliam.Kucharski@Sun.COM unsigned long string; 104*8044SWilliam.Kucharski@Sun.COM unsigned long reserved; 105*8044SWilliam.Kucharski@Sun.COM } module_t; 106*8044SWilliam.Kucharski@Sun.COM 107*8044SWilliam.Kucharski@Sun.COM /* The memory map. Be careful that the offset 0 is base_addr_low 108*8044SWilliam.Kucharski@Sun.COM but no size. */ 109*8044SWilliam.Kucharski@Sun.COM typedef struct memory_map 110*8044SWilliam.Kucharski@Sun.COM { 111*8044SWilliam.Kucharski@Sun.COM unsigned long size; 112*8044SWilliam.Kucharski@Sun.COM unsigned long base_addr_low; 113*8044SWilliam.Kucharski@Sun.COM unsigned long base_addr_high; 114*8044SWilliam.Kucharski@Sun.COM unsigned long length_low; 115*8044SWilliam.Kucharski@Sun.COM unsigned long length_high; 116*8044SWilliam.Kucharski@Sun.COM unsigned long type; 117*8044SWilliam.Kucharski@Sun.COM } memory_map_t; 118*8044SWilliam.Kucharski@Sun.COM 119*8044SWilliam.Kucharski@Sun.COM #endif /* ! ASM */ 120