hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/include/xen/interface/hvm/start_info.h
....@@ -33,7 +33,7 @@
3333 * | magic | Contains the magic value XEN_HVM_START_MAGIC_VALUE
3434 * | | ("xEn3" with the 0x80 bit of the "E" set).
3535 * 4 +----------------+
36
- * | version | Version of this structure. Current version is 0. New
36
+ * | version | Version of this structure. Current version is 1. New
3737 * | | versions are guaranteed to be backwards-compatible.
3838 * 8 +----------------+
3939 * | flags | SIF_xxx flags.
....@@ -48,6 +48,15 @@
4848 * 32 +----------------+
4949 * | rsdp_paddr | Physical address of the RSDP ACPI data structure.
5050 * 40 +----------------+
51
+ * | memmap_paddr | Physical address of the (optional) memory map. Only
52
+ * | | present in version 1 and newer of the structure.
53
+ * 48 +----------------+
54
+ * | memmap_entries | Number of entries in the memory map table. Zero
55
+ * | | if there is no memory map being provided. Only
56
+ * | | present in version 1 and newer of the structure.
57
+ * 52 +----------------+
58
+ * | reserved | Version 1 and newer only.
59
+ * 56 +----------------+
5160 *
5261 * The layout of each entry in the module structure is the following:
5362 *
....@@ -62,12 +71,50 @@
6271 * | reserved |
6372 * 32 +----------------+
6473 *
74
+ * The layout of each entry in the memory map table is as follows:
75
+ *
76
+ * 0 +----------------+
77
+ * | addr | Base address
78
+ * 8 +----------------+
79
+ * | size | Size of mapping in bytes
80
+ * 16 +----------------+
81
+ * | type | Type of mapping as defined between the hypervisor
82
+ * | | and guest. See XEN_HVM_MEMMAP_TYPE_* values below.
83
+ * 20 +----------------|
84
+ * | reserved |
85
+ * 24 +----------------+
86
+ *
6587 * The address and sizes are always a 64bit little endian unsigned integer.
6688 *
6789 * NB: Xen on x86 will always try to place all the data below the 4GiB
6890 * boundary.
91
+ *
92
+ * Version numbers of the hvm_start_info structure have evolved like this:
93
+ *
94
+ * Version 0: Initial implementation.
95
+ *
96
+ * Version 1: Added the memmap_paddr/memmap_entries fields (plus 4 bytes of
97
+ * padding) to the end of the hvm_start_info struct. These new
98
+ * fields can be used to pass a memory map to the guest. The
99
+ * memory map is optional and so guests that understand version 1
100
+ * of the structure must check that memmap_entries is non-zero
101
+ * before trying to read the memory map.
69102 */
70103 #define XEN_HVM_START_MAGIC_VALUE 0x336ec578
104
+
105
+/*
106
+ * The values used in the type field of the memory map table entries are
107
+ * defined below and match the Address Range Types as defined in the "System
108
+ * Address Map Interfaces" section of the ACPI Specification. Please refer to
109
+ * section 15 in version 6.2 of the ACPI spec: http://uefi.org/specifications
110
+ */
111
+#define XEN_HVM_MEMMAP_TYPE_RAM 1
112
+#define XEN_HVM_MEMMAP_TYPE_RESERVED 2
113
+#define XEN_HVM_MEMMAP_TYPE_ACPI 3
114
+#define XEN_HVM_MEMMAP_TYPE_NVS 4
115
+#define XEN_HVM_MEMMAP_TYPE_UNUSABLE 5
116
+#define XEN_HVM_MEMMAP_TYPE_DISABLED 6
117
+#define XEN_HVM_MEMMAP_TYPE_PMEM 7
71118
72119 /*
73120 * C representation of the x86/HVM start info layout.
....@@ -86,6 +133,13 @@
86133 uint64_t cmdline_paddr; /* Physical address of the command line. */
87134 uint64_t rsdp_paddr; /* Physical address of the RSDP ACPI data */
88135 /* structure. */
136
+ /* All following fields only present in version 1 and newer */
137
+ uint64_t memmap_paddr; /* Physical address of an array of */
138
+ /* hvm_memmap_table_entry. */
139
+ uint32_t memmap_entries; /* Number of entries in the memmap table. */
140
+ /* Value will be zero if there is no memory */
141
+ /* map being provided. */
142
+ uint32_t reserved; /* Must be zero. */
89143 };
90144
91145 struct hvm_modlist_entry {
....@@ -95,4 +149,11 @@
95149 uint64_t reserved;
96150 };
97151
152
+struct hvm_memmap_table_entry {
153
+ uint64_t addr; /* Base address of the memory region */
154
+ uint64_t size; /* Size of the memory region in bytes */
155
+ uint32_t type; /* Mapping type */
156
+ uint32_t reserved; /* Must be zero for Version 1. */
157
+};
158
+
98159 #endif /* __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ */