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 16 of 19] tools: hvmloader: Refactor MP table setup i

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 16 of 19] tools: hvmloader: Refactor MP table setup into struct bios_config
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Tue, 12 Apr 2011 12:29:15 +0100
Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
Delivery-date: Tue, 12 Apr 2011 04:56:26 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1302607739@xxxxxxxxxxxxxxxxxxxxx>
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/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <patchbomb.1302607739@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.6.4
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1302603807 -3600
# Node ID 7bddcc4cfc8789cffe511b0b38645479d8d3490d
# Parent  63da98f210b0f708a6bd2f85bc03de8826655784
tools: hvmloader: Refactor MP table setup into struct bios_config

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r 63da98f210b0 -r 7bddcc4cfc87 tools/firmware/hvmloader/config.h
--- a/tools/firmware/hvmloader/config.h Tue Apr 12 11:19:18 2011 +0100
+++ b/tools/firmware/hvmloader/config.h Tue Apr 12 11:23:27 2011 +0100
@@ -36,6 +36,7 @@ struct bios_config {
     void (*e820_setup)(void);
 
     void (*acpi_build_tables)(unsigned int physical);
+    void (*create_mp_tables)(void);
 };
 
 extern struct bios_config rombios_config;
@@ -62,11 +63,6 @@ extern unsigned long pci_mem_start, pci_
 #define RESERVED_MEMBASE    0xfc000000
 #define RESERVED_MEMSIZE    0x01000000
 
-#define ROMBIOS_BEGIN          0x000F0000
-#define ROMBIOS_SIZE           0x00010000
-#define ROMBIOS_MAXOFFSET      0x0000FFFF
-#define ROMBIOS_END            (ROMBIOS_BEGIN + ROMBIOS_SIZE)
-
 #define SCRATCH_PHYSICAL_ADDRESS      0x00010000
 #define HYPERCALL_PHYSICAL_ADDRESS    0x00080000
 
diff -r 63da98f210b0 -r 7bddcc4cfc87 tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c      Tue Apr 12 11:19:18 2011 +0100
+++ b/tools/firmware/hvmloader/hvmloader.c      Tue Apr 12 11:23:27 2011 +0100
@@ -385,8 +385,9 @@ int main(void)
     if (bios->bios_high_setup)
         highbios = bios->bios_high_setup();
 
-    if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode )
-        create_mp_tables();
+    if ( bios->create_mp_tables &&
+         ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode ) )
+        bios->create_mp_tables();
 
     switch ( virtual_vga )
     {
diff -r 63da98f210b0 -r 7bddcc4cfc87 tools/firmware/hvmloader/mp_tables.c
--- a/tools/firmware/hvmloader/mp_tables.c      Tue Apr 12 11:19:18 2011 +0100
+++ b/tools/firmware/hvmloader/mp_tables.c      Tue Apr 12 11:23:27 2011 +0100
@@ -259,46 +259,9 @@ static void fill_mpfps(struct mp_floatin
     mpfps->checksum = -checksum;
 }
 
-
-/*
- * find_mp_table_start - searchs through BIOS memory for '___HVMMP' signature
- *
- * The '___HVMMP' signature is created by the ROMBIOS and designates a chunk
- * of space inside the ROMBIOS that is safe for us to write our MP table info
- */
-static void *get_mp_table_start(void)
+/* create_mp_tables - creates MP tables for the guest based upon config data */
+void create_mp_tables(void *mp_table_base)
 {
-    char *bios_mem;
-
-    for ( bios_mem = (char *)ROMBIOS_BEGIN; 
-          bios_mem != (char *)ROMBIOS_END; 
-          bios_mem++ )
-    {
-        if ( strncmp(bios_mem, "___HVMMP", 8) == 0)
-            return bios_mem;
-    }
-
-    return NULL;
-}
-
-
-/* recalculate the new ROMBIOS checksum after adding MP tables */
-static void reset_bios_checksum(void)
-{
-    uint32_t i;
-    uint8_t checksum;
-
-    checksum = 0;
-    for (i = 0; i < ROMBIOS_MAXOFFSET; ++i)
-        checksum += ((uint8_t *)(ROMBIOS_BEGIN))[i];
-
-    *((uint8_t *)(ROMBIOS_BEGIN + ROMBIOS_MAXOFFSET)) = -checksum;
-}
-
-/* create_mp_tables - creates MP tables for the guest based upon config data */
-void create_mp_tables(void)
-{
-    void *mp_table_base;
     char *p;
     int vcpu_nr, i, length;
     struct mp_io_intr_entry *mpiie;
@@ -307,14 +270,6 @@ void create_mp_tables(void)
 
     printf("Creating MP tables ...\n");
 
-    /* Find the 'safe' place in ROMBIOS for the MP tables. */
-    mp_table_base = get_mp_table_start();
-    if ( mp_table_base == NULL )
-    {
-        printf("Couldn't find start point for MP tables\n");
-        return;
-    }
-
     p = mp_table_base + sizeof(struct mp_config_table);
 
     for ( i = 0; i < vcpu_nr; i++ )
@@ -363,5 +318,4 @@ void create_mp_tables(void)
                (uint32_t)mp_table_base);
 
     fill_mp_config_table((struct mp_config_table *)mp_table_base, length);
-    reset_bios_checksum();
 }
diff -r 63da98f210b0 -r 7bddcc4cfc87 tools/firmware/hvmloader/rombios.c
--- a/tools/firmware/hvmloader/rombios.c        Tue Apr 12 11:19:18 2011 +0100
+++ b/tools/firmware/hvmloader/rombios.c        Tue Apr 12 11:23:27 2011 +0100
@@ -37,6 +37,11 @@
 #define ROM_INCLUDE_ROMBIOS
 #include "roms.inc"
 
+#define ROMBIOS_BEGIN          0x000F0000
+#define ROMBIOS_SIZE           0x00010000
+#define ROMBIOS_MAXOFFSET      0x0000FFFF
+#define ROMBIOS_END            (ROMBIOS_BEGIN + ROMBIOS_SIZE)
+
 /*
  * Set up an empty TSS area for virtual 8086 mode to use. 
  * The only important thing is that it musn't have any bits set 
@@ -303,6 +308,57 @@ static void rombios_pci_setup(void)
         pci_writew(devfn, PCI_COMMAND, cmd);
     }
 }
+
+/*
+ * find_mp_table_start - searchs through BIOS memory for '___HVMMP' signature
+ *
+ * The '___HVMMP' signature is created by the ROMBIOS and designates a chunk
+ * of space inside the ROMBIOS that is safe for us to write our MP table info
+ */
+static void *get_mp_table_start(void)
+{
+    char *bios_mem;
+
+    for ( bios_mem = (char *)ROMBIOS_BEGIN;
+          bios_mem != (char *)ROMBIOS_END;
+          bios_mem++ )
+    {
+        if ( strncmp(bios_mem, "___HVMMP", 8) == 0)
+            return bios_mem;
+    }
+
+    return NULL;
+}
+
+/* recalculate the new ROMBIOS checksum after adding MP tables */
+static void reset_bios_checksum(void)
+{
+    uint32_t i;
+    uint8_t checksum;
+
+    checksum = 0;
+    for (i = 0; i < ROMBIOS_MAXOFFSET; ++i)
+        checksum += ((uint8_t *)(ROMBIOS_BEGIN))[i];
+
+    *((uint8_t *)(ROMBIOS_BEGIN + ROMBIOS_MAXOFFSET)) = -checksum;
+}
+
+static void rombios_create_mp_tables(void)
+{
+    /* Find the 'safe' place in ROMBIOS for the MP tables. */
+    void *table = get_mp_table_start();
+
+    if ( table == NULL )
+    {
+        printf("Couldn't find start point for MP tables\n");
+        return;
+    }
+
+    create_mp_tables(table);
+
+    reset_bios_checksum();
+}
+
 //BUILD_BUG_ON(sizeof(rombios) > (0x00100000U - ROMBIOS_PHYSICAL_ADDRESS));
 
 struct bios_config rombios_config =  {
@@ -332,6 +388,7 @@ struct bios_config rombios_config =  {
     .e820_setup = rombios_setup_e820,
 
     .acpi_build_tables = acpi_build_tables,
+    .create_mp_tables = rombios_create_mp_tables,
 };
 
 /*
diff -r 63da98f210b0 -r 7bddcc4cfc87 tools/firmware/hvmloader/util.h
--- a/tools/firmware/hvmloader/util.h   Tue Apr 12 11:19:18 2011 +0100
+++ b/tools/firmware/hvmloader/util.h   Tue Apr 12 11:23:27 2011 +0100
@@ -185,7 +185,7 @@ uint32_t rombios_highbios_setup(void);
 
 /* Miscellaneous. */
 void cacheattr_init(void);
-void create_mp_tables(void);
+void create_mp_tables(void *table);
 int hvm_write_smbios_tables(unsigned long scratch,
                            unsigned long smbios_start,
                            unsigned long smbios_end);

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

<Prev in Thread] Current Thread [Next in Thread>