Index: /trunk/src/VBox/Devices/PC/DevACPI.cpp
===================================================================
--- /trunk/src/VBox/Devices/PC/DevACPI.cpp	(revision 16004)
+++ /trunk/src/VBox/Devices/PC/DevACPI.cpp	(revision 16005)
@@ -66,5 +66,4 @@
 #define SYSI_DATA       0x0000404c
 #define ACPI_RESET_BLK  0x00004050
-#define FDC_STATUS      0x00004054
 
 /* PM1x status register bits */
@@ -132,5 +131,8 @@
     SYSTEM_INFO_INDEX_MEMORY_LENGTH     = 0,
     SYSTEM_INFO_INDEX_USE_IOAPIC        = 1,
-    SYSTEM_INFO_INDEX_LAST              = 2,
+    SYSTEM_INFO_INDEX_HPET_STATUS       = 2,
+    SYSTEM_INFO_INDEX_SMC_STATUS        = 3,
+    SYSTEM_INFO_INDEX_FDC_STATUS        = 4,
+    SYSTEM_INFO_INDEX_LAST              = 5,
     SYSTEM_INFO_INDEX_INVALID           = 0x80,
     SYSTEM_INFO_INDEX_VALID             = 0x200
@@ -196,4 +198,11 @@
     /** Pointer to the driver connector interface */
     R3PTRTYPE(PPDMIACPICONNECTOR) pDrv;
+
+    /* If High Precision Event Timer device should be supported */
+    uint8_t             u8UseHpet;
+    /* If System Management Controller device should be supported */
+    uint8_t             u8UseSmc;
+
+    uint32_t            Alignment0; /**< Structure size alignment. */
 };
 
@@ -533,5 +542,4 @@
 IO_WRITE_PROTO (acpiBatIndexWrite);
 IO_READ_PROTO  (acpiBatDataRead);
-IO_READ_PROTO  (acpiFdcStatusRead);
 IO_READ_PROTO  (acpiSysInfoDataRead);
 IO_WRITE_PROTO (acpiSysInfoDataWrite);
@@ -1246,24 +1254,4 @@
 }
 
-IO_READ_PROTO (acpiFdcStatusRead)
-{
-    ACPIState *s = (ACPIState *)pvUser;
-
-    switch (cb)
-    {
-        case 4:
-            *pu32 = s->u8UseFdc
-                ?   STA_DEVICE_PRESENT_MASK                 /* present */
-                  | STA_DEVICE_ENABLED_MASK                 /* enabled and decodes its resources */
-                  | STA_DEVICE_SHOW_IN_UI_MASK              /* should be shown in UI */
-                  | STA_DEVICE_FUNCTIONING_PROPERLY_MASK    /* functioning properly */
-                : 0;                                        /* device not present */
-            break;
-        default:
-            return VERR_IOM_IOPORT_UNUSED;
-    }
-    return VINF_SUCCESS;
-}
-
 IO_WRITE_PROTO (acpiSysInfoIndexWrite)
 {
@@ -1277,4 +1265,17 @@
         else
         {
+            /* see comment at the declaration of u8IndexShift */
+            if (s->u8IndexShift == 0)
+            {
+                uint32_t u32Index;
+                for (u32Index = 0; u32Index < SYSTEM_INFO_INDEX_LAST; u32Index++)
+                {
+                    if (u32 == (u32Index << 2))
+                    {
+                        s->u8IndexShift = 2;
+                        break;
+                    }
+                }
+            }
             u32 >>= s->u8IndexShift;
             Assert (u32 < SYSTEM_INFO_INDEX_LAST);
@@ -1293,8 +1294,8 @@
 {
     ACPIState *s = (ACPIState *)pvUser;
-
+  
     switch (cb)
     {
-        case 4:
+        case 4:            
             switch (s->uSystemInfoIndex)
             {
@@ -1306,5 +1307,17 @@
                     *pu32 = s->u8UseIOApic;
                     break;
+
+                case SYSTEM_INFO_INDEX_HPET_STATUS:
+                    *pu32 = s->u8UseHpet ? 0xf : 0;
+                    break;
                     
+                case SYSTEM_INFO_INDEX_SMC_STATUS:
+                    *pu32 = s->u8UseSmc ? 0xb  : 0; /* No need to show in UI */
+                    break;
+               
+                case SYSTEM_INFO_INDEX_FDC_STATUS:
+                    *pu32 = s->u8UseFdc ? 0xf  : 0;
+                    break;
+
                 /* Solaris 9 tries to read from this index */
                 case SYSTEM_INFO_INDEX_INVALID:
@@ -1754,5 +1767,7 @@
                                "GCEnabled\0"
                                "R0Enabled\0"
-                               "FdcEnabled\0"))
+                               "FdcEnabled\0"
+                               "HpetEnabled\0"
+                               "SmcEnabled\0"))
         return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES,
                                 N_("Configuration error: Invalid config key for ACPI device"));
@@ -1767,4 +1782,15 @@
         return PDMDEV_SET_ERROR(pDevIns, rc,
                                 N_("Configuration error: Failed to read \"IOAPIC\""));
+
+    /* query whether we are supposed to present HPET */
+    rc = CFGMR3QueryU8Def (pCfgHandle, "HpetEnabled", &s->u8UseHpet, 0);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("Configuration error: Failed to read \"HpetEnabled\""));
+     /* query whether we are supposed to present SMC */
+    rc = CFGMR3QueryU8Def (pCfgHandle, "SmcEnabled", &s->u8UseSmc, 0);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("Configuration error: Failed to read \"SmcEnabled\"")); 
 
     rc = CFGMR3QueryU16Def(pCfgHandle, "NumCPUs", &s->cCpus, 1);
@@ -1831,5 +1857,4 @@
     R (SYSI_INDEX,     1, acpiSysInfoIndexWrite, NULL,                "ACPI system info index");
     R (SYSI_DATA,      1, acpiSysInfoDataWrite,  acpiSysInfoDataRead, "ACPI system info data");
-    R (FDC_STATUS,     1, NULL,                  acpiFdcStatusRead,   "ACPI FDC status index");
     R (GPE0_BLK + L,   L, acpiGpe0EnWrite,       acpiGpe0EnRead,      "ACPI GPE0 Enable");
     R (GPE0_BLK,       L, acpiGpe0StsWrite,      acpiGpe0StsRead,     "ACPI GPE0 Status");
Index: /trunk/src/VBox/Devices/PC/vbox.dsl
===================================================================
--- /trunk/src/VBox/Devices/PC/vbox.dsl	(revision 16004)
+++ /trunk/src/VBox/Devices/PC/vbox.dsl	(revision 16005)
@@ -130,5 +130,5 @@
     Scope (\_SB)
     {
-        OperationRegion (SYSI, SystemIO, 0x4048, 0x08)
+        OperationRegion (SYSI, SystemIO, 0x4048, 0x8)
         Field (SYSI, DwordAcc, NoLock, Preserve)
         {
@@ -141,4 +141,7 @@
             MEML, 32,
             UIOA, 32,
+            UHPT, 32,
+            USMC, 32,
+            UFDC, 32,
             Offset (0x80),
             ININ, 32,
@@ -154,4 +157,10 @@
             DBG ("UIOA: ")
             HEX4 (UIOA)
+            DBG ("UHPT: ")
+            HEX4 (UHPT)
+            DBG ("USMC: ")
+            HEX4 (USMC)
+            DBG ("UFDC: ")
+            HEX4 (UFDC)
         }
 
@@ -489,4 +498,54 @@
             IRQ (Level, ActiveLow, Shared) {5,9,10,11}
         })
+        
+        // High Precision Event Timer
+        Device (HPET)
+        {
+            Name (_HID, EisaId ("PNP0103"))
+            Name (_CID, 0x010CD041)
+            Name (BUF0, ResourceTemplate ()
+            {
+                IRQNoFlags ()
+                    {2}
+                IRQNoFlags ()
+                    {8}
+                Memory32Fixed (ReadOnly,
+                    0xFED00000,         // Address Base
+                    0x00000400,         // Address Length
+                    _Y16)
+            })
+            Method (_STA, 0, NotSerialized)
+            {
+                Return (UHPT)
+            }
+            Method (_CRS, 0, Serialized)
+            {
+                Return (BUF0)
+            }
+        }
+
+        // System Management Controller
+        Device (SMC)
+        {
+            Name (_HID, EisaId ("APP0001"))
+            Name (_CID, "smc-napa")
+
+            Method (_STA, 0, NotSerialized)
+            {
+                Return (USMC)
+            }
+            Name (_CRS, ResourceTemplate ()
+            {
+                IO (Decode16,
+                    0x0300,             // Range Minimum
+                    0x0300,             // Range Maximum
+                    0x01,               // Alignment
+                    0x20,               // Length
+                    )
+                IRQNoFlags ()
+                    {6}
+            })
+        }
+
 
         // PCI bus 0
@@ -564,15 +623,8 @@
                     Name (_HID, EisaId ("PNP0700"))
 
-                    OperationRegion (CFDC, SystemIO, 0x4054, 0x08)
-                    Field (CFDC, DwordAcc, NoLock, Preserve)
-                    {
-                        FSTA, 32,
-                    }
-
                     Method (_STA, 0, NotSerialized)
                     {
-                        Return (FSTA)
+                          Return (UFDC)           
                     }
-
                     // Current resource settings
                     Name (_CRS, ResourceTemplate ()
Index: /trunk/src/VBox/Devices/testcase/tstDeviceStructSizeGC.cpp
===================================================================
--- /trunk/src/VBox/Devices/testcase/tstDeviceStructSizeGC.cpp	(revision 16004)
+++ /trunk/src/VBox/Devices/testcase/tstDeviceStructSizeGC.cpp	(revision 16005)
@@ -447,4 +447,6 @@
     GEN_CHECK_OFF(ACPIState, pDrvBase);
     GEN_CHECK_OFF(ACPIState, pDrv);
+    GEN_CHECK_OFF(ACPIState, u8UseHpet);
+    GEN_CHECK_OFF(ACPIState, u8UseSmc);
 
     /* PC/DevPIC.cpp */
Index: /trunk/src/VBox/Main/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 16004)
+++ /trunk/src/VBox/Main/ConsoleImpl2.cpp	(revision 16005)
@@ -558,4 +558,6 @@
         rc = CFGMR3InsertInteger(pCfg,  "IOAPIC", fIOAPIC);                         RC_CHECK();
         rc = CFGMR3InsertInteger(pCfg,  "FdcEnabled", fFdcEnabled);                 RC_CHECK();
+        rc = CFGMR3InsertInteger(pCfg,  "HpetEnabled", 0);                          RC_CHECK();
+        rc = CFGMR3InsertInteger(pCfg,  "SmcEnabled", 0);                           RC_CHECK();
         rc = CFGMR3InsertInteger(pInst, "PCIDeviceNo",          7);                 RC_CHECK();
         Assert(!afPciDeviceNo[7]);
