1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
Added compatibility with Linux Kernel 5.17+.
Author: Karlson2k (Evgeny Grin)
Gentoo bug: https://bugs.gentoo.org/839282
diff --git a/src/r8125_n.c b/src/r8125_n.c
--- a/src/r8125_n.c
+++ b/src/r8125_n.c
@@ -349,7 +349,7 @@ static int rtl8125_change_mtu(struct net_device *dev, int new_mtu);
static void rtl8125_down(struct net_device *dev);
static int rtl8125_set_mac_address(struct net_device *dev, void *p);
-static void rtl8125_rar_set(struct rtl8125_private *tp, uint8_t *addr);
+static void rtl8125_rar_set(struct rtl8125_private *tp, const uint8_t *addr);
static void rtl8125_desc_addr_fill(struct rtl8125_private *);
static void rtl8125_tx_desc_init(struct rtl8125_private *tp);
static void rtl8125_rx_desc_init(struct rtl8125_private *tp);
@@ -1750,7 +1750,13 @@ static void rtl8125_proc_module_init(void)
static int rtl8125_proc_open(struct inode *inode, struct file *file)
{
struct net_device *dev = proc_get_parent_data(inode);
- int (*show)(struct seq_file *, void *) = PDE_DATA(inode);
+ int (*show)(struct seq_file *, void *) =
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
+ PDE_DATA(inode);
+#else
+ pde_data(inode);
+#endif
+
return single_open(file, show, dev);
}
@@ -5234,8 +5240,15 @@ rtl8125_set_ring_size(struct rtl8125_private *tp, u32 rx, u32 tx)
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
static void rtl8125_get_ringparam(struct net_device *dev,
struct ethtool_ringparam *ring)
+#else
+static void rtl8125_get_ringparam(struct net_device* dev,
+ struct ethtool_ringparam* ring,
+ struct kernel_ethtool_ringparam* kernel_ring,
+ struct netlink_ext_ack* extack)
+#endif
{
struct rtl8125_private *tp = netdev_priv(dev);
@@ -5245,8 +5258,15 @@ static void rtl8125_get_ringparam(struct net_device *dev,
ring->tx_pending = tp->tx_ring[0].num_tx_desc;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
static int rtl8125_set_ringparam(struct net_device *dev,
struct ethtool_ringparam *ring)
+#else
+static int rtl8125_set_ringparam(struct net_device* dev,
+ struct ethtool_ringparam* ring,
+ struct kernel_ethtool_ringparam* kernel_ring,
+ struct netlink_ext_ack* extack)
+#endif
{
struct rtl8125_private *tp = netdev_priv(dev);
u32 new_rx_count, new_tx_count;
@@ -10889,6 +10909,9 @@ rtl8125_get_mac_address(struct net_device *dev)
struct rtl8125_private *tp = netdev_priv(dev);
int i;
u8 mac_addr[MAC_ADDR_LEN];
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0)
+ u8 addr[ETH_ALEN];
+#endif
for (i = 0; i < MAC_ADDR_LEN; i++)
mac_addr[i] = RTL_R8(tp, MAC0 + i);
@@ -10916,9 +10939,17 @@ rtl8125_get_mac_address(struct net_device *dev)
rtl8125_rar_set(tp, mac_addr);
for (i = 0; i < MAC_ADDR_LEN; i++) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
dev->dev_addr[i] = RTL_R8(tp, MAC0 + i);
tp->org_mac_addr[i] = dev->dev_addr[i]; /* keep the original MAC address */
+#else
+ addr[i] = RTL_R8(tp, MAC0 + i);
+ tp->org_mac_addr[i] = addr[i]; /* keep the original MAC address */
+#endif
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0)
+ eth_hw_addr_set(dev, addr);
+#endif
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)
memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
#endif
@@ -10944,7 +10975,11 @@ rtl8125_set_mac_address(struct net_device *dev,
if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,17,0)
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
+#else
+ eth_hw_addr_set(dev, addr->sa_data);
+#endif
rtl8125_rar_set(tp, dev->dev_addr);
@@ -10959,7 +10994,7 @@ rtl8125_set_mac_address(struct net_device *dev,
*****************************************************************************/
void
rtl8125_rar_set(struct rtl8125_private *tp,
- uint8_t *addr)
+ const uint8_t *addr)
{
uint32_t rar_low = 0;
uint32_t rar_high = 0;
|