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