netdev
[Top] [All Lists]

[PATCH] forcedeth: Poll for link changes

To: Jeff Garzik <jgarzik@xxxxxxxxx>
Subject: [PATCH] forcedeth: Poll for link changes
From: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx>
Date: Sat, 18 Jun 2005 16:27:19 +0200
Cc: Netdev <netdev@xxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.7.8) Gecko/20050513 Fedora/1.7.8-1.3.1
Hi Jeff,

Several users reported that the link speed detection is unreliable with nForce 3 nics. The result is either a completely dead network connection, or the connection dies after a few minutes. The attached patch enables a timer that polls the PHY for link speed changes. The code already exists for nForce 1/2, the patch enables it for all nForce versions.

Signed-Off-By: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx>
--- 2.6/drivers/net/forcedeth.c 2005-06-18 16:21:47.000000000 +0200
+++ build-2.6/drivers/net/forcedeth.c   2005-06-18 15:03:55.000000000 +0200
@@ -82,7 +82,8 @@
  *     0.31: 14 Nov 2004: ethtool support for getting/setting link
  *                        capabilities.
  *     0.32: 16 Apr 2005: RX_ERROR4 handling added.
- *     0.33: 16 Mai 2005: Support for MCP51 added.
+ *     0.33: 16 May 2005: Support for MCP51 added.
+ *     0.34: 18 Jun 2005: Add DEV_NEED_LINKTIMER to all nForce nics.
  *
  * Known bugs:
  * We suspect that on some hardware no TX done interrupts are generated.
@@ -94,7 +95,7 @@
  * DEV_NEED_TIMERIRQ will not harm you on sane hardware, only generating a few
  * superfluous timer interrupts from the nic.
  */
-#define FORCEDETH_VERSION              "0.33"
+#define FORCEDETH_VERSION              "0.34"
 #define DRV_NAME                       "forcedeth"
 
 #include <linux/module.h>
@@ -2218,70 +2219,70 @@
                .device = PCI_DEVICE_ID_NVIDIA_NVENET_4,
                .subvendor = PCI_ANY_ID,
                .subdevice = PCI_ANY_ID,
-               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ,
+               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER,
        },
        {       /* nForce3 Ethernet Controller */
                .vendor = PCI_VENDOR_ID_NVIDIA,
                .device = PCI_DEVICE_ID_NVIDIA_NVENET_5,
                .subvendor = PCI_ANY_ID,
                .subdevice = PCI_ANY_ID,
-               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ,
+               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER,
        },
        {       /* nForce3 Ethernet Controller */
                .vendor = PCI_VENDOR_ID_NVIDIA,
                .device = PCI_DEVICE_ID_NVIDIA_NVENET_6,
                .subvendor = PCI_ANY_ID,
                .subdevice = PCI_ANY_ID,
-               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ,
+               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER,
        },
        {       /* nForce3 Ethernet Controller */
                .vendor = PCI_VENDOR_ID_NVIDIA,
                .device = PCI_DEVICE_ID_NVIDIA_NVENET_7,
                .subvendor = PCI_ANY_ID,
                .subdevice = PCI_ANY_ID,
-               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ,
+               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER,
        },
        {       /* CK804 Ethernet Controller */
                .vendor = PCI_VENDOR_ID_NVIDIA,
                .device = PCI_DEVICE_ID_NVIDIA_NVENET_8,
                .subvendor = PCI_ANY_ID,
                .subdevice = PCI_ANY_ID,
-               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ,
+               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER,
        },
        {       /* CK804 Ethernet Controller */
                .vendor = PCI_VENDOR_ID_NVIDIA,
                .device = PCI_DEVICE_ID_NVIDIA_NVENET_9,
                .subvendor = PCI_ANY_ID,
                .subdevice = PCI_ANY_ID,
-               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ,
+               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER,
        },
        {       /* MCP04 Ethernet Controller */
                .vendor = PCI_VENDOR_ID_NVIDIA,
                .device = PCI_DEVICE_ID_NVIDIA_NVENET_10,
                .subvendor = PCI_ANY_ID,
                .subdevice = PCI_ANY_ID,
-               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ,
+               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER,
        },
        {       /* MCP04 Ethernet Controller */
                .vendor = PCI_VENDOR_ID_NVIDIA,
                .device = PCI_DEVICE_ID_NVIDIA_NVENET_11,
                .subvendor = PCI_ANY_ID,
                .subdevice = PCI_ANY_ID,
-               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ,
+               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER,
        },
        {       /* MCP51 Ethernet Controller */
                .vendor = PCI_VENDOR_ID_NVIDIA,
                .device = PCI_DEVICE_ID_NVIDIA_NVENET_12,
                .subvendor = PCI_ANY_ID,
                .subdevice = PCI_ANY_ID,
-               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ,
+               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER,
        },
        {       /* MCP51 Ethernet Controller */
                .vendor = PCI_VENDOR_ID_NVIDIA,
                .device = PCI_DEVICE_ID_NVIDIA_NVENET_13,
                .subvendor = PCI_ANY_ID,
                .subdevice = PCI_ANY_ID,
-               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ,
+               .driver_data = 
DEV_NEED_LASTPACKET1|DEV_IRQMASK_2|DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER,
        },
        {0,},
 };
<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] forcedeth: Poll for link changes, Manfred Spraul <=