Projects
Essentials
r8168
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 30
View file
r8168.changes
Changed
@@ -1,4 +1,18 @@ ------------------------------------------------------------------- +Tue May 21 10:35:10 UTC 2024 - Dr. Werner Fink <werner@suse.de> + +- Update to new version r8168-8.053.00 +- Remove patches now upstream + * r8168-gcc14.patch +- Port patches + * r8168-kernel_version.patch + * r8168-support-dev0x8136.patch + * r8168-support-linux-5.19.patch +- Add patch r8168-support-ethtool_keee.patch + * Port struct ethtool_eee to new kernel struct ethtool_eee + and hopefully this works + +------------------------------------------------------------------- Thu Mar 28 12:50:15 UTC 2024 - Dr. Werner Fink <werner@suse.de> - Use kernel version of the include diretory instead of the used
View file
r8168.spec
Changed
@@ -18,7 +18,7 @@ #!BuildIgnore: enough-build-resources Name: r8168 -Version: 8.052.01 +Version: 8.053.00 Release: 0 Summary: Device driver for RealTek Gigabit Ethernet controllers License: GPL-2.0-or-later @@ -32,7 +32,7 @@ Patch0: r8168-kernel_version.patch Patch1: r8168-configuration.patch Patch2: r8168-support-linux-5.19.patch -Patch3: r8168-gcc14.patch +Patch3: r8168-support-ethtool_keee.patch Patch4: r8168-support-dev0x8136.patch Patch5: r8168-support-linux-L15.5.patch BuildRequires: kernel-source @@ -65,7 +65,6 @@ %patch -P 0 -b .p0 %patch -P 1 -b .p1 %patch -P 2 -p1 -b .p2 -%patch -P 3 -b .p3 %patch -P 4 -p1 -b .p4 if test -e /usr/src/linux/include/linux/ethtool.h then @@ -74,6 +73,11 @@ then %patch -P 5 -b .p5 fi + argc=$(sed -rn '/ethtool_keee/p' /usr/src/linux/include/linux/ethtool.h | wc -l) + if test -n "$argc" -a "$argc" -eq 3 + then +%patch -P 3 -p1 -b .p3 + fi fi if test -e /usr/src/linux/include/net/gso.h then
View file
r8168-gcc14.patch
Deleted
@@ -1,25 +0,0 @@ ---- - src/r8168_n.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - ---- src/r8168_n.c -+++ src/r8168_n.c 2024-03-13 12:25:52.886342182 +0000 -@@ -6312,7 +6312,7 @@ rtl8168_get_drvinfo(struct net_device *d - info->eedump_len = tp->eeprom_len; - BUILD_BUG_ON(sizeof(info->fw_version) < sizeof(rtl_fw->version)); - if (rtl_fw) -- strlcpy(info->fw_version, rtl_fw->version, -+ strscpy(info->fw_version, rtl_fw->version, - sizeof(info->fw_version)); - } - -@@ -28103,7 +28103,8 @@ rtl8168_link_timer(struct timer_list *t) - } - */ - --int rtl8168_enable_msix(struct rtl8168_private *tp) -+static int -+rtl8168_enable_msix(struct rtl8168_private *tp) - { - int i, nvecs = 0; - struct msix_entry msix_entR8168_MAX_MSIX_VEC;
View file
r8168-kernel_version.patch
Changed
@@ -5,7 +5,7 @@ --- src/r8168.h +++ src/r8168.h 2024-03-13 11:51:59.011947503 +0000 -@@ -133,6 +133,10 @@ do { \ +@@ -196,6 +196,10 @@ do { \ } while (0) #endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15) @@ -35,7 +35,7 @@ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,37) #include <linux/prefetch.h> #endif -@@ -590,8 +595,12 @@ static void rtl8168_set_rx_mode(struct n +@@ -586,8 +591,12 @@ static void rtl8168_set_rx_mode(struct n #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0) static void rtl8168_tx_timeout(struct net_device *dev, unsigned int txqueue); #else @@ -48,7 +48,7 @@ static struct net_device_stats *rtl8168_get_stats(struct net_device *dev); static int rtl8168_rx_interrupt(struct net_device *, struct rtl8168_private *, struct rtl8168_rx_ring *, napi_budget); #ifdef CONFIG_R8168_NAPI -@@ -30765,8 +30774,12 @@ static void +@@ -30897,8 +30906,12 @@ static void rtl8168_tx_timeout(struct net_device *dev, unsigned int txqueue) #else static void @@ -61,7 +61,7 @@ { struct rtl8168_private *tp = netdev_priv(dev); -@@ -31502,7 +31515,7 @@ rtl8168_rx_interrupt(struct net_device * +@@ -31636,7 +31649,7 @@ rtl8168_rx_interrupt(struct net_device * if (rtl8168_rx_vlan_skb(tp, desc, skb) < 0) rtl8168_rx_skb(tp, skb, ring_index);
View file
r8168-support-dev0x8136.patch
Changed
@@ -12,7 +12,7 @@ index 28d7636..cbf43d1 100755 --- a/src/r8168_n.c +++ b/src/r8168_n.c -@@ -430,6 +430,7 @@ static const struct { +@@ -426,6 +426,7 @@ static const struct { static struct pci_device_id rtl8168_pci_tbl = { { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8168), },
View file
r8168-support-ethtool_keee.patch
Added
@@ -0,0 +1,119 @@ +From 94426e16197c244d03aad0434e3490acdaa830fe Mon Sep 17 00:00:00 2001 +From: Masato TOYOSHIMA <phoepsilonix@phoepsilonix.love> +Date: Tue, 14 May 2024 14:52:58 +0900 +Subject: PATCH Linux 6.9 compat: change to ethtool_keee from ethtool_eee + +linux/include/linux/ethtool.h + +struct ethtool_ops + int (*get_eee)(struct net_device *dev, struct ethtool_keee *eee); + int (*set_eee)(struct net_device *dev, struct ethtool_keee *eee); + +change to ethtool_keee from ethtool_eee + rtl_ethtool_get_eee(struct net_device *net, struct ethtool_keee *edata) + rtl_ethtool_set_eee(struct net_device *net, struct ethtool_keee *edata) +--- + src/r8168_n.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 44 insertions(+) + +diff --git a/src/r8168_n.c b/src/r8168_n.c +index ad63f42..3d67641 100755 +--- a/src/r8168_n.c ++++ b/src/r8168_n.c +@@ -7941,7 +7941,11 @@ rtl8168_device_lpi_t_to_ethtool_lpi_t(struct rtl8168_private *tp , u32 lpi_timer + } + + static int ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) ++rtl_ethtool_get_eee(struct net_device *net, struct ethtool_keee *edata) ++#else + rtl_ethtool_get_eee(struct net_device *net, struct ethtool_eee *edata) ++#endif + { + struct rtl8168_private *tp = netdev_priv(net); + struct ethtool_eee *eee = &tp->eee; +@@ -7975,9 +7979,15 @@ rtl_ethtool_get_eee(struct net_device *net, struct ethtool_eee *edata) + + edata->eee_enabled = !!val; + edata->eee_active = !!(supported & adv & lp); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) ++ ethtool_convert_legacy_u32_to_link_mode(edata->supported, supported); ++ ethtool_convert_legacy_u32_to_link_mode(edata->advertised, adv); ++ ethtool_convert_legacy_u32_to_link_mode(edata->lp_advertised, lp); ++#else + edata->supported = supported; + edata->advertised = adv; + edata->lp_advertised = lp; ++#endif + edata->tx_lpi_enabled = edata->eee_enabled; + edata->tx_lpi_timer = tx_lpi_timer; + +@@ -7985,11 +7995,19 @@ rtl_ethtool_get_eee(struct net_device *net, struct ethtool_eee *edata) + } + + static int ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) ++rtl_ethtool_set_eee(struct net_device *net, struct ethtool_keee *edata) ++#else + rtl_ethtool_set_eee(struct net_device *net, struct ethtool_eee *edata) ++#endif + { + struct rtl8168_private *tp = netdev_priv(net); + struct ethtool_eee *eee = &tp->eee; ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) ++ u32 advertising, adv; ++#else + u32 advertising; ++#endif + int rc = 0; + + if (!rtl8168_support_eee(tp)) +@@ -8013,6 +8031,18 @@ rtl_ethtool_set_eee(struct net_device *net, struct ethtool_eee *edata) + } + + advertising = tp->advertising; ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) ++ ethtool_convert_link_mode_to_legacy_u32(&adv, edata->advertised); ++ if (linkmode_empty(edata->advertised)) { ++ adv = advertising & eee->supported; ++ ethtool_convert_legacy_u32_to_link_mode(edata->advertised, adv); ++ } else if (!linkmode_empty(edata->advertised) & ~advertising) { ++ dev_printk(KERN_WARNING, tp_to_dev(tp), "EEE advertised %x must be a subset of autoneg advertised speeds %x\n", ++ adv, advertising); ++ rc = -EINVAL; ++ goto out; ++ } ++#else + if (!edata->advertised) { + edata->advertised = advertising & eee->supported; + } else if (edata->advertised & ~advertising) { +@@ -8021,15 +8051,29 @@ rtl_ethtool_set_eee(struct net_device *net, struct ethtool_eee *edata) + rc = -EINVAL; + goto out; + } ++#endif + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) ++ if (!linkmode_empty(edata->advertised) & ~eee->supported) { ++ dev_printk(KERN_WARNING, tp_to_dev(tp), "EEE advertised %x must be a subset of support %x\n", ++ adv, eee->supported); ++ rc = -EINVAL; ++ goto out; ++ } ++#else + if (edata->advertised & ~eee->supported) { + dev_printk(KERN_WARNING, tp_to_dev(tp), "EEE advertised %x must be a subset of support %x\n", + edata->advertised, eee->supported); + rc = -EINVAL; + goto out; + } ++#endif + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) ++ ethtool_convert_link_mode_to_legacy_u32(&eee->advertised, edata->advertised); ++#else + eee->advertised = edata->advertised; ++#endif + eee->eee_enabled = edata->eee_enabled; + + if (eee->eee_enabled)
View file
r8168-support-linux-5.19.patch
Changed
@@ -1,18 +1,22 @@ ---- r8168-8.050.03/src/r8168_n.c -+++ r8168-8.050.03/src/r8168_n.c +--- + r8168-8.053.00/src/r8168_n.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- r8168-8.053.00/src/r8168_n.c ++++ r8168-8.053.00/src/r8168_n.c 2024-05-21 09:57:57.192604776 +0000 @@ -126,6 +126,15 @@ #define FIRMWARE_8168FP_3 "rtl_nic/rtl8168fp-3.fw" #define FIRMWARE_8168FP_4 "rtl_nic/rtl8168fp-4.fw" +#if LINUX_VERSION_CODE > KERNEL_VERSION(5, 18, 0) +static inline void netif_set_gso_max_size(struct net_device *dev, -+ unsigned int size) ++ unsigned int size) +{ -+ /* dev->gso_max_size is read locklessly from sk_setup_caps() */ -+ WRITE_ONCE(dev->gso_max_size, size); ++ /* dev->gso_max_size is read locklessly from sk_setup_caps() */ ++ WRITE_ONCE(dev->gso_max_size, size); +} +#endif + - /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast). - The RTL chips use a 64 element hash table based on the Ethernet CRC. */ - static const int multicast_filter_limit = 32; + static const struct { + const char *name; + const char *fw_name;
View file
r8168-support-linux-L15.5.patch
Changed
@@ -4,7 +4,7 @@ --- src/r8168_n.c +++ src/r8168_n.c 2024-03-13 12:10:07.947820999 +0000 -@@ -6986,7 +6986,7 @@ rtl8168_set_ring_size(struct rtl8168_pri +@@ -7234,7 +7234,7 @@ rtl8168_set_ring_size(struct rtl8168_pri } #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) @@ -13,7 +13,7 @@ static void rtl8168_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring, struct kernel_ethtool_ringparam *kernel_ring, -@@ -6994,7 +6994,7 @@ static void rtl8168_get_ringparam(struct +@@ -7242,7 +7242,7 @@ static void rtl8168_get_ringparam(struct #else static void rtl8168_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring) @@ -22,7 +22,7 @@ { struct rtl8168_private *tp = netdev_priv(dev); -@@ -7004,7 +7004,7 @@ static void rtl8168_get_ringparam(struct +@@ -7252,7 +7252,7 @@ static void rtl8168_get_ringparam(struct ring->tx_pending = tp->tx_ring0.num_tx_desc; } @@ -31,7 +31,7 @@ static int rtl8168_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ring, struct kernel_ethtool_ringparam *kernel_ring, -@@ -7012,7 +7012,7 @@ static int rtl8168_set_ringparam(struct +@@ -7260,7 +7260,7 @@ static int rtl8168_set_ringparam(struct #else static int rtl8168_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ring) @@ -40,7 +40,7 @@ { struct rtl8168_private *tp = netdev_priv(dev); u32 new_rx_count, new_tx_count; -@@ -26644,11 +26644,11 @@ rtl8168_release_board(struct pci_dev *pd +@@ -26737,11 +26737,11 @@ rtl8168_release_board(struct pci_dev *pd static void rtl8168_hw_address_set(struct net_device *dev, u8 mac_addrMAC_ADDR_LEN) {
View file
r8168-8.052.01.tar.gz.asc
Deleted
@@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iHUEABYIAB0WIQQMrarPcPZMZU4TGzERZ1x0NCnd7wUCZRk1EAAKCRARZ1x0NCnd -761TAPsHdh+FI5/eoR1/vSKJ8nCBXVmP6xR9q5bHvknbyzcGJAD/Zq5BWgkYnfBR -M3Ow6FM7EZ7+iAlkIRAavYHASGXERQ4= -=QvU5 ------END PGP SIGNATURE-----
View file
r8168-8.053.00.tar.gz.asc
Added
@@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHUEABYKAB0WIQQMrarPcPZMZU4TGzERZ1x0NCnd7wUCZiUOBgAKCRARZ1x0NCnd +7zwaAP9/wR9UAKCbpYCVY4a527hxVnKbIskev0+SNUa++NYyKAD+KCZaGOKSVUOF +AUqJsVPNzKZkPn162vhgkJH9EOfBmQ0= +=DNig +-----END PGP SIGNATURE-----
View file
r8168-8.052.01.tar.gz/Makefile -> r8168-8.053.00.tar.gz/Makefile
Changed
@@ -4,7 +4,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
View file
r8168-8.052.01.tar.gz/README -> r8168-8.053.00.tar.gz/README
Changed
@@ -1,6 +1,6 @@ <Linux device driver for Realtek Ethernet controllers> - This is the Linux device driver released for RealTek RTL8168B/8111B, RTL8168C/8111C, RTL8168CP/8111CP, RTL8168D/8111D, RTL8168DP/8111DP, and RTL8168E/8111E Gigabit Ethernet controllers with PCI-Express interface. + This is the Linux device driver released for RealTek Gigabit Ethernet controllers with PCI-Express interface. <Requirements>
View file
r8168-8.052.01.tar.gz/src/Makefile -> r8168-8.053.00.tar.gz/src/Makefile
Changed
@@ -4,7 +4,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
View file
r8168-8.052.01.tar.gz/src/Makefile_linux24x -> r8168-8.053.00.tar.gz/src/Makefile_linux24x
Changed
@@ -4,7 +4,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
View file
r8168-8.052.01.tar.gz/src/r8168.h -> r8168-8.053.00.tar.gz/src/r8168.h
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free @@ -49,6 +49,69 @@ #endif */ +#ifndef fallthrough +#define fallthrough +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,3,0) +static inline +ssize_t strscpy(char *dest, const char *src, size_t count) +{ + long res = 0; + + if (count == 0) + return -E2BIG; + + while (count) { + char c; + + c = srcres; + destres = c; + if (!c) + return res; + res++; + count--; + } + + /* Hit buffer length without finding a NUL; force NUL-termination. */ + if (res) + destres-1 = '\0'; + + return -E2BIG; +} +#endif + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)) +static inline unsigned char *skb_checksum_start(const struct sk_buff *skb) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)) + return skb->head + skb->csum_start; +#else /* < 2.6.22 */ + return skb_transport_header(skb); +#endif +} +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) +static inline void netdev_tx_sent_queue(struct netdev_queue *dev_queue, + unsigned int bytes) +{} +static inline void netdev_tx_completed_queue(struct netdev_queue *dev_queue, + unsigned int pkts, + unsigned int bytes) +{} +static inline void netdev_tx_reset_queue(struct netdev_queue *q) {} +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) +#define netdev_xmit_more() (0) +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,8,0) +#define netif_testing_on(dev) +#define netif_testing_off(dev) +#endif + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32) typedef int netdev_tx_t; #endif @@ -175,6 +238,10 @@ #define ENABLE_R8168_PROCFS #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) +#define ENABLE_R8168_SYSFS +#endif + #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) #define NETIF_F_HW_VLAN_RX NETIF_F_HW_VLAN_CTAG_RX #define NETIF_F_HW_VLAN_TX NETIF_F_HW_VLAN_CTAG_TX @@ -364,19 +431,19 @@ #define RSS_SUFFIX "" #endif -#define RTL8168_VERSION "8.052.01" NAPI_SUFFIX FIBER_SUFFIX REALWOW_SUFFIX DASH_SUFFIX RSS_SUFFIX +#define RTL8168_VERSION "8.053.00" NAPI_SUFFIX FIBER_SUFFIX REALWOW_SUFFIX DASH_SUFFIX RSS_SUFFIX #define MODULENAME "r8168" #define PFX MODULENAME ": " #define GPL_CLAIM "\ -r8168 Copyright (C) 2023 Realtek NIC software team <nicfae@realtek.com> \n \ +r8168 Copyright (C) 2024 Realtek NIC software team <nicfae@realtek.com> \n \ This program comes with ABSOLUTELY NO WARRANTY; for details, please see <http://www.gnu.org/licenses/>. \n \ This is free software, and you are welcome to redistribute it under certain conditions; see <http://www.gnu.org/licenses/>. \n" #ifdef RTL8168_DEBUG #define assert(expr) \ if(!(expr)) { \ - printk( "Assertion failed! %s,%s,%s,line=%d\n", \ + printk("Assertion failed! %s,%s,%s,line=%d\n", \ #expr,__FILE__,__FUNCTION__,__LINE__); \ } #define dprintk(fmt, args...) do { printk(PFX fmt, ## args); } while (0) @@ -453,6 +520,7 @@ #define RTL8168_TX_TIMEOUT (6 * HZ) #define RTL8168_LINK_TIMEOUT (1 * HZ) #define RTL8168_ESD_TIMEOUT (2 * HZ) +#define RTL8168_DASH_TIMEOUT (0) #define MAX_NUM_TX_DESC 1024 /* Maximum number of Tx descriptor registers */ #define MAX_NUM_RX_DESC 1024 /* Maximum number of Rx descriptor registers */ @@ -548,9 +616,9 @@ /*****************************************************************************/ //#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,3) -#if (( LINUX_VERSION_CODE < KERNEL_VERSION(2,4,27) ) || \ - (( LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) ) && \ - ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,3) ))) +#if ((LINUX_VERSION_CODE < KERNEL_VERSION(2,4,27)) || \ + ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && \ + (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,3)))) /* copied from linux kernel 2.6.20 include/linux/netdev.h */ #define NETDEV_ALIGN 32 #define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1) @@ -636,6 +704,23 @@ #endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) /*****************************************************************************/ +#ifdef CONFIG_R8168_NAPI +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) +#define RTL_NAPI_CONSUME_SKB_ANY(skb, budget) napi_consume_skb(skb, budget) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0) +#define RTL_NAPI_CONSUME_SKB_ANY(skb, budget) dev_consume_skb_any(skb); +#else +#define RTL_NAPI_CONSUME_SKB_ANY(skb, budget) dev_kfree_skb_any(skb); +#endif //LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) +#else //CONFIG_R8168_NAPI +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0) +#define RTL_NAPI_CONSUME_SKB_ANY(skb, budget) dev_consume_skb_any(skb); +#else +#define RTL_NAPI_CONSUME_SKB_ANY(skb, budget) dev_kfree_skb_any(skb); +#endif +#endif //CONFIG_R8168_NAPI + +/*****************************************************************************/ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9) #ifdef __CHECKER__ #define __iomem __attribute__((noderef, address_space(2))) @@ -669,7 +754,7 @@ /*****************************************************************************/ /* 2.5.28 => 2.4.23 */ -#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,5,28) ) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,28)) static inline void _kc_synchronize_irq(void) { @@ -690,12 +775,12 @@ /*****************************************************************************/ /* 2.6.4 => 2.6.0 */ -#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,4) ) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,4)) #define MODULE_VERSION(_version) MODULE_INFO(version, _version) #endif /* 2.6.4 => 2.6.0 */ /*****************************************************************************/ /* 2.6.0 => 2.5.28 */ -#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) ) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) #define MODULE_INFO(version, _version) #ifndef CONFIG_E1000_DISABLE_PACKET_SPLIT #define CONFIG_E1000_DISABLE_PACKET_SPLIT 1 @@ -726,13 +811,13 @@ /*****************************************************************************/ /* 2.4.22 => 2.4.17 */ -#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,4,22) ) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,22)) #define pci_name(x) ((x)->slot_name) #endif /* 2.4.22 => 2.4.17 */ /*****************************************************************************/ /* 2.6.5 => 2.6.0 */ -#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,5) ) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,5)) #define pci_dma_sync_single_for_cpu pci_dma_sync_single #define pci_dma_sync_single_for_device pci_dma_sync_single_for_cpu #endif /* 2.6.5 => 2.6.0 */ @@ -1487,7 +1572,7 @@ };
View file
r8168-8.052.01.tar.gz/src/r8168_asf.c -> r8168-8.053.00.tar.gz/src/r8168_asf.c
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free @@ -384,10 +384,10 @@ int i; if (arg == ASF_GET) - for (i = 0; i < SYSID_LEN ; i++) + for (i = 0; i < SYSID_LEN; i++) datai = rtl8168_eri_read(tp, SysID + i, RW_ONE_BYTE, ERIAR_ASF); else /* arg == ASF_SET */ - for (i = 0; i < SYSID_LEN ; i++) + for (i = 0; i < SYSID_LEN; i++) rtl8168_eri_write(tp, SysID + i, RW_ONE_BYTE, datai, ERIAR_ASF); } @@ -408,9 +408,9 @@ int i, j; if (arg == ASF_GET) - for (i = UUID_LEN - 1, j = 0; i >= 0 ; i--, j++) + for (i = UUID_LEN - 1, j = 0; i >= 0; i--, j++) dataj = rtl8168_eri_read(tp, UUID + i, RW_ONE_BYTE, ERIAR_ASF); else /* arg == ASF_SET */ - for (i = UUID_LEN - 1, j = 0; i >= 0 ; i--, j++) + for (i = UUID_LEN - 1, j = 0; i >= 0; i--, j++) rtl8168_eri_write(tp, UUID + i, RW_ONE_BYTE, dataj, ERIAR_ASF); }
View file
r8168-8.052.01.tar.gz/src/r8168_asf.h -> r8168-8.053.00.tar.gz/src/r8168_asf.h
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
View file
r8168-8.052.01.tar.gz/src/r8168_dash.h -> r8168-8.053.00.tar.gz/src/r8168_dash.h
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free @@ -247,6 +247,7 @@ #define RTL_CMAC_R32(tp, reg) ((unsigned long) readl (tp->cmac_ioaddr + (reg))) int rtl8168_dash_ioctl(struct net_device *dev, struct ifreq *ifr); +bool CheckDashInterrupt(struct net_device *dev, u16 status); void HandleDashInterrupt(struct net_device *dev); int AllocateDashShareMemory(struct net_device *dev); void FreeAllocatedDashShareMemory(struct net_device *dev);
View file
r8168-8.052.01.tar.gz/src/r8168_fiber.h -> r8168-8.053.00.tar.gz/src/r8168_fiber.h
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
View file
r8168-8.052.01.tar.gz/src/r8168_firmware.c -> r8168-8.053.00.tar.gz/src/r8168_firmware.c
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
View file
r8168-8.052.01.tar.gz/src/r8168_firmware.h -> r8168-8.053.00.tar.gz/src/r8168_firmware.h
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek 2.5Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
View file
r8168-8.052.01.tar.gz/src/r8168_n.c -> r8168-8.053.00.tar.gz/src/r8168_n.c
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free @@ -121,10 +121,6 @@ #define FIRMWARE_8168FP_3 "rtl_nic/rtl8168fp-3.fw" #define FIRMWARE_8168FP_4 "rtl_nic/rtl8168fp-4.fw" -/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast). - The RTL chips use a 64 element hash table based on the Ethernet CRC. */ -static const int multicast_filter_limit = 32; - static const struct { const char *name; const char *fw_name; @@ -630,14 +626,17 @@ static void rtl8168_reset_task(void *_data); static void rtl8168_esd_task(void *_data); static void rtl8168_linkchg_task(void *_data); +static void rtl8168_dash_task(void *_data); #else static void rtl8168_reset_task(struct work_struct *work); static void rtl8168_esd_task(struct work_struct *work); static void rtl8168_linkchg_task(struct work_struct *work); +static void rtl8168_dash_task(struct work_struct *work); #endif static void rtl8168_schedule_reset_work(struct rtl8168_private *tp); static void rtl8168_schedule_esd_work(struct rtl8168_private *tp); static void rtl8168_schedule_linkchg_work(struct rtl8168_private *tp); +void rtl8168_schedule_dash_work(struct rtl8168_private *tp); static void rtl8168_init_all_schedule_work(struct rtl8168_private *tp); static void rtl8168_cancel_all_schedule_work(struct rtl8168_private *tp); @@ -791,7 +790,7 @@ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0) #ifndef SET_ETHTOOL_OPS #define SET_ETHTOOL_OPS(netdev,ops) \ - ( (netdev)->ethtool_ops = (ops) ) + ((netdev)->ethtool_ops = (ops)) #endif //SET_ETHTOOL_OPS #endif //LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0) @@ -983,6 +982,16 @@ return retval; } +static bool +rtl8168_sysfs_testmode_on(struct rtl8168_private *tp) +{ +#ifdef ENABLE_R8168_SYSFS + return !!tp->testmode; +#else + return 1; +#endif +} + static u32 rtl8168_convert_link_speed(u16 status) { u32 speed = SPEED_UNKNOWN; @@ -1046,34 +1055,34 @@ } static void rtl8168_get_cp_len(struct rtl8168_private *tp, - u16 cp_lenRTL8168_CP_NUM) + int cp_lenRTL8168_CP_NUM) { int i; u16 status; - u16 tmp_cp_len = 0; + int tmp_cp_len; status = RTL_R8(tp, PHYstatus); if (status & LinkStatus) { if (status & _10bps) { - tmp_cp_len = 0; - } else if (status & _1000bpsF) { + tmp_cp_len = -1; + } else if (status & (_100bps | _1000bpsF)) { rtl8168_mdio_write(tp, 0x1f, 0x0a88); tmp_cp_len = rtl8168_mdio_read(tp, 0x10); } else - goto exit; + tmp_cp_len = 0; } else - goto exit; + tmp_cp_len = 0; - tmp_cp_len &= 0xff; + if (tmp_cp_len > 0) + tmp_cp_len &= 0xff; for (i=0; i<RTL8168_CP_NUM; i++) cp_leni = tmp_cp_len; -exit: rtl8168_mdio_write(tp, 0x1f, 0x0000); for (i=0; i<RTL8168_CP_NUM; i++) - if (cp_leni > RTL8168_MAX_SUPPORT_cp_len) - cp_leni = RTL8168_MAX_SUPPORT_cp_len; + if (cp_leni > RTL8168_MAX_SUPPORT_CP_LEN) + cp_leni = RTL8168_MAX_SUPPORT_CP_LEN; return; } @@ -1150,12 +1159,30 @@ } static void rtl8168_get_cp_status(struct rtl8168_private *tp, - int cp_statusRTL8168_CP_NUM) + int cp_statusRTL8168_CP_NUM, + bool poe_mode) { + u16 status; int i; - for (i =0; i<RTL8168_CP_NUM; i++) - cp_statusi = _rtl8168_get_cp_status(tp, i); + status = RTL_R8(tp, PHYstatus); + if (status & LinkStatus && !(status & (_10bps | _100bps))) { + for (i=0; i<RTL8168_CP_NUM; i++) + cp_statusi = rtl8168_cp_normal; + } else { + /* cannot do vcd when link is on */ + rtl8168_vcd_test(tp); + + for (i=0; i<RTL8168_CP_NUM; i++) + cp_statusi = _rtl8168_get_cp_status(tp, i); + } + + if (poe_mode) { + for (i=0; i<RTL8168_CP_NUM; i++) { + if (cp_statusi == rtl8168_cp_mismatch) + cp_statusi = rtl8168_cp_normal; + } + } } #ifdef ENABLE_R8168_PROCFS @@ -1494,35 +1521,42 @@ return 0; } -static int proc_get_cable_info(struct seq_file *m, void *v) +static int _proc_get_cable_info(struct seq_file *m, void *v, bool poe_mode) { int i; u16 status; int cp_statusRTL8168_CP_NUM = {0}; - u16 cp_lenRTL8168_CP_NUM = {0}; + int cp_lenRTL8168_CP_NUM = {0}; struct net_device *dev = m->private; struct rtl8168_private *tp = netdev_priv(dev); const char *pair_strRTL8168_CP_NUM = {"1-2", "3-6", "4-5", "7-8"}; + int ret; switch (tp->mcfg) { case CFG_METHOD_30: - case CFG_METHOD_35: - case CFG_METHOD_36: - case CFG_METHOD_37: /* support */ break; default: - return -EOPNOTSUPP; + ret = -EOPNOTSUPP; + goto error_out; } rtnl_lock(); + if (!rtl8168_sysfs_testmode_on(tp)) { + seq_puts(m, "\nPlease turn on ""/sys/class/net/<iface>/rtk_adv/testmode"".\n\n"); + ret = 0; + goto error_unlock; + } + rtl8168_mdio_write(tp, 0x1f, 0x0000); if (rtl8168_mdio_read(tp, MII_BMCR) & BMCR_PDOWN) { - rtnl_unlock(); - return -EIO; + ret = -EIO; + goto error_unlock; } + netif_testing_on(dev); + status = RTL_R8(tp, PHYstatus); if (status & LinkStatus) seq_printf(m, "\nlink speed:%d", @@ -1532,30 +1566,46 @@ rtl8168_get_cp_len(tp, cp_len); - rtl8168_vcd_test(tp); -
View file
r8168-8.052.01.tar.gz/src/r8168_realwow.h -> r8168-8.053.00.tar.gz/src/r8168_realwow.h
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
View file
r8168-8.052.01.tar.gz/src/r8168_rss.c -> r8168-8.053.00.tar.gz/src/r8168_rss.c
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free @@ -57,13 +57,13 @@ switch (cmd->flow_type) { case TCP_V4_FLOW: cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; - /* fallthrough */ + fallthrough; case IPV4_FLOW: cmd->data |= RXH_IP_SRC | RXH_IP_DST; break; case TCP_V6_FLOW: cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; - /* fallthrough */ + fallthrough; case IPV6_FLOW: cmd->data |= RXH_IP_SRC | RXH_IP_DST; break; @@ -258,28 +258,6 @@ indiri = tp->rss_indir_tbli; } -int rtl8168_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, - u8 *hfunc) -{ - struct rtl8168_private *tp = netdev_priv(dev); - - netif_info(tp, drv, tp->dev, "rss get rxfh\n"); - - if (!(dev->features & NETIF_F_RXHASH)) - return -EOPNOTSUPP; - - if (hfunc) - *hfunc = ETH_RSS_HASH_TOP; - - if (indir) - rtl8168_get_reta(tp, indir); - - if (key) - memcpy(key, tp->rss_key, RTL8168_RSS_KEY_SIZE); - - return 0; -} - static u32 rtl8168_rss_key_reg(struct rtl8168_private *tp) { return RSS_KEY_8168; @@ -330,6 +308,88 @@ rtl8168_eri_write(tp, rss_key_reg + i, 4, *rss_key++, ERIAR_ExGMAC); } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,8,0) +int rtl8168_get_rxfh(struct net_device *dev, struct ethtool_rxfh_param *rxfh) +{ + struct rtl8168_private *tp = netdev_priv(dev); + + netif_info(tp, drv, tp->dev, "rss get rxfh\n"); + + if (!(dev->features & NETIF_F_RXHASH)) + return -EOPNOTSUPP; + + rxfh->hfunc = ETH_RSS_HASH_TOP; + + if (rxfh->indir) + rtl8168_get_reta(tp, rxfh->indir); + + if (rxfh->key) + memcpy(rxfh->key, tp->rss_key, RTL8168_RSS_KEY_SIZE); + + return 0; +} + +int rtl8168_set_rxfh(struct net_device *dev, struct ethtool_rxfh_param *rxfh, + struct netlink_ext_ack *extack) +{ + struct rtl8168_private *tp = netdev_priv(dev); + u32 reta_entries = rtl8168_rss_indir_tbl_entries(tp); + int i; + + netif_info(tp, drv, tp->dev, "rss set rxfh\n"); + + /* We require at least one supported parameter to be changed and no + * change in any of the unsupported parameters + */ + if (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE && rxfh->hfunc != ETH_RSS_HASH_TOP) + return -EOPNOTSUPP; + + /* Fill out the redirection table */ + if (rxfh->indir) { + int max_queues = tp->num_rx_rings; + + /* Verify user input. */ + for (i = 0; i < reta_entries; i++) + if (rxfh->indiri >= max_queues) + return -EINVAL; + + for (i = 0; i < reta_entries; i++) + tp->rss_indir_tbli = rxfh->indiri; + } + + /* Fill out the rss hash key */ + if (rxfh->key) + memcpy(tp->rss_key, rxfh->key, RTL8168_RSS_KEY_SIZE); + + rtl8168_store_reta(tp); + + rtl8168_store_rss_key(tp); + + return 0; +} +#else +int rtl8168_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, + u8 *hfunc) +{ + struct rtl8168_private *tp = netdev_priv(dev); + + netif_info(tp, drv, tp->dev, "rss get rxfh\n"); + + if (!(dev->features & NETIF_F_RXHASH)) + return -EOPNOTSUPP; + + if (hfunc) + *hfunc = ETH_RSS_HASH_TOP; + + if (indir) + rtl8168_get_reta(tp, indir); + + if (key) + memcpy(key, tp->rss_key, RTL8168_RSS_KEY_SIZE); + + return 0; +} + int rtl8168_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key, const u8 hfunc) { @@ -368,6 +428,7 @@ return 0; } +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(6,8,0) */ static u32 rtl8168_get_rx_desc_hash(struct rtl8168_private *tp, struct RxDescV2 *desc)
View file
r8168-8.052.01.tar.gz/src/r8168_rss.h -> r8168-8.053.00.tar.gz/src/r8168_rss.h
Changed
@@ -5,7 +5,7 @@ # r8125 is the Linux device driver released for Realtek 2.5Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free @@ -50,10 +50,16 @@ int rtl8168_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd); u32 rtl8168_get_rxfh_key_size(struct net_device *netdev); u32 rtl8168_rss_indir_size(struct net_device *netdev); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,8,0) +int rtl8168_get_rxfh(struct net_device *dev, struct ethtool_rxfh_param *rxfh); +int rtl8168_set_rxfh(struct net_device *dev, struct ethtool_rxfh_param *rxfh, + struct netlink_ext_ack *extack); +#else int rtl8168_get_rxfh(struct net_device *netdev, u32 *indir, u8 *key, u8 *hfunc); int rtl8168_set_rxfh(struct net_device *netdev, const u32 *indir, const u8 *key, const u8 hfunc); +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(6,8,0) */ void rtl8168_rx_hash(struct rtl8168_private *tp, struct RxDescV2 *desc, struct sk_buff *skb);
View file
r8168-8.052.01.tar.gz/src/rtl_eeprom.c -> r8168-8.053.00.tar.gz/src/rtl_eeprom.c
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free @@ -93,7 +93,7 @@ rtl8168_lower_clock(tp, &x); } -int rtl8168_eeprom_cmd_done(struct rtl8168_private *tp) +static int rtl8168_eeprom_cmd_done(struct rtl8168_private *tp) { u8 x; int i; @@ -157,9 +157,8 @@ int addr_sz = 6; int w_dummy_addr = 4; - if(tp->eeprom_type == EEPROM_TYPE_NONE) { - return ; - } + if(tp->eeprom_type == EEPROM_TYPE_NONE) + return; if (tp->eeprom_type==EEPROM_TYPE_93C46) { addr_sz = 6; @@ -178,17 +177,15 @@ rtl8168_shift_out_bits(tp, RTL_EEPROM_ERASE_OPCODE, 3); rtl8168_shift_out_bits(tp, reg, addr_sz); - if (rtl8168_eeprom_cmd_done(tp) < 0) { + if (rtl8168_eeprom_cmd_done(tp) < 0) return; - } rtl8168_stand_by(tp); rtl8168_shift_out_bits(tp, RTL_EEPROM_WRITE_OPCODE, 3); rtl8168_shift_out_bits(tp, reg, addr_sz); rtl8168_shift_out_bits(tp, data, 16); - if (rtl8168_eeprom_cmd_done(tp) < 0) { + if (rtl8168_eeprom_cmd_done(tp) < 0) return; - } rtl8168_stand_by(tp); rtl8168_shift_out_bits(tp, RTL_EEPROM_EWDS_OPCODE, 5);
View file
r8168-8.052.01.tar.gz/src/rtl_eeprom.h -> r8168-8.053.00.tar.gz/src/rtl_eeprom.h
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
View file
r8168-8.052.01.tar.gz/src/rtltool.c -> r8168-8.053.00.tar.gz/src/rtltool.c
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
View file
r8168-8.052.01.tar.gz/src/rtltool.h -> r8168-8.053.00.tar.gz/src/rtltool.h
Changed
@@ -5,7 +5,7 @@ # r8168 is the Linux device driver released for Realtek Gigabit Ethernet # controllers with PCI-Express interface. # -# Copyright(c) 2023 Realtek Semiconductor Corp. All rights reserved. +# Copyright(c) 2024 Realtek Semiconductor Corp. All rights reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.