[Haiku-commits] r31101 - in haiku/trunk: headers/os/drivers src/add-ons/kernel/bus_managers/acpi
czeidler at mail.berlios.de
czeidler at mail.berlios.de
Thu Jun 18 20:18:57 CEST 2009
Author: czeidler
Date: 2009-06-18 20:18:40 +0200 (Thu, 18 Jun 2009)
New Revision: 31101
ViewCVS: http://svn.berlios.de/viewcvs/haiku?rev=31101&view=rev
Modified:
haiku/trunk/headers/os/drivers/ACPI.h
haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c
haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_device.c
haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_module.c
haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h
haiku/trunk/src/add-ons/kernel/bus_managers/acpi/oshaiku.c
Log:
- 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.
Modified: haiku/trunk/headers/os/drivers/ACPI.h
===================================================================
--- haiku/trunk/headers/os/drivers/ACPI.h 2009-06-18 17:57:37 UTC (rev 31100)
+++ haiku/trunk/headers/os/drivers/ACPI.h 2009-06-18 18:18:40 UTC (rev 31101)
@@ -15,55 +15,30 @@
#define B_ACPI_MODULE_NAME "bus_managers/acpi/v1"
-struct acpi_module_info {
- module_info info;
+/* This must be uint64 for 64 bit! */
+typedef uint32 acpi_physical_address;
+typedef uint32 acpi_io_address;
+typedef uint32 acpi_size;
- /* Fixed Event Management */
+/* Actually a ptr to a NS Node */
+typedef void * acpi_handle;
- void (*enable_fixed_event)(uint32 event);
- void (*disable_fixed_event)(uint32 event);
+#ifndef __ACTYPES_H__
- uint32 (*fixed_event_status) (uint32 event);
- /* Returns 1 if event set, 0 otherwise */
- void (*reset_fixed_event) (uint32 event);
+/* Address Space (Operation Region) Types */
- 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);
+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
};
-
-#ifndef __ACTYPES_H__
-
/* ACPI fixed event types */
enum {
@@ -91,7 +66,8 @@
ACPI_TYPE_POWER,
ACPI_TYPE_PROCESSOR,
ACPI_TYPE_THERMAL,
- ACPI_TYPE_BUFFER_FIELD
+ ACPI_TYPE_BUFFER_FIELD,
+ ACPI_TYPE_LOCAL_REFERENCE = 0x14
};
/* ACPI control method arg type */
@@ -112,6 +88,12 @@
uint32 count;
acpi_object_type *objects;
} package;
+ struct
+ {
+ uint32 type;
+ uint32 actual_type;
+ acpi_handle handle;
+ } reference;
struct {
uint32 cpu_id;
int pblk_address;
@@ -124,8 +106,127 @@
} 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__
+
+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 */
enum {
@@ -143,12 +244,29 @@
#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.
typedef struct acpi_device_module_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 */
uint32 (*get_object_type)(acpi_device device);
status_t (*get_object)(acpi_device device, const char *path,
@@ -156,8 +274,7 @@
/* Control method execution and data acquisition */
status_t (*evaluate_method)(acpi_device device, const char *method,
- acpi_object_type *returnValue, size_t bufferLength,
- acpi_object_type *args, int numArgs);
+ acpi_objects *args, acpi_data *returnValue);
} acpi_device_module_info;
Modified: haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c
===================================================================
--- haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c 2009-06-18 17:57:37 UTC (rev 31100)
+++ haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c 2009-06-18 18:18:40 UTC (rev 31101)
@@ -1,4 +1,5 @@
/*
+ * Copyright 2009, Clemens Zeidler, haiku at clemens-zeidler.de
* Copyright 2008, Axel Dörfler, axeld at pinc-software.de.
* Copyright 2006, Bryan Varner. All rights reserved.
* Copyright 2005, Nathan Whitehorn. All rights reserved.
@@ -171,6 +172,98 @@
}
+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
enable_fixed_event(uint32 event)
{
@@ -391,29 +484,16 @@
status_t
-evaluate_method(const char* object, const char* method,
- acpi_object_type *returnValue, size_t bufferLength, acpi_object_type *args,
- int numArgs)
+evaluate_method(acpi_handle handle, const char* method,
+ acpi_objects *args, acpi_data *returnValue)
{
- ACPI_BUFFER buffer;
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,
- args != NULL ? &acpiArgs : NULL, returnValue != NULL ? &buffer : NULL);
+ (ACPI_OBJECT_LIST*)args, (ACPI_BUFFER*)returnValue);
if (status == AE_BUFFER_OVERFLOW)
dprintf("evaluate_method: the passed buffer is too small!\n");
-
+
return status == AE_OK ? B_OK : B_ERROR;
}
@@ -475,6 +555,17 @@
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,
disable_fixed_event,
fixed_event_status,
Modified: haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_device.c
===================================================================
--- haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_device.c 2009-06-18 17:57:37 UTC (rev 31100)
+++ haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_device.c 2009-06-18 18:18:40 UTC (rev 31101)
@@ -1,4 +1,5 @@
/*
+ * Copyright 2009, Clemens Zeidler. All rights reserved.
* Copyright 2006, Jérôme Duval. All rights reserved.
*
* Distributed under the terms of the MIT License.
@@ -9,16 +10,41 @@
#include <stdlib.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
acpi_get_object_type(acpi_device device)
{
@@ -39,18 +65,19 @@
static status_t
-acpi_evaluate_method(acpi_device device, const char *method, acpi_object_type *return_value,
- size_t buf_len, acpi_object_type *args, int num_args)
+acpi_evaluate_method(acpi_device device, const char *method,
+ 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
acpi_device_init_driver(device_node *node, void **cookie)
{
+ ACPI_HANDLE handle;
const char *path;
- acpi_device_info *device;
+ acpi_device_cookie *device;
status_t status = B_OK;
uint32 type;
@@ -62,9 +89,13 @@
device = malloc(sizeof(*device));
if (device == NULL)
return B_NO_MEMORY;
-
+
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->type = type;
device->node = node;
@@ -81,7 +112,7 @@
static void
acpi_device_uninit_driver(void *cookie)
{
- acpi_device_info *device = cookie;
+ acpi_device_cookie *device = cookie;
free(device->path);
free(device);
@@ -100,6 +131,7 @@
return B_BAD_VALUE;
}
+
acpi_device_module_info gACPIDeviceModule = {
{
{
@@ -116,6 +148,10 @@
NULL, // rescan devices
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,
acpi_evaluate_method,
Modified: haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_module.c
===================================================================
--- haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_module.c 2009-06-18 17:57:37 UTC (rev 31100)
+++ haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_module.c 2009-06-18 18:18:40 UTC (rev 31101)
@@ -1,4 +1,5 @@
/*
+ * Copyright 2009, Clemens Zeidler. All rights reserved.
* Copyright 2006, Jérôme Duval. All rights reserved.
*
* Distributed under the terms of the MIT License.
@@ -22,7 +23,6 @@
device_manager_info *gDeviceManager = NULL;
pci_module_info *gPCIManager = NULL;
-dpc_module_info *gDPC = NULL;
module_dependency module_dependencies[] = {
{B_DEVICE_MANAGER_MODULE_NAME, (module_info **)&gDeviceManager},
@@ -217,6 +217,17 @@
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,
disable_fixed_event,
fixed_event_status,
Modified: haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h
===================================================================
--- haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h 2009-06-18 17:57:37 UTC (rev 31100)
+++ haiku/trunk/src/add-ons/kernel/bus_managers/acpi/acpi_priv.h 2009-06-18 18:18:40 UTC (rev 31101)
@@ -1,10 +1,14 @@
/*
+ * Copyright 2009, Clemens Zeidler. All rights reserved.
* Copyright 2006, Jérôme Duval. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef __ACPI_PRIV_H__
#define __ACPI_PRIV_H__
+#include <sys/cdefs.h>
+__BEGIN_DECLS
+
#include <device_manager.h>
#include <KernelExport.h>
#include <ACPI.h>
@@ -21,11 +25,56 @@
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.
typedef struct acpi_root_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 */
void (*enable_fixed_event) (uint32 event);
@@ -56,11 +105,10 @@
/* 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);
- status_t (*evaluate_method)(const char *object, const char *method,
- acpi_object_type *returnValue, size_t bufferLength,
- acpi_object_type *args, int numArgs);
+ status_t (*evaluate_method)(acpi_handle handle, const char *method,
+ acpi_objects *args, acpi_data *returnValue);
} acpi_root_info;
@@ -71,6 +119,28 @@
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 disable_fixed_event(uint32 event);
@@ -92,10 +162,11 @@
status_t get_object_typed(const char *path, acpi_object_type **return_value,
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);
-status_t evaluate_method(const char *object, const char *method,
- acpi_object_type *returnValue, size_t bufferLength, acpi_object_type *args,
- int numArgs);
+status_t evaluate_method(acpi_handle handle, const char *method,
+ acpi_objects *args, acpi_data *returnValue);
+__END_DECLS
+
#endif /* __ACPI_PRIV_H__ */
Modified: haiku/trunk/src/add-ons/kernel/bus_managers/acpi/oshaiku.c
===================================================================
--- haiku/trunk/src/add-ons/kernel/bus_managers/acpi/oshaiku.c 2009-06-18 17:57:37 UTC (rev 31100)
+++ haiku/trunk/src/add-ons/kernel/bus_managers/acpi/oshaiku.c 2009-06-18 18:18:40 UTC (rev 31101)
@@ -125,14 +125,14 @@
#include <unistd.h>
#include <sys/time.h>
#include <OS.h>
-
+
#ifdef _KERNEL_MODE
#include <KernelExport.h>
#include <vm.h>
#include <PCI.h>
extern pci_module_info *gPCIManager;
#include <dpc.h>
-extern dpc_module_info *gDPC;
+dpc_module_info *gDPC = NULL;
extern void *gDPCHandle;
#endif
More information about the Haiku-commits
mailing list