From b7c15bf02a57e54f0abe765380b66171a1c21965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Fri, 1 Nov 2013 16:49:34 +0100 Subject: [PATCH] acpi: use AcpiGetObjectInfo() for get_device_hid(). --- .../kernel/bus_managers/acpi/BusManager.cpp | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) 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; }