From bec50f65f4b78e5e40bea28474eef4591ddfa5fa Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 8 Jun 2025 16:47:26 +0200 Subject: [PATCH] [ACPI] Report a docking device to the system --- drivers/bus/acpi/buspdo.c | 4 ++++ drivers/bus/acpi/include/acpisys.h | 1 + drivers/bus/acpi/pnp.c | 13 +++++++++++++ 3 files changed, 18 insertions(+) diff --git a/drivers/bus/acpi/buspdo.c b/drivers/bus/acpi/buspdo.c index 16eff2250bd..abdc7227cb6 100644 --- a/drivers/bus/acpi/buspdo.c +++ b/drivers/bus/acpi/buspdo.c @@ -419,6 +419,10 @@ Bus_PDO_QueryDeviceCaps( deviceCapabilities->Address = device->pnp.bus_address; } + if (DeviceData->DockDevice) + deviceCapabilities->DockDevice = TRUE; + DPRINT("DockDevice: %u\n", deviceCapabilities->DockDevice); + if (!device || (device->flags.hardware_id && (strstr(device->pnp.hardware_id, ACPI_BUTTON_HID_LID) || diff --git a/drivers/bus/acpi/include/acpisys.h b/drivers/bus/acpi/include/acpisys.h index fdea9786c9b..3442e424d86 100644 --- a/drivers/bus/acpi/include/acpisys.h +++ b/drivers/bus/acpi/include/acpisys.h @@ -42,6 +42,7 @@ typedef struct _PDO_DEVICE_DATA // An array of (zero terminated wide character strings). // The array itself also null terminated PWCHAR HardwareIDs; + BOOLEAN DockDevice; // Link point to hold all the PDOs for a single bus together LIST_ENTRY Link; ULONG InterfaceRefCount; diff --git a/drivers/bus/acpi/pnp.c b/drivers/bus/acpi/pnp.c index 54fe8182701..ef342ce4e2a 100644 --- a/drivers/bus/acpi/pnp.c +++ b/drivers/bus/acpi/pnp.c @@ -422,6 +422,8 @@ Bus_InitializePdo ( PPDO_DEVICE_DATA pdoData; int acpistate; DEVICE_POWER_STATE ntState; + ACPI_HANDLE handle = 0; + ACPI_STATUS status = 0; PAGED_CODE (); @@ -468,6 +470,17 @@ Bus_InitializePdo ( pdoData->Common.DevicePowerState = ntState; pdoData->Common.SystemPowerState = FdoData->Common.SystemPowerState; + /* Identify the dock device */ + if (pdoData->AcpiHandle) + { + status = AcpiGetHandle(pdoData->AcpiHandle, "_DCK", &handle); + if (ACPI_SUCCESS(status)) + { + DPRINT("Found _DCK method!"); + pdoData->DockDevice = TRUE; + } + } + ExAcquireFastMutex (&FdoData->Mutex); InsertTailList(&FdoData->ListOfPDOs, &pdoData->Link); FdoData->NumPDOs++;