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