Lines Matching refs:pshot
476 pshot_t *pshot; in pshot_info() local
482 pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_info()
483 if (pshot == NULL) { in pshot_info()
488 *result = (void *)pshot->dip; in pshot_info()
507 pshot_t *pshot; in pshot_attach() local
554 pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_attach()
555 pshot->dip = devi; in pshot_attach()
556 pshot->instance = instance; in pshot_attach()
557 mutex_init(&pshot->lock, NULL, MUTEX_DRIVER, NULL); in pshot_attach()
562 pshot->nodes[i].pshot = pshot; in pshot_attach()
563 pshot->nodes[i].minor = pshot_minor_encode(instance, i); in pshot_attach()
564 (void) strncpy(pshot->nodes[i].name, PSHOT_NODENAME_DEVCTL, in pshot_attach()
568 pshot->nodes[i].pshot = pshot; in pshot_attach()
569 pshot->nodes[i].minor = pshot_minor_encode(instance, i); in pshot_attach()
570 (void) strncpy(pshot->nodes[i].name, PSHOT_NODENAME_TESTCTL, in pshot_attach()
575 if (ddi_create_minor_node(devi, pshot->nodes[i].name, in pshot_attach()
576 S_IFCHR, pshot->nodes[i].minor, DDI_NT_NEXUS, 0) != in pshot_attach()
579 "minor %s", pshot->nodes[i].name); in pshot_attach()
611 (void *)pshot, in pshot_attach()
612 &pshot->callback_cache[i]); in pshot_attach()
625 pshot_event_test((void *)pshot); in pshot_attach()
626 (void) timeout(pshot_event_test_post_one, (void *)pshot, in pshot_attach()
634 if (ndi_event_alloc_hdl(devi, NULL, &pshot->ndi_event_hdl, in pshot_attach()
639 pshot->ndi_events.ndi_events_version = NDI_EVENTS_REV1; in pshot_attach()
640 pshot->ndi_events.ndi_n_events = PSHOT_N_NDI_EVENTS; in pshot_attach()
641 pshot->ndi_events.ndi_event_defs = pshot_ndi_event_defs; in pshot_attach()
643 if (ndi_event_bind_set(pshot->ndi_event_hdl, &pshot->ndi_events, in pshot_attach()
662 mutex_enter(&pshot->lock); in pshot_attach()
663 pshot->busy = 0; in pshot_attach()
664 pshot->busy_ioctl = 0; in pshot_attach()
665 pshot->level = -1; in pshot_attach()
666 pshot->state &= ~STRICT_PARENT; in pshot_attach()
667 pshot->state |= PM_SUPPORTED; in pshot_attach()
668 mutex_exit(&pshot->lock); in pshot_attach()
706 mutex_enter(&pshot->lock); in pshot_attach()
707 pshot->state |= STRICT_PARENT; in pshot_attach()
708 mutex_exit(&pshot->lock); in pshot_attach()
714 mutex_enter(&pshot->lock); in pshot_attach()
715 pshot->state &= ~STRICT_PARENT; in pshot_attach()
716 mutex_exit(&pshot->lock); in pshot_attach()
747 mutex_enter(&pshot->lock); in pshot_attach()
748 pshot->state &= ~PM_SUPPORTED; in pshot_attach()
749 mutex_exit(&pshot->lock); in pshot_attach()
775 if (pshot->state & PM_SUPPORTED) { in pshot_attach()
780 if (pm_raise_power(pshot->dip, 0, MAXPWR) != in pshot_attach()
800 mutex_destroy(&pshot->lock); in pshot_attach()
809 pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_attach()
815 if (pshot->state & PM_SUPPORTED) { in pshot_attach()
820 if (pm_raise_power(pshot->dip, 0, MAXPWR) != in pshot_attach()
845 pshot_t *pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_detach() local
848 if (pshot == NULL) in pshot_detach()
860 if (pshot->state & PM_SUPPORTED) { in pshot_detach()
865 if (pm_lower_power(pshot->dip, 0, 0) != DDI_SUCCESS) { in pshot_detach()
878 mutex_enter(&pshot->lock); in pshot_detach()
879 if (pshot->level != 0) { in pshot_detach()
886 level_tmp = pshot->level; in pshot_detach()
887 pshot->level = 0; in pshot_detach()
888 if (pm_power_has_changed(pshot->dip, 0, 0) != in pshot_detach()
896 pshot->level = level_tmp; in pshot_detach()
897 mutex_exit(&pshot->lock); in pshot_detach()
902 mutex_exit(&pshot->lock); in pshot_detach()
906 if (pshot->callback_cache[i] != NULL) { in pshot_detach()
908 pshot->callback_cache[i]); in pshot_detach()
915 if (pshot->test_callback_cache[i] != NULL) { in pshot_detach()
917 pshot->test_callback_cache[i]); in pshot_detach()
922 rval = ndi_event_free_hdl(pshot->ndi_event_hdl); in pshot_detach()
929 mutex_destroy(&pshot->lock); in pshot_detach()
940 mutex_enter(&pshot->lock); in pshot_detach()
941 if (pshot->state & FAIL_SUSPEND_FLAG) { in pshot_detach()
947 pshot->state &= ~FAIL_SUSPEND_FLAG; in pshot_detach()
952 mutex_exit(&pshot->lock); in pshot_detach()
957 mutex_enter(&pshot->lock); in pshot_detach()
958 if (pshot->state & PM_SUPPORTED) { in pshot_detach()
964 level_tmp = pshot->level; in pshot_detach()
965 pshot->level = 0; in pshot_detach()
966 if (pm_power_has_changed(pshot->dip, 0, 0) != in pshot_detach()
974 pshot->level = level_tmp; in pshot_detach()
978 mutex_exit(&pshot->lock); in pshot_detach()
1050 pshot_t *pshot; in pshot_ctl() local
1062 pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_ctl()
1063 if (pshot == NULL) { in pshot_ctl()
1149 if (!(pshot->state & PM_SUPPORTED)) in pshot_ctl()
1151 mutex_enter(&pshot->lock); in pshot_ctl()
1152 ++(pshot->busy); in pshot_ctl()
1158 pshot->busy); in pshot_ctl()
1160 mutex_exit(&pshot->lock); in pshot_ctl()
1172 if (!(pshot->state & PM_SUPPORTED) || in pshot_ctl()
1174 !(pshot->state & STRICT_PARENT)) || in pshot_ctl()
1177 mutex_enter(&pshot->lock); in pshot_ctl()
1178 ASSERT(pshot->busy > 0); in pshot_ctl()
1179 --pshot->busy; in pshot_ctl()
1185 pshot->busy); in pshot_ctl()
1187 mutex_exit(&pshot->lock); in pshot_ctl()
1227 if (!(pshot->state & PM_SUPPORTED) || in pshot_ctl()
1229 !(pshot->state & STRICT_PARENT)) || in pshot_ctl()
1232 mutex_enter(&pshot->lock); in pshot_ctl()
1233 ++(pshot->busy); in pshot_ctl()
1239 pshot->busy); in pshot_ctl()
1241 mutex_exit(&pshot->lock); in pshot_ctl()
1251 if (!(pshot->state & PM_SUPPORTED)) in pshot_ctl()
1253 mutex_enter(&pshot->lock); in pshot_ctl()
1254 ASSERT(pshot->busy > 0); in pshot_ctl()
1255 --pshot->busy; in pshot_ctl()
1261 pshot->busy); in pshot_ctl()
1263 mutex_exit(&pshot->lock); in pshot_ctl()
1275 if (!(pshot->state & NO_INVOL_FLAG)) in pshot_ctl()
1277 mutex_enter(&pshot->lock); in pshot_ctl()
1278 ASSERT(pshot->busy > 0); in pshot_ctl()
1279 --pshot->busy; in pshot_ctl()
1285 childinstance, pshot->busy); in pshot_ctl()
1287 pshot->state &= ~NO_INVOL_FLAG; in pshot_ctl()
1288 mutex_exit(&pshot->lock); in pshot_ctl()
1321 pshot_t *pshot; in pshot_power() local
1327 pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_power()
1328 if (pshot == NULL) { in pshot_power()
1339 mutex_enter(&pshot->lock); in pshot_power()
1340 pshot->state |= POWER_FLAG; in pshot_power()
1344 if (pshot->busy != 0 && pshot->level > level) { in pshot_power()
1347 name, instance, pshot->level, level, pshot->busy); in pshot_power()
1352 name, instance, cmpt, pshot->level, level); in pshot_power()
1354 pshot->level = level; in pshot_power()
1357 mutex_exit(&pshot->lock); in pshot_power()
1373 pshot_t *pshot; in pshot_bus_power() local
1381 pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_bus_power()
1382 if (pshot == NULL) { in pshot_bus_power()
1405 bpc->bpc_olevel <= 0) && (pshot->state & PM_SUPPORTED)) { in pshot_bus_power()
1406 mutex_enter(&pshot->lock); in pshot_bus_power()
1407 ++(pshot->busy); in pshot_bus_power()
1417 pshot->busy); in pshot_bus_power()
1419 mutex_exit(&pshot->lock); in pshot_bus_power()
1430 pshot->level < MAXPWR && (pshot->state & PM_SUPPORTED)) { in pshot_bus_power()
1488 (pshot->state & PM_SUPPORTED)) { in pshot_bus_power()
1489 mutex_enter(&pshot->lock); in pshot_bus_power()
1490 ASSERT(pshot->busy > 0); in pshot_bus_power()
1491 --(pshot->busy); in pshot_bus_power()
1505 pshot->busy); in pshot_bus_power()
1507 mutex_exit(&pshot->lock); in pshot_bus_power()
1554 (pshot->state & PM_SUPPORTED)) { in pshot_bus_power()
1555 mutex_enter(&pshot->lock); in pshot_bus_power()
1556 ASSERT(pshot->busy > 0); in pshot_bus_power()
1557 --(pshot->busy); in pshot_bus_power()
1567 pshot->busy); in pshot_bus_power()
1569 mutex_exit(&pshot->lock); in pshot_bus_power()
1590 (pshot->state & PM_SUPPORTED)) { in pshot_bus_power()
1591 mutex_enter(&pshot->lock); in pshot_bus_power()
1592 ASSERT(pshot->busy > 0); in pshot_bus_power()
1593 --(pshot->busy); in pshot_bus_power()
1602 pshot->busy); in pshot_bus_power()
1604 mutex_exit(&pshot->lock); in pshot_bus_power()
1634 pshot->state & PM_SUPPORTED) { in pshot_bus_power()
1635 mutex_enter(&pshot->lock); in pshot_bus_power()
1636 ASSERT(pshot->busy > 0); in pshot_bus_power()
1637 --(pshot->busy); in pshot_bus_power()
1646 bphc->bphc_nlevel, pshot->busy); in pshot_bus_power()
1648 mutex_exit(&pshot->lock); in pshot_bus_power()
1768 pshot_t *pshot; in pshot_open() local
1774 if ((pshot = ddi_get_soft_state(pshot_softstatep, instance)) == NULL) in pshot_open()
1782 mutex_enter(&pshot->lock); in pshot_open()
1783 if (((flags & FEXCL) && (pshot->state & IS_OPEN)) || in pshot_open()
1784 (!(flags & FEXCL) && (pshot->state & IS_OPEN_EXCL))) { in pshot_open()
1785 mutex_exit(&pshot->lock); in pshot_open()
1788 pshot->state |= IS_OPEN; in pshot_open()
1790 pshot->state |= IS_OPEN_EXCL; in pshot_open()
1795 mutex_exit(&pshot->lock); in pshot_open()
1807 pshot_t *pshot; in pshot_close() local
1813 if ((pshot = ddi_get_soft_state(pshot_softstatep, instance)) == NULL) in pshot_close()
1816 mutex_enter(&pshot->lock); in pshot_close()
1817 pshot->state &= ~(IS_OPEN | IS_OPEN_EXCL); in pshot_close()
1818 mutex_exit(&pshot->lock); in pshot_close()
1834 pshot_t *pshot; in pshot_ioctl() local
1840 if ((pshot = ddi_get_soft_state(pshot_softstatep, instance)) == NULL) in pshot_ioctl()
1844 nodename = pshot->nodes[nodenum].name; in pshot_ioctl()
1852 return (pshot_devctl(pshot, nodenum, cmd, arg, mode, credp, in pshot_ioctl()
1856 return (pshot_testctl(pshot, nodenum, cmd, arg, mode, credp, in pshot_ioctl()
1860 pshot->nodes[nodenum].minor); in pshot_ioctl()
1870 pshot_devctl(pshot_t *pshot, minor_t nodenum, int cmd, intptr_t arg, int mode, in pshot_devctl() argument
1883 self = pshot->dip; in pshot_devctl()
1886 instance = pshot->instance; in pshot_devctl()
1926 rv = pshot_event(pshot, PSHOT_EVENT_TAG_DEV_RESET, in pshot_devctl()
1941 rv = pshot_event(pshot, PSHOT_EVENT_TAG_BUS_QUIESCE, in pshot_devctl()
1961 rv = pshot_event(pshot, PSHOT_EVENT_TAG_BUS_UNQUIESCE, in pshot_devctl()
1972 rv = pshot_event(pshot, PSHOT_EVENT_TAG_BUS_RESET, in pshot_devctl()
1990 mutex_enter(&pshot->lock); in pshot_devctl()
1991 ++(pshot->busy); in pshot_devctl()
1992 ++(pshot->busy_ioctl); in pshot_devctl()
1996 " %d busy_ioctl %d\n", instance, pshot->busy, in pshot_devctl()
1997 pshot->busy_ioctl); in pshot_devctl()
1999 mutex_exit(&pshot->lock); in pshot_devctl()
2000 ret = pm_busy_component(pshot->dip, 0); in pshot_devctl()
2013 mutex_enter(&pshot->lock); in pshot_devctl()
2014 state = pshot->busy; in pshot_devctl()
2025 state, pshot->busy_ioctl); in pshot_devctl()
2027 mutex_exit(&pshot->lock); in pshot_devctl()
2039 mutex_enter(&pshot->lock); in pshot_devctl()
2040 if (pshot->busy_ioctl > 0) { in pshot_devctl()
2041 ASSERT(pshot->busy > 0); in pshot_devctl()
2042 --(pshot->busy); in pshot_devctl()
2043 --(pshot->busy_ioctl); in pshot_devctl()
2048 pshot->busy, pshot->busy_ioctl); in pshot_devctl()
2050 mutex_exit(&pshot->lock); in pshot_devctl()
2051 ret = pm_idle_component(pshot->dip, 0); in pshot_devctl()
2055 mutex_exit(&pshot->lock); in pshot_devctl()
2068 if (pm_raise_power(pshot->dip, 0, MAXPWR) != DDI_SUCCESS) { in pshot_devctl()
2071 mutex_enter(&pshot->lock); in pshot_devctl()
2075 " to level %d\n", instance, pshot->level); in pshot_devctl()
2077 mutex_exit(&pshot->lock); in pshot_devctl()
2090 if (pm_lower_power(pshot->dip, 0, 0) != DDI_SUCCESS) { in pshot_devctl()
2093 mutex_enter(&pshot->lock); in pshot_devctl()
2097 " to level %d\n", instance, pshot->level); in pshot_devctl()
2099 mutex_exit(&pshot->lock); in pshot_devctl()
2112 mutex_enter(&pshot->lock); in pshot_devctl()
2113 pshot->level = 0; in pshot_devctl()
2114 if (pm_power_has_changed(pshot->dip, 0, 0) != DDI_SUCCESS) { in pshot_devctl()
2120 " level %d\n", instance, pshot->level); in pshot_devctl()
2123 mutex_exit(&pshot->lock); in pshot_devctl()
2135 mutex_enter(&pshot->lock); in pshot_devctl()
2136 pshot->level = MAXPWR; in pshot_devctl()
2137 if (pm_power_has_changed(pshot->dip, 0, MAXPWR) in pshot_devctl()
2144 " level %d\n", instance, pshot->level); in pshot_devctl()
2147 mutex_exit(&pshot->lock); in pshot_devctl()
2159 mutex_enter(&pshot->lock); in pshot_devctl()
2160 state = (pshot->state & POWER_FLAG) ? 1 : 0; in pshot_devctl()
2172 pshot->state &= ~POWER_FLAG; in pshot_devctl()
2173 mutex_exit(&pshot->lock); in pshot_devctl()
2184 mutex_enter(&pshot->lock); in pshot_devctl()
2185 pshot->state |= FAIL_SUSPEND_FLAG; in pshot_devctl()
2186 mutex_exit(&pshot->lock); in pshot_devctl()
2199 mutex_enter(&pshot->lock); in pshot_devctl()
2200 state = (pshot->state & STRICT_PARENT) ? 1 : 0; in pshot_devctl()
2213 mutex_exit(&pshot->lock); in pshot_devctl()
2228 mutex_enter(&pshot->lock); in pshot_devctl()
2229 pshot->state |= NO_INVOL_FLAG; in pshot_devctl()
2230 mutex_exit(&pshot->lock); in pshot_devctl()
2251 pshot_testctl(pshot_t *pshot, minor_t nodenum, int cmd, intptr_t arg, int mode, in pshot_testctl() argument
2264 self = pshot->dip; in pshot_testctl()
2265 instance = pshot->instance; in pshot_testctl()
2283 rv = pshot_event(pshot, PSHOT_EVENT_TAG_DEV_RESET, in pshot_testctl()
2298 rv = pshot_event(pshot, PSHOT_EVENT_TAG_BUS_QUIESCE, in pshot_testctl()
2318 rv = pshot_event(pshot, PSHOT_EVENT_TAG_BUS_UNQUIESCE, in pshot_testctl()
2329 rv = pshot_event(pshot, PSHOT_EVENT_TAG_BUS_RESET, in pshot_testctl()
2349 pshot_t *pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_get_eventcookie() local
2360 return (ndi_event_retrieve_cookie(pshot->ndi_event_hdl, in pshot_get_eventcookie()
2370 pshot_t *pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_add_eventcall() local
2382 return (ndi_event_add_callback(pshot->ndi_event_hdl, rdip, in pshot_add_eventcall()
2393 pshot_t *pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_remove_eventcall() local
2407 return (ndi_event_remove_callback(pshot->ndi_event_hdl, cb_id)); in pshot_remove_eventcall()
2415 pshot_t *pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_post_event() local
2437 return (ndi_event_run_callbacks(pshot->ndi_event_hdl, rdip, in pshot_post_event()
2446 pshot_event(pshot_t *pshot, int event_tag, dev_info_t *child, in pshot_event() argument
2450 pshot->ndi_event_hdl, event_tag); in pshot_event()
2457 pshot->instance, event_tag, in pshot_event()
2458 ndi_event_tag_to_name(pshot->ndi_event_hdl, in pshot_event()
2468 pshot->instance, event_tag, in pshot_event()
2469 ndi_event_tag_to_name(pshot->ndi_event_hdl, in pshot_event()
2477 return (ndi_event_run_callbacks(pshot->ndi_event_hdl, in pshot_event()
2489 pshot_t *pshot = (pshot_t *)arg; in pshot_event_cb() local
2500 pshot->instance, (void *)dip, (void *)cookie, in pshot_event_cb()
2512 (void) ndi_event_run_callbacks(pshot->ndi_event_hdl, in pshot_event_cb()
2516 "pshot_event_cb\n", pshot->instance, in pshot_event_cb()
2536 pshot_t *pshot; in pshot_bus_config() local
2547 pshot = ddi_get_soft_state(pshot_softstatep, instance); in pshot_bus_config()
2548 if (pshot == NULL) { in pshot_bus_config()
3540 pshot_t *pshot = (pshot_t *)arg; in pshot_event_test() local
3545 (void) ndi_event_alloc_hdl(pshot->dip, NULL, &hdl, NDI_SLEEP); in pshot_event_test()
3690 rval = ndi_event_add_callback(hdl, pshot->dip, in pshot_event_test()
3695 NDI_SLEEP, &pshot->test_callback_cache[i]); in pshot_event_test()
3704 rval = ndi_event_run_callbacks(hdl, pshot->dip, cookie, in pshot_event_test()
3718 pshot->dip, cookie, (void *)hdl); in pshot_event_test()
3730 pshot->test_callback_cache[i]); in pshot_event_test()
3732 pshot->test_callback_cache[i] = 0; in pshot_event_test()
3747 pshot_t *pshot = (pshot_t *)arg; in pshot_event_test_post_one() local
3752 pshot->instance); in pshot_event_test_post_one()
3754 if (ddi_get_eventcookie(pshot->dip, PSHOT_EVENT_NAME_BUS_TEST_POST, in pshot_event_test_post_one()
3760 rval = ndi_post_event(pshot->dip, pshot->dip, cookie, NULL); in pshot_event_test_post_one()
3763 pshot->instance, rval); in pshot_event_test_post_one()
3765 (void) timeout(pshot_event_test_post_one, (void *)pshot, in pshot_event_test_post_one()
3766 pshot->instance * drv_usectohz(60000000)); in pshot_event_test_post_one()