Lines Matching +full:dev +full:- +full:handle

1 /*-
2 * Copyright (c) 2005-2006 Mitsuru IWASAKI <iwasaki@FreeBSD.org>
33 #include <contrib/dev/acpica/include/acpi.h>
34 #include <contrib/dev/acpica/include/accommon.h>
36 #include <dev/acpica/acpivar.h>
37 #include <dev/acpica/acpiio.h>
44 #define ACPI_DOCK_STATUS_UNKNOWN -1
49 #define ACPI_DOCK_LOCK 1 /* Prevent dev from being removed */
72 acpi_dock_get_info(device_t dev) in acpi_dock_get_info() argument
77 sc = device_get_softc(dev); in acpi_dock_get_info()
78 h = acpi_get_handle(dev); in acpi_dock_get_info()
80 if (ACPI_FAILURE(acpi_GetInteger(h, "_STA", &sc->_sta))) in acpi_dock_get_info()
81 sc->_sta = ACPI_DOCK_STATUS_UNKNOWN; in acpi_dock_get_info()
82 if (ACPI_FAILURE(acpi_GetInteger(h, "_BDN", &sc->_bdn))) in acpi_dock_get_info()
83 sc->_bdn = ACPI_DOCK_STATUS_UNKNOWN; in acpi_dock_get_info()
84 if (ACPI_FAILURE(acpi_GetInteger(h, "_UID", &sc->_uid))) in acpi_dock_get_info()
85 sc->_uid = ACPI_DOCK_STATUS_UNKNOWN; in acpi_dock_get_info()
86 ACPI_VPRINT(dev, acpi_device_get_parent_softc(dev), in acpi_dock_get_info()
87 "_STA: %04x, _BDN: %04x, _UID: %04x\n", sc->_sta, in acpi_dock_get_info()
88 sc->_bdn, sc->_uid); in acpi_dock_get_info()
92 acpi_dock_execute_dck(device_t dev, int dock) in acpi_dock_execute_dck() argument
101 h = acpi_get_handle(dev); in acpi_dock_execute_dck()
122 return (-1); in acpi_dock_execute_dck()
127 acpi_dock_execute_lck(device_t dev, int lock) in acpi_dock_execute_lck() argument
131 h = acpi_get_handle(dev); in acpi_dock_execute_lck()
137 acpi_dock_execute_ejx(device_t dev, int eject, int state) in acpi_dock_execute_ejx() argument
143 h = acpi_get_handle(dev); in acpi_dock_execute_ejx()
149 return (-1); in acpi_dock_execute_ejx()
154 acpi_dock_is_ejd_device(ACPI_HANDLE dock_handle, ACPI_HANDLE handle) in acpi_dock_is_ejd_device() argument
165 ret_status = AcpiEvaluateObject(handle, "_EJD", NULL, &ejd_buffer); in acpi_dock_is_ejd_device()
187 device_t dev; in acpi_dock_attach_later() local
189 dev = (device_t)context; in acpi_dock_attach_later()
191 if (!device_is_enabled(dev)) in acpi_dock_attach_later()
192 device_enable(dev); in acpi_dock_attach_later()
195 device_probe_and_attach(dev); in acpi_dock_attach_later()
200 acpi_dock_insert_child(ACPI_HANDLE handle, UINT32 level, void *context, in acpi_dock_insert_child() argument
203 device_t dock_dev, dev; in acpi_dock_insert_child() local
209 if (!acpi_dock_is_ejd_device(dock_handle, handle)) in acpi_dock_insert_child()
213 "inserting device for %s\n", acpi_name(handle)); in acpi_dock_insert_child()
218 * still un-initialized, also control methods such as _INI, _STA in acpi_dock_insert_child()
226 AcpiNsWalkNamespace(ACPI_TYPE_ANY, handle, in acpi_dock_insert_child()
230 dev = acpi_get_device(handle); in acpi_dock_insert_child()
231 if (dev == NULL) { in acpi_dock_insert_child()
233 acpi_name(handle)); in acpi_dock_insert_child()
237 AcpiOsExecute(OSL_NOTIFY_HANDLER, acpi_dock_attach_later, dev); in acpi_dock_insert_child()
244 acpi_dock_insert_children(device_t dev) in acpi_dock_insert_children() argument
252 100, acpi_dock_insert_child, NULL, dev, NULL); in acpi_dock_insert_children()
257 acpi_dock_insert(device_t dev) in acpi_dock_insert() argument
264 sc = device_get_softc(dev); in acpi_dock_insert()
265 h = acpi_get_handle(dev); in acpi_dock_insert()
267 if (sc->status == ACPI_DOCK_STATUS_UNDOCKED || in acpi_dock_insert()
268 sc->status == ACPI_DOCK_STATUS_UNKNOWN) { in acpi_dock_insert()
269 acpi_dock_execute_lck(dev, ACPI_DOCK_LOCK); in acpi_dock_insert()
270 if (acpi_dock_execute_dck(dev, ACPI_DOCK_CONNECT) != 0) { in acpi_dock_insert()
271 device_printf(dev, "_DCK failed\n"); in acpi_dock_insert()
276 acpi_dock_insert_children(dev); in acpi_dock_insert()
281 sc->status = ACPI_DOCK_STATUS_DOCKED; in acpi_dock_insert()
290 acpi_dock_eject_child(ACPI_HANDLE handle, UINT32 level, void *context, in acpi_dock_eject_child() argument
293 device_t dock_dev, dev; in acpi_dock_eject_child() local
299 if (!acpi_dock_is_ejd_device(dock_handle, handle)) in acpi_dock_eject_child()
303 "ejecting device for %s\n", acpi_name(handle)); in acpi_dock_eject_child()
305 dev = acpi_get_device(handle); in acpi_dock_eject_child()
306 if (dev != NULL && device_is_attached(dev)) { in acpi_dock_eject_child()
308 device_detach(dev); in acpi_dock_eject_child()
312 acpi_SetInteger(handle, "_EJ0", 0); in acpi_dock_eject_child()
318 acpi_dock_eject_children(device_t dev) in acpi_dock_eject_children() argument
326 100, acpi_dock_eject_child, NULL, &dev, NULL); in acpi_dock_eject_children()
331 acpi_dock_removal(device_t dev) in acpi_dock_removal() argument
338 sc = device_get_softc(dev); in acpi_dock_removal()
339 h = acpi_get_handle(dev); in acpi_dock_removal()
341 if (sc->status == ACPI_DOCK_STATUS_DOCKED || in acpi_dock_removal()
342 sc->status == ACPI_DOCK_STATUS_UNKNOWN) { in acpi_dock_removal()
343 acpi_dock_eject_children(dev); in acpi_dock_removal()
344 if (acpi_dock_execute_dck(dev, ACPI_DOCK_ISOLATE) != 0) in acpi_dock_removal()
347 acpi_dock_execute_lck(dev, ACPI_DOCK_UNLOCK); in acpi_dock_removal()
349 if (acpi_dock_execute_ejx(dev, 1, 0) != 0) { in acpi_dock_removal()
350 device_printf(dev, "_EJ0 failed\n"); in acpi_dock_removal()
356 sc->status = ACPI_DOCK_STATUS_UNDOCKED; in acpi_dock_removal()
359 acpi_dock_get_info(dev); in acpi_dock_removal()
360 if (sc->_sta != 0) in acpi_dock_removal()
361 device_printf(dev, "mechanical failure (%#x).\n", sc->_sta); in acpi_dock_removal()
369 acpi_dock_device_check(device_t dev) in acpi_dock_device_check() argument
375 sc = device_get_softc(dev); in acpi_dock_device_check()
376 acpi_dock_get_info(dev); in acpi_dock_device_check()
383 if (sc->_sta == ACPI_DOCK_STATUS_UNKNOWN || in acpi_dock_device_check()
384 ACPI_DEVICE_PRESENT(sc->_sta)) in acpi_dock_device_check()
385 acpi_dock_insert(dev); in acpi_dock_device_check()
386 else if (sc->_sta == 0) in acpi_dock_device_check()
387 acpi_dock_removal(dev); in acpi_dock_device_check()
397 device_t dev; in acpi_dock_notify_handler() local
399 dev = (device_t) context; in acpi_dock_notify_handler()
400 ACPI_VPRINT(dev, acpi_device_get_parent_softc(dev), in acpi_dock_notify_handler()
407 acpi_dock_device_check(dev); in acpi_dock_notify_handler()
410 acpi_dock_removal(dev); in acpi_dock_notify_handler()
413 device_printf(dev, "unknown notify %#x\n", notify); in acpi_dock_notify_handler()
423 device_t dev; in acpi_dock_status_sysctl() local
426 dev = (device_t)arg1; in acpi_dock_status_sysctl()
428 sc = device_get_softc(dev); in acpi_dock_status_sysctl()
429 status = sc->status; in acpi_dock_status_sysctl()
433 if (err != 0 || req->newptr == NULL) in acpi_dock_status_sysctl()
442 if (status == sc->status) in acpi_dock_status_sysctl()
447 acpi_dock_removal(dev); in acpi_dock_status_sysctl()
450 acpi_dock_device_check(dev); in acpi_dock_status_sysctl()
462 acpi_dock_probe(device_t dev) in acpi_dock_probe() argument
466 h = acpi_get_handle(dev); in acpi_dock_probe()
471 device_set_desc(dev, "ACPI Docking Station"); in acpi_dock_probe()
481 acpi_dock_attach(device_t dev) in acpi_dock_attach() argument
486 sc = device_get_softc(dev); in acpi_dock_attach()
487 h = acpi_get_handle(dev); in acpi_dock_attach()
491 sc->status = ACPI_DOCK_STATUS_UNKNOWN; in acpi_dock_attach()
497 acpi_dock_device_check(dev); in acpi_dock_attach()
500 sc->sysctl_ctx = device_get_sysctl_ctx(dev); in acpi_dock_attach()
501 sc->sysctl_tree = device_get_sysctl_tree(dev); in acpi_dock_attach()
503 SYSCTL_ADD_INT(sc->sysctl_ctx, in acpi_dock_attach()
504 SYSCTL_CHILDREN(sc->sysctl_tree), in acpi_dock_attach()
506 &sc->_sta, 0, "Dock _STA"); in acpi_dock_attach()
507 SYSCTL_ADD_INT(sc->sysctl_ctx, in acpi_dock_attach()
508 SYSCTL_CHILDREN(sc->sysctl_tree), in acpi_dock_attach()
510 &sc->_bdn, 0, "Dock _BDN"); in acpi_dock_attach()
511 SYSCTL_ADD_INT(sc->sysctl_ctx, in acpi_dock_attach()
512 SYSCTL_CHILDREN(sc->sysctl_tree), in acpi_dock_attach()
514 &sc->_uid, 0, "Dock _UID"); in acpi_dock_attach()
515 SYSCTL_ADD_PROC(sc->sysctl_ctx, in acpi_dock_attach()
516 SYSCTL_CHILDREN(sc->sysctl_tree), in acpi_dock_attach()
518 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, 0, in acpi_dock_attach()
525 acpi_dock_notify_handler, dev); in acpi_dock_attach()