Index: /trunk/src/VBox/Devices/EFI/DevEFI.cpp
===================================================================
--- /trunk/src/VBox/Devices/EFI/DevEFI.cpp	(revision 28423)
+++ /trunk/src/VBox/Devices/EFI/DevEFI.cpp	(revision 28424)
@@ -474,23 +474,10 @@
     pThis->szPanicMsg[0] = '\0';
 
+    /*
+     * Plan some structures in RAM.
+     */
+    FwCommonPlantSmbiosAndDmiHdrs(pDevIns);
     if (pThis->u8IOAPIC)
         FwCommonPlantMpsFloatPtr(pDevIns);
-    
-    /*
-     * Plant DMI and MPS tables
-     */
-    rc = FwCommonPlantDMITable(pDevIns,
-                               pThis->au8DMIPage,
-                               VBOX_DMI_TABLE_SIZE,
-                               &pThis->aUuid,
-                               pDevIns->pCfg,
-                               true /*fPutSmbiosHeaders*/);
-    AssertRC(rc);
-    if (pThis->u8IOAPIC)
-        FwCommonPlantMpsTable(pDevIns,
-                              pThis->au8DMIPage + VBOX_DMI_TABLE_SIZE,
-                              _4K - VBOX_DMI_TABLE_SIZE,
-                              pThis->cCpus);
-    
 
     /*
@@ -1206,9 +1193,17 @@
 
     /*
-     * Call reset to set things up.
-     */
-    efiReset(pDevIns);
-
-
+     * Plant DMI and MPS tables
+     */
+    rc = FwCommonPlantDMITable(pDevIns,
+                               pThis->au8DMIPage,
+                               VBOX_DMI_TABLE_SIZE,
+                               &pThis->aUuid,
+                               pDevIns->pCfg);
+    AssertRCReturn(rc, rc);
+    if (pThis->u8IOAPIC)
+        FwCommonPlantMpsTable(pDevIns,
+                              pThis->au8DMIPage + VBOX_DMI_TABLE_SIZE,
+                              _4K - VBOX_DMI_TABLE_SIZE,
+                              pThis->cCpus);
     rc = PDMDevHlpROMRegister(pDevIns, VBOX_DMI_TABLE_BASE, _4K, pThis->au8DMIPage,
                               PGMPHYS_ROM_FLAGS_PERMANENT_BINARY, "DMI tables");
@@ -1216,5 +1211,8 @@
     AssertRCReturn(rc, rc);
 
-
+    /*
+     * Call reset to set things up.
+     */
+    efiReset(pDevIns);
 
     return VINF_SUCCESS;
Index: /trunk/src/VBox/Devices/PC/DevFwCommon.cpp
===================================================================
--- /trunk/src/VBox/Devices/PC/DevFwCommon.cpp	(revision 28423)
+++ /trunk/src/VBox/Devices/PC/DevFwCommon.cpp	(revision 28424)
@@ -317,4 +317,5 @@
 }
 
+#if 0 /* unused */
 static bool fwCommonChecksumOk(const uint8_t * const au8Data, uint32_t u32Length)
 {
@@ -324,7 +325,8 @@
     return (u8Sum == 0);
 }
-
-/*
- * Macmini2,1 - matches Mac Mini
+#endif
+
+/**
+ * Try fetch the DMI strings from the system.
  */
 static void fwCommonUseHostDMIStrings(void)
@@ -359,8 +361,6 @@
  *                              configuration string isn't present.
  * @param   pCfg                The handle to our config node.
- * @param   fPutSmbiosHeaders   Plant SMBIOS headers if true.
  */
-int FwCommonPlantDMITable(PPDMDEVINS pDevIns, uint8_t *pTable, unsigned cbMax, PCRTUUID pUuid,
-                          PCFGMNODE pCfg, bool fPutSmbiosHeaders)
+int FwCommonPlantDMITable(PPDMDEVINS pDevIns, uint8_t *pTable, unsigned cbMax, PCRTUUID pUuid, PCFGMNODE pCfg)
 {
 #define CHECKSIZE(cbWant) \
@@ -668,42 +668,47 @@
 #undef READCFGINT
 #undef CHECKSIZE
-
-    if (fPutSmbiosHeaders)
+    return VINF_SUCCESS;
+}
+
+/**
+ * Construct the SMBIOS and DMI headers table pointer at VM construction and
+ * reset.
+ *
+ * @param   pDevIns    The device instance data.
+ */
+void FwCommonPlantSmbiosAndDmiHdrs(PPDMDEVINS pDevIns)
+{
+    struct
     {
-        struct {
-            struct SMBIOSHDR     smbios;
-            struct DMIMAINHDR    dmi;
-        } aBiosHeaders
-        =
+        struct SMBIOSHDR     smbios;
+        struct DMIMAINHDR    dmi;
+    } aBiosHeaders =
+    {
+        // The SMBIOS header
         {
-            // The SMBIOS header
-            {
-                { 0x5f, 0x53, 0x4d, 0x5f},         // "_SM_" signature
-                0x00,                              // checksum
-                0x1f,                              // EPS length, defined by standard
-                VBOX_SMBIOS_MAJOR_VER,             // SMBIOS major version
-                VBOX_SMBIOS_MINOR_VER,             // SMBIOS minor version
-                VBOX_SMBIOS_MAXSS,                 // Maximum structure size
-                0x00,                              // Entry point revision
-                { 0x00, 0x00, 0x00, 0x00, 0x00 }   // padding
-            },
-            // The DMI header
-            {
-                { 0x5f, 0x44, 0x4d, 0x49, 0x5f },  // "_DMI_" signature
-                0x00,                              // checksum
-                VBOX_DMI_TABLE_SIZE,               // DMI tables length
-                VBOX_DMI_TABLE_BASE,               // DMI tables base
-                VBOX_DMI_TABLE_ENTR,               // DMI tables entries
-                VBOX_DMI_TABLE_VER,                // DMI version
-            }
-        };
-
-        aBiosHeaders.smbios.u8Checksum = fwCommonChecksum((uint8_t*)&aBiosHeaders.smbios, sizeof(aBiosHeaders.smbios));
-        aBiosHeaders.dmi.u8Checksum = fwCommonChecksum((uint8_t*)&aBiosHeaders.dmi, sizeof(aBiosHeaders.dmi));
-
-        PDMDevHlpPhysWrite (pDevIns, 0xfe300, &aBiosHeaders, sizeof(aBiosHeaders));
-    }
-
-    return VINF_SUCCESS;
+            { 0x5f, 0x53, 0x4d, 0x5f},         // "_SM_" signature
+            0x00,                              // checksum
+            0x1f,                              // EPS length, defined by standard
+            VBOX_SMBIOS_MAJOR_VER,             // SMBIOS major version
+            VBOX_SMBIOS_MINOR_VER,             // SMBIOS minor version
+            VBOX_SMBIOS_MAXSS,                 // Maximum structure size
+            0x00,                              // Entry point revision
+            { 0x00, 0x00, 0x00, 0x00, 0x00 }   // padding
+        },
+        // The DMI header
+        {
+            { 0x5f, 0x44, 0x4d, 0x49, 0x5f },  // "_DMI_" signature
+            0x00,                              // checksum
+            VBOX_DMI_TABLE_SIZE,               // DMI tables length
+            VBOX_DMI_TABLE_BASE,               // DMI tables base
+            VBOX_DMI_TABLE_ENTR,               // DMI tables entries
+            VBOX_DMI_TABLE_VER,                // DMI version
+        }
+    };
+
+    aBiosHeaders.smbios.u8Checksum = fwCommonChecksum((uint8_t*)&aBiosHeaders.smbios, sizeof(aBiosHeaders.smbios));
+    aBiosHeaders.dmi.u8Checksum    = fwCommonChecksum((uint8_t*)&aBiosHeaders.dmi,    sizeof(aBiosHeaders.dmi));
+
+    PDMDevHlpPhysWrite(pDevIns, 0xfe300, &aBiosHeaders, sizeof(aBiosHeaders));
 }
 AssertCompile(VBOX_DMI_TABLE_ENTR == 5);
Index: /trunk/src/VBox/Devices/PC/DevFwCommon.h
===================================================================
--- /trunk/src/VBox/Devices/PC/DevFwCommon.h	(revision 28423)
+++ /trunk/src/VBox/Devices/PC/DevFwCommon.h	(revision 28424)
@@ -32,6 +32,6 @@
 
 /* Plant DMI table */
-int FwCommonPlantDMITable(PPDMDEVINS pDevIns, uint8_t *pTable, unsigned cbMax, PCRTUUID pUuid,
-                          PCFGMNODE pCfg, bool fPutSmbiosHeaders);
+int FwCommonPlantDMITable(PPDMDEVINS pDevIns, uint8_t *pTable, unsigned cbMax, PCRTUUID pUuid, PCFGMNODE pCfg);
+void FwCommonPlantSmbiosAndDmiHdrs(PPDMDEVINS pDevIns);
 
 /* Plant MPS table */
Index: /trunk/src/VBox/Devices/PC/DevPcBios.cpp
===================================================================
--- /trunk/src/VBox/Devices/PC/DevPcBios.cpp	(revision 28423)
+++ /trunk/src/VBox/Devices/PC/DevPcBios.cpp	(revision 28424)
@@ -1045,5 +1045,5 @@
     uuid.Gen.u16TimeHiAndVersion = RT_H2BE_U16(uuid.Gen.u16TimeHiAndVersion);
     rc = FwCommonPlantDMITable(pDevIns, pThis->au8DMIPage,
-                               VBOX_DMI_TABLE_SIZE, &uuid, pCfg, /*fPutSmbiosHeaders=*/false);
+                               VBOX_DMI_TABLE_SIZE, &uuid, pCfg);
     if (RT_FAILURE(rc))
         return rc;
