[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