HVM SMBIOS support 3/6
RFC PATCH 1/1 HVM SMBIOS support 3/6
[HVM] [XEN] Add space for SMBIOS tables to e820 map and fill out hvm_info_table for HVM SMBIOS support.
Signed-off-by Andrew D. Ball <[email protected]>
tools/libxc/xc_hvm_build.c +40 -6
@@ -59,12 +59,12 @@/* XXX: Doesn't work for > 4GB yet */ e820entry[nr_map].addr =0x0 ; - e820entry[nr_map].size =0x9F800 ; + e820entry[nr_map].size =0x9F000 ; e820entry[nr_map].type =E820_RAM ; nr_map++; - e820entry[nr_map].addr =0x9F800 ; - e820entry[nr_map].size =0x800 ; + e820entry[nr_map].addr =0x9F000 ; + e820entry[nr_map].size =0x1000 ; e820entry[nr_map].type =E820_RESERVED ; nr_map++;
@@ -136,10 +136,14 @@*/ static int set_hvm_info (int xc_handle,uint32_t dom,xen_pfn_t *pfn_list,unsigned int vcpus, -unsigned int pae,unsigned int acpi,unsigned int apic) +uint64_t memsize, +unsigned int pae,unsigned int acpi,unsigned int apic, +unsigned int smbios,uint8_t uuid[16 ]) {char *va_map;struct hvm_info_table *va_hvm; +uint32_t xen_version; +char xen_extra_version[XEN_EXTRAVERSION_LEN ]; va_map = xc_map_foreign_range(xc_handle, dom, PAGE_SIZE, PROT_READ | PROT_WRITE,
@@ -157,6 +161,24 @@ va_hvm->apic_enabled = apic; va_hvm->pae_enabled = pae; va_hvm->nr_vcpus = vcpus; + va_hvm->memsize = memsize; + va_hvm->smbios_enabled = smbios; +memcpy (va_hvm->uuid, uuid,16 ); + + xen_version =xc_version (xc_handle, XENVER_version,NULL ); + va_hvm->xen_major_version = (uint16_t ) (xen_version >>16 ); + va_hvm->xen_minor_version = (uint16_t ) xen_version; + +if (xc_version (xc_handle, XENVER_extraversion, &xen_extra_version)) { +/* could not get Xen extra version! */ +PERROR ("Could not get Xen extra version for HVM info table!" ); +return -1 ; + } + +snprintf (va_hvm->xen_version,sizeof (va_hvm->xen_version), +"%hd.%hd%s" , va_hvm->xen_major_version, va_hvm->xen_minor_version, + xen_extra_version); + va_hvm->xen_version[sizeof (va_hvm->xen_version)-1 ] ='\0' ;set_hvm_info_checksum (va_hvm);
@@ -175,6 +197,8 @@unsigned int pae, unsigned int acpi, unsigned int apic, + unsigned smbios, + uint8_t uuid[16], unsigned int store_evtchn, unsigned long *store_mfn) {
@@ -249,7 +273,8 @@ goto error_out; } -if (set_hvm_info (xc_handle, dom, page_array, vcpus, pae, acpi, apic) ) +if (set_hvm_info (xc_handle, dom, page_array, vcpus, memsize, pae, acpi, + apic, smbios, uuid) ) {ERROR ("Couldn't set hvm info for HVM guest.\n" ); goto error_out;
@@ -345,6 +370,8 @@unsigned int pae, unsigned int acpi, unsigned int apic, + unsigned int smbios, + uint8_t uuid[16], unsigned int store_evtchn, unsigned long *store_mfn) {
@@ -399,7 +426,8 @@ ctxt->flags =VGCF_HVM_GUEST ;if (setup_guest (xc_handle, domid, memsize, image, image_size, nr_pages, ctxt, op.u.getdomaininfo.shared_info_frame, - vcpus, pae, acpi, apic, store_evtchn, store_mfn) <0 ) + vcpus, pae, acpi, apic, smbios, uuid, + store_evtchn, store_mfn) <0 ) {ERROR ("Error constructing guest OS" ); goto error_out;
@@ -591,6 +619,8 @@unsigned int pae, unsigned int acpi, unsigned int apic, + unsigned int smbios, + uint8_t uuid[16], unsigned int store_evtchn, unsigned long *store_mfn) {
@@ -605,6 +635,7 @@ sts =xc_hvm_build_internal (xc_handle, domid, memsize, image, image_size, vcpus, pae, acpi, apic, + smbios, uuid, store_evtchn, store_mfn);free (image);
@@ -627,6 +658,8 @@unsigned int pae, unsigned int acpi, unsigned int apic, + unsigned int smbios, + uint8_t uuid[16], unsigned int store_evtchn, unsigned long *store_mfn) {
@@ -652,6 +685,7 @@ sts =xc_hvm_build_internal (xc_handle, domid, memsize, img, img_len, vcpus, pae, acpi, apic, + smbios, uuid, store_evtchn, store_mfn);/* xc_inflate_buffer may return the original buffer pointer (for
tools/libxc/xenguest.h +4 -0
@@ -110,6 +110,8 @@unsigned int pae, unsigned int acpi, unsigned int apic, + unsigned int smbios, + uint8_t uuid[16], unsigned int store_evtchn, unsigned long *store_mfn);
@@ -122,6 +124,8 @@unsigned int pae, unsigned int acpi, unsigned int apic, + unsigned int smbios, + uint8_t uuid[16], unsigned int store_evtchn, unsigned long *store_mfn);
tools/libxc/xg_private.c +2 -0
@@ -155,6 +155,8 @@unsigned int pae, unsigned int acpi, unsigned int apic, + unsigned int smbios, + uint8_t uuid[16], unsigned int store_evtchn, unsigned long *store_mfn) {
[HVM] [XEN] Add space for SMBIOS tables to e820 map and fill out hvm_info_table for HVM SMBIOS support.
Signed-off-by Andrew D. Ball <[email protected]>
tools/libxc/xc_hvm_build.c +40 -6
118 lines not on this page · raw message
tools/libxc/xenguest.h +4 -0
@@ -110,6 +110,8 @@unsigned int pae, unsigned int acpi, unsigned int apic, + unsigned int smbios, + uint8_t uuid[16], unsigned int store_evtchn, unsigned long *store_mfn);
@@ -122,6 +124,8 @@unsigned int pae, unsigned int acpi, unsigned int apic, + unsigned int smbios, + uint8_t uuid[16], unsigned int store_evtchn, unsigned long *store_mfn);
tools/libxc/xg_private.c +2 -0
@@ -155,6 +155,8 @@unsigned int pae, unsigned int acpi, unsigned int apic, + unsigned int smbios, + uint8_t uuid[16], unsigned int store_evtchn, unsigned long *store_mfn) {
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel