master
  1/*  multiboot2.h - Multiboot 2 header file.  */
  2/*  Copyright (C) 1999,2003,2007,2008,2009,2010  Free Software Foundation, Inc.
  3 *
  4 *  Permission is hereby granted, free of charge, to any person obtaining a copy
  5 *  of this software and associated documentation files (the "Software"), to
  6 *  deal in the Software without restriction, including without limitation the
  7 *  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  8 *  sell copies of the Software, and to permit persons to whom the Software is
  9 *  furnished to do so, subject to the following conditions:
 10 *
 11 *  The above copyright notice and this permission notice shall be included in
 12 *  all copies or substantial portions of the Software.
 13 *
 14 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 15 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 16 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL ANY
 17 *  DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 18 *  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
 19 *  IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 20 */
 21
 22#ifndef MULTIBOOT_HEADER
 23#define MULTIBOOT_HEADER 1
 24
 25/* How many bytes from the start of the file we search for the header.  */
 26#define MULTIBOOT_SEARCH			32768
 27#define MULTIBOOT_HEADER_ALIGN			8
 28
 29/* The magic field should contain this.  */
 30#define MULTIBOOT2_HEADER_MAGIC			0xe85250d6
 31
 32/* This should be in %eax.  */
 33#define MULTIBOOT2_BOOTLOADER_MAGIC		0x36d76289
 34
 35/* Alignment of multiboot modules.  */
 36#define MULTIBOOT_MOD_ALIGN			0x00001000
 37
 38/* Alignment of the multiboot info structure.  */
 39#define MULTIBOOT_INFO_ALIGN			0x00000008
 40
 41/* Flags set in the 'flags' member of the multiboot header.  */
 42
 43#define MULTIBOOT_TAG_ALIGN                  8
 44#define MULTIBOOT_TAG_TYPE_END               0
 45#define MULTIBOOT_TAG_TYPE_CMDLINE           1
 46#define MULTIBOOT_TAG_TYPE_BOOT_LOADER_NAME  2
 47#define MULTIBOOT_TAG_TYPE_MODULE            3
 48#define MULTIBOOT_TAG_TYPE_BASIC_MEMINFO     4
 49#define MULTIBOOT_TAG_TYPE_BOOTDEV           5
 50#define MULTIBOOT_TAG_TYPE_MMAP              6
 51#define MULTIBOOT_TAG_TYPE_VBE               7
 52#define MULTIBOOT_TAG_TYPE_FRAMEBUFFER       8
 53#define MULTIBOOT_TAG_TYPE_ELF_SECTIONS      9
 54#define MULTIBOOT_TAG_TYPE_APM               10
 55#define MULTIBOOT_TAG_TYPE_EFI32             11
 56#define MULTIBOOT_TAG_TYPE_EFI64             12
 57#define MULTIBOOT_TAG_TYPE_SMBIOS            13
 58#define MULTIBOOT_TAG_TYPE_ACPI_OLD          14
 59#define MULTIBOOT_TAG_TYPE_ACPI_NEW          15
 60#define MULTIBOOT_TAG_TYPE_NETWORK           16
 61#define MULTIBOOT_TAG_TYPE_EFI_MMAP          17
 62#define MULTIBOOT_TAG_TYPE_EFI_BS            18
 63#define MULTIBOOT_TAG_TYPE_EFI32_IH          19
 64#define MULTIBOOT_TAG_TYPE_EFI64_IH          20
 65#define MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR    21
 66
 67#define MULTIBOOT_HEADER_TAG_END  0
 68#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST  1
 69#define MULTIBOOT_HEADER_TAG_ADDRESS  2
 70#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS  3
 71#define MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS  4
 72#define MULTIBOOT_HEADER_TAG_FRAMEBUFFER  5
 73#define MULTIBOOT_HEADER_TAG_MODULE_ALIGN  6
 74#define MULTIBOOT_HEADER_TAG_EFI_BS  7
 75#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32  8
 76#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64  9
 77#define MULTIBOOT_HEADER_TAG_RELOCATABLE  10
 78
 79#define MULTIBOOT_ARCHITECTURE_I386  0
 80#define MULTIBOOT_ARCHITECTURE_MIPS32  4
 81#define MULTIBOOT_HEADER_TAG_OPTIONAL 1
 82
 83#define MULTIBOOT_LOAD_PREFERENCE_NONE 0
 84#define MULTIBOOT_LOAD_PREFERENCE_LOW 1
 85#define MULTIBOOT_LOAD_PREFERENCE_HIGH 2
 86
 87#define MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED 1
 88#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2
 89
 90#ifndef ASM_FILE
 91
 92typedef unsigned char		multiboot_uint8_t;
 93typedef unsigned short		multiboot_uint16_t;
 94typedef unsigned int		multiboot_uint32_t;
 95typedef unsigned long long	multiboot_uint64_t;
 96
 97struct multiboot_header
 98{
 99  /* Must be MULTIBOOT_MAGIC - see above.  */
100  multiboot_uint32_t magic;
101
102  /* ISA */
103  multiboot_uint32_t architecture;
104
105  /* Total header length.  */
106  multiboot_uint32_t header_length;
107
108  /* The above fields plus this one must equal 0 mod 2^32. */
109  multiboot_uint32_t checksum;
110};
111
112struct multiboot_header_tag
113{
114  multiboot_uint16_t type;
115  multiboot_uint16_t flags;
116  multiboot_uint32_t size;
117};
118
119struct multiboot_header_tag_information_request
120{
121  multiboot_uint16_t type;
122  multiboot_uint16_t flags;
123  multiboot_uint32_t size;
124  multiboot_uint32_t requests[0];
125};
126
127struct multiboot_header_tag_address
128{
129  multiboot_uint16_t type;
130  multiboot_uint16_t flags;
131  multiboot_uint32_t size;
132  multiboot_uint32_t header_addr;
133  multiboot_uint32_t load_addr;
134  multiboot_uint32_t load_end_addr;
135  multiboot_uint32_t bss_end_addr;
136};
137
138struct multiboot_header_tag_entry_address
139{
140  multiboot_uint16_t type;
141  multiboot_uint16_t flags;
142  multiboot_uint32_t size;
143  multiboot_uint32_t entry_addr;
144};
145
146struct multiboot_header_tag_console_flags
147{
148  multiboot_uint16_t type;
149  multiboot_uint16_t flags;
150  multiboot_uint32_t size;
151  multiboot_uint32_t console_flags;
152};
153
154struct multiboot_header_tag_framebuffer
155{
156  multiboot_uint16_t type;
157  multiboot_uint16_t flags;
158  multiboot_uint32_t size;
159  multiboot_uint32_t width;
160  multiboot_uint32_t height;
161  multiboot_uint32_t depth;
162};
163
164struct multiboot_header_tag_module_align
165{
166  multiboot_uint16_t type;
167  multiboot_uint16_t flags;
168  multiboot_uint32_t size;
169};
170
171struct multiboot_header_tag_relocatable
172{
173  multiboot_uint16_t type;
174  multiboot_uint16_t flags;
175  multiboot_uint32_t size;
176  multiboot_uint32_t min_addr;
177  multiboot_uint32_t max_addr;
178  multiboot_uint32_t align;
179  multiboot_uint32_t preference;
180};
181
182struct multiboot_color
183{
184  multiboot_uint8_t red;
185  multiboot_uint8_t green;
186  multiboot_uint8_t blue;
187};
188
189struct multiboot_mmap_entry
190{
191  multiboot_uint64_t addr;
192  multiboot_uint64_t len;
193#define MULTIBOOT_MEMORY_AVAILABLE		1
194#define MULTIBOOT_MEMORY_RESERVED		2
195#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE       3
196#define MULTIBOOT_MEMORY_NVS                    4
197#define MULTIBOOT_MEMORY_BADRAM                 5
198  multiboot_uint32_t type;
199  multiboot_uint32_t zero;
200};
201typedef struct multiboot_mmap_entry multiboot_memory_map_t;
202
203struct multiboot_tag
204{
205  multiboot_uint32_t type;
206  multiboot_uint32_t size;
207};
208
209struct multiboot_tag_string
210{
211  multiboot_uint32_t type;
212  multiboot_uint32_t size;
213  char string[0];
214};
215
216struct multiboot_tag_module
217{
218  multiboot_uint32_t type;
219  multiboot_uint32_t size;
220  multiboot_uint32_t mod_start;
221  multiboot_uint32_t mod_end;
222  char cmdline[0];
223};
224
225struct multiboot_tag_basic_meminfo
226{
227  multiboot_uint32_t type;
228  multiboot_uint32_t size;
229  multiboot_uint32_t mem_lower;
230  multiboot_uint32_t mem_upper;
231};
232
233struct multiboot_tag_bootdev
234{
235  multiboot_uint32_t type;
236  multiboot_uint32_t size;
237  multiboot_uint32_t biosdev;
238  multiboot_uint32_t slice;
239  multiboot_uint32_t part;
240};
241
242struct multiboot_tag_mmap
243{
244  multiboot_uint32_t type;
245  multiboot_uint32_t size;
246  multiboot_uint32_t entry_size;
247  multiboot_uint32_t entry_version;
248  struct multiboot_mmap_entry entries[0];  
249};
250
251struct multiboot_vbe_info_block
252{
253  multiboot_uint8_t external_specification[512];
254};
255
256struct multiboot_vbe_mode_info_block
257{
258  multiboot_uint8_t external_specification[256];
259};
260
261struct multiboot_tag_vbe
262{
263  multiboot_uint32_t type;
264  multiboot_uint32_t size;
265
266  multiboot_uint16_t vbe_mode;
267  multiboot_uint16_t vbe_interface_seg;
268  multiboot_uint16_t vbe_interface_off;
269  multiboot_uint16_t vbe_interface_len;
270
271  struct multiboot_vbe_info_block vbe_control_info;
272  struct multiboot_vbe_mode_info_block vbe_mode_info;
273};
274
275struct multiboot_tag_framebuffer_common
276{
277  multiboot_uint32_t type;
278  multiboot_uint32_t size;
279
280  multiboot_uint64_t framebuffer_addr;
281  multiboot_uint32_t framebuffer_pitch;
282  multiboot_uint32_t framebuffer_width;
283  multiboot_uint32_t framebuffer_height;
284  multiboot_uint8_t framebuffer_bpp;
285#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0
286#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB     1
287#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT	2
288  multiboot_uint8_t framebuffer_type;
289  multiboot_uint16_t reserved;
290};
291
292struct multiboot_tag_framebuffer
293{
294  struct multiboot_tag_framebuffer_common common;
295
296  union
297  {
298    struct
299    {
300      multiboot_uint16_t framebuffer_palette_num_colors;
301      struct multiboot_color framebuffer_palette[0];
302    };
303    struct
304    {
305      multiboot_uint8_t framebuffer_red_field_position;
306      multiboot_uint8_t framebuffer_red_mask_size;
307      multiboot_uint8_t framebuffer_green_field_position;
308      multiboot_uint8_t framebuffer_green_mask_size;
309      multiboot_uint8_t framebuffer_blue_field_position;
310      multiboot_uint8_t framebuffer_blue_mask_size;
311    };
312  };
313};
314
315struct multiboot_tag_elf_sections
316{
317  multiboot_uint32_t type;
318  multiboot_uint32_t size;
319  multiboot_uint32_t num;
320  multiboot_uint32_t entsize;
321  multiboot_uint32_t shndx;
322  char sections[0];
323};
324
325struct multiboot_tag_apm
326{
327  multiboot_uint32_t type;
328  multiboot_uint32_t size;
329  multiboot_uint16_t version;
330  multiboot_uint16_t cseg;
331  multiboot_uint32_t offset;
332  multiboot_uint16_t cseg_16;
333  multiboot_uint16_t dseg;
334  multiboot_uint16_t flags;
335  multiboot_uint16_t cseg_len;
336  multiboot_uint16_t cseg_16_len;
337  multiboot_uint16_t dseg_len;
338};
339
340struct multiboot_tag_efi32
341{
342  multiboot_uint32_t type;
343  multiboot_uint32_t size;
344  multiboot_uint32_t pointer;
345};
346
347struct multiboot_tag_efi64
348{
349  multiboot_uint32_t type;
350  multiboot_uint32_t size;
351  multiboot_uint64_t pointer;
352};
353
354struct multiboot_tag_smbios
355{
356  multiboot_uint32_t type;
357  multiboot_uint32_t size;
358  multiboot_uint8_t major;
359  multiboot_uint8_t minor;
360  multiboot_uint8_t reserved[6];
361  multiboot_uint8_t tables[0];
362};
363
364struct multiboot_tag_old_acpi
365{
366  multiboot_uint32_t type;
367  multiboot_uint32_t size;
368  multiboot_uint8_t rsdp[0];
369};
370
371struct multiboot_tag_new_acpi
372{
373  multiboot_uint32_t type;
374  multiboot_uint32_t size;
375  multiboot_uint8_t rsdp[0];
376};
377
378struct multiboot_tag_network
379{
380  multiboot_uint32_t type;
381  multiboot_uint32_t size;
382  multiboot_uint8_t dhcpack[0];
383};
384
385struct multiboot_tag_efi_mmap
386{
387  multiboot_uint32_t type;
388  multiboot_uint32_t size;
389  multiboot_uint32_t descr_size;
390  multiboot_uint32_t descr_vers;
391  multiboot_uint8_t efi_mmap[0];
392}; 
393
394struct multiboot_tag_efi32_ih
395{
396  multiboot_uint32_t type;
397  multiboot_uint32_t size;
398  multiboot_uint32_t pointer;
399};
400
401struct multiboot_tag_efi64_ih
402{
403  multiboot_uint32_t type;
404  multiboot_uint32_t size;
405  multiboot_uint64_t pointer;
406};
407
408struct multiboot_tag_load_base_addr
409{
410  multiboot_uint32_t type;
411  multiboot_uint32_t size;
412  multiboot_uint32_t load_base_addr;
413};
414
415#endif /* ! ASM_FILE */
416
417#endif /* ! MULTIBOOT_HEADER */