diff --git a/src/add-ons/kernel/bus_managers/acpi/BusManager.cpp b/src/add-ons/kernel/bus_managers/acpi/BusManager.cpp index 7d48b15dd3..57fe4a0b6a 100644 --- a/src/add-ons/kernel/bus_managers/acpi/BusManager.cpp +++ b/src/add-ons/kernel/bus_managers/acpi/BusManager.cpp @@ -450,8 +450,7 @@ status_t get_device_hid(const char *path, char *hid, size_t bufferLength) { ACPI_HANDLE handle; - ACPI_OBJECT info; - ACPI_BUFFER infoBuffer; + ACPI_DEVICE_INFO *info; TRACE("get_device_hid: path %s, hid %s\n", path, hid); if (AcpiGetHandle(NULL, (ACPI_STRING)path, &handle) != AE_OK) @@ -460,29 +459,14 @@ get_device_hid(const char *path, char *hid, size_t bufferLength) if (bufferLength < ACPI_DEVICE_ID_LENGTH) return B_BUFFER_OVERFLOW; - infoBuffer.Pointer = &info; - infoBuffer.Length = sizeof(ACPI_OBJECT); - info.String.Pointer = hid; - info.String.Length = 9; - info.String.Type = ACPI_TYPE_STRING; - - if (AcpiEvaluateObject(handle, "_HID", NULL, &infoBuffer) != AE_OK) + if (AcpiGetObjectInfo(handle, &info) != AE_OK) return B_BAD_TYPE; - if (info.Type == ACPI_TYPE_INTEGER) { - uint32 eisaId = AcpiUtDwordByteSwap(info.Integer.Value); - - hid[0] = (char) ('@' + ((eisaId >> 26) & 0x1f)); - hid[1] = (char) ('@' + ((eisaId >> 21) & 0x1f)); - hid[2] = (char) ('@' + ((eisaId >> 16) & 0x1f)); - hid[3] = AcpiUtHexToAsciiChar((ACPI_INTEGER)eisaId, 12); - hid[4] = AcpiUtHexToAsciiChar((ACPI_INTEGER)eisaId, 8); - hid[5] = AcpiUtHexToAsciiChar((ACPI_INTEGER)eisaId, 4); - hid[6] = AcpiUtHexToAsciiChar((ACPI_INTEGER)eisaId, 0); - hid[7] = 0; - } - - hid[ACPI_DEVICE_ID_LENGTH] = '\0'; + if ((info->Valid & ACPI_VALID_HID) != 0) + strlcpy(hid, info->HardwareId.String, bufferLength); + else + hid[0] = '\0'; + AcpiOsFree(info); return B_OK; }