diff --git a/drivers/bus/acpi/acpica/events/evhandler.c b/drivers/bus/acpi/acpica/events/evhandler.c
index 81d9d9390ab..802e454c7ba 100644
--- a/drivers/bus/acpi/acpica/events/evhandler.c
+++ b/drivers/bus/acpi/acpica/events/evhandler.c
@@ -68,7 +68,8 @@ UINT8        AcpiGbl_DefaultAddressSpaces[ACPI_NUM_DEFAULT_SPACES] =
     ACPI_ADR_SPACE_SYSTEM_MEMORY,
     ACPI_ADR_SPACE_SYSTEM_IO,
     ACPI_ADR_SPACE_PCI_CONFIG,
-    ACPI_ADR_SPACE_DATA_TABLE
+    ACPI_ADR_SPACE_DATA_TABLE,
+    ACPI_ADR_SPACE_EC
 };
 
 
@@ -458,6 +459,12 @@ AcpiEvInstallSpaceHandler (
             Setup   = AcpiEvDataTableRegionSetup;
             break;
 
+        case ACPI_ADR_SPACE_EC:
+
+            Handler = AcpiExEcSpaceHandler;
+            Setup = AcpiEvEcRegionSetup;
+            break;
+
         default:
 
             Status = AE_BAD_PARAMETER;
diff --git a/drivers/bus/acpi/acpica/events/evrgnini.c b/drivers/bus/acpi/acpica/events/evrgnini.c
index dc41d4cc3aa..76abab39b31 100644
--- a/drivers/bus/acpi/acpica/events/evrgnini.c
+++ b/drivers/bus/acpi/acpica/events/evrgnini.c
@@ -721,3 +721,37 @@ AcpiEvInitializeRegion (
 
     return_ACPI_STATUS (AE_OK);
 }
+
+ACPI_STATUS
+AcpiEvEcRegionSetup(ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext)
+{
+    ACPI_OPERAND_OBJECT *RegionDesc = (ACPI_OPERAND_OBJECT *)Handle;
+    ACPI_DATA_TABLE_MAPPING *LocalRegionContext;
+
+    ACPI_FUNCTION_TRACE(EvDataTableRegionSetup);
+
+    if (Function == ACPI_REGION_DEACTIVATE)
+    {
+        if (*RegionContext)
+        {
+            ACPI_FREE(*RegionContext);
+            *RegionContext = NULL;
+        }
+        return_ACPI_STATUS(AE_OK);
+    }
+
+    /* Create a new context */
+
+    LocalRegionContext = ACPI_ALLOCATE_ZEROED(sizeof(ACPI_DATA_TABLE_MAPPING));
+    if (!(LocalRegionContext))
+    {
+        return_ACPI_STATUS(AE_NO_MEMORY);
+    }
+
+    /* Save the data table pointer for use in the handler */
+
+    LocalRegionContext->Pointer = RegionDesc->Region.Pointer;
+
+    *RegionContext = LocalRegionContext;
+    return_ACPI_STATUS(AE_OK);
+}
diff --git a/drivers/bus/acpi/acpica/executer/exregion.c b/drivers/bus/acpi/acpica/executer/exregion.c
index 247cc7ab7b8..15d936936b6 100644
--- a/drivers/bus/acpi/acpica/executer/exregion.c
+++ b/drivers/bus/acpi/acpica/executer/exregion.c
@@ -618,3 +618,42 @@ AcpiExDataTableSpaceHandler (
 
     return_ACPI_STATUS (AE_OK);
 }
+
+ACPI_STATUS
+AcpiExEcSpaceHandler(
+    UINT32 Function,
+    ACPI_PHYSICAL_ADDRESS Address,
+    UINT32 BitWidth,
+    UINT64 *Value,
+    void *HandlerContext,
+    void *RegionContext)
+{
+    char *Pointer;
+
+    ACPI_FUNCTION_TRACE(ExEcSpaceHandler);
+    UINT64 dummy = 1;
+    Pointer = (char*)&dummy;
+    
+    /*
+     * Perform the memory read or write. The BitWidth was already
+     * validated.
+     */
+    switch (Function)
+    {
+        case ACPI_READ:
+
+            memcpy(ACPI_CAST_PTR(char, Value), Pointer, ACPI_DIV_8(BitWidth));
+            break;
+
+        case ACPI_WRITE:
+
+            memcpy(Pointer, ACPI_CAST_PTR(char, Value), ACPI_DIV_8(BitWidth));
+            break;
+
+        default:
+
+            return_ACPI_STATUS(AE_BAD_PARAMETER);
+    }
+
+    return_ACPI_STATUS(AE_OK);
+}
diff --git a/drivers/bus/acpi/acpica/include/acconfig.h b/drivers/bus/acpi/acpica/include/acconfig.h
index c162ee43205..29daf04b6bb 100644
--- a/drivers/bus/acpi/acpica/include/acconfig.h
+++ b/drivers/bus/acpi/acpica/include/acconfig.h
@@ -199,7 +199,7 @@
 /* Maximum SpaceIds for Operation Regions */
 
 #define ACPI_MAX_ADDRESS_SPACE          255
-#define ACPI_NUM_DEFAULT_SPACES         4
+#define ACPI_NUM_DEFAULT_SPACES         5
 
 /* Array sizes. Used for range checking also */
 
diff --git a/drivers/bus/acpi/acpica/include/acevents.h b/drivers/bus/acpi/acpica/include/acevents.h
index 7e0e845b690..0084c4d4dd8 100644
--- a/drivers/bus/acpi/acpica/include/acevents.h
+++ b/drivers/bus/acpi/acpica/include/acevents.h
@@ -356,6 +356,10 @@ AcpiEvDataTableRegionSetup (
     void                    *HandlerContext,
     void                    **RegionContext);
 
+ACPI_STATUS
+AcpiEvEcRegionSetup(ACPI_HANDLE Handle, UINT32 Function, void *HandlerContext, void **RegionContext);
+
+
 ACPI_STATUS
 AcpiEvDefaultRegionSetup (
     ACPI_HANDLE             Handle,
diff --git a/drivers/bus/acpi/acpica/include/acinterp.h b/drivers/bus/acpi/acpica/include/acinterp.h
index eb26d615bd7..27b2a2e7af2 100644
--- a/drivers/bus/acpi/acpica/include/acinterp.h
+++ b/drivers/bus/acpi/acpica/include/acinterp.h
@@ -781,4 +781,13 @@ AcpiExDataTableSpaceHandler (
     void                    *HandlerContext,
     void                    *RegionContext);
 
+ACPI_STATUS
+AcpiExEcSpaceHandler(
+    UINT32 Function,
+    ACPI_PHYSICAL_ADDRESS Address,
+    UINT32 BitWidth,
+    UINT64 *Value,
+    void *HandlerContext,
+    void *RegionContext);
+
 #endif /* __INTERP_H__ */
diff --git a/drivers/bus/acpi/osl.c b/drivers/bus/acpi/osl.c
index 8b8176cbde0..c9f2a029f2e 100644
--- a/drivers/bus/acpi/osl.c
+++ b/drivers/bus/acpi/osl.c
@@ -8,7 +8,7 @@
 
 #include <pseh/pseh2.h>
 
-#define NDEBUG
+#define YDEBUG
 #include <debug.h>
 
 static PKINTERRUPT AcpiInterrupt;
