Package Details: r8101-dkms 1.035.03-2

Git Clone URL: https://aur.archlinux.org/r8101-dkms.git (read-only, click to copy)
Package Base: r8101-dkms
Description: RTL810xE Fast Ethernet Driver (DKMS)
Upstream URL: https://fichiers.touslesdrivers.com/64992/
Keywords: ethernet r8101 realtek rtl8101 rtl8106
Licenses: GPL2
Conflicts: r8101
Provides: r8101
Submitter: jsh6789
Maintainer: pedrogabriel
Last Packager: pedrogabriel
Votes: 6
Popularity: 0.000004
First Submitted: 2015-08-27 22:47 (UTC)
Last Updated: 2021-02-16 04:08 (UTC)

Dependencies (3)

Required by (0)

Sources (2)

Latest Comments

1 2 3 Next › Last »

jghodd commented on 2022-06-10 21:14 (UTC) (edited on 2022-06-10 22:37 (UTC) by jghodd)

r8101 is not building against the 5.18.x kernel in a 32-bit environment. to get it to install, i had to create an additional patch for 5.18.x (as well as continuing to use the linux517 patch file). i modeled my code changes on similar updates made to r8168-dkms. here's the linux518.patch file. if anyone can improve on it or add to it, please let everyone here know.


--- r8101-1.036.00/src/r8101_n.c        2021-06-11 11:47:02.000000000 -0400
+++ r8101-1.036.00-linux518/src/r8101_n.c       2022-06-07 18:34:48.177163097 -0400
@@ -267,7 +267,13 @@

 static int rtl8101_set_speed(struct net_device *dev, u8 autoneg, u32 speed, u8 duplex, u32 adv);
 static int rtl8101_set_mac_address(struct net_device *dev, void *p);
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,18,0)
+void rtl8101_rar_set(struct rtl8101_private *tp, const u8 *addr);
+#else
 void rtl8101_rar_set(struct rtl8101_private *tp, uint8_t *addr);
+#endif
+
 static void rtl8101_desc_addr_fill(struct rtl8101_private *);
 static void rtl8101_tx_desc_init(struct rtl8101_private *tp);
 static void rtl8101_rx_desc_init(struct rtl8101_private *tp);
@@ -10062,7 +10068,11 @@

         spin_lock_irqsave(&tp->lock, flags);

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0) 
+        eth_hw_addr_set(dev, addr->sa_data); 
+#else 
         memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
+#endif //LINUX_VERSION_CODE >= KERNEL_VERSION(5,17,0)

         rtl8101_rar_set(tp, dev->dev_addr);

@@ -10079,7 +10089,11 @@
  *****************************************************************************/
 void
 rtl8101_rar_set(struct rtl8101_private *tp,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,18,0) 
+                const u8 *addr)
+#else
                 uint8_t *addr)
+#endif
 {
         uint32_t rar_low = 0;
         uint32_t rar_high = 0;
@@ -10950,11 +10964,20 @@

         if ((sizeof(dma_addr_t) > 4) &&
             use_dac &&
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
             !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) &&
             !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
+#else
+            !dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)) &&
+            !dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64))) {
+#endif
                 dev->features |= NETIF_F_HIGHDMA;
         } else {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
                 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
+#else
+                rc = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
+#endif
                 if (rc < 0) {
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)
                         if (netif_msg_probe(tp))
@@ -11429,7 +11452,11 @@

         rtl8101_get_mac_address(dev);

+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
         tp->tally_vaddr = pci_alloc_consistent(pdev, sizeof(*tp->tally_vaddr), &tp->tally_paddr);
+#else
+        tp->tally_vaddr = dma_alloc_coherent(&pdev->dev, sizeof(*tp->tally_vaddr), &tp->tally_paddr, GFP_KERNEL);
+#endif
         if (!tp->tally_vaddr) {
                 rc = -ENOMEM;
                 goto err_out;
@@ -11463,8 +11490,13 @@

 err_out:
         if (tp->tally_vaddr != NULL) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
                 pci_free_consistent(pdev, sizeof(*tp->tally_vaddr), tp->tally_vaddr,
                                     tp->tally_paddr);
+#else
+                dma_free_coherent(&pdev->dev, sizeof(*tp->tally_vaddr), tp->tally_vaddr,
+                                    tp->tally_paddr);
+#endif

                 tp->tally_vaddr = NULL;
         }
@@ -11497,7 +11529,11 @@
         rtl8101_proc_remove(dev);
 #endif
         if (tp->tally_vaddr != NULL) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
                 pci_free_consistent(pdev, sizeof(*tp->tally_vaddr), tp->tally_vaddr, tp->tally_paddr);
+#else
+                dma_free_coherent(&pdev->dev, sizeof(*tp->tally_vaddr), tp->tally_vaddr, tp->tally_paddr);
+#endif
                 tp->tally_vaddr = NULL;
         }

@@ -11544,13 +11580,23 @@
          * Rx and Tx descriptors needs 256 bytes alignment.
          * pci_alloc_consistent provides more.
          */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
         tp->TxDescArray = pci_alloc_consistent(pdev, R8101_TX_RING_BYTES,
                                                &tp->TxPhyAddr);
+#else
+        tp->TxDescArray = dma_alloc_coherent(&pdev->dev, R8101_TX_RING_BYTES,
+                                               &tp->TxPhyAddr, GFP_KERNEL);
+#endif
         if (!tp->TxDescArray)
                 goto out;

+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
         tp->RxDescArray = pci_alloc_consistent(pdev, R8101_RX_RING_BYTES,
                                                &tp->RxPhyAddr);
+#else
+        tp->RxDescArray = dma_alloc_coherent(&pdev->dev, R8101_RX_RING_BYTES,
+                                               &tp->RxPhyAddr, GFP_KERNEL);
+#endif
         if (!tp->RxDescArray)
                 goto err_free_tx;

@@ -11619,12 +11665,22 @@
         return retval;

 err_free_rx:
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
         pci_free_consistent(pdev, R8101_RX_RING_BYTES, tp->RxDescArray,
                             tp->RxPhyAddr);
+#else
+        dma_free_coherent(&pdev->dev, R8101_RX_RING_BYTES, tp->RxDescArray,
+                            tp->RxPhyAddr);
+#endif
         tp->RxDescArray = NULL;
 err_free_tx:
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
         pci_free_consistent(pdev, R8101_TX_RING_BYTES, tp->TxDescArray,
                             tp->TxPhyAddr);
+#else
+        dma_free_coherent(&pdev->dev, R8101_TX_RING_BYTES, tp->TxDescArray,
+                            tp->TxPhyAddr);
+#endif
         tp->TxDescArray = NULL;
         goto out;
 }
@@ -13604,9 +13660,13 @@

                 free_irq(dev->irq, dev);

+#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
                 pci_free_consistent(pdev, R8101_RX_RING_BYTES, tp->RxDescArray, tp->RxPhyAddr);
-
                 pci_free_consistent(pdev, R8101_TX_RING_BYTES, tp->TxDescArray, tp->TxPhyAddr);
+#else
+                dma_free_coherent(&pdev->dev, R8101_RX_RING_BYTES, tp->RxDescArray, tp->RxPhyAddr);
+                dma_free_coherent(&pdev->dev, R8101_TX_RING_BYTES, tp->TxDescArray, tp->TxPhyAddr);
+#endif

                 tp->TxDescArray = NULL;
                 tp->RxDescArray = NULL;

here's linux517.patch:


--- r8101-1.036.00/src/r8101_n.c        2021-06-11 11:47:02.000000000 -0400
+++ r8101-1.036.00-linux517/src/r8101_n.c       2022-04-18 19:10:47.890885555 -0400
@@ -1291,7 +1291,7 @@
 static int rtl8101_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 *) = pde_data(inode);

         return single_open(file, show, dev);
 }
@@ -10000,6 +10000,7 @@
         struct rtl8101_private *tp = netdev_priv(dev);
         int i;
         u8 mac_addr[MAC_ADDR_LEN];
+        u8 addr[ETH_ALEN];

         for (i = 0; i < MAC_ADDR_LEN; i++)
                 mac_addr[i] = RTL_R8(tp, MAC0 + i);
@@ -10031,9 +10032,10 @@
         rtl8101_rar_set(tp, mac_addr);

         for (i = 0; i < MAC_ADDR_LEN; i++) {
-                dev->dev_addr[i] = RTL_R8(tp, MAC0 + i);
+                addr[i] = RTL_R8(tp, MAC0 + i);
                 tp->org_mac_addr[i] = dev->dev_addr[i]; /* keep the original MAC address */
         }
+        eth_hw_addr_set(dev, addr);
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)
         memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
 #endif

...and the PKGBUILD:


# Mantainer: Pedro Gabriel <pedrogabriel@gmail.com>
# Conbributor: Felix Golatofski <contact@xdfr.de>
# Contributor: JSH <jsh6789(at)gmail(dot)com>
# Contributor: Geoffroy Carrier <gcarrier@aur.archlinux.org>

_pkgbase=r8101
pkgname=r8101-dkms
pkgver=1.036.00
pkgrel=1.4
pkgdesc="RTL810xE Fast Ethernet Driver (DKMS)"
arch=('i686' 'x86_64')
url="https://fichiers.touslesdrivers.com/64992/"
license=('GPL2')
depends=('dkms' 'pahole')
optdepends=('ethtool: device configuration')
provides=("${_pkgbase}")
conflicts=("${_pkgbase}")

# Modify this array so that it points to the manually downloaded file
# The current setting is NOT a valid URL
source=("${url}/${_pkgbase}-${pkgver}.tar.bz2"
        'linux517.patch'
        'linux518.patch'
        'dkms.conf')
sha512sums=('eeb526965f6e2bef6a24f39097704d2f5c8eb0bf5707132898da40aa639c8c77fd89c9852067ab2446f3f51d55db978ed12b3033a1c9882572bbdab74db27dd2'
            'SKIP'
            'SKIP'
            '7b70e04b83f7593e16c1fa2aa404b55a40bac40cc97a085e5713dc43b04b3b91f17da8b51e86000ce57fc1c7845ae1d375929929090d9ad050cf6bea3e18b4d3')

prepare() {
    cd "r8101-1.036.00"
    patch -Np1 -i ../linux517.patch
    patch -Np1 -i ../linux518.patch
}

package() {

  # Copy dkms.conf
  install -Dm644 dkms.conf "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/dkms.conf

  # Set name and version
  sed -e "s/@_PKGBASE@/${_pkgbase}/" \
      -e "s/@PKGVER@/${pkgver}/" \
      -i "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/dkms.conf

  # Copy sources (including Makefile)
  cp -r ${_pkgbase}-${pkgver}/src ${_pkgbase}-${pkgver}/Makefile \
        "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/
}

you can set pkgrel to whatever you want - i needed it to be 1.4.

Edit-1: fixed the alloc/free mismatches in linux518.patch

jghodd commented on 2022-04-18 20:50 (UTC) (edited on 2022-04-18 23:17 (UTC) by jghodd)

if you want to also upgrade the driver to v1.036.00, here's the PKGBUILD:


# Mantainer: Pedro Gabriel <pedrogabriel@gmail.com>
# Conbributor: Felix Golatofski <contact@xdfr.de>
# Contributor: JSH <jsh6789(at)gmail(dot)com>
# Contributor: Geoffroy Carrier <gcarrier@aur.archlinux.org>

_pkgbase=r8101
pkgname=r8101-dkms
pkgver=1.036.00
pkgrel=1.1
pkgdesc="RTL810xE Fast Ethernet Driver (DKMS)"
arch=('i686' 'x86_64')
url="https://fichiers.touslesdrivers.com/64992/"
license=('GPL2')
depends=('dkms' 'pahole')
optdepends=('ethtool: device configuration')
provides=("${_pkgbase}")
conflicts=("${_pkgbase}")

# Modify this array so that it points to the manually downloaded file
# The current setting is NOT a valid URL
source=("${url}/${_pkgbase}-${pkgver}.tar.bz2"
        'linux517.patch'
        'dkms.conf')
sha512sums=('eeb526965f6e2bef6a24f39097704d2f5c8eb0bf5707132898da40aa639c8c77fd89c9852067ab2446f3f51d55db978ed12b3033a1c9882572bbdab74db27dd2'
            '2e0a05d6251faa18544236d803c1f0d9079f30043425ff3fc53cd764cc5cb73fa195863a8b40a881f55cfb3e25d12e605300cb08ce47c4c2b1ecf5dea8d483b2'
            '7b70e04b83f7593e16c1fa2aa404b55a40bac40cc97a085e5713dc43b04b3b91f17da8b51e86000ce57fc1c7845ae1d375929929090d9ad050cf6bea3e18b4d3')

prepare() {
    cd "r8101-1.036.00"
    patch -Np1 -i ../linux517.patch
}

package() {

  # Copy dkms.conf
  install -Dm644 dkms.conf "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/dkms.conf

  # Set name and version
  sed -e "s/@_PKGBASE@/${_pkgbase}/" \
      -e "s/@PKGVER@/${pkgver}/" \
      -i "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/dkms.conf

  # Copy sources (including Makefile)
  cp -r ${_pkgbase}-${pkgver}/src ${_pkgbase}-${pkgver}/Makefile \
        "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/
}

and the linux517.patch file:


diff -u -r r8101-1.036.00/src/r8101_n.c r8101-1.036.00-linux517/src/r8101_n.c
--- r8101-1.036.00/src/r8101_n.c        2021-06-11 11:47:02.000000000 -0400
+++ r8101-1.036.00-linux517/src/r8101_n.c       2022-04-18 16:38:04.475851823 -0400
@@ -1291,7 +1291,7 @@
 static int rtl8101_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 *) = pde_data(inode);

         return single_open(file, show, dev);
 }
@@ -10000,6 +10000,7 @@
         struct rtl8101_private *tp = netdev_priv(dev);
         int i;
         u8 mac_addr[MAC_ADDR_LEN];
+        u8 addr[ETH_ALEN];

         for (i = 0; i < MAC_ADDR_LEN; i++)
                 mac_addr[i] = RTL_R8(tp, MAC0 + i);
@@ -10031,9 +10032,10 @@
         rtl8101_rar_set(tp, mac_addr);

         for (i = 0; i < MAC_ADDR_LEN; i++) {
-                dev->dev_addr[i] = RTL_R8(tp, MAC0 + i);
+                addr[i] = RTL_R8(tp, MAC0 + i);
                 tp->org_mac_addr[i] = dev->dev_addr[i]; /* keep the original MAC address */
         }
+        eth_hw_addr_set(dev, addr);
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)
         memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
 #endif

Edit: just an FYI that I had to add the eth_hw_addr_set call to the patch (kinda important)

jghodd commented on 2022-04-18 20:19 (UTC) (edited on 2022-04-19 17:47 (UTC) by jghodd)

here's a patch for r8101-1.035.03 that follows the pattern used to patch r8168 (linux517.patch):


diff -u -r r8101-1.035.03/src/r8101_n.c r8101-1.035.03-linux517/src/r8101_n.c
--- r8101-1.035.03/src/r8101_n.c        2020-04-13 04:47:54.000000000 -0400
+++ r8101-1.035.03-linux517/src/r8101_n.c       2022-04-19 13:37:36.081513795 -0400
@@ -1281,7 +1281,7 @@
 static int rtl8101_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 *) = pde_data(inode);

         return single_open(file, show, dev);
 }
@@ -9995,6 +9995,7 @@
         struct rtl8101_private *tp = netdev_priv(dev);
         int i;
         u8 mac_addr[MAC_ADDR_LEN];
+        u8 addr[ETH_ALEN];

         for (i = 0; i < MAC_ADDR_LEN; i++)
                 mac_addr[i] = RTL_R8(tp, MAC0 + i);
@@ -10026,9 +10027,10 @@
         rtl8101_rar_set(tp, mac_addr);

         for (i = 0; i < MAC_ADDR_LEN; i++) {
-                dev->dev_addr[i] = RTL_R8(tp, MAC0 + i);
+                addr[i] = RTL_R8(tp, MAC0 + i);
                 tp->org_mac_addr[i] = dev->dev_addr[i]; /* keep the original MAC address */
         }
+        eth_hw_addr_set(dev, addr);
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)
         memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
 #endif

jghodd commented on 2022-04-16 17:48 (UTC)

the r8101 dkms module no longer builds under linux-5.17.

Ten0 commented on 2021-08-16 18:21 (UTC)

I'm trying to use this instead of r8169 because r8169 seems to not manage to connect at > 100Mbps.

My hardware is identified as "RTL810xE PCI Express Fast Ethernet controller", yet the driver seems to not pick it up: https://pastebin.com/eHfkLjWU

Has anyone encountered a similar issue?

pedrogabriel commented on 2021-01-21 22:32 (UTC)

I've updated the package.

jtriangle commented on 2020-05-04 22:37 (UTC)

Worked correctly with this modification to the build file:

Replace: ("${url}/${_pkgbase}-${pkgver}.tar.bz2" With this: ("https://fichiers.touslesdrivers.com/64215/r8101-1.035.02.tar.bz2"

They seem to keep the drivers up to date here: https://www.touslesdrivers.com/index.php?v_page=12&v_code=668#23 so worth checking for a new version if you're going to use this.

MrPaganini commented on 2020-04-06 01:20 (UTC) (edited on 2020-04-06 01:21 (UTC) by MrPaganini)

Hello. I just installed the package with your explanations and thank for your help. My device with lspci is: "Ethernet controller: Realtek Semiconductor Co., Ltd. RTL810xE PCI Express Fast Ethernet controller (rev 07)" I have 5.4.30-1-lts kernel.

1/ I downloaded it on realtek website giving a bad e-mail address, then put it nearby files extracted from "snapshot" download. 2/ I modified the PKGBUILD in 2 places: the path to the tar.gz and the version number (pkgver=1.035.01 to pkgver=1.035.02). 3/ Il made the arch package using: makepkg --skipchecksums PKGBUILD 4/ I installed and rebooted. It works!

But, it's weird. I use archlinux on my PC since 1 or 2 years and never had problems with ethernet until now and never needed this package. Should I uninstall r8101-dkms package and wait for a kernel update?

felipe.facundes commented on 2019-11-02 00:04 (UTC)

https://fichiers.touslesdrivers.com/61016/r8101-1.034.02.tar.bz2

jsh6789 commented on 2019-07-01 01:03 (UTC)

Disowned as I am no longer running any hardware that uses this driver.