[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.