Commit d907be2b authored by Maran Wilson's avatar Maran Wilson Committed by Boris Ostrovsky

xen/pvh: Add memory map pointer to hvm_start_info struct

The start info structure that is defined as part of the x86/HVM direct boot
ABI and used for starting Xen PVH guests would be more versatile if it also
included a way to pass information about the memory map to the guest. This
would allow KVM guests to share the same entry point.
Signed-off-by: default avatarMaran Wilson <maran.wilson@oracle.com>
Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
Signed-off-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
parent a43fb7da
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
* | magic | Contains the magic value XEN_HVM_START_MAGIC_VALUE * | magic | Contains the magic value XEN_HVM_START_MAGIC_VALUE
* | | ("xEn3" with the 0x80 bit of the "E" set). * | | ("xEn3" with the 0x80 bit of the "E" set).
* 4 +----------------+ * 4 +----------------+
* | version | Version of this structure. Current version is 0. New * | version | Version of this structure. Current version is 1. New
* | | versions are guaranteed to be backwards-compatible. * | | versions are guaranteed to be backwards-compatible.
* 8 +----------------+ * 8 +----------------+
* | flags | SIF_xxx flags. * | flags | SIF_xxx flags.
...@@ -48,6 +48,15 @@ ...@@ -48,6 +48,15 @@
* 32 +----------------+ * 32 +----------------+
* | rsdp_paddr | Physical address of the RSDP ACPI data structure. * | rsdp_paddr | Physical address of the RSDP ACPI data structure.
* 40 +----------------+ * 40 +----------------+
* | memmap_paddr | Physical address of the (optional) memory map. Only
* | | present in version 1 and newer of the structure.
* 48 +----------------+
* | memmap_entries | Number of entries in the memory map table. Zero
* | | if there is no memory map being provided. Only
* | | present in version 1 and newer of the structure.
* 52 +----------------+
* | reserved | Version 1 and newer only.
* 56 +----------------+
* *
* The layout of each entry in the module structure is the following: * The layout of each entry in the module structure is the following:
* *
...@@ -62,13 +71,51 @@ ...@@ -62,13 +71,51 @@
* | reserved | * | reserved |
* 32 +----------------+ * 32 +----------------+
* *
* The layout of each entry in the memory map table is as follows:
*
* 0 +----------------+
* | addr | Base address
* 8 +----------------+
* | size | Size of mapping in bytes
* 16 +----------------+
* | type | Type of mapping as defined between the hypervisor
* | | and guest. See XEN_HVM_MEMMAP_TYPE_* values below.
* 20 +----------------|
* | reserved |
* 24 +----------------+
*
* The address and sizes are always a 64bit little endian unsigned integer. * The address and sizes are always a 64bit little endian unsigned integer.
* *
* NB: Xen on x86 will always try to place all the data below the 4GiB * NB: Xen on x86 will always try to place all the data below the 4GiB
* boundary. * boundary.
*
* Version numbers of the hvm_start_info structure have evolved like this:
*
* Version 0: Initial implementation.
*
* Version 1: Added the memmap_paddr/memmap_entries fields (plus 4 bytes of
* padding) to the end of the hvm_start_info struct. These new
* fields can be used to pass a memory map to the guest. The
* memory map is optional and so guests that understand version 1
* of the structure must check that memmap_entries is non-zero
* before trying to read the memory map.
*/ */
#define XEN_HVM_START_MAGIC_VALUE 0x336ec578 #define XEN_HVM_START_MAGIC_VALUE 0x336ec578
/*
* The values used in the type field of the memory map table entries are
* defined below and match the Address Range Types as defined in the "System
* Address Map Interfaces" section of the ACPI Specification. Please refer to
* section 15 in version 6.2 of the ACPI spec: http://uefi.org/specifications
*/
#define XEN_HVM_MEMMAP_TYPE_RAM 1
#define XEN_HVM_MEMMAP_TYPE_RESERVED 2
#define XEN_HVM_MEMMAP_TYPE_ACPI 3
#define XEN_HVM_MEMMAP_TYPE_NVS 4
#define XEN_HVM_MEMMAP_TYPE_UNUSABLE 5
#define XEN_HVM_MEMMAP_TYPE_DISABLED 6
#define XEN_HVM_MEMMAP_TYPE_PMEM 7
/* /*
* C representation of the x86/HVM start info layout. * C representation of the x86/HVM start info layout.
* *
...@@ -86,6 +133,13 @@ struct hvm_start_info { ...@@ -86,6 +133,13 @@ struct hvm_start_info {
uint64_t cmdline_paddr; /* Physical address of the command line. */ uint64_t cmdline_paddr; /* Physical address of the command line. */
uint64_t rsdp_paddr; /* Physical address of the RSDP ACPI data */ uint64_t rsdp_paddr; /* Physical address of the RSDP ACPI data */
/* structure. */ /* structure. */
/* All following fields only present in version 1 and newer */
uint64_t memmap_paddr; /* Physical address of an array of */
/* hvm_memmap_table_entry. */
uint32_t memmap_entries; /* Number of entries in the memmap table. */
/* Value will be zero if there is no memory */
/* map being provided. */
uint32_t reserved; /* Must be zero. */
}; };
struct hvm_modlist_entry { struct hvm_modlist_entry {
...@@ -95,4 +149,11 @@ struct hvm_modlist_entry { ...@@ -95,4 +149,11 @@ struct hvm_modlist_entry {
uint64_t reserved; uint64_t reserved;
}; };
struct hvm_memmap_table_entry {
uint64_t addr; /* Base address of the memory region */
uint64_t size; /* Size of the memory region in bytes */
uint32_t type; /* Mapping type */
uint32_t reserved; /* Must be zero for Version 1. */
};
#endif /* __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ */ #endif /* __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment