1/*
2 * Copyright 2009, Clemens Zeidler. All rights reserved.
3 * Copyright 2006, J��r��me Duval. All rights reserved.
4 * Distributed under the terms of the MIT License.
5 */
6#ifndef _ACPI_PRIVATE_H
7#define _ACPI_PRIVATE_H
8
9
10#include <sys/cdefs.h>
11
12#include <device_manager.h>
13#include <KernelExport.h>
14#include <ACPI.h>
15#include <PCI.h>
16
17// name of ACPI root module
18#define ACPI_ROOT_MODULE_NAME 	"bus_managers/acpi/root/driver_v1"
19
20// name of ACPI device modules
21#define ACPI_DEVICE_MODULE_NAME "bus_managers/acpi/driver_v1"
22
23// name of the ACPI namespace device
24#define ACPI_NS_DUMP_DEVICE_MODULE_NAME "bus_managers/acpi/namespace/device_v1"
25
26// name of the ACPI call device
27#define ACPI_CALL_DEVICE_MODULE_NAME "bus_managers/acpi/call/device_v1"
28
29
30__BEGIN_DECLS
31
32extern device_manager_info* gDeviceManager;
33extern pci_module_info* gPCIManager;
34
35// information about one ACPI device
36typedef struct acpi_device_cookie {
37	char*			path;			// path
38	acpi_handle		handle;
39	uint32			type;			// type
40	device_node*	node;
41	char			name[32];		// name (for fast log)
42} acpi_device_cookie;
43
44
45typedef struct acpi_resource acpi_resource;
46typedef acpi_status (*acpi_walk_resources_callback)(acpi_resource* resource,
47	void* context);
48
49
50// ACPI root.
51typedef struct acpi_root_info {
52	driver_module_info info;
53
54	status_t	(*get_handle)(acpi_handle parent, const char *pathname,
55					acpi_handle *retHandle);
56	status_t 	(*get_name)(acpi_handle handle, uint32 nameType,
57					char* returnedName, size_t bufferLength);
58
59	/* Global Lock */
60
61	status_t	(*acquire_global_lock)(uint16 timeout, uint32 *handle);
62	status_t	(*release_global_lock)(uint32 handle);
63
64	/* Notify Handler */
65
66    status_t	(*install_notify_handler)(acpi_handle device,
67    				uint32 handlerType, acpi_notify_handler handler,
68    				void *context);
69	status_t	(*remove_notify_handler)(acpi_handle device,
70    				uint32 handlerType, acpi_notify_handler handler);
71
72	/* GPE Handler */
73	status_t	(*update_all_gpes)();
74	status_t	(*enable_gpe)(acpi_handle handle, uint32 gpeNumber);
75	status_t	(*disable_gpe)(acpi_handle handle, uint32 gpeNumber);
76	status_t	(*clear_gpe)(acpi_handle handle, uint32 gpeNumber);
77	status_t	(*set_gpe)(acpi_handle handle, uint32 gpeNumber,
78					uint8 action);
79	status_t	(*finish_gpe)(acpi_handle handle, uint32 gpeNumber);
80	status_t	(*install_gpe_handler)(acpi_handle handle, uint32 gpeNumber,
81					uint32 type, acpi_gpe_handler handler, void *data);
82	status_t	(*remove_gpe_handler)(acpi_handle handle, uint32 gpeNumber,
83					acpi_gpe_handler address);
84
85	/* Address Space Handler */
86
87	status_t	(*install_address_space_handler)(acpi_handle handle,
88					uint32 spaceId,
89					acpi_adr_space_handler handler,
90					acpi_adr_space_setup setup,	void *data);
91	status_t	(*remove_address_space_handler)(acpi_handle handle,
92					uint32 spaceId,
93					acpi_adr_space_handler handler);
94
95	/* Fixed Event Management */
96
97	void		(*enable_fixed_event)(uint32 event);
98	void		(*disable_fixed_event)(uint32 event);
99
100	uint32		(*fixed_event_status) (uint32 event);
101					/* Returns 1 if event set, 0 otherwise */
102	void		(*reset_fixed_event) (uint32 event);
103
104	status_t	(*install_fixed_event_handler)(uint32 event,
105					acpi_event_handler handler, void *data);
106	status_t	(*remove_fixed_event_handler)(uint32 event,
107					acpi_event_handler handler);
108
109	/* Namespace Access */
110
111	status_t	(*get_next_entry)(uint32 objectType, const char *base,
112					char *result, size_t length, void **_counter);
113	status_t	(*get_next_object)(uint32 objectType, acpi_handle parent,
114					acpi_handle* currentChild);
115	status_t	(*get_device)(const char *hid, uint32 index, char *result,
116					size_t resultLength);
117
118	status_t	(*get_device_info)(const char *path, char **hid,
119					char** cidList, size_t cidListCount, char** uid, char** cls);
120	uint32		(*get_object_type)(const char *path);
121	status_t	(*get_object)(const char *path,
122					acpi_object_type **_returnValue);
123	status_t	(*get_object_typed)(const char *path,
124					acpi_object_type **_returnValue, uint32 objectType);
125	status_t	(*ns_handle_to_pathname)(acpi_handle targetHandle,
126					acpi_data *buffer);
127
128	/* Control method execution and data acquisition */
129
130	status_t	(*evaluate_object)(acpi_handle handle, const char* object,
131					acpi_objects *args, acpi_object_type *returnValue,
132					size_t bufferLength);
133	status_t	(*evaluate_method)(acpi_handle handle, const char *method,
134					acpi_objects *args, acpi_data *returnValue);
135
136	/* Resource info */
137
138	status_t	(*get_irq_routing_table)(acpi_handle busDeviceHandle,
139					acpi_data *retBuffer);
140	status_t	(*get_current_resources)(acpi_handle busDeviceHandle,
141					acpi_data *retBuffer);
142	status_t	(*get_possible_resources)(acpi_handle busDeviceHandle,
143					acpi_data *retBuffer);
144	status_t	(*set_current_resources)(acpi_handle busDeviceHandle,
145					acpi_data *buffer);
146	status_t	(*walk_resources)(acpi_handle busDeviceHandle,
147					char *method, acpi_walk_resources_callback callback,
148					void* context);
149
150	/* Power state setting */
151
152	status_t	(*prepare_sleep_state)(uint8 state, void (*wakeFunc)(void),
153					size_t size);
154	status_t	(*enter_sleep_state)(uint8 state);
155	status_t	(*reboot)(void);
156
157	/* Table Access */
158	status_t	(*get_table)(const char *signature, uint32 instance,
159					void **tableHeader);
160} acpi_root_info;
161
162
163extern struct acpi_module_info gACPIModule;
164
165extern struct device_module_info acpi_ns_dump_module;
166
167extern struct driver_module_info embedded_controller_driver_module;
168extern struct device_module_info embedded_controller_device_module;
169
170extern acpi_device_module_info gACPIDeviceModule;
171
172extern struct device_module_info gAcpiCallDeviceModule;
173
174
175status_t get_handle(acpi_handle parent, const char* pathname,
176	acpi_handle* retHandle);
177status_t get_name(acpi_handle handle, uint32 nameType,
178	char* returnedName, size_t bufferLength);
179
180status_t acquire_global_lock(uint16 timeout, uint32* handle);
181status_t release_global_lock(uint32 handle);
182
183status_t install_notify_handler(acpi_handle device,	uint32 handlerType,
184	acpi_notify_handler handler, void* context);
185status_t remove_notify_handler(acpi_handle device, uint32 handlerType,
186	acpi_notify_handler handler);
187
188status_t update_all_gpes();
189status_t enable_gpe(acpi_handle handle, uint32 gpeNumber);
190status_t disable_gpe(acpi_handle handle, uint32 gpeNumber);
191status_t clear_gpe(acpi_handle handle, uint32 gpeNumber);
192status_t set_gpe(acpi_handle handle, uint32 gpeNumber, uint8 action);
193status_t finish_gpe(acpi_handle handle, uint32 gpeNumber);
194status_t install_gpe_handler(acpi_handle handle, uint32 gpeNumber, uint32 type,
195	acpi_gpe_handler handler, void* data);
196status_t remove_gpe_handler(acpi_handle handle, uint32 gpeNumber,
197	acpi_gpe_handler address);
198
199status_t install_address_space_handler(acpi_handle handle, uint32 spaceID,
200	acpi_adr_space_handler handler, acpi_adr_space_setup setup, void* data);
201status_t remove_address_space_handler(acpi_handle handle, uint32 spaceID,
202	acpi_adr_space_handler handler);
203
204void enable_fixed_event(uint32 event);
205void disable_fixed_event(uint32 event);
206
207uint32 fixed_event_status(uint32 event);
208void reset_fixed_event(uint32 event);
209
210status_t install_fixed_event_handler(uint32 event, acpi_event_handler handler,
211	void* data);
212status_t remove_fixed_event_handler(uint32 event, acpi_event_handler handler);
213
214status_t get_next_entry(uint32 object_type, const char* base, char* result,
215	size_t length, void** _counter);
216status_t get_next_object(uint32 object_type, acpi_handle parent,
217	acpi_handle* currentChild);
218status_t get_device(const char* hid, uint32 index, char* result,
219	size_t resultLength);
220
221status_t get_device_info(const char* path, char** hid, char** cidList,
222	size_t cidListCount, char** uniqueId, char** cls);
223status_t get_device_addr(const char* path, uint32* addr);
224uint32 get_object_type(const char* path);
225status_t get_object(const char* path, acpi_object_type** _returnValue);
226status_t get_object_typed(const char* path, acpi_object_type** _returnValue,
227	uint32 object_type);
228status_t ns_handle_to_pathname(acpi_handle targetHandle, acpi_data* buffer);
229status_t walk_namespace(acpi_handle busDeviceHandle, uint32 objectType,
230	uint32 maxDepth, acpi_walk_callback descendingCallback,
231	acpi_walk_callback ascendingCallback, void* context, void** returnValue);
232
233
234status_t evaluate_object(acpi_handle handle, const char* object,
235	acpi_objects* args, acpi_object_type* returnValue, size_t bufferLength);
236status_t evaluate_method(acpi_handle handle, const char* method,
237	acpi_objects* args, acpi_data* returnValue);
238
239status_t get_irq_routing_table(acpi_handle busDeviceHandle,
240	acpi_data* returnValue);
241status_t get_current_resources(acpi_handle busDeviceHandle,
242	acpi_data* returnValue);
243status_t get_possible_resources(acpi_handle busDeviceHandle,
244	acpi_data* returnValue);
245status_t set_current_resources(acpi_handle busDeviceHandle,
246	acpi_data* buffer);
247status_t walk_resources(acpi_handle busDeviceHandle, char* method,
248	acpi_walk_resources_callback callback, void* context);
249
250status_t prepare_sleep_state(uint8 state, void (*wakeFunc)(void), size_t size);
251status_t enter_sleep_state(uint8 state);
252
253status_t reboot(void);
254
255status_t get_table(const char* signature, uint32 instance, void** tableHeader);
256
257__END_DECLS
258
259
260#endif	/* _ACPI_PRIVATE_H */
261