|  | /* @r{multiboot.h - the header for Multiboot} */ | 
|  | /* @r{Copyright (C) 1999  Free Software Foundation, Inc. | 
|  |  | 
|  | This program is free software; you can redistribute it and/or modify | 
|  | it under the terms of the GNU General Public License as published by | 
|  | the Free Software Foundation; either version 2 of the License, or | 
|  | (at your option) any later version. | 
|  |  | 
|  | This program is distributed in the hope that it will be useful, | 
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | GNU General Public License for more details. | 
|  |  | 
|  | You should have received a copy of the GNU General Public License | 
|  | along with this program; if not, write to the Free Software | 
|  | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.} */ | 
|  |  | 
|  | /* @r{Macros.} */ | 
|  |  | 
|  | /* @r{The magic number for the Multiboot header.} */ | 
|  | #define MULTIBOOT_HEADER_MAGIC          0x1BADB002 | 
|  |  | 
|  | /* @r{The flags for the Multiboot header.} */ | 
|  | #define MULTIBOOT_HEADER_FLAGS          0x00010003 | 
|  |  | 
|  | /* @r{The magic number passed by a Multiboot-compliant boot loader.} */ | 
|  | #define MULTIBOOT_BOOTLOADER_MAGIC      0x2BADB002 | 
|  |  | 
|  | /* @r{The size of our stack (16KB).} */ | 
|  | #define STACK_SIZE                      0x4000 | 
|  |  | 
|  | /* @r{C symbol format. HAVE_ASM_USCORE is defined by configure.} */ | 
|  | #ifdef HAVE_ASM_USCORE | 
|  | # define EXT_C(sym)                     _ ## sym | 
|  | #else | 
|  | # define EXT_C(sym)                     sym | 
|  | #endif | 
|  |  | 
|  | #ifndef ASM | 
|  | /* @r{Do not include here in boot.S.} */ | 
|  |  | 
|  | /* @r{Types.} */ | 
|  |  | 
|  | /* @r{The Multiboot header.} */ | 
|  | typedef struct multiboot_header | 
|  | @{ | 
|  | unsigned long magic; | 
|  | unsigned long flags; | 
|  | unsigned long checksum; | 
|  | unsigned long header_addr; | 
|  | unsigned long load_addr; | 
|  | unsigned long load_end_addr; | 
|  | unsigned long bss_end_addr; | 
|  | unsigned long entry_addr; | 
|  | @} multiboot_header_t; | 
|  |  | 
|  | /* @r{The symbol table for a.out.} */ | 
|  | typedef struct aout_symbol_table | 
|  | @{ | 
|  | unsigned long tabsize; | 
|  | unsigned long strsize; | 
|  | unsigned long addr; | 
|  | unsigned long reserved; | 
|  | @} aout_symbol_table_t; | 
|  |  | 
|  | /* @r{The section header table for ELF.} */ | 
|  | typedef struct elf_section_header_table | 
|  | @{ | 
|  | unsigned long num; | 
|  | unsigned long size; | 
|  | unsigned long addr; | 
|  | unsigned long shndx; | 
|  | @} elf_section_header_table_t; | 
|  |  | 
|  | /* @r{The Multiboot information.} */ | 
|  | typedef struct multiboot_info | 
|  | @{ | 
|  | unsigned long flags; | 
|  | unsigned long mem_lower; | 
|  | unsigned long mem_upper; | 
|  | unsigned long boot_device; | 
|  | unsigned long cmdline; | 
|  | unsigned long mods_count; | 
|  | unsigned long mods_addr; | 
|  | union | 
|  | @{ | 
|  | aout_symbol_table_t aout_sym; | 
|  | elf_section_header_table_t elf_sec; | 
|  | @} u; | 
|  | unsigned long mmap_length; | 
|  | unsigned long mmap_addr; | 
|  | @} multiboot_info_t; | 
|  |  | 
|  | /* @r{The module structure.} */ | 
|  | typedef struct module | 
|  | @{ | 
|  | unsigned long mod_start; | 
|  | unsigned long mod_end; | 
|  | unsigned long string; | 
|  | unsigned long reserved; | 
|  | @} module_t; | 
|  |  | 
|  | /* @r{The memory map. Be careful that the offset 0 is base_addr_low | 
|  | but no size.} */ | 
|  | typedef struct memory_map | 
|  | @{ | 
|  | unsigned long size; | 
|  | unsigned long base_addr_low; | 
|  | unsigned long base_addr_high; | 
|  | unsigned long length_low; | 
|  | unsigned long length_high; | 
|  | unsigned long type; | 
|  | @} memory_map_t; | 
|  |  | 
|  | #endif /* @r{! ASM} */ |