[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [RFC] [PATCH] HVM SMBIOS support 3/6


  • To: xen-devel@xxxxxxxxxxxxxxxxxxx
  • From: "Andrew D. Ball" <aball@xxxxxxxxxx>
  • Date: Fri, 07 Jul 2006 15:38:09 -0400
  • Delivery-date: Fri, 07 Jul 2006 12:38:52 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

[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 <aball@xxxxxxxxxx>

diff -r f91cc71173c5 tools/libxc/xc_hvm_build.c
--- a/tools/libxc/xc_hvm_build.c        Thu Jun 22 20:37:33 2006
+++ b/tools/libxc/xc_hvm_build.c        Fri Jul  7 13:48:44 2006
@@ -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
diff -r f91cc71173c5 tools/libxc/xenguest.h
--- a/tools/libxc/xenguest.h    Thu Jun 22 20:37:33 2006
+++ b/tools/libxc/xenguest.h    Fri Jul  7 13:48:44 2006
@@ -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);
 
diff -r f91cc71173c5 tools/libxc/xg_private.c
--- a/tools/libxc/xg_private.c  Thu Jun 22 20:37:33 2006
+++ b/tools/libxc/xg_private.c  Fri Jul  7 13:48:44 2006
@@ -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)
 {

Attachment: smbios_3_libxenguest.patch
Description: Text Data

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

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