forked from openwrt/openwrt
-
-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
generic: backport upstream r8169 patches
These patches have been added in linux v6.12 release. Signed-off-by: Álvaro Fernández Rojas <[email protected]>
- Loading branch information
Showing
5 changed files
with
406 additions
and
0 deletions.
There are no files selected for viewing
245 changes: 245 additions & 0 deletions
245
target/linux/generic/backport-6.6/780-22-v6.12-r8169-add-support-for-RTL8126A-rev.b.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,245 @@ | ||
From 69cb89981c7a181d857b634c0740e914d5df79ea Mon Sep 17 00:00:00 2001 | ||
From: ChunHao Lin <[email protected]> | ||
Date: Fri, 30 Aug 2024 10:18:10 +0800 | ||
Subject: [PATCH 43/47] r8169: add support for RTL8126A rev.b | ||
|
||
Add support for RTL8126A rev.b. Its XID is 0x64a. It is basically | ||
based on the one with XID 0x649, but with different firmware file. | ||
|
||
Signed-off-by: ChunHao Lin <[email protected]> | ||
Reviewed-by: Heiner Kallweit <[email protected]> | ||
Link: https://patch.msgid.link/[email protected] | ||
Signed-off-by: Jakub Kicinski <[email protected]> | ||
--- | ||
drivers/net/ethernet/realtek/r8169.h | 1 + | ||
drivers/net/ethernet/realtek/r8169_main.c | 42 ++++++++++++------- | ||
.../net/ethernet/realtek/r8169_phy_config.c | 1 + | ||
3 files changed, 29 insertions(+), 15 deletions(-) | ||
|
||
--- a/drivers/net/ethernet/realtek/r8169.h | ||
+++ b/drivers/net/ethernet/realtek/r8169.h | ||
@@ -69,6 +69,7 @@ enum mac_version { | ||
RTL_GIGA_MAC_VER_61, | ||
RTL_GIGA_MAC_VER_63, | ||
RTL_GIGA_MAC_VER_65, | ||
+ RTL_GIGA_MAC_VER_66, | ||
RTL_GIGA_MAC_NONE | ||
}; | ||
|
||
--- a/drivers/net/ethernet/realtek/r8169_main.c | ||
+++ b/drivers/net/ethernet/realtek/r8169_main.c | ||
@@ -56,6 +56,7 @@ | ||
#define FIRMWARE_8125A_3 "rtl_nic/rtl8125a-3.fw" | ||
#define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw" | ||
#define FIRMWARE_8126A_2 "rtl_nic/rtl8126a-2.fw" | ||
+#define FIRMWARE_8126A_3 "rtl_nic/rtl8126a-3.fw" | ||
|
||
#define TX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */ | ||
#define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */ | ||
@@ -138,6 +139,7 @@ static const struct { | ||
/* reserve 62 for CFG_METHOD_4 in the vendor driver */ | ||
[RTL_GIGA_MAC_VER_63] = {"RTL8125B", FIRMWARE_8125B_2}, | ||
[RTL_GIGA_MAC_VER_65] = {"RTL8126A", FIRMWARE_8126A_2}, | ||
+ [RTL_GIGA_MAC_VER_66] = {"RTL8126A", FIRMWARE_8126A_3}, | ||
}; | ||
|
||
static const struct pci_device_id rtl8169_pci_tbl[] = { | ||
@@ -1201,7 +1203,7 @@ static void rtl_writephy(struct rtl8169_ | ||
case RTL_GIGA_MAC_VER_31: | ||
r8168dp_2_mdio_write(tp, location, val); | ||
break; | ||
- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_66: | ||
r8168g_mdio_write(tp, location, val); | ||
break; | ||
default: | ||
@@ -1216,7 +1218,7 @@ static int rtl_readphy(struct rtl8169_pr | ||
case RTL_GIGA_MAC_VER_28: | ||
case RTL_GIGA_MAC_VER_31: | ||
return r8168dp_2_mdio_read(tp, location); | ||
- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_66: | ||
return r8168g_mdio_read(tp, location); | ||
default: | ||
return r8169_mdio_read(tp, location); | ||
@@ -1425,7 +1427,7 @@ static void rtl_set_d3_pll_down(struct r | ||
case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_26: | ||
case RTL_GIGA_MAC_VER_29 ... RTL_GIGA_MAC_VER_30: | ||
case RTL_GIGA_MAC_VER_32 ... RTL_GIGA_MAC_VER_37: | ||
- case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_66: | ||
if (enable) | ||
RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) & ~D3_NO_PLL_DOWN); | ||
else | ||
@@ -1592,7 +1594,7 @@ static void __rtl8169_set_wol(struct rtl | ||
break; | ||
case RTL_GIGA_MAC_VER_34: | ||
case RTL_GIGA_MAC_VER_37: | ||
- case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_66: | ||
if (wolopts) | ||
rtl_mod_config2(tp, 0, PME_SIGNAL); | ||
else | ||
@@ -2071,6 +2073,7 @@ static void rtl_set_eee_txidle_timer(str | ||
case RTL_GIGA_MAC_VER_61: | ||
case RTL_GIGA_MAC_VER_63: | ||
case RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_66: | ||
tp->tx_lpi_timer = timer_val; | ||
RTL_W16(tp, EEE_TXIDLE_TIMER_8125, timer_val); | ||
break; | ||
@@ -2200,6 +2203,7 @@ static enum mac_version rtl8169_get_mac_ | ||
enum mac_version ver; | ||
} mac_info[] = { | ||
/* 8126A family. */ | ||
+ { 0x7cf, 0x64a, RTL_GIGA_MAC_VER_66 }, | ||
{ 0x7cf, 0x649, RTL_GIGA_MAC_VER_65 }, | ||
|
||
/* 8125B family. */ | ||
@@ -2471,6 +2475,7 @@ static void rtl_init_rxcfg(struct rtl816 | ||
break; | ||
case RTL_GIGA_MAC_VER_63: | ||
case RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_66: | ||
RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST | | ||
RX_PAUSE_SLOT_ON); | ||
break; | ||
@@ -2657,7 +2662,7 @@ static void rtl_wait_txrx_fifo_empty(str | ||
case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_61: | ||
rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42); | ||
break; | ||
- case RTL_GIGA_MAC_VER_63 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_63 ... RTL_GIGA_MAC_VER_66: | ||
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq); | ||
rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42); | ||
rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond_2, 100, 42); | ||
@@ -2900,7 +2905,7 @@ static void rtl_enable_exit_l1(struct rt | ||
case RTL_GIGA_MAC_VER_37 ... RTL_GIGA_MAC_VER_38: | ||
rtl_eri_set_bits(tp, 0xd4, 0x0c00); | ||
break; | ||
- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_66: | ||
r8168_mac_ocp_modify(tp, 0xc0ac, 0, 0x1f80); | ||
break; | ||
default: | ||
@@ -2914,7 +2919,7 @@ static void rtl_disable_exit_l1(struct r | ||
case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38: | ||
rtl_eri_clear_bits(tp, 0xd4, 0x1f00); | ||
break; | ||
- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_66: | ||
r8168_mac_ocp_modify(tp, 0xc0ac, 0x1f80, 0); | ||
break; | ||
default: | ||
@@ -2941,6 +2946,7 @@ static void rtl_hw_aspm_clkreq_enable(st | ||
rtl_mod_config5(tp, 0, ASPM_en); | ||
switch (tp->mac_version) { | ||
case RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_66: | ||
val8 = RTL_R8(tp, INT_CFG0_8125) | INT_CFG0_CLKREQEN; | ||
RTL_W8(tp, INT_CFG0_8125, val8); | ||
break; | ||
@@ -2951,7 +2957,7 @@ static void rtl_hw_aspm_clkreq_enable(st | ||
|
||
switch (tp->mac_version) { | ||
case RTL_GIGA_MAC_VER_46 ... RTL_GIGA_MAC_VER_48: | ||
- case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66: | ||
/* reset ephy tx/rx disable timer */ | ||
r8168_mac_ocp_modify(tp, 0xe094, 0xff00, 0); | ||
/* chip can trigger L1.2 */ | ||
@@ -2963,7 +2969,7 @@ static void rtl_hw_aspm_clkreq_enable(st | ||
} else { | ||
switch (tp->mac_version) { | ||
case RTL_GIGA_MAC_VER_46 ... RTL_GIGA_MAC_VER_48: | ||
- case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66: | ||
r8168_mac_ocp_modify(tp, 0xe092, 0x00ff, 0); | ||
break; | ||
default: | ||
@@ -2972,6 +2978,7 @@ static void rtl_hw_aspm_clkreq_enable(st | ||
|
||
switch (tp->mac_version) { | ||
case RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_66: | ||
val8 = RTL_R8(tp, INT_CFG0_8125) & ~INT_CFG0_CLKREQEN; | ||
RTL_W8(tp, INT_CFG0_8125, val8); | ||
break; | ||
@@ -3691,10 +3698,12 @@ static void rtl_hw_start_8125_common(str | ||
/* disable new tx descriptor format */ | ||
r8168_mac_ocp_modify(tp, 0xeb58, 0x0001, 0x0000); | ||
|
||
- if (tp->mac_version == RTL_GIGA_MAC_VER_65) | ||
+ if (tp->mac_version == RTL_GIGA_MAC_VER_65 || | ||
+ tp->mac_version == RTL_GIGA_MAC_VER_66) | ||
RTL_W8(tp, 0xD8, RTL_R8(tp, 0xD8) & ~0x02); | ||
|
||
- if (tp->mac_version == RTL_GIGA_MAC_VER_65) | ||
+ if (tp->mac_version == RTL_GIGA_MAC_VER_65 || | ||
+ tp->mac_version == RTL_GIGA_MAC_VER_66) | ||
r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0400); | ||
else if (tp->mac_version == RTL_GIGA_MAC_VER_63) | ||
r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0200); | ||
@@ -3712,7 +3721,8 @@ static void rtl_hw_start_8125_common(str | ||
r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0030); | ||
r8168_mac_ocp_modify(tp, 0xe040, 0x1000, 0x0000); | ||
r8168_mac_ocp_modify(tp, 0xea1c, 0x0003, 0x0001); | ||
- if (tp->mac_version == RTL_GIGA_MAC_VER_65) | ||
+ if (tp->mac_version == RTL_GIGA_MAC_VER_65 || | ||
+ tp->mac_version == RTL_GIGA_MAC_VER_66) | ||
r8168_mac_ocp_modify(tp, 0xea1c, 0x0300, 0x0000); | ||
else | ||
r8168_mac_ocp_modify(tp, 0xea1c, 0x0004, 0x0000); | ||
@@ -3826,6 +3836,7 @@ static void rtl_hw_config(struct rtl8169 | ||
[RTL_GIGA_MAC_VER_61] = rtl_hw_start_8125a_2, | ||
[RTL_GIGA_MAC_VER_63] = rtl_hw_start_8125b, | ||
[RTL_GIGA_MAC_VER_65] = rtl_hw_start_8126a, | ||
+ [RTL_GIGA_MAC_VER_66] = rtl_hw_start_8126a, | ||
}; | ||
|
||
if (hw_configs[tp->mac_version]) | ||
@@ -3846,6 +3857,7 @@ static void rtl_hw_start_8125(struct rtl | ||
break; | ||
case RTL_GIGA_MAC_VER_63: | ||
case RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_66: | ||
for (i = 0xa00; i < 0xa80; i += 4) | ||
RTL_W32(tp, i, 0); | ||
RTL_W16(tp, INT_CFG1_8125, 0x0000); | ||
@@ -4074,7 +4086,7 @@ static void rtl8169_cleanup(struct rtl81 | ||
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq); | ||
rtl_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 666); | ||
break; | ||
- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_66: | ||
rtl_enable_rxdvgate(tp); | ||
fsleep(2000); | ||
break; | ||
@@ -4225,7 +4237,7 @@ static unsigned int rtl_quirk_packet_pad | ||
|
||
switch (tp->mac_version) { | ||
case RTL_GIGA_MAC_VER_34: | ||
- case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66: | ||
padto = max_t(unsigned int, padto, ETH_ZLEN); | ||
break; | ||
default: | ||
@@ -5259,7 +5271,7 @@ static void rtl_hw_initialize(struct rtl | ||
case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_48: | ||
rtl_hw_init_8168g(tp); | ||
break; | ||
- case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_65: | ||
+ case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_66: | ||
rtl_hw_init_8125(tp); | ||
break; | ||
default: | ||
--- a/drivers/net/ethernet/realtek/r8169_phy_config.c | ||
+++ b/drivers/net/ethernet/realtek/r8169_phy_config.c | ||
@@ -1159,6 +1159,7 @@ void r8169_hw_phy_config(struct rtl8169_ | ||
[RTL_GIGA_MAC_VER_61] = rtl8125a_2_hw_phy_config, | ||
[RTL_GIGA_MAC_VER_63] = rtl8125b_hw_phy_config, | ||
[RTL_GIGA_MAC_VER_65] = rtl8126a_hw_phy_config, | ||
+ [RTL_GIGA_MAC_VER_66] = rtl8126a_hw_phy_config, | ||
}; | ||
|
||
if (phy_configs[ver]) |
38 changes: 38 additions & 0 deletions
38
...generic/backport-6.6/780-23-v6.12-r8169-Fix-spelling-mistake-tx_underun-tx_underrun.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
From 8df9439389a44fb2cc4ef695e08d6a8870b1616c Mon Sep 17 00:00:00 2001 | ||
From: Colin Ian King <[email protected]> | ||
Date: Mon, 9 Sep 2024 15:00:21 +0100 | ||
Subject: [PATCH 44/47] r8169: Fix spelling mistake: "tx_underun" -> | ||
"tx_underrun" | ||
|
||
There is a spelling mistake in the struct field tx_underun, rename | ||
it to tx_underrun. | ||
|
||
Signed-off-by: Colin Ian King <[email protected]> | ||
Reviewed-by: Simon Horman <[email protected]> | ||
Reviewed-by: Heiner Kallweit <[email protected]> | ||
Link: https://patch.msgid.link/[email protected] | ||
Signed-off-by: Jakub Kicinski <[email protected]> | ||
--- | ||
drivers/net/ethernet/realtek/r8169_main.c | 4 ++-- | ||
1 file changed, 2 insertions(+), 2 deletions(-) | ||
|
||
--- a/drivers/net/ethernet/realtek/r8169_main.c | ||
+++ b/drivers/net/ethernet/realtek/r8169_main.c | ||
@@ -578,7 +578,7 @@ struct rtl8169_counters { | ||
__le64 rx_broadcast; | ||
__le32 rx_multicast; | ||
__le16 tx_aborted; | ||
- __le16 tx_underun; | ||
+ __le16 tx_underrun; | ||
}; | ||
|
||
struct rtl8169_tc_offsets { | ||
@@ -1843,7 +1843,7 @@ static void rtl8169_get_ethtool_stats(st | ||
data[9] = le64_to_cpu(counters->rx_broadcast); | ||
data[10] = le32_to_cpu(counters->rx_multicast); | ||
data[11] = le16_to_cpu(counters->tx_aborted); | ||
- data[12] = le16_to_cpu(counters->tx_underun); | ||
+ data[12] = le16_to_cpu(counters->tx_underrun); | ||
} | ||
|
||
static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data) |
41 changes: 41 additions & 0 deletions
41
...linux/generic/backport-6.6/780-24-v6.12-r8169-disable-ALDPS-per-default-for-RTL8125.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
From b9c7ac4fe22c608acf6153a3329df2b6b6cd416c Mon Sep 17 00:00:00 2001 | ||
From: Heiner Kallweit <[email protected]> | ||
Date: Wed, 11 Sep 2024 15:51:11 +0200 | ||
Subject: [PATCH 45/47] r8169: disable ALDPS per default for RTL8125 | ||
|
||
En-Wei reported that traffic breaks if cable is unplugged for more | ||
than 3s and then re-plugged. This was supposed to be fixed by | ||
621735f59064 ("r8169: fix rare issue with broken rx after link-down on | ||
RTL8125"). But apparently this didn't fix the issue for everybody. | ||
The 3s threshold rang a bell, as this is the delay after which ALDPS | ||
kicks in. And indeed disabling ALDPS fixes the issue for this user. | ||
Maybe this fixes the issue in general. In a follow-up step we could | ||
remove the first fix attempt and see whether anybody complains. | ||
|
||
Fixes: f1bce4ad2f1c ("r8169: add support for RTL8125") | ||
Tested-by: En-Wei WU <[email protected]> | ||
Signed-off-by: Heiner Kallweit <[email protected]> | ||
Link: https://patch.msgid.link/[email protected] | ||
Signed-off-by: Jakub Kicinski <[email protected]> | ||
--- | ||
drivers/net/ethernet/realtek/r8169_phy_config.c | 2 ++ | ||
1 file changed, 2 insertions(+) | ||
|
||
--- a/drivers/net/ethernet/realtek/r8169_phy_config.c | ||
+++ b/drivers/net/ethernet/realtek/r8169_phy_config.c | ||
@@ -1060,6 +1060,7 @@ static void rtl8125a_2_hw_phy_config(str | ||
phy_modify_paged(phydev, 0xa86, 0x15, 0x0001, 0x0000); | ||
rtl8168g_enable_gphy_10m(phydev); | ||
|
||
+ rtl8168g_disable_aldps(phydev); | ||
rtl8125a_config_eee_phy(phydev); | ||
} | ||
|
||
@@ -1099,6 +1100,7 @@ static void rtl8125b_hw_phy_config(struc | ||
phy_modify_paged(phydev, 0xbf8, 0x12, 0xe000, 0xa000); | ||
|
||
rtl8125_legacy_force_mode(phydev); | ||
+ rtl8168g_disable_aldps(phydev); | ||
rtl8125b_config_eee_phy(phydev); | ||
} | ||
|
56 changes: 56 additions & 0 deletions
56
...generic/backport-6.6/780-25-v6.12-r8169-add-tally-counter-fields-added-with-RTL8125.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
From ced8e8b8f40accfcce4a2bbd8b150aa76d5eff9a Mon Sep 17 00:00:00 2001 | ||
From: Heiner Kallweit <[email protected]> | ||
Date: Tue, 17 Sep 2024 23:04:46 +0200 | ||
Subject: [PATCH 46/47] r8169: add tally counter fields added with RTL8125 | ||
|
||
RTL8125 added fields to the tally counter, what may result in the chip | ||
dma'ing these new fields to unallocated memory. Therefore make sure | ||
that the allocated memory area is big enough to hold all of the | ||
tally counter values, even if we use only parts of it. | ||
|
||
Fixes: f1bce4ad2f1c ("r8169: add support for RTL8125") | ||
Cc: [email protected] | ||
Signed-off-by: Heiner Kallweit <[email protected]> | ||
Reviewed-by: Simon Horman <[email protected]> | ||
Link: https://patch.msgid.link/[email protected] | ||
Signed-off-by: Paolo Abeni <[email protected]> | ||
--- | ||
drivers/net/ethernet/realtek/r8169_main.c | 27 +++++++++++++++++++++++ | ||
1 file changed, 27 insertions(+) | ||
|
||
--- a/drivers/net/ethernet/realtek/r8169_main.c | ||
+++ b/drivers/net/ethernet/realtek/r8169_main.c | ||
@@ -579,6 +579,33 @@ struct rtl8169_counters { | ||
__le32 rx_multicast; | ||
__le16 tx_aborted; | ||
__le16 tx_underrun; | ||
+ /* new since RTL8125 */ | ||
+ __le64 tx_octets; | ||
+ __le64 rx_octets; | ||
+ __le64 rx_multicast64; | ||
+ __le64 tx_unicast64; | ||
+ __le64 tx_broadcast64; | ||
+ __le64 tx_multicast64; | ||
+ __le32 tx_pause_on; | ||
+ __le32 tx_pause_off; | ||
+ __le32 tx_pause_all; | ||
+ __le32 tx_deferred; | ||
+ __le32 tx_late_collision; | ||
+ __le32 tx_all_collision; | ||
+ __le32 tx_aborted32; | ||
+ __le32 align_errors32; | ||
+ __le32 rx_frame_too_long; | ||
+ __le32 rx_runt; | ||
+ __le32 rx_pause_on; | ||
+ __le32 rx_pause_off; | ||
+ __le32 rx_pause_all; | ||
+ __le32 rx_unknown_opcode; | ||
+ __le32 rx_mac_error; | ||
+ __le32 tx_underrun32; | ||
+ __le32 rx_mac_missed; | ||
+ __le32 rx_tcam_dropped; | ||
+ __le32 tdu; | ||
+ __le32 rdu; | ||
}; | ||
|
||
struct rtl8169_tc_offsets { |
Oops, something went wrong.