diff --git a/headers/os/drivers/ACPI.h b/headers/os/drivers/ACPI.h index 73528b8035..374f683f00 100644 --- a/headers/os/drivers/ACPI.h +++ b/headers/os/drivers/ACPI.h @@ -229,6 +229,8 @@ struct acpi_module_info { status_t (*get_irq_routing_table)(acpi_handle busDeviceHandle, acpi_data *retBuffer); + status_t (*get_current_resources)(acpi_handle busDeviceHandle, + acpi_data *retBuffer); /* Power state setting */ diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c index f6baa4eb7a..7633794fef 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c @@ -566,6 +566,14 @@ get_irq_routing_table(acpi_handle busDeviceHandle, acpi_data *retBuffer) } +status_t +get_current_resources(acpi_handle busDeviceHandle, acpi_data *retBuffer) +{ + return AcpiGetCurrentResources(busDeviceHandle, (ACPI_BUFFER*)retBuffer) + == AE_OK ? B_OK : B_ERROR; +} + + status_t prepare_sleep_state(uint8 state, void (*wakeFunc)(void), size_t size) { @@ -680,6 +688,7 @@ struct acpi_module_info gACPIModule = { evaluate_object, evaluate_method, get_irq_routing_table, + get_current_resources, prepare_sleep_state, enter_sleep_state, reboot diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_module.c b/src/add-ons/kernel/bus_managers/acpi/acpi_module.c index bc3bb947e2..5a43d0e71c 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_module.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_module.c @@ -218,6 +218,7 @@ static struct acpi_root_info sACPIRootModule = { evaluate_object, evaluate_method, get_irq_routing_table, + get_current_resources, prepare_sleep_state, enter_sleep_state, reboot diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h b/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h index 00cada3553..1c7f53f7a4 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h @@ -122,6 +122,8 @@ typedef struct acpi_root_info { status_t (*get_irq_routing_table)(acpi_handle busDeviceHandle, acpi_data *retBuffer); + status_t (*get_current_resources)(acpi_handle busDeviceHandle, + acpi_data *retBuffer); /* Power state setting */ @@ -193,6 +195,8 @@ status_t evaluate_method(acpi_handle handle, const char* method, status_t get_irq_routing_table(acpi_handle busDeviceHandle, acpi_data* returnValue); +status_t get_current_resources(acpi_handle busDeviceHandle, + acpi_data* returnValue); status_t prepare_sleep_state(uint8 state, void (*wakeFunc)(void), size_t size); status_t enter_sleep_state(uint8 state);