xref: /onnv-gate/usr/src/grub/grub-0.97/docs/multiboot.h.texi (revision 8044:b3af80bbf173)
1*8044SWilliam.Kucharski@Sun.COM/* @r{multiboot.h - the header for Multiboot} */
2*8044SWilliam.Kucharski@Sun.COM/* @r{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/* @r{Macros.} */
19*8044SWilliam.Kucharski@Sun.COM
20*8044SWilliam.Kucharski@Sun.COM/* @r{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/* @r{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/* @r{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/* @r{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/* @r{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/* @r{Do not include here in boot.S.} */
45*8044SWilliam.Kucharski@Sun.COM
46*8044SWilliam.Kucharski@Sun.COM/* @r{Types.} */
47*8044SWilliam.Kucharski@Sun.COM
48*8044SWilliam.Kucharski@Sun.COM/* @r{The Multiboot header.} */
49*8044SWilliam.Kucharski@Sun.COMtypedef 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/* @r{The symbol table for a.out.} */
62*8044SWilliam.Kucharski@Sun.COMtypedef 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/* @r{The section header table for ELF.} */
71*8044SWilliam.Kucharski@Sun.COMtypedef 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/* @r{The Multiboot information.} */
80*8044SWilliam.Kucharski@Sun.COMtypedef 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/* @r{The module structure.} */
99*8044SWilliam.Kucharski@Sun.COMtypedef 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/* @r{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.COMtypedef 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 /* @r{! ASM} */
120