15 |
along with this program; if not, write to the Free Software |
along with this program; if not, write to the Free Software |
16 |
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ |
17 |
|
|
18 |
|
|
19 |
/* Macros. */ |
/* Macros. */ |
20 |
|
|
21 |
/* The magic number for the Multiboot header. */ |
/* The magic number for the Multiboot header. */ |
36 |
|
|
37 |
/* Types. */ |
/* Types. */ |
38 |
|
|
39 |
|
#include <sys/types.h> |
40 |
|
|
41 |
/* The Multiboot header. */ |
/* The Multiboot header. */ |
42 |
typedef struct multiboot_header |
typedef struct multiboot_header |
43 |
{ |
{ |
44 |
unsigned long magic; |
uint32_t magic; |
45 |
unsigned long flags; |
uint32_t flags; |
46 |
unsigned long checksum; |
uint32_t checksum; |
47 |
unsigned long header_addr; |
uint32_t header_addr; |
48 |
unsigned long load_addr; |
uint32_t load_addr; |
49 |
unsigned long load_end_addr; |
uint32_t load_end_addr; |
50 |
unsigned long bss_end_addr; |
uint32_t bss_end_addr; |
51 |
unsigned long entry_addr; |
uint32_t entry_addr; |
52 |
} multiboot_header_t; |
} multiboot_header_t; |
53 |
|
|
54 |
/* The symbol table for a.out. */ |
/* The symbol table for a.out. */ |
55 |
typedef struct aout_symbol_table |
typedef struct aout_symbol_table |
56 |
{ |
{ |
57 |
unsigned long tabsize; |
uint32_t tabsize; |
58 |
unsigned long strsize; |
uint32_t strsize; |
59 |
unsigned long addr; |
uint32_t addr; |
60 |
unsigned long reserved; |
uint32_t reserved; |
61 |
} aout_symbol_table_t; |
} aout_symbol_table_t; |
62 |
|
|
63 |
/* The section header table for ELF. */ |
/* The section header table for ELF. */ |
64 |
typedef struct elf_section_header_table |
typedef struct elf_section_header_table |
65 |
{ |
{ |
66 |
unsigned long num; |
uint32_t num; |
67 |
unsigned long size; |
uint32_t size; |
68 |
unsigned long addr; |
uint32_t addr; |
69 |
unsigned long shndx; |
uint32_t shndx; |
70 |
} elf_section_header_table_t; |
} elf_section_header_table_t; |
71 |
|
|
72 |
/* The Multiboot information. */ |
/* The Multiboot information. */ |
73 |
typedef struct multiboot_info |
typedef struct multiboot_info |
74 |
{ |
{ |
75 |
unsigned long flags; |
uint32_t flags; |
76 |
unsigned long mem_lower; |
uint32_t mem_lower; |
77 |
unsigned long mem_upper; |
uint32_t mem_upper; |
78 |
unsigned long boot_device; |
uint32_t boot_device; |
79 |
unsigned long cmdline; |
uint32_t cmdline; |
80 |
unsigned long mods_count; |
uint32_t mods_count; |
81 |
unsigned long mods_addr; |
uint32_t mods_addr; |
82 |
union |
union |
83 |
{ |
{ |
84 |
aout_symbol_table_t aout_sym; |
aout_symbol_table_t aout_sym; |
85 |
elf_section_header_table_t elf_sec; |
elf_section_header_table_t elf_sec; |
86 |
} u; |
} u; |
87 |
unsigned long mmap_length; |
uint32_t mmap_length; |
88 |
unsigned long mmap_addr; |
uint32_t mmap_addr; |
89 |
unsigned long drives_length; |
uint32_t drives_length; |
90 |
unsigned long drives_addr; |
uint32_t drives_addr; |
91 |
unsigned long config_table; |
uint32_t config_table; |
92 |
unsigned long boot_loader_name; |
uint32_t boot_loader_name; |
93 |
unsigned long apm_table; |
uint32_t apm_table; |
94 |
unsigned long vbe_control_info; |
uint32_t vbe_control_info; |
95 |
unsigned long vbe_mode_info; |
uint32_t vbe_mode_info; |
96 |
unsigned long vbe_mode; |
uint32_t vbe_mode; |
97 |
unsigned long vbe_interface_seg; |
uint32_t vbe_interface_seg; |
98 |
unsigned long vbe_interface_off; |
uint32_t vbe_interface_off; |
99 |
unsigned long vbe_interface_len; |
uint32_t vbe_interface_len; |
100 |
} multiboot_info_t; |
} multiboot_info_t; |
101 |
|
|
102 |
/* The module structure. */ |
/* The module structure. */ |
103 |
typedef struct module |
typedef struct module |
104 |
{ |
{ |
105 |
unsigned long mod_start; |
uint32_t mod_start; |
106 |
unsigned long mod_end; |
uint32_t mod_end; |
107 |
unsigned long string; |
uint32_t string; |
108 |
unsigned long reserved; |
uint32_t reserved; |
109 |
} module_t; |
} module_t; |
110 |
|
|
111 |
/* The memory map. Be careful that the offset 0 is base_addr_low |
/* The memory map. SIZE is the size of the structure except for the |
112 |
but no size. */ |
SIZE field itself. */ |
113 |
typedef struct memory_map |
typedef struct memory_map |
114 |
{ |
{ |
115 |
unsigned long size; |
uint32_t size; |
116 |
unsigned long base_addr_low; |
uint64_t base_addr; |
117 |
unsigned long base_addr_high; |
uint64_t length; |
118 |
unsigned long length_low; |
uint32_t type; |
|
unsigned long length_high; |
|
|
unsigned long type; |
|
119 |
} memory_map_t; |
} memory_map_t; |
120 |
|
|
121 |
#endif /* ! ASM */ |
#endif /* ! ASM */ |