--- a/sys/dev/acpica5/Makefile
+++ b/sys/dev/acpica5/Makefile
@@ -33,16 +33,16 @@ KMOD	= acpi
 # ACPI CA sources
 SRCS+=	dsfield.c dsinit.c dsmethod.c dsmthdat.c
 SRCS+=	dsobject.c dsopcode.c dsutils.c dswexec.c dswload.c
-SRCS+=	dswscope.c dswstate.c evevent.c evgpe.c evgpeblk.c
+SRCS+=	dswscope.c dswstate.c evevent.c evgpe.c evgpeinit.c evgpeblk.c evgpeutil.c
 SRCS+=	evmisc.c evregion.c evrgnini.c evsci.c evxface.c
-SRCS+=	evxfevnt.c evxfregn.c exconfig.c exconvrt.c excreate.c
+SRCS+=	evxfevnt.c evxfregn.c exconfig.c exconvrt.c excreate.c exdebug.c
 SRCS+=	exdump.c exfield.c exfldio.c exmisc.c exmutex.c
 SRCS+=	exnames.c exoparg1.c exoparg2.c exoparg3.c exoparg6.c
 SRCS+=	exprep.c exregion.c exresnte.c exresolv.c exresop.c
 SRCS+=	exstore.c exstoren.c exstorob.c exsystem.c exutils.c
-SRCS+=	hwacpi.c hwgpe.c hwregs.c hwsleep.c hwtimer.c hwvalid.c hwxface.c
+SRCS+=	hwacpi.c hwpci.c hwgpe.c hwregs.c hwsleep.c hwtimer.c hwvalid.c hwxface.c
 SRCS+=	nsaccess.c nsalloc.c nsdump.c nseval.c nsinit.c
-SRCS+=	nsload.c nsnames.c nsobject.c nsparse.c nssearch.c nspredef.c
+SRCS+=	nsload.c nsnames.c nsobject.c nsparse.c nsrepair.c nsrepair2.c nssearch.c nspredef.c
 SRCS+=	nsutils.c nswalk.c nsxfeval.c nsxfname.c nsxfobj.c
 SRCS+=	psargs.c psloop.c psopcode.c psparse.c psscope.c
 SRCS+=	pstree.c psutils.c pswalk.c psxface.c
@@ -51,8 +51,8 @@ SRCS+=	rsirq.c rslist.c rsmemory.c rsmisc.c rsutils.c
 SRCS+=	rsxface.c tbfadt.c tbfind.c tbinstal.c
 SRCS+=	tbutils.c tbxface.c tbxfroot.c utalloc.c
 SRCS+=	utclib.c utcopy.c utdebug.c utdelete.c uteval.c utlock.c
-SRCS+=	utglobal.c utinit.c utmath.c utmisc.c utmutex.c utobject.c
-SRCS+=	utresrc.c utstate.c utxface.c
+SRCS+=	utglobal.c utids.c utinit.c utmath.c utmisc.c utmutex.c utobject.c
+SRCS+=	utosi.c utresrc.c utstate.c utxface.c utxferror.c
 
 # OSD layer
 #
diff --git a/sys/dev/acpica5/Osd/OsdHardware.c b/sys/dev/acpica5/Osd/OsdHardware.c
index 7062ba5..97dfdcc 100644
--- a/sys/dev/acpica5/Osd/OsdHardware.c
+++ b/sys/dev/acpica5/Osd/OsdHardware.c
@@ -108,7 +108,7 @@ AcpiOsWritePort(ACPI_IO_ADDRESS OutPort, UINT32 Value, UINT32 Width)
 }
 
 ACPI_STATUS
-AcpiOsReadPciConfiguration(ACPI_PCI_ID *PciId, UINT32 Register, void *Value,
+AcpiOsReadPciConfiguration(ACPI_PCI_ID *PciId, UINT32 Register, UINT64 *Value,
     UINT32 Width)
 {
     u_int32_t	byte_width = Width / 8;
@@ -140,7 +140,7 @@ AcpiOsReadPciConfiguration(ACPI_PCI_ID *PciId, UINT32 Register, void *Value,
 
 ACPI_STATUS
 AcpiOsWritePciConfiguration(ACPI_PCI_ID *PciId, UINT32 Register,
-    ACPI_INTEGER Value, UINT32 Width)
+    UINT64 Value, UINT32 Width)
 {
     u_int32_t	byte_width = Width / 8;
 
diff --git a/sys/dev/acpica5/acpi.c b/sys/dev/acpica5/acpi.c
index 8317871..e63aafa 100644
--- a/sys/dev/acpica5/acpi.c
+++ b/sys/dev/acpica5/acpi.c
@@ -842,22 +842,21 @@ static int
 acpi_child_pnpinfo_str_method(device_t cbdev, device_t child, char *buf,
     size_t buflen)
 {
-    ACPI_BUFFER adbuf = {ACPI_ALLOCATE_BUFFER, NULL};
     ACPI_DEVICE_INFO *adinfo;
     struct acpi_device *dinfo = device_get_ivars(child);
     char *end;
     int error;
 
-    error = AcpiGetObjectInfo(dinfo->ad_handle, &adbuf);
-    adinfo = (ACPI_DEVICE_INFO *) adbuf.Pointer;
+    adinfo = NULL;
+    error = AcpiGetObjectInfo(dinfo->ad_handle, &adinfo);
     if (error)
 	ksnprintf(buf, buflen, "unknown");
     else
 	ksnprintf(buf, buflen, "_HID=%s _UID=%lu",
 		 (adinfo->Valid & ACPI_VALID_HID) ?
-		 adinfo->HardwareId.Value : "none",
+		 adinfo->HardwareId.String : "none",
 		 (adinfo->Valid & ACPI_VALID_UID) ?
-		 strtoul(adinfo->UniqueId.Value, &end, 10) : 0);
+		 strtoul(adinfo->UniqueId.String, &end, 10) : 0);
     if (adinfo)
 	AcpiOsFree(adinfo);
 
@@ -1197,31 +1196,28 @@ static uint32_t
 acpi_isa_get_logicalid(device_t dev)
 {
     ACPI_DEVICE_INFO	*devinfo;
-    ACPI_BUFFER		buf;
     ACPI_HANDLE		h;
     ACPI_STATUS		error;
     u_int32_t		pnpid;
 
     ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
 
+    devinfo = NULL;
     pnpid = 0;
-    buf.Pointer = NULL;
-    buf.Length = ACPI_ALLOCATE_BUFFER;
 
     /* Fetch and validate the HID. */
     if ((h = acpi_get_handle(dev)) == NULL)
 	goto out;
-    error = AcpiGetObjectInfo(h, &buf);
+    error = AcpiGetObjectInfo(h, &devinfo);
     if (ACPI_FAILURE(error))
 	goto out;
-    devinfo = (ACPI_DEVICE_INFO *)buf.Pointer;
 
     if ((devinfo->Valid & ACPI_VALID_HID) != 0)
-	pnpid = PNP_EISAID(devinfo->HardwareId.Value);
+	pnpid = PNP_EISAID(devinfo->HardwareId.String);
 
 out:
-    if (buf.Pointer != NULL)
-	AcpiOsFree(buf.Pointer);
+    if (devinfo)
+	AcpiOsFree(devinfo);
     return_VALUE (pnpid);
 }
 
@@ -1229,7 +1225,6 @@ static int
 acpi_isa_get_compatid(device_t dev, uint32_t *cids, int count)
 {
     ACPI_DEVICE_INFO	*devinfo;
-    ACPI_BUFFER		buf;
     ACPI_HANDLE		h;
     ACPI_STATUS		error;
     uint32_t		*pnpid;
@@ -1239,31 +1234,29 @@ acpi_isa_get_compatid(device_t dev, uint32_t *cids, int count)
 
     pnpid = cids;
     valid = 0;
-    buf.Pointer = NULL;
-    buf.Length = ACPI_ALLOCATE_BUFFER;
+    devinfo = NULL;
 
     /* Fetch and validate the CID */
     if ((h = acpi_get_handle(dev)) == NULL)
 	goto out;
-    error = AcpiGetObjectInfo(h, &buf);
+    error = AcpiGetObjectInfo(h, &devinfo);
     if (ACPI_FAILURE(error))
 	goto out;
-    devinfo = (ACPI_DEVICE_INFO *)buf.Pointer;
     if ((devinfo->Valid & ACPI_VALID_CID) == 0)
 	goto out;
 
-    if (devinfo->CompatibilityId.Count < count)
-	count = devinfo->CompatibilityId.Count;
+    if (devinfo->CompatibleIdList.Count < count)
+	count = devinfo->CompatibleIdList.Count;
     for (i = 0; i < count; i++) {
-	if (strncmp(devinfo->CompatibilityId.Id[i].Value, "PNP", 3) != 0)
+	if (strncmp(devinfo->CompatibleIdList.Ids[i].String, "PNP", 3) != 0)
 	    continue;
-	*pnpid++ = PNP_EISAID(devinfo->CompatibilityId.Id[i].Value);
+	*pnpid++ = PNP_EISAID(devinfo->CompatibleIdList.Ids[i].String);
 	valid++;
     }
 
 out:
-    if (buf.Pointer != NULL)
-	AcpiOsFree(buf.Pointer);
+    if (devinfo)
+	AcpiOsFree(devinfo);
     return_VALUE (valid);
 }
 
@@ -1420,7 +1413,7 @@ acpi_device_scan_children(device_t bus, device_t dev, int max_depth,
     ctx.arg = arg;
     ctx.parent = h;
     return (AcpiWalkNamespace(ACPI_TYPE_ANY, h, max_depth,
-	acpi_device_scan_cb, &ctx, NULL));
+	NULL, acpi_device_scan_cb, &ctx, NULL));
 }
 
 /*
@@ -1543,7 +1536,7 @@ acpi_probe_children(device_t bus)
      * devices as they appear, which might be smarter.)
      */
     ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "namespace scan\n"));
-    AcpiWalkNamespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, 100, acpi_probe_child,
+    AcpiWalkNamespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, 100, NULL, acpi_probe_child,
 	bus, NULL);
 
     /* Pre-allocate resources for our rman from any sysresource devices. */
@@ -1700,7 +1693,7 @@ acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status)
  * placeholder object handler so we can store a device_t in an ACPI_HANDLE.
  */
 void
-acpi_fake_objhandler(ACPI_HANDLE h, UINT32 fn, void *data)
+acpi_fake_objhandler(ACPI_HANDLE h, void *data)
 {
 }
 
@@ -1788,19 +1781,16 @@ acpi_DeviceIsPresent(device_t dev)
 {
     ACPI_DEVICE_INFO	*devinfo;
     ACPI_HANDLE		h;
-    ACPI_BUFFER		buf;
     ACPI_STATUS		error;
     int			ret;
 
     ret = FALSE;
+    devinfo = NULL;
     if ((h = acpi_get_handle(dev)) == NULL)
 	return (FALSE);
-    buf.Pointer = NULL;
-    buf.Length = ACPI_ALLOCATE_BUFFER;
-    error = AcpiGetObjectInfo(h, &buf);
+    error = AcpiGetObjectInfo(h, &devinfo);
     if (ACPI_FAILURE(error))
 	return (FALSE);
-    devinfo = (ACPI_DEVICE_INFO *)buf.Pointer;
 
     /* If no _STA method, must be present */
     if ((devinfo->Valid & ACPI_VALID_STA) == 0)
@@ -1810,7 +1800,9 @@ acpi_DeviceIsPresent(device_t dev)
     if (ACPI_DEVICE_PRESENT(devinfo->CurrentStatus))
 	ret = TRUE;
 
-    AcpiOsFree(buf.Pointer);
+    if (devinfo)
+	AcpiOsFree(devinfo);
+
     return (ret);
 }
 
@@ -1822,19 +1814,16 @@ acpi_BatteryIsPresent(device_t dev)
 {
     ACPI_DEVICE_INFO	*devinfo;
     ACPI_HANDLE		h;
-    ACPI_BUFFER		buf;
     ACPI_STATUS		error;
     int			ret;
 
     ret = FALSE;
+    devinfo = NULL;
     if ((h = acpi_get_handle(dev)) == NULL)
 	return (FALSE);
-    buf.Pointer = NULL;
-    buf.Length = ACPI_ALLOCATE_BUFFER;
-    error = AcpiGetObjectInfo(h, &buf);
+    error = AcpiGetObjectInfo(h, &devinfo);
     if (ACPI_FAILURE(error))
 	return (FALSE);
-    devinfo = (ACPI_DEVICE_INFO *)buf.Pointer;
 
     /* If no _STA method, must be present */
     if ((devinfo->Valid & ACPI_VALID_STA) == 0)
@@ -1844,7 +1833,8 @@ acpi_BatteryIsPresent(device_t dev)
     if (ACPI_BATTERY_PRESENT(devinfo->CurrentStatus))
 	ret = TRUE;
 
-    AcpiOsFree(buf.Pointer);
+    if (devinfo)
+	AcpiOsFree(devinfo);
     return (ret);
 }
 
@@ -1855,33 +1845,35 @@ BOOLEAN
 acpi_MatchHid(ACPI_HANDLE h, const char *hid)
 {
     ACPI_DEVICE_INFO	*devinfo;
-    ACPI_BUFFER		buf;
     ACPI_STATUS		error;
-    int			ret, i;
+    int			ret, i, len;
 
     ret = FALSE;
+    devinfo = NULL;
     if (hid == NULL || h == NULL)
 	return (ret);
-    buf.Pointer = NULL;
-    buf.Length = ACPI_ALLOCATE_BUFFER;
-    error = AcpiGetObjectInfo(h, &buf);
+    error = AcpiGetObjectInfo(h, &devinfo);
     if (ACPI_FAILURE(error))
 	return (ret);
-    devinfo = (ACPI_DEVICE_INFO *)buf.Pointer;
-
-    if ((devinfo->Valid & ACPI_VALID_HID) != 0 &&
-	strcmp(hid, devinfo->HardwareId.Value) == 0)
+    len = strlen(hid);
+    if ((devinfo->Valid & ACPI_VALID_HID) != 0 ) {
+	if ((strlen(devinfo->HardwareId.String) == len) &&
+	    strncmp(hid, devinfo->HardwareId.String, len) == 0)
 	    ret = TRUE;
+    }
     else if ((devinfo->Valid & ACPI_VALID_CID) != 0) {
-	for (i = 0; i < devinfo->CompatibilityId.Count; i++) {
-	    if (strcmp(hid, devinfo->CompatibilityId.Id[i].Value) == 0) {
+	    kprintf("devinfo->CompatibleIdList.Count %d \n",devinfo->CompatibleIdList.Count );
+	for (i = 0; i < devinfo->CompatibleIdList.Count; i++) {
+	    if ((strlen(devinfo->CompatibleIdList.Ids[i].String) == len) &&
+		strncmp(hid, devinfo->CompatibleIdList.Ids[i].String, len) == 0) {
 		ret = TRUE;
 		break;
 	    }
 	}
     }
 
-    AcpiOsFree(buf.Pointer);
+    if (devinfo)
+	AcpiOsFree(devinfo);
     return (ret);
 }
 
@@ -2501,8 +2493,8 @@ acpi_wake_init(device_t dev, int type)
 	return (ENXIO);
 
     /* Set the requested type for the GPE (runtime, wake, or both). */
-    if (ACPI_FAILURE(AcpiSetGpeType(prw.gpe_handle, prw.gpe_bit, type))) {
-	device_printf(dev, "set GPE type failed\n");
+    if (ACPI_FAILURE(AcpiSetGpe(prw.gpe_handle, prw.gpe_bit, type))) {
+	device_printf(dev, "set GPE failed\n");
 	return (ENXIO);
     }
 
@@ -2523,14 +2515,14 @@ acpi_wake_set_enable(device_t dev, int enable)
 
     flags = acpi_get_flags(dev);
     if (enable) {
-	status = AcpiEnableGpe(prw.gpe_handle, prw.gpe_bit, ACPI_NOT_ISR);
+	status = AcpiEnableGpe(prw.gpe_handle, prw.gpe_bit);
 	if (ACPI_FAILURE(status)) {
 	    device_printf(dev, "enable wake failed\n");
 	    return (ENXIO);
 	}
 	acpi_set_flags(dev, flags | ACPI_FLAG_WAKE_ENABLED);
     } else {
-	status = AcpiDisableGpe(prw.gpe_handle, prw.gpe_bit, ACPI_NOT_ISR);
+	status = AcpiDisableGpe(prw.gpe_handle, prw.gpe_bit);
 	if (ACPI_FAILURE(status)) {
 	    device_printf(dev, "disable wake failed\n");
 	    return (ENXIO);
@@ -2560,7 +2552,7 @@ acpi_wake_sleep_prep(ACPI_HANDLE handle, int sstate)
      * and set _PSW.
      */
     if (sstate > prw.lowest_wake) {
-	AcpiDisableGpe(prw.gpe_handle, prw.gpe_bit, ACPI_NOT_ISR);
+	AcpiDisableGpe(prw.gpe_handle, prw.gpe_bit);
 	if (bootverbose)
 	    device_printf(dev, "wake_prep disabled wake for %s (S%d)\n",
 		acpi_name(handle), sstate);
@@ -2597,7 +2589,7 @@ acpi_wake_run_prep(ACPI_HANDLE handle, int sstate)
      * clear _PSW and turn off any power resources it used.
      */
     if (sstate > prw.lowest_wake) {
-	AcpiEnableGpe(prw.gpe_handle, prw.gpe_bit, ACPI_NOT_ISR);
+	AcpiEnableGpe(prw.gpe_handle, prw.gpe_bit);
 	if (bootverbose)
 	    device_printf(dev, "run_prep re-enabled %s\n", acpi_name(handle));
     } else {
@@ -2633,7 +2625,7 @@ acpi_wake_prep_walk(int sstate)
 
     if (ACPI_SUCCESS(AcpiGetHandle(ACPI_ROOT_OBJECT, "\\_SB_", &sb_handle)))
 	AcpiWalkNamespace(ACPI_TYPE_DEVICE, sb_handle, 100,
-	    acpi_wake_prep, &sstate, NULL);
+	    NULL, acpi_wake_prep, &sstate, NULL);
     return (0);
 }
 
diff --git a/sys/dev/acpica5/acpi_button.c b/sys/dev/acpica5/acpi_button.c
index c3e454e..8bcc7f8 100644
--- a/sys/dev/acpica5/acpi_button.c
+++ b/sys/dev/acpica5/acpi_button.c
@@ -163,7 +163,7 @@ acpi_button_attach(device_t dev)
     }
 
     /* Enable the GPE for wake/runtime. */
-    acpi_wake_init(dev, ACPI_GPE_TYPE_WAKE_RUN);
+    acpi_wake_init(dev, ACPI_GPE_CAN_WAKE);
     acpi_wake_set_enable(dev, 1);
     
     return_VALUE (0);
diff --git a/sys/dev/acpica5/acpi_ec.c b/sys/dev/acpica5/acpi_ec.c
index 39ebade..17f380a 100644
--- a/sys/dev/acpica5/acpi_ec.c
+++ b/sys/dev/acpica5/acpi_ec.c
@@ -517,14 +517,14 @@ acpi_ec_attach(device_t dev)
     }
 
     /* Enable runtime GPEs for the handler. */
-    Status = AcpiSetGpeType(sc->ec_gpehandle, sc->ec_gpebit,
-			    ACPI_GPE_TYPE_RUNTIME);
+    Status = AcpiSetGpe(sc->ec_gpehandle, sc->ec_gpebit,
+			    ACPI_GPE_ENABLE);
     if (ACPI_FAILURE(Status)) {
 	device_printf(dev, "AcpiSetGpeType failed: %s\n",
 		      AcpiFormatException(Status));
 	goto error;
     }
-    Status = AcpiEnableGpe(sc->ec_gpehandle, sc->ec_gpebit, ACPI_NOT_ISR);
+    Status = AcpiEnableGpe(sc->ec_gpehandle, sc->ec_gpebit);
     if (ACPI_FAILURE(Status)) {
 	device_printf(dev, "AcpiEnableGpe failed: %s\n",
 		      AcpiFormatException(Status));
@@ -574,7 +574,7 @@ acpi_ec_shutdown(device_t dev)
 
     /* Disable the GPE so we don't get EC events during shutdown. */
     sc = device_get_softc(dev);
-    AcpiDisableGpe(sc->ec_gpehandle, sc->ec_gpebit, ACPI_NOT_ISR);
+    AcpiDisableGpe(sc->ec_gpehandle, sc->ec_gpebit);
     return (0);
 }
 
diff --git a/sys/dev/acpica5/acpi_lid.c b/sys/dev/acpica5/acpi_lid.c
index 89ca8cd..bea71bf 100644
--- a/sys/dev/acpica5/acpi_lid.c
+++ b/sys/dev/acpica5/acpi_lid.c
@@ -118,7 +118,7 @@ acpi_lid_attach(device_t dev)
 			     acpi_lid_notify_handler, sc);
 
     /* Enable the GPE for wake/runtime. */
-    acpi_wake_init(dev, ACPI_GPE_TYPE_WAKE_RUN);
+    acpi_wake_init(dev, ACPI_GPE_CAN_WAKE);
     acpi_wake_set_enable(dev, 1);
 
     return (0);
diff --git a/sys/dev/acpica5/acpi_pci.c b/sys/dev/acpica5/acpi_pci.c
index 16b274a..4aeb28b 100644
--- a/sys/dev/acpica5/acpi_pci.c
+++ b/sys/dev/acpica5/acpi_pci.c
@@ -344,7 +344,7 @@ acpi_pci_attach(device_t dev)
 	 */
 	pci_add_children(dev, domain, busno, sizeof(struct acpi_pci_devinfo));
 	AcpiWalkNamespace(ACPI_TYPE_DEVICE, acpi_get_handle(dev), 1,
-	    acpi_pci_save_handle, dev, NULL);
+	    NULL, acpi_pci_save_handle, dev, NULL);
 
 	return (bus_generic_attach(dev));
 }
diff --git a/sys/dev/acpica5/acpi_video/acpi_video.c b/sys/dev/acpica5/acpi_video/acpi_video.c
index bc99b2a..9dd5046 100644
--- a/sys/dev/acpica5/acpi_video/acpi_video.c
+++ b/sys/dev/acpica5/acpi_video/acpi_video.c
@@ -807,7 +807,7 @@ vid_enum_outputs(ACPI_HANDLE handle,
 	argset.dod_pkg  = res;
 	argset.count    = 0;
 	status = AcpiWalkNamespace(ACPI_TYPE_DEVICE, handle, 1,
-	    vid_enum_outputs_subr, &argset, NULL);
+	    NULL, vid_enum_outputs_subr, &argset, NULL);
 	if (ACPI_FAILURE(status))
 		kprintf("failed walking down %s - %s\n",
 		       acpi_name(handle), AcpiFormatException(status));
diff --git a/sys/dev/acpica5/acpivar.h b/sys/dev/acpica5/acpivar.h
index a511139..cf79f93 100644
--- a/sys/dev/acpica5/acpivar.h
+++ b/sys/dev/acpica5/acpivar.h
@@ -261,7 +261,7 @@ __ACPI_BUS_ACCESSOR(acpi, magic, ACPI, MAGIC, uintptr_t)
 __ACPI_BUS_ACCESSOR(acpi, private, ACPI, PRIVATE, void *)
 __ACPI_BUS_ACCESSOR(acpi, flags, ACPI, FLAGS, int)
 
-void acpi_fake_objhandler(ACPI_HANDLE h, UINT32 fn, void *data);
+void acpi_fake_objhandler(ACPI_HANDLE h, void *data);
 static __inline device_t
 acpi_get_device(ACPI_HANDLE handle)
 {
