acpivar.h (f8335e3a97801ebb49d091a7e09a33711d56a76c) acpivar.h (be2b179704218e240b66f023545f8e97d4c29a08)
1/*-
2 * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
3 * Copyright (c) 2000 Michael Smith <msmith@freebsd.org>
4 * Copyright (c) 2000 BSDi
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 128 unchanged lines hidden (view full) ---

137 * Note that the low ivar values are reserved to provide
138 * interface compatibility with ISA drivers which can also
139 * attach to ACPI.
140 */
141#define ACPI_IVAR_HANDLE 0x100
142#define ACPI_IVAR_MAGIC 0x101
143#define ACPI_IVAR_PRIVATE 0x102
144
1/*-
2 * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
3 * Copyright (c) 2000 Michael Smith <msmith@freebsd.org>
4 * Copyright (c) 2000 BSDi
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 128 unchanged lines hidden (view full) ---

137 * Note that the low ivar values are reserved to provide
138 * interface compatibility with ISA drivers which can also
139 * attach to ACPI.
140 */
141#define ACPI_IVAR_HANDLE 0x100
142#define ACPI_IVAR_MAGIC 0x101
143#define ACPI_IVAR_PRIVATE 0x102
144
145static __inline ACPI_HANDLE
146acpi_get_handle(device_t dev)
147{
148 uintptr_t up;
149 ACPI_HANDLE h;
145extern ACPI_HANDLE acpi_get_handle(device_t dev);
146extern int acpi_set_handle(device_t dev, ACPI_HANDLE h);
147extern int acpi_get_magic(device_t dev);
148extern int acpi_set_magic(device_t dev, int m);
149extern void * acpi_get_private(device_t dev);
150extern int acpi_set_private(device_t dev, void *p);
151extern ACPI_OBJECT_TYPE acpi_get_type(device_t dev);
150
152
151 if (BUS_READ_IVAR(device_get_parent(dev), dev, ACPI_IVAR_HANDLE, &up))
152 return(NULL);
153 h = (ACPI_HANDLE)up;
154 return(h);
155}
156
157static __inline int
158acpi_set_handle(device_t dev, ACPI_HANDLE h)
159{
160 uintptr_t up;
161
162 up = (uintptr_t)h;
163 return(BUS_WRITE_IVAR(device_get_parent(dev), dev, ACPI_IVAR_HANDLE, up));
164}
165
166static __inline int
167acpi_get_magic(device_t dev)
168{
169 uintptr_t up;
170 int m;
171
172 if (BUS_READ_IVAR(device_get_parent(dev), dev, ACPI_IVAR_MAGIC, &up))
173 return(0);
174 m = (int)up;
175 return(m);
176}
177
178static __inline int
179acpi_set_magic(device_t dev, int m)
180{
181 uintptr_t up;
182
183 up = (uintptr_t)m;
184 return(BUS_WRITE_IVAR(device_get_parent(dev), dev, ACPI_IVAR_MAGIC, up));
185}
186
187static __inline void *
188acpi_get_private(device_t dev)
189{
190 uintptr_t up;
191 void *p;
192
193 if (BUS_READ_IVAR(device_get_parent(dev), dev, ACPI_IVAR_PRIVATE, &up))
194 return(NULL);
195 p = (void *)up;
196 return(p);
197}
198
199static __inline int
200acpi_set_private(device_t dev, void *p)
201{
202 uintptr_t up;
203
204 up = (uintptr_t)p;
205 return(BUS_WRITE_IVAR(device_get_parent(dev), dev, ACPI_IVAR_PRIVATE, up));
206}
207
208static __inline ACPI_OBJECT_TYPE
209acpi_get_type(device_t dev)
210{
211 ACPI_HANDLE h;
212 ACPI_OBJECT_TYPE t;
213
214 if ((h = acpi_get_handle(dev)) == NULL)
215 return(ACPI_TYPE_NOT_FOUND);
216 if (AcpiGetType(h, &t) != AE_OK)
217 return(ACPI_TYPE_NOT_FOUND);
218 return(t);
219}
220
221#ifdef ACPI_DEBUGGER
222extern void acpi_EnterDebugger(void);
223#endif
224
225#ifdef ACPI_DEBUG
226#include <sys/cons.h>
227#define STEP(x) do {printf x, printf("\n"); cngetc();} while (0)
228#else
229#define STEP(x)
230#endif
231
153#ifdef ACPI_DEBUGGER
154extern void acpi_EnterDebugger(void);
155#endif
156
157#ifdef ACPI_DEBUG
158#include <sys/cons.h>
159#define STEP(x) do {printf x, printf("\n"); cngetc();} while (0)
160#else
161#define STEP(x)
162#endif
163
232#define ACPI_VPRINT(dev, acpi_sc, x...) do { \
233 if (acpi_get_verbose(acpi_sc)) \
234 device_printf(dev, x); \
164#define ACPI_VPRINT(dev, acpi_sc, x...) do { \
165 if (acpi_get_verbose(acpi_sc)) \
166 device_printf(dev, x); \
235} while (0)
236
237#define ACPI_DEVINFO_PRESENT(x) (((x) & 0x9) == 9)
238extern BOOLEAN acpi_DeviceIsPresent(device_t dev);
239extern BOOLEAN acpi_BatteryIsPresent(device_t dev);
240extern BOOLEAN acpi_MatchHid(device_t dev, char *hid);
167} while (0)
168
169#define ACPI_DEVINFO_PRESENT(x) (((x) & 0x9) == 9)
170extern BOOLEAN acpi_DeviceIsPresent(device_t dev);
171extern BOOLEAN acpi_BatteryIsPresent(device_t dev);
172extern BOOLEAN acpi_MatchHid(device_t dev, char *hid);
241extern ACPI_STATUS acpi_GetHandleInScope(ACPI_HANDLE parent, char *path, ACPI_HANDLE *result);
173extern ACPI_STATUS acpi_GetHandleInScope(ACPI_HANDLE parent, char *path,
174 ACPI_HANDLE *result);
242extern ACPI_BUFFER *acpi_AllocBuffer(int size);
175extern ACPI_BUFFER *acpi_AllocBuffer(int size);
243extern ACPI_STATUS acpi_EvaluateInteger(ACPI_HANDLE handle, char *path, int *number);
244extern ACPI_STATUS acpi_ConvertBufferToInteger(ACPI_BUFFER *bufp, int *number);
176extern ACPI_STATUS acpi_EvaluateInteger(ACPI_HANDLE handle, char *path,
177 int *number);
178extern ACPI_STATUS acpi_ConvertBufferToInteger(ACPI_BUFFER *bufp,
179 int *number);
245extern ACPI_STATUS acpi_ForeachPackageObject(ACPI_OBJECT *obj,
180extern ACPI_STATUS acpi_ForeachPackageObject(ACPI_OBJECT *obj,
246 void (* func)(ACPI_OBJECT *comp, void *arg),
247 void *arg);
248extern ACPI_STATUS acpi_FindIndexedResource(ACPI_BUFFER *buf, int index, ACPI_RESOURCE **resp);
249extern ACPI_STATUS acpi_AppendBufferResource(ACPI_BUFFER *buf, ACPI_RESOURCE *res);
181 void (*func)(ACPI_OBJECT *comp, void *arg),
182 void *arg);
183extern ACPI_STATUS acpi_FindIndexedResource(ACPI_BUFFER *buf, int index,
184 ACPI_RESOURCE **resp);
185extern ACPI_STATUS acpi_AppendBufferResource(ACPI_BUFFER *buf,
186 ACPI_RESOURCE *res);
250extern ACPI_STATUS acpi_SetIntrModel(int model);
187extern ACPI_STATUS acpi_SetIntrModel(int model);
251
252extern ACPI_STATUS acpi_SetSleepState(struct acpi_softc *sc, int state);
253extern ACPI_STATUS acpi_Enable(struct acpi_softc *sc);
254extern ACPI_STATUS acpi_Disable(struct acpi_softc *sc);
255
256struct acpi_parse_resource_set {
188extern ACPI_STATUS acpi_SetSleepState(struct acpi_softc *sc, int state);
189extern ACPI_STATUS acpi_Enable(struct acpi_softc *sc);
190extern ACPI_STATUS acpi_Disable(struct acpi_softc *sc);
191
192struct acpi_parse_resource_set {
257 void (* set_init)(device_t dev, void **context);
258 void (* set_done)(device_t dev, void *context);
259 void (* set_ioport)(device_t dev, void *context, u_int32_t base, u_int32_t length);
260 void (* set_iorange)(device_t dev, void *context, u_int32_t low, u_int32_t high,
261 u_int32_t length, u_int32_t align);
262 void (* set_memory)(device_t dev, void *context, u_int32_t base, u_int32_t length);
263 void (* set_memoryrange)(device_t dev, void *context, u_int32_t low, u_int32_t high,
264 u_int32_t length, u_int32_t align);
265 void (* set_irq)(device_t dev, void *context, u_int32_t *irq, int cout);
266 void (* set_drq)(device_t dev, void *context, u_int32_t *drq, int count);
267 void (* set_start_dependant)(device_t dev, void *context, int preference);
268 void (* set_end_dependant)(device_t dev, void *context);
193 void (*set_init)(device_t dev, void **context);
194 void (*set_done)(device_t dev, void *context);
195 void (*set_ioport)(device_t dev, void *context, u_int32_t base,
196 u_int32_t length);
197 void (*set_iorange)(device_t dev, void *context,
198 u_int32_t low, u_int32_t high,
199 u_int32_t length, u_int32_t align);
200 void (*set_memory)(device_t dev, void *context, u_int32_t base,
201 u_int32_t length);
202 void (*set_memoryrange)(device_t dev, void *context, u_int32_t low,
203 u_int32_t high, u_int32_t length,
204 u_int32_t align);
205 void (*set_irq)(device_t dev, void *context, u_int32_t *irq,
206 int cout);
207 void (*set_drq)(device_t dev, void *context, u_int32_t *drq,
208 int count);
209 void (*set_start_dependant)(device_t dev, void *context,
210 int preference);
211 void (*set_end_dependant)(device_t dev, void *context);
269};
270
271extern struct acpi_parse_resource_set acpi_res_parse_set;
272extern ACPI_STATUS acpi_parse_resources(device_t dev, ACPI_HANDLE handle,
212};
213
214extern struct acpi_parse_resource_set acpi_res_parse_set;
215extern ACPI_STATUS acpi_parse_resources(device_t dev, ACPI_HANDLE handle,
273 struct acpi_parse_resource_set *set);
216 struct acpi_parse_resource_set *set);
274/* XXX until Intel fix this in their headers, based on NEXT_RESOURCE */
217/* XXX until Intel fix this in their headers, based on NEXT_RESOURCE */
275#define ACPI_RESOURCE_NEXT(Res) (ACPI_RESOURCE *)((UINT8 *) Res + Res->Length)
218#define ACPI_RESOURCE_NEXT(Res) (ACPI_RESOURCE *)((UINT8 *)Res + Res->Length)
276
219
277/*
278 * ACPI event handling
279 */
280extern UINT32 acpi_eventhandler_power_button_for_sleep(void *context);
281extern UINT32 acpi_eventhandler_power_button_for_wakeup(void *context);
282extern UINT32 acpi_eventhandler_sleep_button_for_sleep(void *context);
283extern UINT32 acpi_eventhandler_sleep_button_for_wakeup(void *context);
220/* ACPI event handling */
221extern UINT32 acpi_eventhandler_power_button_for_sleep(void *context);
222extern UINT32 acpi_eventhandler_power_button_for_wakeup(void *context);
223extern UINT32 acpi_eventhandler_sleep_button_for_sleep(void *context);
224extern UINT32 acpi_eventhandler_sleep_button_for_wakeup(void *context);
284
285#define ACPI_EVENT_PRI_FIRST 0
286#define ACPI_EVENT_PRI_DEFAULT 10000
287#define ACPI_EVENT_PRI_LAST 20000
288
289typedef void (*acpi_event_handler_t)(void *, int);
290
291EVENTHANDLER_DECLARE(acpi_sleep_event, acpi_event_handler_t);
292EVENTHANDLER_DECLARE(acpi_wakeup_event, acpi_event_handler_t);
293
225
226#define ACPI_EVENT_PRI_FIRST 0
227#define ACPI_EVENT_PRI_DEFAULT 10000
228#define ACPI_EVENT_PRI_LAST 20000
229
230typedef void (*acpi_event_handler_t)(void *, int);
231
232EVENTHANDLER_DECLARE(acpi_sleep_event, acpi_event_handler_t);
233EVENTHANDLER_DECLARE(acpi_wakeup_event, acpi_event_handler_t);
234
294/*
295 * Device power control.
296 */
297extern ACPI_STATUS acpi_pwr_switch_consumer(ACPI_HANDLE consumer, int state);
235/* Device power control. */
236extern ACPI_STATUS acpi_pwr_switch_consumer(ACPI_HANDLE consumer,
237 int state);
298
238
299/*
300 * Misc.
301 */
239/* Misc. */
302static __inline struct acpi_softc *
303acpi_device_get_parent_softc(device_t child)
304{
305 device_t parent;
306
307 parent = device_get_parent(child);
240static __inline struct acpi_softc *
241acpi_device_get_parent_softc(device_t child)
242{
243 device_t parent;
244
245 parent = device_get_parent(child);
308 if (parent == NULL) {
309 return(NULL);
310 }
311 return(device_get_softc(parent));
246 if (parent == NULL)
247 return (NULL);
248 return (device_get_softc(parent));
312}
313
314static __inline int
315acpi_get_verbose(struct acpi_softc *sc)
316{
317 if (sc)
249}
250
251static __inline int
252acpi_get_verbose(struct acpi_softc *sc)
253{
254 if (sc)
318 return(sc->acpi_verbose);
319 return(0);
255 return (sc->acpi_verbose);
256 return (0);
320}
321
322extern char *acpi_name(ACPI_HANDLE handle);
323extern int acpi_avoid(ACPI_HANDLE handle);
324extern int acpi_disabled(char *subsys);
257}
258
259extern char *acpi_name(ACPI_HANDLE handle);
260extern int acpi_avoid(ACPI_HANDLE handle);
261extern int acpi_disabled(char *subsys);
325
326extern void acpi_device_enable_wake_capability(ACPI_HANDLE h, int enable);
327extern void acpi_device_enable_wake_event(ACPI_HANDLE h);
262extern void acpi_device_enable_wake_capability(ACPI_HANDLE h, int enable);
263extern void acpi_device_enable_wake_event(ACPI_HANDLE h);
328
329extern int acpi_machdep_init(device_t dev);
330extern void acpi_install_wakeup_handler(struct acpi_softc *sc);
331extern int acpi_sleep_machdep(struct acpi_softc *sc, int state);
332
264extern int acpi_machdep_init(device_t dev);
265extern void acpi_install_wakeup_handler(struct acpi_softc *sc);
266extern int acpi_sleep_machdep(struct acpi_softc *sc, int state);
267
333/*
334 * Battery Abstraction.
335 */
268/* Battery Abstraction. */
336struct acpi_battinfo;
337struct acpi_battdesc;
338
339extern int acpi_battery_register(int, int);
340extern int acpi_battery_get_battinfo(int, struct acpi_battinfo *);
341extern int acpi_battery_get_units(void);
342extern int acpi_battery_get_info_expire(void);
343extern int acpi_battery_get_battdesc(int, struct acpi_battdesc *);
344
345extern int acpi_cmbat_get_battinfo(int, struct acpi_battinfo *);
346
269struct acpi_battinfo;
270struct acpi_battdesc;
271
272extern int acpi_battery_register(int, int);
273extern int acpi_battery_get_battinfo(int, struct acpi_battinfo *);
274extern int acpi_battery_get_units(void);
275extern int acpi_battery_get_info_expire(void);
276extern int acpi_battery_get_battdesc(int, struct acpi_battdesc *);
277
278extern int acpi_cmbat_get_battinfo(int, struct acpi_battinfo *);
279
347/*
348 * Embedded controller.
349 */
280/* Embedded controller. */
350extern void acpi_ec_ecdt_probe(device_t);
351
281extern void acpi_ec_ecdt_probe(device_t);
282
352/*
353 * AC adapter interface.
354 */
355
283/* AC adapter interface. */
356extern int acpi_acad_get_acline(int *);
357
358#if __FreeBSD_version >= 500000
359#ifndef ACPI_MAX_THREADS
360#define ACPI_MAX_THREADS 3
361#endif
362#if ACPI_MAX_THREADS > 0
363#define ACPI_USE_THREADS
364#endif
365#endif
366
367#ifdef ACPI_USE_THREADS
284extern int acpi_acad_get_acline(int *);
285
286#if __FreeBSD_version >= 500000
287#ifndef ACPI_MAX_THREADS
288#define ACPI_MAX_THREADS 3
289#endif
290#if ACPI_MAX_THREADS > 0
291#define ACPI_USE_THREADS
292#endif
293#endif
294
295#ifdef ACPI_USE_THREADS
368/*
369 * ACPI task kernel thread initialization.
370 */
296/* ACPI task kernel thread initialization. */
371extern int acpi_task_thread_init(void);
372#endif
297extern int acpi_task_thread_init(void);
298#endif
373