Skip to content

Commit 1fcd165

Browse files
hkallweitdavem330
authored andcommitted
r8169: create function pointer array for PHY init functions
Using a function pointer array makes this easier to read and better maintainable. AFAIK function pointer arrays cause some performance drawback due to Spectre mitigation, but we're not in a hot path here. Signed-off-by: Heiner Kallweit <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent c195712 commit 1fcd165

File tree

1 file changed

+59
-123
lines changed
  • drivers/net/ethernet/realtek

1 file changed

+59
-123
lines changed

drivers/net/ethernet/realtek/r8169.c

Lines changed: 59 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,8 @@ struct rtl8169_private {
699699
u32 ocp_base;
700700
};
701701

702+
typedef void (*rtl_generic_fct)(struct rtl8169_private *tp);
703+
702704
MODULE_AUTHOR("Realtek and the Linux r8169 crew <[email protected]>");
703705
MODULE_DESCRIPTION("RealTek RTL-8169 Gigabit Ethernet driver");
704706
module_param_named(debug, debug.msg_enable, int, 0);
@@ -3988,131 +3990,65 @@ static void rtl8106e_hw_phy_config(struct rtl8169_private *tp)
39883990

39893991
static void rtl_hw_phy_config(struct net_device *dev)
39903992
{
3993+
static const rtl_generic_fct phy_configs[] = {
3994+
/* PCI devices. */
3995+
[RTL_GIGA_MAC_VER_01] = NULL,
3996+
[RTL_GIGA_MAC_VER_02] = rtl8169s_hw_phy_config,
3997+
[RTL_GIGA_MAC_VER_03] = rtl8169s_hw_phy_config,
3998+
[RTL_GIGA_MAC_VER_04] = rtl8169sb_hw_phy_config,
3999+
[RTL_GIGA_MAC_VER_05] = rtl8169scd_hw_phy_config,
4000+
[RTL_GIGA_MAC_VER_06] = rtl8169sce_hw_phy_config,
4001+
/* PCI-E devices. */
4002+
[RTL_GIGA_MAC_VER_07] = rtl8102e_hw_phy_config,
4003+
[RTL_GIGA_MAC_VER_08] = rtl8102e_hw_phy_config,
4004+
[RTL_GIGA_MAC_VER_09] = rtl8102e_hw_phy_config,
4005+
[RTL_GIGA_MAC_VER_10] = NULL,
4006+
[RTL_GIGA_MAC_VER_11] = rtl8168bb_hw_phy_config,
4007+
[RTL_GIGA_MAC_VER_12] = rtl8168bef_hw_phy_config,
4008+
[RTL_GIGA_MAC_VER_13] = NULL,
4009+
[RTL_GIGA_MAC_VER_14] = NULL,
4010+
[RTL_GIGA_MAC_VER_15] = NULL,
4011+
[RTL_GIGA_MAC_VER_16] = NULL,
4012+
[RTL_GIGA_MAC_VER_17] = rtl8168bef_hw_phy_config,
4013+
[RTL_GIGA_MAC_VER_18] = rtl8168cp_1_hw_phy_config,
4014+
[RTL_GIGA_MAC_VER_19] = rtl8168c_1_hw_phy_config,
4015+
[RTL_GIGA_MAC_VER_20] = rtl8168c_2_hw_phy_config,
4016+
[RTL_GIGA_MAC_VER_21] = rtl8168c_3_hw_phy_config,
4017+
[RTL_GIGA_MAC_VER_22] = rtl8168c_4_hw_phy_config,
4018+
[RTL_GIGA_MAC_VER_23] = rtl8168cp_2_hw_phy_config,
4019+
[RTL_GIGA_MAC_VER_24] = rtl8168cp_2_hw_phy_config,
4020+
[RTL_GIGA_MAC_VER_25] = rtl8168d_1_hw_phy_config,
4021+
[RTL_GIGA_MAC_VER_26] = rtl8168d_2_hw_phy_config,
4022+
[RTL_GIGA_MAC_VER_27] = rtl8168d_3_hw_phy_config,
4023+
[RTL_GIGA_MAC_VER_28] = rtl8168d_4_hw_phy_config,
4024+
[RTL_GIGA_MAC_VER_29] = rtl8105e_hw_phy_config,
4025+
[RTL_GIGA_MAC_VER_30] = rtl8105e_hw_phy_config,
4026+
[RTL_GIGA_MAC_VER_31] = NULL,
4027+
[RTL_GIGA_MAC_VER_32] = rtl8168e_1_hw_phy_config,
4028+
[RTL_GIGA_MAC_VER_33] = rtl8168e_1_hw_phy_config,
4029+
[RTL_GIGA_MAC_VER_34] = rtl8168e_2_hw_phy_config,
4030+
[RTL_GIGA_MAC_VER_35] = rtl8168f_1_hw_phy_config,
4031+
[RTL_GIGA_MAC_VER_36] = rtl8168f_2_hw_phy_config,
4032+
[RTL_GIGA_MAC_VER_37] = rtl8402_hw_phy_config,
4033+
[RTL_GIGA_MAC_VER_38] = rtl8411_hw_phy_config,
4034+
[RTL_GIGA_MAC_VER_39] = rtl8106e_hw_phy_config,
4035+
[RTL_GIGA_MAC_VER_40] = rtl8168g_1_hw_phy_config,
4036+
[RTL_GIGA_MAC_VER_41] = NULL,
4037+
[RTL_GIGA_MAC_VER_42] = rtl8168g_2_hw_phy_config,
4038+
[RTL_GIGA_MAC_VER_43] = rtl8168g_2_hw_phy_config,
4039+
[RTL_GIGA_MAC_VER_44] = rtl8168g_2_hw_phy_config,
4040+
[RTL_GIGA_MAC_VER_45] = rtl8168h_1_hw_phy_config,
4041+
[RTL_GIGA_MAC_VER_46] = rtl8168h_2_hw_phy_config,
4042+
[RTL_GIGA_MAC_VER_47] = rtl8168h_1_hw_phy_config,
4043+
[RTL_GIGA_MAC_VER_48] = rtl8168h_2_hw_phy_config,
4044+
[RTL_GIGA_MAC_VER_49] = rtl8168ep_1_hw_phy_config,
4045+
[RTL_GIGA_MAC_VER_50] = rtl8168ep_2_hw_phy_config,
4046+
[RTL_GIGA_MAC_VER_51] = rtl8168ep_2_hw_phy_config,
4047+
};
39914048
struct rtl8169_private *tp = netdev_priv(dev);
39924049

3993-
switch (tp->mac_version) {
3994-
case RTL_GIGA_MAC_VER_01:
3995-
break;
3996-
case RTL_GIGA_MAC_VER_02:
3997-
case RTL_GIGA_MAC_VER_03:
3998-
rtl8169s_hw_phy_config(tp);
3999-
break;
4000-
case RTL_GIGA_MAC_VER_04:
4001-
rtl8169sb_hw_phy_config(tp);
4002-
break;
4003-
case RTL_GIGA_MAC_VER_05:
4004-
rtl8169scd_hw_phy_config(tp);
4005-
break;
4006-
case RTL_GIGA_MAC_VER_06:
4007-
rtl8169sce_hw_phy_config(tp);
4008-
break;
4009-
case RTL_GIGA_MAC_VER_07:
4010-
case RTL_GIGA_MAC_VER_08:
4011-
case RTL_GIGA_MAC_VER_09:
4012-
rtl8102e_hw_phy_config(tp);
4013-
break;
4014-
case RTL_GIGA_MAC_VER_11:
4015-
rtl8168bb_hw_phy_config(tp);
4016-
break;
4017-
case RTL_GIGA_MAC_VER_12:
4018-
rtl8168bef_hw_phy_config(tp);
4019-
break;
4020-
case RTL_GIGA_MAC_VER_17:
4021-
rtl8168bef_hw_phy_config(tp);
4022-
break;
4023-
case RTL_GIGA_MAC_VER_18:
4024-
rtl8168cp_1_hw_phy_config(tp);
4025-
break;
4026-
case RTL_GIGA_MAC_VER_19:
4027-
rtl8168c_1_hw_phy_config(tp);
4028-
break;
4029-
case RTL_GIGA_MAC_VER_20:
4030-
rtl8168c_2_hw_phy_config(tp);
4031-
break;
4032-
case RTL_GIGA_MAC_VER_21:
4033-
rtl8168c_3_hw_phy_config(tp);
4034-
break;
4035-
case RTL_GIGA_MAC_VER_22:
4036-
rtl8168c_4_hw_phy_config(tp);
4037-
break;
4038-
case RTL_GIGA_MAC_VER_23:
4039-
case RTL_GIGA_MAC_VER_24:
4040-
rtl8168cp_2_hw_phy_config(tp);
4041-
break;
4042-
case RTL_GIGA_MAC_VER_25:
4043-
rtl8168d_1_hw_phy_config(tp);
4044-
break;
4045-
case RTL_GIGA_MAC_VER_26:
4046-
rtl8168d_2_hw_phy_config(tp);
4047-
break;
4048-
case RTL_GIGA_MAC_VER_27:
4049-
rtl8168d_3_hw_phy_config(tp);
4050-
break;
4051-
case RTL_GIGA_MAC_VER_28:
4052-
rtl8168d_4_hw_phy_config(tp);
4053-
break;
4054-
case RTL_GIGA_MAC_VER_29:
4055-
case RTL_GIGA_MAC_VER_30:
4056-
rtl8105e_hw_phy_config(tp);
4057-
break;
4058-
case RTL_GIGA_MAC_VER_31:
4059-
/* None. */
4060-
break;
4061-
case RTL_GIGA_MAC_VER_32:
4062-
case RTL_GIGA_MAC_VER_33:
4063-
rtl8168e_1_hw_phy_config(tp);
4064-
break;
4065-
case RTL_GIGA_MAC_VER_34:
4066-
rtl8168e_2_hw_phy_config(tp);
4067-
break;
4068-
case RTL_GIGA_MAC_VER_35:
4069-
rtl8168f_1_hw_phy_config(tp);
4070-
break;
4071-
case RTL_GIGA_MAC_VER_36:
4072-
rtl8168f_2_hw_phy_config(tp);
4073-
break;
4074-
4075-
case RTL_GIGA_MAC_VER_37:
4076-
rtl8402_hw_phy_config(tp);
4077-
break;
4078-
4079-
case RTL_GIGA_MAC_VER_38:
4080-
rtl8411_hw_phy_config(tp);
4081-
break;
4082-
4083-
case RTL_GIGA_MAC_VER_39:
4084-
rtl8106e_hw_phy_config(tp);
4085-
break;
4086-
4087-
case RTL_GIGA_MAC_VER_40:
4088-
rtl8168g_1_hw_phy_config(tp);
4089-
break;
4090-
case RTL_GIGA_MAC_VER_42:
4091-
case RTL_GIGA_MAC_VER_43:
4092-
case RTL_GIGA_MAC_VER_44:
4093-
rtl8168g_2_hw_phy_config(tp);
4094-
break;
4095-
case RTL_GIGA_MAC_VER_45:
4096-
case RTL_GIGA_MAC_VER_47:
4097-
rtl8168h_1_hw_phy_config(tp);
4098-
break;
4099-
case RTL_GIGA_MAC_VER_46:
4100-
case RTL_GIGA_MAC_VER_48:
4101-
rtl8168h_2_hw_phy_config(tp);
4102-
break;
4103-
4104-
case RTL_GIGA_MAC_VER_49:
4105-
rtl8168ep_1_hw_phy_config(tp);
4106-
break;
4107-
case RTL_GIGA_MAC_VER_50:
4108-
case RTL_GIGA_MAC_VER_51:
4109-
rtl8168ep_2_hw_phy_config(tp);
4110-
break;
4111-
4112-
case RTL_GIGA_MAC_VER_41:
4113-
default:
4114-
break;
4115-
}
4050+
if (phy_configs[tp->mac_version])
4051+
phy_configs[tp->mac_version](tp);
41164052
}
41174053

41184054
static void rtl_schedule_task(struct rtl8169_private *tp, enum rtl_flag flag)

0 commit comments

Comments
 (0)