Lines Matching refs:dip

322 #define	PM_MIN_SCAN(dip)	(PM_ISCPU(dip) ? pm_cpu_min_scan : \  argument
504 #define PM_MAJOR(dip) ddi_driver_major(dip) argument
505 #define PM_IS_NEXUS(dip) ((PM_MAJOR(dip) == DDI_MAJOR_T_NONE) ? 0 : \ argument
506 NEXUS_DRV(devopsp[PM_MAJOR(dip)]))
510 #define PM_INCR_NOTLOWEST(dip) { \ argument
512 if (!PM_IS_NEXUS(dip) || \
513 (DEVI(dip)->devi_pm_flags & (PMC_DEV_THRESH|PMC_COMP_THRESH))) {\
515 pm_ppm_notify_all_lowest(dip, PM_NOT_ALL_LOWEST);\
518 pmf, PM_DEVICE(dip), pm_comps_notlowest)) \
522 #define PM_DECR_NOTLOWEST(dip) { \ argument
524 if (!PM_IS_NEXUS(dip) || \
525 (DEVI(dip)->devi_pm_flags & (PMC_DEV_THRESH|PMC_COMP_THRESH))) {\
529 "%d\n", pmf, PM_DEVICE(dip), pm_comps_notlowest))\
531 pm_ppm_notify_all_lowest(dip, PM_ALL_LOWEST); \
724 pm_scan_init(dev_info_t *dip) in pm_scan_init() argument
729 ASSERT(!PM_ISBC(dip)); in pm_scan_init()
731 PM_LOCK_DIP(dip); in pm_scan_init()
732 scanp = PM_GET_PM_SCAN(dip); in pm_scan_init()
735 pmf, PM_DEVICE(dip))) in pm_scan_init()
737 DEVI(dip)->devi_pm_scan = scanp; in pm_scan_init()
740 "clear PM_SCAN_STOP flag\n", pmf, PM_DEVICE(dip))) in pm_scan_init()
743 PM_UNLOCK_DIP(dip); in pm_scan_init()
750 pm_scan_fini(dev_info_t *dip) in pm_scan_fini() argument
755 PMD(PMD_SCAN, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_scan_fini()
756 ASSERT(!PM_ISBC(dip)); in pm_scan_fini()
757 PM_LOCK_DIP(dip); in pm_scan_fini()
758 scanp = PM_GET_PM_SCAN(dip); in pm_scan_fini()
760 PM_UNLOCK_DIP(dip); in pm_scan_fini()
768 DEVI(dip)->devi_pm_scan = NULL; in pm_scan_fini()
769 PM_UNLOCK_DIP(dip); in pm_scan_fini()
830 e_pm_valid_power(dev_info_t *dip, int cmpt, int level) in e_pm_valid_power() argument
833 pm_component_t *cp = PM_CP(dip, cmpt); in e_pm_valid_power()
856 static int pm_start(dev_info_t *dip);
861 e_pm_valid_info(dev_info_t *dip, pm_info_t **infop) in e_pm_valid_info() argument
873 info = PM_GET_PM_INFO(dip); in e_pm_valid_info()
875 if (!DEVI_IS_ATTACHING(dip)) { in e_pm_valid_info()
878 if (pm_start(dip) != DDI_SUCCESS) { in e_pm_valid_info()
881 info = PM_GET_PM_INFO(dip); in e_pm_valid_info()
890 e_pm_valid_comp(dev_info_t *dip, int cmpt, pm_component_t **cpp) in e_pm_valid_comp() argument
892 if (cmpt >= 0 && cmpt < PM_NUMCMPTS(dip)) { in e_pm_valid_comp()
894 *cpp = PM_CP(dip, cmpt); in e_pm_valid_comp()
905 dev_is_needed(dev_info_t *dip, int cmpt, int level, int direction) in dev_is_needed() argument
913 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, cmpt, &cp) || in dev_is_needed()
914 !e_pm_valid_power(dip, cmpt, level)) in dev_is_needed()
918 pmf, PM_DEVICE(dip), cmpt, pm_decode_direction(direction), in dev_is_needed()
921 if (pm_set_power(dip, cmpt, level, direction, in dev_is_needed()
925 (void) ddi_pathname(dip, pathbuf); in dev_is_needed()
931 "errno %d\n", pmf, PM_DEVICE(dip), cmpt, in dev_is_needed()
937 PM_DEVICE(dip))) in dev_is_needed()
938 pm_rescan(dip); in dev_is_needed()
954 dev_info_t *dip = (dev_info_t *)arg; in pm_rescan()
959 PMD(PMD_SCAN, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_rescan()
960 PM_LOCK_DIP(dip); in pm_rescan()
961 info = PM_GET_PM_INFO(dip); in pm_rescan()
962 scanp = PM_GET_PM_SCAN(dip); in pm_rescan()
963 if (pm_scans_disabled || !PM_SCANABLE(dip) || !info || !scanp || in pm_rescan()
965 PM_UNLOCK_DIP(dip); in pm_rescan()
970 PM_UNLOCK_DIP(dip); in pm_rescan()
976 pmf, PM_DEVICE(dip), (ulong_t)scanid)) in pm_rescan()
977 PM_UNLOCK_DIP(dip); in pm_rescan()
979 PM_LOCK_DIP(dip); in pm_rescan()
997 if (DEVI_IS_ATTACHING(dip) || in pm_rescan()
999 taskq_dispatch(system_taskq, pm_scan, (void *)dip, TQ_NOSLEEP) == in pm_rescan()
1002 "dispatched or dispatching failed\n", pmf, PM_DEVICE(dip))) in pm_rescan()
1006 PM_UNLOCK_DIP(dip); in pm_rescan()
1008 PM_LOCK_DIP(dip); in pm_rescan()
1012 pmf, PM_DEVICE(dip), in pm_rescan()
1014 PM_UNLOCK_DIP(dip); in pm_rescan()
1018 scanp->ps_scan_id = timeout(pm_rescan, (void *)dip, in pm_rescan()
1020 (PM_MIN_SCAN(dip) * hz))); in pm_rescan()
1022 "scanid %lx\n", pmf, PM_DEVICE(dip), in pm_rescan()
1026 pmf, PM_DEVICE(dip))) in pm_rescan()
1029 PM_UNLOCK_DIP(dip); in pm_rescan()
1036 dev_info_t *dip = (dev_info_t *)arg; in pm_scan()
1040 PMD(PMD_SCAN, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_scan()
1042 PM_LOCK_DIP(dip); in pm_scan()
1043 scanp = PM_GET_PM_SCAN(dip); in pm_scan()
1044 ASSERT(scanp && PM_GET_PM_INFO(dip)); in pm_scan()
1046 if (pm_scans_disabled || !PM_SCANABLE(dip) || in pm_scan()
1049 PM_UNLOCK_DIP(dip); in pm_scan()
1060 "(pmid %x)\n", pmf, PM_DEVICE(dip), scanp->ps_idle_down)) in pm_scan()
1067 pmf, PM_DEVICE(dip))) in pm_scan()
1069 PM_UNLOCK_DIP(dip); in pm_scan()
1077 PM_UNLOCK_DIP(dip); in pm_scan()
1078 nextscan = pm_scan_dev(dip); in pm_scan()
1079 PM_LOCK_DIP(dip); in pm_scan()
1088 "(pmid %x)\n", pmf, PM_DEVICE(dip), scanp->ps_idle_down)) in pm_scan()
1098 PM_DEVICE(dip), (ulong_t)scanp->ps_scan_id)) in pm_scan()
1099 PM_UNLOCK_DIP(dip); in pm_scan()
1102 scanp->ps_scan_id = timeout(pm_rescan, (void *)dip, in pm_scan()
1105 "%lx sec, scanid(%lx) \n", pmf, PM_DEVICE(dip), in pm_scan()
1109 PM_UNLOCK_DIP(dip); in pm_scan()
1113 pm_get_timestamps(dev_info_t *dip, time_t *valuep) in pm_get_timestamps() argument
1115 int components = PM_NUMCMPTS(dip); in pm_get_timestamps()
1119 PM_LOCK_BUSY(dip); /* so we get a consistent view */ in pm_get_timestamps()
1121 valuep[i] = PM_CP(dip, i)->pmc_timestamp; in pm_get_timestamps()
1123 PM_UNLOCK_BUSY(dip); in pm_get_timestamps()
1134 pm_noinvol(dev_info_t *dip) in pm_noinvol() argument
1141 if (PM_IS_CFB(dip)) { in pm_noinvol()
1143 pmf, PM_DEVICE(dip))) in pm_noinvol()
1149 if (DEVI(dip)->devi_pm_noinvolpm == 0) { in pm_noinvol()
1151 if (DEVI(dip)->devi_pm_volpmd != 0) { in pm_noinvol()
1152 dev_info_t *pdip = dip; in pm_noinvol()
1162 ASSERT(DEVI(dip)->devi_pm_volpmd == 0); in pm_noinvol()
1173 if (DEVI(dip)->devi_pm_noinvolpm != DEVI(dip)->devi_pm_volpmd) in pm_noinvol()
1175 DEVI(dip)->devi_pm_noinvolpm, DEVI(dip)->devi_pm_volpmd, in pm_noinvol()
1176 PM_DEVICE(dip))) in pm_noinvol()
1178 return (DEVI(dip)->devi_pm_noinvolpm != DEVI(dip)->devi_pm_volpmd); in pm_noinvol()
1192 pm_scan_dev(dev_info_t *dip) in pm_scan_dev() argument
1204 dev_info_t *pdip = ddi_get_parent(dip); in pm_scan_dev()
1210 if (DEVI_IS_ATTACHING(dip)) { in pm_scan_dev()
1212 pmf, PM_DEVICE(dip), min_scan)) in pm_scan_dev()
1216 PM_LOCK_DIP(dip); in pm_scan_dev()
1217 scanp = PM_GET_PM_SCAN(dip); in pm_scan_dev()
1218 min_scan = PM_MIN_SCAN(dip); in pm_scan_dev()
1219 ASSERT(scanp && PM_GET_PM_INFO(dip)); in pm_scan_dev()
1221 PMD(PMD_SCAN, ("%s: [BEGIN %s@%s(%s#%d)]\n", pmf, PM_DEVICE(dip))) in pm_scan_dev()
1222 PMD(PMD_SCAN, ("%s: %s@%s(%s#%d): kuc is %d\n", pmf, PM_DEVICE(dip), in pm_scan_dev()
1223 PM_KUC(dip))) in pm_scan_dev()
1226 if (pm_scans_disabled || !PM_SCANABLE(dip) || in pm_scan_dev()
1228 (PM_KUC(dip) != 0) || in pm_scan_dev()
1229 PM_ISDIRECT(dip) || pm_noinvol(dip)) { in pm_scan_dev()
1230 PM_UNLOCK_DIP(dip); in pm_scan_dev()
1234 pmf, PM_DEVICE(dip), pm_scans_disabled, autopm_enabled, in pm_scan_dev()
1235 cpupm, PM_KUC(dip), in pm_scan_dev()
1236 PM_ISDIRECT(dip) ? "is" : "is not", in pm_scan_dev()
1237 pm_noinvol(dip) ? "is" : "is not")) in pm_scan_dev()
1240 PM_UNLOCK_DIP(dip); in pm_scan_dev()
1248 size = PM_NUMCMPTS(dip) * sizeof (time_t); in pm_scan_dev()
1250 pm_get_timestamps(dip, timestamp); in pm_scan_dev()
1257 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_scan_dev()
1261 cp = PM_CP(dip, i); in pm_scan_dev()
1271 "lowest\n", pmf, PM_DEVICE(dip), i)) in pm_scan_dev()
1276 thresh = cur_threshold(dip, i); /* comp i threshold */ in pm_scan_dev()
1289 pmf, PM_DEVICE(dip), i, idletime)) in pm_scan_dev()
1290 if (idletime >= thresh || PM_IS_PID(dip)) { in pm_scan_dev()
1293 pmf, PM_DEVICE(dip), i, curpwr, nxtpwr)) in pm_scan_dev()
1294 if (pm_set_power(dip, i, nxtpwr, PM_LEVEL_DOWNONLY, in pm_scan_dev()
1296 PM_CURPOWER(dip, i) != nxtpwr) { in pm_scan_dev()
1298 "%d->%d Failed\n", pmf, PM_DEVICE(dip), in pm_scan_dev()
1305 PM_DEVICE(dip), i, curpwr, nxtpwr, in pm_scan_dev()
1316 1, cur_threshold(dip, i)); in pm_scan_dev()
1319 max(1, cur_threshold(dip, i))); in pm_scan_dev()
1321 "timeleft(%lx)\n", pmf, PM_DEVICE(dip), in pm_scan_dev()
1330 "%lx\n", pmf, PM_DEVICE(dip), i, timeleft)) in pm_scan_dev()
1336 PM_DEVICE(dip), timeleft)) in pm_scan_dev()
1350 pm_scan_stop(dev_info_t *dip) in pm_scan_stop() argument
1356 PMD(PMD_SCAN, ("%s: [BEGIN %s@%s(%s#%d)]\n", pmf, PM_DEVICE(dip))) in pm_scan_stop()
1357 PM_LOCK_DIP(dip); in pm_scan_stop()
1358 scanp = PM_GET_PM_SCAN(dip); in pm_scan_stop()
1361 pmf, PM_DEVICE(dip))) in pm_scan_stop()
1362 PM_UNLOCK_DIP(dip); in pm_scan_stop()
1371 PM_UNLOCK_DIP(dip); in pm_scan_stop()
1373 PM_LOCK_DIP(dip); in pm_scan_stop()
1377 PM_UNLOCK_DIP(dip); in pm_scan_stop()
1379 PM_LOCK_DIP(dip); in pm_scan_stop()
1381 PM_UNLOCK_DIP(dip); in pm_scan_stop()
1382 PMD(PMD_SCAN, ("%s: [END %s@%s(%s#%d)]\n", pmf, PM_DEVICE(dip))) in pm_scan_stop()
1386 pm_scan_stop_walk(dev_info_t *dip, void *arg) in pm_scan_stop_walk() argument
1390 if (!PM_GET_PM_SCAN(dip)) in pm_scan_stop_walk()
1392 ASSERT(!PM_ISBC(dip)); in pm_scan_stop_walk()
1393 pm_scan_stop(dip); in pm_scan_stop_walk()
1438 pm_ppm_claimed(dev_info_t *dip) in pm_ppm_claimed() argument
1440 return (PPM(dip) != NULL); in pm_ppm_claimed()
1448 pm_clear_volpm_dip(dev_info_t *dip) in pm_clear_volpm_dip() argument
1452 if (dip == NULL) in pm_clear_volpm_dip()
1455 PM_DEVICE(dip))) in pm_clear_volpm_dip()
1456 DEVI(dip)->devi_pm_volpmd = 0; in pm_clear_volpm_dip()
1457 for (dip = ddi_get_child(dip); dip; dip = ddi_get_next_sibling(dip)) { in pm_clear_volpm_dip()
1458 pm_clear_volpm_dip(dip); in pm_clear_volpm_dip()
1468 pm_clear_volpm_list(dev_info_t *dip) in pm_clear_volpm_list() argument
1476 (void) ddi_pathname(dip, pathbuf); in pm_clear_volpm_list()
1501 power_dev(dev_info_t *dip, int comp, int level, int old_level, in power_dev() argument
1511 struct pm_component *cp = PM_CP(dip, comp); in power_dev()
1513 int bc = PM_ISBC(dip); in power_dev()
1526 if (devi_detach(dip, DDI_PM_SUSPEND) != DDI_SUCCESS) { in power_dev()
1529 pmf, PM_DEVICE(dip))) in power_dev()
1532 DEVI(dip)->devi_pm_flags |= PMC_SUSPENDED; in power_dev()
1537 power_req.req.ppm_set_power_req.who = dip; in power_dev()
1544 if (pm_ppm_claimed(dip)) { in power_dev()
1545 ppmname = PM_NAME(PPM(dip)); in power_dev()
1546 ppmaddr = PM_ADDR(PPM(dip)); in power_dev()
1553 pmf, PM_DEVICE(dip), cp->pmc_comp.pmc_name, comp, in power_dev()
1562 if (DEVI(dip)->devi_pm_volpmd && in power_dev()
1563 (!bc && pm_all_components_off(dip) && level != 0) || in power_dev()
1566 if ((power_op_ret = pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, in power_dev()
1576 int volpmd = DEVI(dip)->devi_pm_volpmd; in power_dev()
1577 pm_clear_volpm_dip(dip); in power_dev()
1578 pm_clear_volpm_list(dip); in power_dev()
1580 (void) ddi_pathname(dip, pathbuf); in power_dev()
1582 volpmd, 0, pathbuf, dip); in power_dev()
1588 PM_DEVICE(dip), level, power_val_to_string(cp, level))) in power_dev()
1607 ASSERT(PM_ISDIRECT(dip) || DEVI_IS_DETACHING(dip)); in power_dev()
1614 ASSERT((DEVI(dip)->devi_pm_flags & in power_dev()
1616 (PM_CP(dip, comp)->pmc_flags & in power_dev()
1627 ASSERT((DEVI(dip)->devi_pm_flags & in power_dev()
1629 (PM_CP(dip, comp)->pmc_flags & in power_dev()
1637 ASSERT(DEVI(dip)->devi_pm_flags & PMC_SUSPENDED); in power_dev()
1639 if ((power_op_ret = devi_attach(dip, DDI_PM_RESUME)) == in power_dev()
1641 DEVI(dip)->devi_pm_flags &= ~PMC_SUSPENDED; in power_dev()
1644 PM_DEVICE(dip)); in power_dev()
1654 pm_devi_lock_held(dev_info_t *dip) in pm_devi_lock_held() argument
1658 if (DEVI_BUSY_OWNED(dip)) in pm_devi_lock_held()
1672 return (cur != NULL && cur->pmlk_lender == DEVI(dip)->devi_busy_thread); in pm_devi_lock_held()
1693 pm_set_power(dev_info_t *dip, int comp, int level, int direction, in pm_set_power() argument
1702 dev_info_t *pdip = ddi_get_parent(dip); in pm_set_power()
1712 if (dip == cfb_dip) { in pm_set_power()
1722 pmf, PM_DEVICE(dip), comp, pm_decode_direction(direction), level)) in pm_set_power()
1724 (void) ddi_pathname(dip, pathbuf); in pm_set_power()
1725 bpc.bpc_dip = dip; in pm_set_power()
1728 bpc.bpc_olevel = PM_CURPOWER(dip, comp); in pm_set_power()
1743 if (pm_devi_lock_held(pdip) || pm_devi_lock_held(dip)) in pm_set_power()
1744 ret = pm_busop_set_power(dip, NULL, BUS_POWER_CHILD_PWRCHG, in pm_set_power()
1752 "errno=%d\n", pmf, PM_DEVICE(dip), ret, *retp)) in pm_set_power()
1865 dev_info_t *dip; in pm_unkeeps() local
1875 dip = pm_name_to_dip(keeper, 1); in pm_unkeeps()
1888 if ((dip != NULL) && (PM_GET_PM_INFO(dip) != NULL)) { in pm_unkeeps()
1890 PM_LOCK_POWER(dip); in pm_unkeeps()
1891 for (j = 0; j < PM_NUMCMPTS(dip); j++) { in pm_unkeeps()
1892 cp = &DEVI(dip)->devi_pm_components[j]; in pm_unkeeps()
1903 PM_UNLOCK_POWER(dip); in pm_unkeeps()
1918 if (dip) in pm_unkeeps()
1919 ddi_release_devi(dip); in pm_unkeeps()
2068 e_pm_hold_rele_power(dev_info_t *dip, int cnt) in e_pm_hold_rele_power() argument
2072 if ((dip == NULL) || in e_pm_hold_rele_power()
2073 (PM_GET_PM_INFO(dip) == NULL) || PM_ISBC(dip)) in e_pm_hold_rele_power()
2076 PM_LOCK_POWER(dip); in e_pm_hold_rele_power()
2077 ASSERT(cnt >= 0 || (cnt < 0 && PM_KUC(dip) > 0)); in e_pm_hold_rele_power()
2079 PM_DEVICE(dip), PM_KUC(dip), (PM_KUC(dip) + cnt))) in e_pm_hold_rele_power()
2081 PM_KUC(dip) += cnt; in e_pm_hold_rele_power()
2083 PM_UNLOCK_POWER(dip); in e_pm_hold_rele_power()
2085 if (cnt < 0 && PM_KUC(dip) == 0) in e_pm_hold_rele_power()
2086 pm_rescan(dip); in e_pm_hold_rele_power()
2105 pm_ppm_notify_all_lowest(dev_info_t *dip, int mode) in pm_ppm_notify_all_lowest() argument
2115 (void) pm_ctlops((dev_info_t *)ppmcp->ppmc_dip, dip, in pm_ppm_notify_all_lowest()
2140 pm_set_pm_info(dev_info_t *dip, void *value) in pm_set_pm_info() argument
2142 DEVI(dip)->devi_pm_info = value; in pm_set_pm_info()
2151 pm_rsvp_lookup(dev_info_t *dip, int comp) in pm_rsvp_lookup() argument
2156 if (p->pr_dip == dip && p->pr_comp == comp) { in pm_rsvp_lookup()
2169 pm_proceed(dev_info_t *dip, int cmd, int comp, int newlevel) in pm_proceed() argument
2182 if (dip == p->pr_dip) { in pm_proceed()
2185 pmf, PM_DEVICE(dip))) in pm_proceed()
2196 found = pm_rsvp_lookup(dip, comp); in pm_proceed()
2206 PM_DEVICE(dip))) in pm_proceed()
2210 PM_DEVICE(dip))) in pm_proceed()
2286 pm_rem_info(dev_info_t *dip) in pm_rem_info() argument
2290 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_rem_info()
2291 dev_info_t *pdip = ddi_get_parent(dip); in pm_rem_info()
2297 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_rem_info()
2298 if (PM_ISDIRECT(dip)) { in pm_rem_info()
2302 pm_proceed(dip, PMP_RELEASE, -1, -1); in pm_rem_info()
2304 ASSERT(!PM_GET_PM_SCAN(dip)); in pm_rem_info()
2314 PM_DEVICE(dip), PM_NUMCMPTS(dip))) in pm_rem_info()
2317 if (PM_ISBC(dip)) { in pm_rem_info()
2318 count = (PM_CURPOWER(dip, 0) != 0); in pm_rem_info()
2320 for (i = 0; i < PM_NUMCMPTS(dip); i++) in pm_rem_info()
2321 count += (PM_CURPOWER(dip, i) != 0); in pm_rem_info()
2324 if (PM_NUMCMPTS(dip) && pdip && !PM_WANTS_NOTIFICATION(pdip)) in pm_rem_info()
2329 (void) ddi_pathname(dip, pathbuf); in pm_rem_info()
2338 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_rem_info()
2339 pm_component_t *cp = PM_CP(dip, i); in pm_rem_info()
2341 PM_DECR_NOTLOWEST(dip) in pm_rem_info()
2347 pm_set_pm_info(dip, NULL); in pm_rem_info()
2352 pm_get_norm_pwrs(dev_info_t *dip, int **valuep, size_t *length) in pm_get_norm_pwrs() argument
2354 int components = PM_NUMCMPTS(dip); in pm_get_norm_pwrs()
2361 "can't get normal power values\n", PM_DEVICE(dip)); in pm_get_norm_pwrs()
2367 bufp[i] = pm_get_normal_power(dip, i); in pm_get_norm_pwrs()
2376 pm_reset_timestamps(dev_info_t *dip, void *arg) in pm_reset_timestamps() argument
2383 if (!PM_GET_PM_INFO(dip)) in pm_reset_timestamps()
2385 components = PM_NUMCMPTS(dip); in pm_reset_timestamps()
2387 PM_LOCK_BUSY(dip); in pm_reset_timestamps()
2394 cp = PM_CP(dip, i); in pm_reset_timestamps()
2398 PM_UNLOCK_BUSY(dip); in pm_reset_timestamps()
2407 pm_level_to_index(dev_info_t *dip, pm_component_t *cp, int level) in pm_level_to_index() argument
2420 pmf, PM_DEVICE(dip), in pm_level_to_index()
2421 (int)(cp - DEVI(dip)->devi_pm_components), level)) in pm_level_to_index()
2426 "%s@%s(%s#%d)", level, PM_DEVICE(dip)); in pm_level_to_index()
2434 e_pm_set_cur_pwr(dev_info_t *dip, pm_component_t *cp, int level) in e_pm_set_cur_pwr() argument
2452 PM_INCR_NOTLOWEST(dip); in e_pm_set_cur_pwr()
2454 PM_DECR_NOTLOWEST(dip); in e_pm_set_cur_pwr()
2457 cp->pmc_cur_pwr = pm_level_to_index(dip, cp, level); in e_pm_set_cur_pwr()
2467 pm_power(dev_info_t *dip, int comp, int level) in pm_power() argument
2472 struct pm_component *cp = PM_CP(dip, comp); in pm_power()
2474 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_power()
2477 PM_DEVICE(dip), comp, level)) in pm_power()
2478 if (!(ops = ddi_get_driver(dip))) { in pm_power()
2480 PM_DEVICE(dip))) in pm_power()
2490 retval = (*fn)(dip, comp, level); in pm_power()
2493 e_pm_set_cur_pwr(dip, PM_CP(dip, comp), level); in pm_power()
2508 (void) pm_phc_impl(dip, comp, phc_lvl, 0); in pm_power()
2510 pmf, PM_DEVICE(dip), comp, phc_lvl)) in pm_power()
2514 "level=%d (%s)\n", pmf, comp, cp->pmc_comp.pmc_name, PM_DEVICE(dip), in pm_power()
2520 pm_unmanage(dev_info_t *dip) in pm_unmanage() argument
2526 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_unmanage()
2528 PM_DEVICE(dip))) in pm_unmanage()
2530 power_req.req.ppm_config_req.who = dip; in pm_unmanage()
2531 if (pm_ppm_claimed(dip)) in pm_unmanage()
2532 retval = pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, in pm_unmanage()
2536 retval = pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, in pm_unmanage()
2540 pm_rem_info(dip); in pm_unmanage()
2545 pm_raise_power(dev_info_t *dip, int comp, int level) in pm_raise_power() argument
2549 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, comp, NULL) || in pm_raise_power()
2550 !e_pm_valid_power(dip, comp, level)) in pm_raise_power()
2553 return (dev_is_needed(dip, comp, level, PM_LEVEL_UPONLY)); in pm_raise_power()
2557 pm_lower_power(dev_info_t *dip, int comp, int level) in pm_lower_power() argument
2561 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, comp, NULL) || in pm_lower_power()
2562 !e_pm_valid_power(dip, comp, level)) { in pm_lower_power()
2564 "comp=%d level=%d\n", pmf, PM_DEVICE(dip), comp, level)) in pm_lower_power()
2568 if (!DEVI_IS_DETACHING(dip)) { in pm_lower_power()
2570 pmf, PM_DEVICE(dip))) in pm_lower_power()
2578 if (!PM_SCANABLE(dip) || pm_noinvol(dip)) { in pm_lower_power()
2580 pmf, PM_DEVICE(dip), in pm_lower_power()
2584 pm_noinvol(dip) ? "pm_noinvol()" : "")) in pm_lower_power()
2588 if (dev_is_needed(dip, comp, level, PM_LEVEL_DOWNONLY) != DDI_SUCCESS) { in pm_lower_power()
2590 PM_DEVICE(dip))) in pm_lower_power()
2600 pm_psc_dip_to_direct(dev_info_t *dip, pscc_t **psccp) in pm_psc_dip_to_direct() argument
2607 if (p->pscc_dip == dip) { in pm_psc_dip_to_direct()
2617 panic("sunpm: no entry for dip %p in direct list", (void *)dip); in pm_psc_dip_to_direct()
2630 psc_entry(ushort_t event, psce_t *psce, dev_info_t *dip, int comp, int new, in psc_entry() argument
2640 (void) ddi_pathname(dip, buf); in psc_entry()
2724 pm_enqueue_notify(ushort_t cmd, dev_info_t *dip, int comp, in pm_enqueue_notify() argument
2737 pmf, PM_DEVICE(dip), comp, oldlevel, newlevel)) in pm_enqueue_notify()
2738 psce = pm_psc_dip_to_direct(dip, &pscc); in pm_enqueue_notify()
2741 "%d\n", pmf, PM_DEVICE(dip), pscc->pscc_clone, in pm_enqueue_notify()
2743 overrun = psc_entry(cmd, psce, dip, comp, newlevel, oldlevel, in pm_enqueue_notify()
2755 pmf, PM_DEVICE(dip), comp, oldlevel, newlevel)) in pm_enqueue_notify()
2756 if (PM_ISDIRECT(dip) && canblock != PM_CANBLOCK_BYPASS) { in pm_enqueue_notify()
2757 psce = pm_psc_dip_to_direct(dip, &pscc); in pm_enqueue_notify()
2759 "%d\n", pmf, PM_DEVICE(dip), pscc->pscc_clone, in pm_enqueue_notify()
2761 overrun = psc_entry(cmd, psce, dip, comp, newlevel, in pm_enqueue_notify()
2774 (void) psc_entry(cmd, psce, dip, comp, newlevel, in pm_enqueue_notify()
2811 pm_try_parent_child_locks(dev_info_t *pdip, dev_info_t *dip) in pm_try_parent_child_locks() argument
2814 if (PM_TRY_LOCK_POWER(dip)) { in pm_try_parent_child_locks()
2835 pm_blocked_by_us(dev_info_t *dip) in pm_blocked_by_us() argument
2841 dev_info_t *ppm = (dev_info_t *)DEVI(dip)->devi_pm_ppm; in pm_blocked_by_us()
2844 power_req.req.ppm_power_lock_owner_req.who = dip; in pm_blocked_by_us()
2845 if (pm_ctlops(ppm, dip, DDI_CTLOPS_POWER, &power_req, &result) != in pm_blocked_by_us()
2853 PM_DEVICE(dip)); in pm_blocked_by_us()
2872 pm_notify_parent(dev_info_t *dip, in pm_notify_parent() argument
2880 bphc.bphc_dip = dip; in pm_notify_parent()
2881 bphc.bphc_path = ddi_pathname(dip, pathbuf); in pm_notify_parent()
2897 pm_check_and_resume(dev_info_t *dip, int comp, int old_level, int level) in pm_check_and_resume() argument
2901 if (PM_ISBC(dip) && comp == 0 && old_level == 0 && level != 0) { in pm_check_and_resume()
2902 ASSERT(DEVI(dip)->devi_pm_flags & PMC_SUSPENDED); in pm_check_and_resume()
2904 if ((ret = devi_attach(dip, DDI_PM_RESUME)) != DDI_SUCCESS) in pm_check_and_resume()
2908 PM_NAME(dip), PM_ADDR(dip)); in pm_check_and_resume()
2909 DEVI(dip)->devi_pm_flags &= ~PMC_SUSPENDED; in pm_check_and_resume()
2935 pm_power_has_changed(dev_info_t *dip, int comp, int level) in pm_power_has_changed() argument
2939 dev_info_t *pdip = ddi_get_parent(dip); in pm_power_has_changed()
2945 PM_DEVICE(dip), level)) in pm_power_has_changed()
2950 PM_DEVICE(dip), comp, level)) in pm_power_has_changed()
2952 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, comp, &cp) || in pm_power_has_changed()
2953 !e_pm_valid_power(dip, comp, level)) in pm_power_has_changed()
2968 cp = PM_CP(dip, comp); in pm_power_has_changed()
2969 while (!pm_try_parent_child_locks(pdip, dip)) { in pm_power_has_changed()
2970 if (((blocked = pm_blocked_by_us(dip)) != 0) && in pm_power_has_changed()
2974 pm_enqueue_notify(PSC_HAS_CHANGED, dip, comp, in pm_power_has_changed()
2979 pm_notify_parent(dip, in pm_power_has_changed()
2981 (void) pm_check_and_resume(dip, in pm_power_has_changed()
2998 pm_level_to_index(dip, cp, level); in pm_power_has_changed()
3000 "level=%d\n", pmf, PM_DEVICE(dip), comp, level)) in pm_power_has_changed()
3008 return (pm_phc_impl(dip, in pm_power_has_changed()
3013 (!PM_ISBC(dip) || comp == 0) && in pm_power_has_changed()
3016 ret = pm_phc_impl(dip, comp, level, 1); in pm_power_has_changed()
3018 if ((!PM_ISBC(dip) || in pm_power_has_changed()
3034 (!PM_ISBC(dip) || comp == 0) && POWERING_ON(old_level, level)) in pm_power_has_changed()
3036 ret = pm_phc_impl(dip, comp, level, 1); in pm_power_has_changed()
3038 if ((!PM_ISBC(dip) || comp == 0) && level == 0 && in pm_power_has_changed()
3042 PM_UNLOCK_POWER(dip); in pm_power_has_changed()
3057 calc_cfb_comps_incr(dev_info_t *dip, int cmpt, int old, int new) in calc_cfb_comps_incr() argument
3059 struct pm_component *cp = PM_CP(dip, cmpt); in calc_cfb_comps_incr()
3075 update_comps_off(int incr, dev_info_t *dip) in update_comps_off() argument
3079 ASSERT(pm_cfb_comps_off <= PM_NUMCMPTS(dip)); in update_comps_off()
3088 pm_phc_impl(dev_info_t *dip, int comp, int level, int notify) in pm_phc_impl() argument
3093 dev_info_t *pdip = ddi_get_parent(dip); in pm_phc_impl()
3098 dev_info_t *ppm = (dev_info_t *)DEVI(dip)->devi_pm_ppm; in pm_phc_impl()
3103 cp = PM_CP(dip, comp); in pm_phc_impl()
3111 "level=%d\n", pmf, PM_DEVICE(dip), comp, level)) in pm_phc_impl()
3119 power_req.req.ppm_notify_level_req.who = dip; in pm_phc_impl()
3123 if (pm_ctlops(ppm, dip, DDI_CTLOPS_POWER, &power_req, in pm_phc_impl()
3126 pmf, PM_DEVICE(dip), level)) in pm_phc_impl()
3130 if (PM_IS_CFB(dip)) { in pm_phc_impl()
3131 incr = calc_cfb_comps_incr(dip, comp, old_level, level); in pm_phc_impl()
3134 update_comps_off(incr, dip); in pm_phc_impl()
3136 "cfb_comps_off->%d\n", pmf, PM_DEVICE(dip), in pm_phc_impl()
3140 e_pm_set_cur_pwr(dip, PM_CP(dip, comp), level); in pm_phc_impl()
3145 pm_notify_parent(dip, pdip, comp, old_level, level); in pm_phc_impl()
3146 (void) pm_check_and_resume(dip, comp, old_level, level); in pm_phc_impl()
3155 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_phc_impl()
3156 cp = PM_CP(dip, i); in pm_phc_impl()
3173 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_phc_impl()
3174 cp = PM_CP(dip, i); in pm_phc_impl()
3189 (void) ddi_pathname(dip, pathbuf); in pm_phc_impl()
3197 pm_enqueue_notify(PSC_HAS_CHANGED, dip, comp, level, old_level, in pm_phc_impl()
3202 PMD(PMD_RESCAN, ("%s: %s@%s(%s#%d): pm_rescan\n", pmf, PM_DEVICE(dip))) in pm_phc_impl()
3203 pm_rescan(dip); in pm_phc_impl()
3219 pm_register_ppm(int (*func)(dev_info_t *), dev_info_t *dip) in pm_register_ppm() argument
3234 ppmcp->ppmc_dip = dip; in pm_register_ppm()
3242 while ((dip = ddi_get_parent(dip)) != NULL) { in pm_register_ppm()
3243 if (dip != ddi_root_node() && PM_GET_PM_INFO(dip) == NULL) in pm_register_ppm()
3245 pm_ppm_claim(dip); in pm_register_ppm()
3247 if (pm_ppm_claimed(dip) && PM_GET_PM_INFO(dip)) { in pm_register_ppm()
3253 p->who = dip; in pm_register_ppm()
3254 PM_LOCK_POWER(dip); in pm_register_ppm()
3255 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_register_ppm()
3256 cp = PM_CP(dip, i); in pm_register_ppm()
3262 if (pm_ctlops(PPM(dip), dip, in pm_register_ppm()
3268 PM_DEVICE(dip), pwr)) in pm_register_ppm()
3272 PM_UNLOCK_POWER(dip); in pm_register_ppm()
3284 pm_ppm_claim(dev_info_t *dip) in pm_ppm_claim() argument
3288 if (PPM(dip)) { in pm_ppm_claim()
3293 if ((*ppmcp->ppmc_func)(dip)) { in pm_ppm_claim()
3294 DEVI(dip)->devi_pm_ppm = in pm_ppm_claim()
3309 pm_detaching(dev_info_t *dip) in pm_detaching() argument
3312 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_detaching()
3315 PMD(PMD_REMDEV, ("%s: %s@%s(%s#%d), %d comps\n", pmf, PM_DEVICE(dip), in pm_detaching()
3316 PM_NUMCMPTS(dip))) in pm_detaching()
3319 ASSERT(DEVI_IS_DETACHING(dip)); in pm_detaching()
3320 PM_LOCK_DIP(dip); in pm_detaching()
3322 PM_UNLOCK_DIP(dip); in pm_detaching()
3323 if (!PM_ISBC(dip)) in pm_detaching()
3324 pm_scan_stop(dip); in pm_detaching()
3329 iscons = PM_IS_CFB(dip); in pm_detaching()
3330 if (iscons || PM_ISBC(dip)) { in pm_detaching()
3331 (void) pm_all_to_normal(dip, PM_CANBLOCK_BYPASS); in pm_detaching()
3353 pm_detach_failed(dev_info_t *dip) in pm_detach_failed() argument
3356 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_detach_failed()
3361 ASSERT(DEVI_IS_DETACHING(dip)); in pm_detach_failed()
3366 if (!pm_all_at_normal(dip)) { in pm_detach_failed()
3367 if (pm_all_to_normal(dip, in pm_detach_failed()
3371 PM_DEVICE(dip))) in pm_detach_failed()
3377 if (!PM_ISBC(dip)) { in pm_detach_failed()
3379 if (PM_SCANABLE(dip)) in pm_detach_failed()
3380 pm_scan_init(dip); in pm_detach_failed()
3382 pm_rescan(dip); in pm_detach_failed()
3392 e_pm_default_levels(dev_info_t *dip, pm_component_t *cp, int norm) in e_pm_default_levels() argument
3399 e_pm_set_cur_pwr(dip, cp, norm); in e_pm_default_levels()
3403 e_pm_default_components(dev_info_t *dip, int cmpts) in e_pm_default_components() argument
3406 pm_component_t *p = DEVI(dip)->devi_pm_components; in e_pm_default_components()
3408 p = DEVI(dip)->devi_pm_components; in e_pm_default_components()
3430 pm_premanage(dev_info_t *dip, int style) in pm_premanage() argument
3435 pm_component_t *p = DEVI(dip)->devi_pm_components; in pm_premanage()
3438 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_premanage()
3442 if (DEVI(dip)->devi_pm_flags & PMC_COMPONENTS_DONE) in pm_premanage()
3444 if (DEVI(dip)->devi_pm_flags & PMC_COMPONENTS_FAILED) { in pm_premanage()
3451 if ((compp = pm_autoconfig(dip, &error)) == NULL) { in pm_premanage()
3456 DEVI(dip)->devi_pm_flags |= PMC_COMPONENTS_FAILED; in pm_premanage()
3465 if ((cmpts = PM_NUMCMPTS(dip)) == 0) { in pm_premanage()
3472 DEVI(dip)->devi_pm_flags |= PMC_BC; in pm_premanage()
3473 e_pm_default_components(dip, cmpts); in pm_premanage()
3481 norm = pm_get_normal_power(dip, i); in pm_premanage()
3484 PM_DEVICE(dip), i)) in pm_premanage()
3491 PM_INCR_NOTLOWEST(dip); in pm_premanage()
3492 e_pm_default_levels(dip, PM_CP(dip, i), norm); in pm_premanage()
3499 cmpts = PM_NUMCMPTS(dip); in pm_premanage()
3502 p = DEVI(dip)->devi_pm_components; in pm_premanage()
3505 ASSERT(PM_CP(dip, i)->pmc_cur_pwr == 0); in pm_premanage()
3506 e_pm_set_cur_pwr(dip, PM_CP(dip, i), PM_LEVEL_UNKNOWN); in pm_premanage()
3508 if (DEVI(dip)->devi_pm_flags & PMC_CPU_THRESH) in pm_premanage()
3509 pm_set_device_threshold(dip, pm_cpu_idle_threshold, in pm_premanage()
3512 pm_set_device_threshold(dip, pm_system_idle_threshold, in pm_premanage()
3530 e_pm_manage(dev_info_t *dip, int style) in e_pm_manage() argument
3534 dev_info_t *pdip = ddi_get_parent(dip); in e_pm_manage()
3539 if (pm_premanage(dip, style) != DDI_SUCCESS) { in e_pm_manage()
3542 PMD(PMD_KIDSUP, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in e_pm_manage()
3543 ASSERT(PM_GET_PM_INFO(dip) == NULL); in e_pm_manage()
3552 count = (PM_ISBC(dip)) ? 1 : PM_NUMCMPTS(dip); in e_pm_manage()
3556 pm_set_pm_info(dip, info); in e_pm_manage()
3560 (void) pm_thresh_specd(dip); in e_pm_manage()
3566 (void) ddi_pathname(dip, pathbuf); in e_pm_manage()
3571 if (!PM_ISBC(dip)) { in e_pm_manage()
3573 if (PM_SCANABLE(dip)) { in e_pm_manage()
3574 pm_scan_init(dip); in e_pm_manage()
3576 pm_rescan(dip); in e_pm_manage()
3591 pm_get_normal_power(dev_info_t *dip, int comp) in pm_get_normal_power() argument
3594 if (comp >= 0 && comp < PM_NUMCMPTS(dip)) { in pm_get_normal_power()
3595 return (PM_CP(dip, comp)->pmc_norm_pwr); in pm_get_normal_power()
3604 pm_get_current_power(dev_info_t *dip, int comp, int *levelp) in pm_get_current_power() argument
3606 if (comp >= 0 && comp < PM_NUMCMPTS(dip)) { in pm_get_current_power()
3607 *levelp = PM_CURPOWER(dip, comp); in pm_get_current_power()
3617 cur_threshold(dev_info_t *dip, int comp) in cur_threshold() argument
3619 pm_component_t *cp = PM_CP(dip, comp); in cur_threshold()
3622 if (PM_ISBC(dip)) { in cur_threshold()
3631 if (DEVI(dip)->devi_pm_flags & PMC_NEXDEF_THRESH) in cur_threshold()
3633 else if (DEVI(dip)->devi_pm_flags & PMC_CPU_THRESH) in cur_threshold()
3667 pm_update_maxpower(dev_info_t *dip, int comp, int level) in pm_update_maxpower() argument
3673 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, comp, NULL) || in pm_update_maxpower()
3674 !e_pm_valid_power(dip, comp, level)) { in pm_update_maxpower()
3676 "comp=%d level=%d\n", pmf, PM_DEVICE(dip), comp, level)) in pm_update_maxpower()
3679 old = e_pm_get_max_power(dip, comp); in pm_update_maxpower()
3680 e_pm_set_max_power(dip, comp, level); in pm_update_maxpower()
3682 if (pm_set_power(dip, comp, level, PM_LEVEL_DOWNONLY, in pm_update_maxpower()
3684 e_pm_set_max_power(dip, comp, old); in pm_update_maxpower()
3686 PM_DEVICE(dip))) in pm_update_maxpower()
3696 pm_all_to_normal(dev_info_t *dip, pm_canblock_t canblock) in pm_all_to_normal() argument
3704 PMD(PMD_ALLNORM, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_all_to_normal()
3705 ASSERT(PM_GET_PM_INFO(dip)); in pm_all_to_normal()
3706 if (pm_get_norm_pwrs(dip, &normal, &size) != DDI_SUCCESS) { in pm_all_to_normal()
3708 "%s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_all_to_normal()
3711 ncomps = PM_NUMCMPTS(dip); in pm_all_to_normal()
3713 if (pm_set_power(dip, i, normal[i], in pm_all_to_normal()
3718 PM_DEVICE(dip), i, normal[i], result)) in pm_all_to_normal()
3724 "to full power\n", pmf, changefailed, PM_DEVICE(dip))) in pm_all_to_normal()
3734 pm_all_at_normal(dev_info_t *dip) in pm_all_at_normal() argument
3741 PMD(PMD_ALLNORM, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_all_at_normal()
3742 if (pm_get_norm_pwrs(dip, &normal, &size) != DDI_SUCCESS) { in pm_all_at_normal()
3746 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_all_at_normal()
3747 int current = PM_CURPOWER(dip, i); in pm_all_at_normal()
3750 "norm=%d, cur=%d\n", pmf, PM_DEVICE(dip), i, in pm_all_at_normal()
3756 if (i != PM_NUMCMPTS(dip)) { in pm_all_at_normal()
3891 e_pm_create_components(dev_info_t *dip, int num_components) in e_pm_create_components() argument
3896 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in e_pm_create_components()
3897 ASSERT(!DEVI(dip)->devi_pm_components); in e_pm_create_components()
3898 ASSERT(!(DEVI(dip)->devi_pm_flags & PMC_COMPONENTS_DONE)); in e_pm_create_components()
3903 DEVI(dip)->devi_pm_comp_size = size; in e_pm_create_components()
3904 DEVI(dip)->devi_pm_num_components = num_components; in e_pm_create_components()
3905 PM_LOCK_BUSY(dip); in e_pm_create_components()
3911 PM_UNLOCK_BUSY(dip); in e_pm_create_components()
3912 DEVI(dip)->devi_pm_components = ocompp; in e_pm_create_components()
3913 DEVI(dip)->devi_pm_flags |= PMC_COMPONENTS_DONE; in e_pm_create_components()
3984 e_pm_set_max_power(dev_info_t *dip, int component_number, int level) in e_pm_set_max_power() argument
3986 PM_CP(dip, component_number)->pmc_norm_pwr = level; in e_pm_set_max_power()
3993 e_pm_get_max_power(dev_info_t *dip, int component_number) in e_pm_get_max_power() argument
3995 return (PM_CP(dip, component_number)->pmc_norm_pwr); in e_pm_get_max_power()
4003 e_pm_destroy_components(dev_info_t *dip) in e_pm_destroy_components() argument
4008 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in e_pm_destroy_components()
4009 if (PM_NUMCMPTS(dip) == 0) in e_pm_destroy_components()
4011 cp = DEVI(dip)->devi_pm_components; in e_pm_destroy_components()
4013 for (i = 0; i < PM_NUMCMPTS(dip); i++, cp++) { in e_pm_destroy_components()
4020 if (PM_ISBC(dip)) in e_pm_destroy_components()
4027 kmem_free(DEVI(dip)->devi_pm_components, DEVI(dip)->devi_pm_comp_size); in e_pm_destroy_components()
4028 DEVI(dip)->devi_pm_components = NULL; in e_pm_destroy_components()
4029 DEVI(dip)->devi_pm_num_components = 0; in e_pm_destroy_components()
4030 DEVI(dip)->devi_pm_flags &= in e_pm_destroy_components()
4042 pm_autoconfig(dev_info_t *dip, int *errp) in pm_autoconfig() argument
4060 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_autoconfig()
4062 if (ddi_prop_lookup_string_array(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS, in pm_autoconfig()
4074 if (PM_NUMCMPTS(dip) != 0) { in pm_autoconfig()
4076 pmf, PM_DEVICE(dip), PM_NUMCMPTS(dip))) in pm_autoconfig()
4159 (void) e_pm_create_components(dip, components); in pm_autoconfig()
4161 e_pm_set_max_power(dip, i, np[i]); in pm_autoconfig()
4173 p->comp->pmc_name, PM_DEVICE(dip), in pm_autoconfig()
4183 p->comp->pmc_name, PM_DEVICE(dip), in pm_autoconfig()
4197 PM_DEVICE(dip))) in pm_autoconfig()
4220 e_pm_destroy_components(dip); in pm_autoconfig()
4227 cmn_err(CE_CONT, "! for %s@%s(%s#%d) is ill-formed.\n", PM_DEVICE(dip)); in pm_autoconfig()
4272 pm_set_device_threshold(dev_info_t *dip, int base, int flag) in pm_set_device_threshold() argument
4278 int ncomp = PM_NUMCMPTS(dip); in pm_set_device_threshold()
4284 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_set_device_threshold()
4285 PM_LOCK_DIP(dip); in pm_set_device_threshold()
4292 if (PM_IS_NEXUS(dip)) { in pm_set_device_threshold()
4295 PM_DEVICE(dip))) in pm_set_device_threshold()
4298 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4304 DEVI(dip)->devi_pm_dev_thresh = in pm_set_device_threshold()
4310 if (DEVI(dip)->devi_pm_flags & in pm_set_device_threshold()
4312 PM_LOCK_POWER(dip); in pm_set_device_threshold()
4313 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_set_device_threshold()
4314 if (PM_CURPOWER(dip, i) == 0) in pm_set_device_threshold()
4321 PM_DEVICE(dip), pm_comps_notlowest)) in pm_set_device_threshold()
4323 pm_ppm_notify_all_lowest(dip, in pm_set_device_threshold()
4327 PM_UNLOCK_POWER(dip); in pm_set_device_threshold()
4329 DEVI(dip)->devi_pm_flags &= PMC_THRESH_NONE; in pm_set_device_threshold()
4330 DEVI(dip)->devi_pm_flags |= PMC_NEXDEF_THRESH; in pm_set_device_threshold()
4331 PM_UNLOCK_DIP(dip); in pm_set_device_threshold()
4333 } else if (DEVI(dip)->devi_pm_flags & PMC_NEXDEF_THRESH) { in pm_set_device_threshold()
4339 PM_LOCK_POWER(dip); in pm_set_device_threshold()
4340 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_set_device_threshold()
4341 if (PM_CURPOWER(dip, i) == 0) in pm_set_device_threshold()
4345 pm_ppm_notify_all_lowest(dip, in pm_set_device_threshold()
4350 PM_DEVICE(dip), pm_comps_notlowest)) in pm_set_device_threshold()
4353 PM_UNLOCK_POWER(dip); in pm_set_device_threshold()
4361 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4369 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4377 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4380 "comp=%d, level=%d, %d\n", pmf, PM_DEVICE(dip), in pm_set_device_threshold()
4398 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4409 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4412 "comp=%d level=%d, %d\n", pmf, PM_DEVICE(dip), in pm_set_device_threshold()
4417 ASSERT(PM_IAM_LOCKING_DIP(dip)); in pm_set_device_threshold()
4418 DEVI(dip)->devi_pm_dev_thresh = base; in pm_set_device_threshold()
4419 DEVI(dip)->devi_pm_flags &= PMC_THRESH_NONE; in pm_set_device_threshold()
4420 DEVI(dip)->devi_pm_flags |= flag; in pm_set_device_threshold()
4421 PM_UNLOCK_DIP(dip); in pm_set_device_threshold()
4450 ddi_dev_is_needed(dev_info_t *dip, int cmpt, int level) in ddi_dev_is_needed() argument
4452 return (pm_raise_power(dip, cmpt, level)); in ddi_dev_is_needed()
4460 ddi_power(dev_info_t *dip, int pm_cmpt, int pm_level) in ddi_power() argument
4465 request.req.set_power_req.who = dip; in ddi_power()
4468 return (ddi_ctlops(dip, dip, DDI_CTLOPS_POWER, &request, NULL)); in ddi_power()
4478 ddi_removing_power(dev_info_t *dip) in ddi_removing_power() argument
4480 _NOTE(ARGUNUSED(dip)) in ddi_removing_power()
4489 e_ddi_parental_suspend_resume(dev_info_t *dip) in e_ddi_parental_suspend_resume() argument
4491 return (DEVI(dip)->devi_pm_flags & PMC_PARENTAL_SR); in e_ddi_parental_suspend_resume()
4499 e_ddi_suspend(dev_info_t *dip, ddi_detach_cmd_t cmd) in e_ddi_suspend() argument
4503 request.req.suspend_req.who = dip; in e_ddi_suspend()
4505 return (ddi_ctlops(dip, dip, DDI_CTLOPS_POWER, &request, NULL)); in e_ddi_suspend()
4513 e_ddi_resume(dev_info_t *dip, ddi_attach_cmd_t cmd) in e_ddi_resume() argument
4517 request.req.resume_req.who = dip; in e_ddi_resume()
4519 return (ddi_ctlops(dip, dip, DDI_CTLOPS_POWER, &request, NULL)); in e_ddi_resume()
4527 pm_create_components(dev_info_t *dip, int num_components) in pm_create_components() argument
4534 if (!DEVI_IS_ATTACHING(dip)) { in pm_create_components()
4539 if (DEVI(dip)->devi_pm_components) { in pm_create_components()
4541 PM_DEVICE(dip), PM_NUMCMPTS(dip))) in pm_create_components()
4544 e_pm_create_components(dip, num_components); in pm_create_components()
4545 DEVI(dip)->devi_pm_flags |= PMC_BC; in pm_create_components()
4546 e_pm_default_components(dip, num_components); in pm_create_components()
4556 pm_destroy_components(dev_info_t *dip) in pm_destroy_components() argument
4559 dev_info_t *pdip = ddi_get_parent(dip); in pm_destroy_components()
4562 PM_DEVICE(dip))) in pm_destroy_components()
4563 ASSERT(DEVI_IS_DETACHING(dip)); in pm_destroy_components()
4565 if (!PM_ISBC(dip)) in pm_destroy_components()
4567 "(%s@%s) calls pm_destroy_components", PM_NAME(dip), in pm_destroy_components()
4568 PM_ADDR(dip)); in pm_destroy_components()
4574 if (PM_NUMCMPTS(dip) == 0 || !PM_ISBC(dip)) { in pm_destroy_components()
4576 PM_DEVICE(dip))) in pm_destroy_components()
4579 ASSERT(PM_GET_PM_INFO(dip)); in pm_destroy_components()
4585 ASSERT(!PM_GET_PM_SCAN(dip)); /* better be gone already */ in pm_destroy_components()
4591 if ((PM_CURPOWER(dip, 0) != 0) && pdip && !PM_WANTS_NOTIFICATION(pdip)) in pm_destroy_components()
4596 pmf, PM_DEVICE(dip))) in pm_destroy_components()
4599 e_pm_destroy_components(dip); in pm_destroy_components()
4603 DEVI(dip)->devi_pm_flags &= in pm_destroy_components()
4611 pm_busy_component(dev_info_t *dip, int cmpt) in pm_busy_component() argument
4615 ASSERT(dip != NULL); in pm_busy_component()
4616 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, cmpt, &cp)) in pm_busy_component()
4618 PM_LOCK_BUSY(dip); in pm_busy_component()
4621 PM_UNLOCK_BUSY(dip); in pm_busy_component()
4629 pm_idle_component(dev_info_t *dip, int cmpt) in pm_idle_component() argument
4633 pm_scan_t *scanp = PM_GET_PM_SCAN(dip); in pm_idle_component()
4635 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, cmpt, &cp)) in pm_idle_component()
4638 PM_LOCK_BUSY(dip); in pm_idle_component()
4646 PM_UNLOCK_BUSY(dip); in pm_idle_component()
4651 if (scanp && PM_IS_PID(dip)) { in pm_idle_component()
4653 PM_DEVICE(dip))) in pm_idle_component()
4654 pm_rescan(dip); in pm_idle_component()
4662 if (PM_IS_NEXUS(dip) && (cp->pmc_busycount == 0)) { in pm_idle_component()
4663 pm_rescan(dip); in pm_idle_component()
4677 pm_set_normal_power(dev_info_t *dip, int comp, int level) in pm_set_normal_power() argument
4681 if (!PM_ISBC(dip)) in pm_set_normal_power()
4684 PM_NAME(dip), PM_ADDR(dip)); in pm_set_normal_power()
4686 if (PM_ISBC(dip)) { in pm_set_normal_power()
4688 "level=%d\n", pmf, PM_DEVICE(dip), comp, level)) in pm_set_normal_power()
4689 e_pm_set_max_power(dip, comp, level); in pm_set_normal_power()
4690 e_pm_default_levels(dip, PM_CP(dip, comp), level); in pm_set_normal_power()
4698 pm_stop(dev_info_t *dip) in pm_stop() argument
4701 dev_info_t *pdip = ddi_get_parent(dip); in pm_stop()
4703 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_stop()
4705 if (!PM_ISBC(dip)) { in pm_stop()
4706 pm_scan_stop(dip); in pm_stop()
4707 pm_scan_fini(dip); in pm_stop()
4710 if (PM_GET_PM_INFO(dip) != NULL) { in pm_stop()
4711 if (pm_unmanage(dip) == DDI_SUCCESS) { in pm_stop()
4716 e_pm_destroy_components(dip); in pm_stop()
4719 pmf, PM_DEVICE(dip))) in pm_stop()
4722 if (PM_NUMCMPTS(dip)) in pm_stop()
4723 e_pm_destroy_components(dip); in pm_stop()
4725 if (DEVI(dip)->devi_pm_flags & PMC_NOPMKID) { in pm_stop()
4726 DEVI(dip)->devi_pm_flags &= ~PMC_NOPMKID; in pm_stop()
4730 MDI_VHCI(pdip) && MDI_CLIENT(dip)) { in pm_stop()
4733 (void *)dip, NULL, 0); in pm_stop()
4745 e_new_pm_props(dev_info_t *dip) in e_new_pm_props() argument
4747 if (PM_GET_PM_INFO(dip) != NULL) { in e_new_pm_props()
4748 pm_stop(dip); in e_new_pm_props()
4750 if (e_pm_manage(dip, PM_STYLE_NEW) != DDI_SUCCESS) { in e_new_pm_props()
4754 e_pm_props(dip); in e_new_pm_props()
4762 e_pm_props(dev_info_t *dip) in e_pm_props() argument
4774 if (ddi_getlongprop(DDI_DEV_T_ANY, dip, propflag, "pm-hardware-state", in e_pm_props()
4784 "%s property value '%s'", PM_NAME(dip), in e_pm_props()
4785 PM_ADDR(dip), "pm-hardware-state", pp); in e_pm_props()
4795 if (ddi_prop_exists(DDI_DEV_T_ANY, dip, propflag, in e_pm_props()
4796 "pm-want-child-notification?") && PM_HAS_BUS_POWER(dip)) in e_pm_props()
4798 ASSERT(PM_HAS_BUS_POWER(dip) || !ddi_prop_exists(DDI_DEV_T_ANY, in e_pm_props()
4799 dip, propflag, "pm-want-child-notification?")); in e_pm_props()
4800 if (ddi_prop_exists(DDI_DEV_T_ANY, dip, propflag, in e_pm_props()
4806 if (ddi_getlongprop(DDI_DEV_T_ANY, dip, propflag, "pm-class", in e_pm_props()
4812 "%s property value '%s'", PM_NAME(dip), in e_pm_props()
4813 PM_ADDR(dip), "pm-class", pp); in e_pm_props()
4818 DEVI(dip)->devi_pm_flags |= flags; in e_pm_props()
4827 pm_default_ctlops(dev_info_t *dip, dev_info_t *rdip, in pm_default_ctlops() argument
4830 _NOTE(ARGUNUSED(dip)) in pm_default_ctlops()
4849 ASSERT(dip == NULL); in pm_default_ctlops()
5005 pm_start(dev_info_t *dip) in pm_start() argument
5009 dev_info_t *pdip = ddi_get_parent(dip); in pm_start()
5011 void pm_noinvol_specd(dev_info_t *dip); in pm_start()
5013 e_pm_props(dip); in pm_start()
5014 pm_noinvol_specd(dip); in pm_start()
5020 if (PM_GET_PM_INFO(dip)) { in pm_start()
5022 pmf, PM_DEVICE(dip))) in pm_start()
5025 ret = e_pm_manage(dip, PM_STYLE_UNKNOWN); in pm_start()
5027 if (PM_GET_PM_INFO(dip) == NULL) { in pm_start()
5031 DEVI(dip)->devi_pm_flags |= PMC_NOPMKID; in pm_start()
5034 } else if (pdip && MDI_VHCI(pdip) && MDI_CLIENT(dip)) { in pm_start()
5036 (void *)dip, NULL, 0); in pm_start()
5040 "left up\n", pmf, PM_DEVICE(dip))) in pm_start()
5170 pm_thresh_specd(dev_info_t *dip) in pm_thresh_specd() argument
5177 path = ddi_pathname(dip, pathbuf); in pm_thresh_specd()
5183 pm_apply_recorded_thresh(dip, rp); in pm_thresh_specd()
5256 dev_info_t *dip; in pm_keeper() local
5265 dip = pm_name_to_dip(keeper, 1); in pm_keeper()
5266 if (dip == NULL) in pm_keeper()
5279 ret += pm_apply_recorded_dep(dip, dp); in pm_keeper()
5294 pmf, PM_DEVICE(dip), PM_DEVICE(kept), in pm_keeper()
5296 if (kept != dip) { in pm_keeper()
5297 ret += pm_set_keeping(dip, kept); in pm_keeper()
5304 ddi_release_devi(dip); in pm_keeper()
5497 pm_valid_power(dev_info_t *dip, int comp, int level) in pm_valid_power() argument
5501 if (comp >= 0 && comp < PM_NUMCMPTS(dip) && level >= 0) in pm_valid_power()
5502 return (e_pm_valid_power(dip, comp, level)); in pm_valid_power()
5505 pmf, comp, PM_NUMCMPTS(dip), level)) in pm_valid_power()
5517 pm_block(dev_info_t *dip, int comp, int newpower, int oldpower) in pm_block() argument
5525 ASSERT(PM_IAM_LOCKING_DIP(dip)); in pm_block()
5526 new->pr_dip = dip; in pm_block()
5533 pm_enqueue_notify(PSC_PENDING_CHANGE, dip, comp, newpower, oldpower, in pm_block()
5535 PM_UNLOCK_DIP(dip); in pm_block()
5579 pm_register_watcher(int clone, dev_info_t *dip) in pm_register_watcher() argument
5590 pscc->pscc_dip = dip; in pm_register_watcher()
5592 if (dip) { in pm_register_watcher()
5710 pm_deregister_watcher(int clone, dev_info_t *dip) in pm_deregister_watcher() argument
5716 if (dip == NULL) { in pm_deregister_watcher()
5738 if ((dip && p->pscc_dip == dip) || in pm_deregister_watcher()
5739 (dip == NULL && clone == p->pscc_clone)) { in pm_deregister_watcher()
5762 ASSERT(dip == NULL || found); in pm_deregister_watcher()
5845 pm_set_dev_thr_walk(dev_info_t *dip, void *arg) in pm_set_dev_thr_walk() argument
5849 if (!PM_GET_PM_INFO(dip)) in pm_set_dev_thr_walk()
5851 pm_set_device_threshold(dip, thr, PMC_DEF_THRESH); in pm_set_dev_thr_walk()
5859 pm_current_threshold(dev_info_t *dip, int comp, int *threshp) in pm_current_threshold() argument
5861 if (comp < 0 || comp >= PM_NUMCMPTS(dip)) { in pm_current_threshold()
5864 *threshp = cur_threshold(dip, comp); in pm_current_threshold()
5877 pm_lock_power(dev_info_t *dip) in pm_lock_power() argument
5883 power_req.req.ppm_lock_power_req.who = dip; in pm_lock_power()
5884 (void) pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, &power_req, &result); in pm_lock_power()
5892 pm_unlock_power(dev_info_t *dip) in pm_unlock_power() argument
5898 power_req.req.ppm_unlock_power_req.who = dip; in pm_unlock_power()
5899 (void) pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, &power_req, &result); in pm_unlock_power()
5910 pm_try_locking_power(dev_info_t *dip) in pm_try_locking_power() argument
5916 power_req.req.ppm_lock_power_req.who = dip; in pm_try_locking_power()
5917 (void) pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, &power_req, &result); in pm_try_locking_power()
5945 pm_lock_power_single(dev_info_t *dip) in pm_lock_power_single() argument
5950 if (ndi_devi_tryenter(dip)) in pm_lock_power_single()
5962 ndi_devi_enter(dip); in pm_lock_power_single()
5965 if (cur->pmlk_lender == DEVI(dip)->devi_busy_thread) { in pm_lock_power_single()
5966 ASSERT(cur->pmlk_dip == NULL || cur->pmlk_dip == dip); in pm_lock_power_single()
5967 cur->pmlk_dip = dip; in pm_lock_power_single()
5969 ndi_devi_enter(dip); in pm_lock_power_single()
5981 pm_unlock_power_single(dev_info_t *dip) in pm_unlock_power_single() argument
5987 ndi_devi_exit(dip); in pm_unlock_power_single()
5998 if (cur == NULL || cur->pmlk_dip != dip) in pm_unlock_power_single()
6000 ndi_devi_exit(dip); in pm_unlock_power_single()
6009 pm_try_locking_power_single(dev_info_t *dip) in pm_try_locking_power_single() argument
6011 return (ndi_devi_tryenter(dip)); in pm_try_locking_power_single()
6062 pm_apply_recorded_thresh(dev_info_t *dip, pm_thresh_rec_t *rp) in pm_apply_recorded_thresh() argument
6066 int comps = PM_NUMCMPTS(dip); in pm_apply_recorded_thresh()
6072 PM_DEVICE(dip), (void *)rp, rp->ptr_physpath)) in pm_apply_recorded_thresh()
6073 PM_LOCK_DIP(dip); in pm_apply_recorded_thresh()
6074 if (!PM_GET_PM_INFO(dip) || PM_ISBC(dip) || !pm_valid_thresh(dip, rp)) { in pm_apply_recorded_thresh()
6076 pmf, PM_DEVICE(dip), (void*)PM_GET_PM_INFO(dip))) in pm_apply_recorded_thresh()
6078 pmf, PM_DEVICE(dip), PM_ISBC(dip))) in pm_apply_recorded_thresh()
6080 pmf, PM_DEVICE(dip), pm_valid_thresh(dip, rp))) in pm_apply_recorded_thresh()
6081 PM_UNLOCK_DIP(dip); in pm_apply_recorded_thresh()
6092 pmf, PM_DEVICE(dip), ep->pte_thresh[0])) in pm_apply_recorded_thresh()
6093 PM_UNLOCK_DIP(dip); in pm_apply_recorded_thresh()
6094 pm_set_device_threshold(dip, ep->pte_thresh[0], PMC_DEV_THRESH); in pm_apply_recorded_thresh()
6095 if (PM_SCANABLE(dip)) in pm_apply_recorded_thresh()
6096 pm_rescan(dip); in pm_apply_recorded_thresh()
6100 cp = PM_CP(dip, i); in pm_apply_recorded_thresh()
6103 "to %x\n", pmf, j, PM_DEVICE(dip), in pm_apply_recorded_thresh()
6109 DEVI(dip)->devi_pm_flags &= PMC_THRESH_NONE; in pm_apply_recorded_thresh()
6110 DEVI(dip)->devi_pm_flags |= PMC_COMP_THRESH; in pm_apply_recorded_thresh()
6111 PM_UNLOCK_DIP(dip); in pm_apply_recorded_thresh()
6113 if (PM_SCANABLE(dip)) in pm_apply_recorded_thresh()
6114 pm_rescan(dip); in pm_apply_recorded_thresh()
6122 pm_valid_thresh(dev_info_t *dip, pm_thresh_rec_t *rp) in pm_valid_thresh() argument
6129 if (!PM_GET_PM_INFO(dip) || PM_ISBC(dip)) { in pm_valid_thresh()
6144 if (rp->ptr_numcomps != (comps = PM_NUMCMPTS(dip))) { in pm_valid_thresh()
6146 pmf, PM_NUMCMPTS(dip), rp->ptr_numcomps, rp->ptr_physpath)) in pm_valid_thresh()
6151 cp = PM_CP(dip, i); in pm_valid_thresh()
6251 pm_discard_dep_walk(dev_info_t *dip, void *arg) in pm_discard_dep_walk() argument
6256 if (PM_GET_PM_INFO(dip) == NULL) in pm_discard_dep_walk()
6259 (void) ddi_pathname(dip, pathbuf); in pm_discard_dep_walk()
6266 pm_kept_walk(dev_info_t *dip, void *arg) in pm_kept_walk() argument
6272 (void) ddi_pathname(dip, pathbuf); in pm_kept_walk()
6280 pm_keeper_walk(dev_info_t *dip, void *arg) in pm_keeper_walk() argument
6286 (void) ddi_pathname(dip, pathbuf); in pm_keeper_walk()
6545 pm_forget_power_level(dev_info_t *dip) in pm_forget_power_level() argument
6547 dev_info_t *pdip = ddi_get_parent(dip); in pm_forget_power_level()
6550 if (!PM_ISBC(dip)) { in pm_forget_power_level()
6551 for (i = 0; i < PM_NUMCMPTS(dip); i++) in pm_forget_power_level()
6552 count += (PM_CURPOWER(dip, i) == 0); in pm_forget_power_level()
6560 if (DEVI(dip)->devi_pm_volpmd && in pm_forget_power_level()
6561 PM_CP(dip, 0)->pmc_cur_pwr == 0) in pm_forget_power_level()
6562 DEVI(dip)->devi_pm_volpmd = 0; in pm_forget_power_level()
6563 for (i = 0; i < PM_NUMCMPTS(dip); i++) in pm_forget_power_level()
6564 e_pm_set_cur_pwr(dip, PM_CP(dip, i), PM_LEVEL_UNKNOWN); in pm_forget_power_level()
6800 pm_init_child(dev_info_t *dip) in pm_init_child() argument
6804 ASSERT(ddi_binding_name(dip)); in pm_init_child()
6805 ASSERT(ddi_get_name_addr(dip)); in pm_init_child()
6806 pm_ppm_claim(dip); in pm_init_child()
6807 if (pm_ppm_claimed(dip)) { /* if ppm driver claims the node */ in pm_init_child()
6809 power_req.req.ppm_config_req.who = dip; in pm_init_child()
6810 ASSERT(PPM(dip) != NULL); in pm_init_child()
6811 return (pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, &power_req, in pm_init_child()
6817 power_req.req.ppm_config_req.who = dip; in pm_init_child()
6818 (void) pm_ctlops(NULL, dip, in pm_init_child()
6831 pm_pre_probe(dev_info_t *dip, pm_ppm_cookie_t *cp) in pm_pre_probe() argument
6837 cp->ppc_dip = dip; in pm_pre_probe()
6839 pm_ppm_claim(dip); in pm_pre_probe()
6840 if (pm_ppm_claimed(dip)) { /* if ppm driver claims the node */ in pm_pre_probe()
6842 power_req.req.ppm_config_req.who = dip; in pm_pre_probe()
6843 ASSERT(PPM(dip) != NULL); in pm_pre_probe()
6844 (void) pm_ctlops(PPM(dip), dip, in pm_pre_probe()
6846 cp->ppc_ppm = PPM(dip); in pm_pre_probe()
6851 power_req.req.ppm_config_req.who = dip; in pm_pre_probe()
6852 (void) pm_ctlops(NULL, dip, in pm_pre_probe()
6860 pm_pre_config(dev_info_t *dip, char *devnm) in pm_pre_config() argument
6865 if (MDI_VHCI(dip)) { in pm_pre_config()
6866 PMD(PMD_SET, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_pre_config()
6867 ret = mdi_power(dip, MDI_PM_PRE_CONFIG, NULL, devnm, 0); in pm_pre_config()
6869 } else if (!PM_GET_PM_INFO(dip)) in pm_pre_config()
6872 PMD(PMD_SET, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_pre_config()
6873 pm_hold_power(dip); in pm_pre_config()
6874 ret = pm_all_to_normal(dip, PM_CANBLOCK_BLOCK); in pm_pre_config()
6876 pm_rele_power(dip); in pm_pre_config()
6887 pm_pre_unconfig(dev_info_t *dip, int flags, int *held, char *devnm) in pm_pre_unconfig() argument
6892 if (MDI_VHCI(dip)) { in pm_pre_unconfig()
6894 PM_DEVICE(dip), flags)) in pm_pre_unconfig()
6895 ret = mdi_power(dip, MDI_PM_PRE_UNCONFIG, held, devnm, flags); in pm_pre_unconfig()
6897 } else if (!PM_GET_PM_INFO(dip)) in pm_pre_unconfig()
6900 PMD(PMD_SET, ("%s: %s@%s(%s#%d), flags=%x\n", pmf, PM_DEVICE(dip), in pm_pre_unconfig()
6907 if (!ddi_get_child(dip)) in pm_pre_unconfig()
6913 if ((flags & NDI_AUTODETACH) && !pm_all_at_normal(dip)) in pm_pre_unconfig()
6916 pm_hold_power(dip); in pm_pre_unconfig()
6918 ret = pm_all_to_normal(dip, PM_CANBLOCK_BLOCK); in pm_pre_unconfig()
6920 pm_rele_power(dip); in pm_pre_unconfig()
6931 pm_pre_attach(dev_info_t *dip, pm_ppm_cookie_t *cp, ddi_attach_cmd_t cmd) in pm_pre_attach() argument
6942 cp->ppc_ppm = PPM(dip); in pm_pre_attach()
6943 cp->ppc_dip = dip; in pm_pre_attach()
6954 power_req.req.ppm_config_req.who = dip; in pm_pre_attach()
6955 ASSERT(PPM(dip)); in pm_pre_attach()
6956 (void) pm_ctlops(cp->ppc_ppm, dip, DDI_CTLOPS_POWER, in pm_pre_attach()
6962 power_req.req.ppm_config_req.who = dip; in pm_pre_attach()
6963 (void) pm_ctlops(NULL, dip, in pm_pre_attach()
6969 pm_forget_power_level(dip); in pm_pre_attach()
7006 pm_uninit_child(dev_info_t *dip) in pm_uninit_child() argument
7010 ASSERT(ddi_binding_name(dip)); in pm_uninit_child()
7011 ASSERT(ddi_get_name_addr(dip)); in pm_uninit_child()
7012 pm_ppm_claim(dip); in pm_uninit_child()
7013 if (pm_ppm_claimed(dip)) { /* if ppm driver claims the node */ in pm_uninit_child()
7015 power_req.req.ppm_config_req.who = dip; in pm_uninit_child()
7016 ASSERT(PPM(dip)); in pm_uninit_child()
7017 return (pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, &power_req, in pm_uninit_child()
7023 power_req.req.ppm_config_req.who = dip; in pm_uninit_child()
7024 (void) pm_ctlops(NULL, dip, DDI_CTLOPS_POWER, &power_req, NULL); in pm_uninit_child()
7060 pm_post_config(dev_info_t *dip, char *devnm) in pm_post_config() argument
7064 if (MDI_VHCI(dip)) { in pm_post_config()
7065 PMD(PMD_SET, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_post_config()
7066 (void) mdi_power(dip, MDI_PM_POST_CONFIG, NULL, devnm, 0); in pm_post_config()
7068 } else if (!PM_GET_PM_INFO(dip)) in pm_post_config()
7071 PMD(PMD_SET, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_post_config()
7072 pm_rele_power(dip); in pm_post_config()
7076 pm_post_unconfig(dev_info_t *dip, int held, char *devnm) in pm_post_unconfig() argument
7080 if (MDI_VHCI(dip)) { in pm_post_unconfig()
7082 PM_DEVICE(dip), held)) in pm_post_unconfig()
7083 (void) mdi_power(dip, MDI_PM_POST_UNCONFIG, &held, devnm, 0); in pm_post_unconfig()
7085 } else if (!PM_GET_PM_INFO(dip)) in pm_post_unconfig()
7088 PMD(PMD_SET, ("%s: %s@%s(%s#%d), held = %d\n", pmf, PM_DEVICE(dip), in pm_post_unconfig()
7095 pm_rele_power(dip); in pm_post_unconfig()
7106 dev_info_t *dip; in pm_post_attach() local
7111 dip = cp->ppc_dip; in pm_post_attach()
7117 if (PM_GET_PM_INFO(dip) == NULL) in pm_post_attach()
7118 (void) pm_start(dip); in pm_post_attach()
7123 pm_stop(dip); in pm_post_attach()
7150 pm_pre_detach(dev_info_t *dip, ddi_detach_cmd_t cmd, pm_ppm_cookie_t *cp) in pm_pre_detach() argument
7156 cp->ppc_dip = dip; in pm_pre_detach()
7161 pm_detaching(dip); /* suspend pm while detaching */ in pm_pre_detach()
7162 if (pm_ppm_claimed(dip)) { /* if ppm driver claims node */ in pm_pre_detach()
7164 power_req.req.ppm_config_req.who = dip; in pm_pre_detach()
7165 ASSERT(PPM(dip)); in pm_pre_detach()
7166 (void) pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, in pm_pre_detach()
7168 cp->ppc_ppm = PPM(dip); in pm_pre_detach()
7173 power_req.req.ppm_config_req.who = dip; in pm_pre_detach()
7174 (void) pm_ctlops(NULL, dip, in pm_pre_detach()
7265 pm_record_invol(dev_info_t *dip) in pm_record_invol() argument
7269 int volpmd = (PM_NUMCMPTS(dip) > 0) && pm_all_components_off(dip); in pm_record_invol()
7272 (void) ddi_pathname(dip, pathbuf); in pm_record_invol()
7274 pm_record_invol_path(pathbuf, (DEVI(dip)->devi_pm_flags & in pm_record_invol()
7275 (PMC_NO_INVOL | PMC_CONSOLE_FB)), DEVI(dip)->devi_pm_noinvolpm, in pm_record_invol()
7276 DEVI(dip)->devi_pm_volpmd, volpmd, PM_MAJOR(dip)); in pm_record_invol()
7285 dip); in pm_record_invol()
7292 dev_info_t *dip = cp->ppc_dip; in pm_post_detach() local
7320 ((DEVI(dip)->devi_pm_flags & in pm_post_detach()
7322 DEVI(dip)->devi_pm_noinvolpm)) in pm_post_detach()
7323 pm_record_invol(dip); in pm_post_detach()
7324 DEVI(dip)->devi_pm_flags &= in pm_post_detach()
7332 if (PM_IS_CFB(dip)) { in pm_post_detach()
7340 pm_stop(dip); /* make it permanent */ in pm_post_detach()
7342 if (PM_IS_CFB(dip)) { in pm_post_detach()
7351 pm_detach_failed(dip); /* resume power management */ in pm_post_detach()
7375 pm_adjust_timestamps(dev_info_t *dip, void *arg) in pm_adjust_timestamps() argument
7379 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_adjust_timestamps()
7385 PM_LOCK_BUSY(dip); in pm_adjust_timestamps()
7386 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_adjust_timestamps()
7387 cp = PM_CP(dip, i); in pm_adjust_timestamps()
7391 PM_UNLOCK_BUSY(dip); in pm_adjust_timestamps()
7401 pm_noinvol_specd(dev_info_t *dip) in pm_noinvol_specd() argument
7409 if (DEVI(dip)->devi_pm_flags & PMC_NOINVOL_DONE) in pm_noinvol_specd()
7411 DEVI(dip)->devi_pm_flags |= PMC_NOINVOL_DONE; in pm_noinvol_specd()
7413 (void) ddi_pathname(dip, pathbuf); in pm_noinvol_specd()
7415 PM_LOCK_DIP(dip); in pm_noinvol_specd()
7416 DEVI(dip)->devi_pm_volpmd = 0; in pm_noinvol_specd()
7417 DEVI(dip)->devi_pm_noinvolpm = 0; in pm_noinvol_specd()
7429 PM_UNLOCK_DIP(dip); in pm_noinvol_specd()
7440 DEVI(dip)->devi_pm_flags |= ip->ni_flags; in pm_noinvol_specd()
7444 if (PM_IS_CFB(dip)) { in pm_noinvol_specd()
7446 cfb_dip = dip; in pm_noinvol_specd()
7448 "cfb_dip\n", pmf, PM_DEVICE(dip))) in pm_noinvol_specd()
7451 DEVI(dip)->devi_pm_noinvolpm = ip->ni_noinvolpm; in pm_noinvol_specd()
7452 ASSERT((DEVI(dip)->devi_pm_flags & in pm_noinvol_specd()
7454 DEVI(dip)->devi_pm_noinvolpm); in pm_noinvol_specd()
7455 DEVI(dip)->devi_pm_volpmd = ip->ni_volpmd; in pm_noinvol_specd()
7475 PM_UNLOCK_DIP(dip); in pm_noinvol_specd()
7485 wasvolpmd, pathbuf, dip); in pm_noinvol_specd()
7496 PM_UNLOCK_DIP(dip); in pm_noinvol_specd()
7500 pm_all_components_off(dev_info_t *dip) in pm_all_components_off() argument
7505 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_all_components_off()
7506 cp = PM_CP(dip, i); in pm_all_components_off()
7525 dev_info_t *dip; in pm_reattach_noinvol() local
7566 dip = e_ddi_hold_devi_by_path(path, 0); in pm_reattach_noinvol()
7567 if (dip == NULL) { in pm_reattach_noinvol()
7581 ddi_release_devi(dip); in pm_reattach_noinvol()
7615 dev_info_t *dip; in pm_cfb_setup() local
7658 if ((dip = fbdip) != NULL) { in pm_cfb_setup()
7660 PM_DEVICE(dip))) in pm_cfb_setup()
7666 cfb_dip = dip; in pm_cfb_setup()
7667 DEVI(dip)->devi_pm_flags |= (PMC_CONSOLE_FB | PMC_NO_INVOL); in pm_cfb_setup()
7669 PM_DEVICE(dip))) in pm_cfb_setup()
7671 if (!(PM_GET_PM_INFO(dip) != NULL && PM_NUMCMPTS(dip))) { in pm_cfb_setup()
7673 pmf, PM_DEVICE(dip))) in pm_cfb_setup()
7686 dip = pm_name_to_dip(devname, 0); in pm_cfb_setup()
7687 if (dip != NULL) { in pm_cfb_setup()
7693 0, 0, devname, dip); in pm_cfb_setup()
7991 pm_save_direct_lvl_walk(dev_info_t *dip, void *arg) in pm_save_direct_lvl_walk() argument
7996 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_save_direct_lvl_walk()
8001 if (PM_ISDIRECT(dip) && !PM_ISBC(dip)) { in pm_save_direct_lvl_walk()
8002 if (PM_NUMCMPTS(dip) > 2) { in pm_save_direct_lvl_walk()
8003 info->pmi_lp = kmem_alloc(PM_NUMCMPTS(dip) * in pm_save_direct_lvl_walk()
8010 for (i = 0; i < PM_NUMCMPTS(dip); i++) in pm_save_direct_lvl_walk()
8011 *ip++ = PM_CURPOWER(dip, i); in pm_save_direct_lvl_walk()
8018 pm_proceed(dip, PMP_RELEASE, -1, -1); in pm_save_direct_lvl_walk()
8039 pm_restore_direct_lvl_walk(dev_info_t *dip, void *arg) in pm_restore_direct_lvl_walk() argument
8046 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_restore_direct_lvl_walk()
8050 if (PM_ISDIRECT(dip) && !PM_ISBC(dip)) { in pm_restore_direct_lvl_walk()
8051 if ((nc = PM_NUMCMPTS(dip)) > 2) { in pm_restore_direct_lvl_walk()
8066 if (PM_CURPOWER(dip, i) == *ip) in pm_restore_direct_lvl_walk()
8068 if (pm_set_power(dip, i, *ip, PM_LEVEL_EXACT, in pm_restore_direct_lvl_walk()
8075 i, PM_NAME(dip), in pm_restore_direct_lvl_walk()
8076 PM_ADDR(dip), *ip); in pm_restore_direct_lvl_walk()
8079 "errno %d\n", pmf, PM_DEVICE(dip), i, in pm_restore_direct_lvl_walk()
8080 PM_CURPOWER(dip, i), *ip, result)) in pm_restore_direct_lvl_walk()
8225 dev_info_t *dip; in adjust_ancestors() local
8243 dip = pm_name_to_dip(pathbuf, 1); in adjust_ancestors()
8244 if (dip != NULL) { in adjust_ancestors()
8245 locked = PM_MAJOR(dip); in adjust_ancestors()
8248 path, dip); in adjust_ancestors()
8251 ddi_release_devi(dip); in adjust_ancestors()
8377 pm_is_cfb(dev_info_t *dip) in pm_is_cfb() argument
8379 return (dip == cfb_dip); in pm_is_cfb()
8400 pm_hold_power(dev_info_t *dip) in pm_hold_power() argument
8402 e_pm_hold_rele_power(dip, 1); in pm_hold_power()
8410 pm_rele_power(dev_info_t *dip) in pm_rele_power() argument
8412 e_pm_hold_rele_power(dip, -1); in pm_rele_power()
8420 pm_powerup(dev_info_t *dip) in pm_powerup() argument
8424 PMD(PMD_ALLNORM, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_powerup()
8430 if (!PM_GET_PM_INFO(dip)) { in pm_powerup()
8431 if (!DEVI_IS_ATTACHING(dip)) in pm_powerup()
8433 if (pm_start(dip) != DDI_SUCCESS) in pm_powerup()
8435 if (!PM_GET_PM_INFO(dip)) in pm_powerup()
8439 return (pm_all_to_normal(dip, PM_CANBLOCK_BLOCK)); in pm_powerup()
8443 pm_rescan_walk(dev_info_t *dip, void *arg) in pm_rescan_walk() argument
8447 if (!PM_GET_PM_INFO(dip) || PM_ISBC(dip)) in pm_rescan_walk()
8456 pm_scan_init(dip); in pm_rescan_walk()
8458 (void) pm_rescan(dip); in pm_rescan_walk()
8463 pm_get_next_descendent(dev_info_t *dip, dev_info_t *tdip) in pm_get_next_descendent() argument
8467 for (wdip = tdip; wdip != dip; wdip = pdip) { in pm_get_next_descendent()
8469 if (pdip == dip) in pm_get_next_descendent()
8476 pm_busop_bus_power(dev_info_t *dip, void *impl_arg, pm_bus_power_op_t op, in pm_busop_bus_power() argument
8493 PMD(PMD_SET, ("%s: %s@%s(%s#%d) %s\n", pmf, PM_DEVICE(dip), in pm_busop_bus_power()
8500 cdip = pm_get_next_descendent(dip, tdip); in pm_busop_bus_power()
8549 if (!e_pm_valid_info(dip, NULL) || in pm_busop_bus_power()
8550 !e_pm_valid_comp(dip, bpn->bpn_comp, &cp) || in pm_busop_bus_power()
8551 !e_pm_valid_power(dip, bpn->bpn_comp, bpn->bpn_level)) { in pm_busop_bus_power()
8553 pmf, PM_DEVICE(dip))) in pm_busop_bus_power()
8559 ASSERT(bpn->bpn_dip == dip); in pm_busop_bus_power()
8561 PM_DEVICE(dip))) in pm_busop_bus_power()
8562 new_bpc.bpc_dip = dip; in pm_busop_bus_power()
8564 new_bpc.bpc_path = ddi_pathname(dip, pathbuf); in pm_busop_bus_power()
8566 new_bpc.bpc_olevel = PM_CURPOWER(dip, bpn->bpn_comp); in pm_busop_bus_power()
8573 ret = pm_busop_set_power(dip, impl_arg, BUS_POWER_CHILD_PWRCHG, in pm_busop_bus_power()
8581 cdip = pm_get_next_descendent(dip, tdip); in pm_busop_bus_power()
8637 pm_busop_set_power(dev_info_t *dip, void *impl_arg, pm_bus_power_op_t op, in pm_busop_set_power() argument
8654 dev_info_t *pdip = ddi_get_parent(dip); in pm_busop_set_power()
8663 pm_component_t *cp = PM_CP(dip, comp); in pm_busop_set_power()
8669 PMD(PMD_SET, ("%s: %s@%s(%s#%d) %s\n", pmf, PM_DEVICE(dip), in pm_busop_set_power()
8692 PM_LOCK_DIP(dip); in pm_busop_set_power()
8693 while (PM_ISDIRECT(dip) && !pm_processes_stopped) { in pm_busop_set_power()
8695 ret = pm_busop_match_request(dip, bpc); in pm_busop_set_power()
8697 PM_LOCK_DIP(dip); in pm_busop_set_power()
8702 PM_UNLOCK_DIP(dip); in pm_busop_set_power()
8705 if (PM_ISBC(dip) && comp != 0 && nlevel != 0 && in pm_busop_set_power()
8707 int nrmpwr0 = pm_get_normal_power(dip, 0); in pm_busop_set_power()
8708 if (pm_set_power(dip, 0, nrmpwr0, direction, in pm_busop_set_power()
8716 "%s@%s(%s#%d)\n", pmf, PM_DEVICE(pdip), PM_DEVICE(dip))) in pm_busop_set_power()
8732 PM_LOCK_POWER(dip); in pm_busop_set_power()
8733 clevel = PM_CURPOWER(dip, comp); in pm_busop_set_power()
8740 if (nlevel > pm_get_normal_power(dip, comp)) { in pm_busop_set_power()
8748 "dir=%s\n", pmf, PM_DEVICE(dip), comp, bpc->bpc_olevel, nlevel, in pm_busop_set_power()
8763 if (clevel == nlevel && !PM_ISBC(dip)) { in pm_busop_set_power()
8769 } else if (PM_IS_CFB(dip) && (nlevel < clevel)) { in pm_busop_set_power()
8795 thresh = cur_threshold(dip, comp); in pm_busop_set_power()
8797 if (scan && ((PM_KUC(dip) != 0) || in pm_busop_set_power()
8799 ((idletime < thresh) && !PM_IS_PID(dip)))) { in pm_busop_set_power()
8801 if (DEVI(dip)->devi_pm_kidsupcnt != 0) in pm_busop_set_power()
8825 if (PM_IS_CFB(dip) && (comps_off_incr = in pm_busop_set_power()
8826 calc_cfb_comps_incr(dip, comp, clevel, nlevel)) > 0) { in pm_busop_set_power()
8833 update_comps_off(comps_off_incr, dip); in pm_busop_set_power()
8835 pmf, PM_DEVICE(dip), comp, clevel, nlevel, in pm_busop_set_power()
8839 if ((*iresp = power_dev(dip, in pm_busop_set_power()
8845 if (PM_CURPOWER(dip, comp) == 0) { in pm_busop_set_power()
8847 pdpchk.pdpc_dip = dip; in pm_busop_set_power()
8848 pdpchk.pdpc_par_involved = PM_WANTS_NOTIFICATION(dip); in pm_busop_set_power()
8849 ndi_devi_enter(dip); in pm_busop_set_power()
8850 for (cdip = ddi_get_child(dip); cdip != NULL; in pm_busop_set_power()
8857 ndi_devi_exit(dip); in pm_busop_set_power()
8864 if (PM_IS_CFB(dip) && comps_off_incr < 0) { in pm_busop_set_power()
8865 update_comps_off(comps_off_incr, dip); in pm_busop_set_power()
8867 "cfb_comps_off->%d\n", pmf, PM_DEVICE(dip), in pm_busop_set_power()
8872 if (PM_ISBC(dip)) { in pm_busop_set_power()
8877 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_busop_set_power()
8879 if (PM_CURPOWER(dip, i)) { in pm_busop_set_power()
8888 if (PM_ISBC(dip)) { in pm_busop_set_power()
8893 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_busop_set_power()
8896 if (PM_CURPOWER(dip, i) > 0) { in pm_busop_set_power()
8909 (void) ddi_pathname(dip, pathbuf); in pm_busop_set_power()
8914 if ((PM_CURPOWER(dip, comp) == nlevel) && pm_watchers()) { in pm_busop_set_power()
8921 pm_enqueue_notify(PSC_HAS_CHANGED, dip, comp, nlevel, in pm_busop_set_power()
8940 pm_rescan(dip); in pm_busop_set_power()
8944 update_comps_off(-comps_off_incr, dip); in pm_busop_set_power()
8946 "cfb_comps_off->%d\n", pmf, PM_DEVICE(dip), in pm_busop_set_power()
8972 PM_UNLOCK_POWER(dip); in pm_busop_set_power()
8975 PM_DEVICE(dip), ret)) in pm_busop_set_power()
8978 PM_UNLOCK_POWER(dip); in pm_busop_set_power()
8985 (!PM_ISBC(dip) || comp == 0))) in pm_busop_set_power()
8992 nlevel == 0 && (!PM_ISBC(dip) || comp == 0)) in pm_busop_set_power()
9008 pm_busop_match_request(dev_info_t *dip, void *arg) in pm_busop_match_request() argument
9019 ASSERT(PM_IAM_LOCKING_DIP(dip)); in pm_busop_match_request()
9020 PM_LOCK_POWER(dip); in pm_busop_match_request()
9021 clevel = PM_CURPOWER(dip, comp); in pm_busop_match_request()
9023 pmf, PM_DEVICE(dip), comp, nlevel, clevel)) in pm_busop_match_request()
9026 PM_UNLOCK_POWER(dip); in pm_busop_match_request()
9027 PM_UNLOCK_DIP(dip); in pm_busop_match_request()
9031 PM_UNLOCK_POWER(dip); in pm_busop_match_request()
9032 PM_UNLOCK_DIP(dip); in pm_busop_match_request()
9036 PM_UNLOCK_POWER(dip); in pm_busop_match_request()
9037 PM_UNLOCK_DIP(dip); in pm_busop_match_request()
9045 PM_UNLOCK_POWER(dip); in pm_busop_match_request()
9048 switch (pm_block(dip, comp, nlevel, clevel)) { in pm_busop_match_request()
9064 pm_all_to_normal_nexus(dev_info_t *dip, pm_canblock_t canblock) in pm_all_to_normal_nexus() argument
9075 ASSERT(PM_GET_PM_INFO(dip)); in pm_all_to_normal_nexus()
9076 PMD(PMD_ALLNORM, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_all_to_normal_nexus()
9077 if (pm_get_norm_pwrs(dip, &normal, &size) != DDI_SUCCESS) { in pm_all_to_normal_nexus()
9081 ncomps = PM_NUMCMPTS(dip); in pm_all_to_normal_nexus()
9083 bpn.bpn_dip = dip; in pm_all_to_normal_nexus()
9089 ret = pm_busop_bus_power(dip, NULL, BUS_POWER_NEXUS_PWRUP, in pm_all_to_normal_nexus()
9093 "->%d failure result %d\n", pmf, PM_DEVICE(dip), in pm_all_to_normal_nexus()
9101 "full power\n", pmf, changefailed, PM_DEVICE(dip))) in pm_all_to_normal_nexus()
9130 pm_noinvol_update_node(dev_info_t *dip, pm_bp_noinvol_t *req) in pm_noinvol_update_node() argument
9134 PMD(PMD_NOINVOL, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_noinvol_update_node()
9138 "noinvol %d->%d\n", pmf, PM_DEVICE(dip), in pm_noinvol_update_node()
9139 DEVI(dip)->devi_pm_noinvolpm, in pm_noinvol_update_node()
9140 DEVI(dip)->devi_pm_noinvolpm - 1)) in pm_noinvol_update_node()
9141 ASSERT(DEVI(dip)->devi_pm_noinvolpm); in pm_noinvol_update_node()
9142 PM_LOCK_DIP(dip); in pm_noinvol_update_node()
9143 DEVI(dip)->devi_pm_noinvolpm--; in pm_noinvol_update_node()
9147 PM_DEVICE(dip), DEVI(dip)->devi_pm_volpmd, in pm_noinvol_update_node()
9148 DEVI(dip)->devi_pm_volpmd - 1)) in pm_noinvol_update_node()
9149 if (DEVI(dip)->devi_pm_volpmd) in pm_noinvol_update_node()
9150 DEVI(dip)->devi_pm_volpmd--; in pm_noinvol_update_node()
9152 PM_UNLOCK_DIP(dip); in pm_noinvol_update_node()
9157 "noinvolpm %d->%d\n", pmf, PM_DEVICE(dip), in pm_noinvol_update_node()
9158 DEVI(dip)->devi_pm_noinvolpm, in pm_noinvol_update_node()
9159 DEVI(dip)->devi_pm_noinvolpm + 1)) in pm_noinvol_update_node()
9160 PM_LOCK_DIP(dip); in pm_noinvol_update_node()
9161 DEVI(dip)->devi_pm_noinvolpm++; in pm_noinvol_update_node()
9165 PM_DEVICE(dip), DEVI(dip)->devi_pm_volpmd, in pm_noinvol_update_node()
9166 DEVI(dip)->devi_pm_volpmd + 1)) in pm_noinvol_update_node()
9167 DEVI(dip)->devi_pm_volpmd++; in pm_noinvol_update_node()
9169 PM_UNLOCK_DIP(dip); in pm_noinvol_update_node()
9174 "noinvol %d->%d\n", pmf, PM_DEVICE(dip), in pm_noinvol_update_node()
9175 DEVI(dip)->devi_pm_noinvolpm, in pm_noinvol_update_node()
9176 DEVI(dip)->devi_pm_noinvolpm - 1)) in pm_noinvol_update_node()
9177 ASSERT(DEVI(dip)->devi_pm_noinvolpm); in pm_noinvol_update_node()
9178 PM_LOCK_DIP(dip); in pm_noinvol_update_node()
9179 DEVI(dip)->devi_pm_noinvolpm--; in pm_noinvol_update_node()
9183 "volpmd %d->%d\n", pmf, PM_DEVICE(dip), in pm_noinvol_update_node()
9184 DEVI(dip)->devi_pm_volpmd, in pm_noinvol_update_node()
9185 DEVI(dip)->devi_pm_volpmd - 1)) in pm_noinvol_update_node()
9191 if (DEVI(dip)->devi_pm_volpmd) in pm_noinvol_update_node()
9192 DEVI(dip)->devi_pm_volpmd--; in pm_noinvol_update_node()
9194 PM_UNLOCK_DIP(dip); in pm_noinvol_update_node()
9200 pmf, PM_DEVICE(dip), DEVI(dip)->devi_pm_noinvolpm, in pm_noinvol_update_node()
9201 DEVI(dip)->devi_pm_noinvolpm + 1)) in pm_noinvol_update_node()
9202 PM_LOCK_DIP(dip); in pm_noinvol_update_node()
9203 DEVI(dip)->devi_pm_noinvolpm++; in pm_noinvol_update_node()
9204 PM_UNLOCK_DIP(dip); in pm_noinvol_update_node()
9210 pmf, PM_DEVICE(dip), in pm_noinvol_update_node()
9211 DEVI(dip)->devi_pm_volpmd, DEVI(dip)->devi_pm_volpmd - in pm_noinvol_update_node()
9213 PM_LOCK_DIP(dip); in pm_noinvol_update_node()
9214 DEVI(dip)->devi_pm_volpmd -= req->bpni_volpmd; in pm_noinvol_update_node()
9215 PM_UNLOCK_DIP(dip); in pm_noinvol_update_node()
9226 pm_desc_pwrchk_walk(dev_info_t *dip, void *arg) in pm_desc_pwrchk_walk() argument
9230 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_desc_pwrchk_walk()
9238 PMD(PMD_SET, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_desc_pwrchk_walk()
9239 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_desc_pwrchk_walk()
9241 if ((curpwr = PM_CURPOWER(dip, i)) == 0) in pm_desc_pwrchk_walk()
9248 PM_DEVICE(pdpchk->pdpc_dip), PM_DEVICE(dip), i, curpwr)) in pm_desc_pwrchk_walk()
9251 PM_DEVICE(dip), PM_DEVICE(pdpchk->pdpc_dip)); in pm_desc_pwrchk_walk()