xref: /haiku/src/add-ons/kernel/bus_managers/acpi/ACPIPrivate.h (revision e5d65858f2361fe0552495b61620c84dcee6bc00)
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 
27 __BEGIN_DECLS
28 
29 extern device_manager_info* gDeviceManager;
30 extern pci_module_info* gPCIManager;
31 
32 // information about one ACPI device
33 typedef struct acpi_device_cookie {
34 	char*			path;			// path
35 	acpi_handle		handle;
36 	uint32			type;			// type
37 	device_node*	node;
38 	char			name[32];		// name (for fast log)
39 } acpi_device_cookie;
40 
41 
42 // ACPI root.
43 typedef struct acpi_root_info {
44 	driver_module_info info;
45 
46 	status_t	(*get_handle)(acpi_handle parent, const char *pathname,
47 					acpi_handle *retHandle);
48 
49 	/* Global Lock */
50 
51 	status_t	(*acquire_global_lock)(uint16 timeout, uint32 *handle);
52 	status_t	(*release_global_lock)(uint32 handle);
53 
54 	/* Notify Handler */
55 
56     status_t	(*install_notify_handler)(acpi_handle device,
57     				uint32 handlerType, acpi_notify_handler handler,
58     				void *context);
59 	status_t	(*remove_notify_handler)(acpi_handle device,
60     				uint32 handlerType, acpi_notify_handler handler);
61 
62 	/* GPE Handler */
63 	status_t	(*update_all_gpes)();
64 	status_t	(*enable_gpe)(acpi_handle handle, uint32 gpeNumber);
65 	status_t	(*disable_gpe)(acpi_handle handle, uint32 gpeNumber);
66 	status_t	(*clear_gpe)(acpi_handle handle, uint32 gpeNumber);
67 	status_t	(*set_gpe)(acpi_handle handle, uint32 gpeNumber,
68 					uint8 action);
69 	status_t	(*finish_gpe)(acpi_handle handle, uint32 gpeNumber);
70 	status_t	(*install_gpe_handler)(acpi_handle handle, uint32 gpeNumber,
71 					uint32 type, acpi_gpe_handler handler, void *data);
72 	status_t	(*remove_gpe_handler)(acpi_handle handle, uint32 gpeNumber,
73 					acpi_gpe_handler address);
74 
75 	/* Address Space Handler */
76 
77 	status_t	(*install_address_space_handler)(acpi_handle handle,
78 					uint32 spaceId,
79 					acpi_adr_space_handler handler,
80 					acpi_adr_space_setup setup,	void *data);
81 	status_t	(*remove_address_space_handler)(acpi_handle handle,
82 					uint32 spaceId,
83 					acpi_adr_space_handler handler);
84 
85 	/* Fixed Event Management */
86 
87 	void		(*enable_fixed_event)(uint32 event);
88 	void		(*disable_fixed_event)(uint32 event);
89 
90 	uint32		(*fixed_event_status) (uint32 event);
91 					/* Returns 1 if event set, 0 otherwise */
92 	void		(*reset_fixed_event) (uint32 event);
93 
94 	status_t	(*install_fixed_event_handler)(uint32 event,
95 					interrupt_handler *handler, void *data);
96 	status_t	(*remove_fixed_event_handler)(uint32 event,
97 					interrupt_handler *handler);
98 
99 	/* Namespace Access */
100 
101 	status_t	(*get_next_entry)(uint32 objectType, const char *base,
102 					char *result, size_t length, void **_counter);
103 	status_t	(*get_device)(const char *hid, uint32 index, char *result,
104 					size_t resultLength);
105 
106 	status_t	(*get_device_hid)(const char *path, char *hid,
107 					size_t hidLength);
108 	uint32		(*get_object_type)(const char *path);
109 	status_t	(*get_object)(const char *path,
110 					acpi_object_type **_returnValue);
111 	status_t	(*get_object_typed)(const char *path,
112 					acpi_object_type **_returnValue, uint32 objectType);
113 	status_t	(*ns_handle_to_pathname)(acpi_handle targetHandle,
114 					acpi_data *buffer);
115 
116 	/* Control method execution and data acquisition */
117 
118 	status_t	(*evaluate_object)(acpi_handle handle, const char* object,
119 					acpi_objects *args, acpi_object_type *returnValue,
120 					size_t bufferLength);
121 	status_t	(*evaluate_method)(acpi_handle handle, const char *method,
122 					acpi_objects *args, acpi_data *returnValue);
123 
124 	/* Resource info */
125 
126 	status_t	(*get_irq_routing_table)(acpi_handle busDeviceHandle,
127 					acpi_data *retBuffer);
128 	status_t	(*get_current_resources)(acpi_handle busDeviceHandle,
129 					acpi_data *retBuffer);
130 	status_t	(*get_possible_resources)(acpi_handle busDeviceHandle,
131 					acpi_data *retBuffer);
132 	status_t	(*set_current_resources)(acpi_handle busDeviceHandle,
133 					acpi_data *buffer);
134 
135 	/* Power state setting */
136 
137 	status_t	(*prepare_sleep_state)(uint8 state, void (*wakeFunc)(void),
138 					size_t size);
139 	status_t	(*enter_sleep_state)(uint8 state);
140 	status_t	(*reboot)(void);
141 
142 	/* Table Access */
143 	status_t	(*get_table)(const char *signature, uint32 instance,
144 					void **tableHeader);
145 } acpi_root_info;
146 
147 
148 extern struct acpi_module_info gACPIModule;
149 
150 extern struct device_module_info acpi_ns_dump_module;
151 
152 extern struct driver_module_info embedded_controller_driver_module;
153 extern struct device_module_info embedded_controller_device_module;
154 
155 extern acpi_device_module_info gACPIDeviceModule;
156 
157 
158 status_t get_handle(acpi_handle parent, const char* pathname,
159 	acpi_handle* retHandle);
160 
161 status_t acquire_global_lock(uint16 timeout, uint32* handle);
162 status_t release_global_lock(uint32 handle);
163 
164 status_t install_notify_handler(acpi_handle device,	uint32 handlerType,
165 	acpi_notify_handler handler, void* context);
166 status_t remove_notify_handler(acpi_handle device, uint32 handlerType,
167 	acpi_notify_handler handler);
168 
169 status_t update_all_gpes();
170 status_t enable_gpe(acpi_handle handle, uint32 gpeNumber);
171 status_t disable_gpe(acpi_handle handle, uint32 gpeNumber);
172 status_t clear_gpe(acpi_handle handle, uint32 gpeNumber);
173 status_t set_gpe(acpi_handle handle, uint32 gpeNumber, uint8 action);
174 status_t finish_gpe(acpi_handle handle, uint32 gpeNumber);
175 status_t install_gpe_handler(acpi_handle handle, uint32 gpeNumber, uint32 type,
176 	acpi_gpe_handler handler, void* data);
177 status_t remove_gpe_handler(acpi_handle handle, uint32 gpeNumber,
178 	acpi_gpe_handler address);
179 
180 status_t install_address_space_handler(acpi_handle handle, uint32 spaceID,
181 	acpi_adr_space_handler handler, acpi_adr_space_setup setup, void* data);
182 status_t remove_address_space_handler(acpi_handle handle, uint32 spaceID,
183 	acpi_adr_space_handler handler);
184 
185 void enable_fixed_event(uint32 event);
186 void disable_fixed_event(uint32 event);
187 
188 uint32 fixed_event_status(uint32 event);
189 void reset_fixed_event(uint32 event);
190 
191 status_t install_fixed_event_handler(uint32 event, interrupt_handler* handler,
192 	void* data);
193 status_t remove_fixed_event_handler(uint32 event, interrupt_handler* handler);
194 
195 status_t get_next_entry(uint32 object_type, const char* base, char* result,
196 	size_t length, void** _counter);
197 status_t get_device(const char* hid, uint32 index, char* result,
198 	size_t resultLength);
199 
200 status_t get_device_hid(const char* path, char* hid, size_t hidLength);
201 uint32 get_object_type(const char* path);
202 status_t get_object(const char* path, acpi_object_type** _returnValue);
203 status_t get_object_typed(const char* path, acpi_object_type** _returnValue,
204 	uint32 object_type);
205 status_t ns_handle_to_pathname(acpi_handle targetHandle, acpi_data* buffer);
206 
207 status_t evaluate_object(acpi_handle handle, const char* object,
208 	acpi_objects* args, acpi_object_type* returnValue, size_t bufferLength);
209 status_t evaluate_method(acpi_handle handle, const char* method,
210 	acpi_objects* args, acpi_data* returnValue);
211 
212 status_t get_irq_routing_table(acpi_handle busDeviceHandle,
213 	acpi_data* returnValue);
214 status_t get_current_resources(acpi_handle busDeviceHandle,
215 	acpi_data* returnValue);
216 status_t get_possible_resources(acpi_handle busDeviceHandle,
217 	acpi_data* returnValue);
218 status_t set_current_resources(acpi_handle busDeviceHandle,
219 	acpi_data* buffer);
220 
221 status_t prepare_sleep_state(uint8 state, void (*wakeFunc)(void), size_t size);
222 status_t enter_sleep_state(uint8 state);
223 
224 status_t reboot(void);
225 
226 status_t get_table(const char* signature, uint32 instance, void** tableHeader);
227 
228 __END_DECLS
229 
230 
231 #endif	/* _ACPI_PRIVATE_H */
232