From 2645ca0a28fdab77c70f8a5dbcb6fff6d1dd7df8 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Wed, 11 May 2011 08:22:22 +0000 Subject: [PATCH] Provide a function to gain ACPI table access. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41429 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/drivers/ACPI.h | 6 +++++- src/add-ons/kernel/bus_managers/acpi/acpi_busman.c | 11 ++++++++++- src/add-ons/kernel/bus_managers/acpi/acpi_module.c | 3 ++- src/add-ons/kernel/bus_managers/acpi/acpi_priv.h | 6 ++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/headers/os/drivers/ACPI.h b/headers/os/drivers/ACPI.h index 1d09820540..335d914695 100644 --- a/headers/os/drivers/ACPI.h +++ b/headers/os/drivers/ACPI.h @@ -234,7 +234,7 @@ struct acpi_module_info { status_t (*evaluate_method)(acpi_handle handle, const char *method, acpi_objects *args, acpi_data *returnValue); - /* Resource info */ + /* Resource Management */ status_t (*get_irq_routing_table)(acpi_handle busDeviceHandle, acpi_data *retBuffer); @@ -251,6 +251,10 @@ struct acpi_module_info { size_t size); status_t (*enter_sleep_state)(uint8 state); status_t (*reboot)(void); + + /* Table Access */ + status_t (*get_table)(char *signature, uint32 instance, + void **tableHeader); }; 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 2512e3c0bb..b34cddd159 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c @@ -713,6 +713,14 @@ reboot(void) } +status_t +get_table(char* signature, uint32 instance, void** tableHeader) +{ + return AcpiGetTable(signature, instance, (ACPI_TABLE_HEADER**)tableHeader) + == AE_OK ? B_OK : B_ERROR; +} + + struct acpi_module_info gACPIModule = { { B_ACPI_MODULE_NAME, @@ -752,5 +760,6 @@ struct acpi_module_info gACPIModule = { set_current_resources, prepare_sleep_state, enter_sleep_state, - reboot + reboot, + get_table }; 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 2d86f517a9..b4a384c7de 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_module.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_module.c @@ -219,7 +219,8 @@ static struct acpi_root_info sACPIRootModule = { set_current_resources, prepare_sleep_state, enter_sleep_state, - reboot + reboot, + get_table }; 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 cb5c833568..3722229186 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h @@ -134,6 +134,10 @@ typedef struct acpi_root_info { size_t size); status_t (*enter_sleep_state)(uint8 state); status_t (*reboot)(void); + + /* Table Access */ + status_t (*get_table)(char *signature, uint32 instance, + void **tableHeader); } acpi_root_info; @@ -211,6 +215,8 @@ status_t enter_sleep_state(uint8 state); status_t reboot(void); +status_t get_table(char* signature, uint32 instance, void** tableHeader); + __END_DECLS