net/ixgbe/base: allow per-device-type method calls
Use the method pointers instead of direct function calls for IOSF access so that the right functions can be called on X550EM_a, compared to other devices using the driver. Signed-off-by: Beilei Xing <beilei.xing@intel.com>
This commit is contained in:
parent
c00433544e
commit
eb540e47c6
@ -546,8 +546,8 @@ s32 ixgbe_init_ops_X550EM(struct ixgbe_hw *hw)
|
||||
link->addr = IXGBE_CS4227;
|
||||
}
|
||||
if (hw->mac.type == ixgbe_mac_X550EM_a) {
|
||||
mac->ops.read_iosf_sb_reg = ixgbe_read_iosf_sb_reg_x550a;
|
||||
mac->ops.write_iosf_sb_reg = ixgbe_write_iosf_sb_reg_x550a;
|
||||
mac->ops.read_iosf_sb_reg = ixgbe_read_iosf_sb_reg_x550;
|
||||
mac->ops.write_iosf_sb_reg = ixgbe_write_iosf_sb_reg_x550;
|
||||
mac->ops.acquire_swfw_sync = ixgbe_acquire_swfw_sync_X550a;
|
||||
mac->ops.release_swfw_sync = ixgbe_release_swfw_sync_X550a;
|
||||
}
|
||||
@ -785,7 +785,7 @@ static s32 ixgbe_enable_eee_x550(struct ixgbe_hw *hw)
|
||||
case IXGBE_DEV_ID_X550EM_X_KR:
|
||||
case IXGBE_DEV_ID_X550EM_A_KR:
|
||||
case IXGBE_DEV_ID_X550EM_A_KR_L:
|
||||
status = ixgbe_read_iosf_sb_reg_x550(hw,
|
||||
status = hw->mac.ops.read_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, &link_reg);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
@ -797,7 +797,7 @@ static s32 ixgbe_enable_eee_x550(struct ixgbe_hw *hw)
|
||||
/* Don't advertise FEC capability when EEE enabled. */
|
||||
link_reg &= ~IXGBE_KRM_LINK_CTRL_1_TETH_AN_CAP_FEC;
|
||||
|
||||
status = ixgbe_write_iosf_sb_reg_x550(hw,
|
||||
status = hw->mac.ops.write_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, link_reg);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
@ -840,7 +840,7 @@ static s32 ixgbe_disable_eee_x550(struct ixgbe_hw *hw)
|
||||
case IXGBE_DEV_ID_X550EM_X_KR:
|
||||
case IXGBE_DEV_ID_X550EM_A_KR:
|
||||
case IXGBE_DEV_ID_X550EM_A_KR_L:
|
||||
status = ixgbe_read_iosf_sb_reg_x550(hw,
|
||||
status = hw->mac.ops.read_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, &link_reg);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
@ -852,7 +852,7 @@ static s32 ixgbe_disable_eee_x550(struct ixgbe_hw *hw)
|
||||
/* Advertise FEC capability when EEE is disabled. */
|
||||
link_reg |= IXGBE_KRM_LINK_CTRL_1_TETH_AN_CAP_FEC;
|
||||
|
||||
status = ixgbe_write_iosf_sb_reg_x550(hw,
|
||||
status = hw->mac.ops.write_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, link_reg);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
@ -1814,9 +1814,9 @@ STATIC s32 ixgbe_setup_kr_speed_x550em(struct ixgbe_hw *hw,
|
||||
s32 status;
|
||||
u32 reg_val;
|
||||
|
||||
status = ixgbe_read_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
status = hw->mac.ops.read_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
@ -1834,9 +1834,9 @@ STATIC s32 ixgbe_setup_kr_speed_x550em(struct ixgbe_hw *hw,
|
||||
|
||||
/* Restart auto-negotiation. */
|
||||
reg_val |= IXGBE_KRM_LINK_CTRL_1_TETH_AN_RESTART;
|
||||
status = ixgbe_write_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
status = hw->mac.ops.write_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
|
||||
return status;
|
||||
}
|
||||
@ -2496,57 +2496,57 @@ s32 ixgbe_setup_phy_loopback_x550em(struct ixgbe_hw *hw)
|
||||
u32 reg_val;
|
||||
|
||||
/* Disable AN and force speed to 10G Serial. */
|
||||
status = ixgbe_read_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
status = hw->mac.ops.read_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
reg_val &= ~IXGBE_KRM_LINK_CTRL_1_TETH_AN_ENABLE;
|
||||
reg_val &= ~IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_MASK;
|
||||
reg_val |= IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_10G;
|
||||
status = ixgbe_write_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
status = hw->mac.ops.write_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
/* Set near-end loopback clocks. */
|
||||
status = ixgbe_read_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_PORT_CAR_GEN_CTRL(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
status = hw->mac.ops.read_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_PORT_CAR_GEN_CTRL(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
reg_val |= IXGBE_KRM_PORT_CAR_GEN_CTRL_NELB_32B;
|
||||
reg_val |= IXGBE_KRM_PORT_CAR_GEN_CTRL_NELB_KRPCS;
|
||||
status = ixgbe_write_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_PORT_CAR_GEN_CTRL(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
status = hw->mac.ops.write_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_PORT_CAR_GEN_CTRL(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
/* Set loopback enable. */
|
||||
status = ixgbe_read_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_PMD_DFX_BURNIN(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
status = hw->mac.ops.read_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_PMD_DFX_BURNIN(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
reg_val |= IXGBE_KRM_PMD_DFX_BURNIN_TX_RX_KR_LB_MASK;
|
||||
status = ixgbe_write_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_PMD_DFX_BURNIN(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
status = hw->mac.ops.write_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_PMD_DFX_BURNIN(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
|
||||
/* Training bypass. */
|
||||
status = ixgbe_read_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_RX_TRN_LINKUP_CTRL(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
status = hw->mac.ops.read_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_RX_TRN_LINKUP_CTRL(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
if (status != IXGBE_SUCCESS)
|
||||
return status;
|
||||
reg_val |= IXGBE_KRM_RX_TRN_LINKUP_CTRL_PROTOCOL_BYPASS;
|
||||
status = ixgbe_write_iosf_sb_reg_x550(hw,
|
||||
IXGBE_KRM_RX_TRN_LINKUP_CTRL(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
status = hw->mac.ops.write_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_RX_TRN_LINKUP_CTRL(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
|
||||
return status;
|
||||
}
|
||||
@ -3386,7 +3386,7 @@ s32 ixgbe_setup_fc_X550em(struct ixgbe_hw *hw)
|
||||
case IXGBE_DEV_ID_X550EM_X_KR:
|
||||
case IXGBE_DEV_ID_X550EM_A_KR:
|
||||
case IXGBE_DEV_ID_X550EM_A_KR_L:
|
||||
ret_val = ixgbe_read_iosf_sb_reg_x550(hw,
|
||||
ret_val = hw->mac.ops.read_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_AN_CNTL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
if (ret_val != IXGBE_SUCCESS)
|
||||
@ -3397,7 +3397,7 @@ s32 ixgbe_setup_fc_X550em(struct ixgbe_hw *hw)
|
||||
reg_val |= IXGBE_KRM_AN_CNTL_1_SYM_PAUSE;
|
||||
if (asm_dir)
|
||||
reg_val |= IXGBE_KRM_AN_CNTL_1_ASM_PAUSE;
|
||||
ret_val = ixgbe_write_iosf_sb_reg_x550(hw,
|
||||
ret_val = hw->mac.ops.write_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_AN_CNTL_1(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user