1 /* multiboot.h
2  * tag: header for multiboot
3  *
4  * Copyright (C) 2003 Stefan Reinauer
5  *
6  * See the file "COPYING" for further information about
7  * the copyright and warranty status of this work.
8  */
9 
10 /* magic number for multiboot header */
11 #define MULTIBOOT_HEADER_MAGIC		0x1BADB002
12 
13 /* flags for multiboot header */
14 #define MULTIBOOT_HEADER_FLAGS		0x00010003
15 
16 /* magic number passed by multiboot-compliant boot loader.  */
17 #define MULTIBOOT_BOOTLOADER_MAGIC	0x2BADB002
18 
19 /* The size of our stack (8KB).  */
20 #define STACK_SIZE			0x2000
21 
22 /* C symbol format. HAVE_ASM_USCORE is defined by configure.  */
23 #ifdef HAVE_ASM_USCORE
24 # define EXT_C(sym)			_ ## sym
25 #else
26 # define EXT_C(sym)			sym
27 #endif
28 
29 #ifndef ASM
30 /* We don't want these declarations in boot.S  */
31 
32 /* multiboot header */
33 typedef struct multiboot_header {
34 	unsigned long magic;
35 	unsigned long flags;
36 	unsigned long checksum;
37 	unsigned long header_addr;
38 	unsigned long load_addr;
39 	unsigned long load_end_addr;
40 	unsigned long bss_end_addr;
41 	unsigned long entry_addr;
42 } multiboot_header_t;
43 
44 /* symbol table for a.out */
45 typedef struct aout_symbol_table {
46 	unsigned long tabsize;
47 	unsigned long strsize;
48 	unsigned long addr;
49 	unsigned long reserved;
50 } aout_symbol_table_t;
51 
52 /* section header table for ELF */
53 typedef struct elf_section_header_table {
54 	unsigned long num;
55 	unsigned long size;
56 	unsigned long addr;
57 	unsigned long shndx;
58 } elf_section_header_table_t;
59 
60 /* multiboot information */
61 typedef struct multiboot_info {
62 	unsigned long flags;
63 	unsigned long mem_lower;
64 	unsigned long mem_upper;
65 	unsigned long boot_device;
66 	unsigned long cmdline;
67 	unsigned long mods_count;
68 	unsigned long mods_addr;
69 	union {
70 		aout_symbol_table_t aout_sym;
71 		elf_section_header_table_t elf_sec;
72 	} u;
73 	unsigned long mmap_length;
74 	unsigned long mmap_addr;
75 } multiboot_info_t;
76 
77 /* module structure */
78 typedef struct module {
79 	unsigned long mod_start;
80 	unsigned long mod_end;
81 	unsigned long string;
82 	unsigned long reserved;
83 } module_t;
84 
85 /* memory map. Be careful that the offset 0 is base_addr_low
86    but no size.  */
87 typedef struct memory_map {
88 	unsigned long size;
89 	unsigned long base_addr_low;
90 	unsigned long base_addr_high;
91 	unsigned long length_low;
92 	unsigned long length_high;
93 	unsigned long type;
94 } memory_map_t;
95 
96 #endif				/* ! ASM */
97