aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/acpica/acpi_hpet.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/sys/dev/acpica/acpi_hpet.c b/sys/dev/acpica/acpi_hpet.c
index be869ed88972..4d600f5a24fb 100644
--- a/sys/dev/acpica/acpi_hpet.c
+++ b/sys/dev/acpica/acpi_hpet.c
@@ -293,7 +293,7 @@ hpet_find(ACPI_HANDLE handle, UINT32 level, void *context,
return (AE_OK);
if (ACPI_FAILURE(acpi_GetInteger(handle, "_UID", &uid)) ||
id == uid)
- *((int *)status) = 1;
+ *status = acpi_get_device(handle);
return (AE_OK);
}
@@ -321,7 +321,7 @@ hpet_identify(driver_t *driver, device_t parent)
ACPI_TABLE_HPET *hpet;
ACPI_STATUS status;
device_t child;
- int i, found;
+ int i;
/* Only one HPET device can be added. */
if (devclass_get_device(hpet_devclass, 0))
@@ -332,12 +332,18 @@ hpet_identify(driver_t *driver, device_t parent)
if (ACPI_FAILURE(status))
return;
/* Search for HPET device with same ID. */
- found = 0;
+ child = NULL;
AcpiWalkNamespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
- 100, hpet_find, NULL, (void *)(uintptr_t)hpet->Sequence, (void *)&found);
+ 100, hpet_find, NULL, (void *)(uintptr_t)hpet->Sequence,
+ (void *)&child);
/* If found - let it be probed in normal way. */
- if (found)
+ if (child) {
+ if (bus_get_resource(child, SYS_RES_MEMORY, 0,
+ NULL, NULL) != 0)
+ bus_set_resource(child, SYS_RES_MEMORY, 0,
+ hpet->Address.Address, HPET_MEM_WIDTH);
continue;
+ }
/* If not - create it from table info. */
child = BUS_ADD_CHILD(parent, 2, "hpet", 0);
if (child == NULL) {