Lines Matching refs:ph

309 	phy_handle_t	*ph;  in mii_set_pauseable()  local
312 ph = mh->m_phy; in mii_set_pauseable()
313 ph->phy_cap_pause = mh->m_cap_pause = pauseable; in mii_set_pauseable()
314 ph->phy_cap_asmpause = mh->m_cap_asmpause = asymetric; in mii_set_pauseable()
443 phy_handle_t *ph = mh->m_phy; in mii_get_speed() local
445 return (ph->phy_speed); in mii_get_speed()
451 phy_handle_t *ph = mh->m_phy; in mii_get_duplex() local
453 return (ph->phy_duplex); in mii_get_duplex()
459 phy_handle_t *ph = mh->m_phy; in mii_get_state() local
461 return (ph->phy_link); in mii_get_state()
467 phy_handle_t *ph = mh->m_phy; in mii_get_flowctrl() local
469 return (ph->phy_flowctrl); in mii_get_flowctrl()
475 phy_handle_t *ph = mh->m_phy; in mii_get_loopmodes() local
484 if (ph->phy_cap_1000_fdx || in mii_get_loopmodes()
485 ph->phy_cap_100_fdx || in mii_get_loopmodes()
486 ph->phy_cap_10_fdx) { in mii_get_loopmodes()
495 if (ph->phy_cap_1000_fdx) { in mii_get_loopmodes()
503 if (ph->phy_cap_100_fdx) { in mii_get_loopmodes()
511 if (ph->phy_cap_10_fdx) { in mii_get_loopmodes()
529 phy_handle_t *ph = mh->m_phy; in mii_get_loopback() local
531 return (ph->phy_loopback); in mii_get_loopback()
537 phy_handle_t *ph; in mii_set_loopback() local
541 ph = mh->m_phy; in mii_set_loopback()
543 if ((!mh->m_started) || (!ph->phy_present) || in mii_set_loopback()
548 ph->phy_loopback = loop; in mii_set_loopback()
562 phy_handle_t *ph = mh->m_phy; in mii_get_id() local
564 return (ph->phy_id); in mii_get_id()
659 phy_handle_t *ph; in mii_m_getprop() local
669 ph = mh->m_phy; in mii_m_getprop()
673 *(uint8_t *)val = ph->phy_adv_##VAR; \ in mii_m_getprop()
677 *(uint8_t *)val = ph->phy_en_##VAR; \ in mii_m_getprop()
683 bcopy(&ph->phy_duplex, val, sizeof (link_duplex_t)); in mii_m_getprop()
687 uint64_t speed = ph->phy_speed * 1000000ull; in mii_m_getprop()
694 *(uint8_t *)val = ph->phy_adv_aneg; in mii_m_getprop()
699 bcopy(&ph->phy_flowctrl, val, sizeof (link_flowctrl_t)); in mii_m_getprop()
724 phy_handle_t *ph; in mii_m_propinfo() local
730 ph = mh->m_phy; in mii_m_propinfo()
739 mac_prop_info_set_default_uint8(prh, ph->phy_cap_aneg); in mii_m_propinfo()
745 mac_prop_info_set_default_uint8(prh, ph->phy_cap_##VAR); \ in mii_m_propinfo()
749 if (!ph->phy_cap_##VAR) \ in mii_m_propinfo()
751 mac_prop_info_set_default_uint8(prh, ph->phy_cap_##VAR); \ in mii_m_propinfo()
770 phy_handle_t *ph; in mii_m_setprop() local
783 ph = mh->m_phy; in mii_m_setprop()
786 if (ph->phy_loopback != PHY_LB_NONE) { in mii_m_setprop()
803 capp = &ph->phy_cap_1000_fdx; in mii_m_setprop()
804 advp = &ph->phy_en_1000_fdx; in mii_m_setprop()
808 capp = &ph->phy_cap_1000_hdx; in mii_m_setprop()
809 advp = &ph->phy_en_1000_hdx; in mii_m_setprop()
813 capp = &ph->phy_cap_100_fdx; in mii_m_setprop()
814 advp = &ph->phy_en_100_fdx; in mii_m_setprop()
818 capp = &ph->phy_cap_100_hdx; in mii_m_setprop()
819 advp = &ph->phy_en_100_hdx; in mii_m_setprop()
823 capp = &ph->phy_cap_100_t4; in mii_m_setprop()
824 advp = &ph->phy_en_100_t4; in mii_m_setprop()
828 capp = &ph->phy_cap_10_fdx; in mii_m_setprop()
829 advp = &ph->phy_en_10_fdx; in mii_m_setprop()
833 capp = &ph->phy_cap_10_hdx; in mii_m_setprop()
834 advp = &ph->phy_en_10_hdx; in mii_m_setprop()
838 capp = &ph->phy_cap_aneg; in mii_m_setprop()
839 advp = &ph->phy_en_aneg; in mii_m_setprop()
849 chg = fc == ph->phy_en_flowctrl ? B_FALSE : B_TRUE; in mii_m_setprop()
852 ph->phy_en_pause = B_FALSE; in mii_m_setprop()
853 ph->phy_en_asmpause = B_FALSE; in mii_m_setprop()
854 ph->phy_en_flowctrl = fc; in mii_m_setprop()
865 if (ph->phy_cap_pause) { in mii_m_setprop()
866 ph->phy_en_pause = B_TRUE; in mii_m_setprop()
867 ph->phy_en_asmpause = B_TRUE; in mii_m_setprop()
868 ph->phy_en_flowctrl = fc; in mii_m_setprop()
879 if (ph->phy_cap_asmpause) { in mii_m_setprop()
880 ph->phy_en_pause = B_FALSE; in mii_m_setprop()
881 ph->phy_en_flowctrl = fc; in mii_m_setprop()
882 ph->phy_en_asmpause = B_TRUE; in mii_m_setprop()
926 phy_handle_t *ph; in mii_m_getstat() local
931 ph = mh->m_phy; in mii_m_getstat()
935 *val = ph->phy_speed * 1000000ull; in mii_m_getstat()
938 *val = ph->phy_duplex; in mii_m_getstat()
941 *val = !!(ph->phy_adv_aneg && ph->phy_lp_aneg); in mii_m_getstat()
944 *val = ph->phy_id; in mii_m_getstat()
947 *val = ph->phy_type; in mii_m_getstat()
950 *val = ph->phy_addr; in mii_m_getstat()
953 *val = ph->phy_adv_asmpause && ph->phy_lp_asmpause && in mii_m_getstat()
954 ph->phy_adv_pause != ph->phy_lp_pause; in mii_m_getstat()
957 *val = (ph->phy_flowctrl == LINK_FLOWCTRL_BI) || in mii_m_getstat()
958 (ph->phy_flowctrl == LINK_FLOWCTRL_RX); in mii_m_getstat()
961 *val = ph->phy_cap_1000_fdx; in mii_m_getstat()
964 *val = ph->phy_cap_1000_hdx; in mii_m_getstat()
967 *val = ph->phy_cap_100_fdx; in mii_m_getstat()
970 *val = ph->phy_cap_100_hdx; in mii_m_getstat()
973 *val = ph->phy_cap_10_fdx; in mii_m_getstat()
976 *val = ph->phy_cap_10_hdx; in mii_m_getstat()
979 *val = ph->phy_cap_100_t4; in mii_m_getstat()
982 *val = ph->phy_cap_aneg; in mii_m_getstat()
985 *val = ph->phy_cap_pause; in mii_m_getstat()
988 *val = ph->phy_cap_asmpause; in mii_m_getstat()
992 *val = ph->phy_lp_1000_fdx; in mii_m_getstat()
995 *val = ph->phy_lp_1000_hdx; in mii_m_getstat()
998 *val = ph->phy_lp_100_fdx; in mii_m_getstat()
1001 *val = ph->phy_lp_100_hdx; in mii_m_getstat()
1004 *val = ph->phy_lp_10_fdx; in mii_m_getstat()
1007 *val = ph->phy_lp_10_hdx; in mii_m_getstat()
1010 *val = ph->phy_lp_100_t4; in mii_m_getstat()
1013 *val = ph->phy_lp_aneg; in mii_m_getstat()
1016 *val = ph->phy_lp_pause; in mii_m_getstat()
1019 *val = ph->phy_lp_asmpause; in mii_m_getstat()
1023 *val = ph->phy_adv_1000_fdx; in mii_m_getstat()
1026 *val = ph->phy_adv_1000_hdx; in mii_m_getstat()
1029 *val = ph->phy_adv_100_fdx; in mii_m_getstat()
1032 *val = ph->phy_adv_100_hdx; in mii_m_getstat()
1035 *val = ph->phy_adv_10_fdx; in mii_m_getstat()
1038 *val = ph->phy_adv_10_hdx; in mii_m_getstat()
1041 *val = ph->phy_adv_100_t4; in mii_m_getstat()
1044 *val = ph->phy_adv_aneg; in mii_m_getstat()
1047 *val = ph->phy_adv_pause; in mii_m_getstat()
1050 *val = ph->phy_adv_asmpause; in mii_m_getstat()
1067 phy_read(phy_handle_t *ph, uint8_t reg) in phy_read() argument
1069 mii_handle_t mh = ph->phy_mii; in phy_read()
1071 return ((*mh->m_ops.mii_read)(mh->m_private, ph->phy_addr, reg)); in phy_read()
1075 phy_write(phy_handle_t *ph, uint8_t reg, uint16_t val) in phy_write() argument
1077 mii_handle_t mh = ph->phy_mii; in phy_write()
1079 (*mh->m_ops.mii_write)(mh->m_private, ph->phy_addr, reg, val); in phy_write()
1083 phy_reset(phy_handle_t *ph) in phy_reset() argument
1085 ASSERT(mutex_owned(&ph->phy_mii->m_lock)); in phy_reset()
1090 PHY_CLR(ph, MII_CONTROL, in phy_reset()
1096 PHY_SET(ph, MII_CONTROL, MII_CONTROL_RESET); in phy_reset()
1115 if ((phy_read(ph, MII_CONTROL) & MII_CONTROL_RESET) == 0) { in phy_reset()
1126 phy_stop(phy_handle_t *ph) in phy_stop() argument
1128 phy_write(ph, MII_CONTROL, MII_CONTROL_ISOLATE); in phy_stop()
1134 phy_loop(phy_handle_t *ph) in phy_loop() argument
1138 ASSERT(mutex_owned(&ph->phy_mii->m_lock)); in phy_loop()
1143 ph->phy_adv_aneg = B_FALSE; in phy_loop()
1144 ph->phy_adv_1000_fdx = B_FALSE; in phy_loop()
1145 ph->phy_adv_1000_hdx = B_FALSE; in phy_loop()
1146 ph->phy_adv_100_fdx = B_FALSE; in phy_loop()
1147 ph->phy_adv_100_t4 = B_FALSE; in phy_loop()
1148 ph->phy_adv_100_hdx = B_FALSE; in phy_loop()
1149 ph->phy_adv_10_fdx = B_FALSE; in phy_loop()
1150 ph->phy_adv_10_hdx = B_FALSE; in phy_loop()
1151 ph->phy_adv_pause = B_FALSE; in phy_loop()
1152 ph->phy_adv_asmpause = B_FALSE; in phy_loop()
1157 switch (ph->phy_loopback) { in phy_loop()
1165 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_loop()
1166 if (ph->phy_cap_1000_fdx) { in phy_loop()
1168 ph->phy_speed = 1000; in phy_loop()
1169 } else if (ph->phy_cap_100_fdx) { in phy_loop()
1171 ph->phy_speed = 100; in phy_loop()
1172 } else if (ph->phy_cap_10_fdx) { in phy_loop()
1174 ph->phy_speed = 10; in phy_loop()
1180 ph->phy_speed = 10; in phy_loop()
1181 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_loop()
1186 ph->phy_speed = 100; in phy_loop()
1187 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_loop()
1192 ph->phy_speed = 1000; in phy_loop()
1193 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_loop()
1197 ph->phy_link = LINK_STATE_UP; /* force up for loopback */ in phy_loop()
1198 ph->phy_flowctrl = LINK_FLOWCTRL_NONE; in phy_loop()
1200 switch (ph->phy_type) { in phy_loop()
1204 phy_write(ph, MII_MSCONTROL, gtcr); in phy_loop()
1208 phy_write(ph, MII_CONTROL, bmcr); in phy_loop()
1214 phy_start(phy_handle_t *ph) in phy_start() argument
1217 ASSERT(mutex_owned(&ph->phy_mii->m_lock)); in phy_start()
1219 ASSERT(ph->phy_loopback == PHY_LB_NONE); in phy_start()
1225 ph->phy_adv_aneg = ph->phy_en_aneg; in phy_start()
1226 ph->phy_adv_1000_fdx = ph->phy_en_1000_fdx; in phy_start()
1227 ph->phy_adv_1000_hdx = ph->phy_en_1000_hdx; in phy_start()
1228 ph->phy_adv_100_fdx = ph->phy_en_100_fdx; in phy_start()
1229 ph->phy_adv_100_t4 = ph->phy_en_100_t4; in phy_start()
1230 ph->phy_adv_100_hdx = ph->phy_en_100_hdx; in phy_start()
1231 ph->phy_adv_10_fdx = ph->phy_en_10_fdx; in phy_start()
1232 ph->phy_adv_10_hdx = ph->phy_en_10_hdx; in phy_start()
1233 ph->phy_adv_pause = ph->phy_en_pause; in phy_start()
1234 ph->phy_adv_asmpause = ph->phy_en_asmpause; in phy_start()
1240 if (!ph->phy_cap_##CAP) \ in phy_start()
1241 ph->phy_adv_##CAP = 0 in phy_start()
1259 if ((!ph->phy_adv_1000_fdx) && in phy_start()
1260 (!ph->phy_adv_1000_hdx) && in phy_start()
1261 (!ph->phy_adv_100_t4) && in phy_start()
1262 (!ph->phy_adv_100_fdx) && in phy_start()
1263 (!ph->phy_adv_100_hdx) && in phy_start()
1264 (!ph->phy_adv_10_fdx) && in phy_start()
1265 (!ph->phy_adv_10_hdx)) { in phy_start()
1267 phy_warn(ph, in phy_start()
1270 PHY_SET(ph, MII_CONTROL, MII_CONTROL_PWRDN); in phy_start()
1272 ph->phy_link = LINK_STATE_DOWN; in phy_start()
1279 if (ph->phy_adv_aneg) { in phy_start()
1283 if ((ph->phy_adv_1000_fdx) || (ph->phy_adv_1000_hdx)) { in phy_start()
1286 } else if (ph->phy_adv_100_fdx || ph->phy_adv_100_hdx || in phy_start()
1287 ph->phy_adv_100_t4) { in phy_start()
1291 if (ph->phy_adv_1000_fdx || ph->phy_adv_100_fdx || ph->phy_adv_10_fdx) { in phy_start()
1295 if (ph->phy_type == XCVR_1000X) { in phy_start()
1298 if (ph->phy_adv_1000_fdx) { in phy_start()
1301 if (ph->phy_adv_1000_hdx) { in phy_start()
1304 if (ph->phy_adv_pause) { in phy_start()
1307 if (ph->phy_adv_asmpause) { in phy_start()
1311 } else if (ph->phy_type == XCVR_100T2) { in phy_start()
1314 if (ph->phy_adv_100_fdx) { in phy_start()
1317 if (ph->phy_adv_100_hdx) { in phy_start()
1325 if (ph->phy_adv_1000_fdx) { in phy_start()
1328 if (ph->phy_adv_1000_hdx) { in phy_start()
1331 if (ph->phy_adv_100_fdx) { in phy_start()
1334 if (ph->phy_adv_100_hdx) { in phy_start()
1337 if (ph->phy_adv_100_t4) { in phy_start()
1340 if (ph->phy_adv_10_fdx) { in phy_start()
1343 if (ph->phy_adv_10_hdx) { in phy_start()
1346 if (ph->phy_adv_pause) { in phy_start()
1349 if (ph->phy_adv_asmpause) { in phy_start()
1354 ph->phy_link = LINK_STATE_DOWN; in phy_start()
1355 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in phy_start()
1356 ph->phy_speed = 0; in phy_start()
1358 phy_write(ph, MII_AN_ADVERT, anar); in phy_start()
1359 phy_write(ph, MII_CONTROL, bmcr & ~(MII_CONTROL_RSAN)); in phy_start()
1361 switch (ph->phy_type) { in phy_start()
1365 phy_write(ph, MII_MSCONTROL, gtcr); in phy_start()
1372 phy_write(ph, MII_CONTROL, bmcr); in phy_start()
1379 phy_check(phy_handle_t *ph) in phy_check() argument
1384 ASSERT(mutex_owned(&ph->phy_mii->m_lock)); in phy_check()
1387 status = phy_read(ph, MII_STATUS); in phy_check()
1388 control = phy_read(ph, MII_CONTROL); in phy_check()
1391 lpar = phy_read(ph, MII_AN_LPABLE); in phy_check()
1392 anexp = phy_read(ph, MII_AN_EXPANSION); in phy_check()
1403 if ((status != phy_read(ph, MII_STATUS)) && debounces) { in phy_check()
1414 ph->phy_speed = 0; in phy_check()
1415 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in phy_check()
1416 ph->phy_link = LINK_STATE_UNKNOWN; in phy_check()
1417 ph->phy_present = B_FALSE; in phy_check()
1422 if ((ph->phy_loopback != PHY_LB_INT_PHY) && in phy_check()
1424 ph->phy_speed = 0; in phy_check()
1425 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in phy_check()
1426 ph->phy_link = LINK_STATE_DOWN; in phy_check()
1430 ph->phy_link = LINK_STATE_UP; in phy_check()
1434 ph->phy_lp_aneg = B_FALSE; in phy_check()
1435 ph->phy_lp_10_hdx = B_FALSE; in phy_check()
1436 ph->phy_lp_10_fdx = B_FALSE; in phy_check()
1437 ph->phy_lp_100_t4 = B_FALSE; in phy_check()
1438 ph->phy_lp_100_hdx = B_FALSE; in phy_check()
1439 ph->phy_lp_100_fdx = B_FALSE; in phy_check()
1440 ph->phy_lp_1000_hdx = B_FALSE; in phy_check()
1441 ph->phy_lp_1000_fdx = B_FALSE; in phy_check()
1449 ph->phy_speed = 1000; in phy_check()
1451 ph->phy_speed = 100; in phy_check()
1453 ph->phy_speed = 10; in phy_check()
1455 ph->phy_duplex = control & MII_CONTROL_FDUPLEX ? in phy_check()
1461 if (ph->phy_type == XCVR_1000X) { in phy_check()
1463 ph->phy_lp_10_hdx = B_FALSE; in phy_check()
1464 ph->phy_lp_10_fdx = B_FALSE; in phy_check()
1465 ph->phy_lp_100_t4 = B_FALSE; in phy_check()
1466 ph->phy_lp_100_hdx = B_FALSE; in phy_check()
1467 ph->phy_lp_100_fdx = B_FALSE; in phy_check()
1470 ph->phy_lp_aneg = B_TRUE; in phy_check()
1471 ph->phy_lp_1000_fdx = !!(lpar & MII_ABILITY_X_FD); in phy_check()
1472 ph->phy_lp_1000_hdx = !!(lpar & MII_ABILITY_X_HD); in phy_check()
1473 ph->phy_lp_pause = !!(lpar & MII_ABILITY_X_PAUSE); in phy_check()
1474 ph->phy_lp_asmpause = !!(lpar & MII_ABILITY_X_ASMPAUSE); in phy_check()
1476 } else if (ph->phy_type == XCVR_100T2) { in phy_check()
1477 ph->phy_lp_10_hdx = B_FALSE; in phy_check()
1478 ph->phy_lp_10_fdx = B_FALSE; in phy_check()
1479 ph->phy_lp_100_t4 = B_FALSE; in phy_check()
1480 ph->phy_lp_1000_hdx = B_FALSE; in phy_check()
1481 ph->phy_lp_1000_fdx = B_FALSE; in phy_check()
1482 ph->phy_lp_pause = B_FALSE; in phy_check()
1483 ph->phy_lp_asmpause = B_FALSE; in phy_check()
1486 ph->phy_lp_aneg = B_TRUE; in phy_check()
1487 ph->phy_lp_100_fdx = !!(lpar & MII_ABILITY_T2_FD); in phy_check()
1488 ph->phy_lp_100_hdx = !!(lpar & MII_ABILITY_T2_HD); in phy_check()
1501 phy_warn(ph, "Parallel detection fault!"); in phy_check()
1503 ph->phy_lp_10_hdx = B_FALSE; in phy_check()
1504 ph->phy_lp_10_fdx = B_FALSE; in phy_check()
1505 ph->phy_lp_100_t4 = B_FALSE; in phy_check()
1506 ph->phy_lp_100_hdx = B_FALSE; in phy_check()
1507 ph->phy_lp_100_fdx = B_FALSE; in phy_check()
1508 ph->phy_lp_1000_hdx = B_FALSE; in phy_check()
1509 ph->phy_lp_1000_fdx = B_FALSE; in phy_check()
1510 ph->phy_lp_pause = B_FALSE; in phy_check()
1511 ph->phy_lp_asmpause = B_FALSE; in phy_check()
1512 ph->phy_speed = 0; in phy_check()
1513 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in phy_check()
1517 ph->phy_lp_aneg = !!(anexp & MII_AN_EXP_LPCANAN); in phy_check()
1526 if ((ph->phy_type == XCVR_1000T) && in phy_check()
1530 msstat = phy_read(ph, MII_MSSTATUS); in phy_check()
1532 ph->phy_lp_1000_hdx = in phy_check()
1535 ph->phy_lp_1000_fdx = in phy_check()
1539 ph->phy_lp_100_fdx = !!(lpar & MII_ABILITY_100BASE_TX_FD); in phy_check()
1540 ph->phy_lp_100_hdx = !!(lpar & MII_ABILITY_100BASE_TX); in phy_check()
1541 ph->phy_lp_100_t4 = !!(lpar & MII_ABILITY_100BASE_T4); in phy_check()
1542 ph->phy_lp_10_fdx = !!(lpar & MII_ABILITY_10BASE_T_FD); in phy_check()
1543 ph->phy_lp_10_hdx = !!(lpar & MII_ABILITY_10BASE_T); in phy_check()
1544 ph->phy_lp_pause = !!(lpar & MII_ABILITY_PAUSE); in phy_check()
1545 ph->phy_lp_asmpause = !!(lpar & MII_ABILITY_ASMPAUSE); in phy_check()
1549 if ((ph->phy_en_flowctrl == LINK_FLOWCTRL_BI) && in phy_check()
1550 (ph->phy_lp_pause)) { in phy_check()
1551 ph->phy_flowctrl = LINK_FLOWCTRL_BI; in phy_check()
1552 } else if ((ph->phy_en_flowctrl == LINK_FLOWCTRL_RX) && in phy_check()
1553 (ph->phy_lp_pause || ph->phy_lp_asmpause)) { in phy_check()
1554 ph->phy_flowctrl = LINK_FLOWCTRL_RX; in phy_check()
1555 } else if ((ph->phy_en_flowctrl == LINK_FLOWCTRL_TX) && in phy_check()
1556 (ph->phy_lp_pause)) { in phy_check()
1557 ph->phy_flowctrl = LINK_FLOWCTRL_TX; in phy_check()
1559 ph->phy_flowctrl = LINK_FLOWCTRL_NONE; in phy_check()
1562 if (ph->phy_adv_1000_fdx && ph->phy_lp_1000_fdx) { in phy_check()
1563 ph->phy_speed = 1000; in phy_check()
1564 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_check()
1566 } else if (ph->phy_adv_1000_hdx && ph->phy_lp_1000_hdx) { in phy_check()
1567 ph->phy_speed = 1000; in phy_check()
1568 ph->phy_duplex = LINK_DUPLEX_HALF; in phy_check()
1570 } else if (ph->phy_adv_100_fdx && ph->phy_lp_100_fdx) { in phy_check()
1571 ph->phy_speed = 100; in phy_check()
1572 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_check()
1574 } else if (ph->phy_adv_100_t4 && ph->phy_lp_100_t4) { 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_100_hdx && ph->phy_lp_100_hdx) { in phy_check()
1579 ph->phy_speed = 100; in phy_check()
1580 ph->phy_duplex = LINK_DUPLEX_HALF; in phy_check()
1582 } else if (ph->phy_adv_10_fdx && ph->phy_lp_10_fdx) { in phy_check()
1583 ph->phy_speed = 10; in phy_check()
1584 ph->phy_duplex = LINK_DUPLEX_FULL; in phy_check()
1586 } else if (ph->phy_adv_10_hdx && ph->phy_lp_10_hdx) { in phy_check()
1587 ph->phy_speed = 10; in phy_check()
1588 ph->phy_duplex = LINK_DUPLEX_HALF; in phy_check()
1592 phy_warn(ph, "No common abilities."); in phy_check()
1594 ph->phy_speed = 0; in phy_check()
1595 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in phy_check()
1602 phy_get_prop(phy_handle_t *ph, char *prop, int dflt) in phy_get_prop() argument
1604 mii_handle_t mh = ph->phy_mii; in phy_get_prop()
1610 phy_get_name(phy_handle_t *ph) in phy_get_name() argument
1612 mii_handle_t mh = ph->phy_mii; in phy_get_name()
1618 phy_get_driver(phy_handle_t *ph) in phy_get_driver() argument
1620 mii_handle_t mh = ph->phy_mii; in phy_get_driver()
1626 phy_warn(phy_handle_t *ph, const char *fmt, ...) in phy_warn() argument
1631 (void) snprintf(buf, sizeof (buf), "%s: %s", phy_get_name(ph), fmt); in phy_warn()
1651 _mii_probe_phy(phy_handle_t *ph) in _mii_probe_phy() argument
1655 mii_handle_t mh = ph->phy_mii; in _mii_probe_phy()
1667 ph->phy_id = 0; in _mii_probe_phy()
1668 ph->phy_model = "PHY"; in _mii_probe_phy()
1669 ph->phy_vendor = "Unknown Vendor"; in _mii_probe_phy()
1672 bmsr = phy_read(ph, MII_STATUS); in _mii_probe_phy()
1673 bmsr = phy_read(ph, MII_STATUS); in _mii_probe_phy()
1675 ph->phy_present = B_FALSE; in _mii_probe_phy()
1680 extsr = phy_read(ph, MII_EXTSTATUS); in _mii_probe_phy()
1685 ph->phy_present = B_TRUE; in _mii_probe_phy()
1686 ph->phy_id = ((uint32_t)phy_read(ph, MII_PHYIDH) << 16) | in _mii_probe_phy()
1687 phy_read(ph, MII_PHYIDL); in _mii_probe_phy()
1690 ph->phy_reset = phy_reset; in _mii_probe_phy()
1691 ph->phy_start = phy_start; in _mii_probe_phy()
1692 ph->phy_stop = phy_stop; in _mii_probe_phy()
1693 ph->phy_check = phy_check; in _mii_probe_phy()
1694 ph->phy_loop = phy_loop; in _mii_probe_phy()
1700 ph->phy_cap_aneg = !!(bmsr & MII_STATUS_CANAUTONEG); in _mii_probe_phy()
1701 ph->phy_cap_100_t4 = !!(bmsr & MII_STATUS_100_BASE_T4); in _mii_probe_phy()
1702 ph->phy_cap_100_fdx = !!(bmsr & MII_STATUS_100_BASEX_FD); in _mii_probe_phy()
1703 ph->phy_cap_100_hdx = !!(bmsr & MII_STATUS_100_BASEX); in _mii_probe_phy()
1704 ph->phy_cap_10_fdx = !!(bmsr & MII_STATUS_10_FD); in _mii_probe_phy()
1705 ph->phy_cap_10_hdx = !!(bmsr & MII_STATUS_10); in _mii_probe_phy()
1706 ph->phy_cap_1000_fdx = in _mii_probe_phy()
1708 ph->phy_cap_1000_hdx = in _mii_probe_phy()
1710 ph->phy_cap_pause = mh->m_cap_pause; in _mii_probe_phy()
1711 ph->phy_cap_asmpause = mh->m_cap_asmpause; in _mii_probe_phy()
1714 ph->phy_cap_10_hdx = B_TRUE; in _mii_probe_phy()
1715 ph->phy_type = XCVR_10; in _mii_probe_phy()
1718 ph->phy_cap_10_fdx = B_TRUE; in _mii_probe_phy()
1719 ph->phy_type = XCVR_10; in _mii_probe_phy()
1722 ph->phy_cap_100_hdx = B_TRUE; in _mii_probe_phy()
1723 ph->phy_type = XCVR_100T2; in _mii_probe_phy()
1726 ph->phy_cap_100_fdx = B_TRUE; in _mii_probe_phy()
1727 ph->phy_type = XCVR_100T2; in _mii_probe_phy()
1730 ph->phy_cap_100_hdx = B_TRUE; in _mii_probe_phy()
1731 ph->phy_type = XCVR_100T4; in _mii_probe_phy()
1734 ph->phy_cap_100_hdx = B_TRUE; in _mii_probe_phy()
1735 ph->phy_type = XCVR_100X; in _mii_probe_phy()
1738 ph->phy_cap_100_fdx = B_TRUE; in _mii_probe_phy()
1739 ph->phy_type = XCVR_100X; in _mii_probe_phy()
1742 ph->phy_cap_1000_hdx = B_TRUE; in _mii_probe_phy()
1743 ph->phy_type = XCVR_1000X; in _mii_probe_phy()
1746 ph->phy_cap_1000_fdx = B_TRUE; in _mii_probe_phy()
1747 ph->phy_type = XCVR_1000X; in _mii_probe_phy()
1750 ph->phy_cap_1000_hdx = B_TRUE; in _mii_probe_phy()
1751 ph->phy_type = XCVR_1000T; in _mii_probe_phy()
1754 ph->phy_cap_1000_fdx = B_TRUE; in _mii_probe_phy()
1755 ph->phy_type = XCVR_1000T; in _mii_probe_phy()
1759 if ((*_phy_probes[j])(ph)) { in _mii_probe_phy()
1765 ph->phy_en_##CAP = (mh->m_en_##CAP > 0) ? \ in _mii_probe_phy()
1766 mh->m_en_##CAP : ph->phy_cap_##CAP in _mii_probe_phy()
1778 ph->phy_en_flowctrl = mh->m_en_flowctrl; in _mii_probe_phy()
1779 switch (ph->phy_en_flowctrl) { in _mii_probe_phy()
1782 ph->phy_en_pause = B_TRUE; 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_TRUE; in _mii_probe_phy()
1790 ph->phy_en_pause = B_FALSE; in _mii_probe_phy()
1791 ph->phy_en_asmpause = B_FALSE; in _mii_probe_phy()
1803 phy_handle_t *ph; in _mii_probe() local
1838 ph = &mh->m_phys[curr_addr]; in _mii_probe()
1840 bzero(ph, sizeof (*ph)); in _mii_probe()
1841 ph->phy_addr = curr_addr; in _mii_probe()
1842 ph->phy_mii = mh; in _mii_probe()
1844 _mii_probe_phy(ph); in _mii_probe()
1846 if (!ph->phy_present) in _mii_probe()
1859 if ((phy_read(ph, MII_STATUS) & MII_STATUS_LINKUP) && in _mii_probe()
1860 (phy_read(ph, MII_STATUS) & MII_STATUS_LINKUP) && in _mii_probe()
1908 phy_handle_t *ph; in _mii_reset() local
1918 ph = &mh->m_phys[i]; in _mii_reset()
1920 if (!ph->phy_present) in _mii_reset()
1924 if (ph == mh->m_phy) in _mii_reset()
1927 ph->phy_stop(ph); in _mii_reset()
1930 ph = mh->m_phy; in _mii_reset()
1932 ASSERT(ph->phy_present); in _mii_reset()
1937 ph->phy_link = LINK_STATE_DOWN; in _mii_reset()
1938 ph->phy_speed = 0; in _mii_reset()
1939 ph->phy_duplex = LINK_DUPLEX_UNKNOWN; in _mii_reset()
1941 if (ph->phy_reset(ph) != DDI_SUCCESS) { in _mii_reset()
1961 phy_handle_t *ph; in _mii_loopback() local
1965 ph = mh->m_phy; in _mii_loopback()
1970 if (ph->phy_loopback == PHY_LB_NONE) { in _mii_loopback()
1974 if (ph->phy_loop(ph) != DDI_SUCCESS) { in _mii_loopback()
1980 mh->m_link = ph->phy_link = LINK_STATE_UP; in _mii_loopback()
1989 phy_handle_t *ph; in _mii_start() local
1991 ph = mh->m_phy; in _mii_start()
1994 ASSERT(ph->phy_present); in _mii_start()
1995 ASSERT(ph->phy_loopback == PHY_LB_NONE); in _mii_start()
1997 if (ph->phy_start(ph) != DDI_SUCCESS) { in _mii_start()
2013 phy_handle_t *ph; in _mii_check() local
2015 ph = mh->m_phy; in _mii_check()
2018 ospeed = ph->phy_speed; in _mii_check()
2019 oduplex = ph->phy_duplex; in _mii_check()
2020 ofctrl = ph->phy_flowctrl; in _mii_check()
2022 ASSERT(ph->phy_present); in _mii_check()
2024 if (ph->phy_check(ph) == DDI_FAILURE) { in _mii_check()
2031 mh->m_link = ph->phy_link; in _mii_check()
2035 (ph->phy_speed != ospeed) || in _mii_check()
2036 (ph->phy_duplex != oduplex) || in _mii_check()
2037 (ph->phy_flowctrl != ofctrl)) { in _mii_check()
2048 phy_handle_t *ph; in _mii_task() local
2061 ph = mh->m_phy; in _mii_task()
2086 ph = mh->m_phy; in _mii_task()
2087 if (!ph->phy_present) { in _mii_task()