Lines Matching refs:ph

305 	phy_handle_t	*ph;  in mii_set_pauseable()  local
308 ph = mh->m_phy; in mii_set_pauseable()
309 ph->phy_cap_pause = mh->m_cap_pause = pauseable; in mii_set_pauseable()
310 ph->phy_cap_asmpause = mh->m_cap_asmpause = asymetric; in mii_set_pauseable()
439 phy_handle_t *ph = mh->m_phy; in mii_get_speed() local
441 return (ph->phy_speed); in mii_get_speed()
447 phy_handle_t *ph = mh->m_phy; in mii_get_duplex() local
449 return (ph->phy_duplex); in mii_get_duplex()
455 phy_handle_t *ph = mh->m_phy; in mii_get_state() local
457 return (ph->phy_link); in mii_get_state()
463 phy_handle_t *ph = mh->m_phy; in mii_get_flowctrl() local
465 return (ph->phy_flowctrl); in mii_get_flowctrl()
471 phy_handle_t *ph = mh->m_phy; in mii_get_loopmodes() local
480 if (ph->phy_cap_1000_fdx || in mii_get_loopmodes()
481 ph->phy_cap_100_fdx || in mii_get_loopmodes()
482 ph->phy_cap_10_fdx) { in mii_get_loopmodes()
491 if (ph->phy_cap_1000_fdx) { in mii_get_loopmodes()
499 if (ph->phy_cap_100_fdx) { in mii_get_loopmodes()
507 if (ph->phy_cap_10_fdx) { in mii_get_loopmodes()
525 phy_handle_t *ph = mh->m_phy; in mii_get_loopback() local
527 return (ph->phy_loopback); in mii_get_loopback()
533 phy_handle_t *ph; in mii_set_loopback() local
537 ph = mh->m_phy; in mii_set_loopback()
539 if ((!mh->m_started) || (!ph->phy_present) || in mii_set_loopback()
544 ph->phy_loopback = loop; in mii_set_loopback()
558 phy_handle_t *ph = mh->m_phy; in mii_get_id() local
560 return (ph->phy_id); in mii_get_id()
655 phy_handle_t *ph; in mii_m_getprop() local
665 ph = mh->m_phy; in mii_m_getprop()
669 *(uint8_t *)val = ph->phy_adv_##VAR; \ in mii_m_getprop()
673 *(uint8_t *)val = ph->phy_en_##VAR; \ in mii_m_getprop()
679 bcopy(&ph->phy_duplex, val, sizeof (link_duplex_t)); in mii_m_getprop()
683 uint64_t speed = ph->phy_speed * 1000000ull; in mii_m_getprop()
690 *(uint8_t *)val = ph->phy_adv_aneg; in mii_m_getprop()
695 bcopy(&ph->phy_flowctrl, val, sizeof (link_flowctrl_t)); in mii_m_getprop()
720 phy_handle_t *ph; in mii_m_propinfo() local
726 ph = mh->m_phy; in mii_m_propinfo()
735 mac_prop_info_set_default_uint8(prh, ph->phy_cap_aneg); in mii_m_propinfo()
741 mac_prop_info_set_default_uint8(prh, ph->phy_cap_##VAR); \ in mii_m_propinfo()
745 if (!ph->phy_cap_##VAR) \ in mii_m_propinfo()
747 mac_prop_info_set_default_uint8(prh, ph->phy_cap_##VAR); \ in mii_m_propinfo()
766 phy_handle_t *ph; in mii_m_setprop() local
779 ph = mh->m_phy; in mii_m_setprop()
782 if (ph->phy_loopback != PHY_LB_NONE) { in mii_m_setprop()
799 capp = &ph->phy_cap_1000_fdx; in mii_m_setprop()
800 advp = &ph->phy_en_1000_fdx; in mii_m_setprop()
804 capp = &ph->phy_cap_1000_hdx; in mii_m_setprop()
805 advp = &ph->phy_en_1000_hdx; in mii_m_setprop()
809 capp = &ph->phy_cap_100_fdx; in mii_m_setprop()
810 advp = &ph->phy_en_100_fdx; in mii_m_setprop()
814 capp = &ph->phy_cap_100_hdx; in mii_m_setprop()
815 advp = &ph->phy_en_100_hdx; in mii_m_setprop()
819 capp = &ph->phy_cap_100_t4; in mii_m_setprop()
820 advp = &ph->phy_en_100_t4; in mii_m_setprop()
824 capp = &ph->phy_cap_10_fdx; in mii_m_setprop()
825 advp = &ph->phy_en_10_fdx; in mii_m_setprop()
829 capp = &ph->phy_cap_10_hdx; in mii_m_setprop()
830 advp = &ph->phy_en_10_hdx; in mii_m_setprop()
834 capp = &ph->phy_cap_aneg; in mii_m_setprop()
835 advp = &ph->phy_en_aneg; in mii_m_setprop()
845 chg = fc == ph->phy_en_flowctrl ? B_FALSE : B_TRUE; in mii_m_setprop()
848 ph->phy_en_pause = B_FALSE; in mii_m_setprop()
849 ph->phy_en_asmpause = B_FALSE; in mii_m_setprop()
850 ph->phy_en_flowctrl = fc; in mii_m_setprop()
861 if (ph->phy_cap_pause) { in mii_m_setprop()
862 ph->phy_en_pause = B_TRUE; in mii_m_setprop()
863 ph->phy_en_asmpause = B_TRUE; in mii_m_setprop()
864 ph->phy_en_flowctrl = fc; in mii_m_setprop()
875 if (ph->phy_cap_asmpause) { in mii_m_setprop()
876 ph->phy_en_pause = B_FALSE; in mii_m_setprop()
877 ph->phy_en_flowctrl = fc; in mii_m_setprop()
878 ph->phy_en_asmpause = B_TRUE; in mii_m_setprop()
922 phy_handle_t *ph; in mii_m_getstat() local
927 ph = mh->m_phy; in mii_m_getstat()
931 *val = ph->phy_speed * 1000000ull; in mii_m_getstat()
934 *val = ph->phy_duplex; in mii_m_getstat()
937 *val = !!(ph->phy_adv_aneg && ph->phy_lp_aneg); in mii_m_getstat()
940 *val = ph->phy_id; in mii_m_getstat()
943 *val = ph->phy_type; in mii_m_getstat()
946 *val = ph->phy_addr; in mii_m_getstat()
949 *val = ph->phy_adv_asmpause && ph->phy_lp_asmpause && in mii_m_getstat()
950 ph->phy_adv_pause != ph->phy_lp_pause; in mii_m_getstat()
953 *val = (ph->phy_flowctrl == LINK_FLOWCTRL_BI) || in mii_m_getstat()
954 (ph->phy_flowctrl == LINK_FLOWCTRL_RX); in mii_m_getstat()
957 *val = ph->phy_cap_1000_fdx; in mii_m_getstat()
960 *val = ph->phy_cap_1000_hdx; in mii_m_getstat()
963 *val = ph->phy_cap_100_fdx; in mii_m_getstat()
966 *val = ph->phy_cap_100_hdx; in mii_m_getstat()
969 *val = ph->phy_cap_10_fdx; in mii_m_getstat()
972 *val = ph->phy_cap_10_hdx; in mii_m_getstat()
975 *val = ph->phy_cap_100_t4; in mii_m_getstat()
978 *val = ph->phy_cap_aneg; in mii_m_getstat()
981 *val = ph->phy_cap_pause; in mii_m_getstat()
984 *val = ph->phy_cap_asmpause; in mii_m_getstat()
988 *val = ph->phy_lp_1000_fdx; in mii_m_getstat()
991 *val = ph->phy_lp_1000_hdx; in mii_m_getstat()
994 *val = ph->phy_lp_100_fdx; in mii_m_getstat()
997 *val = ph->phy_lp_100_hdx; in mii_m_getstat()
1000 *val = ph->phy_lp_10_fdx; in mii_m_getstat()
1003 *val = ph->phy_lp_10_hdx; in mii_m_getstat()
1006 *val = ph->phy_lp_100_t4; in mii_m_getstat()
1009 *val = ph->phy_lp_aneg; in mii_m_getstat()
1012 *val = ph->phy_lp_pause; in mii_m_getstat()
1015 *val = ph->phy_lp_asmpause; in mii_m_getstat()
1019 *val = ph->phy_adv_1000_fdx; in mii_m_getstat()
1022 *val = ph->phy_adv_1000_hdx; in mii_m_getstat()
1025 *val = ph->phy_adv_100_fdx; in mii_m_getstat()
1028 *val = ph->phy_adv_100_hdx; in mii_m_getstat()
1031 *val = ph->phy_adv_10_fdx; in mii_m_getstat()
1034 *val = ph->phy_adv_10_hdx; in mii_m_getstat()
1037 *val = ph->phy_adv_100_t4; in mii_m_getstat()
1040 *val = ph->phy_adv_aneg; in mii_m_getstat()
1043 *val = ph->phy_adv_pause; in mii_m_getstat()
1046 *val = ph->phy_adv_asmpause; in mii_m_getstat()
1063 phy_read(phy_handle_t *ph, uint8_t reg) in phy_read() argument
1065 mii_handle_t mh = ph->phy_mii; in phy_read()
1067 return ((*mh->m_ops.mii_read)(mh->m_private, ph->phy_addr, reg)); in phy_read()
1071 phy_write(phy_handle_t *ph, uint8_t reg, uint16_t val) in phy_write() argument
1073 mii_handle_t mh = ph->phy_mii; in phy_write()
1075 (*mh->m_ops.mii_write)(mh->m_private, ph->phy_addr, reg, val); in phy_write()
1079 phy_reset(phy_handle_t *ph) in phy_reset() argument
1081 ASSERT(mutex_owned(&ph->phy_mii->m_lock)); in phy_reset()
1086 PHY_CLR(ph, MII_CONTROL, in phy_reset()
1092 PHY_SET(ph, MII_CONTROL, MII_CONTROL_RESET); in phy_reset()
1111 if ((phy_read(ph, MII_CONTROL) & MII_CONTROL_RESET) == 0) { in phy_reset()
1122 phy_stop(phy_handle_t *ph) in phy_stop() argument
1124 phy_write(ph, MII_CONTROL, MII_CONTROL_ISOLATE); in phy_stop()
1130 phy_loop(phy_handle_t *ph) in phy_loop() argument
1134 ASSERT(mutex_owned(&ph->phy_mii->m_lock)); in phy_loop()
1139 ph->phy_adv_aneg = B_FALSE; in phy_loop()
1140 ph->phy_adv_1000_fdx = B_FALSE; in phy_loop()
1141 ph->phy_adv_1000_hdx = B_FALSE; in phy_loop()
1142 ph->phy_adv_100_fdx = B_FALSE; in phy_loop()
1143 ph->phy_adv_100_t4 = B_FALSE; in phy_loop()
1144 ph->phy_adv_100_hdx = B_FALSE; in phy_loop()
1145 ph->phy_adv_10_fdx = B_FALSE; in phy_loop()
1146 ph->phy_adv_10_hdx = B_FALSE; in phy_loop()
1147 ph->phy_adv_pause = B_FALSE; in phy_loop()
1148 ph->phy_adv_asmpause = B_FALSE; in phy_loop()
1153 switch (ph->phy_loopback) { in phy_loop()
1161 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_loop()
1162 if (ph->phy_cap_1000_fdx) { in phy_loop()
1164 ph->phy_speed = 1000; in phy_loop()
1165 } else if (ph->phy_cap_100_fdx) { in phy_loop()
1167 ph->phy_speed = 100; in phy_loop()
1168 } else if (ph->phy_cap_10_fdx) { in phy_loop()
1170 ph->phy_speed = 10; in phy_loop()
1176 ph->phy_speed = 10; in phy_loop()
1177 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_loop()
1182 ph->phy_speed = 100; in phy_loop()
1183 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_loop()
1188 ph->phy_speed = 1000; in phy_loop()
1189 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_loop()
1193 ph->phy_link = LINK_STATE_UP; /* force up for loopback */ in phy_loop()
1194 ph->phy_flowctrl = LINK_FLOWCTRL_NONE; in phy_loop()
1196 switch (ph->phy_type) { in phy_loop()
1200 phy_write(ph, MII_MSCONTROL, gtcr); in phy_loop()
1204 phy_write(ph, MII_CONTROL, bmcr); in phy_loop()
1210 phy_start(phy_handle_t *ph) in phy_start() argument
1213 ASSERT(mutex_owned(&ph->phy_mii->m_lock)); in phy_start()
1215 ASSERT(ph->phy_loopback == PHY_LB_NONE); in phy_start()
1221 ph->phy_adv_aneg = ph->phy_en_aneg; in phy_start()
1222 ph->phy_adv_1000_fdx = ph->phy_en_1000_fdx; in phy_start()
1223 ph->phy_adv_1000_hdx = ph->phy_en_1000_hdx; in phy_start()
1224 ph->phy_adv_100_fdx = ph->phy_en_100_fdx; in phy_start()
1225 ph->phy_adv_100_t4 = ph->phy_en_100_t4; in phy_start()
1226 ph->phy_adv_100_hdx = ph->phy_en_100_hdx; in phy_start()
1227 ph->phy_adv_10_fdx = ph->phy_en_10_fdx; in phy_start()
1228 ph->phy_adv_10_hdx = ph->phy_en_10_hdx; in phy_start()
1229 ph->phy_adv_pause = ph->phy_en_pause; in phy_start()
1230 ph->phy_adv_asmpause = ph->phy_en_asmpause; in phy_start()
1236 if (!ph->phy_cap_##CAP) \ in phy_start()
1237 ph->phy_adv_##CAP = 0 in phy_start()
1255 if ((!ph->phy_adv_1000_fdx) && in phy_start()
1256 (!ph->phy_adv_1000_hdx) && in phy_start()
1257 (!ph->phy_adv_100_t4) && in phy_start()
1258 (!ph->phy_adv_100_fdx) && in phy_start()
1259 (!ph->phy_adv_100_hdx) && in phy_start()
1260 (!ph->phy_adv_10_fdx) && in phy_start()
1261 (!ph->phy_adv_10_hdx)) { in phy_start()
1263 phy_warn(ph, in phy_start()
1266 PHY_SET(ph, MII_CONTROL, MII_CONTROL_PWRDN); in phy_start()
1268 ph->phy_link = LINK_STATE_DOWN; in phy_start()
1275 if (ph->phy_adv_aneg) { in phy_start()
1279 if ((ph->phy_adv_1000_fdx) || (ph->phy_adv_1000_hdx)) { in phy_start()
1282 } else if (ph->phy_adv_100_fdx || ph->phy_adv_100_hdx || in phy_start()
1283 ph->phy_adv_100_t4) { in phy_start()
1287 if (ph->phy_adv_1000_fdx || ph->phy_adv_100_fdx || ph->phy_adv_10_fdx) { in phy_start()
1291 if (ph->phy_type == XCVR_1000X) { in phy_start()
1294 if (ph->phy_adv_1000_fdx) { in phy_start()
1297 if (ph->phy_adv_1000_hdx) { in phy_start()
1300 if (ph->phy_adv_pause) { in phy_start()
1303 if (ph->phy_adv_asmpause) { in phy_start()
1307 } else if (ph->phy_type == XCVR_100T2) { in phy_start()
1310 if (ph->phy_adv_100_fdx) { in phy_start()
1313 if (ph->phy_adv_100_hdx) { in phy_start()
1321 if (ph->phy_adv_1000_fdx) { in phy_start()
1324 if (ph->phy_adv_1000_hdx) { in phy_start()
1327 if (ph->phy_adv_100_fdx) { in phy_start()
1330 if (ph->phy_adv_100_hdx) { in phy_start()
1333 if (ph->phy_adv_100_t4) { in phy_start()
1336 if (ph->phy_adv_10_fdx) { in phy_start()
1339 if (ph->phy_adv_10_hdx) { in phy_start()
1342 if (ph->phy_adv_pause) { in phy_start()
1345 if (ph->phy_adv_asmpause) { in phy_start()
1350 ph->phy_link = LINK_STATE_DOWN; in phy_start()
1351 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in phy_start()
1352 ph->phy_speed = 0; in phy_start()
1354 phy_write(ph, MII_AN_ADVERT, anar); in phy_start()
1355 phy_write(ph, MII_CONTROL, bmcr & ~(MII_CONTROL_RSAN)); in phy_start()
1357 switch (ph->phy_type) { in phy_start()
1361 phy_write(ph, MII_MSCONTROL, gtcr); in phy_start()
1368 phy_write(ph, MII_CONTROL, bmcr); in phy_start()
1375 phy_check(phy_handle_t *ph) in phy_check() argument
1380 ASSERT(mutex_owned(&ph->phy_mii->m_lock)); in phy_check()
1383 status = phy_read(ph, MII_STATUS); in phy_check()
1384 control = phy_read(ph, MII_CONTROL); in phy_check()
1387 lpar = phy_read(ph, MII_AN_LPABLE); in phy_check()
1388 anexp = phy_read(ph, MII_AN_EXPANSION); in phy_check()
1399 if ((status != phy_read(ph, MII_STATUS)) && debounces) { in phy_check()
1410 ph->phy_speed = 0; in phy_check()
1411 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in phy_check()
1412 ph->phy_link = LINK_STATE_UNKNOWN; in phy_check()
1413 ph->phy_present = B_FALSE; in phy_check()
1418 if ((ph->phy_loopback != PHY_LB_INT_PHY) && in phy_check()
1420 ph->phy_speed = 0; in phy_check()
1421 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in phy_check()
1422 ph->phy_link = LINK_STATE_DOWN; in phy_check()
1426 ph->phy_link = LINK_STATE_UP; in phy_check()
1430 ph->phy_lp_aneg = B_FALSE; in phy_check()
1431 ph->phy_lp_10_hdx = B_FALSE; in phy_check()
1432 ph->phy_lp_10_fdx = B_FALSE; in phy_check()
1433 ph->phy_lp_100_t4 = B_FALSE; in phy_check()
1434 ph->phy_lp_100_hdx = B_FALSE; in phy_check()
1435 ph->phy_lp_100_fdx = B_FALSE; in phy_check()
1436 ph->phy_lp_1000_hdx = B_FALSE; in phy_check()
1437 ph->phy_lp_1000_fdx = B_FALSE; in phy_check()
1445 ph->phy_speed = 1000; in phy_check()
1447 ph->phy_speed = 100; in phy_check()
1449 ph->phy_speed = 10; in phy_check()
1451 ph->phy_duplex = control & MII_CONTROL_FDUPLEX ? in phy_check()
1457 if (ph->phy_type == XCVR_1000X) { in phy_check()
1459 ph->phy_lp_10_hdx = B_FALSE; in phy_check()
1460 ph->phy_lp_10_fdx = B_FALSE; in phy_check()
1461 ph->phy_lp_100_t4 = B_FALSE; in phy_check()
1462 ph->phy_lp_100_hdx = B_FALSE; in phy_check()
1463 ph->phy_lp_100_fdx = B_FALSE; in phy_check()
1466 ph->phy_lp_aneg = B_TRUE; in phy_check()
1467 ph->phy_lp_1000_fdx = !!(lpar & MII_ABILITY_X_FD); in phy_check()
1468 ph->phy_lp_1000_hdx = !!(lpar & MII_ABILITY_X_HD); in phy_check()
1469 ph->phy_lp_pause = !!(lpar & MII_ABILITY_X_PAUSE); in phy_check()
1470 ph->phy_lp_asmpause = !!(lpar & MII_ABILITY_X_ASMPAUSE); in phy_check()
1472 } else if (ph->phy_type == XCVR_100T2) { in phy_check()
1473 ph->phy_lp_10_hdx = B_FALSE; in phy_check()
1474 ph->phy_lp_10_fdx = B_FALSE; in phy_check()
1475 ph->phy_lp_100_t4 = B_FALSE; in phy_check()
1476 ph->phy_lp_1000_hdx = B_FALSE; in phy_check()
1477 ph->phy_lp_1000_fdx = B_FALSE; in phy_check()
1478 ph->phy_lp_pause = B_FALSE; in phy_check()
1479 ph->phy_lp_asmpause = B_FALSE; in phy_check()
1482 ph->phy_lp_aneg = B_TRUE; in phy_check()
1483 ph->phy_lp_100_fdx = !!(lpar & MII_ABILITY_T2_FD); in phy_check()
1484 ph->phy_lp_100_hdx = !!(lpar & MII_ABILITY_T2_HD); in phy_check()
1497 phy_warn(ph, "Parallel detection fault!"); in phy_check()
1499 ph->phy_lp_10_hdx = B_FALSE; in phy_check()
1500 ph->phy_lp_10_fdx = B_FALSE; in phy_check()
1501 ph->phy_lp_100_t4 = B_FALSE; in phy_check()
1502 ph->phy_lp_100_hdx = B_FALSE; in phy_check()
1503 ph->phy_lp_100_fdx = B_FALSE; in phy_check()
1504 ph->phy_lp_1000_hdx = B_FALSE; in phy_check()
1505 ph->phy_lp_1000_fdx = B_FALSE; in phy_check()
1506 ph->phy_lp_pause = B_FALSE; in phy_check()
1507 ph->phy_lp_asmpause = B_FALSE; in phy_check()
1508 ph->phy_speed = 0; in phy_check()
1509 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in phy_check()
1513 ph->phy_lp_aneg = !!(anexp & MII_AN_EXP_LPCANAN); in phy_check()
1522 if ((ph->phy_type == XCVR_1000T) & in phy_check()
1526 msstat = phy_read(ph, MII_MSSTATUS); in phy_check()
1528 ph->phy_lp_1000_hdx = in phy_check()
1531 ph->phy_lp_1000_fdx = in phy_check()
1535 ph->phy_lp_100_fdx = !!(lpar & MII_ABILITY_100BASE_TX_FD); in phy_check()
1536 ph->phy_lp_100_hdx = !!(lpar & MII_ABILITY_100BASE_TX); in phy_check()
1537 ph->phy_lp_100_t4 = !!(lpar & MII_ABILITY_100BASE_T4); in phy_check()
1538 ph->phy_lp_10_fdx = !!(lpar & MII_ABILITY_10BASE_T_FD); in phy_check()
1539 ph->phy_lp_10_hdx = !!(lpar & MII_ABILITY_10BASE_T); in phy_check()
1540 ph->phy_lp_pause = !!(lpar & MII_ABILITY_PAUSE); in phy_check()
1541 ph->phy_lp_asmpause = !!(lpar & MII_ABILITY_ASMPAUSE); in phy_check()
1545 if ((ph->phy_en_flowctrl == LINK_FLOWCTRL_BI) && in phy_check()
1546 (ph->phy_lp_pause)) { in phy_check()
1547 ph->phy_flowctrl = LINK_FLOWCTRL_BI; in phy_check()
1548 } else if ((ph->phy_en_flowctrl == LINK_FLOWCTRL_RX) && in phy_check()
1549 (ph->phy_lp_pause || ph->phy_lp_asmpause)) { in phy_check()
1550 ph->phy_flowctrl = LINK_FLOWCTRL_RX; in phy_check()
1551 } else if ((ph->phy_en_flowctrl == LINK_FLOWCTRL_TX) && in phy_check()
1552 (ph->phy_lp_pause)) { in phy_check()
1553 ph->phy_flowctrl = LINK_FLOWCTRL_TX; in phy_check()
1555 ph->phy_flowctrl = LINK_FLOWCTRL_NONE; in phy_check()
1558 if (ph->phy_adv_1000_fdx && ph->phy_lp_1000_fdx) { in phy_check()
1559 ph->phy_speed = 1000; in phy_check()
1560 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_check()
1562 } else if (ph->phy_adv_1000_hdx && ph->phy_lp_1000_hdx) { in phy_check()
1563 ph->phy_speed = 1000; in phy_check()
1564 ph->phy_duplex = LINK_DUPLEX_HALF; in phy_check()
1566 } else if (ph->phy_adv_100_fdx && ph->phy_lp_100_fdx) { in phy_check()
1567 ph->phy_speed = 100; in phy_check()
1568 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_check()
1570 } else if (ph->phy_adv_100_t4 && ph->phy_lp_100_t4) { in phy_check()
1571 ph->phy_speed = 100; in phy_check()
1572 ph->phy_duplex = LINK_DUPLEX_HALF; in phy_check()
1574 } else if (ph->phy_adv_100_hdx && ph->phy_lp_100_hdx) { in phy_check()
1575 ph->phy_speed = 100; in phy_check()
1576 ph->phy_duplex = LINK_DUPLEX_HALF; in phy_check()
1578 } else if (ph->phy_adv_10_fdx && ph->phy_lp_10_fdx) { in phy_check()
1579 ph->phy_speed = 10; in phy_check()
1580 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_check()
1582 } else if (ph->phy_adv_10_hdx && ph->phy_lp_10_hdx) { in phy_check()
1583 ph->phy_speed = 10; in phy_check()
1584 ph->phy_duplex = LINK_DUPLEX_HALF; in phy_check()
1588 phy_warn(ph, "No common abilities."); in phy_check()
1590 ph->phy_speed = 0; in phy_check()
1591 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in phy_check()
1598 phy_get_prop(phy_handle_t *ph, char *prop, int dflt) in phy_get_prop() argument
1600 mii_handle_t mh = ph->phy_mii; in phy_get_prop()
1606 phy_get_name(phy_handle_t *ph) in phy_get_name() argument
1608 mii_handle_t mh = ph->phy_mii; in phy_get_name()
1614 phy_get_driver(phy_handle_t *ph) in phy_get_driver() argument
1616 mii_handle_t mh = ph->phy_mii; in phy_get_driver()
1622 phy_warn(phy_handle_t *ph, const char *fmt, ...) in phy_warn() argument
1627 (void) snprintf(buf, sizeof (buf), "%s: %s", phy_get_name(ph), fmt); in phy_warn()
1647 _mii_probe_phy(phy_handle_t *ph) in _mii_probe_phy() argument
1651 mii_handle_t mh = ph->phy_mii; in _mii_probe_phy()
1663 ph->phy_id = 0; in _mii_probe_phy()
1664 ph->phy_model = "PHY"; in _mii_probe_phy()
1665 ph->phy_vendor = "Unknown Vendor"; in _mii_probe_phy()
1668 bmsr = phy_read(ph, MII_STATUS); in _mii_probe_phy()
1669 bmsr = phy_read(ph, MII_STATUS); in _mii_probe_phy()
1671 ph->phy_present = B_FALSE; in _mii_probe_phy()
1676 extsr = phy_read(ph, MII_EXTSTATUS); in _mii_probe_phy()
1681 ph->phy_present = B_TRUE; in _mii_probe_phy()
1682 ph->phy_id = ((uint32_t)phy_read(ph, MII_PHYIDH) << 16) | in _mii_probe_phy()
1683 phy_read(ph, MII_PHYIDL); in _mii_probe_phy()
1686 ph->phy_reset = phy_reset; in _mii_probe_phy()
1687 ph->phy_start = phy_start; in _mii_probe_phy()
1688 ph->phy_stop = phy_stop; in _mii_probe_phy()
1689 ph->phy_check = phy_check; in _mii_probe_phy()
1690 ph->phy_loop = phy_loop; in _mii_probe_phy()
1696 ph->phy_cap_aneg = !!(bmsr & MII_STATUS_CANAUTONEG); in _mii_probe_phy()
1697 ph->phy_cap_100_t4 = !!(bmsr & MII_STATUS_100_BASE_T4); in _mii_probe_phy()
1698 ph->phy_cap_100_fdx = !!(bmsr & MII_STATUS_100_BASEX_FD); in _mii_probe_phy()
1699 ph->phy_cap_100_hdx = !!(bmsr & MII_STATUS_100_BASEX); in _mii_probe_phy()
1700 ph->phy_cap_10_fdx = !!(bmsr & MII_STATUS_10_FD); in _mii_probe_phy()
1701 ph->phy_cap_10_hdx = !!(bmsr & MII_STATUS_10); in _mii_probe_phy()
1702 ph->phy_cap_1000_fdx = in _mii_probe_phy()
1704 ph->phy_cap_1000_hdx = in _mii_probe_phy()
1706 ph->phy_cap_pause = mh->m_cap_pause; in _mii_probe_phy()
1707 ph->phy_cap_asmpause = mh->m_cap_asmpause; in _mii_probe_phy()
1710 ph->phy_cap_10_hdx = B_TRUE; in _mii_probe_phy()
1711 ph->phy_type = XCVR_10; in _mii_probe_phy()
1714 ph->phy_cap_10_fdx = B_TRUE; in _mii_probe_phy()
1715 ph->phy_type = XCVR_10; in _mii_probe_phy()
1718 ph->phy_cap_100_hdx = B_TRUE; in _mii_probe_phy()
1719 ph->phy_type = XCVR_100T2; in _mii_probe_phy()
1722 ph->phy_cap_100_fdx = B_TRUE; in _mii_probe_phy()
1723 ph->phy_type = XCVR_100T2; in _mii_probe_phy()
1726 ph->phy_cap_100_hdx = B_TRUE; in _mii_probe_phy()
1727 ph->phy_type = XCVR_100T4; in _mii_probe_phy()
1730 ph->phy_cap_100_hdx = B_TRUE; in _mii_probe_phy()
1731 ph->phy_type = XCVR_100X; in _mii_probe_phy()
1734 ph->phy_cap_100_fdx = B_TRUE; in _mii_probe_phy()
1735 ph->phy_type = XCVR_100X; in _mii_probe_phy()
1738 ph->phy_cap_1000_hdx = B_TRUE; in _mii_probe_phy()
1739 ph->phy_type = XCVR_1000X; in _mii_probe_phy()
1742 ph->phy_cap_1000_fdx = B_TRUE; in _mii_probe_phy()
1743 ph->phy_type = XCVR_1000X; in _mii_probe_phy()
1746 ph->phy_cap_1000_hdx = B_TRUE; in _mii_probe_phy()
1747 ph->phy_type = XCVR_1000T; in _mii_probe_phy()
1750 ph->phy_cap_1000_fdx = B_TRUE; in _mii_probe_phy()
1751 ph->phy_type = XCVR_1000T; in _mii_probe_phy()
1755 if ((*_phy_probes[j])(ph)) { in _mii_probe_phy()
1761 ph->phy_en_##CAP = (mh->m_en_##CAP > 0) ? \ in _mii_probe_phy()
1762 mh->m_en_##CAP : ph->phy_cap_##CAP in _mii_probe_phy()
1774 ph->phy_en_flowctrl = mh->m_en_flowctrl; in _mii_probe_phy()
1775 switch (ph->phy_en_flowctrl) { in _mii_probe_phy()
1778 ph->phy_en_pause = B_TRUE; in _mii_probe_phy()
1779 ph->phy_en_asmpause = B_TRUE; in _mii_probe_phy()
1782 ph->phy_en_pause = B_FALSE; in _mii_probe_phy()
1783 ph->phy_en_asmpause = B_TRUE; in _mii_probe_phy()
1786 ph->phy_en_pause = B_FALSE; in _mii_probe_phy()
1787 ph->phy_en_asmpause = B_FALSE; in _mii_probe_phy()
1799 phy_handle_t *ph; in _mii_probe() local
1834 ph = &mh->m_phys[curr_addr]; in _mii_probe()
1836 bzero(ph, sizeof (*ph)); in _mii_probe()
1837 ph->phy_addr = curr_addr; in _mii_probe()
1838 ph->phy_mii = mh; in _mii_probe()
1840 _mii_probe_phy(ph); in _mii_probe()
1842 if (!ph->phy_present) in _mii_probe()
1855 if ((phy_read(ph, MII_STATUS) & MII_STATUS_LINKUP) && in _mii_probe()
1856 (phy_read(ph, MII_STATUS) & MII_STATUS_LINKUP) && in _mii_probe()
1904 phy_handle_t *ph; in _mii_reset() local
1914 ph = &mh->m_phys[i]; in _mii_reset()
1916 if (!ph->phy_present) in _mii_reset()
1920 if (ph == mh->m_phy) in _mii_reset()
1923 ph->phy_stop(ph); in _mii_reset()
1926 ph = mh->m_phy; in _mii_reset()
1928 ASSERT(ph->phy_present); in _mii_reset()
1933 ph->phy_link = LINK_STATE_DOWN; in _mii_reset()
1934 ph->phy_speed = 0; in _mii_reset()
1935 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in _mii_reset()
1937 if (ph->phy_reset(ph) != DDI_SUCCESS) { in _mii_reset()
1957 phy_handle_t *ph; in _mii_loopback() local
1961 ph = mh->m_phy; in _mii_loopback()
1966 if (ph->phy_loopback == PHY_LB_NONE) { in _mii_loopback()
1970 if (ph->phy_loop(ph) != DDI_SUCCESS) { in _mii_loopback()
1976 mh->m_link = ph->phy_link = LINK_STATE_UP; in _mii_loopback()
1985 phy_handle_t *ph; in _mii_start() local
1987 ph = mh->m_phy; in _mii_start()
1990 ASSERT(ph->phy_present); in _mii_start()
1991 ASSERT(ph->phy_loopback == PHY_LB_NONE); in _mii_start()
1993 if (ph->phy_start(ph) != DDI_SUCCESS) { in _mii_start()
2009 phy_handle_t *ph; in _mii_check() local
2011 ph = mh->m_phy; in _mii_check()
2014 ospeed = ph->phy_speed; in _mii_check()
2015 oduplex = ph->phy_duplex; in _mii_check()
2016 ofctrl = ph->phy_flowctrl; in _mii_check()
2018 ASSERT(ph->phy_present); in _mii_check()
2020 if (ph->phy_check(ph) == DDI_FAILURE) { in _mii_check()
2027 mh->m_link = ph->phy_link; in _mii_check()
2031 (ph->phy_speed != ospeed) || in _mii_check()
2032 (ph->phy_duplex != oduplex) || in _mii_check()
2033 (ph->phy_flowctrl != ofctrl)) { in _mii_check()
2044 phy_handle_t *ph; in _mii_task() local
2057 ph = mh->m_phy; in _mii_task()
2082 ph = mh->m_phy; in _mii_task()
2083 if (!ph->phy_present) { in _mii_task()