|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 3/4] hvmloader/ovmf: setup ovmf_info
OVMF info contains E820 map allocated by hvmloader. This info is passed
to OVMF to help it do proper initialization.
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
tools/firmware/hvmloader/ovmf.c | 39 +++++++++++++++++++++++++++++++++++++--
1 file changed, 37 insertions(+), 2 deletions(-)
diff --git a/tools/firmware/hvmloader/ovmf.c b/tools/firmware/hvmloader/ovmf.c
index 7826095..c253083 100644
--- a/tools/firmware/hvmloader/ovmf.c
+++ b/tools/firmware/hvmloader/ovmf.c
@@ -46,10 +46,45 @@
#define LOWCHUNK_SIZE 0x00010000
#define LOWCHUNK_MAXOFFSET 0x0000FFFF
#define LOWCHUNK_END (OVMF_BEGIN + OVMF_SIZE)
+#define OVMF_INFO_PHYSICAL_ADDRESS 0X00001000
extern unsigned char dsdt_anycpu[];
extern int dsdt_anycpu_len;
+struct ovmf_info {
+ char signature[11]; /* XenHVMOVMF\0 */
+ uint8_t length; /* Length of this struct */
+ uint8_t checksum; /* Set such that the sum over bytes 0..length == 0 */
+ /*
+ * Physical address of the e820 table, contains e820_nr entries.
+ */
+ uint32_t e820;
+ uint32_t e820_nr;
+} __attribute__ ((packed));
+
+static void ovmf_setup_bios_info(void)
+{
+ struct ovmf_info *info = (void *)OVMF_INFO_PHYSICAL_ADDRESS;
+
+ memset(info, 0, sizeof(*info));
+
+ memcpy(info->signature, "XenHVMOVMF", sizeof(info->signature));
+ info->length = sizeof(*info);
+}
+
+static void ovmf_finish_bios_info(void)
+{
+ struct ovmf_info *info = (void *)OVMF_INFO_PHYSICAL_ADDRESS;
+ uint32_t i;
+ uint8_t checksum;
+
+ checksum = 0;
+ for ( i = 0; i < info->length; i++ )
+ checksum += ((uint8_t *)(info))[i];
+
+ info->checksum = -checksum;
+}
+
static void ovmf_load(const struct bios_config *config)
{
xen_pfn_t mfn;
@@ -104,8 +139,8 @@ struct bios_config ovmf_config = {
.load_roms = 0,
- .bios_info_setup = NULL,
- .bios_info_finish = NULL,
+ .bios_info_setup = ovmf_setup_bios_info,
+ .bios_info_finish = ovmf_finish_bios_info,
.e820_setup = NULL,
--
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 |