xref: /onnv-gate/usr/src/grub/grub-0.97/docs/multiboot.h (revision 8044:b3af80bbf173)
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