[haiku-commits] Change in haiku[master]: acpi: add ACPI_DEVICE_UID_ITEM

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 16 Apr 2020 16:02:49 +0000

From Jérôme Duval <jerome.duval@xxxxxxxxx>:

Jérôme Duval has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/2484 ;)


Change subject: acpi: add ACPI_DEVICE_UID_ITEM
......................................................................

acpi: add ACPI_DEVICE_UID_ITEM
---
M headers/os/drivers/ACPI.h
M src/add-ons/kernel/bus_managers/acpi/ACPIPrivate.h
M src/add-ons/kernel/bus_managers/acpi/BusManager.cpp
M src/add-ons/kernel/bus_managers/acpi/Module.cpp
M src/add-ons/kernel/bus_managers/acpi/NamespaceDump.cpp
5 files changed, 22 insertions(+), 10 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/84/2484/1

diff --git a/headers/os/drivers/ACPI.h b/headers/os/drivers/ACPI.h
index 479f271..d291a0e 100644
--- a/headers/os/drivers/ACPI.h
+++ b/headers/os/drivers/ACPI.h
@@ -139,8 +139,8 @@


 enum {
-       ACPI_ALLOCATE_BUFFER = -1,
-       ACPI_ALLOCATE_LOCAL_BUFFER = -2,
+       ACPI_ALLOCATE_BUFFER = (acpi_size)-1,
+       ACPI_ALLOCATE_LOCAL_BUFFER = (acpi_size)-2,
 };


@@ -253,7 +253,7 @@
                                        size_t resultLength);

        status_t        (*get_device_info)(const char *path, char** hid,
-                                       char** cidList, size_t cidListLength);
+                                       char** cidList, size_t cidListLength, 
char** uid);
        uint32          (*get_object_type)(const char *path);
        status_t        (*get_object)(const char *path,
                                        acpi_object_type **_returnValue);
@@ -318,6 +318,7 @@
 #define ACPI_DEVICE_HID_ITEM   "acpi/hid"
 #define ACPI_DEVICE_PATH_ITEM  "acpi/path"
 #define ACPI_DEVICE_TYPE_ITEM  "acpi/type"
+#define ACPI_DEVICE_UID_ITEM   "acpi/uid"


 typedef struct acpi_device_cookie *acpi_device;
diff --git a/src/add-ons/kernel/bus_managers/acpi/ACPIPrivate.h 
b/src/add-ons/kernel/bus_managers/acpi/ACPIPrivate.h
index 6f834f3..1071c71 100644
--- a/src/add-ons/kernel/bus_managers/acpi/ACPIPrivate.h
+++ b/src/add-ons/kernel/bus_managers/acpi/ACPIPrivate.h
@@ -113,7 +113,7 @@
                                        size_t resultLength);

        status_t        (*get_device_info)(const char *path, char **hid,
-                                       char** cidList, size_t cidListCount);
+                                       char** cidList, size_t cidListCount, 
char** uid);
        uint32          (*get_object_type)(const char *path);
        status_t        (*get_object)(const char *path,
                                        acpi_object_type **_returnValue);
@@ -214,7 +214,7 @@
        size_t resultLength);

 status_t get_device_info(const char* path, char** hid, char** cidList,
-       size_t cidListCount);
+       size_t cidListCount, char** uniqueId);
 status_t get_device_addr(const char* path, uint32* addr);
 uint32 get_object_type(const char* path);
 status_t get_object(const char* path, acpi_object_type** _returnValue);
diff --git a/src/add-ons/kernel/bus_managers/acpi/BusManager.cpp 
b/src/add-ons/kernel/bus_managers/acpi/BusManager.cpp
index ebd92bf..a0ed3af 100644
--- a/src/add-ons/kernel/bus_managers/acpi/BusManager.cpp
+++ b/src/add-ons/kernel/bus_managers/acpi/BusManager.cpp
@@ -534,7 +534,7 @@

 status_t
 get_device_info(const char *path, char** hid, char** cidList,
-       size_t cidListCount)
+       size_t cidListCount, char** uid)
 {
        ACPI_HANDLE handle;
        ACPI_DEVICE_INFO *info;
@@ -558,6 +558,9 @@
                }
        }

+       if ((info->Valid & ACPI_VALID_UID) != 0 && uid != NULL)
+               *uid = strndup(info->UniqueId.String, info->UniqueId.Length);
+
        AcpiOsFree(info);
        return B_OK;
 }
diff --git a/src/add-ons/kernel/bus_managers/acpi/Module.cpp 
b/src/add-ons/kernel/bus_managers/acpi/Module.cpp
index 7227c7d..97471b7 100644
--- a/src/add-ons/kernel/bus_managers/acpi/Module.cpp
+++ b/src/add-ons/kernel/bus_managers/acpi/Module.cpp
@@ -86,7 +86,7 @@
                        case ACPI_TYPE_PROCESSOR:
                        case ACPI_TYPE_THERMAL:
                        case ACPI_TYPE_DEVICE: {
-                               device_attr attrs[15] = {
+                               device_attr attrs[16] = {
                                        // info about device
                                        { B_DEVICE_BUS, B_STRING_TYPE, { 
string: "acpi" }},

@@ -103,9 +103,10 @@
                                uint32 attrCount = 4;
                                char* hid = NULL;
                                char* cidList[8] = { NULL };
+                               char* uid = NULL;
                                if (type == ACPI_TYPE_DEVICE) {
-                                       if (get_device_info(result, &hid, 
(char**)&cidList, 8)
-                                               == B_OK) {
+                                       if (get_device_info(result, &hid, 
(char**)&cidList, 8,
+                                               &uid) == B_OK) {
                                                if (hid != NULL) {
                                                        attrs[attrCount].name = 
ACPI_DEVICE_HID_ITEM;
                                                        attrs[attrCount].type = 
B_STRING_TYPE;
@@ -118,6 +119,12 @@
                                                        
attrs[attrCount].value.string = cidList[i];
                                                        attrCount++;
                                                }
+                                               if (uid != NULL) {
+                                                       attrs[attrCount].name = 
ACPI_DEVICE_UID_ITEM;
+                                                       attrs[attrCount].type = 
B_STRING_TYPE;
+                                                       
attrs[attrCount].value.string = uid;
+                                                       attrCount++;
+                                               }
                                        }
                                        uint32 addr;
                                        if (get_device_addr(result, &addr) == 
B_OK) {
@@ -131,6 +138,7 @@
                                status_t status = 
gDeviceManager->register_node(node,
                                                ACPI_DEVICE_MODULE_NAME, attrs, 
NULL, &deviceNode);
                                free(hid);
+                               free(uid);
                                for (int i = 0; cidList[i] != NULL; i++)
                                        free(cidList[i]);
                                if (status != B_OK)
diff --git a/src/add-ons/kernel/bus_managers/acpi/NamespaceDump.cpp 
b/src/add-ons/kernel/bus_managers/acpi/NamespaceDump.cpp
index 5c489aa..a77bf84 100644
--- a/src/add-ons/kernel/bus_managers/acpi/NamespaceDump.cpp
+++ b/src/add-ons/kernel/bus_managers/acpi/NamespaceDump.cpp
@@ -115,7 +115,7 @@
                        case ACPI_TYPE_DEVICE:
                        {
                                char* hid = NULL;
-                               device->acpi->get_device_info(result, &hid, 
NULL, 0);
+                               device->acpi->get_device_info(result, &hid, 
NULL, 0, NULL);
                                strlcat(output, "     DEVICE (", 
sizeof(output));
                                if (hid != NULL) {
                                        strlcat(output, hid, sizeof(output));

--
To view, visit https://review.haiku-os.org/c/haiku/+/2484
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I6f1dba7d9d757859375e2339141ba92559d5cf9b
Gerrit-Change-Number: 2484
Gerrit-PatchSet: 1
Gerrit-Owner: Jérôme Duval <jerome.duval@xxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: acpi: add ACPI_DEVICE_UID_ITEM - Gerrit