Lines Matching refs:hw

37 static s32 e1000_wait_autoneg(struct e1000_hw *hw);
38 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
41 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
70 void e1000_init_phy_ops_generic(struct e1000_hw *hw) in e1000_init_phy_ops_generic() argument
72 struct e1000_phy_info *phy = &hw->phy; in e1000_init_phy_ops_generic()
107 s32 e1000_null_set_page(struct e1000_hw E1000_UNUSEDARG *hw, in e1000_null_set_page() argument
118 s32 e1000_null_read_reg(struct e1000_hw E1000_UNUSEDARG *hw, in e1000_null_read_reg() argument
129 void e1000_null_phy_generic(struct e1000_hw E1000_UNUSEDARG *hw) in e1000_null_phy_generic() argument
139 s32 e1000_null_lplu_state(struct e1000_hw E1000_UNUSEDARG *hw, in e1000_null_lplu_state() argument
150 s32 e1000_null_write_reg(struct e1000_hw E1000_UNUSEDARG *hw, in e1000_null_write_reg() argument
165 s32 e1000_read_i2c_byte_null(struct e1000_hw E1000_UNUSEDARG *hw, in e1000_read_i2c_byte_null() argument
182 s32 e1000_write_i2c_byte_null(struct e1000_hw E1000_UNUSEDARG *hw, in e1000_write_i2c_byte_null() argument
199 s32 e1000_check_reset_block_generic(struct e1000_hw *hw) in e1000_check_reset_block_generic() argument
205 manc = E1000_READ_REG(hw, E1000_MANC); in e1000_check_reset_block_generic()
218 s32 e1000_get_phy_id(struct e1000_hw *hw) in e1000_get_phy_id() argument
220 struct e1000_phy_info *phy = &hw->phy; in e1000_get_phy_id()
231 ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id); in e1000_get_phy_id()
237 ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id); in e1000_get_phy_id()
259 s32 e1000_phy_reset_dsp_generic(struct e1000_hw *hw) in e1000_phy_reset_dsp_generic() argument
265 if (!hw->phy.ops.write_reg) in e1000_phy_reset_dsp_generic()
268 ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xC1); in e1000_phy_reset_dsp_generic()
272 return hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0); in e1000_phy_reset_dsp_generic()
284 s32 e1000_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_mdic() argument
286 struct e1000_phy_info *phy = &hw->phy; in e1000_read_phy_reg_mdic()
304 E1000_WRITE_REG(hw, E1000_MDIC, mdic); in e1000_read_phy_reg_mdic()
312 mdic = E1000_READ_REG(hw, E1000_MDIC); in e1000_read_phy_reg_mdic()
335 if (hw->mac.type == e1000_pch2lan) in e1000_read_phy_reg_mdic()
349 s32 e1000_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_mdic() argument
351 struct e1000_phy_info *phy = &hw->phy; in e1000_write_phy_reg_mdic()
370 E1000_WRITE_REG(hw, E1000_MDIC, mdic); in e1000_write_phy_reg_mdic()
378 mdic = E1000_READ_REG(hw, E1000_MDIC); in e1000_write_phy_reg_mdic()
400 if (hw->mac.type == e1000_pch2lan) in e1000_write_phy_reg_mdic()
415 s32 e1000_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_i2c() argument
417 struct e1000_phy_info *phy = &hw->phy; in e1000_read_phy_reg_i2c()
430 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); in e1000_read_phy_reg_i2c()
435 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD); in e1000_read_phy_reg_i2c()
462 s32 e1000_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_i2c() argument
464 struct e1000_phy_info *phy = &hw->phy; in e1000_write_phy_reg_i2c()
471 if ((hw->phy.addr == 0) || (hw->phy.addr > 7)) { in e1000_write_phy_reg_i2c()
473 hw->phy.addr); in e1000_write_phy_reg_i2c()
489 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); in e1000_write_phy_reg_i2c()
494 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD); in e1000_write_phy_reg_i2c()
523 s32 e1000_read_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 *data) in e1000_read_sfp_data_byte() argument
543 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); in e1000_read_sfp_data_byte()
548 data_local = E1000_READ_REG(hw, E1000_I2CCMD); in e1000_read_sfp_data_byte()
578 s32 e1000_write_sfp_data_byte(struct e1000_hw *hw, u16 offset, u8 data) in e1000_write_sfp_data_byte() argument
602 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); in e1000_write_sfp_data_byte()
608 i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD); in e1000_write_sfp_data_byte()
621 E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd); in e1000_write_sfp_data_byte()
648 s32 e1000_read_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_m88() argument
654 if (!hw->phy.ops.acquire) in e1000_read_phy_reg_m88()
657 ret_val = hw->phy.ops.acquire(hw); in e1000_read_phy_reg_m88()
661 ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000_read_phy_reg_m88()
664 hw->phy.ops.release(hw); in e1000_read_phy_reg_m88()
678 s32 e1000_write_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_m88() argument
684 if (!hw->phy.ops.acquire) in e1000_write_phy_reg_m88()
687 ret_val = hw->phy.ops.acquire(hw); in e1000_write_phy_reg_m88()
691 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000_write_phy_reg_m88()
694 hw->phy.ops.release(hw); in e1000_write_phy_reg_m88()
708 s32 e1000_set_page_igp(struct e1000_hw *hw, u16 page) in e1000_set_page_igp() argument
714 hw->phy.addr = 1; in e1000_set_page_igp()
716 return e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, page); in e1000_set_page_igp()
730 static s32 __e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data, in __e1000_read_phy_reg_igp() argument
738 if (!hw->phy.ops.acquire) in __e1000_read_phy_reg_igp()
741 ret_val = hw->phy.ops.acquire(hw); in __e1000_read_phy_reg_igp()
747 ret_val = e1000_write_phy_reg_mdic(hw, in __e1000_read_phy_reg_igp()
751 ret_val = e1000_read_phy_reg_mdic(hw, in __e1000_read_phy_reg_igp()
755 hw->phy.ops.release(hw); in __e1000_read_phy_reg_igp()
770 s32 e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_igp() argument
772 return __e1000_read_phy_reg_igp(hw, offset, data, FALSE); in e1000_read_phy_reg_igp()
784 s32 e1000_read_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_igp_locked() argument
786 return __e1000_read_phy_reg_igp(hw, offset, data, TRUE); in e1000_read_phy_reg_igp_locked()
799 static s32 __e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data, in __e1000_write_phy_reg_igp() argument
807 if (!hw->phy.ops.acquire) in __e1000_write_phy_reg_igp()
810 ret_val = hw->phy.ops.acquire(hw); in __e1000_write_phy_reg_igp()
816 ret_val = e1000_write_phy_reg_mdic(hw, in __e1000_write_phy_reg_igp()
820 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & in __e1000_write_phy_reg_igp()
824 hw->phy.ops.release(hw); in __e1000_write_phy_reg_igp()
838 s32 e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_igp() argument
840 return __e1000_write_phy_reg_igp(hw, offset, data, FALSE); in e1000_write_phy_reg_igp()
852 s32 e1000_write_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_igp_locked() argument
854 return __e1000_write_phy_reg_igp(hw, offset, data, TRUE); in e1000_write_phy_reg_igp_locked()
868 static s32 __e1000_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data, in __e1000_read_kmrn_reg() argument
878 if (!hw->phy.ops.acquire) in __e1000_read_kmrn_reg()
881 ret_val = hw->phy.ops.acquire(hw); in __e1000_read_kmrn_reg()
888 E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta); in __e1000_read_kmrn_reg()
889 E1000_WRITE_FLUSH(hw); in __e1000_read_kmrn_reg()
893 kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA); in __e1000_read_kmrn_reg()
897 hw->phy.ops.release(hw); in __e1000_read_kmrn_reg()
912 s32 e1000_read_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_kmrn_reg_generic() argument
914 return __e1000_read_kmrn_reg(hw, offset, data, FALSE); in e1000_read_kmrn_reg_generic()
927 s32 e1000_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_kmrn_reg_locked() argument
929 return __e1000_read_kmrn_reg(hw, offset, data, TRUE); in e1000_read_kmrn_reg_locked()
943 static s32 __e1000_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data, in __e1000_write_kmrn_reg() argument
953 if (!hw->phy.ops.acquire) in __e1000_write_kmrn_reg()
956 ret_val = hw->phy.ops.acquire(hw); in __e1000_write_kmrn_reg()
963 E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta); in __e1000_write_kmrn_reg()
964 E1000_WRITE_FLUSH(hw); in __e1000_write_kmrn_reg()
969 hw->phy.ops.release(hw); in __e1000_write_kmrn_reg()
983 s32 e1000_write_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_kmrn_reg_generic() argument
985 return __e1000_write_kmrn_reg(hw, offset, data, FALSE); in e1000_write_kmrn_reg_generic()
997 s32 e1000_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_kmrn_reg_locked() argument
999 return __e1000_write_kmrn_reg(hw, offset, data, TRUE); in e1000_write_kmrn_reg_locked()
1008 static s32 e1000_set_master_slave_mode(struct e1000_hw *hw) in e1000_set_master_slave_mode() argument
1014 ret_val = hw->phy.ops.read_reg(hw, PHY_1000T_CTRL, &phy_data); in e1000_set_master_slave_mode()
1019 hw->phy.original_ms_type = (phy_data & CR_1000T_MS_ENABLE) ? in e1000_set_master_slave_mode()
1024 switch (hw->phy.ms_type) { in e1000_set_master_slave_mode()
1039 return hw->phy.ops.write_reg(hw, PHY_1000T_CTRL, phy_data); in e1000_set_master_slave_mode()
1048 s32 e1000_copper_link_setup_82577(struct e1000_hw *hw) in e1000_copper_link_setup_82577() argument
1055 if (hw->phy.type == e1000_phy_82580) { in e1000_copper_link_setup_82577()
1056 ret_val = hw->phy.ops.reset(hw); in e1000_copper_link_setup_82577()
1064 ret_val = hw->phy.ops.read_reg(hw, I82577_CFG_REG, &phy_data); in e1000_copper_link_setup_82577()
1073 ret_val = hw->phy.ops.write_reg(hw, I82577_CFG_REG, phy_data); in e1000_copper_link_setup_82577()
1078 ret_val = hw->phy.ops.read_reg(hw, I82577_PHY_CTRL_2, &phy_data); in e1000_copper_link_setup_82577()
1087 switch (hw->phy.mdix) { in e1000_copper_link_setup_82577()
1098 ret_val = hw->phy.ops.write_reg(hw, I82577_PHY_CTRL_2, phy_data); in e1000_copper_link_setup_82577()
1102 return e1000_set_master_slave_mode(hw); in e1000_copper_link_setup_82577()
1112 s32 e1000_copper_link_setup_m88(struct e1000_hw *hw) in e1000_copper_link_setup_m88() argument
1114 struct e1000_phy_info *phy = &hw->phy; in e1000_copper_link_setup_m88()
1122 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); in e1000_copper_link_setup_m88()
1170 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, in e1000_copper_link_setup_m88()
1175 ret_val = phy->ops.commit(hw); in e1000_copper_link_setup_m88()
1185 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data); in e1000_copper_link_setup_m88()
1195 ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, in e1000_copper_link_setup_m88()
1214 ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, in e1000_copper_link_setup_m88()
1222 ret_val = phy->ops.write_reg(hw, 29, 0x0003); in e1000_copper_link_setup_m88()
1227 ret_val = phy->ops.write_reg(hw, 30, 0x0000); in e1000_copper_link_setup_m88()
1233 ret_val = phy->ops.commit(hw); in e1000_copper_link_setup_m88()
1240 ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, in e1000_copper_link_setup_m88()
1248 ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, in e1000_copper_link_setup_m88()
1264 s32 e1000_copper_link_setup_m88_gen2(struct e1000_hw *hw) in e1000_copper_link_setup_m88_gen2() argument
1266 struct e1000_phy_info *phy = &hw->phy; in e1000_copper_link_setup_m88_gen2()
1274 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); in e1000_copper_link_setup_m88_gen2()
1321 phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data); in e1000_copper_link_setup_m88_gen2()
1325 ret_val = phy->ops.commit(hw); in e1000_copper_link_setup_m88_gen2()
1336 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data); in e1000_copper_link_setup_m88_gen2()
1341 ret_val = phy->ops.commit(hw); in e1000_copper_link_setup_m88_gen2()
1347 ret_val = e1000_set_master_slave_mode(hw); in e1000_copper_link_setup_m88_gen2()
1361 s32 e1000_copper_link_setup_igp(struct e1000_hw *hw) in e1000_copper_link_setup_igp() argument
1363 struct e1000_phy_info *phy = &hw->phy; in e1000_copper_link_setup_igp()
1370 ret_val = hw->phy.ops.reset(hw); in e1000_copper_link_setup_igp()
1386 ret_val = hw->phy.ops.set_d3_lplu_state(hw, FALSE); in e1000_copper_link_setup_igp()
1394 if (hw->phy.ops.set_d0_lplu_state) { in e1000_copper_link_setup_igp()
1395 ret_val = hw->phy.ops.set_d0_lplu_state(hw, FALSE); in e1000_copper_link_setup_igp()
1402 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &data); in e1000_copper_link_setup_igp()
1420 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, data); in e1000_copper_link_setup_igp()
1425 if (hw->mac.autoneg) { in e1000_copper_link_setup_igp()
1432 ret_val = phy->ops.read_reg(hw, in e1000_copper_link_setup_igp()
1439 ret_val = phy->ops.write_reg(hw, in e1000_copper_link_setup_igp()
1446 ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data); in e1000_copper_link_setup_igp()
1451 ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data); in e1000_copper_link_setup_igp()
1456 ret_val = e1000_set_master_slave_mode(hw); in e1000_copper_link_setup_igp()
1471 s32 e1000_phy_setup_autoneg(struct e1000_hw *hw) in e1000_phy_setup_autoneg() argument
1473 struct e1000_phy_info *phy = &hw->phy; in e1000_phy_setup_autoneg()
1483 ret_val = phy->ops.read_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg); in e1000_phy_setup_autoneg()
1489 ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, in e1000_phy_setup_autoneg()
1565 switch (hw->fc.current_mode) { in e1000_phy_setup_autoneg()
1602 ret_val = phy->ops.write_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg); in e1000_phy_setup_autoneg()
1609 ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, in e1000_phy_setup_autoneg()
1624 s32 e1000_copper_link_autoneg(struct e1000_hw *hw) in e1000_copper_link_autoneg() argument
1626 struct e1000_phy_info *phy = &hw->phy; in e1000_copper_link_autoneg()
1644 ret_val = e1000_phy_setup_autoneg(hw); in e1000_copper_link_autoneg()
1654 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl); in e1000_copper_link_autoneg()
1659 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_ctrl); in e1000_copper_link_autoneg()
1667 ret_val = e1000_wait_autoneg(hw); in e1000_copper_link_autoneg()
1674 hw->mac.get_link_status = TRUE; in e1000_copper_link_autoneg()
1688 s32 e1000_setup_copper_link_generic(struct e1000_hw *hw) in e1000_setup_copper_link_generic() argument
1695 if (hw->mac.autoneg) { in e1000_setup_copper_link_generic()
1699 ret_val = e1000_copper_link_autoneg(hw); in e1000_setup_copper_link_generic()
1707 ret_val = hw->phy.ops.force_speed_duplex(hw); in e1000_setup_copper_link_generic()
1717 ret_val = e1000_phy_has_link_generic(hw, COPPER_LINK_UP_LIMIT, 10, in e1000_setup_copper_link_generic()
1724 hw->mac.ops.config_collision_dist(hw); in e1000_setup_copper_link_generic()
1725 ret_val = e1000_config_fc_after_link_up_generic(hw); in e1000_setup_copper_link_generic()
1741 s32 e1000_phy_force_speed_duplex_igp(struct e1000_hw *hw) in e1000_phy_force_speed_duplex_igp() argument
1743 struct e1000_phy_info *phy = &hw->phy; in e1000_phy_force_speed_duplex_igp()
1750 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data); in e1000_phy_force_speed_duplex_igp()
1754 e1000_phy_force_speed_duplex_setup(hw, &phy_data); in e1000_phy_force_speed_duplex_igp()
1756 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data); in e1000_phy_force_speed_duplex_igp()
1763 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data); in e1000_phy_force_speed_duplex_igp()
1770 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data); in e1000_phy_force_speed_duplex_igp()
1781 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_igp()
1790 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_igp()
1807 s32 e1000_phy_force_speed_duplex_m88(struct e1000_hw *hw) in e1000_phy_force_speed_duplex_m88() argument
1809 struct e1000_phy_info *phy = &hw->phy; in e1000_phy_force_speed_duplex_m88()
1821 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, in e1000_phy_force_speed_duplex_m88()
1827 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, in e1000_phy_force_speed_duplex_m88()
1835 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data); in e1000_phy_force_speed_duplex_m88()
1839 e1000_phy_force_speed_duplex_setup(hw, &phy_data); in e1000_phy_force_speed_duplex_m88()
1841 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data); in e1000_phy_force_speed_duplex_m88()
1846 ret_val = hw->phy.ops.commit(hw); in e1000_phy_force_speed_duplex_m88()
1853 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_m88()
1861 switch (hw->phy.id) { in e1000_phy_force_speed_duplex_m88()
1871 if (hw->phy.type != e1000_phy_m88) in e1000_phy_force_speed_duplex_m88()
1882 ret_val = phy->ops.write_reg(hw, in e1000_phy_force_speed_duplex_m88()
1887 ret_val = e1000_phy_reset_dsp_generic(hw); in e1000_phy_force_speed_duplex_m88()
1894 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_m88()
1900 if (hw->phy.type != e1000_phy_m88) in e1000_phy_force_speed_duplex_m88()
1903 if (hw->phy.id == I347AT4_E_PHY_ID || in e1000_phy_force_speed_duplex_m88()
1904 hw->phy.id == M88E1340M_E_PHY_ID || in e1000_phy_force_speed_duplex_m88()
1905 hw->phy.id == M88E1112_E_PHY_ID) in e1000_phy_force_speed_duplex_m88()
1907 if (hw->phy.id == I210_I_PHY_ID) in e1000_phy_force_speed_duplex_m88()
1909 if ((hw->phy.id == M88E1543_E_PHY_ID) || in e1000_phy_force_speed_duplex_m88()
1910 (hw->phy.id == M88E1512_E_PHY_ID)) in e1000_phy_force_speed_duplex_m88()
1912 ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data); in e1000_phy_force_speed_duplex_m88()
1921 ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data); in e1000_phy_force_speed_duplex_m88()
1928 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); in e1000_phy_force_speed_duplex_m88()
1933 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data); in e1000_phy_force_speed_duplex_m88()
1946 s32 e1000_phy_force_speed_duplex_ife(struct e1000_hw *hw) in e1000_phy_force_speed_duplex_ife() argument
1948 struct e1000_phy_info *phy = &hw->phy; in e1000_phy_force_speed_duplex_ife()
1955 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &data); in e1000_phy_force_speed_duplex_ife()
1959 e1000_phy_force_speed_duplex_setup(hw, &data); in e1000_phy_force_speed_duplex_ife()
1961 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, data); in e1000_phy_force_speed_duplex_ife()
1966 ret_val = phy->ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, &data); in e1000_phy_force_speed_duplex_ife()
1973 ret_val = phy->ops.write_reg(hw, IFE_PHY_MDIX_CONTROL, data); in e1000_phy_force_speed_duplex_ife()
1984 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_ife()
1993 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_ife()
2014 void e1000_phy_force_speed_duplex_setup(struct e1000_hw *hw, u16 *phy_ctrl) in e1000_phy_force_speed_duplex_setup() argument
2016 struct e1000_mac_info *mac = &hw->mac; in e1000_phy_force_speed_duplex_setup()
2022 hw->fc.current_mode = e1000_fc_none; in e1000_phy_force_speed_duplex_setup()
2025 ctrl = E1000_READ_REG(hw, E1000_CTRL); in e1000_phy_force_speed_duplex_setup()
2058 hw->mac.ops.config_collision_dist(hw); in e1000_phy_force_speed_duplex_setup()
2060 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); in e1000_phy_force_speed_duplex_setup()
2077 s32 e1000_set_d3_lplu_state_generic(struct e1000_hw *hw, bool active) in e1000_set_d3_lplu_state_generic() argument
2079 struct e1000_phy_info *phy = &hw->phy; in e1000_set_d3_lplu_state_generic()
2085 if (!hw->phy.ops.read_reg) in e1000_set_d3_lplu_state_generic()
2088 ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data); in e1000_set_d3_lplu_state_generic()
2094 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, in e1000_set_d3_lplu_state_generic()
2104 ret_val = phy->ops.read_reg(hw, in e1000_set_d3_lplu_state_generic()
2111 ret_val = phy->ops.write_reg(hw, in e1000_set_d3_lplu_state_generic()
2117 ret_val = phy->ops.read_reg(hw, in e1000_set_d3_lplu_state_generic()
2124 ret_val = phy->ops.write_reg(hw, in e1000_set_d3_lplu_state_generic()
2134 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, in e1000_set_d3_lplu_state_generic()
2140 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG, in e1000_set_d3_lplu_state_generic()
2146 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG, in e1000_set_d3_lplu_state_generic()
2161 s32 e1000_check_downshift_generic(struct e1000_hw *hw) in e1000_check_downshift_generic() argument
2163 struct e1000_phy_info *phy = &hw->phy; in e1000_check_downshift_generic()
2190 ret_val = phy->ops.read_reg(hw, offset, &phy_data); in e1000_check_downshift_generic()
2206 s32 e1000_check_polarity_m88(struct e1000_hw *hw) in e1000_check_polarity_m88() argument
2208 struct e1000_phy_info *phy = &hw->phy; in e1000_check_polarity_m88()
2214 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &data); in e1000_check_polarity_m88()
2233 s32 e1000_check_polarity_igp(struct e1000_hw *hw) in e1000_check_polarity_igp() argument
2235 struct e1000_phy_info *phy = &hw->phy; in e1000_check_polarity_igp()
2244 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data); in e1000_check_polarity_igp()
2260 ret_val = phy->ops.read_reg(hw, offset, &data); in e1000_check_polarity_igp()
2276 s32 e1000_check_polarity_ife(struct e1000_hw *hw) in e1000_check_polarity_ife() argument
2278 struct e1000_phy_info *phy = &hw->phy; in e1000_check_polarity_ife()
2294 ret_val = phy->ops.read_reg(hw, offset, &phy_data); in e1000_check_polarity_ife()
2311 static s32 e1000_wait_autoneg(struct e1000_hw *hw) in e1000_wait_autoneg() argument
2318 if (!hw->phy.ops.read_reg) in e1000_wait_autoneg()
2323 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); in e1000_wait_autoneg()
2326 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); in e1000_wait_autoneg()
2349 s32 e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations, in e1000_phy_has_link_generic() argument
2357 if (!hw->phy.ops.read_reg) in e1000_phy_has_link_generic()
2365 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); in e1000_phy_has_link_generic()
2376 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status); in e1000_phy_has_link_generic()
2407 s32 e1000_get_cable_length_m88(struct e1000_hw *hw) in e1000_get_cable_length_m88() argument
2409 struct e1000_phy_info *phy = &hw->phy; in e1000_get_cable_length_m88()
2415 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data); in e1000_get_cable_length_m88()
2433 s32 e1000_get_cable_length_m88_gen2(struct e1000_hw *hw) in e1000_get_cable_length_m88_gen2() argument
2435 struct e1000_phy_info *phy = &hw->phy; in e1000_get_cable_length_m88_gen2()
2442 switch (hw->phy.id) { in e1000_get_cable_length_m88_gen2()
2445 ret_val = phy->ops.read_reg(hw, (0x7 << GS40G_PAGE_SHIFT) + in e1000_get_cable_length_m88_gen2()
2452 ret_val = phy->ops.read_reg(hw, (0x7 << GS40G_PAGE_SHIFT) + in e1000_get_cable_length_m88_gen2()
2469 ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT, in e1000_get_cable_length_m88_gen2()
2474 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x07); in e1000_get_cable_length_m88_gen2()
2479 ret_val = phy->ops.read_reg(hw, (I347AT4_PCDL + phy->addr), in e1000_get_cable_length_m88_gen2()
2485 ret_val = phy->ops.read_reg(hw, I347AT4_PCDC, &phy_data2); in e1000_get_cable_length_m88_gen2()
2497 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, in e1000_get_cable_length_m88_gen2()
2505 ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT, in e1000_get_cable_length_m88_gen2()
2510 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x05); in e1000_get_cable_length_m88_gen2()
2514 ret_val = phy->ops.read_reg(hw, M88E1112_VCT_DSP_DISTANCE, in e1000_get_cable_length_m88_gen2()
2532 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, in e1000_get_cable_length_m88_gen2()
2556 s32 e1000_get_cable_length_igp_2(struct e1000_hw *hw) in e1000_get_cable_length_igp_2() argument
2558 struct e1000_phy_info *phy = &hw->phy; in e1000_get_cable_length_igp_2()
2574 ret_val = phy->ops.read_reg(hw, agc_reg_array[i], &phy_data); in e1000_get_cable_length_igp_2()
2626 s32 e1000_get_phy_info_m88(struct e1000_hw *hw) in e1000_get_phy_info_m88() argument
2628 struct e1000_phy_info *phy = &hw->phy; in e1000_get_phy_info_m88()
2640 ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link); in e1000_get_phy_info_m88()
2649 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); in e1000_get_phy_info_m88()
2656 ret_val = e1000_check_polarity_m88(hw); in e1000_get_phy_info_m88()
2660 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data); in e1000_get_phy_info_m88()
2667 ret_val = hw->phy.ops.get_cable_length(hw); in e1000_get_phy_info_m88()
2671 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &phy_data); in e1000_get_phy_info_m88()
2701 s32 e1000_get_phy_info_igp(struct e1000_hw *hw) in e1000_get_phy_info_igp() argument
2703 struct e1000_phy_info *phy = &hw->phy; in e1000_get_phy_info_igp()
2710 ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link); in e1000_get_phy_info_igp()
2721 ret_val = e1000_check_polarity_igp(hw); in e1000_get_phy_info_igp()
2725 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data); in e1000_get_phy_info_igp()
2733 ret_val = phy->ops.get_cable_length(hw); in e1000_get_phy_info_igp()
2737 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data); in e1000_get_phy_info_igp()
2763 s32 e1000_get_phy_info_ife(struct e1000_hw *hw) in e1000_get_phy_info_ife() argument
2765 struct e1000_phy_info *phy = &hw->phy; in e1000_get_phy_info_ife()
2772 ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link); in e1000_get_phy_info_ife()
2781 ret_val = phy->ops.read_reg(hw, IFE_PHY_SPECIAL_CONTROL, &data); in e1000_get_phy_info_ife()
2787 ret_val = e1000_check_polarity_ife(hw); in e1000_get_phy_info_ife()
2797 ret_val = phy->ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, &data); in e1000_get_phy_info_ife()
2818 s32 e1000_phy_sw_reset_generic(struct e1000_hw *hw) in e1000_phy_sw_reset_generic() argument
2825 if (!hw->phy.ops.read_reg) in e1000_phy_sw_reset_generic()
2828 ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_ctrl); in e1000_phy_sw_reset_generic()
2833 ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_ctrl); in e1000_phy_sw_reset_generic()
2851 s32 e1000_phy_hw_reset_generic(struct e1000_hw *hw) in e1000_phy_hw_reset_generic() argument
2853 struct e1000_phy_info *phy = &hw->phy; in e1000_phy_hw_reset_generic()
2860 ret_val = phy->ops.check_reset_block(hw); in e1000_phy_hw_reset_generic()
2865 ret_val = phy->ops.acquire(hw); in e1000_phy_hw_reset_generic()
2869 ctrl = E1000_READ_REG(hw, E1000_CTRL); in e1000_phy_hw_reset_generic()
2870 E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_PHY_RST); in e1000_phy_hw_reset_generic()
2871 E1000_WRITE_FLUSH(hw); in e1000_phy_hw_reset_generic()
2875 E1000_WRITE_REG(hw, E1000_CTRL, ctrl); in e1000_phy_hw_reset_generic()
2876 E1000_WRITE_FLUSH(hw); in e1000_phy_hw_reset_generic()
2880 phy->ops.release(hw); in e1000_phy_hw_reset_generic()
2882 return phy->ops.get_cfg_done(hw); in e1000_phy_hw_reset_generic()
2892 s32 e1000_get_cfg_done_generic(struct e1000_hw E1000_UNUSEDARG *hw) in e1000_get_cfg_done_generic() argument
2907 s32 e1000_phy_init_script_igp3(struct e1000_hw *hw) in e1000_phy_init_script_igp3() argument
2913 hw->phy.ops.write_reg(hw, 0x2F5B, 0x9018); in e1000_phy_init_script_igp3()
2915 hw->phy.ops.write_reg(hw, 0x2F52, 0x0000); in e1000_phy_init_script_igp3()
2917 hw->phy.ops.write_reg(hw, 0x2FB1, 0x8B24); in e1000_phy_init_script_igp3()
2919 hw->phy.ops.write_reg(hw, 0x2FB2, 0xF8F0); in e1000_phy_init_script_igp3()
2921 hw->phy.ops.write_reg(hw, 0x2010, 0x10B0); in e1000_phy_init_script_igp3()
2923 hw->phy.ops.write_reg(hw, 0x2011, 0x0000); in e1000_phy_init_script_igp3()
2925 hw->phy.ops.write_reg(hw, 0x20DD, 0x249A); in e1000_phy_init_script_igp3()
2927 hw->phy.ops.write_reg(hw, 0x20DE, 0x00D3); in e1000_phy_init_script_igp3()
2929 hw->phy.ops.write_reg(hw, 0x28B4, 0x04CE); in e1000_phy_init_script_igp3()
2931 hw->phy.ops.write_reg(hw, 0x2F70, 0x29E4); in e1000_phy_init_script_igp3()
2933 hw->phy.ops.write_reg(hw, 0x0000, 0x0140); in e1000_phy_init_script_igp3()
2935 hw->phy.ops.write_reg(hw, 0x1F30, 0x1606); in e1000_phy_init_script_igp3()
2937 hw->phy.ops.write_reg(hw, 0x1F31, 0xB814); in e1000_phy_init_script_igp3()
2939 hw->phy.ops.write_reg(hw, 0x1F35, 0x002A); in e1000_phy_init_script_igp3()
2941 hw->phy.ops.write_reg(hw, 0x1F3E, 0x0067); in e1000_phy_init_script_igp3()
2943 hw->phy.ops.write_reg(hw, 0x1F54, 0x0065); in e1000_phy_init_script_igp3()
2945 hw->phy.ops.write_reg(hw, 0x1F55, 0x002A); in e1000_phy_init_script_igp3()
2947 hw->phy.ops.write_reg(hw, 0x1F56, 0x002A); in e1000_phy_init_script_igp3()
2949 hw->phy.ops.write_reg(hw, 0x1F72, 0x3FB0); in e1000_phy_init_script_igp3()
2951 hw->phy.ops.write_reg(hw, 0x1F76, 0xC0FF); in e1000_phy_init_script_igp3()
2953 hw->phy.ops.write_reg(hw, 0x1F77, 0x1DEC); in e1000_phy_init_script_igp3()
2955 hw->phy.ops.write_reg(hw, 0x1F78, 0xF9EF); in e1000_phy_init_script_igp3()
2957 hw->phy.ops.write_reg(hw, 0x1F79, 0x0210); in e1000_phy_init_script_igp3()
2959 hw->phy.ops.write_reg(hw, 0x1895, 0x0003); in e1000_phy_init_script_igp3()
2961 hw->phy.ops.write_reg(hw, 0x1796, 0x0008); in e1000_phy_init_script_igp3()
2963 hw->phy.ops.write_reg(hw, 0x1798, 0xD008); in e1000_phy_init_script_igp3()
2967 hw->phy.ops.write_reg(hw, 0x1898, 0xD918); in e1000_phy_init_script_igp3()
2969 hw->phy.ops.write_reg(hw, 0x187A, 0x0800); in e1000_phy_init_script_igp3()
2973 hw->phy.ops.write_reg(hw, 0x0019, 0x008D); in e1000_phy_init_script_igp3()
2975 hw->phy.ops.write_reg(hw, 0x001B, 0x2080); in e1000_phy_init_script_igp3()
2977 hw->phy.ops.write_reg(hw, 0x0014, 0x0045); in e1000_phy_init_script_igp3()
2979 hw->phy.ops.write_reg(hw, 0x0000, 0x1340); in e1000_phy_init_script_igp3()
3057 s32 e1000_determine_phy_address(struct e1000_hw *hw) in e1000_determine_phy_address() argument
3063 hw->phy.id = phy_type; in e1000_determine_phy_address()
3066 hw->phy.addr = phy_addr; in e1000_determine_phy_address()
3070 e1000_get_phy_id(hw); in e1000_determine_phy_address()
3071 phy_type = e1000_get_phy_type_from_id(hw->phy.id); in e1000_determine_phy_address()
3112 s32 e1000_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_bm() argument
3119 ret_val = hw->phy.ops.acquire(hw); in e1000_write_phy_reg_bm()
3125 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data, in e1000_write_phy_reg_bm()
3130 hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset); in e1000_write_phy_reg_bm()
3139 if (hw->phy.addr == 1) { in e1000_write_phy_reg_bm()
3148 ret_val = e1000_write_phy_reg_mdic(hw, page_select, in e1000_write_phy_reg_bm()
3154 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000_write_phy_reg_bm()
3158 hw->phy.ops.release(hw); in e1000_write_phy_reg_bm()
3172 s32 e1000_read_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_bm() argument
3179 ret_val = hw->phy.ops.acquire(hw); in e1000_read_phy_reg_bm()
3185 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data, in e1000_read_phy_reg_bm()
3190 hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset); in e1000_read_phy_reg_bm()
3199 if (hw->phy.addr == 1) { in e1000_read_phy_reg_bm()
3208 ret_val = e1000_write_phy_reg_mdic(hw, page_select, in e1000_read_phy_reg_bm()
3214 ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000_read_phy_reg_bm()
3217 hw->phy.ops.release(hw); in e1000_read_phy_reg_bm()
3231 s32 e1000_read_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_bm2() argument
3238 ret_val = hw->phy.ops.acquire(hw); in e1000_read_phy_reg_bm2()
3244 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data, in e1000_read_phy_reg_bm2()
3249 hw->phy.addr = 1; in e1000_read_phy_reg_bm2()
3253 ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT, in e1000_read_phy_reg_bm2()
3260 ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000_read_phy_reg_bm2()
3263 hw->phy.ops.release(hw); in e1000_read_phy_reg_bm2()
3276 s32 e1000_write_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_bm2() argument
3283 ret_val = hw->phy.ops.acquire(hw); in e1000_write_phy_reg_bm2()
3289 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data, in e1000_write_phy_reg_bm2()
3294 hw->phy.addr = 1; in e1000_write_phy_reg_bm2()
3298 ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT, in e1000_write_phy_reg_bm2()
3305 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000_write_phy_reg_bm2()
3309 hw->phy.ops.release(hw); in e1000_write_phy_reg_bm2()
3321 s32 e1000_enable_phy_wakeup_reg_access_bm(struct e1000_hw *hw, u16 *phy_reg) in e1000_enable_phy_wakeup_reg_access_bm() argument
3332 hw->phy.addr = 1; in e1000_enable_phy_wakeup_reg_access_bm()
3335 ret_val = e1000_set_page_igp(hw, (BM_PORT_CTRL_PAGE << IGP_PAGE_SHIFT)); in e1000_enable_phy_wakeup_reg_access_bm()
3341 ret_val = e1000_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, phy_reg); in e1000_enable_phy_wakeup_reg_access_bm()
3355 ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, temp); in e1000_enable_phy_wakeup_reg_access_bm()
3365 return e1000_set_page_igp(hw, (BM_WUC_PAGE << IGP_PAGE_SHIFT)); in e1000_enable_phy_wakeup_reg_access_bm()
3379 s32 e1000_disable_phy_wakeup_reg_access_bm(struct e1000_hw *hw, u16 *phy_reg) in e1000_disable_phy_wakeup_reg_access_bm() argument
3389 ret_val = e1000_set_page_igp(hw, (BM_PORT_CTRL_PAGE << IGP_PAGE_SHIFT)); in e1000_disable_phy_wakeup_reg_access_bm()
3396 ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, *phy_reg); in e1000_disable_phy_wakeup_reg_access_bm()
3429 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset, in e1000_access_phy_wakeup_reg_bm() argument
3440 if ((hw->mac.type == e1000_pchlan) && in e1000_access_phy_wakeup_reg_bm()
3441 (!(E1000_READ_REG(hw, E1000_PHY_CTRL) & E1000_PHY_CTRL_GBE_DISABLE))) in e1000_access_phy_wakeup_reg_bm()
3447 ret_val = e1000_enable_phy_wakeup_reg_access_bm(hw, &phy_reg); in e1000_access_phy_wakeup_reg_bm()
3457 ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_ADDRESS_OPCODE, reg); in e1000_access_phy_wakeup_reg_bm()
3465 ret_val = e1000_read_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE, in e1000_access_phy_wakeup_reg_bm()
3469 ret_val = e1000_write_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE, in e1000_access_phy_wakeup_reg_bm()
3479 ret_val = e1000_disable_phy_wakeup_reg_access_bm(hw, &phy_reg); in e1000_access_phy_wakeup_reg_bm()
3492 void e1000_power_up_phy_copper(struct e1000_hw *hw) in e1000_power_up_phy_copper() argument
3497 hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg); in e1000_power_up_phy_copper()
3499 hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg); in e1000_power_up_phy_copper()
3510 void e1000_power_down_phy_copper(struct e1000_hw *hw) in e1000_power_down_phy_copper() argument
3515 hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg); in e1000_power_down_phy_copper()
3517 hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg); in e1000_power_down_phy_copper()
3532 static s32 __e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data, in __e1000_read_phy_reg_hv() argument
3538 u32 phy_addr = hw->phy.addr = e1000_get_phy_addr_for_hv_page(page); in __e1000_read_phy_reg_hv()
3543 ret_val = hw->phy.ops.acquire(hw); in __e1000_read_phy_reg_hv()
3549 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data, in __e1000_read_phy_reg_hv()
3555 ret_val = e1000_access_phy_debug_regs_hv(hw, offset, in __e1000_read_phy_reg_hv()
3566 ret_val = e1000_set_page_igp(hw, in __e1000_read_phy_reg_hv()
3569 hw->phy.addr = phy_addr; in __e1000_read_phy_reg_hv()
3579 ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg, in __e1000_read_phy_reg_hv()
3583 hw->phy.ops.release(hw); in __e1000_read_phy_reg_hv()
3598 s32 e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_hv() argument
3600 return __e1000_read_phy_reg_hv(hw, offset, data, FALSE, false); in e1000_read_phy_reg_hv()
3612 s32 e1000_read_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_hv_locked() argument
3614 return __e1000_read_phy_reg_hv(hw, offset, data, TRUE, FALSE); in e1000_read_phy_reg_hv_locked()
3626 s32 e1000_read_phy_reg_page_hv(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_page_hv() argument
3628 return __e1000_read_phy_reg_hv(hw, offset, data, TRUE, true); in e1000_read_phy_reg_page_hv()
3641 static s32 __e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data, in __e1000_write_phy_reg_hv() argument
3647 u32 phy_addr = hw->phy.addr = e1000_get_phy_addr_for_hv_page(page); in __e1000_write_phy_reg_hv()
3652 ret_val = hw->phy.ops.acquire(hw); in __e1000_write_phy_reg_hv()
3658 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data, in __e1000_write_phy_reg_hv()
3664 ret_val = e1000_access_phy_debug_regs_hv(hw, offset, in __e1000_write_phy_reg_hv()
3676 if ((hw->phy.type == e1000_phy_82578) && in __e1000_write_phy_reg_hv()
3677 (hw->phy.revision >= 1) && in __e1000_write_phy_reg_hv()
3678 (hw->phy.addr == 2) && in __e1000_write_phy_reg_hv()
3682 ret_val = e1000_access_phy_debug_regs_hv(hw, in __e1000_write_phy_reg_hv()
3691 ret_val = e1000_set_page_igp(hw, in __e1000_write_phy_reg_hv()
3694 hw->phy.addr = phy_addr; in __e1000_write_phy_reg_hv()
3704 ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg, in __e1000_write_phy_reg_hv()
3709 hw->phy.ops.release(hw); in __e1000_write_phy_reg_hv()
3723 s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_hv() argument
3725 return __e1000_write_phy_reg_hv(hw, offset, data, FALSE, false); in e1000_write_phy_reg_hv()
3737 s32 e1000_write_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_hv_locked() argument
3739 return __e1000_write_phy_reg_hv(hw, offset, data, TRUE, FALSE); in e1000_write_phy_reg_hv_locked()
3751 s32 e1000_write_phy_reg_page_hv(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_page_hv() argument
3753 return __e1000_write_phy_reg_hv(hw, offset, data, TRUE, true); in e1000_write_phy_reg_page_hv()
3782 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset, in e1000_access_phy_debug_regs_hv() argument
3792 addr_reg = ((hw->phy.type == e1000_phy_82578) ? in e1000_access_phy_debug_regs_hv()
3797 hw->phy.addr = 2; in e1000_access_phy_debug_regs_hv()
3800 ret_val = e1000_write_phy_reg_mdic(hw, addr_reg, (u16)offset & 0x3F); in e1000_access_phy_debug_regs_hv()
3808 ret_val = e1000_read_phy_reg_mdic(hw, data_reg, data); in e1000_access_phy_debug_regs_hv()
3810 ret_val = e1000_write_phy_reg_mdic(hw, data_reg, *data); in e1000_access_phy_debug_regs_hv()
3829 s32 e1000_link_stall_workaround_hv(struct e1000_hw *hw) in e1000_link_stall_workaround_hv() argument
3836 if (hw->phy.type != e1000_phy_82578) in e1000_link_stall_workaround_hv()
3840 hw->phy.ops.read_reg(hw, PHY_CONTROL, &data); in e1000_link_stall_workaround_hv()
3845 ret_val = hw->phy.ops.read_reg(hw, BM_CS_STATUS, &data); in e1000_link_stall_workaround_hv()
3859 ret_val = hw->phy.ops.write_reg(hw, HV_MUX_DATA_CTRL, in e1000_link_stall_workaround_hv()
3865 return hw->phy.ops.write_reg(hw, HV_MUX_DATA_CTRL, in e1000_link_stall_workaround_hv()
3877 s32 e1000_check_polarity_82577(struct e1000_hw *hw) in e1000_check_polarity_82577() argument
3879 struct e1000_phy_info *phy = &hw->phy; in e1000_check_polarity_82577()
3885 ret_val = phy->ops.read_reg(hw, I82577_PHY_STATUS_2, &data); in e1000_check_polarity_82577()
3901 s32 e1000_phy_force_speed_duplex_82577(struct e1000_hw *hw) in e1000_phy_force_speed_duplex_82577() argument
3903 struct e1000_phy_info *phy = &hw->phy; in e1000_phy_force_speed_duplex_82577()
3910 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data); in e1000_phy_force_speed_duplex_82577()
3914 e1000_phy_force_speed_duplex_setup(hw, &phy_data); in e1000_phy_force_speed_duplex_82577()
3916 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data); in e1000_phy_force_speed_duplex_82577()
3925 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_82577()
3934 ret_val = e1000_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_82577()
3950 s32 e1000_get_phy_info_82577(struct e1000_hw *hw) in e1000_get_phy_info_82577() argument
3952 struct e1000_phy_info *phy = &hw->phy; in e1000_get_phy_info_82577()
3959 ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link); in e1000_get_phy_info_82577()
3970 ret_val = e1000_check_polarity_82577(hw); in e1000_get_phy_info_82577()
3974 ret_val = phy->ops.read_reg(hw, I82577_PHY_STATUS_2, &data); in e1000_get_phy_info_82577()
3982 ret_val = hw->phy.ops.get_cable_length(hw); in e1000_get_phy_info_82577()
3986 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data); in e1000_get_phy_info_82577()
4013 s32 e1000_get_cable_length_82577(struct e1000_hw *hw) in e1000_get_cable_length_82577() argument
4015 struct e1000_phy_info *phy = &hw->phy; in e1000_get_cable_length_82577()
4021 ret_val = phy->ops.read_reg(hw, I82577_PHY_DIAG_STATUS, &phy_data); in e1000_get_cable_length_82577()
4045 s32 e1000_write_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_gs40g() argument
4053 ret_val = hw->phy.ops.acquire(hw); in e1000_write_phy_reg_gs40g()
4057 ret_val = e1000_write_phy_reg_mdic(hw, GS40G_PAGE_SELECT, page); in e1000_write_phy_reg_gs40g()
4060 ret_val = e1000_write_phy_reg_mdic(hw, offset, data); in e1000_write_phy_reg_gs40g()
4063 hw->phy.ops.release(hw); in e1000_write_phy_reg_gs40g()
4077 s32 e1000_read_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_gs40g() argument
4085 ret_val = hw->phy.ops.acquire(hw); in e1000_read_phy_reg_gs40g()
4089 ret_val = e1000_write_phy_reg_mdic(hw, GS40G_PAGE_SELECT, page); in e1000_read_phy_reg_gs40g()
4092 ret_val = e1000_read_phy_reg_mdic(hw, offset, data); in e1000_read_phy_reg_gs40g()
4095 hw->phy.ops.release(hw); in e1000_read_phy_reg_gs40g()
4108 s32 e1000_read_phy_reg_mphy(struct e1000_hw *hw, u32 address, u32 *data) in e1000_read_phy_reg_mphy() argument
4117 ready = e1000_is_mphy_ready(hw); in e1000_read_phy_reg_mphy()
4122 mphy_ctrl = E1000_READ_REG(hw, E1000_MPHY_ADDR_CTRL); in e1000_read_phy_reg_mphy()
4125 ready = e1000_is_mphy_ready(hw); in e1000_read_phy_reg_mphy()
4129 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl); in e1000_read_phy_reg_mphy()
4133 ready = e1000_is_mphy_ready(hw); in e1000_read_phy_reg_mphy()
4141 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl); in e1000_read_phy_reg_mphy()
4144 ready = e1000_is_mphy_ready(hw); in e1000_read_phy_reg_mphy()
4147 *data = E1000_READ_REG(hw, E1000_MPHY_DATA); in e1000_read_phy_reg_mphy()
4151 ready = e1000_is_mphy_ready(hw); in e1000_read_phy_reg_mphy()
4154 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, in e1000_read_phy_reg_mphy()
4169 s32 e1000_write_phy_reg_mphy(struct e1000_hw *hw, u32 address, u32 data, in e1000_write_phy_reg_mphy() argument
4179 ready = e1000_is_mphy_ready(hw); in e1000_write_phy_reg_mphy()
4184 mphy_ctrl = E1000_READ_REG(hw, E1000_MPHY_ADDR_CTRL); in e1000_write_phy_reg_mphy()
4187 ready = e1000_is_mphy_ready(hw); in e1000_write_phy_reg_mphy()
4191 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl); in e1000_write_phy_reg_mphy()
4195 ready = e1000_is_mphy_ready(hw); in e1000_write_phy_reg_mphy()
4206 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, mphy_ctrl); in e1000_write_phy_reg_mphy()
4209 ready = e1000_is_mphy_ready(hw); in e1000_write_phy_reg_mphy()
4212 E1000_WRITE_REG(hw, E1000_MPHY_DATA, data); in e1000_write_phy_reg_mphy()
4216 ready = e1000_is_mphy_ready(hw); in e1000_write_phy_reg_mphy()
4219 E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, in e1000_write_phy_reg_mphy()
4231 bool e1000_is_mphy_ready(struct e1000_hw *hw) in e1000_is_mphy_ready() argument
4238 mphy_ctrl = E1000_READ_REG(hw, E1000_MPHY_ADDR_CTRL); in e1000_is_mphy_ready()