1 /* Copyright (C) 1999, 2001  Free Software Foundation, Inc.
2 
3    This program is free software; you can redistribute it and/or modify
4    it under the terms of the GNU General Public License as published by
5    the Free Software Foundation; either version 2 of the License, or
6    (at your option) any later version.
7 
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12 
13    You should have received a copy of the GNU General Public License
14    along with this program; if not, write to the Free Software
15    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
16 
17 #ifndef __MULTIBOOT_H__
18 #define __MULTIBOOT_H__
19 
20 /*
21  * Multiboot header structure.
22  */
23 #define MULTIBOOT_HEADER_MAGIC         0x1BADB002
24 #define MULTIBOOT_HEADER_MODS_ALIGNED  0x00000001
25 #define MULTIBOOT_HEADER_WANT_MEMORY   0x00000002
26 #define MULTIBOOT_HEADER_HAS_VBE       0x00000004
27 #define MULTIBOOT_HEADER_HAS_ADDR      0x00010000
28 
29 /* The magic number passed by a Multiboot-compliant boot loader. */
30 #define MULTIBOOT_BOOTLOADER_MAGIC     0x2BADB002
31 
32 #define MBI_MEMLIMITS  (1u<< 0)
33 #define MBI_BOOTDEV    (1u<< 1)
34 #define MBI_CMDLINE    (1u<< 2)
35 #define MBI_MODULES    (1u<< 3)
36 #define MBI_AOUT_SYMS  (1u<< 4)
37 #define MBI_ELF_SYMS   (1u<< 5)
38 #define MBI_MEMMAP     (1u<< 6)
39 #define MBI_DRIVES     (1u<< 7)
40 #define MBI_BIOSCONFIG (1u<< 8)
41 #define MBI_LOADERNAME (1u<< 9)
42 #define MBI_APM        (1u<<10)
43 
44 #ifndef __ASSEMBLY__
45 
46 /* The symbol table for a.out.  */
47 typedef struct {
48 	u32 tabsize;
49 	u32 strsize;
50 	u32 addr;
51 	u32 reserved;
52 } aout_symbol_table_t;
53 
54 /* The section header table for ELF.  */
55 typedef struct {
56 	u32 num;
57 	u32 size;
58 	u32 addr;
59 	u32 shndx;
60 } elf_section_header_table_t;
61 
62 /* The Multiboot information.  */
63 typedef struct {
64 	u32 flags;
65 
66 	/* Valid if flags sets MBI_MEMLIMITS */
67 	u32 mem_lower;
68 	u32 mem_upper;
69 
70 	/* Valid if flags sets MBI_BOOTDEV */
71 	u32 boot_device;
72 
73 	/* Valid if flags sets MBI_CMDLINE */
74 	u32 cmdline;
75 
76 	/* Valid if flags sets MBI_MODULES */
77 	u32 mods_count;
78 	u32 mods_addr;
79 
80 	/* Valid if flags sets ... */
81 	union {
82 		aout_symbol_table_t aout_sym;        /* ... MBI_AOUT_SYMS */
83 		elf_section_header_table_t elf_sec;  /* ... MBI_ELF_SYMS */
84 	} u;
85 
86 	/* Valid if flags sets MBI_MEMMAP */
87 	u32 mmap_length;
88 	u32 mmap_addr;
89 
90 	/* Valid if flags sets MBI_DRIVES */
91 	u32 drives_length;
92 	u32 drives_addr;
93 
94 	/* Valid if flags sets MBI_BIOSCONFIG */
95 	u32 config_table;
96 
97 	/* Valid if flags sets MBI_LOADERNAME */
98 	u32 boot_loader_name;
99 
100 	/* Valid if flags sets MBI_APM */
101 	u32 apm_table;
102 } multiboot_info_t;
103 
104 /* The module structure.  */
105 typedef struct {
106 	u32 mod_start;
107 	u32 mod_end;
108 	u32 string;
109 	u32 reserved;
110 } module_t;
111 
112 /* The memory map. Be careful that the offset 0 is base_addr_low
113    but no size.  */
114 typedef struct {
115 	u32 size;
116 	u32 base_addr_low;
117 	u32 base_addr_high;
118 	u32 length_low;
119 	u32 length_high;
120 	u32 type;
121 } memory_map_t;
122 
123 
124 #endif /* __ASSEMBLY__ */
125 
126 
127 #endif /* _BOOTSTUB_MB_H */
128