1/*
2 * Copyright 2009, François Revol, revol@free.fr.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _MULTIBOOT_H
6#define _MULTIBOOT_H
7
8
9#ifndef __ASSEMBLER__
10
11#include <SupportDefs.h>
12
13#endif /* __ASSEMBLER__ */
14
15
16/* minimal part of the MultiBoot API */
17/* we use the official names */
18
19/* magics */
20#define MULTIBOOT_MAGIC 0x1badb002
21#define MULTIBOOT_MAGIC2 0x2badb002
22
23/* header flags */
24#define MULTIBOOT_PAGE_ALIGN 0x00000001
25#define MULTIBOOT_MEMORY_INFO 0x00000002
26#define MULTIBOOT_VIDEO_MODE 0x00000004
27#define MULTIBOOT_AOUT_KLUDGE 0x00010000
28
29/* info flags */
30#define MULTIBOOT_INFO_MEMORY 0x00000001
31#define MULTIBOOT_INFO_BOOTDEV 0x00000002
32#define MULTIBOOT_INFO_CMDLINE 0x00000004
33#define MULTIBOOT_INFO_MODS 0x00000008
34#define MULTIBOOT_INFO_MEM_MAP 0x00000040
35
36#ifndef __ASSEMBLER__
37
38/* info struct passed to the loader */
39struct multiboot_info {
40	uint32 flags;
41	uint32 mem_lower;
42	uint32 mem_upper;
43	uint32 boot_device;
44	uint32 cmdline;
45	uint32 mods_count;
46	uint32 mods_addr;
47	uint32 syms[4];
48	uint32 mmap_length;
49	uint32 mmap_addr;
50	uint32 drives_length;
51	uint32 drives_addr;
52	uint32 config_table;
53	uint32 boot_loader_name;
54	uint32 apm_table;
55	uint32 vbe_control_info;
56	uint32 vbe_mode_info;
57	uint16 vbe_interface_seg;
58	uint16 vbe_interface_off;
59	uint16 vbe_interface_len;
60};
61
62
63#ifdef __cplusplus
64extern "C" {
65#endif
66
67extern void dump_multiboot_info(void);
68extern status_t parse_multiboot_commandline(struct stage2_args *args);
69
70#ifdef __cplusplus
71}
72#endif
73
74#endif /* __ASSEMBLER__ */
75
76#endif /* _MULTIBOOT_H */
77