SOURCES: linux-nvidia.patch (NEW) - http://download.nvidia.com/XFr...

marcus marcus at pld-linux.org
Sat Jun 23 20:28:39 CEST 2007


Author: marcus                       Date: Sat Jun 23 18:28:39 2007 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- http://download.nvidia.com/XFree86/nforce/1.21/NFORCE-Linux-x86-1.21.zip

---- Files affected:
SOURCES:
   linux-nvidia.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/linux-nvidia.patch
diff -u /dev/null SOURCES/linux-nvidia.patch:1.1
--- /dev/null	Sat Jun 23 20:28:39 2007
+++ SOURCES/linux-nvidia.patch	Sat Jun 23 20:28:34 2007
@@ -0,0 +1,8077 @@
+diff -uNr linux-2.6.16.orig/drivers/net/forcedeth.c linux-2.6.16/drivers/net/forcedeth.c
+--- linux-2.6.16.orig/drivers/net/forcedeth.c	2007-06-23 20:16:01.572248000 +0200
++++ linux-2.6.16/drivers/net/forcedeth.c	2006-10-21 14:44:00.000000000 +0200
+@@ -102,6 +102,17 @@
+  *	0.47: 26 Oct 2005: Add phyaddr 0 in phy scan.
+  *	0.48: 24 Dec 2005: Disable TSO, bugfix for pci_map_single
+  *	0.49: 10 Dec 2005: Fix tso for large buffers.
++ *	0.50: 20 Jan 2006: Add 8021pq tagging support.
++ *	0.51: 20 Jan 2006: Add 64bit consistent memory allocation for rings.
++ *	0.52: 20 Jan 2006: Add MSI/MSIX support.
++ *	0.53: 19 Mar 2006: Fix init from low power mode and add hw reset.
++ *	0.54: 21 Mar 2006: Fix spin locks for multi irqs and cleanup.
++ *	0.55: 22 Mar 2006: Add flow control (pause frame).
++ *	0.56: 22 Mar 2006: Additional ethtool and moduleparam support.
++ *	0.57: 14 May 2006: Moved mac address writes to nv_probe and nv_remove.
++ *	0.58: 20 May 2006: Optimized rx and tx data paths.
++ *	0.59: 31 May 2006: Added support for sideband management unit.
++ *	0.60: 31 May 2006: Added support for recoverable error.
+  *
+  * Known bugs:
+  * We suspect that on some hardware no TX done interrupts are generated.
+@@ -113,7 +124,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.49"
++#define FORCEDETH_VERSION		"0.60-Driver Package V1.21"
+ #define DRV_NAME			"forcedeth"
+ 
+ #include <linux/module.h>
+@@ -131,34 +142,189 @@
+ #include <linux/random.h>
+ #include <linux/init.h>
+ #include <linux/if_vlan.h>
++#include <linux/rtnetlink.h>
++#include <linux/version.h>
++
++#define RHES3  		0
++#define SLES9	 	1
++#define RHES4		2
++#define SUSE10		3 
++#define	FEDORA5		4 
++
++ 
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)
++#define NVVER FEDORA5		
++#elif LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
++#define NVVER SUSE10		
++#elif LINUX_VERSION_CODE > KERNEL_VERSION(2,6,6)
++#define NVVER RHES4	
++#elif LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)
++#define NVVER SLES9	
++#else
++#define NVVER RHES3  	
++#endif
++
++#if NVVER > RHES3
++#include <linux/dma-mapping.h>
++#else
++#include <linux/forcedeth-compat.h>
++#endif
+ 
+ #include <asm/irq.h>
+ #include <asm/io.h>
+ #include <asm/uaccess.h>
+ #include <asm/system.h>
+ 
+-#if 0
++#ifdef  NVLAN_DEBUG
+ #define dprintk			printk
+ #else
+ #define dprintk(x...)		do { } while (0)
+ #endif
+ 
++/* it should add in pci_ids.h */
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_12
++#define PCI_DEVICE_ID_NVIDIA_NVENET_12 0x0268 
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_13
++#define PCI_DEVICE_ID_NVIDIA_NVENET_13 0x0269 
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_14
++#define PCI_DEVICE_ID_NVIDIA_NVENET_14 0x0372 
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_15
++#define PCI_DEVICE_ID_NVIDIA_NVENET_15 0x0373 
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_16
++#define PCI_DEVICE_ID_NVIDIA_NVENET_16 0x03E5
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_17
++#define PCI_DEVICE_ID_NVIDIA_NVENET_17 0x03E6 
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_18
++#define PCI_DEVICE_ID_NVIDIA_NVENET_18 0x03EE 
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_19
++#define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF 
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_20
++#define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450 
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_21
++#define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_22
++#define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 
++#endif
++#ifndef PCI_DEVICE_ID_NVIDIA_NVENET_23
++#define PCI_DEVICE_ID_NVIDIA_NVENET_23 0x0453 
++#endif
++
++/* it should add in mii.h */
++#ifndef ADVERTISE_1000HALF
++#define ADVERTISE_1000HALF	0x0100
++#endif
++#ifndef ADVERTISE_1000FULL
++#define ADVERTISE_1000FULL	0x0200
++#endif
++#ifndef ADVERTISE_PAUSE_CAP
++#define ADVERTISE_PAUSE_CAP	0x0400
++#endif
++#ifndef ADVERTISE_PAUSE_ASYM
++#define ADVERTISE_PAUSE_ASYM	0x0800
++#endif
++#ifndef MII_CTRL1000
++#define MII_CTRL1000		0x09 
++#endif
++#ifndef MII_STAT1000
++#define MII_STAT1000		0x0A 
++#endif
++#ifndef LPA_1000FULL
++#define LPA_1000FULL		0x0800
++#endif
++#ifndef LPA_1000HALF
++#define LPA_1000HALF		0x0400 
++#endif
++#ifndef LPA_PAUSE_CAP
++#define LPA_PAUSE_CAP		0x0400
++#endif
++#ifndef LPA_PAUSE_ASYM
++#define LPA_PAUSE_ASYM		0x0800
++#endif
++#ifndef BMCR_SPEED1000
++#define BMCR_SPEED1000		0x0040	/* MSB of Speed (1000)         */
++#endif
++
++#ifndef NETDEV_TX_OK
++#define NETDEV_TX_OK 		0	/* driver took care of packet */
++#endif
++
++#ifndef NETDEV_TX_BUSY
++#define NETDEV_TX_BUSY 		1    /* driver tx path was busy*/
++#endif
++
++#ifndef DMA_39BIT_MASK
++#define DMA_39BIT_MASK		0x0000007fffffffffULL    
++#endif
++
++#ifndef __iomem
++#define __iomem 
++#endif
++
++/* rx/tx mac addr + type + vlan + align + slack*/
++#ifndef RX_NIC_BUFSIZE	
++#define RX_NIC_BUFSIZE		(ETH_DATA_LEN + 64)
++#endif
++/* even more slack */
++#ifndef RX_ALLOC_BUFSIZE	
++#define RX_ALLOC_BUFSIZE	(ETH_DATA_LEN + 128)
++#endif
++
++#ifndef PCI_DEVICE
++#define PCI_DEVICE(vend,dev) \
++	.vendor = (vend), .device = (dev), \
++	.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
++#endif
++
++#if NVVER < RHES4
++struct msix_entry {
++	u16 vector;	/* kernel uses to write allocated vector */
++	u16 entry;	/* driver uses to specify entry, OS writes */
++};
++#endif
+ 
+ /*
+  * Hardware access:
+  */
+ 
+-#define DEV_NEED_TIMERIRQ	0x0000  /* work-around for Wake-On-Lan */
+-#define DEV_NEED_TIMERIRQ_ORIG	0x0001  /* set the timer irq flag in the irq mask */
++#define DEV_NEED_TIMERIRQ	0x0001  /* set the timer irq flag in the irq mask */
+ #define DEV_NEED_LINKTIMER	0x0002	/* poll link settings. Relies on the timer irq */
+ #define DEV_HAS_LARGEDESC	0x0004	/* device supports jumbo frames and needs packet format 2 */
+ #define DEV_HAS_HIGH_DMA        0x0008  /* device supports 64bit dma */
+ #define DEV_HAS_CHECKSUM        0x0010  /* device supports tx and rx checksum offloads */
++#define DEV_HAS_VLAN            0x0020  /* device supports vlan tagging and striping */
++#define DEV_HAS_MSI             0x0040  /* device supports MSI */
++#define DEV_HAS_MSI_X           0x0080  /* device supports MSI-X */
++#define DEV_HAS_POWER_CNTRL     0x0100  /* device supports power savings */
++#define DEV_HAS_PAUSEFRAME_TX   0x0200  /* device supports tx pause frames */
++#define DEV_HAS_STATISTICS      0x0400  /* device supports hw statistics */
++#define DEV_HAS_TEST_EXTENDED   0x0800  /* device supports extended diagnostic test */
++#define DEV_HAS_MGMT_UNIT       0x1000  /* device supports management unit */
++
++#define NVIDIA_ETHERNET_ID(deviceid,nv_driver_data) {\
++		.vendor = PCI_VENDOR_ID_NVIDIA, \
++		.device = deviceid, \
++		.subvendor = PCI_ANY_ID, \
++		.subdevice = PCI_ANY_ID, \
++		.driver_data = nv_driver_data, \
++		},
++		
++#define Mv_LED_Control 16
++#define Mv_Page_Address 22
+ 
+ enum {
+ 	NvRegIrqStatus = 0x000,
+ #define NVREG_IRQSTAT_MIIEVENT	0x040
+-#define NVREG_IRQSTAT_MASK		0x1ff
++#define NVREG_IRQSTAT_MASK		0x81ff
+ 	NvRegIrqMask = 0x004,
+ #define NVREG_IRQ_RX_ERROR		0x0001
+ #define NVREG_IRQ_RX			0x0002
+@@ -167,14 +333,18 @@
+ #define NVREG_IRQ_TX_OK			0x0010
+ #define NVREG_IRQ_TIMER			0x0020
+ #define NVREG_IRQ_LINK			0x0040
+-#define NVREG_IRQ_TX_ERROR		0x0080
+-#define NVREG_IRQ_TX1			0x0100
++#define NVREG_IRQ_RX_FORCED		0x0080
++#define NVREG_IRQ_TX_FORCED		0x0100
++#define NVREG_IRQ_RECOVER_ERROR		0x8000
+ #define NVREG_IRQMASK_THROUGHPUT	0x00df
+ #define NVREG_IRQMASK_CPU		0x0040
++#define NVREG_IRQ_TX_ALL		(NVREG_IRQ_TX_ERR|NVREG_IRQ_TX_OK|NVREG_IRQ_TX_FORCED)
++#define NVREG_IRQ_RX_ALL		(NVREG_IRQ_RX_ERROR|NVREG_IRQ_RX|NVREG_IRQ_RX_NOBUF|NVREG_IRQ_RX_FORCED)
++#define NVREG_IRQ_OTHER			(NVREG_IRQ_TIMER|NVREG_IRQ_LINK|NVREG_IRQ_RECOVER_ERROR)
+ 
+ #define NVREG_IRQ_UNKNOWN	(~(NVREG_IRQ_RX_ERROR|NVREG_IRQ_RX|NVREG_IRQ_RX_NOBUF|NVREG_IRQ_TX_ERR| \
+-					NVREG_IRQ_TX_OK|NVREG_IRQ_TIMER|NVREG_IRQ_LINK|NVREG_IRQ_TX_ERROR| \
+-					NVREG_IRQ_TX1))
++					NVREG_IRQ_TX_OK|NVREG_IRQ_TIMER|NVREG_IRQ_LINK|NVREG_IRQ_RX_FORCED| \
++					NVREG_IRQ_TX_FORCED|NVREG_IRQ_RECOVER_ERROR))
+ 
+ 	NvRegUnknownSetupReg6 = 0x008,
+ #define NVREG_UNKSETUP6_VAL		3
+@@ -186,25 +356,45 @@
+ 	NvRegPollingInterval = 0x00c,
+ #define NVREG_POLL_DEFAULT_THROUGHPUT	970
+ #define NVREG_POLL_DEFAULT_CPU	13
++	NvRegMSIMap0 = 0x020,
++	NvRegMSIMap1 = 0x024,
++	NvRegMSIIrqMask = 0x030,
++#define NVREG_MSI_VECTOR_0_ENABLED 0x01
+ 	NvRegMisc1 = 0x080,
++#define NVREG_MISC1_PAUSE_TX	0x01
+ #define NVREG_MISC1_HD		0x02
+ #define NVREG_MISC1_FORCE	0x3b0f3c
+ 
++	NvRegMacReset = 0x3c,
++#define NVREG_MAC_RESET_ASSERT	0x0F3
+ 	NvRegTransmitterControl = 0x084,
+ #define NVREG_XMITCTL_START	0x01
++#define NVREG_XMITCTL_MGMT_ST	0x40000000
++#define NVREG_XMITCTL_SYNC_MASK		0x000f0000
++#define NVREG_XMITCTL_SYNC_NOT_READY	0x0
++#define NVREG_XMITCTL_SYNC_PHY_INIT	0x00040000
++#define NVREG_XMITCTL_MGMT_SEMA_MASK	0x00000f00
++#define NVREG_XMITCTL_MGMT_SEMA_FREE	0x0
++#define NVREG_XMITCTL_HOST_SEMA_MASK	0x0000f000
++#define NVREG_XMITCTL_HOST_SEMA_ACQ	0x0000f000
++#define NVREG_XMITCTL_HOST_LOADED	0x00004000
++#define NVREG_XMITCTL_TX_PATH_EN	0x01000000
+ 	NvRegTransmitterStatus = 0x088,
+ #define NVREG_XMITSTAT_BUSY	0x01
+ 
+ 	NvRegPacketFilterFlags = 0x8c,
+-#define NVREG_PFF_ALWAYS	0x7F0008
++#define NVREG_PFF_PAUSE_RX	0x08
++#define NVREG_PFF_ALWAYS	0x7F0000
+ #define NVREG_PFF_PROMISC	0x80
+ #define NVREG_PFF_MYADDR	0x20
++#define NVREG_PFF_LOOPBACK	0x10
+ 
+ 	NvRegOffloadConfig = 0x90,
+ #define NVREG_OFFLOAD_HOMEPHY	0x601
+ #define NVREG_OFFLOAD_NORMAL	RX_NIC_BUFSIZE
+ 	NvRegReceiverControl = 0x094,
+ #define NVREG_RCVCTL_START	0x01
++#define NVREG_RCVCTL_RX_PATH_EN	0x01000000
+ 	NvRegReceiverStatus = 0x98,
+ #define NVREG_RCVSTAT_BUSY	0x01
+ 
+@@ -214,10 +404,12 @@
+ #define NVREG_RNDSEED_FORCE2	0x2d00
+ #define NVREG_RNDSEED_FORCE3	0x7400
+ 
+-	NvRegUnknownSetupReg1 = 0xA0,
+-#define NVREG_UNKSETUP1_VAL	0x16070f
+-	NvRegUnknownSetupReg2 = 0xA4,
+-#define NVREG_UNKSETUP2_VAL	0x16
++	NvRegTxDeferral = 0xA0,
++#define NVREG_TX_DEFERRAL_DEFAULT      	0x15050f
++#define NVREG_TX_DEFERRAL_RGMII_10_100	0x16070f
++#define NVREG_TX_DEFERRAL_RGMII_1000	0x14050f
++	NvRegRxDeferral = 0xA4,
++#define NVREG_RX_DEFERRAL_DEFAULT	0x16
+ 	NvRegMacAddrA = 0xA8,
+ 	NvRegMacAddrB = 0xAC,
+ 	NvRegMulticastAddrA = 0xB0,
+@@ -234,7 +426,8 @@
+ 	NvRegRingSizes = 0x108,
+ #define NVREG_RINGSZ_TXSHIFT 0
+ #define NVREG_RINGSZ_RXSHIFT 16
+-	NvRegUnknownTransmitterReg = 0x10c,
++	NvRegTransmitPoll = 0x10c,
++#define NVREG_TRANSMITPOLL_MAC_ADDR_REV	0x00008000
+ 	NvRegLinkSpeed = 0x110,
+ #define NVREG_LINKSPEED_FORCE 0x10000
+ #define NVREG_LINKSPEED_10	1000
+@@ -243,8 +436,10 @@
+ #define NVREG_LINKSPEED_MASK	(0xFFF)
+ 	NvRegUnknownSetupReg5 = 0x130,
+ #define NVREG_UNKSETUP5_BIT31	(1<<31)
+-	NvRegUnknownSetupReg3 = 0x13c,
+-#define NVREG_UNKSETUP3_VAL1	0x200010
++	NvRegTxWatermark = 0x13c,
++#define NVREG_TX_WM_DESC1_DEFAULT	0x0200010
++#define NVREG_TX_WM_DESC2_3_DEFAULT	0x1e08000
++#define NVREG_TX_WM_DESC2_3_1000	0xfe08000
+ 	NvRegTxRxControl = 0x144,
+ #define NVREG_TXRXCTL_KICK	0x0001
+ #define NVREG_TXRXCTL_BIT1	0x0002
+@@ -253,15 +448,22 @@
+ #define NVREG_TXRXCTL_RESET	0x0010
+ #define NVREG_TXRXCTL_RXCHECK	0x0400
+ #define NVREG_TXRXCTL_DESC_1	0
+-#define NVREG_TXRXCTL_DESC_2	0x02100
+-#define NVREG_TXRXCTL_DESC_3	0x02200
++#define NVREG_TXRXCTL_DESC_2	0x002100
++#define NVREG_TXRXCTL_DESC_3	0xc02200
++#define NVREG_TXRXCTL_VLANSTRIP 0x00040
++#define NVREG_TXRXCTL_VLANINS	0x00080
++	NvRegTxRingPhysAddrHigh = 0x148,
++	NvRegRxRingPhysAddrHigh = 0x14C,
++	NvRegTxPauseFrame = 0x170,
++#define NVREG_TX_PAUSEFRAME_DISABLE	0x1ff0080
++#define NVREG_TX_PAUSEFRAME_ENABLE	0x0c00030
+ 	NvRegMIIStatus = 0x180,
+ #define NVREG_MIISTAT_ERROR		0x0001
+ #define NVREG_MIISTAT_LINKCHANGE	0x0008
+ #define NVREG_MIISTAT_MASK		0x000f
+ #define NVREG_MIISTAT_MASK2		0x000f
+-	NvRegUnknownSetupReg4 = 0x184,
+-#define NVREG_UNKSETUP4_VAL	8
++	NvRegMIIMask = 0x184,
++#define NVREG_MII_LINKCHANGE		0x0008
+ 
+ 	NvRegAdapterControl = 0x188,
+ #define NVREG_ADAPTCTL_START	0x02
+@@ -291,6 +493,7 @@
+ #define NVREG_WAKEUPFLAGS_ENABLE	0x1111
+ 
+ 	NvRegPatternCRC = 0x204,
++#define NV_UNKNOWN_VAL  0x01
+ 	NvRegPatternMask = 0x208,
+ 	NvRegPowerCap = 0x268,
+ #define NVREG_POWERCAP_D3SUPP	(1<<30)
+@@ -304,6 +507,43 @@
+ #define NVREG_POWERSTATE_D1		0x0001
+ #define NVREG_POWERSTATE_D2		0x0002
+ #define NVREG_POWERSTATE_D3		0x0003
++	NvRegTxCnt = 0x280,
++	NvRegTxZeroReXmt = 0x284,
++	NvRegTxOneReXmt = 0x288,
++	NvRegTxManyReXmt = 0x28c,
++	NvRegTxLateCol = 0x290,
++	NvRegTxUnderflow = 0x294,
++	NvRegTxLossCarrier = 0x298,
++	NvRegTxExcessDef = 0x29c,
++	NvRegTxRetryErr = 0x2a0,
++	NvRegRxFrameErr = 0x2a4,
++	NvRegRxExtraByte = 0x2a8,
++	NvRegRxLateCol = 0x2ac,
++	NvRegRxRunt = 0x2b0,
++	NvRegRxFrameTooLong = 0x2b4,
++	NvRegRxOverflow = 0x2b8,
++	NvRegRxFCSErr = 0x2bc,
++	NvRegRxFrameAlignErr = 0x2c0,
++	NvRegRxLenErr = 0x2c4,
++	NvRegRxUnicast = 0x2c8,
++	NvRegRxMulticast = 0x2cc,
++	NvRegRxBroadcast = 0x2d0,
++	NvRegTxDef = 0x2d4,
++	NvRegTxFrame = 0x2d8,
++	NvRegRxCnt = 0x2dc,
++	NvRegTxPause = 0x2e0,
++	NvRegRxPause = 0x2e4,
++	NvRegRxDropFrame = 0x2e8,
++
++	NvRegVlanControl = 0x300,
++#define NVREG_VLANCONTROL_ENABLE	0x2000
++	NvRegMSIXMap0 = 0x3e0,
++	NvRegMSIXMap1 = 0x3e4,
++	NvRegMSIXIrqStatus = 0x3f0,
++
++	NvRegPowerState2 = 0x600,
++#define NVREG_POWERSTATE2_POWERUP_MASK		0x0F11
++#define NVREG_POWERSTATE2_POWERUP_REV_A3	0x0001
+ };
+ 
+ /* Big endian: should work, but is untested */
+@@ -315,7 +555,7 @@
+ struct ring_desc_ex {
+ 	u32 PacketBufferHigh;
+ 	u32 PacketBufferLow;
+-	u32 Reserved;
++	u32 TxVlan;
+ 	u32 FlagLen;
+ };
+ 
+@@ -336,7 +576,7 @@
+ #define NV_TX_CARRIERLOST	(1<<27)
+ #define NV_TX_LATECOLLISION	(1<<28)
+ #define NV_TX_UNDERFLOW		(1<<29)
+-#define NV_TX_ERROR		(1<<30)
++#define NV_TX_ERROR		(1<<30) /* logical OR of all errors */
+ #define NV_TX_VALID		(1<<31)
+ 
+ #define NV_TX2_LASTPACKET	(1<<29)
+@@ -347,7 +587,7 @@
+ #define NV_TX2_LATECOLLISION	(1<<27)
+ #define NV_TX2_UNDERFLOW	(1<<28)
+ /* error and valid are the same for both */
+-#define NV_TX2_ERROR		(1<<30)
++#define NV_TX2_ERROR		(1<<30) /* logical OR of all errors */
+ #define NV_TX2_VALID		(1<<31)
+ #define NV_TX2_TSO		(1<<28)
+ #define NV_TX2_TSO_SHIFT	14
+@@ -356,6 +596,8 @@
+ #define NV_TX2_CHECKSUM_L3	(1<<27)
+ #define NV_TX2_CHECKSUM_L4	(1<<26)
+ 
++#define NV_TX3_VLAN_TAG_PRESENT (1<<18)
++
+ #define NV_RX_DESCRIPTORVALID	(1<<16)
+ #define NV_RX_MISSEDFRAME	(1<<17)
+ #define NV_RX_SUBSTRACT1	(1<<18)
+@@ -366,7 +608,7 @@
+ #define NV_RX_CRCERR		(1<<27)
+ #define NV_RX_OVERFLOW		(1<<28)
+ #define NV_RX_FRAMINGERR	(1<<29)
+-#define NV_RX_ERROR		(1<<30)
++#define NV_RX_ERROR		(1<<30) /* logical OR of all errors */
+ #define NV_RX_AVAIL		(1<<31)
+ 
+ #define NV_RX2_CHECKSUMMASK	(0x1C000000)
+@@ -383,11 +625,15 @@
+ #define NV_RX2_OVERFLOW		(1<<23)
+ #define NV_RX2_FRAMINGERR	(1<<24)
+ /* error and avail are the same for both */
+-#define NV_RX2_ERROR		(1<<30)
++#define NV_RX2_ERROR		(1<<30) /* logical OR of all errors */
+ #define NV_RX2_AVAIL		(1<<31)
+ 
++#define NV_RX3_VLAN_TAG_PRESENT (1<<16)
++#define NV_RX3_VLAN_TAG_MASK	(0x0000FFFF)
++
+ /* Miscelaneous hardware related defines: */
+-#define NV_PCI_REGSZ		0x270
++#define NV_PCI_REGSZ_VER1      	0x270
++#define NV_PCI_REGSZ_VER2      	0x604
+ 
+ /* various timeout delays: all in usec */
+ #define NV_TXRX_RESET_DELAY	4
+@@ -404,6 +650,7 @@
+ #define NV_MIIBUSY_DELAY	50
+ #define NV_MIIPHY_DELAY	10
+ #define NV_MIIPHY_DELAYMAX	10000
++#define NV_MAC_RESET_DELAY	64
+ 
+ #define NV_WAKEUPPATTERNS	5
+ #define NV_WAKEUPMASKENTRIES	4
+@@ -411,16 +658,18 @@
+ /* General driver defaults */
+ #define NV_WATCHDOG_TIMEO	(5*HZ)
+ 
+-#define RX_RING		128
+-#define TX_RING		256
++#define RX_RING_DEFAULT		128
++#define TX_RING_DEFAULT		64
++#define RX_RING_MIN		RX_RING_DEFAULT
++#define TX_RING_MIN		TX_RING_DEFAULT
++#define RING_MAX_DESC_VER_1	1024
++#define RING_MAX_DESC_VER_2_3	16384
+ /* 
+- * If your nic mysteriously hangs then try to reduce the limits
+- * to 1/0: It might be required to set NV_TX_LASTPACKET in the
+- * last valid ring entry. But this would be impossible to
+- * implement - probably a disassembly error.
++ * Difference between the get and put pointers for the tx ring.
++ * This is used to throttle the amount of data outstanding in the
++ * tx ring.
+  */
+-#define TX_LIMIT_STOP	255
+-#define TX_LIMIT_START	254
++#define TX_LIMIT_DIFFERENCE	1
+ 
+ /* rx/tx mac addr + type + vlan + align + slack*/
+ #define NV_RX_HEADERS		(64)
+@@ -434,6 +683,7 @@
+ #define OOM_REFILL	(1+HZ/20)
+ #define POLL_WAIT	(1+HZ/100)
+ #define LINK_TIMEOUT	(3*HZ)
++#define STATS_INTERVAL	(10*HZ)
+ 
+ /* 
+  * desc_ver values:
+@@ -449,16 +699,37 @@
+ /* PHY defines */
+ #define PHY_OUI_MARVELL	0x5043
+ #define PHY_OUI_CICADA	0x03f1
++#define PHY_OUI_VITESSE	0x01c1
+ #define PHYID1_OUI_MASK	0x03ff
+ #define PHYID1_OUI_SHFT	6
+ #define PHYID2_OUI_MASK	0xfc00
+ #define PHYID2_OUI_SHFT	10
+-#define PHY_INIT1	0x0f000
+-#define PHY_INIT2	0x0e00
+-#define PHY_INIT3	0x01000
+-#define PHY_INIT4	0x0200
+-#define PHY_INIT5	0x0004
+-#define PHY_INIT6	0x02000
++#define PHYID2_MODEL_MASK		0x03f0
++#define PHY_MODEL_MARVELL_E3016		0x220
++#define PHY_MARVELL_E3016_INITMASK	0x0300
++#define PHY_CICADA_INIT1	0x0f000
++#define PHY_CICADA_INIT2	0x0e00
++#define PHY_CICADA_INIT3	0x01000
++#define PHY_CICADA_INIT4	0x0200
++#define PHY_CICADA_INIT5	0x0004
++#define PHY_CICADA_INIT6	0x02000
++#define PHY_VITESSE_INIT_REG1	0x1f
++#define PHY_VITESSE_INIT_REG2	0x10
++#define PHY_VITESSE_INIT_REG3	0x11
++#define PHY_VITESSE_INIT_REG4	0x12
++#define PHY_VITESSE_INIT_MSK1	0xc
++#define PHY_VITESSE_INIT_MSK2	0x0180
++#define PHY_VITESSE_INIT1	0x52b5
++#define PHY_VITESSE_INIT2	0xaf8a
++#define PHY_VITESSE_INIT3	0x8
++#define PHY_VITESSE_INIT4	0x8f8a
++#define PHY_VITESSE_INIT5	0xaf86
++#define PHY_VITESSE_INIT6	0x8f86
++#define PHY_VITESSE_INIT7	0xaf82
++#define PHY_VITESSE_INIT8	0x0100
++#define PHY_VITESSE_INIT9	0x8f82
++#define PHY_VITESSE_INIT10	0x0
++
+ #define PHY_GIGABIT	0x0100
+ 
+ #define PHY_TIMEOUT	0x1
+@@ -468,14 +739,148 @@
+ #define PHY_1000	0x2
+ #define PHY_HALF	0x100
+ 
+-/* FIXME: MII defines that should be added to <linux/mii.h> */
+-#define MII_1000BT_CR	0x09
+-#define MII_1000BT_SR	0x0a
+-#define ADVERTISE_1000FULL	0x0200
+-#define ADVERTISE_1000HALF	0x0100
+-#define LPA_1000FULL	0x0800
+-#define LPA_1000HALF	0x0400
++#define NV_PAUSEFRAME_RX_CAPABLE 0x0001
++#define NV_PAUSEFRAME_TX_CAPABLE 0x0002
++#define NV_PAUSEFRAME_RX_ENABLE  0x0004
++#define NV_PAUSEFRAME_TX_ENABLE  0x0008
++#define NV_PAUSEFRAME_RX_REQ     0x0010
++#define NV_PAUSEFRAME_TX_REQ     0x0020
++#define NV_PAUSEFRAME_AUTONEG    0x0040
++
++/* MSI/MSI-X defines */
++#define NV_MSI_X_MAX_VECTORS  8
++#define NV_MSI_X_VECTORS_MASK 0x000f
++#define NV_MSI_CAPABLE        0x0010
++#define NV_MSI_X_CAPABLE      0x0020
++#define NV_MSI_ENABLED        0x0040
++#define NV_MSI_X_ENABLED      0x0080
++
++#define NV_MSI_X_VECTOR_ALL   0x0
<<Diff was trimmed, longer than 597 lines>>


More information about the pld-cvs-commit mailing list