Lines Matching refs:dip
321 #define PM_MIN_SCAN(dip) (PM_ISCPU(dip) ? pm_cpu_min_scan : \ argument
503 #define PM_MAJOR(dip) ddi_driver_major(dip) argument
504 #define PM_IS_NEXUS(dip) ((PM_MAJOR(dip) == DDI_MAJOR_T_NONE) ? 0 : \ argument
505 NEXUS_DRV(devopsp[PM_MAJOR(dip)]))
509 #define PM_INCR_NOTLOWEST(dip) { \ argument
511 if (!PM_IS_NEXUS(dip) || \
512 (DEVI(dip)->devi_pm_flags & (PMC_DEV_THRESH|PMC_COMP_THRESH))) {\
514 pm_ppm_notify_all_lowest(dip, PM_NOT_ALL_LOWEST);\
517 pmf, PM_DEVICE(dip), pm_comps_notlowest)) \
521 #define PM_DECR_NOTLOWEST(dip) { \ argument
523 if (!PM_IS_NEXUS(dip) || \
524 (DEVI(dip)->devi_pm_flags & (PMC_DEV_THRESH|PMC_COMP_THRESH))) {\
528 "%d\n", pmf, PM_DEVICE(dip), pm_comps_notlowest))\
530 pm_ppm_notify_all_lowest(dip, PM_ALL_LOWEST); \
723 pm_scan_init(dev_info_t *dip) in pm_scan_init() argument
728 ASSERT(!PM_ISBC(dip)); in pm_scan_init()
730 PM_LOCK_DIP(dip); in pm_scan_init()
731 scanp = PM_GET_PM_SCAN(dip); in pm_scan_init()
734 pmf, PM_DEVICE(dip))) in pm_scan_init()
736 DEVI(dip)->devi_pm_scan = scanp; in pm_scan_init()
739 "clear PM_SCAN_STOP flag\n", pmf, PM_DEVICE(dip))) in pm_scan_init()
742 PM_UNLOCK_DIP(dip); in pm_scan_init()
749 pm_scan_fini(dev_info_t *dip) in pm_scan_fini() argument
754 PMD(PMD_SCAN, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_scan_fini()
755 ASSERT(!PM_ISBC(dip)); in pm_scan_fini()
756 PM_LOCK_DIP(dip); in pm_scan_fini()
757 scanp = PM_GET_PM_SCAN(dip); in pm_scan_fini()
759 PM_UNLOCK_DIP(dip); in pm_scan_fini()
767 DEVI(dip)->devi_pm_scan = NULL; in pm_scan_fini()
768 PM_UNLOCK_DIP(dip); in pm_scan_fini()
829 e_pm_valid_power(dev_info_t *dip, int cmpt, int level) in e_pm_valid_power() argument
832 pm_component_t *cp = PM_CP(dip, cmpt); in e_pm_valid_power()
855 static int pm_start(dev_info_t *dip);
860 e_pm_valid_info(dev_info_t *dip, pm_info_t **infop) in e_pm_valid_info() argument
872 info = PM_GET_PM_INFO(dip); in e_pm_valid_info()
874 if (!DEVI_IS_ATTACHING(dip)) { in e_pm_valid_info()
877 if (pm_start(dip) != DDI_SUCCESS) { in e_pm_valid_info()
880 info = PM_GET_PM_INFO(dip); in e_pm_valid_info()
889 e_pm_valid_comp(dev_info_t *dip, int cmpt, pm_component_t **cpp) in e_pm_valid_comp() argument
891 if (cmpt >= 0 && cmpt < PM_NUMCMPTS(dip)) { in e_pm_valid_comp()
893 *cpp = PM_CP(dip, cmpt); in e_pm_valid_comp()
904 dev_is_needed(dev_info_t *dip, int cmpt, int level, int direction) in dev_is_needed() argument
912 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, cmpt, &cp) || in dev_is_needed()
913 !e_pm_valid_power(dip, cmpt, level)) in dev_is_needed()
917 pmf, PM_DEVICE(dip), cmpt, pm_decode_direction(direction), in dev_is_needed()
920 if (pm_set_power(dip, cmpt, level, direction, in dev_is_needed()
924 (void) ddi_pathname(dip, pathbuf); in dev_is_needed()
930 "errno %d\n", pmf, PM_DEVICE(dip), cmpt, in dev_is_needed()
936 PM_DEVICE(dip))) in dev_is_needed()
937 pm_rescan(dip); in dev_is_needed()
953 dev_info_t *dip = (dev_info_t *)arg; in pm_rescan()
958 PMD(PMD_SCAN, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_rescan()
959 PM_LOCK_DIP(dip); in pm_rescan()
960 info = PM_GET_PM_INFO(dip); in pm_rescan()
961 scanp = PM_GET_PM_SCAN(dip); in pm_rescan()
962 if (pm_scans_disabled || !PM_SCANABLE(dip) || !info || !scanp || in pm_rescan()
964 PM_UNLOCK_DIP(dip); in pm_rescan()
969 PM_UNLOCK_DIP(dip); in pm_rescan()
975 pmf, PM_DEVICE(dip), (ulong_t)scanid)) in pm_rescan()
976 PM_UNLOCK_DIP(dip); in pm_rescan()
978 PM_LOCK_DIP(dip); in pm_rescan()
996 if (DEVI_IS_ATTACHING(dip) || in pm_rescan()
998 !taskq_dispatch(system_taskq, pm_scan, (void *)dip, TQ_NOSLEEP)) { in pm_rescan()
1000 "dispatched or dispatching failed\n", pmf, PM_DEVICE(dip))) in pm_rescan()
1004 PM_UNLOCK_DIP(dip); in pm_rescan()
1006 PM_LOCK_DIP(dip); in pm_rescan()
1010 pmf, PM_DEVICE(dip), in pm_rescan()
1012 PM_UNLOCK_DIP(dip); in pm_rescan()
1016 scanp->ps_scan_id = timeout(pm_rescan, (void *)dip, in pm_rescan()
1018 (PM_MIN_SCAN(dip) * hz))); in pm_rescan()
1020 "scanid %lx\n", pmf, PM_DEVICE(dip), in pm_rescan()
1024 pmf, PM_DEVICE(dip))) in pm_rescan()
1027 PM_UNLOCK_DIP(dip); in pm_rescan()
1034 dev_info_t *dip = (dev_info_t *)arg; in pm_scan()
1038 PMD(PMD_SCAN, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_scan()
1040 PM_LOCK_DIP(dip); in pm_scan()
1041 scanp = PM_GET_PM_SCAN(dip); in pm_scan()
1042 ASSERT(scanp && PM_GET_PM_INFO(dip)); in pm_scan()
1044 if (pm_scans_disabled || !PM_SCANABLE(dip) || in pm_scan()
1047 PM_UNLOCK_DIP(dip); in pm_scan()
1058 "(pmid %x)\n", pmf, PM_DEVICE(dip), scanp->ps_idle_down)) in pm_scan()
1065 pmf, PM_DEVICE(dip))) in pm_scan()
1067 PM_UNLOCK_DIP(dip); in pm_scan()
1075 PM_UNLOCK_DIP(dip); in pm_scan()
1076 nextscan = pm_scan_dev(dip); in pm_scan()
1077 PM_LOCK_DIP(dip); in pm_scan()
1086 "(pmid %x)\n", pmf, PM_DEVICE(dip), scanp->ps_idle_down)) in pm_scan()
1096 PM_DEVICE(dip), (ulong_t)scanp->ps_scan_id)) in pm_scan()
1097 PM_UNLOCK_DIP(dip); in pm_scan()
1100 scanp->ps_scan_id = timeout(pm_rescan, (void *)dip, in pm_scan()
1103 "%lx sec, scanid(%lx) \n", pmf, PM_DEVICE(dip), in pm_scan()
1107 PM_UNLOCK_DIP(dip); in pm_scan()
1111 pm_get_timestamps(dev_info_t *dip, time_t *valuep) in pm_get_timestamps() argument
1113 int components = PM_NUMCMPTS(dip); in pm_get_timestamps()
1117 PM_LOCK_BUSY(dip); /* so we get a consistent view */ in pm_get_timestamps()
1119 valuep[i] = PM_CP(dip, i)->pmc_timestamp; in pm_get_timestamps()
1121 PM_UNLOCK_BUSY(dip); in pm_get_timestamps()
1132 pm_noinvol(dev_info_t *dip) in pm_noinvol() argument
1139 if (PM_IS_CFB(dip)) { in pm_noinvol()
1141 pmf, PM_DEVICE(dip))) in pm_noinvol()
1147 if (DEVI(dip)->devi_pm_noinvolpm == 0) { in pm_noinvol()
1149 if (DEVI(dip)->devi_pm_volpmd != 0) { in pm_noinvol()
1150 dev_info_t *pdip = dip; in pm_noinvol()
1160 ASSERT(DEVI(dip)->devi_pm_volpmd == 0); in pm_noinvol()
1171 if (DEVI(dip)->devi_pm_noinvolpm != DEVI(dip)->devi_pm_volpmd) in pm_noinvol()
1173 DEVI(dip)->devi_pm_noinvolpm, DEVI(dip)->devi_pm_volpmd, in pm_noinvol()
1174 PM_DEVICE(dip))) in pm_noinvol()
1176 return (DEVI(dip)->devi_pm_noinvolpm != DEVI(dip)->devi_pm_volpmd); in pm_noinvol()
1190 pm_scan_dev(dev_info_t *dip) in pm_scan_dev() argument
1202 dev_info_t *pdip = ddi_get_parent(dip); in pm_scan_dev()
1209 if (DEVI_IS_ATTACHING(dip)) { in pm_scan_dev()
1211 pmf, PM_DEVICE(dip), min_scan)) in pm_scan_dev()
1215 PM_LOCK_DIP(dip); in pm_scan_dev()
1216 scanp = PM_GET_PM_SCAN(dip); in pm_scan_dev()
1217 min_scan = PM_MIN_SCAN(dip); in pm_scan_dev()
1218 ASSERT(scanp && PM_GET_PM_INFO(dip)); in pm_scan_dev()
1220 PMD(PMD_SCAN, ("%s: [BEGIN %s@%s(%s#%d)]\n", pmf, PM_DEVICE(dip))) in pm_scan_dev()
1221 PMD(PMD_SCAN, ("%s: %s@%s(%s#%d): kuc is %d\n", pmf, PM_DEVICE(dip), in pm_scan_dev()
1222 PM_KUC(dip))) in pm_scan_dev()
1225 if (pm_scans_disabled || !PM_SCANABLE(dip) || in pm_scan_dev()
1227 (PM_KUC(dip) != 0) || in pm_scan_dev()
1228 PM_ISDIRECT(dip) || pm_noinvol(dip)) { in pm_scan_dev()
1229 PM_UNLOCK_DIP(dip); in pm_scan_dev()
1233 pmf, PM_DEVICE(dip), pm_scans_disabled, autopm_enabled, in pm_scan_dev()
1234 cpupm, PM_KUC(dip), in pm_scan_dev()
1235 PM_ISDIRECT(dip) ? "is" : "is not", in pm_scan_dev()
1236 pm_noinvol(dip) ? "is" : "is not")) in pm_scan_dev()
1239 PM_UNLOCK_DIP(dip); in pm_scan_dev()
1247 size = PM_NUMCMPTS(dip) * sizeof (time_t); in pm_scan_dev()
1249 pm_get_timestamps(dip, timestamp); in pm_scan_dev()
1256 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_scan_dev()
1260 cp = PM_CP(dip, i); in pm_scan_dev()
1270 "lowest\n", pmf, PM_DEVICE(dip), i)) in pm_scan_dev()
1275 thresh = cur_threshold(dip, i); /* comp i threshold */ in pm_scan_dev()
1288 pmf, PM_DEVICE(dip), i, idletime)) in pm_scan_dev()
1289 if (idletime >= thresh || PM_IS_PID(dip)) { in pm_scan_dev()
1292 pmf, PM_DEVICE(dip), i, curpwr, nxtpwr)) in pm_scan_dev()
1293 if (pm_set_power(dip, i, nxtpwr, PM_LEVEL_DOWNONLY, in pm_scan_dev()
1295 PM_CURPOWER(dip, i) != nxtpwr) { in pm_scan_dev()
1297 "%d->%d Failed\n", pmf, PM_DEVICE(dip), in pm_scan_dev()
1304 PM_DEVICE(dip), i, curpwr, nxtpwr, in pm_scan_dev()
1315 1, cur_threshold(dip, i)); in pm_scan_dev()
1318 max(1, cur_threshold(dip, i))); in pm_scan_dev()
1320 "timeleft(%lx)\n", pmf, PM_DEVICE(dip), in pm_scan_dev()
1329 "%lx\n", pmf, PM_DEVICE(dip), i, timeleft)) in pm_scan_dev()
1335 PM_DEVICE(dip), timeleft)) in pm_scan_dev()
1349 pm_scan_stop(dev_info_t *dip) in pm_scan_stop() argument
1355 PMD(PMD_SCAN, ("%s: [BEGIN %s@%s(%s#%d)]\n", pmf, PM_DEVICE(dip))) in pm_scan_stop()
1356 PM_LOCK_DIP(dip); in pm_scan_stop()
1357 scanp = PM_GET_PM_SCAN(dip); in pm_scan_stop()
1360 pmf, PM_DEVICE(dip))) in pm_scan_stop()
1361 PM_UNLOCK_DIP(dip); in pm_scan_stop()
1370 PM_UNLOCK_DIP(dip); in pm_scan_stop()
1372 PM_LOCK_DIP(dip); in pm_scan_stop()
1376 PM_UNLOCK_DIP(dip); in pm_scan_stop()
1378 PM_LOCK_DIP(dip); in pm_scan_stop()
1380 PM_UNLOCK_DIP(dip); in pm_scan_stop()
1381 PMD(PMD_SCAN, ("%s: [END %s@%s(%s#%d)]\n", pmf, PM_DEVICE(dip))) in pm_scan_stop()
1385 pm_scan_stop_walk(dev_info_t *dip, void *arg) in pm_scan_stop_walk() argument
1389 if (!PM_GET_PM_SCAN(dip)) in pm_scan_stop_walk()
1391 ASSERT(!PM_ISBC(dip)); in pm_scan_stop_walk()
1392 pm_scan_stop(dip); in pm_scan_stop_walk()
1437 pm_ppm_claimed(dev_info_t *dip) in pm_ppm_claimed() argument
1439 return (PPM(dip) != NULL); in pm_ppm_claimed()
1447 pm_clear_volpm_dip(dev_info_t *dip) in pm_clear_volpm_dip() argument
1451 if (dip == NULL) in pm_clear_volpm_dip()
1454 PM_DEVICE(dip))) in pm_clear_volpm_dip()
1455 DEVI(dip)->devi_pm_volpmd = 0; in pm_clear_volpm_dip()
1456 for (dip = ddi_get_child(dip); dip; dip = ddi_get_next_sibling(dip)) { in pm_clear_volpm_dip()
1457 pm_clear_volpm_dip(dip); in pm_clear_volpm_dip()
1467 pm_clear_volpm_list(dev_info_t *dip) in pm_clear_volpm_list() argument
1475 (void) ddi_pathname(dip, pathbuf); in pm_clear_volpm_list()
1500 power_dev(dev_info_t *dip, int comp, int level, int old_level, in power_dev() argument
1510 struct pm_component *cp = PM_CP(dip, comp); in power_dev()
1512 int bc = PM_ISBC(dip); in power_dev()
1525 if (devi_detach(dip, DDI_PM_SUSPEND) != DDI_SUCCESS) { in power_dev()
1528 pmf, PM_DEVICE(dip))) in power_dev()
1531 DEVI(dip)->devi_pm_flags |= PMC_SUSPENDED; in power_dev()
1536 power_req.req.ppm_set_power_req.who = dip; in power_dev()
1543 if (pm_ppm_claimed(dip)) { in power_dev()
1544 ppmname = PM_NAME(PPM(dip)); in power_dev()
1545 ppmaddr = PM_ADDR(PPM(dip)); in power_dev()
1552 pmf, PM_DEVICE(dip), cp->pmc_comp.pmc_name, comp, in power_dev()
1561 if (DEVI(dip)->devi_pm_volpmd && in power_dev()
1562 (!bc && pm_all_components_off(dip) && level != 0) || in power_dev()
1565 if ((power_op_ret = pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, in power_dev()
1575 int volpmd = DEVI(dip)->devi_pm_volpmd; in power_dev()
1576 pm_clear_volpm_dip(dip); in power_dev()
1577 pm_clear_volpm_list(dip); in power_dev()
1579 (void) ddi_pathname(dip, pathbuf); in power_dev()
1581 volpmd, 0, pathbuf, dip); in power_dev()
1587 PM_DEVICE(dip), level, power_val_to_string(cp, level))) in power_dev()
1606 ASSERT(PM_ISDIRECT(dip) || DEVI_IS_DETACHING(dip)); in power_dev()
1613 ASSERT((DEVI(dip)->devi_pm_flags & in power_dev()
1615 (PM_CP(dip, comp)->pmc_flags & in power_dev()
1626 ASSERT((DEVI(dip)->devi_pm_flags & in power_dev()
1628 (PM_CP(dip, comp)->pmc_flags & in power_dev()
1636 ASSERT(DEVI(dip)->devi_pm_flags & PMC_SUSPENDED); in power_dev()
1638 if ((power_op_ret = devi_attach(dip, DDI_PM_RESUME)) == in power_dev()
1640 DEVI(dip)->devi_pm_flags &= ~PMC_SUSPENDED; in power_dev()
1643 PM_DEVICE(dip)); in power_dev()
1653 pm_devi_lock_held(dev_info_t *dip) in pm_devi_lock_held() argument
1657 if (DEVI_BUSY_OWNED(dip)) in pm_devi_lock_held()
1671 return (cur != NULL && cur->pmlk_lender == DEVI(dip)->devi_busy_thread); in pm_devi_lock_held()
1692 pm_set_power(dev_info_t *dip, int comp, int level, int direction, in pm_set_power() argument
1701 dev_info_t *pdip = ddi_get_parent(dip); in pm_set_power()
1711 if (dip == cfb_dip) { in pm_set_power()
1721 pmf, PM_DEVICE(dip), comp, pm_decode_direction(direction), level)) in pm_set_power()
1723 (void) ddi_pathname(dip, pathbuf); in pm_set_power()
1724 bpc.bpc_dip = dip; in pm_set_power()
1727 bpc.bpc_olevel = PM_CURPOWER(dip, comp); in pm_set_power()
1742 if (pm_devi_lock_held(pdip) || pm_devi_lock_held(dip)) in pm_set_power()
1743 ret = pm_busop_set_power(dip, NULL, BUS_POWER_CHILD_PWRCHG, in pm_set_power()
1751 "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, &circ); 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, circ); in pm_unkeeps()
1918 if (dip) in pm_unkeeps()
1919 ddi_release_devi(dip); in pm_unkeeps()
2070 e_pm_hold_rele_power(dev_info_t *dip, int cnt) in e_pm_hold_rele_power() argument
2075 if ((dip == NULL) || in e_pm_hold_rele_power()
2076 (PM_GET_PM_INFO(dip) == NULL) || PM_ISBC(dip)) in e_pm_hold_rele_power()
2079 PM_LOCK_POWER(dip, &circ); in e_pm_hold_rele_power()
2080 ASSERT(cnt >= 0 && PM_KUC(dip) >= 0 || cnt < 0 && PM_KUC(dip) > 0); in e_pm_hold_rele_power()
2082 PM_DEVICE(dip), PM_KUC(dip), (PM_KUC(dip) + cnt))) in e_pm_hold_rele_power()
2084 PM_KUC(dip) += cnt; in e_pm_hold_rele_power()
2086 ASSERT(PM_KUC(dip) >= 0); in e_pm_hold_rele_power()
2087 PM_UNLOCK_POWER(dip, circ); in e_pm_hold_rele_power()
2089 if (cnt < 0 && PM_KUC(dip) == 0) in e_pm_hold_rele_power()
2090 pm_rescan(dip); in e_pm_hold_rele_power()
2109 pm_ppm_notify_all_lowest(dev_info_t *dip, int mode) in pm_ppm_notify_all_lowest() argument
2119 (void) pm_ctlops((dev_info_t *)ppmcp->ppmc_dip, dip, in pm_ppm_notify_all_lowest()
2144 pm_set_pm_info(dev_info_t *dip, void *value) in pm_set_pm_info() argument
2146 DEVI(dip)->devi_pm_info = value; in pm_set_pm_info()
2155 pm_rsvp_lookup(dev_info_t *dip, int comp) in pm_rsvp_lookup() argument
2160 if (p->pr_dip == dip && p->pr_comp == comp) { in pm_rsvp_lookup()
2173 pm_proceed(dev_info_t *dip, int cmd, int comp, int newlevel) in pm_proceed() argument
2186 if (dip == p->pr_dip) { in pm_proceed()
2189 pmf, PM_DEVICE(dip))) in pm_proceed()
2200 found = pm_rsvp_lookup(dip, comp); in pm_proceed()
2210 PM_DEVICE(dip))) in pm_proceed()
2214 PM_DEVICE(dip))) in pm_proceed()
2290 pm_rem_info(dev_info_t *dip) in pm_rem_info() argument
2294 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_rem_info()
2295 dev_info_t *pdip = ddi_get_parent(dip); in pm_rem_info()
2301 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_rem_info()
2302 if (PM_ISDIRECT(dip)) { in pm_rem_info()
2306 pm_proceed(dip, PMP_RELEASE, -1, -1); in pm_rem_info()
2308 ASSERT(!PM_GET_PM_SCAN(dip)); in pm_rem_info()
2318 PM_DEVICE(dip), PM_NUMCMPTS(dip))) in pm_rem_info()
2321 if (PM_ISBC(dip)) { in pm_rem_info()
2322 count = (PM_CURPOWER(dip, 0) != 0); in pm_rem_info()
2324 for (i = 0; i < PM_NUMCMPTS(dip); i++) in pm_rem_info()
2325 count += (PM_CURPOWER(dip, i) != 0); in pm_rem_info()
2328 if (PM_NUMCMPTS(dip) && pdip && !PM_WANTS_NOTIFICATION(pdip)) in pm_rem_info()
2333 (void) ddi_pathname(dip, pathbuf); in pm_rem_info()
2342 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_rem_info()
2343 pm_component_t *cp = PM_CP(dip, i); in pm_rem_info()
2345 PM_DECR_NOTLOWEST(dip) in pm_rem_info()
2351 pm_set_pm_info(dip, NULL); in pm_rem_info()
2356 pm_get_norm_pwrs(dev_info_t *dip, int **valuep, size_t *length) in pm_get_norm_pwrs() argument
2358 int components = PM_NUMCMPTS(dip); in pm_get_norm_pwrs()
2365 "can't get normal power values\n", PM_DEVICE(dip)); in pm_get_norm_pwrs()
2371 bufp[i] = pm_get_normal_power(dip, i); in pm_get_norm_pwrs()
2380 pm_reset_timestamps(dev_info_t *dip, void *arg) in pm_reset_timestamps() argument
2387 if (!PM_GET_PM_INFO(dip)) in pm_reset_timestamps()
2389 components = PM_NUMCMPTS(dip); in pm_reset_timestamps()
2391 PM_LOCK_BUSY(dip); in pm_reset_timestamps()
2398 cp = PM_CP(dip, i); in pm_reset_timestamps()
2402 PM_UNLOCK_BUSY(dip); in pm_reset_timestamps()
2411 pm_level_to_index(dev_info_t *dip, pm_component_t *cp, int level) in pm_level_to_index() argument
2424 pmf, PM_DEVICE(dip), in pm_level_to_index()
2425 (int)(cp - DEVI(dip)->devi_pm_components), level)) in pm_level_to_index()
2430 "%s@%s(%s#%d)", level, PM_DEVICE(dip)); in pm_level_to_index()
2438 e_pm_set_cur_pwr(dev_info_t *dip, pm_component_t *cp, int level) in e_pm_set_cur_pwr() argument
2456 PM_INCR_NOTLOWEST(dip); in e_pm_set_cur_pwr()
2458 PM_DECR_NOTLOWEST(dip); in e_pm_set_cur_pwr()
2461 cp->pmc_cur_pwr = pm_level_to_index(dip, cp, level); in e_pm_set_cur_pwr()
2471 pm_power(dev_info_t *dip, int comp, int level) in pm_power() argument
2476 struct pm_component *cp = PM_CP(dip, comp); in pm_power()
2478 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_power()
2481 PM_DEVICE(dip), comp, level)) in pm_power()
2482 if (!(ops = ddi_get_driver(dip))) { in pm_power()
2484 PM_DEVICE(dip))) in pm_power()
2494 retval = (*fn)(dip, comp, level); in pm_power()
2497 e_pm_set_cur_pwr(dip, PM_CP(dip, comp), level); in pm_power()
2512 (void) pm_phc_impl(dip, comp, phc_lvl, 0); in pm_power()
2514 pmf, PM_DEVICE(dip), comp, phc_lvl)) in pm_power()
2518 "level=%d (%s)\n", pmf, comp, cp->pmc_comp.pmc_name, PM_DEVICE(dip), in pm_power()
2524 pm_unmanage(dev_info_t *dip) in pm_unmanage() argument
2530 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_unmanage()
2532 PM_DEVICE(dip))) in pm_unmanage()
2534 power_req.req.ppm_config_req.who = dip; in pm_unmanage()
2535 if (pm_ppm_claimed(dip)) in pm_unmanage()
2536 retval = pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, in pm_unmanage()
2540 retval = pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, in pm_unmanage()
2544 pm_rem_info(dip); in pm_unmanage()
2549 pm_raise_power(dev_info_t *dip, int comp, int level) in pm_raise_power() argument
2553 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, comp, NULL) || in pm_raise_power()
2554 !e_pm_valid_power(dip, comp, level)) in pm_raise_power()
2557 return (dev_is_needed(dip, comp, level, PM_LEVEL_UPONLY)); in pm_raise_power()
2561 pm_lower_power(dev_info_t *dip, int comp, int level) in pm_lower_power() argument
2565 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, comp, NULL) || in pm_lower_power()
2566 !e_pm_valid_power(dip, comp, level)) { in pm_lower_power()
2568 "comp=%d level=%d\n", pmf, PM_DEVICE(dip), comp, level)) in pm_lower_power()
2572 if (!DEVI_IS_DETACHING(dip)) { in pm_lower_power()
2574 pmf, PM_DEVICE(dip))) in pm_lower_power()
2582 if (!PM_SCANABLE(dip) || pm_noinvol(dip)) { in pm_lower_power()
2584 pmf, PM_DEVICE(dip), in pm_lower_power()
2588 pm_noinvol(dip) ? "pm_noinvol()" : "")) in pm_lower_power()
2592 if (dev_is_needed(dip, comp, level, PM_LEVEL_DOWNONLY) != DDI_SUCCESS) { in pm_lower_power()
2594 PM_DEVICE(dip))) in pm_lower_power()
2604 pm_psc_dip_to_direct(dev_info_t *dip, pscc_t **psccp) in pm_psc_dip_to_direct() argument
2611 if (p->pscc_dip == dip) { in pm_psc_dip_to_direct()
2621 panic("sunpm: no entry for dip %p in direct list", (void *)dip); in pm_psc_dip_to_direct()
2634 psc_entry(ushort_t event, psce_t *psce, dev_info_t *dip, int comp, int new, in psc_entry() argument
2644 (void) ddi_pathname(dip, buf); in psc_entry()
2728 pm_enqueue_notify(ushort_t cmd, dev_info_t *dip, int comp, in pm_enqueue_notify() argument
2741 pmf, PM_DEVICE(dip), comp, oldlevel, newlevel)) in pm_enqueue_notify()
2742 psce = pm_psc_dip_to_direct(dip, &pscc); in pm_enqueue_notify()
2745 "%d\n", pmf, PM_DEVICE(dip), pscc->pscc_clone, in pm_enqueue_notify()
2747 overrun = psc_entry(cmd, psce, dip, comp, newlevel, oldlevel, in pm_enqueue_notify()
2759 pmf, PM_DEVICE(dip), comp, oldlevel, newlevel)) in pm_enqueue_notify()
2760 if (PM_ISDIRECT(dip) && canblock != PM_CANBLOCK_BYPASS) { in pm_enqueue_notify()
2761 psce = pm_psc_dip_to_direct(dip, &pscc); in pm_enqueue_notify()
2763 "%d\n", pmf, PM_DEVICE(dip), pscc->pscc_clone, in pm_enqueue_notify()
2765 overrun = psc_entry(cmd, psce, dip, comp, newlevel, in pm_enqueue_notify()
2778 (void) psc_entry(cmd, psce, dip, comp, newlevel, in pm_enqueue_notify()
2816 dev_info_t *dip, int *pcircp, int *circp) in pm_try_parent_child_locks() argument
2819 if (PM_TRY_LOCK_POWER(dip, circp)) { in pm_try_parent_child_locks()
2840 pm_blocked_by_us(dev_info_t *dip) in pm_blocked_by_us() argument
2846 dev_info_t *ppm = (dev_info_t *)DEVI(dip)->devi_pm_ppm; in pm_blocked_by_us()
2849 power_req.req.ppm_power_lock_owner_req.who = dip; in pm_blocked_by_us()
2850 if (pm_ctlops(ppm, dip, DDI_CTLOPS_POWER, &power_req, &result) != in pm_blocked_by_us()
2858 PM_DEVICE(dip)); in pm_blocked_by_us()
2877 pm_notify_parent(dev_info_t *dip, in pm_notify_parent() argument
2885 bphc.bphc_dip = dip; in pm_notify_parent()
2886 bphc.bphc_path = ddi_pathname(dip, pathbuf); in pm_notify_parent()
2902 pm_check_and_resume(dev_info_t *dip, int comp, int old_level, int level) in pm_check_and_resume() argument
2906 if (PM_ISBC(dip) && comp == 0 && old_level == 0 && level != 0) { in pm_check_and_resume()
2907 ASSERT(DEVI(dip)->devi_pm_flags & PMC_SUSPENDED); in pm_check_and_resume()
2909 if ((ret = devi_attach(dip, DDI_PM_RESUME)) != DDI_SUCCESS) in pm_check_and_resume()
2913 PM_NAME(dip), PM_ADDR(dip)); in pm_check_and_resume()
2914 DEVI(dip)->devi_pm_flags &= ~PMC_SUSPENDED; in pm_check_and_resume()
2940 pm_power_has_changed(dev_info_t *dip, int comp, int level) in pm_power_has_changed() argument
2944 dev_info_t *pdip = ddi_get_parent(dip); in pm_power_has_changed()
2950 PM_DEVICE(dip), level)) in pm_power_has_changed()
2955 PM_DEVICE(dip), comp, level)) in pm_power_has_changed()
2957 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, comp, &cp) || in pm_power_has_changed()
2958 !e_pm_valid_power(dip, comp, level)) in pm_power_has_changed()
2973 cp = PM_CP(dip, comp); in pm_power_has_changed()
2974 while (!pm_try_parent_child_locks(pdip, dip, &pcirc, &circ)) { in pm_power_has_changed()
2975 if (((blocked = pm_blocked_by_us(dip)) != 0) && in pm_power_has_changed()
2979 pm_enqueue_notify(PSC_HAS_CHANGED, dip, comp, in pm_power_has_changed()
2984 pm_notify_parent(dip, in pm_power_has_changed()
2986 (void) pm_check_and_resume(dip, in pm_power_has_changed()
3003 pm_level_to_index(dip, cp, level); in pm_power_has_changed()
3005 "level=%d\n", pmf, PM_DEVICE(dip), comp, level)) in pm_power_has_changed()
3013 return (pm_phc_impl(dip, in pm_power_has_changed()
3018 (!PM_ISBC(dip) || comp == 0) && in pm_power_has_changed()
3021 ret = pm_phc_impl(dip, comp, level, 1); in pm_power_has_changed()
3023 if ((!PM_ISBC(dip) || in pm_power_has_changed()
3039 (!PM_ISBC(dip) || comp == 0) && POWERING_ON(old_level, level)) in pm_power_has_changed()
3041 ret = pm_phc_impl(dip, comp, level, 1); in pm_power_has_changed()
3043 if ((!PM_ISBC(dip) || comp == 0) && level == 0 && in pm_power_has_changed()
3047 PM_UNLOCK_POWER(dip, circ); in pm_power_has_changed()
3062 calc_cfb_comps_incr(dev_info_t *dip, int cmpt, int old, int new) in calc_cfb_comps_incr() argument
3064 struct pm_component *cp = PM_CP(dip, cmpt); in calc_cfb_comps_incr()
3080 update_comps_off(int incr, dev_info_t *dip) in update_comps_off() argument
3084 ASSERT(pm_cfb_comps_off <= PM_NUMCMPTS(dip)); in update_comps_off()
3093 pm_phc_impl(dev_info_t *dip, int comp, int level, int notify) in pm_phc_impl() argument
3098 dev_info_t *pdip = ddi_get_parent(dip); in pm_phc_impl()
3103 dev_info_t *ppm = (dev_info_t *)DEVI(dip)->devi_pm_ppm; in pm_phc_impl()
3108 cp = PM_CP(dip, comp); in pm_phc_impl()
3116 "level=%d\n", pmf, PM_DEVICE(dip), comp, level)) in pm_phc_impl()
3124 power_req.req.ppm_notify_level_req.who = dip; in pm_phc_impl()
3128 if (pm_ctlops(ppm, dip, DDI_CTLOPS_POWER, &power_req, in pm_phc_impl()
3131 pmf, PM_DEVICE(dip), level)) in pm_phc_impl()
3135 if (PM_IS_CFB(dip)) { in pm_phc_impl()
3136 incr = calc_cfb_comps_incr(dip, comp, old_level, level); in pm_phc_impl()
3139 update_comps_off(incr, dip); in pm_phc_impl()
3141 "cfb_comps_off->%d\n", pmf, PM_DEVICE(dip), in pm_phc_impl()
3145 e_pm_set_cur_pwr(dip, PM_CP(dip, comp), level); in pm_phc_impl()
3150 pm_notify_parent(dip, pdip, comp, old_level, level); in pm_phc_impl()
3151 (void) pm_check_and_resume(dip, comp, old_level, level); in pm_phc_impl()
3160 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_phc_impl()
3161 cp = PM_CP(dip, i); in pm_phc_impl()
3178 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_phc_impl()
3179 cp = PM_CP(dip, i); in pm_phc_impl()
3194 (void) ddi_pathname(dip, pathbuf); in pm_phc_impl()
3202 pm_enqueue_notify(PSC_HAS_CHANGED, dip, comp, level, old_level, in pm_phc_impl()
3207 PMD(PMD_RESCAN, ("%s: %s@%s(%s#%d): pm_rescan\n", pmf, PM_DEVICE(dip))) in pm_phc_impl()
3208 pm_rescan(dip); in pm_phc_impl()
3224 pm_register_ppm(int (*func)(dev_info_t *), dev_info_t *dip) in pm_register_ppm() argument
3239 ppmcp->ppmc_dip = dip; in pm_register_ppm()
3247 while ((dip = ddi_get_parent(dip)) != NULL) { in pm_register_ppm()
3248 if (dip != ddi_root_node() && PM_GET_PM_INFO(dip) == NULL) in pm_register_ppm()
3250 pm_ppm_claim(dip); in pm_register_ppm()
3252 if (pm_ppm_claimed(dip) && PM_GET_PM_INFO(dip)) { in pm_register_ppm()
3258 p->who = dip; in pm_register_ppm()
3259 PM_LOCK_POWER(dip, &circ); in pm_register_ppm()
3260 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_register_ppm()
3261 cp = PM_CP(dip, i); in pm_register_ppm()
3267 if (pm_ctlops(PPM(dip), dip, in pm_register_ppm()
3273 PM_DEVICE(dip), pwr)) in pm_register_ppm()
3277 PM_UNLOCK_POWER(dip, circ); in pm_register_ppm()
3289 pm_ppm_claim(dev_info_t *dip) in pm_ppm_claim() argument
3293 if (PPM(dip)) { in pm_ppm_claim()
3298 if ((*ppmcp->ppmc_func)(dip)) { in pm_ppm_claim()
3299 DEVI(dip)->devi_pm_ppm = in pm_ppm_claim()
3314 pm_detaching(dev_info_t *dip) in pm_detaching() argument
3317 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_detaching()
3320 PMD(PMD_REMDEV, ("%s: %s@%s(%s#%d), %d comps\n", pmf, PM_DEVICE(dip), in pm_detaching()
3321 PM_NUMCMPTS(dip))) in pm_detaching()
3324 ASSERT(DEVI_IS_DETACHING(dip)); in pm_detaching()
3325 PM_LOCK_DIP(dip); in pm_detaching()
3327 PM_UNLOCK_DIP(dip); in pm_detaching()
3328 if (!PM_ISBC(dip)) in pm_detaching()
3329 pm_scan_stop(dip); in pm_detaching()
3334 iscons = PM_IS_CFB(dip); in pm_detaching()
3335 if (iscons || PM_ISBC(dip)) { in pm_detaching()
3336 (void) pm_all_to_normal(dip, PM_CANBLOCK_BYPASS); in pm_detaching()
3358 pm_detach_failed(dev_info_t *dip) in pm_detach_failed() argument
3361 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_detach_failed()
3366 ASSERT(DEVI_IS_DETACHING(dip)); in pm_detach_failed()
3371 if (!pm_all_at_normal(dip)) { in pm_detach_failed()
3372 if (pm_all_to_normal(dip, in pm_detach_failed()
3376 PM_DEVICE(dip))) in pm_detach_failed()
3382 if (!PM_ISBC(dip)) { in pm_detach_failed()
3384 if (PM_SCANABLE(dip)) in pm_detach_failed()
3385 pm_scan_init(dip); in pm_detach_failed()
3387 pm_rescan(dip); in pm_detach_failed()
3397 e_pm_default_levels(dev_info_t *dip, pm_component_t *cp, int norm) in e_pm_default_levels() argument
3404 e_pm_set_cur_pwr(dip, cp, norm); in e_pm_default_levels()
3408 e_pm_default_components(dev_info_t *dip, int cmpts) in e_pm_default_components() argument
3411 pm_component_t *p = DEVI(dip)->devi_pm_components; in e_pm_default_components()
3413 p = DEVI(dip)->devi_pm_components; in e_pm_default_components()
3435 pm_premanage(dev_info_t *dip, int style) in pm_premanage() argument
3440 pm_component_t *p = DEVI(dip)->devi_pm_components; in pm_premanage()
3443 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_premanage()
3447 if (DEVI(dip)->devi_pm_flags & PMC_COMPONENTS_DONE) in pm_premanage()
3449 if (DEVI(dip)->devi_pm_flags & PMC_COMPONENTS_FAILED) { in pm_premanage()
3456 if ((compp = pm_autoconfig(dip, &error)) == NULL) { in pm_premanage()
3461 DEVI(dip)->devi_pm_flags |= PMC_COMPONENTS_FAILED; in pm_premanage()
3470 if ((cmpts = PM_NUMCMPTS(dip)) == 0) { in pm_premanage()
3477 DEVI(dip)->devi_pm_flags |= PMC_BC; in pm_premanage()
3478 e_pm_default_components(dip, cmpts); in pm_premanage()
3486 norm = pm_get_normal_power(dip, i); in pm_premanage()
3489 PM_DEVICE(dip), i)) in pm_premanage()
3496 PM_INCR_NOTLOWEST(dip); in pm_premanage()
3497 e_pm_default_levels(dip, PM_CP(dip, i), norm); in pm_premanage()
3504 cmpts = PM_NUMCMPTS(dip); in pm_premanage()
3507 p = DEVI(dip)->devi_pm_components; in pm_premanage()
3510 ASSERT(PM_CP(dip, i)->pmc_cur_pwr == 0); in pm_premanage()
3511 e_pm_set_cur_pwr(dip, PM_CP(dip, i), PM_LEVEL_UNKNOWN); in pm_premanage()
3513 if (DEVI(dip)->devi_pm_flags & PMC_CPU_THRESH) in pm_premanage()
3514 pm_set_device_threshold(dip, pm_cpu_idle_threshold, in pm_premanage()
3517 pm_set_device_threshold(dip, pm_system_idle_threshold, in pm_premanage()
3535 e_pm_manage(dev_info_t *dip, int style) in e_pm_manage() argument
3539 dev_info_t *pdip = ddi_get_parent(dip); in e_pm_manage()
3544 if (pm_premanage(dip, style) != DDI_SUCCESS) { in e_pm_manage()
3547 PMD(PMD_KIDSUP, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in e_pm_manage()
3548 ASSERT(PM_GET_PM_INFO(dip) == NULL); in e_pm_manage()
3557 count = (PM_ISBC(dip)) ? 1 : PM_NUMCMPTS(dip); in e_pm_manage()
3561 pm_set_pm_info(dip, info); in e_pm_manage()
3565 (void) pm_thresh_specd(dip); in e_pm_manage()
3571 (void) ddi_pathname(dip, pathbuf); in e_pm_manage()
3576 if (!PM_ISBC(dip)) { in e_pm_manage()
3578 if (PM_SCANABLE(dip)) { in e_pm_manage()
3579 pm_scan_init(dip); in e_pm_manage()
3581 pm_rescan(dip); in e_pm_manage()
3596 pm_get_normal_power(dev_info_t *dip, int comp) in pm_get_normal_power() argument
3599 if (comp >= 0 && comp < PM_NUMCMPTS(dip)) { in pm_get_normal_power()
3600 return (PM_CP(dip, comp)->pmc_norm_pwr); in pm_get_normal_power()
3609 pm_get_current_power(dev_info_t *dip, int comp, int *levelp) in pm_get_current_power() argument
3611 if (comp >= 0 && comp < PM_NUMCMPTS(dip)) { in pm_get_current_power()
3612 *levelp = PM_CURPOWER(dip, comp); in pm_get_current_power()
3622 cur_threshold(dev_info_t *dip, int comp) in cur_threshold() argument
3624 pm_component_t *cp = PM_CP(dip, comp); in cur_threshold()
3627 if (PM_ISBC(dip)) { in cur_threshold()
3636 if (DEVI(dip)->devi_pm_flags & PMC_NEXDEF_THRESH) in cur_threshold()
3638 else if (DEVI(dip)->devi_pm_flags & PMC_CPU_THRESH) in cur_threshold()
3672 pm_update_maxpower(dev_info_t *dip, int comp, int level) in pm_update_maxpower() argument
3678 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, comp, NULL) || in pm_update_maxpower()
3679 !e_pm_valid_power(dip, comp, level)) { in pm_update_maxpower()
3681 "comp=%d level=%d\n", pmf, PM_DEVICE(dip), comp, level)) in pm_update_maxpower()
3684 old = e_pm_get_max_power(dip, comp); in pm_update_maxpower()
3685 e_pm_set_max_power(dip, comp, level); in pm_update_maxpower()
3687 if (pm_set_power(dip, comp, level, PM_LEVEL_DOWNONLY, in pm_update_maxpower()
3689 e_pm_set_max_power(dip, comp, old); in pm_update_maxpower()
3691 PM_DEVICE(dip))) in pm_update_maxpower()
3701 pm_all_to_normal(dev_info_t *dip, pm_canblock_t canblock) in pm_all_to_normal() argument
3709 PMD(PMD_ALLNORM, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_all_to_normal()
3710 ASSERT(PM_GET_PM_INFO(dip)); in pm_all_to_normal()
3711 if (pm_get_norm_pwrs(dip, &normal, &size) != DDI_SUCCESS) { in pm_all_to_normal()
3713 "%s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_all_to_normal()
3716 ncomps = PM_NUMCMPTS(dip); in pm_all_to_normal()
3718 if (pm_set_power(dip, i, normal[i], in pm_all_to_normal()
3723 PM_DEVICE(dip), i, normal[i], result)) in pm_all_to_normal()
3729 "to full power\n", pmf, changefailed, PM_DEVICE(dip))) in pm_all_to_normal()
3739 pm_all_at_normal(dev_info_t *dip) in pm_all_at_normal() argument
3746 PMD(PMD_ALLNORM, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_all_at_normal()
3747 if (pm_get_norm_pwrs(dip, &normal, &size) != DDI_SUCCESS) { in pm_all_at_normal()
3751 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_all_at_normal()
3752 int current = PM_CURPOWER(dip, i); in pm_all_at_normal()
3755 "norm=%d, cur=%d\n", pmf, PM_DEVICE(dip), i, in pm_all_at_normal()
3761 if (i != PM_NUMCMPTS(dip)) { in pm_all_at_normal()
3896 e_pm_create_components(dev_info_t *dip, int num_components) in e_pm_create_components() argument
3901 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in e_pm_create_components()
3902 ASSERT(!DEVI(dip)->devi_pm_components); in e_pm_create_components()
3903 ASSERT(!(DEVI(dip)->devi_pm_flags & PMC_COMPONENTS_DONE)); in e_pm_create_components()
3908 DEVI(dip)->devi_pm_comp_size = size; in e_pm_create_components()
3909 DEVI(dip)->devi_pm_num_components = num_components; in e_pm_create_components()
3910 PM_LOCK_BUSY(dip); in e_pm_create_components()
3916 PM_UNLOCK_BUSY(dip); in e_pm_create_components()
3917 DEVI(dip)->devi_pm_components = ocompp; in e_pm_create_components()
3918 DEVI(dip)->devi_pm_flags |= PMC_COMPONENTS_DONE; in e_pm_create_components()
3988 e_pm_set_max_power(dev_info_t *dip, int component_number, int level) in e_pm_set_max_power() argument
3990 PM_CP(dip, component_number)->pmc_norm_pwr = level; in e_pm_set_max_power()
3997 e_pm_get_max_power(dev_info_t *dip, int component_number) in e_pm_get_max_power() argument
3999 return (PM_CP(dip, component_number)->pmc_norm_pwr); in e_pm_get_max_power()
4007 e_pm_destroy_components(dev_info_t *dip) in e_pm_destroy_components() argument
4012 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in e_pm_destroy_components()
4013 if (PM_NUMCMPTS(dip) == 0) in e_pm_destroy_components()
4015 cp = DEVI(dip)->devi_pm_components; in e_pm_destroy_components()
4017 for (i = 0; i < PM_NUMCMPTS(dip); i++, cp++) { in e_pm_destroy_components()
4024 if (PM_ISBC(dip)) in e_pm_destroy_components()
4031 kmem_free(DEVI(dip)->devi_pm_components, DEVI(dip)->devi_pm_comp_size); in e_pm_destroy_components()
4032 DEVI(dip)->devi_pm_components = NULL; in e_pm_destroy_components()
4033 DEVI(dip)->devi_pm_num_components = 0; in e_pm_destroy_components()
4034 DEVI(dip)->devi_pm_flags &= in e_pm_destroy_components()
4046 pm_autoconfig(dev_info_t *dip, int *errp) in pm_autoconfig() argument
4064 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_autoconfig()
4066 if (ddi_prop_lookup_string_array(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS, in pm_autoconfig()
4078 if (PM_NUMCMPTS(dip) != 0) { in pm_autoconfig()
4080 pmf, PM_DEVICE(dip), PM_NUMCMPTS(dip))) in pm_autoconfig()
4163 (void) e_pm_create_components(dip, components); in pm_autoconfig()
4165 e_pm_set_max_power(dip, i, np[i]); in pm_autoconfig()
4177 p->comp->pmc_name, PM_DEVICE(dip), in pm_autoconfig()
4187 p->comp->pmc_name, PM_DEVICE(dip), in pm_autoconfig()
4201 PM_DEVICE(dip))) in pm_autoconfig()
4224 e_pm_destroy_components(dip); in pm_autoconfig()
4231 cmn_err(CE_CONT, "! for %s@%s(%s#%d) is ill-formed.\n", PM_DEVICE(dip)); in pm_autoconfig()
4276 pm_set_device_threshold(dev_info_t *dip, int base, int flag) in pm_set_device_threshold() argument
4282 int ncomp = PM_NUMCMPTS(dip); in pm_set_device_threshold()
4288 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_set_device_threshold()
4289 PM_LOCK_DIP(dip); in pm_set_device_threshold()
4296 if (PM_IS_NEXUS(dip)) { in pm_set_device_threshold()
4299 PM_DEVICE(dip))) in pm_set_device_threshold()
4302 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4308 DEVI(dip)->devi_pm_dev_thresh = in pm_set_device_threshold()
4314 if (DEVI(dip)->devi_pm_flags & in pm_set_device_threshold()
4316 PM_LOCK_POWER(dip, &circ); in pm_set_device_threshold()
4317 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_set_device_threshold()
4318 if (PM_CURPOWER(dip, i) == 0) in pm_set_device_threshold()
4325 PM_DEVICE(dip), pm_comps_notlowest)) in pm_set_device_threshold()
4327 pm_ppm_notify_all_lowest(dip, in pm_set_device_threshold()
4331 PM_UNLOCK_POWER(dip, circ); in pm_set_device_threshold()
4333 DEVI(dip)->devi_pm_flags &= PMC_THRESH_NONE; in pm_set_device_threshold()
4334 DEVI(dip)->devi_pm_flags |= PMC_NEXDEF_THRESH; in pm_set_device_threshold()
4335 PM_UNLOCK_DIP(dip); in pm_set_device_threshold()
4337 } else if (DEVI(dip)->devi_pm_flags & PMC_NEXDEF_THRESH) { in pm_set_device_threshold()
4343 PM_LOCK_POWER(dip, &circ); in pm_set_device_threshold()
4344 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_set_device_threshold()
4345 if (PM_CURPOWER(dip, i) == 0) in pm_set_device_threshold()
4349 pm_ppm_notify_all_lowest(dip, in pm_set_device_threshold()
4354 PM_DEVICE(dip), pm_comps_notlowest)) in pm_set_device_threshold()
4357 PM_UNLOCK_POWER(dip, circ); in pm_set_device_threshold()
4365 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4373 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4381 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4384 "comp=%d, level=%d, %d\n", pmf, PM_DEVICE(dip), in pm_set_device_threshold()
4402 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4413 pmc = &PM_CP(dip, comp)->pmc_comp; in pm_set_device_threshold()
4416 "comp=%d level=%d, %d\n", pmf, PM_DEVICE(dip), in pm_set_device_threshold()
4421 ASSERT(PM_IAM_LOCKING_DIP(dip)); in pm_set_device_threshold()
4422 DEVI(dip)->devi_pm_dev_thresh = base; in pm_set_device_threshold()
4423 DEVI(dip)->devi_pm_flags &= PMC_THRESH_NONE; in pm_set_device_threshold()
4424 DEVI(dip)->devi_pm_flags |= flag; in pm_set_device_threshold()
4425 PM_UNLOCK_DIP(dip); in pm_set_device_threshold()
4454 ddi_dev_is_needed(dev_info_t *dip, int cmpt, int level) in ddi_dev_is_needed() argument
4456 return (pm_raise_power(dip, cmpt, level)); in ddi_dev_is_needed()
4464 ddi_power(dev_info_t *dip, int pm_cmpt, int pm_level) in ddi_power() argument
4469 request.req.set_power_req.who = dip; in ddi_power()
4472 return (ddi_ctlops(dip, dip, DDI_CTLOPS_POWER, &request, NULL)); in ddi_power()
4482 ddi_removing_power(dev_info_t *dip) in ddi_removing_power() argument
4484 _NOTE(ARGUNUSED(dip)) in ddi_removing_power()
4493 e_ddi_parental_suspend_resume(dev_info_t *dip) in e_ddi_parental_suspend_resume() argument
4495 return (DEVI(dip)->devi_pm_flags & PMC_PARENTAL_SR); in e_ddi_parental_suspend_resume()
4503 e_ddi_suspend(dev_info_t *dip, ddi_detach_cmd_t cmd) in e_ddi_suspend() argument
4507 request.req.suspend_req.who = dip; in e_ddi_suspend()
4509 return (ddi_ctlops(dip, dip, DDI_CTLOPS_POWER, &request, NULL)); in e_ddi_suspend()
4517 e_ddi_resume(dev_info_t *dip, ddi_attach_cmd_t cmd) in e_ddi_resume() argument
4521 request.req.resume_req.who = dip; in e_ddi_resume()
4523 return (ddi_ctlops(dip, dip, DDI_CTLOPS_POWER, &request, NULL)); in e_ddi_resume()
4531 pm_create_components(dev_info_t *dip, int num_components) in pm_create_components() argument
4538 if (!DEVI_IS_ATTACHING(dip)) { in pm_create_components()
4543 if (DEVI(dip)->devi_pm_components) { in pm_create_components()
4545 PM_DEVICE(dip), PM_NUMCMPTS(dip))) in pm_create_components()
4548 e_pm_create_components(dip, num_components); in pm_create_components()
4549 DEVI(dip)->devi_pm_flags |= PMC_BC; in pm_create_components()
4550 e_pm_default_components(dip, num_components); in pm_create_components()
4560 pm_destroy_components(dev_info_t *dip) in pm_destroy_components() argument
4563 dev_info_t *pdip = ddi_get_parent(dip); in pm_destroy_components()
4566 PM_DEVICE(dip))) in pm_destroy_components()
4567 ASSERT(DEVI_IS_DETACHING(dip)); in pm_destroy_components()
4569 if (!PM_ISBC(dip)) in pm_destroy_components()
4571 "(%s@%s) calls pm_destroy_components", PM_NAME(dip), in pm_destroy_components()
4572 PM_ADDR(dip)); in pm_destroy_components()
4578 if (PM_NUMCMPTS(dip) == 0 || !PM_ISBC(dip)) { in pm_destroy_components()
4580 PM_DEVICE(dip))) in pm_destroy_components()
4583 ASSERT(PM_GET_PM_INFO(dip)); in pm_destroy_components()
4589 ASSERT(!PM_GET_PM_SCAN(dip)); /* better be gone already */ in pm_destroy_components()
4595 if ((PM_CURPOWER(dip, 0) != 0) && pdip && !PM_WANTS_NOTIFICATION(pdip)) in pm_destroy_components()
4600 pmf, PM_DEVICE(dip))) in pm_destroy_components()
4603 e_pm_destroy_components(dip); in pm_destroy_components()
4607 DEVI(dip)->devi_pm_flags &= in pm_destroy_components()
4615 pm_busy_component(dev_info_t *dip, int cmpt) in pm_busy_component() argument
4619 ASSERT(dip != NULL); in pm_busy_component()
4620 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, cmpt, &cp)) in pm_busy_component()
4622 PM_LOCK_BUSY(dip); in pm_busy_component()
4625 PM_UNLOCK_BUSY(dip); in pm_busy_component()
4633 pm_idle_component(dev_info_t *dip, int cmpt) in pm_idle_component() argument
4637 pm_scan_t *scanp = PM_GET_PM_SCAN(dip); in pm_idle_component()
4639 if (!e_pm_valid_info(dip, NULL) || !e_pm_valid_comp(dip, cmpt, &cp)) in pm_idle_component()
4642 PM_LOCK_BUSY(dip); in pm_idle_component()
4650 PM_UNLOCK_BUSY(dip); in pm_idle_component()
4655 if (scanp && PM_IS_PID(dip)) { in pm_idle_component()
4657 PM_DEVICE(dip))) in pm_idle_component()
4658 pm_rescan(dip); in pm_idle_component()
4666 if (PM_IS_NEXUS(dip) && (cp->pmc_busycount == 0)) { in pm_idle_component()
4667 pm_rescan(dip); in pm_idle_component()
4681 pm_set_normal_power(dev_info_t *dip, int comp, int level) in pm_set_normal_power() argument
4685 if (!PM_ISBC(dip)) in pm_set_normal_power()
4688 PM_NAME(dip), PM_ADDR(dip)); in pm_set_normal_power()
4690 if (PM_ISBC(dip)) { in pm_set_normal_power()
4692 "level=%d\n", pmf, PM_DEVICE(dip), comp, level)) in pm_set_normal_power()
4693 e_pm_set_max_power(dip, comp, level); in pm_set_normal_power()
4694 e_pm_default_levels(dip, PM_CP(dip, comp), level); in pm_set_normal_power()
4702 pm_stop(dev_info_t *dip) in pm_stop() argument
4705 dev_info_t *pdip = ddi_get_parent(dip); in pm_stop()
4707 ASSERT(!PM_IAM_LOCKING_DIP(dip)); in pm_stop()
4709 if (!PM_ISBC(dip)) { in pm_stop()
4710 pm_scan_stop(dip); in pm_stop()
4711 pm_scan_fini(dip); in pm_stop()
4714 if (PM_GET_PM_INFO(dip) != NULL) { in pm_stop()
4715 if (pm_unmanage(dip) == DDI_SUCCESS) { in pm_stop()
4720 e_pm_destroy_components(dip); in pm_stop()
4723 pmf, PM_DEVICE(dip))) in pm_stop()
4726 if (PM_NUMCMPTS(dip)) in pm_stop()
4727 e_pm_destroy_components(dip); in pm_stop()
4729 if (DEVI(dip)->devi_pm_flags & PMC_NOPMKID) { in pm_stop()
4730 DEVI(dip)->devi_pm_flags &= ~PMC_NOPMKID; in pm_stop()
4734 MDI_VHCI(pdip) && MDI_CLIENT(dip)) { in pm_stop()
4737 (void *)dip, NULL, 0); in pm_stop()
4749 e_new_pm_props(dev_info_t *dip) in e_new_pm_props() argument
4751 if (PM_GET_PM_INFO(dip) != NULL) { in e_new_pm_props()
4752 pm_stop(dip); in e_new_pm_props()
4754 if (e_pm_manage(dip, PM_STYLE_NEW) != DDI_SUCCESS) { in e_new_pm_props()
4758 e_pm_props(dip); in e_new_pm_props()
4766 e_pm_props(dev_info_t *dip) in e_pm_props() argument
4778 if (ddi_getlongprop(DDI_DEV_T_ANY, dip, propflag, "pm-hardware-state", in e_pm_props()
4788 "%s property value '%s'", PM_NAME(dip), in e_pm_props()
4789 PM_ADDR(dip), "pm-hardware-state", pp); in e_pm_props()
4799 if (ddi_prop_exists(DDI_DEV_T_ANY, dip, propflag, in e_pm_props()
4800 "pm-want-child-notification?") && PM_HAS_BUS_POWER(dip)) in e_pm_props()
4802 ASSERT(PM_HAS_BUS_POWER(dip) || !ddi_prop_exists(DDI_DEV_T_ANY, in e_pm_props()
4803 dip, propflag, "pm-want-child-notification?")); in e_pm_props()
4804 if (ddi_prop_exists(DDI_DEV_T_ANY, dip, propflag, in e_pm_props()
4810 if (ddi_getlongprop(DDI_DEV_T_ANY, dip, propflag, "pm-class", in e_pm_props()
4816 "%s property value '%s'", PM_NAME(dip), in e_pm_props()
4817 PM_ADDR(dip), "pm-class", pp); in e_pm_props()
4822 DEVI(dip)->devi_pm_flags |= flags; in e_pm_props()
4831 pm_default_ctlops(dev_info_t *dip, dev_info_t *rdip, in pm_default_ctlops() argument
4834 _NOTE(ARGUNUSED(dip)) in pm_default_ctlops()
4853 ASSERT(dip == NULL); in pm_default_ctlops()
5012 pm_start(dev_info_t *dip) in pm_start() argument
5016 dev_info_t *pdip = ddi_get_parent(dip); in pm_start()
5018 void pm_noinvol_specd(dev_info_t *dip); in pm_start()
5020 e_pm_props(dip); in pm_start()
5021 pm_noinvol_specd(dip); in pm_start()
5027 if (PM_GET_PM_INFO(dip)) { in pm_start()
5029 pmf, PM_DEVICE(dip))) in pm_start()
5032 ret = e_pm_manage(dip, PM_STYLE_UNKNOWN); in pm_start()
5034 if (PM_GET_PM_INFO(dip) == NULL) { in pm_start()
5038 DEVI(dip)->devi_pm_flags |= PMC_NOPMKID; in pm_start()
5041 } else if (pdip && MDI_VHCI(pdip) && MDI_CLIENT(dip)) { in pm_start()
5043 (void *)dip, NULL, 0); in pm_start()
5047 "left up\n", pmf, PM_DEVICE(dip))) in pm_start()
5177 pm_thresh_specd(dev_info_t *dip) in pm_thresh_specd() argument
5184 path = ddi_pathname(dip, pathbuf); in pm_thresh_specd()
5190 pm_apply_recorded_thresh(dip, rp); in pm_thresh_specd()
5263 dev_info_t *dip; in pm_keeper() local
5272 dip = pm_name_to_dip(keeper, 1); in pm_keeper()
5273 if (dip == NULL) in pm_keeper()
5286 ret += pm_apply_recorded_dep(dip, dp); in pm_keeper()
5301 pmf, PM_DEVICE(dip), PM_DEVICE(kept), in pm_keeper()
5303 if (kept != dip) { in pm_keeper()
5304 ret += pm_set_keeping(dip, kept); in pm_keeper()
5311 ddi_release_devi(dip); in pm_keeper()
5504 pm_valid_power(dev_info_t *dip, int comp, int level) in pm_valid_power() argument
5508 if (comp >= 0 && comp < PM_NUMCMPTS(dip) && level >= 0) in pm_valid_power()
5509 return (e_pm_valid_power(dip, comp, level)); in pm_valid_power()
5512 pmf, comp, PM_NUMCMPTS(dip), level)) in pm_valid_power()
5524 pm_block(dev_info_t *dip, int comp, int newpower, int oldpower) in pm_block() argument
5532 ASSERT(PM_IAM_LOCKING_DIP(dip)); in pm_block()
5533 new->pr_dip = dip; in pm_block()
5540 pm_enqueue_notify(PSC_PENDING_CHANGE, dip, comp, newpower, oldpower, in pm_block()
5542 PM_UNLOCK_DIP(dip); in pm_block()
5586 pm_register_watcher(int clone, dev_info_t *dip) in pm_register_watcher() argument
5597 pscc->pscc_dip = dip; in pm_register_watcher()
5599 if (dip) { in pm_register_watcher()
5717 pm_deregister_watcher(int clone, dev_info_t *dip) in pm_deregister_watcher() argument
5723 if (dip == NULL) { in pm_deregister_watcher()
5745 if ((dip && p->pscc_dip == dip) || in pm_deregister_watcher()
5746 (dip == NULL && clone == p->pscc_clone)) { in pm_deregister_watcher()
5769 ASSERT(dip == NULL || found); in pm_deregister_watcher()
5852 pm_set_dev_thr_walk(dev_info_t *dip, void *arg) in pm_set_dev_thr_walk() argument
5856 if (!PM_GET_PM_INFO(dip)) in pm_set_dev_thr_walk()
5858 pm_set_device_threshold(dip, thr, PMC_DEF_THRESH); in pm_set_dev_thr_walk()
5866 pm_current_threshold(dev_info_t *dip, int comp, int *threshp) in pm_current_threshold() argument
5868 if (comp < 0 || comp >= PM_NUMCMPTS(dip)) { in pm_current_threshold()
5871 *threshp = cur_threshold(dip, comp); in pm_current_threshold()
5884 pm_lock_power(dev_info_t *dip, int *circp) in pm_lock_power() argument
5890 power_req.req.ppm_lock_power_req.who = dip; in pm_lock_power()
5892 (void) pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, &power_req, &result); in pm_lock_power()
5900 pm_unlock_power(dev_info_t *dip, int circ) in pm_unlock_power() argument
5906 power_req.req.ppm_unlock_power_req.who = dip; in pm_unlock_power()
5908 (void) pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, &power_req, &result); in pm_unlock_power()
5919 pm_try_locking_power(dev_info_t *dip, int *circp) in pm_try_locking_power() argument
5925 power_req.req.ppm_lock_power_req.who = dip; in pm_try_locking_power()
5927 (void) pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, &power_req, &result); in pm_try_locking_power()
5955 pm_lock_power_single(dev_info_t *dip, int *circp) in pm_lock_power_single() argument
5960 if (ndi_devi_tryenter(dip, circp)) in pm_lock_power_single()
5972 ndi_devi_enter(dip, circp); in pm_lock_power_single()
5975 if (cur->pmlk_lender == DEVI(dip)->devi_busy_thread) { in pm_lock_power_single()
5976 ASSERT(cur->pmlk_dip == NULL || cur->pmlk_dip == dip); in pm_lock_power_single()
5977 cur->pmlk_dip = dip; in pm_lock_power_single()
5979 ndi_devi_enter(dip, circp); in pm_lock_power_single()
5991 pm_unlock_power_single(dev_info_t *dip, int circ) in pm_unlock_power_single() argument
5997 ndi_devi_exit(dip, circ); in pm_unlock_power_single()
6008 if (cur == NULL || cur->pmlk_dip != dip) in pm_unlock_power_single()
6010 ndi_devi_exit(dip, circ); in pm_unlock_power_single()
6019 pm_try_locking_power_single(dev_info_t *dip, int *circp) in pm_try_locking_power_single() argument
6021 return (ndi_devi_tryenter(dip, circp)); in pm_try_locking_power_single()
6072 pm_apply_recorded_thresh(dev_info_t *dip, pm_thresh_rec_t *rp) in pm_apply_recorded_thresh() argument
6076 int comps = PM_NUMCMPTS(dip); in pm_apply_recorded_thresh()
6082 PM_DEVICE(dip), (void *)rp, rp->ptr_physpath)) in pm_apply_recorded_thresh()
6083 PM_LOCK_DIP(dip); in pm_apply_recorded_thresh()
6084 if (!PM_GET_PM_INFO(dip) || PM_ISBC(dip) || !pm_valid_thresh(dip, rp)) { in pm_apply_recorded_thresh()
6086 pmf, PM_DEVICE(dip), (void*)PM_GET_PM_INFO(dip))) in pm_apply_recorded_thresh()
6088 pmf, PM_DEVICE(dip), PM_ISBC(dip))) in pm_apply_recorded_thresh()
6090 pmf, PM_DEVICE(dip), pm_valid_thresh(dip, rp))) in pm_apply_recorded_thresh()
6091 PM_UNLOCK_DIP(dip); in pm_apply_recorded_thresh()
6102 pmf, PM_DEVICE(dip), ep->pte_thresh[0])) in pm_apply_recorded_thresh()
6103 PM_UNLOCK_DIP(dip); in pm_apply_recorded_thresh()
6104 pm_set_device_threshold(dip, ep->pte_thresh[0], PMC_DEV_THRESH); in pm_apply_recorded_thresh()
6105 if (PM_SCANABLE(dip)) in pm_apply_recorded_thresh()
6106 pm_rescan(dip); in pm_apply_recorded_thresh()
6110 cp = PM_CP(dip, i); in pm_apply_recorded_thresh()
6113 "to %x\n", pmf, j, PM_DEVICE(dip), in pm_apply_recorded_thresh()
6119 DEVI(dip)->devi_pm_flags &= PMC_THRESH_NONE; in pm_apply_recorded_thresh()
6120 DEVI(dip)->devi_pm_flags |= PMC_COMP_THRESH; in pm_apply_recorded_thresh()
6121 PM_UNLOCK_DIP(dip); in pm_apply_recorded_thresh()
6123 if (PM_SCANABLE(dip)) in pm_apply_recorded_thresh()
6124 pm_rescan(dip); in pm_apply_recorded_thresh()
6132 pm_valid_thresh(dev_info_t *dip, pm_thresh_rec_t *rp) in pm_valid_thresh() argument
6139 if (!PM_GET_PM_INFO(dip) || PM_ISBC(dip)) { in pm_valid_thresh()
6154 if (rp->ptr_numcomps != (comps = PM_NUMCMPTS(dip))) { in pm_valid_thresh()
6156 pmf, PM_NUMCMPTS(dip), rp->ptr_numcomps, rp->ptr_physpath)) in pm_valid_thresh()
6161 cp = PM_CP(dip, i); in pm_valid_thresh()
6261 pm_discard_dep_walk(dev_info_t *dip, void *arg) in pm_discard_dep_walk() argument
6266 if (PM_GET_PM_INFO(dip) == NULL) in pm_discard_dep_walk()
6269 (void) ddi_pathname(dip, pathbuf); in pm_discard_dep_walk()
6276 pm_kept_walk(dev_info_t *dip, void *arg) in pm_kept_walk() argument
6282 (void) ddi_pathname(dip, pathbuf); in pm_kept_walk()
6290 pm_keeper_walk(dev_info_t *dip, void *arg) in pm_keeper_walk() argument
6296 (void) ddi_pathname(dip, pathbuf); in pm_keeper_walk()
6554 pm_forget_power_level(dev_info_t *dip) in pm_forget_power_level() argument
6556 dev_info_t *pdip = ddi_get_parent(dip); in pm_forget_power_level()
6559 if (!PM_ISBC(dip)) { in pm_forget_power_level()
6560 for (i = 0; i < PM_NUMCMPTS(dip); i++) in pm_forget_power_level()
6561 count += (PM_CURPOWER(dip, i) == 0); in pm_forget_power_level()
6569 if (DEVI(dip)->devi_pm_volpmd && in pm_forget_power_level()
6570 PM_CP(dip, 0)->pmc_cur_pwr == 0) in pm_forget_power_level()
6571 DEVI(dip)->devi_pm_volpmd = 0; in pm_forget_power_level()
6572 for (i = 0; i < PM_NUMCMPTS(dip); i++) in pm_forget_power_level()
6573 e_pm_set_cur_pwr(dip, PM_CP(dip, i), PM_LEVEL_UNKNOWN); in pm_forget_power_level()
6809 pm_init_child(dev_info_t *dip) in pm_init_child() argument
6813 ASSERT(ddi_binding_name(dip)); in pm_init_child()
6814 ASSERT(ddi_get_name_addr(dip)); in pm_init_child()
6815 pm_ppm_claim(dip); in pm_init_child()
6816 if (pm_ppm_claimed(dip)) { /* if ppm driver claims the node */ in pm_init_child()
6818 power_req.req.ppm_config_req.who = dip; in pm_init_child()
6819 ASSERT(PPM(dip) != NULL); in pm_init_child()
6820 return (pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, &power_req, in pm_init_child()
6826 power_req.req.ppm_config_req.who = dip; in pm_init_child()
6827 (void) pm_ctlops(NULL, dip, in pm_init_child()
6840 pm_pre_probe(dev_info_t *dip, pm_ppm_cookie_t *cp) in pm_pre_probe() argument
6846 cp->ppc_dip = dip; in pm_pre_probe()
6848 pm_ppm_claim(dip); in pm_pre_probe()
6849 if (pm_ppm_claimed(dip)) { /* if ppm driver claims the node */ in pm_pre_probe()
6851 power_req.req.ppm_config_req.who = dip; in pm_pre_probe()
6852 ASSERT(PPM(dip) != NULL); in pm_pre_probe()
6853 (void) pm_ctlops(PPM(dip), dip, in pm_pre_probe()
6855 cp->ppc_ppm = PPM(dip); in pm_pre_probe()
6860 power_req.req.ppm_config_req.who = dip; in pm_pre_probe()
6861 (void) pm_ctlops(NULL, dip, in pm_pre_probe()
6869 pm_pre_config(dev_info_t *dip, char *devnm) in pm_pre_config() argument
6874 if (MDI_VHCI(dip)) { in pm_pre_config()
6875 PMD(PMD_SET, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_pre_config()
6876 ret = mdi_power(dip, MDI_PM_PRE_CONFIG, NULL, devnm, 0); in pm_pre_config()
6878 } else if (!PM_GET_PM_INFO(dip)) in pm_pre_config()
6881 PMD(PMD_SET, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_pre_config()
6882 pm_hold_power(dip); in pm_pre_config()
6883 ret = pm_all_to_normal(dip, PM_CANBLOCK_BLOCK); in pm_pre_config()
6885 pm_rele_power(dip); in pm_pre_config()
6896 pm_pre_unconfig(dev_info_t *dip, int flags, int *held, char *devnm) in pm_pre_unconfig() argument
6901 if (MDI_VHCI(dip)) { in pm_pre_unconfig()
6903 PM_DEVICE(dip), flags)) in pm_pre_unconfig()
6904 ret = mdi_power(dip, MDI_PM_PRE_UNCONFIG, held, devnm, flags); in pm_pre_unconfig()
6906 } else if (!PM_GET_PM_INFO(dip)) in pm_pre_unconfig()
6909 PMD(PMD_SET, ("%s: %s@%s(%s#%d), flags=%x\n", pmf, PM_DEVICE(dip), in pm_pre_unconfig()
6916 if (!ddi_get_child(dip)) in pm_pre_unconfig()
6922 if ((flags & NDI_AUTODETACH) && !pm_all_at_normal(dip)) in pm_pre_unconfig()
6925 pm_hold_power(dip); in pm_pre_unconfig()
6927 ret = pm_all_to_normal(dip, PM_CANBLOCK_BLOCK); in pm_pre_unconfig()
6929 pm_rele_power(dip); in pm_pre_unconfig()
6940 pm_pre_attach(dev_info_t *dip, pm_ppm_cookie_t *cp, ddi_attach_cmd_t cmd) in pm_pre_attach() argument
6951 cp->ppc_ppm = PPM(dip); in pm_pre_attach()
6952 cp->ppc_dip = dip; in pm_pre_attach()
6963 power_req.req.ppm_config_req.who = dip; in pm_pre_attach()
6964 ASSERT(PPM(dip)); in pm_pre_attach()
6965 (void) pm_ctlops(cp->ppc_ppm, dip, DDI_CTLOPS_POWER, in pm_pre_attach()
6971 power_req.req.ppm_config_req.who = dip; in pm_pre_attach()
6972 (void) pm_ctlops(NULL, dip, in pm_pre_attach()
6978 pm_forget_power_level(dip); in pm_pre_attach()
7015 pm_uninit_child(dev_info_t *dip) in pm_uninit_child() argument
7019 ASSERT(ddi_binding_name(dip)); in pm_uninit_child()
7020 ASSERT(ddi_get_name_addr(dip)); in pm_uninit_child()
7021 pm_ppm_claim(dip); in pm_uninit_child()
7022 if (pm_ppm_claimed(dip)) { /* if ppm driver claims the node */ in pm_uninit_child()
7024 power_req.req.ppm_config_req.who = dip; in pm_uninit_child()
7025 ASSERT(PPM(dip)); in pm_uninit_child()
7026 return (pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, &power_req, in pm_uninit_child()
7032 power_req.req.ppm_config_req.who = dip; in pm_uninit_child()
7033 (void) pm_ctlops(NULL, dip, DDI_CTLOPS_POWER, &power_req, NULL); in pm_uninit_child()
7069 pm_post_config(dev_info_t *dip, char *devnm) in pm_post_config() argument
7073 if (MDI_VHCI(dip)) { in pm_post_config()
7074 PMD(PMD_SET, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_post_config()
7075 (void) mdi_power(dip, MDI_PM_POST_CONFIG, NULL, devnm, 0); in pm_post_config()
7077 } else if (!PM_GET_PM_INFO(dip)) in pm_post_config()
7080 PMD(PMD_SET, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_post_config()
7081 pm_rele_power(dip); in pm_post_config()
7085 pm_post_unconfig(dev_info_t *dip, int held, char *devnm) in pm_post_unconfig() argument
7089 if (MDI_VHCI(dip)) { in pm_post_unconfig()
7091 PM_DEVICE(dip), held)) in pm_post_unconfig()
7092 (void) mdi_power(dip, MDI_PM_POST_UNCONFIG, &held, devnm, 0); in pm_post_unconfig()
7094 } else if (!PM_GET_PM_INFO(dip)) in pm_post_unconfig()
7097 PMD(PMD_SET, ("%s: %s@%s(%s#%d), held = %d\n", pmf, PM_DEVICE(dip), in pm_post_unconfig()
7104 pm_rele_power(dip); in pm_post_unconfig()
7115 dev_info_t *dip; in pm_post_attach() local
7120 dip = cp->ppc_dip; in pm_post_attach()
7126 if (PM_GET_PM_INFO(dip) == NULL) in pm_post_attach()
7127 (void) pm_start(dip); in pm_post_attach()
7132 pm_stop(dip); in pm_post_attach()
7159 pm_pre_detach(dev_info_t *dip, ddi_detach_cmd_t cmd, pm_ppm_cookie_t *cp) in pm_pre_detach() argument
7165 cp->ppc_dip = dip; in pm_pre_detach()
7170 pm_detaching(dip); /* suspend pm while detaching */ in pm_pre_detach()
7171 if (pm_ppm_claimed(dip)) { /* if ppm driver claims node */ in pm_pre_detach()
7173 power_req.req.ppm_config_req.who = dip; in pm_pre_detach()
7174 ASSERT(PPM(dip)); in pm_pre_detach()
7175 (void) pm_ctlops(PPM(dip), dip, DDI_CTLOPS_POWER, in pm_pre_detach()
7177 cp->ppc_ppm = PPM(dip); in pm_pre_detach()
7182 power_req.req.ppm_config_req.who = dip; in pm_pre_detach()
7183 (void) pm_ctlops(NULL, dip, in pm_pre_detach()
7274 pm_record_invol(dev_info_t *dip) in pm_record_invol() argument
7278 int volpmd = (PM_NUMCMPTS(dip) > 0) && pm_all_components_off(dip); in pm_record_invol()
7281 (void) ddi_pathname(dip, pathbuf); in pm_record_invol()
7283 pm_record_invol_path(pathbuf, (DEVI(dip)->devi_pm_flags & in pm_record_invol()
7284 (PMC_NO_INVOL | PMC_CONSOLE_FB)), DEVI(dip)->devi_pm_noinvolpm, in pm_record_invol()
7285 DEVI(dip)->devi_pm_volpmd, volpmd, PM_MAJOR(dip)); in pm_record_invol()
7294 dip); in pm_record_invol()
7301 dev_info_t *dip = cp->ppc_dip; in pm_post_detach() local
7329 ((DEVI(dip)->devi_pm_flags & in pm_post_detach()
7331 DEVI(dip)->devi_pm_noinvolpm)) in pm_post_detach()
7332 pm_record_invol(dip); in pm_post_detach()
7333 DEVI(dip)->devi_pm_flags &= in pm_post_detach()
7341 if (PM_IS_CFB(dip)) { in pm_post_detach()
7349 pm_stop(dip); /* make it permanent */ in pm_post_detach()
7351 if (PM_IS_CFB(dip)) { in pm_post_detach()
7360 pm_detach_failed(dip); /* resume power management */ in pm_post_detach()
7384 pm_adjust_timestamps(dev_info_t *dip, void *arg) in pm_adjust_timestamps() argument
7388 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_adjust_timestamps()
7394 PM_LOCK_BUSY(dip); in pm_adjust_timestamps()
7395 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_adjust_timestamps()
7396 cp = PM_CP(dip, i); in pm_adjust_timestamps()
7400 PM_UNLOCK_BUSY(dip); in pm_adjust_timestamps()
7410 pm_noinvol_specd(dev_info_t *dip) in pm_noinvol_specd() argument
7418 if (DEVI(dip)->devi_pm_flags & PMC_NOINVOL_DONE) in pm_noinvol_specd()
7420 DEVI(dip)->devi_pm_flags |= PMC_NOINVOL_DONE; in pm_noinvol_specd()
7422 (void) ddi_pathname(dip, pathbuf); in pm_noinvol_specd()
7424 PM_LOCK_DIP(dip); in pm_noinvol_specd()
7425 DEVI(dip)->devi_pm_volpmd = 0; in pm_noinvol_specd()
7426 DEVI(dip)->devi_pm_noinvolpm = 0; in pm_noinvol_specd()
7438 PM_UNLOCK_DIP(dip); in pm_noinvol_specd()
7449 DEVI(dip)->devi_pm_flags |= ip->ni_flags; in pm_noinvol_specd()
7453 if (PM_IS_CFB(dip)) { in pm_noinvol_specd()
7455 cfb_dip = dip; in pm_noinvol_specd()
7457 "cfb_dip\n", pmf, PM_DEVICE(dip))) in pm_noinvol_specd()
7460 DEVI(dip)->devi_pm_noinvolpm = ip->ni_noinvolpm; in pm_noinvol_specd()
7461 ASSERT((DEVI(dip)->devi_pm_flags & in pm_noinvol_specd()
7463 DEVI(dip)->devi_pm_noinvolpm); in pm_noinvol_specd()
7464 DEVI(dip)->devi_pm_volpmd = ip->ni_volpmd; in pm_noinvol_specd()
7484 PM_UNLOCK_DIP(dip); in pm_noinvol_specd()
7494 wasvolpmd, pathbuf, dip); in pm_noinvol_specd()
7505 PM_UNLOCK_DIP(dip); in pm_noinvol_specd()
7509 pm_all_components_off(dev_info_t *dip) in pm_all_components_off() argument
7514 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_all_components_off()
7515 cp = PM_CP(dip, i); in pm_all_components_off()
7534 dev_info_t *dip; in pm_reattach_noinvol() local
7575 dip = e_ddi_hold_devi_by_path(path, 0); in pm_reattach_noinvol()
7576 if (dip == NULL) { in pm_reattach_noinvol()
7590 ddi_release_devi(dip); in pm_reattach_noinvol()
7624 dev_info_t *dip; in pm_cfb_setup() local
7667 if ((dip = fbdip) != NULL) { in pm_cfb_setup()
7669 PM_DEVICE(dip))) in pm_cfb_setup()
7675 cfb_dip = dip; in pm_cfb_setup()
7676 DEVI(dip)->devi_pm_flags |= (PMC_CONSOLE_FB | PMC_NO_INVOL); in pm_cfb_setup()
7678 PM_DEVICE(dip))) in pm_cfb_setup()
7680 if (!(PM_GET_PM_INFO(dip) != NULL && PM_NUMCMPTS(dip))) { in pm_cfb_setup()
7682 pmf, PM_DEVICE(dip))) in pm_cfb_setup()
7695 dip = pm_name_to_dip(devname, 0); in pm_cfb_setup()
7696 if (dip != NULL) { in pm_cfb_setup()
7702 0, 0, devname, dip); in pm_cfb_setup()
8000 pm_save_direct_lvl_walk(dev_info_t *dip, void *arg) in pm_save_direct_lvl_walk() argument
8005 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_save_direct_lvl_walk()
8010 if (PM_ISDIRECT(dip) && !PM_ISBC(dip)) { in pm_save_direct_lvl_walk()
8011 if (PM_NUMCMPTS(dip) > 2) { in pm_save_direct_lvl_walk()
8012 info->pmi_lp = kmem_alloc(PM_NUMCMPTS(dip) * in pm_save_direct_lvl_walk()
8019 for (i = 0; i < PM_NUMCMPTS(dip); i++) in pm_save_direct_lvl_walk()
8020 *ip++ = PM_CURPOWER(dip, i); in pm_save_direct_lvl_walk()
8027 pm_proceed(dip, PMP_RELEASE, -1, -1); in pm_save_direct_lvl_walk()
8048 pm_restore_direct_lvl_walk(dev_info_t *dip, void *arg) in pm_restore_direct_lvl_walk() argument
8055 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_restore_direct_lvl_walk()
8059 if (PM_ISDIRECT(dip) && !PM_ISBC(dip)) { in pm_restore_direct_lvl_walk()
8060 if ((nc = PM_NUMCMPTS(dip)) > 2) { in pm_restore_direct_lvl_walk()
8075 if (PM_CURPOWER(dip, i) == *ip) in pm_restore_direct_lvl_walk()
8077 if (pm_set_power(dip, i, *ip, PM_LEVEL_EXACT, in pm_restore_direct_lvl_walk()
8084 i, PM_NAME(dip), in pm_restore_direct_lvl_walk()
8085 PM_ADDR(dip), *ip); in pm_restore_direct_lvl_walk()
8088 "errno %d\n", pmf, PM_DEVICE(dip), i, in pm_restore_direct_lvl_walk()
8089 PM_CURPOWER(dip, i), *ip, result)) in pm_restore_direct_lvl_walk()
8234 dev_info_t *dip; in adjust_ancestors() local
8252 dip = pm_name_to_dip(pathbuf, 1); in adjust_ancestors()
8253 if (dip != NULL) { in adjust_ancestors()
8254 locked = PM_MAJOR(dip); in adjust_ancestors()
8257 path, dip); in adjust_ancestors()
8260 ddi_release_devi(dip); in adjust_ancestors()
8386 pm_is_cfb(dev_info_t *dip) in pm_is_cfb() argument
8388 return (dip == cfb_dip); in pm_is_cfb()
8409 pm_hold_power(dev_info_t *dip) in pm_hold_power() argument
8411 e_pm_hold_rele_power(dip, 1); in pm_hold_power()
8419 pm_rele_power(dev_info_t *dip) in pm_rele_power() argument
8421 e_pm_hold_rele_power(dip, -1); in pm_rele_power()
8429 pm_powerup(dev_info_t *dip) in pm_powerup() argument
8433 PMD(PMD_ALLNORM, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_powerup()
8439 if (!PM_GET_PM_INFO(dip)) { in pm_powerup()
8440 if (!DEVI_IS_ATTACHING(dip)) in pm_powerup()
8442 if (pm_start(dip) != DDI_SUCCESS) in pm_powerup()
8444 if (!PM_GET_PM_INFO(dip)) in pm_powerup()
8448 return (pm_all_to_normal(dip, PM_CANBLOCK_BLOCK)); in pm_powerup()
8452 pm_rescan_walk(dev_info_t *dip, void *arg) in pm_rescan_walk() argument
8456 if (!PM_GET_PM_INFO(dip) || PM_ISBC(dip)) in pm_rescan_walk()
8465 pm_scan_init(dip); in pm_rescan_walk()
8467 (void) pm_rescan(dip); in pm_rescan_walk()
8472 pm_get_next_descendent(dev_info_t *dip, dev_info_t *tdip) in pm_get_next_descendent() argument
8476 for (wdip = tdip; wdip != dip; wdip = pdip) { in pm_get_next_descendent()
8478 if (pdip == dip) in pm_get_next_descendent()
8485 pm_busop_bus_power(dev_info_t *dip, void *impl_arg, pm_bus_power_op_t op, in pm_busop_bus_power() argument
8502 PMD(PMD_SET, ("%s: %s@%s(%s#%d) %s\n", pmf, PM_DEVICE(dip), in pm_busop_bus_power()
8509 cdip = pm_get_next_descendent(dip, tdip); in pm_busop_bus_power()
8558 if (!e_pm_valid_info(dip, NULL) || in pm_busop_bus_power()
8559 !e_pm_valid_comp(dip, bpn->bpn_comp, &cp) || in pm_busop_bus_power()
8560 !e_pm_valid_power(dip, bpn->bpn_comp, bpn->bpn_level)) { in pm_busop_bus_power()
8562 pmf, PM_DEVICE(dip))) in pm_busop_bus_power()
8568 ASSERT(bpn->bpn_dip == dip); in pm_busop_bus_power()
8570 PM_DEVICE(dip))) in pm_busop_bus_power()
8571 new_bpc.bpc_dip = dip; in pm_busop_bus_power()
8573 new_bpc.bpc_path = ddi_pathname(dip, pathbuf); in pm_busop_bus_power()
8575 new_bpc.bpc_olevel = PM_CURPOWER(dip, bpn->bpn_comp); in pm_busop_bus_power()
8582 ret = pm_busop_set_power(dip, impl_arg, BUS_POWER_CHILD_PWRCHG, in pm_busop_bus_power()
8590 cdip = pm_get_next_descendent(dip, tdip); in pm_busop_bus_power()
8646 pm_busop_set_power(dev_info_t *dip, void *impl_arg, pm_bus_power_op_t op, in pm_busop_set_power() argument
8666 dev_info_t *pdip = ddi_get_parent(dip); in pm_busop_set_power()
8675 pm_component_t *cp = PM_CP(dip, comp); in pm_busop_set_power()
8681 PMD(PMD_SET, ("%s: %s@%s(%s#%d) %s\n", pmf, PM_DEVICE(dip), in pm_busop_set_power()
8704 PM_LOCK_DIP(dip); in pm_busop_set_power()
8705 while (PM_ISDIRECT(dip) && !pm_processes_stopped) { in pm_busop_set_power()
8707 ret = pm_busop_match_request(dip, bpc); in pm_busop_set_power()
8709 PM_LOCK_DIP(dip); in pm_busop_set_power()
8714 PM_UNLOCK_DIP(dip); in pm_busop_set_power()
8717 if (PM_ISBC(dip) && comp != 0 && nlevel != 0 && in pm_busop_set_power()
8719 int nrmpwr0 = pm_get_normal_power(dip, 0); in pm_busop_set_power()
8720 if (pm_set_power(dip, 0, nrmpwr0, direction, in pm_busop_set_power()
8728 "%s@%s(%s#%d)\n", pmf, PM_DEVICE(pdip), PM_DEVICE(dip))) in pm_busop_set_power()
8744 PM_LOCK_POWER(dip, &circ); in pm_busop_set_power()
8745 clevel = PM_CURPOWER(dip, comp); in pm_busop_set_power()
8752 if (nlevel > pm_get_normal_power(dip, comp)) { in pm_busop_set_power()
8760 "dir=%s\n", pmf, PM_DEVICE(dip), comp, bpc->bpc_olevel, nlevel, in pm_busop_set_power()
8775 if (clevel == nlevel && !PM_ISBC(dip)) { in pm_busop_set_power()
8781 } else if (PM_IS_CFB(dip) && (nlevel < clevel)) { in pm_busop_set_power()
8807 thresh = cur_threshold(dip, comp); in pm_busop_set_power()
8809 if (scan && ((PM_KUC(dip) != 0) || in pm_busop_set_power()
8811 ((idletime < thresh) && !PM_IS_PID(dip)))) { in pm_busop_set_power()
8813 if (DEVI(dip)->devi_pm_kidsupcnt != 0) in pm_busop_set_power()
8837 if (PM_IS_CFB(dip) && (comps_off_incr = in pm_busop_set_power()
8838 calc_cfb_comps_incr(dip, comp, clevel, nlevel)) > 0) { in pm_busop_set_power()
8845 update_comps_off(comps_off_incr, dip); in pm_busop_set_power()
8847 pmf, PM_DEVICE(dip), comp, clevel, nlevel, in pm_busop_set_power()
8851 if ((*iresp = power_dev(dip, in pm_busop_set_power()
8857 if (PM_CURPOWER(dip, comp) == 0) { in pm_busop_set_power()
8859 pdpchk.pdpc_dip = dip; in pm_busop_set_power()
8860 pdpchk.pdpc_par_involved = PM_WANTS_NOTIFICATION(dip); in pm_busop_set_power()
8861 ndi_devi_enter(dip, &circ_db); in pm_busop_set_power()
8862 for (cdip = ddi_get_child(dip); cdip != NULL; in pm_busop_set_power()
8869 ndi_devi_exit(dip, circ_db); in pm_busop_set_power()
8876 if (PM_IS_CFB(dip) && comps_off_incr < 0) { in pm_busop_set_power()
8877 update_comps_off(comps_off_incr, dip); in pm_busop_set_power()
8879 "cfb_comps_off->%d\n", pmf, PM_DEVICE(dip), in pm_busop_set_power()
8884 if (PM_ISBC(dip)) { in pm_busop_set_power()
8889 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_busop_set_power()
8891 if (PM_CURPOWER(dip, i)) { in pm_busop_set_power()
8900 if (PM_ISBC(dip)) { in pm_busop_set_power()
8905 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_busop_set_power()
8908 if (PM_CURPOWER(dip, i) > 0) { in pm_busop_set_power()
8921 (void) ddi_pathname(dip, pathbuf); in pm_busop_set_power()
8926 if ((PM_CURPOWER(dip, comp) == nlevel) && pm_watchers()) { in pm_busop_set_power()
8933 pm_enqueue_notify(PSC_HAS_CHANGED, dip, comp, nlevel, in pm_busop_set_power()
8952 pm_rescan(dip); in pm_busop_set_power()
8956 update_comps_off(-comps_off_incr, dip); in pm_busop_set_power()
8958 "cfb_comps_off->%d\n", pmf, PM_DEVICE(dip), in pm_busop_set_power()
8984 PM_UNLOCK_POWER(dip, circ); in pm_busop_set_power()
8987 PM_DEVICE(dip), ret)) in pm_busop_set_power()
8990 PM_UNLOCK_POWER(dip, circ); in pm_busop_set_power()
8997 (!PM_ISBC(dip) || comp == 0))) in pm_busop_set_power()
9004 nlevel == 0 && (!PM_ISBC(dip) || comp == 0)) in pm_busop_set_power()
9020 pm_busop_match_request(dev_info_t *dip, void *arg) in pm_busop_match_request() argument
9031 ASSERT(PM_IAM_LOCKING_DIP(dip)); in pm_busop_match_request()
9032 PM_LOCK_POWER(dip, &circ); in pm_busop_match_request()
9033 clevel = PM_CURPOWER(dip, comp); in pm_busop_match_request()
9035 pmf, PM_DEVICE(dip), comp, nlevel, clevel)) in pm_busop_match_request()
9038 PM_UNLOCK_POWER(dip, circ); in pm_busop_match_request()
9039 PM_UNLOCK_DIP(dip); in pm_busop_match_request()
9043 PM_UNLOCK_POWER(dip, circ); in pm_busop_match_request()
9044 PM_UNLOCK_DIP(dip); in pm_busop_match_request()
9048 PM_UNLOCK_POWER(dip, circ); in pm_busop_match_request()
9049 PM_UNLOCK_DIP(dip); in pm_busop_match_request()
9057 PM_UNLOCK_POWER(dip, circ); in pm_busop_match_request()
9060 switch (pm_block(dip, comp, nlevel, clevel)) { in pm_busop_match_request()
9076 pm_all_to_normal_nexus(dev_info_t *dip, pm_canblock_t canblock) in pm_all_to_normal_nexus() argument
9087 ASSERT(PM_GET_PM_INFO(dip)); in pm_all_to_normal_nexus()
9088 PMD(PMD_ALLNORM, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_all_to_normal_nexus()
9089 if (pm_get_norm_pwrs(dip, &normal, &size) != DDI_SUCCESS) { in pm_all_to_normal_nexus()
9093 ncomps = PM_NUMCMPTS(dip); in pm_all_to_normal_nexus()
9095 bpn.bpn_dip = dip; in pm_all_to_normal_nexus()
9101 ret = pm_busop_bus_power(dip, NULL, BUS_POWER_NEXUS_PWRUP, in pm_all_to_normal_nexus()
9105 "->%d failure result %d\n", pmf, PM_DEVICE(dip), in pm_all_to_normal_nexus()
9113 "full power\n", pmf, changefailed, PM_DEVICE(dip))) in pm_all_to_normal_nexus()
9142 pm_noinvol_update_node(dev_info_t *dip, pm_bp_noinvol_t *req) in pm_noinvol_update_node() argument
9146 PMD(PMD_NOINVOL, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_noinvol_update_node()
9150 "noinvol %d->%d\n", pmf, PM_DEVICE(dip), in pm_noinvol_update_node()
9151 DEVI(dip)->devi_pm_noinvolpm, in pm_noinvol_update_node()
9152 DEVI(dip)->devi_pm_noinvolpm - 1)) in pm_noinvol_update_node()
9153 ASSERT(DEVI(dip)->devi_pm_noinvolpm); in pm_noinvol_update_node()
9154 PM_LOCK_DIP(dip); in pm_noinvol_update_node()
9155 DEVI(dip)->devi_pm_noinvolpm--; in pm_noinvol_update_node()
9159 PM_DEVICE(dip), DEVI(dip)->devi_pm_volpmd, in pm_noinvol_update_node()
9160 DEVI(dip)->devi_pm_volpmd - 1)) in pm_noinvol_update_node()
9161 if (DEVI(dip)->devi_pm_volpmd) in pm_noinvol_update_node()
9162 DEVI(dip)->devi_pm_volpmd--; in pm_noinvol_update_node()
9164 PM_UNLOCK_DIP(dip); in pm_noinvol_update_node()
9169 "noinvolpm %d->%d\n", pmf, PM_DEVICE(dip), in pm_noinvol_update_node()
9170 DEVI(dip)->devi_pm_noinvolpm, in pm_noinvol_update_node()
9171 DEVI(dip)->devi_pm_noinvolpm + 1)) in pm_noinvol_update_node()
9172 PM_LOCK_DIP(dip); in pm_noinvol_update_node()
9173 DEVI(dip)->devi_pm_noinvolpm++; in pm_noinvol_update_node()
9177 PM_DEVICE(dip), DEVI(dip)->devi_pm_volpmd, in pm_noinvol_update_node()
9178 DEVI(dip)->devi_pm_volpmd + 1)) in pm_noinvol_update_node()
9179 DEVI(dip)->devi_pm_volpmd++; in pm_noinvol_update_node()
9181 PM_UNLOCK_DIP(dip); in pm_noinvol_update_node()
9186 "noinvol %d->%d\n", pmf, PM_DEVICE(dip), in pm_noinvol_update_node()
9187 DEVI(dip)->devi_pm_noinvolpm, in pm_noinvol_update_node()
9188 DEVI(dip)->devi_pm_noinvolpm - 1)) in pm_noinvol_update_node()
9189 ASSERT(DEVI(dip)->devi_pm_noinvolpm); in pm_noinvol_update_node()
9190 PM_LOCK_DIP(dip); in pm_noinvol_update_node()
9191 DEVI(dip)->devi_pm_noinvolpm--; in pm_noinvol_update_node()
9195 "volpmd %d->%d\n", pmf, PM_DEVICE(dip), in pm_noinvol_update_node()
9196 DEVI(dip)->devi_pm_volpmd, in pm_noinvol_update_node()
9197 DEVI(dip)->devi_pm_volpmd - 1)) in pm_noinvol_update_node()
9203 if (DEVI(dip)->devi_pm_volpmd) in pm_noinvol_update_node()
9204 DEVI(dip)->devi_pm_volpmd--; in pm_noinvol_update_node()
9206 PM_UNLOCK_DIP(dip); in pm_noinvol_update_node()
9212 pmf, PM_DEVICE(dip), DEVI(dip)->devi_pm_noinvolpm, in pm_noinvol_update_node()
9213 DEVI(dip)->devi_pm_noinvolpm + 1)) in pm_noinvol_update_node()
9214 PM_LOCK_DIP(dip); in pm_noinvol_update_node()
9215 DEVI(dip)->devi_pm_noinvolpm++; in pm_noinvol_update_node()
9216 PM_UNLOCK_DIP(dip); in pm_noinvol_update_node()
9222 pmf, PM_DEVICE(dip), in pm_noinvol_update_node()
9223 DEVI(dip)->devi_pm_volpmd, DEVI(dip)->devi_pm_volpmd - in pm_noinvol_update_node()
9225 PM_LOCK_DIP(dip); in pm_noinvol_update_node()
9226 DEVI(dip)->devi_pm_volpmd -= req->bpni_volpmd; in pm_noinvol_update_node()
9227 PM_UNLOCK_DIP(dip); in pm_noinvol_update_node()
9238 pm_desc_pwrchk_walk(dev_info_t *dip, void *arg) in pm_desc_pwrchk_walk() argument
9242 pm_info_t *info = PM_GET_PM_INFO(dip); in pm_desc_pwrchk_walk()
9250 PMD(PMD_SET, ("%s: %s@%s(%s#%d)\n", pmf, PM_DEVICE(dip))) in pm_desc_pwrchk_walk()
9251 for (i = 0; i < PM_NUMCMPTS(dip); i++) { in pm_desc_pwrchk_walk()
9253 if ((curpwr = PM_CURPOWER(dip, i)) == 0) in pm_desc_pwrchk_walk()
9260 PM_DEVICE(pdpchk->pdpc_dip), PM_DEVICE(dip), i, curpwr)) in pm_desc_pwrchk_walk()
9263 PM_DEVICE(dip), PM_DEVICE(pdpchk->pdpc_dip)); in pm_desc_pwrchk_walk()