- Add some more acpi function to the acpi module and acpi device module. Need this functions for the embedded controller and battery driver.

- Now also use the acpi handle to call a function and not use the path to get a handle and then call the function.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31101 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Clemens Zeidler
2009-06-18 18:18:40 +00:00
parent f208695cc1
commit 5f6906e1eb
6 changed files with 417 additions and 91 deletions
+166 -49
View File
@@ -15,55 +15,30 @@ typedef struct acpi_object_type acpi_object_type;
#define B_ACPI_MODULE_NAME "bus_managers/acpi/v1" #define B_ACPI_MODULE_NAME "bus_managers/acpi/v1"
struct acpi_module_info { /* This must be uint64 for 64 bit! */
module_info info; typedef uint32 acpi_physical_address;
typedef uint32 acpi_io_address;
/* Fixed Event Management */ typedef uint32 acpi_size;
void (*enable_fixed_event)(uint32 event);
void (*disable_fixed_event)(uint32 event);
uint32 (*fixed_event_status) (uint32 event);
/* Returns 1 if event set, 0 otherwise */
void (*reset_fixed_event) (uint32 event);
status_t (*install_fixed_event_handler)(uint32 event,
interrupt_handler *handler, void *data);
status_t (*remove_fixed_event_handler)(uint32 event,
interrupt_handler *handler);
/* Namespace Access */
status_t (*get_next_entry)(uint32 objectType, const char *base,
char *result, size_t length, void **_counter);
status_t (*get_device)(const char *hid, uint32 index, char *result,
size_t resultLength);
status_t (*get_device_hid)(const char *path, char *hid, size_t hidLength);
uint32 (*get_object_type)(const char *path);
status_t (*get_object)(const char *path,
acpi_object_type **_returnValue);
status_t (*get_object_typed)(const char *path,
acpi_object_type **_returnValue, uint32 objectType);
/* Control method execution and data acquisition */
status_t (*evaluate_object)(const char *object,
acpi_object_type *returnValue, size_t bufferLength);
status_t (*evaluate_method)(const char *object, const char *method,
acpi_object_type *returnValue, size_t bufferLength,
acpi_object_type *args, int numArgs);
/* Power state setting */
status_t (*prepare_sleep_state)(uint8 state, void (*wakeFunc)(void),
size_t size);
status_t (*enter_sleep_state)(uint8 state);
};
/* Actually a ptr to a NS Node */
typedef void * acpi_handle;
#ifndef __ACTYPES_H__ #ifndef __ACTYPES_H__
/* Address Space (Operation Region) Types */
enum {
ACPI_ADR_SPACE_SYSTEM_MEMORY = 0,
ACPI_ADR_SPACE_SYSTEM_IO = 1,
ACPI_ADR_SPACE_PCI_CONFIG = 2,
ACPI_ADR_SPACE_EC = 3,
ACPI_ADR_SPACE_SMBUS = 4,
ACPI_ADR_SPACE_CMOS = 5,
ACPI_ADR_SPACE_PCI_BAR_TARGET = 6,
ACPI_ADR_SPACE_DATA_TABLE = 7,
ACPI_ADR_SPACE_FIXED_HARDWARE = 127
};
/* ACPI fixed event types */ /* ACPI fixed event types */
enum { enum {
@@ -91,7 +66,8 @@ enum {
ACPI_TYPE_POWER, ACPI_TYPE_POWER,
ACPI_TYPE_PROCESSOR, ACPI_TYPE_PROCESSOR,
ACPI_TYPE_THERMAL, ACPI_TYPE_THERMAL,
ACPI_TYPE_BUFFER_FIELD ACPI_TYPE_BUFFER_FIELD,
ACPI_TYPE_LOCAL_REFERENCE = 0x14
}; };
/* ACPI control method arg type */ /* ACPI control method arg type */
@@ -112,6 +88,12 @@ struct acpi_object_type {
uint32 count; uint32 count;
acpi_object_type *objects; acpi_object_type *objects;
} package; } package;
struct
{
uint32 type;
uint32 actual_type;
acpi_handle handle;
} reference;
struct { struct {
uint32 cpu_id; uint32 cpu_id;
int pblk_address; int pblk_address;
@@ -124,8 +106,127 @@ struct acpi_object_type {
} data; } data;
}; };
/*
* List of objects, used as a parameter list for control method evaluation
*/
typedef struct acpi_objects {
uint32 count;
acpi_object_type *pointer;
} acpi_objects;
typedef struct acpi_data {
acpi_size length; /* Length in bytes of the buffer */
void *pointer; /* pointer to buffer */
} acpi_data;
enum {
ACPI_ALLOCATE_BUFFER = -1,
};
#endif // __ACTYPES_H__ #endif // __ACTYPES_H__
typedef uint32 (*acpi_event_handler)(void *Context);
typedef status_t (*acpi_adr_space_handler)(uint32 function,
acpi_physical_address address, uint32 bitWidth, int *value,
void *handlerContext, void *regionContext);
typedef status_t (*acpi_adr_space_setup)(acpi_handle regionHandle,
uint32 function, void *handlerContext, void **regionContext);
typedef void (*acpi_notify_handler)(acpi_handle device, uint32 value,
void *context);
struct acpi_module_info {
module_info info;
status_t (*get_handle)(acpi_handle parent, char *pathname,
acpi_handle *retHandle);
/* Global Lock */
status_t (*acquire_global_lock)(uint16 timeout, uint32 *handle);
status_t (*release_global_lock)(uint32 handle);
/* Notify Handler */
status_t (*install_notify_handler)(acpi_handle device,
uint32 handlerType, acpi_notify_handler handler,
void *context);
status_t (*remove_notify_handler)(acpi_handle device,
uint32 handlerType, acpi_notify_handler handler);
/* GPE Handler */
status_t (*enable_gpe)(acpi_handle handle, uint32 gpeNumber,
uint32 flags);
status_t (*set_gpe_type)(acpi_handle handle, uint32 gpeNumber,
uint8 type);
status_t (*install_gpe_handler)(acpi_handle handle, uint32 gpeNumber,
uint32 type, acpi_event_handler handler, void *data);
status_t (*remove_gpe_handler)(acpi_handle handle, uint32 gpeNumber,
acpi_event_handler address);
/* Address Space Handler */
status_t (*install_address_space_handler)(acpi_handle handle,
uint32 spaceId,
acpi_adr_space_handler handler,
acpi_adr_space_setup setup, void *data);
status_t (*remove_address_space_handler)(acpi_handle handle,
uint32 spaceId,
acpi_adr_space_handler handler);
/* Fixed Event Management */
void (*enable_fixed_event)(uint32 event);
void (*disable_fixed_event)(uint32 event);
uint32 (*fixed_event_status) (uint32 event);
/* Returns 1 if event set, 0 otherwise */
void (*reset_fixed_event) (uint32 event);
status_t (*install_fixed_event_handler)(uint32 event,
interrupt_handler *handler, void *data);
status_t (*remove_fixed_event_handler)(uint32 event,
interrupt_handler *handler);
/* Namespace Access */
status_t (*get_next_entry)(uint32 objectType, const char *base,
char *result, size_t length, void **_counter);
status_t (*get_device)(const char *hid, uint32 index, char *result,
size_t resultLength);
status_t (*get_device_hid)(const char *path, char *hid,
size_t hidLength);
uint32 (*get_object_type)(const char *path);
status_t (*get_object)(const char *path,
acpi_object_type **_returnValue);
status_t (*get_object_typed)(const char *path,
acpi_object_type **_returnValue, uint32 objectType);
/* Control method execution and data acquisition */
status_t (*evaluate_object)(const char* object,
acpi_object_type *returnValue, size_t bufferLength);
status_t (*evaluate_method)(acpi_handle handle, const char *method,
acpi_objects *args, acpi_data *returnValue);
/* Power state setting */
status_t (*prepare_sleep_state)(uint8 state, void (*wakeFunc)(void),
size_t size);
status_t (*enter_sleep_state)(uint8 state);
};
/* Sleep states */ /* Sleep states */
enum { enum {
@@ -143,12 +244,29 @@ enum {
#define ACPI_DEVICE_TYPE_ITEM "acpi/type" #define ACPI_DEVICE_TYPE_ITEM "acpi/type"
typedef struct acpi_device_info *acpi_device; typedef struct acpi_device_cookie *acpi_device;
// Interface to one ACPI device. // Interface to one ACPI device.
typedef struct acpi_device_module_info { typedef struct acpi_device_module_info {
driver_module_info info; driver_module_info info;
/* Notify Handler */
status_t (*install_notify_handler)(acpi_device device,
uint32 handlerType, acpi_notify_handler handler,
void *context);
status_t (*remove_notify_handler)(acpi_device device,
uint32 handlerType, acpi_notify_handler handler);
/* Address Space Handler */
status_t (*install_address_space_handler)(acpi_device device,
uint32 spaceId,
acpi_adr_space_handler handler,
acpi_adr_space_setup setup, void *data);
status_t (*remove_address_space_handler)(acpi_device device,
uint32 spaceId,
acpi_adr_space_handler handler);
/* Namespace Access */ /* Namespace Access */
uint32 (*get_object_type)(acpi_device device); uint32 (*get_object_type)(acpi_device device);
status_t (*get_object)(acpi_device device, const char *path, status_t (*get_object)(acpi_device device, const char *path,
@@ -156,8 +274,7 @@ typedef struct acpi_device_module_info {
/* Control method execution and data acquisition */ /* Control method execution and data acquisition */
status_t (*evaluate_method)(acpi_device device, const char *method, status_t (*evaluate_method)(acpi_device device, const char *method,
acpi_object_type *returnValue, size_t bufferLength, acpi_objects *args, acpi_data *returnValue);
acpi_object_type *args, int numArgs);
} acpi_device_module_info; } acpi_device_module_info;
@@ -1,4 +1,5 @@
/* /*
* Copyright 2009, Clemens Zeidler, [email protected]
* Copyright 2008, Axel Dörfler, [email protected]. * Copyright 2008, Axel Dörfler, [email protected].
* Copyright 2006, Bryan Varner. All rights reserved. * Copyright 2006, Bryan Varner. All rights reserved.
* Copyright 2005, Nathan Whitehorn. All rights reserved. * Copyright 2005, Nathan Whitehorn. All rights reserved.
@@ -171,6 +172,98 @@ acpi_std_ops(int32 op,...)
} }
status_t
get_handle(acpi_handle parent, char *pathname, acpi_handle *retHandle)
{
return AcpiGetHandle(parent, pathname, retHandle) == AE_OK
? B_OK : B_ERROR;
}
status_t
acquire_global_lock(uint16 timeout, uint32 *handle)
{
return AcpiAcquireGlobalLock(timeout, (UINT32*)handle) == AE_OK
? B_OK : B_ERROR;
}
status_t
release_global_lock(uint32 handle)
{
return AcpiReleaseGlobalLock(handle) == AE_OK ? B_OK : B_ERROR;
}
status_t
install_notify_handler(acpi_handle device, uint32 handlerType,
acpi_notify_handler handler, void *context)
{
return AcpiInstallNotifyHandler(device, handlerType,
(ACPI_NOTIFY_HANDLER)handler, context) == AE_OK ? B_OK : B_ERROR;
}
status_t
remove_notify_handler(acpi_handle device, uint32 handlerType,
acpi_notify_handler handler)
{
return AcpiRemoveNotifyHandler(device, handlerType,
(ACPI_NOTIFY_HANDLER)handler) == AE_OK ? B_OK : B_ERROR;
}
status_t
enable_gpe(acpi_handle handle, uint32 gpeNumber, uint32 flags)
{
return AcpiEnableGpe(handle, gpeNumber, flags) == AE_OK ? B_OK : B_ERROR;
}
status_t
set_gpe_type(acpi_handle handle, uint32 gpeNumber, uint8 type)
{
return AcpiSetGpeType(handle, gpeNumber, type) == AE_OK ? B_OK : B_ERROR;
}
status_t
install_gpe_handler(acpi_handle handle, uint32 gpeNumber, uint32 type,
acpi_event_handler handler, void *data)
{
return AcpiInstallGpeHandler(handle, gpeNumber, type,
(ACPI_EVENT_HANDLER)handler, data) == AE_OK ? B_OK : B_ERROR;
}
status_t
remove_gpe_handler(acpi_handle handle, uint32 gpeNumber,
acpi_event_handler address)
{
return AcpiRemoveGpeHandler(handle, gpeNumber, (ACPI_EVENT_HANDLER)address)
== AE_OK ? B_OK : B_ERROR;
}
status_t
install_address_space_handler(acpi_handle handle, uint32 spaceId,
acpi_adr_space_handler handler, acpi_adr_space_setup setup, void *data)
{
return AcpiInstallAddressSpaceHandler(handle, spaceId,
(ACPI_ADR_SPACE_HANDLER)handler, (ACPI_ADR_SPACE_SETUP)setup, data)
== AE_OK ? B_OK : B_ERROR;
}
status_t
remove_address_space_handler(acpi_handle handle, uint32 spaceId,
acpi_adr_space_handler handler)
{
return AcpiRemoveAddressSpaceHandler(handle, spaceId,
(ACPI_ADR_SPACE_HANDLER)handler) == AE_OK ? B_OK : B_ERROR;
}
void void
enable_fixed_event(uint32 event) enable_fixed_event(uint32 event)
{ {
@@ -391,29 +484,16 @@ evaluate_object(const char* object, acpi_object_type* returnValue,
status_t status_t
evaluate_method(const char* object, const char* method, evaluate_method(acpi_handle handle, const char* method,
acpi_object_type *returnValue, size_t bufferLength, acpi_object_type *args, acpi_objects *args, acpi_data *returnValue)
int numArgs)
{ {
ACPI_BUFFER buffer;
ACPI_STATUS status; ACPI_STATUS status;
ACPI_OBJECT_LIST acpiArgs;
ACPI_HANDLE handle;
if (AcpiGetHandle(NULL, (ACPI_STRING)object, &handle) != AE_OK)
return B_ENTRY_NOT_FOUND;
buffer.Pointer = returnValue;
buffer.Length = bufferLength;
acpiArgs.Count = numArgs;
acpiArgs.Pointer = (ACPI_OBJECT *)args;
status = AcpiEvaluateObject(handle, (ACPI_STRING)method, status = AcpiEvaluateObject(handle, (ACPI_STRING)method,
args != NULL ? &acpiArgs : NULL, returnValue != NULL ? &buffer : NULL); (ACPI_OBJECT_LIST*)args, (ACPI_BUFFER*)returnValue);
if (status == AE_BUFFER_OVERFLOW) if (status == AE_BUFFER_OVERFLOW)
dprintf("evaluate_method: the passed buffer is too small!\n"); dprintf("evaluate_method: the passed buffer is too small!\n");
return status == AE_OK ? B_OK : B_ERROR; return status == AE_OK ? B_OK : B_ERROR;
} }
@@ -475,6 +555,17 @@ struct acpi_module_info gACPIModule = {
acpi_std_ops acpi_std_ops
}, },
get_handle,
acquire_global_lock,
release_global_lock,
install_notify_handler,
remove_notify_handler,
enable_gpe,
set_gpe_type,
install_gpe_handler,
remove_gpe_handler,
install_address_space_handler,
remove_address_space_handler,
enable_fixed_event, enable_fixed_event,
disable_fixed_event, disable_fixed_event,
fixed_event_status, fixed_event_status,
@@ -1,4 +1,5 @@
/* /*
* Copyright 2009, Clemens Zeidler. All rights reserved.
* Copyright 2006, Jérôme Duval. All rights reserved. * Copyright 2006, Jérôme Duval. All rights reserved.
* *
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
@@ -9,15 +10,40 @@
#include <stdlib.h> #include <stdlib.h>
#include "acpi_priv.h" #include "acpi_priv.h"
#include "acpi.h"
// information about one ACPI device
typedef struct acpi_device_info {
char *path; // path
uint32 type; // type
device_node *node;
char name[32]; // name (for fast log)
} acpi_device_info;
static status_t
acpi_install_notify_handler(acpi_device device, uint32 handlerType,
acpi_notify_handler handler, void *context)
{
return install_notify_handler(device->handle, handlerType, handler,
context);
}
static status_t
acpi_remove_notify_handler(acpi_device device, uint32 handlerType,
acpi_notify_handler handler)
{
return remove_notify_handler(device->handle, handlerType, handler);
}
static status_t
acpi_install_address_space_handler(acpi_device device, uint32 spaceId,
acpi_adr_space_handler handler, acpi_adr_space_setup setup, void *data)
{
return install_address_space_handler(device->handle, spaceId, handler,
setup, data);
}
static status_t
acpi_remove_address_space_handler(acpi_device device, uint32 spaceId,
acpi_adr_space_handler handler)
{
return remove_address_space_handler(device->handle, spaceId, handler);
}
static uint32 static uint32
acpi_get_object_type(acpi_device device) acpi_get_object_type(acpi_device device)
@@ -39,18 +65,19 @@ acpi_get_object(acpi_device device, const char *path, acpi_object_type **return_
static status_t static status_t
acpi_evaluate_method(acpi_device device, const char *method, acpi_object_type *return_value, acpi_evaluate_method(acpi_device device, const char *method,
size_t buf_len, acpi_object_type *args, int num_args) acpi_objects *args, acpi_data *returnValue)
{ {
return evaluate_method(device->path, method, return_value, buf_len, args, num_args); return evaluate_method(device->handle, method, args, returnValue);
} }
static status_t static status_t
acpi_device_init_driver(device_node *node, void **cookie) acpi_device_init_driver(device_node *node, void **cookie)
{ {
ACPI_HANDLE handle;
const char *path; const char *path;
acpi_device_info *device; acpi_device_cookie *device;
status_t status = B_OK; status_t status = B_OK;
uint32 type; uint32 type;
@@ -62,9 +89,13 @@ acpi_device_init_driver(device_node *node, void **cookie)
device = malloc(sizeof(*device)); device = malloc(sizeof(*device));
if (device == NULL) if (device == NULL)
return B_NO_MEMORY; return B_NO_MEMORY;
memset(device, 0, sizeof(*device)); memset(device, 0, sizeof(*device));
if (AcpiGetHandle(NULL, (ACPI_STRING)path, &handle) != AE_OK)
return B_ENTRY_NOT_FOUND;
device->handle = handle;
device->path = strdup(path); device->path = strdup(path);
device->type = type; device->type = type;
device->node = node; device->node = node;
@@ -81,7 +112,7 @@ acpi_device_init_driver(device_node *node, void **cookie)
static void static void
acpi_device_uninit_driver(void *cookie) acpi_device_uninit_driver(void *cookie)
{ {
acpi_device_info *device = cookie; acpi_device_cookie *device = cookie;
free(device->path); free(device->path);
free(device); free(device);
@@ -100,6 +131,7 @@ acpi_device_std_ops(int32 op, ...)
return B_BAD_VALUE; return B_BAD_VALUE;
} }
acpi_device_module_info gACPIDeviceModule = { acpi_device_module_info gACPIDeviceModule = {
{ {
{ {
@@ -116,6 +148,10 @@ acpi_device_module_info gACPIDeviceModule = {
NULL, // rescan devices NULL, // rescan devices
NULL, // device removed NULL, // device removed
}, },
acpi_install_notify_handler,
acpi_remove_notify_handler,
acpi_install_address_space_handler,
acpi_remove_address_space_handler,
acpi_get_object_type, acpi_get_object_type,
acpi_get_object, acpi_get_object,
acpi_evaluate_method, acpi_evaluate_method,
@@ -1,4 +1,5 @@
/* /*
* Copyright 2009, Clemens Zeidler. All rights reserved.
* Copyright 2006, Jérôme Duval. All rights reserved. * Copyright 2006, Jérôme Duval. All rights reserved.
* *
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
@@ -22,7 +23,6 @@
device_manager_info *gDeviceManager = NULL; device_manager_info *gDeviceManager = NULL;
pci_module_info *gPCIManager = NULL; pci_module_info *gPCIManager = NULL;
dpc_module_info *gDPC = NULL;
module_dependency module_dependencies[] = { module_dependency module_dependencies[] = {
{B_DEVICE_MANAGER_MODULE_NAME, (module_info **)&gDeviceManager}, {B_DEVICE_MANAGER_MODULE_NAME, (module_info **)&gDeviceManager},
@@ -217,6 +217,17 @@ static struct acpi_root_info sACPIRootModule = {
NULL, // device removed NULL, // device removed
}, },
get_handle,
acquire_global_lock,
release_global_lock,
install_notify_handler,
remove_notify_handler,
enable_gpe,
set_gpe_type,
install_gpe_handler,
remove_gpe_handler,
install_address_space_handler,
remove_address_space_handler,
enable_fixed_event, enable_fixed_event,
disable_fixed_event, disable_fixed_event,
fixed_event_status, fixed_event_status,
@@ -1,10 +1,14 @@
/* /*
* Copyright 2009, Clemens Zeidler. All rights reserved.
* Copyright 2006, Jérôme Duval. All rights reserved. * Copyright 2006, Jérôme Duval. All rights reserved.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
#ifndef __ACPI_PRIV_H__ #ifndef __ACPI_PRIV_H__
#define __ACPI_PRIV_H__ #define __ACPI_PRIV_H__
#include <sys/cdefs.h>
__BEGIN_DECLS
#include <device_manager.h> #include <device_manager.h>
#include <KernelExport.h> #include <KernelExport.h>
#include <ACPI.h> #include <ACPI.h>
@@ -21,11 +25,56 @@
extern device_manager_info *gDeviceManager; extern device_manager_info *gDeviceManager;
// information about one ACPI device
typedef struct acpi_device_cookie {
char *path; // path
acpi_handle handle;
uint32 type; // type
device_node *node;
char name[32]; // name (for fast log)
} acpi_device_cookie;
// ACPI root. // ACPI root.
typedef struct acpi_root_info { typedef struct acpi_root_info {
driver_module_info info; driver_module_info info;
status_t (*get_handle)(acpi_handle parent, char *pathname,
acpi_handle *retHandle);
/* Global Lock */
status_t (*acquire_global_lock)(uint16 timeout, uint32 *handle);
status_t (*release_global_lock)(uint32 handle);
/* Notify Handler */
status_t (*install_notify_handler)(acpi_handle device,
uint32 handlerType, acpi_notify_handler handler,
void *context);
status_t (*remove_notify_handler)(acpi_handle device,
uint32 handlerType, acpi_notify_handler handler);
/* GPE Handler */
status_t (*enable_gpe)(acpi_handle handle, uint32 gpeNumber,
uint32 flags);
status_t (*set_gpe_type)(acpi_handle handle, uint32 gpeNumber,
uint8 type);
status_t (*install_gpe_handler)(acpi_handle handle, uint32 gpeNumber,
uint32 type, acpi_event_handler handler, void *data);
status_t (*remove_gpe_handler)(acpi_handle handle, uint32 gpeNumber,
acpi_event_handler address);
/* Address Space Handler */
status_t (*install_address_space_handler)(acpi_handle handle,
uint32 spaceId,
acpi_adr_space_handler handler,
acpi_adr_space_setup setup, void *data);
status_t (*remove_address_space_handler)(acpi_handle handle,
uint32 spaceId,
acpi_adr_space_handler handler);
/* Fixed Event Management */ /* Fixed Event Management */
void (*enable_fixed_event) (uint32 event); void (*enable_fixed_event) (uint32 event);
@@ -56,11 +105,10 @@ typedef struct acpi_root_info {
/* Control method execution and data acquisition */ /* Control method execution and data acquisition */
status_t (*evaluate_object)(const char *object, status_t (*evaluate_object)(const char* object,
acpi_object_type *returnValue, size_t bufferLength); acpi_object_type *returnValue, size_t bufferLength);
status_t (*evaluate_method)(const char *object, const char *method, status_t (*evaluate_method)(acpi_handle handle, const char *method,
acpi_object_type *returnValue, size_t bufferLength, acpi_objects *args, acpi_data *returnValue);
acpi_object_type *args, int numArgs);
} acpi_root_info; } acpi_root_info;
@@ -71,6 +119,28 @@ extern struct device_module_info acpi_ns_dump_module;
extern acpi_device_module_info gACPIDeviceModule; extern acpi_device_module_info gACPIDeviceModule;
status_t get_handle(acpi_handle parent, char *pathname, acpi_handle *retHandle);
status_t acquire_global_lock(uint16 timeout, uint32 *handle);
status_t release_global_lock(uint32 handle);
status_t install_notify_handler(acpi_handle device, uint32 handlerType,
acpi_notify_handler handler, void *context);
status_t remove_notify_handler(acpi_handle device, uint32 handlerType,
acpi_notify_handler handler);
status_t enable_gpe(acpi_handle handle, uint32 gpeNumber, uint32 flags);
status_t set_gpe_type(acpi_handle handle, uint32 gpeNumber, uint8 type);
status_t install_gpe_handler(acpi_handle handle, uint32 gpeNumber, uint32 type,
acpi_event_handler handler, void *data);
status_t remove_gpe_handler(acpi_handle handle, uint32 gpeNumber,
acpi_event_handler address);
status_t install_address_space_handler(acpi_handle handle, uint32 spaceId,
acpi_adr_space_handler handler, acpi_adr_space_setup setup, void *data);
status_t remove_address_space_handler(acpi_handle handle, uint32 spaceId,
acpi_adr_space_handler handler);
void enable_fixed_event(uint32 event); void enable_fixed_event(uint32 event);
void disable_fixed_event(uint32 event); void disable_fixed_event(uint32 event);
@@ -92,10 +162,11 @@ status_t get_object(const char *path, acpi_object_type **return_value);
status_t get_object_typed(const char *path, acpi_object_type **return_value, status_t get_object_typed(const char *path, acpi_object_type **return_value,
uint32 object_type); uint32 object_type);
status_t evaluate_object(const char *object, acpi_object_type *returnValue, status_t evaluate_object(const char* object, acpi_object_type *returnValue,
size_t bufferLength); size_t bufferLength);
status_t evaluate_method(const char *object, const char *method, status_t evaluate_method(acpi_handle handle, const char *method,
acpi_object_type *returnValue, size_t bufferLength, acpi_object_type *args, acpi_objects *args, acpi_data *returnValue);
int numArgs);
__END_DECLS
#endif /* __ACPI_PRIV_H__ */ #endif /* __ACPI_PRIV_H__ */
@@ -125,14 +125,14 @@
#include <unistd.h> #include <unistd.h>
#include <sys/time.h> #include <sys/time.h>
#include <OS.h> #include <OS.h>
#ifdef _KERNEL_MODE #ifdef _KERNEL_MODE
#include <KernelExport.h> #include <KernelExport.h>
#include <vm.h> #include <vm.h>
#include <PCI.h> #include <PCI.h>
extern pci_module_info *gPCIManager; extern pci_module_info *gPCIManager;
#include <dpc.h> #include <dpc.h>
extern dpc_module_info *gDPC; dpc_module_info *gDPC = NULL;
extern void *gDPCHandle; extern void *gDPCHandle;
#endif #endif