mirror of https://gitee.com/openkylin/linux.git
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 <hkallweit1@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c19571264d
commit
1fcd165884
|
@ -699,6 +699,8 @@ struct rtl8169_private {
|
|||
u32 ocp_base;
|
||||
};
|
||||
|
||||
typedef void (*rtl_generic_fct)(struct rtl8169_private *tp);
|
||||
|
||||
MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>");
|
||||
MODULE_DESCRIPTION("RealTek RTL-8169 Gigabit Ethernet driver");
|
||||
module_param_named(debug, debug.msg_enable, int, 0);
|
||||
|
@ -3988,131 +3990,65 @@ static void rtl8106e_hw_phy_config(struct rtl8169_private *tp)
|
|||
|
||||
static void rtl_hw_phy_config(struct net_device *dev)
|
||||
{
|
||||
static const rtl_generic_fct phy_configs[] = {
|
||||
/* PCI devices. */
|
||||
[RTL_GIGA_MAC_VER_01] = NULL,
|
||||
[RTL_GIGA_MAC_VER_02] = rtl8169s_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_03] = rtl8169s_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_04] = rtl8169sb_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_05] = rtl8169scd_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_06] = rtl8169sce_hw_phy_config,
|
||||
/* PCI-E devices. */
|
||||
[RTL_GIGA_MAC_VER_07] = rtl8102e_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_08] = rtl8102e_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_09] = rtl8102e_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_10] = NULL,
|
||||
[RTL_GIGA_MAC_VER_11] = rtl8168bb_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_12] = rtl8168bef_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_13] = NULL,
|
||||
[RTL_GIGA_MAC_VER_14] = NULL,
|
||||
[RTL_GIGA_MAC_VER_15] = NULL,
|
||||
[RTL_GIGA_MAC_VER_16] = NULL,
|
||||
[RTL_GIGA_MAC_VER_17] = rtl8168bef_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_18] = rtl8168cp_1_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_19] = rtl8168c_1_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_20] = rtl8168c_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_21] = rtl8168c_3_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_22] = rtl8168c_4_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_23] = rtl8168cp_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_24] = rtl8168cp_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_25] = rtl8168d_1_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_26] = rtl8168d_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_27] = rtl8168d_3_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_28] = rtl8168d_4_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_29] = rtl8105e_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_30] = rtl8105e_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_31] = NULL,
|
||||
[RTL_GIGA_MAC_VER_32] = rtl8168e_1_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_33] = rtl8168e_1_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_34] = rtl8168e_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_35] = rtl8168f_1_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_36] = rtl8168f_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_37] = rtl8402_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_38] = rtl8411_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_39] = rtl8106e_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_40] = rtl8168g_1_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_41] = NULL,
|
||||
[RTL_GIGA_MAC_VER_42] = rtl8168g_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_43] = rtl8168g_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_44] = rtl8168g_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_45] = rtl8168h_1_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_46] = rtl8168h_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_47] = rtl8168h_1_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_48] = rtl8168h_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_49] = rtl8168ep_1_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_50] = rtl8168ep_2_hw_phy_config,
|
||||
[RTL_GIGA_MAC_VER_51] = rtl8168ep_2_hw_phy_config,
|
||||
};
|
||||
struct rtl8169_private *tp = netdev_priv(dev);
|
||||
|
||||
switch (tp->mac_version) {
|
||||
case RTL_GIGA_MAC_VER_01:
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_02:
|
||||
case RTL_GIGA_MAC_VER_03:
|
||||
rtl8169s_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_04:
|
||||
rtl8169sb_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_05:
|
||||
rtl8169scd_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_06:
|
||||
rtl8169sce_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_07:
|
||||
case RTL_GIGA_MAC_VER_08:
|
||||
case RTL_GIGA_MAC_VER_09:
|
||||
rtl8102e_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_11:
|
||||
rtl8168bb_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_12:
|
||||
rtl8168bef_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_17:
|
||||
rtl8168bef_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_18:
|
||||
rtl8168cp_1_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_19:
|
||||
rtl8168c_1_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_20:
|
||||
rtl8168c_2_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_21:
|
||||
rtl8168c_3_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_22:
|
||||
rtl8168c_4_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_23:
|
||||
case RTL_GIGA_MAC_VER_24:
|
||||
rtl8168cp_2_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_25:
|
||||
rtl8168d_1_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_26:
|
||||
rtl8168d_2_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_27:
|
||||
rtl8168d_3_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_28:
|
||||
rtl8168d_4_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_29:
|
||||
case RTL_GIGA_MAC_VER_30:
|
||||
rtl8105e_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_31:
|
||||
/* None. */
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_32:
|
||||
case RTL_GIGA_MAC_VER_33:
|
||||
rtl8168e_1_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_34:
|
||||
rtl8168e_2_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_35:
|
||||
rtl8168f_1_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_36:
|
||||
rtl8168f_2_hw_phy_config(tp);
|
||||
break;
|
||||
|
||||
case RTL_GIGA_MAC_VER_37:
|
||||
rtl8402_hw_phy_config(tp);
|
||||
break;
|
||||
|
||||
case RTL_GIGA_MAC_VER_38:
|
||||
rtl8411_hw_phy_config(tp);
|
||||
break;
|
||||
|
||||
case RTL_GIGA_MAC_VER_39:
|
||||
rtl8106e_hw_phy_config(tp);
|
||||
break;
|
||||
|
||||
case RTL_GIGA_MAC_VER_40:
|
||||
rtl8168g_1_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_42:
|
||||
case RTL_GIGA_MAC_VER_43:
|
||||
case RTL_GIGA_MAC_VER_44:
|
||||
rtl8168g_2_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_45:
|
||||
case RTL_GIGA_MAC_VER_47:
|
||||
rtl8168h_1_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_46:
|
||||
case RTL_GIGA_MAC_VER_48:
|
||||
rtl8168h_2_hw_phy_config(tp);
|
||||
break;
|
||||
|
||||
case RTL_GIGA_MAC_VER_49:
|
||||
rtl8168ep_1_hw_phy_config(tp);
|
||||
break;
|
||||
case RTL_GIGA_MAC_VER_50:
|
||||
case RTL_GIGA_MAC_VER_51:
|
||||
rtl8168ep_2_hw_phy_config(tp);
|
||||
break;
|
||||
|
||||
case RTL_GIGA_MAC_VER_41:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (phy_configs[tp->mac_version])
|
||||
phy_configs[tp->mac_version](tp);
|
||||
}
|
||||
|
||||
static void rtl_schedule_task(struct rtl8169_private *tp, enum rtl_flag flag)
|
||||
|
|
Loading…
Reference in New Issue