4 #define E820MAP 0x2d0 /* our map */
5 #define E820MAX 32 /* number of entries in E820MAP */
6 #define E820NR 0x1e8 /* # entries in E820MAP */
11 uint64_t addr; /* start of memory segment */
12 uint64_t size; /* size of memory segment */
13 uint32_t type; /* type of memory segment */
15 #define E820_RESERVED 2
16 #define E820_ACPI 3 /* usable as RAM once ACPI tables have been read */
18 } __attribute__((packed));
20 /* FIXME expand on drive_info_struct... */
21 struct drive_info_struct {
24 struct sys_desc_table {
29 struct apm_bios_info {
30 uint16_t version; /* 0x40 */
31 uint16_t cseg; /* 0x42 */
32 uint32_t offset; /* 0x44 */
33 uint16_t cseg_16; /* 0x48 */
34 uint16_t dseg; /* 0x4a */
35 uint16_t flags; /* 0x4c */
36 uint16_t cseg_len; /* 0x4e */
37 uint16_t cseg_16_len; /* 0x50 */
38 uint16_t dseg_len; /* 0x52 */
39 uint8_t reserved[44]; /* 0x54 */
43 struct x86_linux_param_header {
44 uint8_t orig_x; /* 0x00 */
45 uint8_t orig_y; /* 0x01 */
46 uint16_t ext_mem_k; /* 0x02 -- EXT_MEM_K sits here */
47 uint16_t orig_video_page; /* 0x04 */
48 uint8_t orig_video_mode; /* 0x06 */
49 uint8_t orig_video_cols; /* 0x07 */
50 uint16_t unused2; /* 0x08 */
51 uint16_t orig_video_ega_bx; /* 0x0a */
52 uint16_t unused3; /* 0x0c */
53 uint8_t orig_video_lines; /* 0x0e */
54 uint8_t orig_video_isVGA; /* 0x0f */
55 uint16_t orig_video_points; /* 0x10 */
57 /* VESA graphic mode -- linear frame buffer */
58 uint16_t lfb_width; /* 0x12 */
59 uint16_t lfb_height; /* 0x14 */
60 uint16_t lfb_depth; /* 0x16 */
61 uint32_t lfb_base; /* 0x18 */
62 uint32_t lfb_size; /* 0x1c */
63 uint16_t cl_magic; /* 0x20 */
64 #define CL_MAGIC_VALUE 0xA33F
65 uint16_t cl_offset; /* 0x22 */
66 uint16_t lfb_linelength; /* 0x24 */
67 uint8_t red_size; /* 0x26 */
68 uint8_t red_pos; /* 0x27 */
69 uint8_t green_size; /* 0x28 */
70 uint8_t green_pos; /* 0x29 */
71 uint8_t blue_size; /* 0x2a */
72 uint8_t blue_pos; /* 0x2b */
73 uint8_t rsvd_size; /* 0x2c */
74 uint8_t rsvd_pos; /* 0x2d */
75 uint16_t vesapm_seg; /* 0x2e */
76 uint16_t vesapm_off; /* 0x30 */
77 uint16_t pages; /* 0x32 */
78 uint8_t reserved4[12]; /* 0x34 -- 0x3f reserved for future expansion */
80 struct apm_bios_info apm_bios_info; /* 0x40 */
81 struct drive_info_struct drive_info; /* 0x80 */
82 struct sys_desc_table sys_desc_table; /* 0xa0 */
83 uint32_t alt_mem_k; /* 0x1e0 */
84 uint8_t reserved5[4]; /* 0x1e4 */
85 uint8_t e820_map_nr; /* 0x1e8 */
86 uint8_t reserved6[8]; /* 0x1e9 */
87 uint8_t setup_sects; /* 0x1f1 */
88 uint16_t mount_root_rdonly; /* 0x1f2 */
89 uint8_t reserved7[4]; /* 0x1f4 */
90 uint16_t ramdisk_flags; /* 0x1f8 */
91 #define RAMDISK_IMAGE_START_MASK 0x07FF
92 #define RAMDISK_PROMPT_FLAG 0x8000
93 #define RAMDISK_LOAD_FLAG 0x4000
94 uint16_t vid_mode; /* 0x1fa */
95 uint16_t root_dev; /* 0x1fc */
96 uint8_t reserved9[1]; /* 0x1fe */
97 uint8_t aux_device_info; /* 0x1ff */
99 uint8_t reserved10[2]; /* 0x200 */
100 uint8_t header_magic[4]; /* 0x202 */
101 uint16_t protocol_version; /* 0x206 */
102 uint8_t reserved11[8]; /* 0x208 */
103 uint8_t loader_type; /* 0x210 */
104 #define LOADER_TYPE_LOADLIN 1
105 #define LOADER_TYPE_BOOTSECT_LOADER 2
106 #define LOADER_TYPE_SYSLINUX 3
107 #define LOADER_TYPE_ETHERBOOT 4
108 #define LOADER_TYPE_UNKNOWN 0xFF
109 uint8_t loader_flags; /* 0x211 */
110 uint8_t reserved12[2]; /* 0x212 */
111 uint32_t kernel_start; /* 0x214 */
112 uint32_t initrd_start; /* 0x218 */
113 uint32_t initrd_size; /* 0x21c */
114 uint8_t reserved13[4]; /* 0x220 */
116 uint16_t heap_end_ptr; /* 0x224 */
117 uint8_t reserved14[2]; /* 0x226 */
119 uint32_t cmd_line_ptr; /* 0x228 */
121 uint32_t initrd_addr_max; /* 0x22c */
122 uint8_t reserved15[160]; /* 0x230 */
123 struct e820entry e820_map[E820MAX]; /* 0x2d0 */
125 #define COMMAND_LINE_SIZE 256
128 struct x86_linux_header {
129 uint8_t reserved1[0x1f1]; /* 0x000 */
130 uint8_t setup_sects; /* 0x1f1 */
131 uint16_t root_flags; /* 0x1f2 */
132 uint8_t reserved2[6]; /* 0x1f4 */
133 uint16_t vid_mode; /* 0x1fa */
134 uint16_t root_dev; /* 0x1fc */
135 uint16_t boot_sector_magic; /* 0x1fe */
137 uint8_t reserved3[2]; /* 0x200 */
138 uint8_t header_magic[4]; /* 0x202 */
139 uint16_t protocol_version; /* 0x206 */
140 uint32_t realmode_swtch; /* 0x208 */
141 uint16_t start_sys; /* 0x20c */
142 uint16_t kver_addr; /* 0x20e */
143 uint8_t type_of_loader; /* 0x210 */
144 uint8_t loadflags; /* 0x211 */
145 uint16_t setup_move_size; /* 0x212 */
146 uint32_t code32_start; /* 0x214 */
147 uint32_t ramdisk_image; /* 0x218 */
148 uint32_t ramdisk_size; /* 0x21c */
149 uint8_t reserved4[4]; /* 0x220 */
151 uint16_t heap_end_ptr; /* 0x224 */
152 uint8_t reserved5[2]; /* 0x226 */
154 uint32_t cmd_line_ptr; /* 0x228 */
156 uint32_t initrd_addr_max; /* 0x22c */
157 uint8_t tail[32*1024]; /* 0x230 */
158 } __attribute__ ((packed));
160 #endif /* ASSEMBLY */
162 #endif /* X86_LINUX_H */