Skip to content

Commit 8344fff

Browse files
hkallweitdavem330
authored andcommitted
r8169: create function pointer array for chip hw init functions
Using a function pointer array makes this easier to read and better maintainable. Signed-off-by: Heiner Kallweit <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 1fcd165 commit 8344fff

File tree

1 file changed

+68
-151
lines changed
  • drivers/net/ethernet/realtek

1 file changed

+68
-151
lines changed

drivers/net/ethernet/realtek/r8169.c

Lines changed: 68 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -5381,122 +5381,6 @@ static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp)
53815381
rtl_hw_aspm_clkreq_enable(tp, true);
53825382
}
53835383

5384-
static void rtl_hw_start_8168(struct rtl8169_private *tp)
5385-
{
5386-
RTL_W8(tp, MaxTxPacketSize, TxPacketMax);
5387-
5388-
/* Work around for RxFIFO overflow. */
5389-
if (tp->mac_version == RTL_GIGA_MAC_VER_11) {
5390-
tp->irq_mask |= RxFIFOOver;
5391-
tp->irq_mask &= ~RxOverflow;
5392-
}
5393-
5394-
switch (tp->mac_version) {
5395-
case RTL_GIGA_MAC_VER_11:
5396-
rtl_hw_start_8168bb(tp);
5397-
break;
5398-
5399-
case RTL_GIGA_MAC_VER_12:
5400-
case RTL_GIGA_MAC_VER_17:
5401-
rtl_hw_start_8168bef(tp);
5402-
break;
5403-
5404-
case RTL_GIGA_MAC_VER_18:
5405-
rtl_hw_start_8168cp_1(tp);
5406-
break;
5407-
5408-
case RTL_GIGA_MAC_VER_19:
5409-
rtl_hw_start_8168c_1(tp);
5410-
break;
5411-
5412-
case RTL_GIGA_MAC_VER_20:
5413-
rtl_hw_start_8168c_2(tp);
5414-
break;
5415-
5416-
case RTL_GIGA_MAC_VER_21:
5417-
rtl_hw_start_8168c_3(tp);
5418-
break;
5419-
5420-
case RTL_GIGA_MAC_VER_22:
5421-
rtl_hw_start_8168c_4(tp);
5422-
break;
5423-
5424-
case RTL_GIGA_MAC_VER_23:
5425-
rtl_hw_start_8168cp_2(tp);
5426-
break;
5427-
5428-
case RTL_GIGA_MAC_VER_24:
5429-
rtl_hw_start_8168cp_3(tp);
5430-
break;
5431-
5432-
case RTL_GIGA_MAC_VER_25:
5433-
case RTL_GIGA_MAC_VER_26:
5434-
case RTL_GIGA_MAC_VER_27:
5435-
rtl_hw_start_8168d(tp);
5436-
break;
5437-
5438-
case RTL_GIGA_MAC_VER_28:
5439-
rtl_hw_start_8168d_4(tp);
5440-
break;
5441-
5442-
case RTL_GIGA_MAC_VER_31:
5443-
rtl_hw_start_8168dp(tp);
5444-
break;
5445-
5446-
case RTL_GIGA_MAC_VER_32:
5447-
case RTL_GIGA_MAC_VER_33:
5448-
rtl_hw_start_8168e_1(tp);
5449-
break;
5450-
case RTL_GIGA_MAC_VER_34:
5451-
rtl_hw_start_8168e_2(tp);
5452-
break;
5453-
5454-
case RTL_GIGA_MAC_VER_35:
5455-
case RTL_GIGA_MAC_VER_36:
5456-
rtl_hw_start_8168f_1(tp);
5457-
break;
5458-
5459-
case RTL_GIGA_MAC_VER_38:
5460-
rtl_hw_start_8411(tp);
5461-
break;
5462-
5463-
case RTL_GIGA_MAC_VER_40:
5464-
case RTL_GIGA_MAC_VER_41:
5465-
rtl_hw_start_8168g_1(tp);
5466-
break;
5467-
case RTL_GIGA_MAC_VER_42:
5468-
rtl_hw_start_8168g_2(tp);
5469-
break;
5470-
5471-
case RTL_GIGA_MAC_VER_44:
5472-
rtl_hw_start_8411_2(tp);
5473-
break;
5474-
5475-
case RTL_GIGA_MAC_VER_45:
5476-
case RTL_GIGA_MAC_VER_46:
5477-
rtl_hw_start_8168h_1(tp);
5478-
break;
5479-
5480-
case RTL_GIGA_MAC_VER_49:
5481-
rtl_hw_start_8168ep_1(tp);
5482-
break;
5483-
5484-
case RTL_GIGA_MAC_VER_50:
5485-
rtl_hw_start_8168ep_2(tp);
5486-
break;
5487-
5488-
case RTL_GIGA_MAC_VER_51:
5489-
rtl_hw_start_8168ep_3(tp);
5490-
break;
5491-
5492-
default:
5493-
netif_err(tp, drv, tp->dev,
5494-
"unknown chipset (mac_version = %d)\n",
5495-
tp->mac_version);
5496-
break;
5497-
}
5498-
}
5499-
55005384
static void rtl_hw_start_8102e_1(struct rtl8169_private *tp)
55015385
{
55025386
static const struct ephy_info e_info_8102e_1[] = {
@@ -5622,6 +5506,73 @@ static void rtl_hw_start_8106(struct rtl8169_private *tp)
56225506
rtl_hw_aspm_clkreq_enable(tp, true);
56235507
}
56245508

5509+
static void rtl_hw_config(struct rtl8169_private *tp)
5510+
{
5511+
static const rtl_generic_fct hw_configs[] = {
5512+
[RTL_GIGA_MAC_VER_07] = rtl_hw_start_8102e_1,
5513+
[RTL_GIGA_MAC_VER_08] = rtl_hw_start_8102e_3,
5514+
[RTL_GIGA_MAC_VER_09] = rtl_hw_start_8102e_2,
5515+
[RTL_GIGA_MAC_VER_10] = NULL,
5516+
[RTL_GIGA_MAC_VER_11] = rtl_hw_start_8168bb,
5517+
[RTL_GIGA_MAC_VER_12] = rtl_hw_start_8168bef,
5518+
[RTL_GIGA_MAC_VER_13] = NULL,
5519+
[RTL_GIGA_MAC_VER_14] = NULL,
5520+
[RTL_GIGA_MAC_VER_15] = NULL,
5521+
[RTL_GIGA_MAC_VER_16] = NULL,
5522+
[RTL_GIGA_MAC_VER_17] = rtl_hw_start_8168bef,
5523+
[RTL_GIGA_MAC_VER_18] = rtl_hw_start_8168cp_1,
5524+
[RTL_GIGA_MAC_VER_19] = rtl_hw_start_8168c_1,
5525+
[RTL_GIGA_MAC_VER_20] = rtl_hw_start_8168c_2,
5526+
[RTL_GIGA_MAC_VER_21] = rtl_hw_start_8168c_3,
5527+
[RTL_GIGA_MAC_VER_22] = rtl_hw_start_8168c_4,
5528+
[RTL_GIGA_MAC_VER_23] = rtl_hw_start_8168cp_2,
5529+
[RTL_GIGA_MAC_VER_24] = rtl_hw_start_8168cp_3,
5530+
[RTL_GIGA_MAC_VER_25] = rtl_hw_start_8168d,
5531+
[RTL_GIGA_MAC_VER_26] = rtl_hw_start_8168d,
5532+
[RTL_GIGA_MAC_VER_27] = rtl_hw_start_8168d,
5533+
[RTL_GIGA_MAC_VER_28] = rtl_hw_start_8168d_4,
5534+
[RTL_GIGA_MAC_VER_29] = rtl_hw_start_8105e_1,
5535+
[RTL_GIGA_MAC_VER_30] = rtl_hw_start_8105e_2,
5536+
[RTL_GIGA_MAC_VER_31] = rtl_hw_start_8168dp,
5537+
[RTL_GIGA_MAC_VER_32] = rtl_hw_start_8168e_1,
5538+
[RTL_GIGA_MAC_VER_33] = rtl_hw_start_8168e_1,
5539+
[RTL_GIGA_MAC_VER_34] = rtl_hw_start_8168e_2,
5540+
[RTL_GIGA_MAC_VER_35] = rtl_hw_start_8168f_1,
5541+
[RTL_GIGA_MAC_VER_36] = rtl_hw_start_8168f_1,
5542+
[RTL_GIGA_MAC_VER_37] = rtl_hw_start_8402,
5543+
[RTL_GIGA_MAC_VER_38] = rtl_hw_start_8411,
5544+
[RTL_GIGA_MAC_VER_39] = rtl_hw_start_8106,
5545+
[RTL_GIGA_MAC_VER_40] = rtl_hw_start_8168g_1,
5546+
[RTL_GIGA_MAC_VER_41] = rtl_hw_start_8168g_1,
5547+
[RTL_GIGA_MAC_VER_42] = rtl_hw_start_8168g_2,
5548+
[RTL_GIGA_MAC_VER_43] = rtl_hw_start_8168g_2,
5549+
[RTL_GIGA_MAC_VER_44] = rtl_hw_start_8411_2,
5550+
[RTL_GIGA_MAC_VER_45] = rtl_hw_start_8168h_1,
5551+
[RTL_GIGA_MAC_VER_46] = rtl_hw_start_8168h_1,
5552+
[RTL_GIGA_MAC_VER_47] = rtl_hw_start_8168h_1,
5553+
[RTL_GIGA_MAC_VER_48] = rtl_hw_start_8168h_1,
5554+
[RTL_GIGA_MAC_VER_49] = rtl_hw_start_8168ep_1,
5555+
[RTL_GIGA_MAC_VER_50] = rtl_hw_start_8168ep_2,
5556+
[RTL_GIGA_MAC_VER_51] = rtl_hw_start_8168ep_3,
5557+
};
5558+
5559+
if (hw_configs[tp->mac_version])
5560+
hw_configs[tp->mac_version](tp);
5561+
}
5562+
5563+
static void rtl_hw_start_8168(struct rtl8169_private *tp)
5564+
{
5565+
RTL_W8(tp, MaxTxPacketSize, TxPacketMax);
5566+
5567+
/* Workaround for RxFIFO overflow. */
5568+
if (tp->mac_version == RTL_GIGA_MAC_VER_11) {
5569+
tp->irq_mask |= RxFIFOOver;
5570+
tp->irq_mask &= ~RxOverflow;
5571+
}
5572+
5573+
rtl_hw_config(tp);
5574+
}
5575+
56255576
static void rtl_hw_start_8101(struct rtl8169_private *tp)
56265577
{
56275578
if (tp->mac_version >= RTL_GIGA_MAC_VER_30)
@@ -5637,41 +5588,7 @@ static void rtl_hw_start_8101(struct rtl8169_private *tp)
56375588
tp->cp_cmd &= CPCMD_QUIRK_MASK;
56385589
RTL_W16(tp, CPlusCmd, tp->cp_cmd);
56395590

5640-
switch (tp->mac_version) {
5641-
case RTL_GIGA_MAC_VER_07:
5642-
rtl_hw_start_8102e_1(tp);
5643-
break;
5644-
5645-
case RTL_GIGA_MAC_VER_08:
5646-
rtl_hw_start_8102e_3(tp);
5647-
break;
5648-
5649-
case RTL_GIGA_MAC_VER_09:
5650-
rtl_hw_start_8102e_2(tp);
5651-
break;
5652-
5653-
case RTL_GIGA_MAC_VER_29:
5654-
rtl_hw_start_8105e_1(tp);
5655-
break;
5656-
case RTL_GIGA_MAC_VER_30:
5657-
rtl_hw_start_8105e_2(tp);
5658-
break;
5659-
5660-
case RTL_GIGA_MAC_VER_37:
5661-
rtl_hw_start_8402(tp);
5662-
break;
5663-
5664-
case RTL_GIGA_MAC_VER_39:
5665-
rtl_hw_start_8106(tp);
5666-
break;
5667-
case RTL_GIGA_MAC_VER_43:
5668-
rtl_hw_start_8168g_2(tp);
5669-
break;
5670-
case RTL_GIGA_MAC_VER_47:
5671-
case RTL_GIGA_MAC_VER_48:
5672-
rtl_hw_start_8168h_1(tp);
5673-
break;
5674-
}
5591+
rtl_hw_config(tp);
56755592
}
56765593

56775594
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)

0 commit comments

Comments
 (0)