WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] HVM SMBIOS v2 2/5

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] HVM SMBIOS v2 2/5
From: "Andrew D. Ball" <aball@xxxxxxxxxx>
Date: Wed, 12 Jul 2006 17:26:07 -0400
Delivery-date: Thu, 13 Jul 2006 02:32:23 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)
This patch modifies HVM domain builder code in libxenguest to

(1) take the domU's UUID as an argument
(2) fill in the new fields in hvm_info_table needed for SMBIOS

Add support for SMBIOS to HVM domain builder: make room for the tables in
the e820 map and write data needed for the SMBIOS tables to the
hvm_info_table struct.

Signed-off-by: Andrew D. Ball <aball@xxxxxxxxxx>

diff -r a1c2cede77c7 tools/libxc/xc_hvm_build.c
--- a/tools/libxc/xc_hvm_build.c        Mon Jul 10 14:01:49 2006
+++ b/tools/libxc/xc_hvm_build.c        Wed Jul 12 11:48:10 2006
@@ -60,12 +60,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++;
 
@@ -135,12 +135,15 @@
  * Use E820 reserved memory 0x9F800 to pass HVM info to hvmloader
  * hvmloader will use this info to set BIOS accordingly
  */
-static int set_hvm_info(int xc_handle, uint32_t dom,
+static int set_hvm_info(int xc_handle, uint32_t dom, uint64_t memsize,
                         xen_pfn_t *pfn_list, unsigned int vcpus,
-                        unsigned int pae, unsigned int acpi, unsigned int apic)
+                        unsigned int pae, unsigned int acpi, unsigned int apic,
+                        uint8_t *uuid)
 {
     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,
@@ -158,6 +161,22 @@
     va_hvm->apic_enabled = apic;
     va_hvm->pae_enabled  = pae;
     va_hvm->nr_vcpus     = vcpus;
+    va_hvm->memsize      = memsize;
+    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)) {
+        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);
 
@@ -177,7 +196,8 @@
                        unsigned int acpi,
                        unsigned int apic,
                        unsigned int store_evtchn,
-                       unsigned long *store_mfn)
+                       unsigned long *store_mfn,
+                       uint8_t *uuid)
 {
     xen_pfn_t *page_array = NULL;
     unsigned long count, i;
@@ -250,7 +270,8 @@
             goto error_out;
     }
 
-    if ( set_hvm_info(xc_handle, dom, page_array, vcpus, pae, acpi, apic) )
+    if ( set_hvm_info(xc_handle, dom, memsize, page_array, vcpus, pae, acpi,
+                      apic, uuid) )
     {
         ERROR("Couldn't set hvm info for HVM guest.\n");
         goto error_out;
@@ -347,7 +368,8 @@
                                  unsigned int acpi,
                                  unsigned int apic,
                                  unsigned int store_evtchn,
-                                 unsigned long *store_mfn)
+                                 unsigned long *store_mfn,
+                                 uint8_t *uuid)
 {
     dom0_op_t launch_op, op;
     int rc, i;
@@ -400,7 +422,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, store_evtchn, store_mfn,
+                     uuid) < 0)
     {
         ERROR("Error constructing guest OS");
         goto error_out;
@@ -593,7 +616,8 @@
                  unsigned int acpi,
                  unsigned int apic,
                  unsigned int store_evtchn,
-                 unsigned long *store_mfn)
+                 unsigned long *store_mfn,
+                 uint8_t *uuid)
 {
     char *image;
     int  sts;
@@ -606,7 +630,7 @@
     sts = xc_hvm_build_internal(xc_handle, domid, memsize,
                                 image, image_size,
                                 vcpus, pae, acpi, apic,
-                                store_evtchn, store_mfn);
+                                store_evtchn, store_mfn, uuid);
 
     free(image);
 
@@ -629,7 +653,8 @@
                      unsigned int acpi,
                      unsigned int apic,
                      unsigned int store_evtchn,
-                     unsigned long *store_mfn)
+                     unsigned long *store_mfn,
+                     uint8_t *uuid)
 {
     int           sts;
     unsigned long img_len;
@@ -653,7 +678,7 @@
     sts = xc_hvm_build_internal(xc_handle, domid, memsize,
                                 img, img_len,
                                 vcpus, pae, acpi, apic,
-                                store_evtchn, store_mfn);
+                                store_evtchn, store_mfn, uuid);
 
     /* xc_inflate_buffer may return the original buffer pointer (for
        for already inflated buffers), so exercise some care in freeing */
diff -r a1c2cede77c7 tools/libxc/xenguest.h
--- a/tools/libxc/xenguest.h    Mon Jul 10 14:01:49 2006
+++ b/tools/libxc/xenguest.h    Wed Jul 12 11:48:10 2006
@@ -111,7 +111,8 @@
                  unsigned int acpi,
                  unsigned int apic,
                  unsigned int store_evtchn,
-                 unsigned long *store_mfn);
+                 unsigned long *store_mfn,
+                 uint8_t *uuid);
 
 int xc_hvm_build_mem(int xc_handle,
                      uint32_t domid,
@@ -123,6 +124,7 @@
                      unsigned int acpi,
                      unsigned int apic,
                      unsigned int store_evtchn,
-                     unsigned long *store_mfn);
+                     unsigned long *store_mfn,
+                     uint8_t *uuid);
 
 #endif /* XENGUEST_H */
diff -r a1c2cede77c7 tools/libxc/xg_private.c
--- a/tools/libxc/xg_private.c  Mon Jul 10 14:01:49 2006
+++ b/tools/libxc/xg_private.c  Wed Jul 12 11:48:10 2006
@@ -156,7 +156,8 @@
     unsigned int acpi,
     unsigned int apic,
     unsigned int store_evtchn,
-    unsigned long *store_mfn)
+    unsigned long *store_mfn,
+    uint8_t *uuid)
 {
     return -ENOSYS;
 }
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>