Lines Matching refs:pdev

37     lm_device_t *pdev,  in lm_mwrite()  argument
46 DbgBreakIf(pdev->params.enable_remote_phy); in lm_mwrite()
48 if(pdev->params.phy_int_mode == PHY_INT_MODE_AUTO_POLLING) in lm_mwrite()
50 REG_RD(pdev, emac.emac_mdio_mode, &tmp); in lm_mwrite()
53 REG_WR(pdev, emac.emac_mdio_mode, tmp); in lm_mwrite()
55 mm_wait(pdev, 40); in lm_mwrite()
65 REG_WR(pdev, emac.emac_mdio_comm, tmp); in lm_mwrite()
69 mm_wait(pdev, 10); in lm_mwrite()
71 REG_RD(pdev, emac.emac_mdio_comm, &tmp); in lm_mwrite()
74 mm_wait(pdev, 5); in lm_mwrite()
90 if(pdev->params.phy_int_mode == PHY_INT_MODE_AUTO_POLLING) in lm_mwrite()
92 REG_RD(pdev, emac.emac_mdio_mode, &tmp); in lm_mwrite()
95 REG_WR(pdev, emac.emac_mdio_mode, tmp); in lm_mwrite()
110 lm_device_t *pdev, in lm_mread() argument
119 DbgBreakIf(pdev->params.enable_remote_phy); in lm_mread()
121 if(pdev->params.phy_int_mode == PHY_INT_MODE_AUTO_POLLING) in lm_mread()
123 REG_RD(pdev, emac.emac_mdio_mode, &val); in lm_mread()
126 REG_WR(pdev, emac.emac_mdio_mode, val); in lm_mread()
128 mm_wait(pdev, 40); in lm_mread()
137 REG_WR(pdev, emac.emac_mdio_comm, val); in lm_mread()
141 mm_wait(pdev, 10); in lm_mread()
143 REG_RD(pdev, emac.emac_mdio_comm, &val); in lm_mread()
148 REG_RD(pdev, emac.emac_mdio_comm, &val); in lm_mread()
150 REG_RD(pdev, emac.emac_mdio_comm, &val); in lm_mread()
172 if(pdev->params.phy_int_mode == PHY_INT_MODE_AUTO_POLLING) in lm_mread()
174 REG_RD(pdev, emac.emac_mdio_mode, &val); in lm_mread()
177 REG_WR(pdev, emac.emac_mdio_mode, val); in lm_mread()
192 lm_device_t *pdev, in phy_ad_settings() argument
207 if(CHIP_NUM(pdev) == CHIP_NUM_5706) in phy_ad_settings()
226 if(CHIP_NUM(pdev) == CHIP_NUM_5706) in phy_ad_settings()
244 if(CHIP_NUM(pdev) == CHIP_NUM_5706) in phy_ad_settings()
272 lm_device_t *pdev, in init_utp() argument
296 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_CTRL_REG, PHY_CTRL_PHY_RESET); in init_utp()
299 mm_wait(pdev, 5); in init_utp()
301 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_CTRL_REG, &val); in init_utp()
305 mm_wait(pdev, 5); in init_utp()
314 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_ID1_REG, &val); in init_utp()
315 pdev->hw_info.phy_id = val << 16; in init_utp()
316 DbgMessage1(pdev, INFORM, "Phy Id1 0x%x\n", val); in init_utp()
318 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_ID2_REG, &val); in init_utp()
319 pdev->hw_info.phy_id |= val & 0xffff; in init_utp()
320 DbgMessage1(pdev, INFORM, "Phy Id2 0x%x\n", val); in init_utp()
323 (pdev->hw_info.phy_id & 0x0fffffff) == 0x0fffffff || in init_utp()
324 pdev->hw_info.phy_id == 0); in init_utp()
326 if(CHIP_REV(pdev) == CHIP_REV_FPGA) in init_utp()
331 (void) lm_mwrite(pdev, pdev->params.phy_addr, 28, 0x3044); in init_utp()
332 (void) lm_mwrite(pdev, pdev->params.phy_addr, 29, 0x0100); in init_utp()
336 if(CHIP_NUM(pdev) == CHIP_NUM_5706 || CHIP_NUM(pdev) == CHIP_NUM_5708) in init_utp()
341 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x18, 0x0c00); in init_utp()
342 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x17, 0x000a); in init_utp()
343 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x15, 0x310b); in init_utp()
344 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x17, 0x201f); in init_utp()
345 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x15, 0x9506); in init_utp()
346 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x17, 0x401f); in init_utp()
347 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x15, 0x14e2); in init_utp()
348 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x18, 0x0400); in init_utp()
352 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x18, 0x7007); in init_utp()
353 (void) lm_mread(pdev, pdev->params.phy_addr, 0x18, &val); in init_utp()
365 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x18, val | 0x8000 | 0x7); in init_utp()
371 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x18, 0x7007); in init_utp()
372 (void) lm_mread(pdev, pdev->params.phy_addr, 0x18, &val); in init_utp()
374 (void) lm_mwrite(pdev, pdev->params.phy_addr, BCM5401_AUX_CTRL, val | 0x8000 | 0x7); in init_utp()
387 if(CHIP_ID(pdev) == CHIP_ID_5709_A0 || in init_utp()
388 CHIP_ID(pdev) == CHIP_ID_5709_A1 || in init_utp()
389 CHIP_ID(pdev) == CHIP_ID_5709_B0 || in init_utp()
390 CHIP_ID(pdev) == CHIP_ID_5709_B1) in init_utp()
392 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x17, 0xf08); in init_utp()
393 (void) lm_mread(pdev, pdev->params.phy_addr, 0x15, &val); in init_utp()
395 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x15, val); in init_utp()
399 if(pdev->params.mtu > MAX_ETHERNET_PACKET_SIZE) in init_utp()
401 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x10, 0x0001); in init_utp()
402 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x18, 0x4400); in init_utp()
406 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x10, 0x0000); in init_utp()
407 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x18, 0x0400); in init_utp()
418 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_1000BASET_CTRL_REG, 0); in init_utp()
422 val |= phy_ad_settings(pdev, req_medium, flow_ctrl); in init_utp()
438 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_AN_AD_REG, val); in init_utp()
445 DbgMessage(pdev, INFORM, "autoneg 10mb hd\n"); in init_utp()
448 DbgMessage(pdev, INFORM, "and 10mb fd\n"); in init_utp()
455 DbgMessage(pdev, INFORM, "force 10mb hd\n"); in init_utp()
457 pdev, in init_utp()
458 pdev->params.phy_addr, in init_utp()
464 DbgMessage(pdev, INFORM, "force 10mb fd\n"); in init_utp()
466 pdev, in init_utp()
467 pdev->params.phy_addr, in init_utp()
479 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_1000BASET_CTRL_REG, 0); in init_utp()
483 val |= phy_ad_settings(pdev, req_medium, flow_ctrl); in init_utp()
504 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_AN_AD_REG, val); in init_utp()
511 DbgMessage(pdev, INFORM, "autoneg 10mb and 100mb hd\n"); in init_utp()
514 DbgMessage(pdev, INFORM, "and 100mb fd\n"); in init_utp()
521 DbgMessage(pdev, INFORM, "force 100mb hd\n"); in init_utp()
523 pdev, in init_utp()
524 pdev->params.phy_addr, in init_utp()
530 DbgMessage(pdev, INFORM, "force 100mb fd\n"); in init_utp()
532 pdev, in init_utp()
533 pdev->params.phy_addr, in init_utp()
545 val |= phy_ad_settings(pdev, req_medium, flow_ctrl); in init_utp()
553 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_AN_AD_REG, val); in init_utp()
574 DbgMessage(pdev, INFORM, "autoneg 10/100mb and 1000mb hd\n"); in init_utp()
577 DbgMessage(pdev, INFORM, "and 1000mb fd\n"); in init_utp()
586 pdev, in init_utp()
587 pdev->params.phy_addr, in init_utp()
591 (void) lm_mwrite(pdev, pdev->params.phy_addr, BCM5401_AUX_CTRL, 0x7); in init_utp()
592 (void) lm_mread(pdev, pdev->params.phy_addr, BCM5401_AUX_CTRL, &val); in init_utp()
594 (void) lm_mwrite(pdev, pdev->params.phy_addr, BCM5401_AUX_CTRL, val); in init_utp()
599 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_1000BASET_CTRL_REG, val); in init_utp()
608 val |= phy_ad_settings(pdev, req_medium, flow_ctrl); in init_utp()
611 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_AN_AD_REG, val); in init_utp()
616 pdev, in init_utp()
617 pdev->params.phy_addr, in init_utp()
630 REG_RD(pdev, emac.emac_mode, &val); in init_utp()
632 REG_WR(pdev, emac.emac_mode, val); in init_utp()
637 DbgMessage(pdev, INFORM, "phy init - restart autoneg\n"); in init_utp()
640 pdev, in init_utp()
641 pdev->params.phy_addr, in init_utp()
647 SET_MEDIUM_TYPE(pdev->vars.medium, LM_MEDIUM_TYPE_UTP); in init_utp()
648 SET_MEDIUM_SPEED(pdev->vars.medium, speed); in init_utp()
649 SET_MEDIUM_DUPLEX(pdev->vars.medium, duplex); in init_utp()
651 pdev->vars.cable_is_attached = FALSE; in init_utp()
654 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_STATUS_REG, &val); in init_utp()
656 if(CHIP_REV(pdev) != CHIP_REV_FPGA) in init_utp()
659 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1c, 0x7c00); in init_utp()
660 (void) lm_mread(pdev, pdev->params.phy_addr, 0x1c, &val); in init_utp()
665 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_STATUS_REG, &val); in init_utp()
671 mm_wait(pdev, 10); in init_utp()
681 pdev->vars.cable_is_attached = TRUE; in init_utp()
686 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_STATUS_REG, &val); in init_utp()
689 pdev->vars.link_status = LM_STATUS_LINK_ACTIVE; in init_utp()
690 DbgMessage(pdev, INFORM, "phy init link up\n"); in init_utp()
692 pdev->vars.cable_is_attached = TRUE; in init_utp()
696 pdev->vars.link_status = LM_STATUS_LINK_DOWN; in init_utp()
697 DbgMessage(pdev, INFORM, "phy init link down\n"); in init_utp()
712 lm_device_t *pdev) in mii_get_serdes_link_status() argument
718 if(CHIP_NUM(pdev) == CHIP_NUM_5706 && in mii_get_serdes_link_status()
719 lm_get_medium(pdev) == LM_MEDIUM_TYPE_FIBER) in mii_get_serdes_link_status()
721 REG_RD(pdev, emac.emac_status, &val); in mii_get_serdes_link_status()
734 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_STATUS_REG, &val); in mii_get_serdes_link_status()
735 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_STATUS_REG, &val); in mii_get_serdes_link_status()
750 lm_device_t *pdev, in set_5708_serdes_pre_emphasis() argument
761 pdev, in set_5708_serdes_pre_emphasis()
762 pdev->params.phy_addr, in set_5708_serdes_pre_emphasis()
767 if(pre_emphasis != pdev->vars.serdes_pre_emphasis) in set_5708_serdes_pre_emphasis()
769 pdev->vars.serdes_pre_emphasis = pre_emphasis; in set_5708_serdes_pre_emphasis()
775 pdev, in set_5708_serdes_pre_emphasis()
776 pdev->params.phy_addr, in set_5708_serdes_pre_emphasis()
782 pdev, in set_5708_serdes_pre_emphasis()
783 pdev->params.phy_addr, in set_5708_serdes_pre_emphasis()
795 pdev, in set_5708_serdes_pre_emphasis()
796 pdev->params.phy_addr, in set_5708_serdes_pre_emphasis()
802 pdev, in set_5708_serdes_pre_emphasis()
803 pdev->params.phy_addr, in set_5708_serdes_pre_emphasis()
809 pdev, in set_5708_serdes_pre_emphasis()
810 pdev->params.phy_addr, in set_5708_serdes_pre_emphasis()
818 pdev, in set_5708_serdes_pre_emphasis()
819 pdev->params.phy_addr, in set_5708_serdes_pre_emphasis()
824 pdev, in set_5708_serdes_pre_emphasis()
825 pdev->params.phy_addr, in set_5708_serdes_pre_emphasis()
830 pdev, in set_5708_serdes_pre_emphasis()
831 pdev->params.phy_addr, in set_5708_serdes_pre_emphasis()
848 lm_device_t *pdev, in init_5708_serdes() argument
870 pdev, in init_5708_serdes()
871 pdev->hw_info.shmem_base + in init_5708_serdes()
893 pdev, in init_5708_serdes()
894 pdev->params.phy_addr, in init_5708_serdes()
900 mm_wait(pdev, 5); in init_5708_serdes()
903 pdev, in init_5708_serdes()
904 pdev->params.phy_addr, in init_5708_serdes()
910 mm_wait(pdev, 5); in init_5708_serdes()
923 if(CHIP_NUM(pdev) == CHIP_NUM_5708) in init_5708_serdes()
927 pdev, in init_5708_serdes()
928 pdev->params.phy_addr, in init_5708_serdes()
933 pdev, in init_5708_serdes()
934 pdev->params.phy_addr, in init_5708_serdes()
941 pdev, in init_5708_serdes()
942 pdev->params.phy_addr, in init_5708_serdes()
948 if(pdev->hw_info.nvm_hw_config & SHARED_HW_CFG_BACKPLANE_APP) in init_5708_serdes()
950 (void) set_5708_serdes_pre_emphasis(pdev, pdev->params.serdes_pre_emphasis); in init_5708_serdes()
954 pdev->vars.serdes_pre_emphasis = 0; in init_5708_serdes()
958 pdev, in init_5708_serdes()
959 pdev->params.phy_addr, in init_5708_serdes()
962 pdev->hw_info.phy_id = val << 16; in init_5708_serdes()
963 DbgMessage1(pdev, INFORM, "Phy Id1 0x%x\n", val); in init_5708_serdes()
966 pdev, in init_5708_serdes()
967 pdev->params.phy_addr, in init_5708_serdes()
970 pdev->hw_info.phy_id |= val & 0xffff; in init_5708_serdes()
971 DbgMessage1(pdev, INFORM, "Phy Id2 0x%x\n", val); in init_5708_serdes()
973 DbgBreakIf((pdev->hw_info.phy_id & 0x0fffffff) == 0x0fffffff || in init_5708_serdes()
974 pdev->hw_info.phy_id == 0); in init_5708_serdes()
978 pdev, in init_5708_serdes()
979 pdev->params.phy_addr, in init_5708_serdes()
983 pdev, in init_5708_serdes()
984 pdev->params.phy_addr, in init_5708_serdes()
990 pdev, in init_5708_serdes()
991 pdev->params.phy_addr, in init_5708_serdes()
997 pdev, in init_5708_serdes()
998 pdev->params.phy_addr, in init_5708_serdes()
1006 if(pdev->hw_info.nvm_hw_config & SHARED_HW_CFG_BACKPLANE_APP) in init_5708_serdes()
1016 pdev, in init_5708_serdes()
1017 pdev->params.phy_addr, in init_5708_serdes()
1023 pdev, in init_5708_serdes()
1024 pdev->params.phy_addr, in init_5708_serdes()
1031 pdev, in init_5708_serdes()
1032 pdev->params.phy_addr, in init_5708_serdes()
1038 pdev, in init_5708_serdes()
1039 pdev->params.phy_addr, in init_5708_serdes()
1054 if(pdev->hw_info.nvm_hw_config & SHARED_HW_CFG_PHY_FIBER_2_5G) in init_5708_serdes()
1065 pdev, in init_5708_serdes()
1066 pdev->params.phy_addr, in init_5708_serdes()
1074 val |= phy_ad_settings(pdev, req_medium, flow_ctrl); in init_5708_serdes()
1083 pdev, in init_5708_serdes()
1084 pdev->params.phy_addr, in init_5708_serdes()
1089 pdev, in init_5708_serdes()
1090 pdev->params.phy_addr, in init_5708_serdes()
1107 pdev, in init_5708_serdes()
1108 pdev->params.phy_addr, in init_5708_serdes()
1113 pdev, in init_5708_serdes()
1114 pdev->params.phy_addr, in init_5708_serdes()
1118 pdev, in init_5708_serdes()
1119 pdev->params.phy_addr, in init_5708_serdes()
1133 pdev, in init_5708_serdes()
1134 pdev->params.phy_addr, in init_5708_serdes()
1139 pdev, in init_5708_serdes()
1140 pdev->params.phy_addr, in init_5708_serdes()
1144 pdev, in init_5708_serdes()
1145 pdev->params.phy_addr, in init_5708_serdes()
1159 pdev, in init_5708_serdes()
1160 pdev->params.phy_addr, in init_5708_serdes()
1174 pdev, in init_5708_serdes()
1175 pdev->params.phy_addr, in init_5708_serdes()
1185 REG_RD(pdev, emac.emac_mode, &val); in init_5708_serdes()
1187 REG_WR(pdev, emac.emac_mode, val); in init_5708_serdes()
1190 if(pdev->params.mtu > MAX_ETHERNET_PACKET_SIZE) in init_5708_serdes()
1193 pdev, in init_5708_serdes()
1194 pdev->params.phy_addr, in init_5708_serdes()
1201 pdev, in init_5708_serdes()
1202 pdev->params.phy_addr, in init_5708_serdes()
1208 SET_MEDIUM_TYPE(pdev->vars.medium, LM_MEDIUM_TYPE_FIBER); in init_5708_serdes()
1209 SET_MEDIUM_SPEED(pdev->vars.medium, speed); in init_5708_serdes()
1210 SET_MEDIUM_DUPLEX(pdev->vars.medium, duplex); in init_5708_serdes()
1212 pdev->vars.cable_is_attached = FALSE; in init_5708_serdes()
1216 pdev, in init_5708_serdes()
1217 pdev->params.phy_addr, in init_5708_serdes()
1224 pdev, in init_5708_serdes()
1225 pdev->params.phy_addr, in init_5708_serdes()
1233 mm_wait(pdev, 10); in init_5708_serdes()
1245 pdev, in init_5708_serdes()
1246 pdev->params.phy_addr, in init_5708_serdes()
1251 pdev->vars.link_status = LM_STATUS_LINK_ACTIVE; in init_5708_serdes()
1252 DbgMessage(pdev, INFORM, "phy init link up\n"); in init_5708_serdes()
1254 pdev->vars.cable_is_attached = TRUE; in init_5708_serdes()
1258 pdev->vars.link_status = LM_STATUS_LINK_DOWN; in init_5708_serdes()
1259 DbgMessage(pdev, INFORM, "phy init link down\n"); in init_5708_serdes()
1274 lm_device_t *pdev, in force_5709_serdes_link() argument
1281 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0x8300); in force_5709_serdes_link()
1284 (void) lm_mread(pdev, pdev->params.phy_addr, 0x10, &val); in force_5709_serdes_link()
1294 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x10, val); in force_5709_serdes_link()
1297 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0xffe0); in force_5709_serdes_link()
1300 (void) lm_mread(pdev, pdev->params.phy_addr, 0x10, &val); in force_5709_serdes_link()
1333 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x10, val); in force_5709_serdes_link()
1339 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0x8300); in force_5709_serdes_link()
1342 (void) lm_mread(pdev, pdev->params.phy_addr, 0x18, &val); in force_5709_serdes_link()
1345 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x18, val); in force_5709_serdes_link()
1358 lm_device_t *pdev, in init_5709_serdes_for_autoneg() argument
1370 if(!(pdev->hw_info.nvm_hw_config & SHARED_HW_CFG_PHY_FIBER_2_5G) || in init_5709_serdes_for_autoneg()
1375 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0x8320); in init_5709_serdes_for_autoneg()
1376 (void) lm_mread(pdev, pdev->params.phy_addr, 0x19, &val); in init_5709_serdes_for_autoneg()
1378 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x19, val); in init_5709_serdes_for_autoneg()
1382 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0x8300); in init_5709_serdes_for_autoneg()
1385 (void) lm_mread(pdev, pdev->params.phy_addr, 0x10, &val); in init_5709_serdes_for_autoneg()
1387 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x10, val); in init_5709_serdes_for_autoneg()
1392 (void) lm_mread(pdev, pdev->params.phy_addr, 0x11, &val); in init_5709_serdes_for_autoneg()
1394 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x11, val); in init_5709_serdes_for_autoneg()
1398 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0x8350); in init_5709_serdes_for_autoneg()
1401 (void) lm_mread(pdev, pdev->params.phy_addr, 0x10, &val); in init_5709_serdes_for_autoneg()
1405 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x10, val); in init_5709_serdes_for_autoneg()
1408 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0x8370); in init_5709_serdes_for_autoneg()
1411 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x12, 0xe000); in init_5709_serdes_for_autoneg()
1414 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0x10); in init_5709_serdes_for_autoneg()
1417 (void) lm_mread(pdev, pdev->params.phy_addr, 0x1, &val); in init_5709_serdes_for_autoneg()
1419 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1, val); in init_5709_serdes_for_autoneg()
1422 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0); in init_5709_serdes_for_autoneg()
1425 (void) lm_mread(pdev, pdev->params.phy_addr, 0x0, &val); in init_5709_serdes_for_autoneg()
1427 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x0, val); in init_5709_serdes_for_autoneg()
1430 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0xffe0); in init_5709_serdes_for_autoneg()
1433 val = phy_ad_settings(pdev, req_medium, flow_ctrl); in init_5709_serdes_for_autoneg()
1443 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x14, val); in init_5709_serdes_for_autoneg()
1446 (void) lm_mread(pdev, pdev->params.phy_addr, 0x10, &val); in init_5709_serdes_for_autoneg()
1448 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x10, val); in init_5709_serdes_for_autoneg()
1460 lm_device_t *pdev, in init_5709_serdes() argument
1478 pdev, in init_5709_serdes()
1479 pdev->hw_info.shmem_base + in init_5709_serdes()
1504 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0xffd0); in init_5709_serdes()
1505 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1e, 0x3800); in init_5709_serdes()
1508 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0xffe0); in init_5709_serdes()
1511 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x10, MII_CTRL_RESET); in init_5709_serdes()
1514 mm_wait(pdev, 5); in init_5709_serdes()
1516 (void) lm_mread(pdev, pdev->params.phy_addr, 0x10, &val); in init_5709_serdes()
1519 mm_wait(pdev, 5); in init_5709_serdes()
1526 (void) lm_mread(pdev, pdev->params.phy_addr, 0x12, &val); in init_5709_serdes()
1527 pdev->hw_info.phy_id = val << 16; in init_5709_serdes()
1528 (void) lm_mread(pdev, pdev->params.phy_addr, 0x13, &val); in init_5709_serdes()
1529 pdev->hw_info.phy_id |= val & 0xffff; in init_5709_serdes()
1540 pdev, in init_5709_serdes()
1547 force_5709_serdes_link(pdev, speed, duplex); in init_5709_serdes()
1553 REG_RD(pdev, emac.emac_mode, &val); in init_5709_serdes()
1555 REG_WR(pdev, emac.emac_mode, val); in init_5709_serdes()
1557 SET_MEDIUM_TYPE(pdev->vars.medium, LM_MEDIUM_TYPE_FIBER); in init_5709_serdes()
1558 SET_MEDIUM_SPEED(pdev->vars.medium, speed); in init_5709_serdes()
1559 SET_MEDIUM_DUPLEX(pdev->vars.medium, duplex); in init_5709_serdes()
1561 pdev->vars.cable_is_attached = FALSE; in init_5709_serdes()
1564 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0xffe0); in init_5709_serdes()
1567 (void) lm_mread(pdev, pdev->params.phy_addr, 0x11, &val); in init_5709_serdes()
1571 (void) lm_mread(pdev, pdev->params.phy_addr, 0x11, &val); in init_5709_serdes()
1577 mm_wait(pdev, 10); in init_5709_serdes()
1588 (void) lm_mread(pdev, pdev->params.phy_addr, 0x11, &val); in init_5709_serdes()
1592 pdev->vars.link_status = LM_STATUS_LINK_ACTIVE; in init_5709_serdes()
1593 pdev->vars.cable_is_attached = TRUE; in init_5709_serdes()
1597 pdev->vars.link_status = LM_STATUS_LINK_DOWN; in init_5709_serdes()
1612 lm_device_t *pdev, in init_5706_serdes() argument
1628 pdev, in init_5706_serdes()
1629 pdev->hw_info.shmem_base + in init_5706_serdes()
1655 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_CTRL_REG, PHY_CTRL_PHY_RESET); in init_5706_serdes()
1658 mm_wait(pdev, 5); in init_5706_serdes()
1660 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_CTRL_REG, &val); in init_5706_serdes()
1664 mm_wait(pdev, 5); in init_5706_serdes()
1673 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_ID1_REG, &val); in init_5706_serdes()
1674 pdev->hw_info.phy_id = val << 16; in init_5706_serdes()
1675 DbgMessage1(pdev, INFORM, "Phy Id1 0x%x\n", val); in init_5706_serdes()
1677 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_ID2_REG, &val); in init_5706_serdes()
1678 pdev->hw_info.phy_id |= val & 0xffff; in init_5706_serdes()
1679 DbgMessage1(pdev, INFORM, "Phy Id2 0x%x\n", val); in init_5706_serdes()
1681 DbgBreakIf((pdev->hw_info.phy_id & 0x0fffffff) == 0x0fffffff || in init_5706_serdes()
1682 pdev->hw_info.phy_id == 0); in init_5706_serdes()
1689 if(CHIP_NUM(pdev) == CHIP_NUM_5706 && in init_5706_serdes()
1690 lm_get_medium(pdev) == LM_MEDIUM_TYPE_FIBER) in init_5706_serdes()
1692 REG_WR(pdev, misc.misc_gp_hw_ctl0, in init_5706_serdes()
1703 val |= phy_ad_settings(pdev, req_medium, flow_ctrl); in init_5706_serdes()
1705 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_AN_AD_REG, val); in init_5706_serdes()
1711 DbgMessage(pdev, INFORM, "enable serdes_fallback_1g\n"); in init_5706_serdes()
1712 pdev->vars.serdes_fallback_select = SERDES_FALLBACK_1G; in init_5706_serdes()
1716 DbgMessage(pdev, INFORM, "enable serdes_fallback_2.5g\n"); in init_5706_serdes()
1717 pdev->vars.serdes_fallback_select = SERDES_FALLBACK_2_5G; in init_5706_serdes()
1721 DbgMessage(pdev, INFORM, "disable serdes_fallback.\n"); in init_5706_serdes()
1722 pdev->vars.serdes_fallback_select = SERDES_FALLBACK_NONE; in init_5706_serdes()
1723 pdev->vars.serdes_fallback_status = SERDES_FALLBACK_NONE; in init_5706_serdes()
1729 if(pdev->vars.serdes_fallback_select != SERDES_FALLBACK_NONE) in init_5706_serdes()
1733 if(pdev->vars.link_status == LM_STATUS_LINK_ACTIVE) in init_5706_serdes()
1735 if(pdev->vars.serdes_fallback_status == SERDES_FALLBACK_1G) in init_5706_serdes()
1739 else if(pdev->vars.serdes_fallback_status == SERDES_FALLBACK_2_5G) in init_5706_serdes()
1754 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_CTRL_REG, val); in init_5706_serdes()
1760 (void) lm_mwrite(pdev, pdev->params.phy_addr, PHY_CTRL_REG, val); in init_5706_serdes()
1768 REG_RD(pdev, emac.emac_mode, &val); in init_5706_serdes()
1770 REG_WR(pdev, emac.emac_mode, val); in init_5706_serdes()
1773 if(pdev->params.mtu > MAX_ETHERNET_PACKET_SIZE) in init_5706_serdes()
1775 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x18, 0x4400); in init_5706_serdes()
1776 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1c, 0xec87); in init_5706_serdes()
1780 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x18, 0x0400); in init_5706_serdes()
1781 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1c, 0xec85); in init_5706_serdes()
1784 SET_MEDIUM_TYPE(pdev->vars.medium, LM_MEDIUM_TYPE_FIBER); in init_5706_serdes()
1785 SET_MEDIUM_SPEED(pdev->vars.medium, speed); in init_5706_serdes()
1786 SET_MEDIUM_DUPLEX(pdev->vars.medium, duplex); in init_5706_serdes()
1788 pdev->vars.cable_is_attached = FALSE; in init_5706_serdes()
1792 val = mii_get_serdes_link_status(pdev); in init_5706_serdes()
1795 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1c, 0x7c00); in init_5706_serdes()
1796 (void) lm_mread(pdev, pdev->params.phy_addr, 0x1c, &val); in init_5706_serdes()
1801 val = mii_get_serdes_link_status(pdev); in init_5706_serdes()
1808 mm_wait(pdev, 10); in init_5706_serdes()
1818 pdev->vars.cable_is_attached = TRUE; in init_5706_serdes()
1822 val = mii_get_serdes_link_status(pdev); in init_5706_serdes()
1826 pdev->vars.link_status = LM_STATUS_LINK_ACTIVE; in init_5706_serdes()
1827 DbgMessage(pdev, INFORM, "phy init link up\n"); in init_5706_serdes()
1831 pdev->vars.link_status = LM_STATUS_LINK_DOWN; in init_5706_serdes()
1832 DbgMessage(pdev, INFORM, "phy init link down\n"); in init_5706_serdes()
1847 lm_device_t *pdev) in init_serdes_or_phy_loopback() argument
1853 pdev, in init_serdes_or_phy_loopback()
1854 pdev->params.phy_addr, in init_serdes_or_phy_loopback()
1859 mm_wait(pdev, 5); in init_serdes_or_phy_loopback()
1861 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_CTRL_REG, &val); in init_serdes_or_phy_loopback()
1865 mm_wait(pdev, 5); in init_serdes_or_phy_loopback()
1873 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_ID1_REG, &val); in init_serdes_or_phy_loopback()
1874 pdev->hw_info.phy_id = val << 16; in init_serdes_or_phy_loopback()
1875 DbgMessage1(pdev, INFORM, "Phy Id1 0x%x\n", val); in init_serdes_or_phy_loopback()
1877 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_ID2_REG, &val); in init_serdes_or_phy_loopback()
1878 pdev->hw_info.phy_id |= val & 0xffff; in init_serdes_or_phy_loopback()
1879 DbgMessage1(pdev, INFORM, "Phy Id2 0x%x\n", val); in init_serdes_or_phy_loopback()
1881 DbgBreakIf((pdev->hw_info.phy_id & 0x0fffffff) == 0x0fffffff || in init_serdes_or_phy_loopback()
1882 pdev->hw_info.phy_id == 0); in init_serdes_or_phy_loopback()
1884 REG_WR(pdev, emac.emac_tx_lengths, 0x26ff); in init_serdes_or_phy_loopback()
1888 pdev, in init_serdes_or_phy_loopback()
1889 pdev->params.phy_addr, in init_serdes_or_phy_loopback()
1905 lm_device_t *pdev) in init_5709_serdes_loopback() argument
1915 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0xffe0); in init_5709_serdes_loopback()
1918 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x10, MII_CTRL_RESET); in init_5709_serdes_loopback()
1921 mm_wait(pdev, 5); in init_5709_serdes_loopback()
1923 (void) lm_mread(pdev, pdev->params.phy_addr, 0x10, &val); in init_5709_serdes_loopback()
1926 mm_wait(pdev, 5); in init_5709_serdes_loopback()
1936 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0xffd0); in init_5709_serdes_loopback()
1937 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1e, 0x3800); in init_5709_serdes_loopback()
1940 (void) lm_mread(pdev, pdev->params.phy_addr, 0x12, &val); in init_5709_serdes_loopback()
1941 pdev->hw_info.phy_id = val << 16; in init_5709_serdes_loopback()
1942 (void) lm_mread(pdev, pdev->params.phy_addr, 0x13, &val); in init_5709_serdes_loopback()
1943 pdev->hw_info.phy_id |= val & 0xffff; in init_5709_serdes_loopback()
1946 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0xffe0); in init_5709_serdes_loopback()
1950 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x10, 0x5140); in init_5709_serdes_loopback()
1963 lm_device_t *pdev, in init_loopback_mac_link() argument
1974 if(CHIP_NUM(pdev) == CHIP_NUM_5709 && in init_loopback_mac_link()
1975 lm_get_medium(pdev) == LM_MEDIUM_TYPE_FIBER) in init_loopback_mac_link()
1977 init_5709_serdes_loopback(pdev); in init_loopback_mac_link()
1981 init_serdes_or_phy_loopback(pdev); in init_loopback_mac_link()
1984 REG_WR(pdev, emac.emac_tx_lengths, 0x26ff); in init_loopback_mac_link()
1986 REG_RD(pdev, emac.emac_mode, &val); in init_loopback_mac_link()
1989 REG_WR(pdev, emac.emac_mode, val); in init_loopback_mac_link()
1991 SET_MEDIUM_TYPE(pdev->vars.medium, LM_MEDIUM_TYPE_PHY_LOOPBACK); in init_loopback_mac_link()
1992 SET_MEDIUM_SPEED(pdev->vars.medium, LM_MEDIUM_SPEED_UNKNOWN); in init_loopback_mac_link()
1993 SET_MEDIUM_DUPLEX(pdev->vars.medium, LM_MEDIUM_FULL_DUPLEX); in init_loopback_mac_link()
1996 pdev->vars.link_status = LM_STATUS_LINK_ACTIVE; in init_loopback_mac_link()
1998 pdev->vars.cable_is_attached = TRUE; in init_loopback_mac_link()
2002 DbgMessage(pdev, INFORM, "Set up MAC loopback mode.\n"); in init_loopback_mac_link()
2006 REG_RD(pdev, emac.emac_mode, &val); in init_loopback_mac_link()
2011 if(CHIP_REV(pdev) == CHIP_REV_FPGA) in init_loopback_mac_link()
2016 REG_WR(pdev, emac.emac_mode, val); in init_loopback_mac_link()
2018 SET_MEDIUM_TYPE(pdev->vars.medium, LM_MEDIUM_TYPE_MAC_LOOPBACK); in init_loopback_mac_link()
2019 SET_MEDIUM_SPEED(pdev->vars.medium, LM_MEDIUM_SPEED_UNKNOWN); in init_loopback_mac_link()
2020 SET_MEDIUM_DUPLEX(pdev->vars.medium, LM_MEDIUM_FULL_DUPLEX); in init_loopback_mac_link()
2023 pdev->vars.link_status = LM_STATUS_LINK_ACTIVE; in init_loopback_mac_link()
2025 pdev->vars.cable_is_attached = TRUE; in init_loopback_mac_link()
2034 pdev->vars.link_status = LM_STATUS_LINK_DOWN; in init_loopback_mac_link()
2036 pdev->vars.cable_is_attached = FALSE; in init_loopback_mac_link()
2040 REG_RD(pdev, hc.hc_attn_bits_enable, &val); in init_loopback_mac_link()
2042 REG_WR(pdev, hc.hc_attn_bits_enable, val); in init_loopback_mac_link()
2056 lm_device_t *pdev, in init_null_phy() argument
2061 DbgMessage(pdev, INFORM, "### init_null_phy\n"); in init_null_phy()
2069 SET_MEDIUM_TYPE(pdev->vars.medium, LM_MEDIUM_TYPE_NULL); in init_null_phy()
2070 SET_MEDIUM_SPEED(pdev->vars.medium, LM_MEDIUM_SPEED_1000MBPS); in init_null_phy()
2071 SET_MEDIUM_DUPLEX(pdev->vars.medium, LM_MEDIUM_FULL_DUPLEX); in init_null_phy()
2073 pdev->vars.cable_is_attached = TRUE; in init_null_phy()
2248 lm_device_t *pdev, in lm_init_remote_phy() argument
2257 DbgBreakIf(pdev->params.enable_remote_phy == FALSE); in lm_init_remote_phy()
2263 pdev, in lm_init_remote_phy()
2264 pdev->hw_info.shmem_base + in lm_init_remote_phy()
2269 pdev, in lm_init_remote_phy()
2270 pdev->hw_info.shmem_base + in lm_init_remote_phy()
2275 pdev, in lm_init_remote_phy()
2276 pdev->hw_info.shmem_base + in lm_init_remote_phy()
2289 pdev, in lm_init_remote_phy()
2290 pdev->hw_info.shmem_base + in lm_init_remote_phy()
2294 (void) lm_submit_fw_cmd(pdev, DRV_MSG_CODE_CMD_SET_LINK); in lm_init_remote_phy()
2308 lm_device_t *pdev, in lm_init_phy() argument
2317 DbgBreakIf(pdev->params.enable_remote_phy); in lm_init_phy()
2326 if(CHIP_REV(pdev) == CHIP_REV_IKOS) in lm_init_phy()
2330 else if(CHIP_REV(pdev) == CHIP_REV_FPGA) in lm_init_phy()
2337 else if(lm_get_medium(pdev) == LM_MEDIUM_TYPE_FIBER) in lm_init_phy()
2365 pdev, in lm_init_phy()
2374 DbgBreakIf(CHIP_NUM(pdev) != CHIP_NUM_5706 && in lm_init_phy()
2375 CHIP_NUM(pdev) != CHIP_NUM_5708 && in lm_init_phy()
2376 CHIP_NUM(pdev) != CHIP_NUM_5709); in lm_init_phy()
2378 if(CHIP_NUM(pdev) == CHIP_NUM_5706) in lm_init_phy()
2381 pdev, in lm_init_phy()
2386 else if(CHIP_NUM(pdev) == CHIP_NUM_5708) in lm_init_phy()
2389 pdev, in lm_init_phy()
2398 pdev, in lm_init_phy()
2409 pdev, in lm_init_phy()
2418 pdev, in lm_init_phy()
2440 lm_device_t *pdev, in get_serdes_phy_ad() argument
2449 if(CHIP_NUM(pdev) == CHIP_NUM_5706 || CHIP_NUM(pdev) == CHIP_NUM_5708) in get_serdes_phy_ad()
2451 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_AN_AD_REG, &val); in get_serdes_phy_ad()
2463 (void) lm_mread(pdev,pdev->params.phy_addr,PHY_LINK_PARTNER_ABILITY_REG,&val); in get_serdes_phy_ad()
2478 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0xffe0); in get_serdes_phy_ad()
2481 (void) lm_mread(pdev, pdev->params.phy_addr, 0x14, &val); in get_serdes_phy_ad()
2494 (void) lm_mread(pdev, pdev->params.phy_addr, 0x15, &val); in get_serdes_phy_ad()
2517 lm_device_t *pdev, in set_mac_flow_control() argument
2529 if(pdev->params.enable_remote_phy) in set_mac_flow_control()
2548 pdev, in set_mac_flow_control()
2549 pdev->hw_info.shmem_base + in set_mac_flow_control()
2567 get_serdes_phy_ad(pdev, &local_phy_ad, &remote_phy_ad); in set_mac_flow_control()
2572 pdev, in set_mac_flow_control()
2573 pdev->params.phy_addr, in set_mac_flow_control()
2578 pdev, in set_mac_flow_control()
2579 pdev->params.phy_addr, in set_mac_flow_control()
2585 DbgMessage(pdev, INFORM, "Local flow control settings.\n"); in set_mac_flow_control()
2589 DbgMessage(pdev, INFORM, " PAUSE capable.\n"); in set_mac_flow_control()
2594 DbgMessage(pdev, INFORM, " ASYM_PAUSE capable.\n"); in set_mac_flow_control()
2597 DbgMessage(pdev, INFORM, "Remote flow control settings.\n"); in set_mac_flow_control()
2601 DbgMessage(pdev, INFORM, " PAUSE capable.\n"); in set_mac_flow_control()
2606 DbgMessage(pdev, INFORM, " ASYM_PAUSE capable.\n"); in set_mac_flow_control()
2613 pdev->params.flow_control_reporting_mode) in set_mac_flow_control()
2622 DbgMessage(pdev, INFORM, "FlowCap: tx/rx\n"); in set_mac_flow_control()
2630 DbgMessage(pdev, INFORM, "FlowCap: rx PAUSE\n"); in set_mac_flow_control()
2639 DbgMessage(pdev, INFORM, "FlowCap: tx/rx\n"); in set_mac_flow_control()
2652 DbgMessage(pdev, INFORM, "FlowCap: tx PAUSE\n"); in set_mac_flow_control()
2663 DbgMessage(pdev, INFORM, "Flow control capabilities.\n"); in set_mac_flow_control()
2667 DbgMessage(pdev, INFORM, " tx PAUSE\n"); in set_mac_flow_control()
2672 DbgMessage(pdev, INFORM, " rx PAUSE\n"); in set_mac_flow_control()
2677 DbgMessage(pdev, INFORM, " none.\n"); in set_mac_flow_control()
2681 REG_RD(pdev, emac.emac_rx_mode, &val); in set_mac_flow_control()
2687 DbgMessage(pdev, INFORM, "Enable rx PAUSE.\n"); in set_mac_flow_control()
2689 REG_WR(pdev, emac.emac_rx_mode, val); in set_mac_flow_control()
2692 REG_RD(pdev, emac.emac_tx_mode, &val); in set_mac_flow_control()
2698 DbgMessage(pdev, INFORM, "Enable tx PAUSE.\n"); in set_mac_flow_control()
2700 REG_WR(pdev, emac.emac_tx_mode, val); in set_mac_flow_control()
2702 for(idx = 0; idx < pdev->rx_info.num_rxq; idx++) in set_mac_flow_control()
2704 rxq = &pdev->rx_info.chain[idx]; in set_mac_flow_control()
2706 pdev, in set_mac_flow_control()
2721 pdev, in set_mac_flow_control()
2739 lm_device_t *pdev, in get_copper_phy_link() argument
2751 DbgMessage(pdev, INFORM, "### get_copper_phy_link\n"); in get_copper_phy_link()
2757 pdev->vars.cable_is_attached = FALSE; in get_copper_phy_link()
2761 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_STATUS_REG, &phy_status); in get_copper_phy_link()
2762 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_STATUS_REG, &phy_status); in get_copper_phy_link()
2765 DbgMessage(pdev, INFORM, "link down.\n"); in get_copper_phy_link()
2767 if(CHIP_REV(pdev) != CHIP_REV_FPGA) in get_copper_phy_link()
2769 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1c, 0x7c00); in get_copper_phy_link()
2770 (void) lm_mread(pdev, pdev->params.phy_addr, 0x1c, &val); in get_copper_phy_link()
2773 pdev->vars.cable_is_attached = TRUE; in get_copper_phy_link()
2780 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_CTRL_REG, &phy_ctrl); in get_copper_phy_link()
2791 pdev->vars.cable_is_attached = TRUE; in get_copper_phy_link()
2804 pdev, in get_copper_phy_link()
2805 pdev->params.phy_addr, in get_copper_phy_link()
2809 pdev, in get_copper_phy_link()
2810 pdev->params.phy_addr, in get_copper_phy_link()
2817 DbgMessage(pdev, INFORM, "detected 1gb full autoneg.\n"); in get_copper_phy_link()
2824 DbgMessage(pdev, INFORM, "detected 1gb half autoneg.\n"); in get_copper_phy_link()
2833 pdev, in get_copper_phy_link()
2834 pdev->params.phy_addr, in get_copper_phy_link()
2839 pdev, in get_copper_phy_link()
2840 pdev->params.phy_addr, in get_copper_phy_link()
2847 DbgMessage(pdev, INFORM, "detected 100mb full autoneg.\n"); in get_copper_phy_link()
2854 DbgMessage(pdev, INFORM, "detected 100mb half autoneg.\n"); in get_copper_phy_link()
2861 DbgMessage(pdev, INFORM, "detected 10mb full autoneg.\n"); in get_copper_phy_link()
2868 DbgMessage(pdev, INFORM, "detected 10mb half autoneg.\n"); in get_copper_phy_link()
2889 DbgMessage(pdev, INFORM, "PHY forced to 100mb.\n"); in get_copper_phy_link()
2894 DbgMessage(pdev, INFORM, "PHY forced to 1gb.\n"); in get_copper_phy_link()
2900 DbgMessage(pdev, INFORM, "PHY forced to 10mb.\n"); in get_copper_phy_link()
2907 DbgMessage(pdev, INFORM, "PHY forced to full duplex.\n"); in get_copper_phy_link()
2913 DbgMessage(pdev, INFORM, "PHY forced to half duplex.\n"); in get_copper_phy_link()
2933 lm_device_t *pdev, in init_mac_link() argument
2941 REG_WR(pdev, emac.emac_tx_lengths, 0x2620); in init_mac_link()
2947 REG_WR(pdev, emac.emac_tx_lengths, 0x26ff); in init_mac_link()
2950 pdev->vars.flow_control = set_mac_flow_control(pdev, medium, flow_ctrl); in init_mac_link()
2954 REG_RD(pdev, emac.emac_mode, &val); in init_mac_link()
2962 if(CHIP_NUM(pdev) == CHIP_NUM_5706) in init_mac_link()
2988 if(CHIP_REV(pdev) == CHIP_REV_FPGA) in init_mac_link()
3010 REG_WR(pdev, emac.emac_mode, val); in init_mac_link()
3013 REG_WR(pdev, emac.emac_status, EMAC_STATUS_LINK_CHANGE); in init_mac_link()
3016 if(pdev->params.phy_int_mode == PHY_INT_MODE_MI_INTERRUPT) in init_mac_link()
3018 REG_WR(pdev, emac.emac_attention_ena, EMAC_ATTENTION_ENA_MI_INT); in init_mac_link()
3022 REG_WR(pdev, emac.emac_attention_ena, EMAC_ATTENTION_ENA_LINK); in init_mac_link()
3026 REG_RD(pdev, hc.hc_attn_bits_enable, &val); in init_mac_link()
3028 if(pdev->params.link_chng_mode == LINK_CHNG_MODE_USE_STATUS_BLOCK) in init_mac_link()
3032 REG_WR(pdev, hc.hc_attn_bits_enable, val); in init_mac_link()
3034 pdev->vars.medium = medium; in init_mac_link()
3035 pdev->vars.link_status = link; in init_mac_link()
3047 lm_device_t *pdev, in serdes_fallback() argument
3057 pdev->vars.serdes_fallback_status = SERDES_FALLBACK_NONE; in serdes_fallback()
3065 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1c, 0x7c00); in serdes_fallback()
3066 (void) lm_mread(pdev, pdev->params.phy_addr, 0x1c, &val); in serdes_fallback()
3072 DbgMessage(pdev, INFORM, "no cable, default to autoneg.\n"); in serdes_fallback()
3075 pdev, in serdes_fallback()
3076 pdev->params.phy_addr, in serdes_fallback()
3091 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x17, 0x0f01); in serdes_fallback()
3092 (void) lm_mread(pdev, pdev->params.phy_addr, 0x15, &intr_exp_status); in serdes_fallback()
3093 (void) lm_mread(pdev, pdev->params.phy_addr, 0x15, &intr_exp_status); in serdes_fallback()
3101 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_CTRL_REG, &phy_ctrl); in serdes_fallback()
3104 DbgMessage(pdev, INFORM, "switch to force mode - 1G full\n"); in serdes_fallback()
3107 pdev, in serdes_fallback()
3108 pdev->params.phy_addr, in serdes_fallback()
3116 DbgMessage(pdev, INFORM, "switch to autoneg mode - 1G full\n"); in serdes_fallback()
3120 pdev, in serdes_fallback()
3121 pdev->params.phy_addr, in serdes_fallback()
3130 mm_wait(pdev, 10); in serdes_fallback()
3133 phy_status = mii_get_serdes_link_status(pdev); in serdes_fallback()
3137 pdev->vars.serdes_fallback_status = fallback_to; in serdes_fallback()
3154 lm_device_t *pdev, in get_5708_serdes_link() argument
3168 pdev->vars.cable_is_attached = FALSE; in get_5708_serdes_link()
3173 pdev, in get_5708_serdes_link()
3174 pdev->params.phy_addr, in get_5708_serdes_link()
3178 pdev, in get_5708_serdes_link()
3179 pdev->params.phy_addr, in get_5708_serdes_link()
3188 mm_wait(pdev, 10); in get_5708_serdes_link()
3191 pdev, in get_5708_serdes_link()
3192 pdev->params.phy_addr, in get_5708_serdes_link()
3199 DbgMessage(pdev, INFORM, "serdes link down.\n"); in get_5708_serdes_link()
3201 pdev->vars.cable_is_attached = FALSE; in get_5708_serdes_link()
3207 pdev->vars.cable_is_attached = TRUE; in get_5708_serdes_link()
3211 pdev, in get_5708_serdes_link()
3212 pdev->params.phy_addr, in get_5708_serdes_link()
3219 pdev, in get_5708_serdes_link()
3220 pdev->params.phy_addr, in get_5708_serdes_link()
3226 pdev, in get_5708_serdes_link()
3227 pdev->params.phy_addr, in get_5708_serdes_link()
3233 DbgMessage(pdev, INFORM, "serdes autoneg to 2.5gb.\n"); in get_5708_serdes_link()
3238 DbgMessage(pdev, INFORM, "serdes autoneg to 1gb.\n"); in get_5708_serdes_link()
3243 DbgMessage(pdev, INFORM, "serdes autoneg to 100mb.\n"); in get_5708_serdes_link()
3249 DbgMessage(pdev, INFORM, "serdes autoneg to 10mb.\n"); in get_5708_serdes_link()
3258 DbgMessage(pdev, INFORM, "serdes autoneg to full duplex.\n"); in get_5708_serdes_link()
3263 pdev, in get_5708_serdes_link()
3264 pdev->params.phy_addr, in get_5708_serdes_link()
3270 DbgMessage(pdev, INFORM, "serdes autoneg to half duplex.\n"); in get_5708_serdes_link()
3274 DbgMessage(pdev, INFORM, "serdes autoneg to full duplex.\n"); in get_5708_serdes_link()
3279 if(pdev->hw_info.nvm_hw_config & SHARED_HW_CFG_BACKPLANE_APP) in get_5708_serdes_link()
3282 pdev, in get_5708_serdes_link()
3283 pdev->params.serdes_pre_emphasis); in get_5708_serdes_link()
3298 DbgMessage(pdev, INFORM, "serdes forced to 2.5gb.\n"); in get_5708_serdes_link()
3303 DbgMessage(pdev, INFORM, "serdes forced to 1gb.\n"); in get_5708_serdes_link()
3308 DbgMessage(pdev, INFORM, "serdes forced to 100mb.\n"); in get_5708_serdes_link()
3313 DbgMessage(pdev, INFORM, "serdes forced to 10mb.\n"); in get_5708_serdes_link()
3319 DbgMessage(pdev, INFORM, "serdes forced to full duplex.\n"); in get_5708_serdes_link()
3324 DbgMessage(pdev, INFORM, "serdes forced to half duplex.\n"); in get_5708_serdes_link()
3343 lm_device_t *pdev, in get_5709_serdes_link() argument
3356 pdev->vars.cable_is_attached = FALSE; in get_5709_serdes_link()
3359 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0x8120); in get_5709_serdes_link()
3362 (void) lm_mread(pdev, pdev->params.phy_addr, 0x1b, &val); in get_5709_serdes_link()
3363 (void) lm_mread(pdev, pdev->params.phy_addr, 0x1b, &val); /* is this needed? */ in get_5709_serdes_link()
3368 REG_RD(pdev, emac.emac_status, &mac_status); in get_5709_serdes_link()
3377 pdev->vars.cable_is_attached = TRUE; in get_5709_serdes_link()
3380 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0xffe0); in get_5709_serdes_link()
3383 (void) lm_mread(pdev, pdev->params.phy_addr, 0x10, &val); in get_5709_serdes_link()
3388 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1f, 0x8120); in get_5709_serdes_link()
3391 (void) lm_mread(pdev, pdev->params.phy_addr, 0x1b, &val); in get_5709_serdes_link()
3475 lm_device_t *pdev, in get_5706_serdes_link() argument
3487 phy_status = mii_get_serdes_link_status(pdev); in get_5706_serdes_link()
3491 DbgMessage(pdev, INFORM, "serdes link up.\n"); in get_5706_serdes_link()
3498 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_CTRL_REG, &phy_ctrl); in get_5706_serdes_link()
3502 pdev, in get_5706_serdes_link()
3503 pdev->params.phy_addr, in get_5706_serdes_link()
3507 pdev, in get_5706_serdes_link()
3508 pdev->params.phy_addr, in get_5706_serdes_link()
3515 DbgMessage(pdev, INFORM, "serdes autoneg to full duplex.\n"); in get_5706_serdes_link()
3521 DbgMessage(pdev, INFORM, "serdes autoneg to half duplex.\n"); in get_5706_serdes_link()
3526 pdev->vars.serdes_fallback_status = SERDES_FALLBACK_NONE; in get_5706_serdes_link()
3532 DbgMessage(pdev, INFORM, "serdes forced to full duplex.\n"); in get_5706_serdes_link()
3538 DbgMessage(pdev, INFORM, "serdes forced to half duplex.\n"); in get_5706_serdes_link()
3543 if(pdev->vars.serdes_fallback_select) in get_5706_serdes_link()
3545 pdev->vars.serdes_fallback_status = SERDES_FALLBACK_1G; in get_5706_serdes_link()
3551 DbgMessage(pdev, INFORM, "serdes link down.\n"); in get_5706_serdes_link()
3554 link = serdes_fallback(pdev, pdev->vars.serdes_fallback_select); in get_5706_serdes_link()
3558 if(pdev->vars.bcm5706s_tx_drv_cur) in get_5706_serdes_link()
3560 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x17, 0x0f03); in get_5706_serdes_link()
3563 pdev, in get_5706_serdes_link()
3564 pdev->params.phy_addr, in get_5706_serdes_link()
3566 pdev->vars.bcm5706s_tx_drv_cur); in get_5706_serdes_link()
3568 pdev->vars.bcm5706s_tx_drv_cur = 0; in get_5706_serdes_link()
3571 pdev->vars.cable_is_attached = TRUE; in get_5706_serdes_link()
3575 (void) lm_mwrite(pdev, pdev->params.phy_addr, 0x1c, 0x7c00); in get_5706_serdes_link()
3576 (void) lm_mread(pdev, pdev->params.phy_addr, 0x1c, &val); in get_5706_serdes_link()
3579 pdev->vars.cable_is_attached = FALSE; in get_5706_serdes_link()
3595 lm_device_t *pdev, in get_remote_phy_link() argument
3603 DbgBreakIf(pdev->params.enable_remote_phy == FALSE); in get_remote_phy_link()
3609 pdev->vars.cable_is_attached = FALSE; in get_remote_phy_link()
3612 pdev, in get_remote_phy_link()
3613 pdev->hw_info.shmem_base + in get_remote_phy_link()
3617 pdev->vars.rphy_status = 0; in get_remote_phy_link()
3621 pdev->vars.rphy_status |= RPHY_STATUS_ACTIVE; in get_remote_phy_link()
3626 pdev->vars.rphy_status |= RPHY_STATUS_MODULE_PRESENT; in get_remote_phy_link()
3635 pdev->vars.cable_is_attached = TRUE; in get_remote_phy_link()
3699 lm_device_t *pdev) in lm_init_mac_link() argument
3706 if(pdev->params.enable_remote_phy) in lm_init_mac_link()
3708 link = get_remote_phy_link(pdev, &medium); in lm_init_mac_link()
3709 init_mac_link(pdev, link, medium, pdev->params.flow_ctrl_cap); in lm_init_mac_link()
3714 switch(GET_MEDIUM_TYPE(pdev->vars.medium)) in lm_init_mac_link()
3717 link = get_copper_phy_link(pdev, &medium); in lm_init_mac_link()
3718 init_mac_link(pdev, link, medium, pdev->params.flow_ctrl_cap); in lm_init_mac_link()
3724 DbgBreakIf(CHIP_NUM(pdev) != CHIP_NUM_5706 && in lm_init_mac_link()
3725 CHIP_NUM(pdev) != CHIP_NUM_5708 && in lm_init_mac_link()
3726 CHIP_NUM(pdev) != CHIP_NUM_5709); in lm_init_mac_link()
3728 if(CHIP_NUM(pdev) == CHIP_NUM_5706) in lm_init_mac_link()
3730 link = get_5706_serdes_link(pdev, &medium); in lm_init_mac_link()
3732 else if(CHIP_NUM(pdev) == CHIP_NUM_5708) in lm_init_mac_link()
3734 link = get_5708_serdes_link(pdev, &medium); in lm_init_mac_link()
3738 link = get_5709_serdes_link(pdev, &medium); in lm_init_mac_link()
3741 init_mac_link(pdev, link, medium, pdev->params.flow_ctrl_cap); in lm_init_mac_link()
3749 pdev, in lm_init_mac_link()
3750 pdev->params.req_medium, in lm_init_mac_link()
3751 pdev->params.flow_ctrl_cap); in lm_init_mac_link()
3756 pdev, in lm_init_mac_link()
3761 pdev->params.flow_ctrl_cap); in lm_init_mac_link()
3774 if(pdev->vars.link_status == LM_STATUS_LINK_ACTIVE) in lm_init_mac_link()
3778 if(lm_get_medium(pdev) == LM_MEDIUM_TYPE_FIBER) in lm_init_mac_link()
3784 switch(GET_MEDIUM_SPEED(pdev->vars.medium)) in lm_init_mac_link()
3787 if(GET_MEDIUM_DUPLEX(pdev->vars.medium) == LM_MEDIUM_FULL_DUPLEX) in lm_init_mac_link()
3798 if(GET_MEDIUM_DUPLEX(pdev->vars.medium) == LM_MEDIUM_FULL_DUPLEX) in lm_init_mac_link()
3809 if(GET_MEDIUM_DUPLEX(pdev->vars.medium) == LM_MEDIUM_FULL_DUPLEX) in lm_init_mac_link()
3820 if(GET_MEDIUM_DUPLEX(pdev->vars.medium) == LM_MEDIUM_FULL_DUPLEX) in lm_init_mac_link()
3832 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_CTRL_REG, &phy_ctrl); in lm_init_mac_link()
3837 (void) lm_mread(pdev, pdev->params.phy_addr, PHY_STATUS_REG, &phy_status); in lm_init_mac_link()
3846 pdev, in lm_init_mac_link()
3847 pdev->params.phy_addr, in lm_init_mac_link()
3857 pdev, in lm_init_mac_link()
3858 pdev->params.phy_addr, in lm_init_mac_link()
3876 pdev, in lm_init_mac_link()
3877 pdev->params.phy_addr, in lm_init_mac_link()
3887 if(pdev->vars.flow_control & LM_FLOW_CONTROL_TRANSMIT_PAUSE) in lm_init_mac_link()
3891 if(pdev->vars.flow_control & LM_FLOW_CONTROL_RECEIVE_PAUSE) in lm_init_mac_link()
3900 pdev, in lm_init_mac_link()
3901 pdev->hw_info.shmem_base + in lm_init_mac_link()
3917 lm_device_t *pdev, in lm_service_phy_int() argument
3927 if(pdev->params.link_chng_mode == LINK_CHNG_MODE_USE_STATUS_REG) in lm_service_phy_int()
3929 REG_RD(pdev, emac.emac_status, &val); in lm_service_phy_int()
3930 if(pdev->params.phy_int_mode == PHY_INT_MODE_MI_INTERRUPT) in lm_service_phy_int()
3946 GET_ATTN_CHNG_BITS(pdev, &asserted_attns, &deasserted_attns); in lm_service_phy_int()
3956 pdev, in lm_service_phy_int()
3965 pdev, in lm_service_phy_int()
3971 if(link_chng || force_service_int || pdev->params.enable_remote_phy) in lm_service_phy_int()
3973 (void) lm_init_mac_link(pdev); in lm_service_phy_int()
3975 mm_indicate_link(pdev, pdev->vars.link_status, pdev->vars.medium); in lm_service_phy_int()
3988 lm_device_t *pdev) in lm_get_medium() argument
3993 if(CHIP_REV(pdev) == CHIP_REV_IKOS) in lm_get_medium()
3998 if(CHIP_REV(pdev) == CHIP_REV_FPGA) in lm_get_medium()
4003 if(CHIP_NUM(pdev) == CHIP_NUM_5706 || CHIP_NUM(pdev) == CHIP_NUM_5708) in lm_get_medium()
4005 if(CHIP_BOND_ID(pdev) & CHIP_BOND_ID_SERDES_BIT) in lm_get_medium()
4013 if(CHIP_NUM(pdev) == CHIP_NUM_5709) in lm_get_medium()
4015 REG_RD(pdev, misc.misc_dual_media_ctrl, &val); in lm_get_medium()
4064 decode |= pdev->hw_info.mac_id << 4; in lm_get_medium()