@@ -699,6 +699,8 @@ struct rtl8169_private {
699
699
u32 ocp_base ;
700
700
};
701
701
702
+ typedef void (* rtl_generic_fct )(struct rtl8169_private * tp );
703
+
702
704
MODULE_AUTHOR (
"Realtek and the Linux r8169 crew <[email protected] >" );
703
705
MODULE_DESCRIPTION ("RealTek RTL-8169 Gigabit Ethernet driver" );
704
706
module_param_named (debug , debug .msg_enable , int , 0 );
@@ -3988,131 +3990,65 @@ static void rtl8106e_hw_phy_config(struct rtl8169_private *tp)
3988
3990
3989
3991
static void rtl_hw_phy_config (struct net_device * dev )
3990
3992
{
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
+ };
3991
4048
struct rtl8169_private * tp = netdev_priv (dev );
3992
4049
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 );
4116
4052
}
4117
4053
4118
4054
static void rtl_schedule_task (struct rtl8169_private * tp , enum rtl_flag flag )
0 commit comments