[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 3/7] xen: Add multiboot2.h header file
Define constants and structures which are needed to implement multiboot2 protocol support. Signed-off-by: Daniel Kiper <daniel.kiper@xxxxxxxxxx> --- xen/include/xen/multiboot2.h | 386 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 386 insertions(+) create mode 100644 xen/include/xen/multiboot2.h diff --git a/xen/include/xen/multiboot2.h b/xen/include/xen/multiboot2.h new file mode 100644 index 0000000..ee75c3f --- /dev/null +++ b/xen/include/xen/multiboot2.h @@ -0,0 +1,386 @@ +/* + * Copyright (C) 1999,2003,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * multiboot2.h - Multiboot 2 header file. + * + * Based on grub-2.00/include/multiboot2.h file. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY + * DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR + * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __MULTIBOOT2_H__ +#define __MULTIBOOT2_H__ + +/* The magic field should contain this. */ +#define MULTIBOOT2_HEADER_MAGIC 0xe85250d6 + +/* This should be in %eax on x86 architecture. */ +#define MULTIBOOT2_BOOTLOADER_MAGIC 0x36d76289 + +/* How many bytes from the start of the file we search for the header. */ +#define MULTIBOOT2_SEARCH 32768 + +/* Multiboot 2 header alignment. */ +#define MULTIBOOT2_HEADER_ALIGN 8 + +/* Alignment of multiboot 2 modules. */ +#define MULTIBOOT2_MOD_ALIGN 0x00001000 + +/* Alignment of the multiboot 2 info structure. */ +#define MULTIBOOT2_INFO_ALIGN 0x00000008 + +/* Multiboot 2 architectures. */ +#define MULTIBOOT2_ARCHITECTURE_I386 0 +#define MULTIBOOT2_ARCHITECTURE_MIPS32 4 + +/* Header tag types. */ +#define MULTIBOOT2_HEADER_TAG_END 0 +#define MULTIBOOT2_HEADER_TAG_INFORMATION_REQUEST 1 +#define MULTIBOOT2_HEADER_TAG_ADDRESS 2 +#define MULTIBOOT2_HEADER_TAG_ENTRY_ADDRESS 3 +#define MULTIBOOT2_HEADER_TAG_CONSOLE_FLAGS 4 +#define MULTIBOOT2_HEADER_TAG_FRAMEBUFFER 5 +#define MULTIBOOT2_HEADER_TAG_MODULE_ALIGN 6 +#define MULTIBOOT2_HEADER_TAG_EFI_BS 7 + +/* Header tag flags. */ +#define MULTIBOOT2_HEADER_TAG_REQUIRED 0 +#define MULTIBOOT2_HEADER_TAG_OPTIONAL 1 + +/* Header console tag console_flags. */ +#define MULTIBOOT2_CONSOLE_FLAGS_CONSOLE_REQUIRED 1 +#define MULTIBOOT2_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2 + +/* Flags set in the 'flags' member of the multiboot header. */ +#define MULTIBOOT2_TAG_TYPE_END 0 +#define MULTIBOOT2_TAG_TYPE_CMDLINE 1 +#define MULTIBOOT2_TAG_TYPE_BOOT_LOADER_NAME 2 +#define MULTIBOOT2_TAG_TYPE_MODULE 3 +#define MULTIBOOT2_TAG_TYPE_BASIC_MEMINFO 4 +#define MULTIBOOT2_TAG_TYPE_BOOTDEV 5 +#define MULTIBOOT2_TAG_TYPE_MMAP 6 +#define MULTIBOOT2_TAG_TYPE_VBE 7 +#define MULTIBOOT2_TAG_TYPE_FRAMEBUFFER 8 +#define MULTIBOOT2_TAG_TYPE_ELF_SECTIONS 9 +#define MULTIBOOT2_TAG_TYPE_APM 10 +#define MULTIBOOT2_TAG_TYPE_EFI32 11 +#define MULTIBOOT2_TAG_TYPE_EFI64 12 +#define MULTIBOOT2_TAG_TYPE_SMBIOS 13 +#define MULTIBOOT2_TAG_TYPE_ACPI_OLD 14 +#define MULTIBOOT2_TAG_TYPE_ACPI_NEW 15 +#define MULTIBOOT2_TAG_TYPE_NETWORK 16 +#define MULTIBOOT2_TAG_TYPE_EFI_MMAP 17 +#define MULTIBOOT2_TAG_TYPE_EFI_BS 18 + +/* Multiboot 2 tag alignment. */ +#define MULTIBOOT2_TAG_ALIGN 8 + +/* Memory types. */ +#define MULTIBOOT2_MEMORY_AVAILABLE 1 +#define MULTIBOOT2_MEMORY_RESERVED 2 +#define MULTIBOOT2_MEMORY_ACPI_RECLAIMABLE 3 +#define MULTIBOOT2_MEMORY_NVS 4 +#define MULTIBOOT2_MEMORY_BADRAM 5 + +/* Framebuffer types. */ +#define MULTIBOOT2_FRAMEBUFFER_TYPE_INDEXED 0 +#define MULTIBOOT2_FRAMEBUFFER_TYPE_RGB 1 +#define MULTIBOOT2_FRAMEBUFFER_TYPE_EGA_TEXT 2 + +#ifndef __ASSEMBLY__ +typedef struct +{ + /* Must be MULTIBOOT2_MAGIC - see above. */ + u32 magic; + + /* ISA */ + u32 architecture; + + /* Total header length. */ + u32 header_length; + + /* The above fields plus this one must equal 0 mod 2^32. */ + u32 checksum; +} multiboot2_header_t; + +typedef struct +{ + u16 type; + u16 flags; + u32 size; +} multiboot2_header_tag_t; + +typedef struct +{ + u16 type; + u16 flags; + u32 size; + u32 requests[0]; +} multiboot2_header_tag_information_request_t; + +typedef struct +{ + u16 type; + u16 flags; + u32 size; + u32 header_addr; + u32 load_addr; + u32 load_end_addr; + u32 bss_end_addr; +} multiboot2_header_tag_address_t; + +typedef struct +{ + u16 type; + u16 flags; + u32 size; + u32 entry_addr; +} multiboot2_header_tag_entry_address_t; + +typedef struct +{ + u16 type; + u16 flags; + u32 size; + u32 console_flags; +} multiboot2_header_tag_console_flags_t; + +typedef struct +{ + u16 type; + u16 flags; + u32 size; + u32 width; + u32 height; + u32 depth; +} multiboot2_header_tag_framebuffer_t; + +typedef struct +{ + u16 type; + u16 flags; + u32 size; + u32 width; + u32 height; + u32 depth; +} multiboot2_header_tag_module_align_t; + +typedef struct +{ + u8 red; + u8 green; + u8 blue; +} multiboot2_color_t; + +typedef struct +{ + u64 addr; + u64 len; + u32 type; + u32 zero; +} __attribute__((packed)) multiboot2_memory_map_t; + +typedef struct +{ + u32 type; + u32 size; +} multiboot2_tag_t; + +typedef struct +{ + u32 type; + u32 size; + char string[0]; +} multiboot2_tag_string_t; + +typedef struct +{ + u32 type; + u32 size; + u32 mod_start; + u32 mod_end; + char cmdline[0]; +} multiboot2_tag_module_t; + +typedef struct +{ + u32 type; + u32 size; + u32 mem_lower; + u32 mem_upper; +} multiboot2_tag_basic_meminfo_t; + +typedef struct +{ + u32 type; + u32 size; + u32 biosdev; + u32 slice; + u32 part; +} multiboot2_tag_bootdev_t; + +typedef struct +{ + u32 type; + u32 size; + u32 entry_size; + u32 entry_version; + multiboot2_memory_map_t entries[0]; +} multiboot2_tag_mmap_t; + +typedef struct +{ + u8 external_specification[512]; +} multiboot2_vbe_info_block_t; + +typedef struct +{ + u8 external_specification[256]; +} multiboot2_vbe_mode_info_block_t; + +typedef struct +{ + u32 type; + u32 size; + + u16 vbe_mode; + u16 vbe_interface_seg; + u16 vbe_interface_off; + u16 vbe_interface_len; + + multiboot2_vbe_info_block_t vbe_control_info; + multiboot2_vbe_mode_info_block_t vbe_mode_info; +} multiboot2_tag_vbe_t; + +typedef struct +{ + u32 type; + u32 size; + + u64 framebuffer_addr; + u32 framebuffer_pitch; + u32 framebuffer_width; + u32 framebuffer_height; + u8 framebuffer_bpp; + u8 framebuffer_type; + u16 reserved; +} multiboot2_tag_framebuffer_common_t; + +typedef struct +{ + multiboot2_tag_framebuffer_common_t common; + + union + { + struct + { + u16 framebuffer_palette_num_colors; + multiboot2_color_t framebuffer_palette[0]; + }; + struct + { + u8 framebuffer_red_field_position; + u8 framebuffer_red_mask_size; + u8 framebuffer_green_field_position; + u8 framebuffer_green_mask_size; + u8 framebuffer_blue_field_position; + u8 framebuffer_blue_mask_size; + }; + }; +} multiboot2_tag_framebuffer_t; + +typedef struct +{ + u32 type; + u32 size; + u32 num; + u32 entsize; + u32 shndx; + char sections[0]; +} multiboot2_tag_elf_sections_t; + +typedef struct +{ + u32 type; + u32 size; + u16 version; + u16 cseg; + u32 offset; + u16 cseg_16; + u16 dseg; + u16 flags; + u16 cseg_len; + u16 cseg_16_len; + u16 dseg_len; +} multiboot2_tag_apm_t; + +typedef struct +{ + u32 type; + u32 size; + u32 pointer; +} multiboot2_tag_efi32_t; + +typedef struct +{ + u32 type; + u32 size; + u64 pointer; +} multiboot2_tag_efi64_t; + +typedef struct +{ + u32 type; + u32 size; + u8 major; + u8 minor; + u8 reserved[6]; + u8 tables[0]; +} multiboot2_tag_smbios_t; + +typedef struct +{ + u32 type; + u32 size; + u8 rsdp[0]; +} multiboot2_tag_old_acpi_t; + +typedef struct +{ + u32 type; + u32 size; + u8 rsdp[0]; +} multiboot2_tag_new_acpi_t; + +typedef struct +{ + u32 type; + u32 size; + u8 dhcpack[0]; +} multiboot2_tag_network_t; + +typedef struct +{ + u32 type; + u32 size; + u32 descr_size; + u32 descr_vers; + u8 efi_mmap[0]; +} multiboot2_tag_efi_mmap_t; +#endif /* __ASSEMBLY__ */ +#endif /* __MULTIBOOT2_H__ */ -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |