diff --git a/headers/os/drivers/ACPI.h b/headers/os/drivers/ACPI.h index 1455e46261..91860b3c96 100644 --- a/headers/os/drivers/ACPI.h +++ b/headers/os/drivers/ACPI.h @@ -239,6 +239,8 @@ struct acpi_module_info { acpi_data *retBuffer); status_t (*get_current_resources)(acpi_handle busDeviceHandle, acpi_data *retBuffer); + status_t (*get_possible_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 ca1cd46476..02eea915ba 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c @@ -84,7 +84,7 @@ static void dump_madt() { while (true) { status = AcpiGetTable (ACPI_SIG_MADT, ++madtCount, &madt); if (status != AE_OK) break; -/* +/* dprintf("acpi: MADT TABLE:\n"); AcpiDmDumpDataTable( madt ); entry = madt + 44; @@ -212,7 +212,7 @@ acpi_std_ops(int32 op,...) parameter.Count = 1; parameter.Pointer = &arg; - + AcpiEvaluateObject(NULL, "\\_PIC", ¶meter, NULL); flags = acpiAvoidFullInit ? @@ -617,6 +617,14 @@ get_current_resources(acpi_handle busDeviceHandle, acpi_data *retBuffer) } +status_t +get_possible_resources(acpi_handle busDeviceHandle, acpi_data *retBuffer) +{ + return AcpiGetPossibleResources(busDeviceHandle, (ACPI_BUFFER*)retBuffer) + == AE_OK ? B_OK : B_ERROR; +} + + status_t prepare_sleep_state(uint8 state, void (*wakeFunc)(void), size_t size) { @@ -732,6 +740,7 @@ struct acpi_module_info gACPIModule = { evaluate_method, get_irq_routing_table, get_current_resources, + get_possible_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 836528efe5..d8b80d8908 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_module.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_module.c @@ -216,6 +216,7 @@ static struct acpi_root_info sACPIRootModule = { evaluate_method, get_irq_routing_table, get_current_resources, + get_possible_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 ce5d6db2a8..d328048e1d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h @@ -123,6 +123,8 @@ typedef struct acpi_root_info { acpi_data *retBuffer); status_t (*get_current_resources)(acpi_handle busDeviceHandle, acpi_data *retBuffer); + status_t (*get_possible_resources)(acpi_handle busDeviceHandle, + acpi_data *retBuffer); /* Power state setting */ @@ -196,6 +198,8 @@ 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 get_possible_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);