Module Name:    src
Committed By:   msaitoh
Date:           Wed Jul 14 00:11:06 UTC 2010

Modified Files:
        src/sys/dev/pci: if_wm.c if_wmreg.h

Log Message:
- s/TBDA/TDBA/. It stands for Transmit Descriptor Base Address.
- The document says that the TDH register must be set after
  TCL.EN is set on 82575 and newer device.

TODO:
- ip4csum doesn't work on 82575 and newer device (reported by Paul Goyette),
  so we have to fix it.


To generate a diff of this commit:
cvs rdiff -u -r1.210 -r1.211 src/sys/dev/pci/if_wm.c
cvs rdiff -u -r1.43 -r1.44 src/sys/dev/pci/if_wmreg.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/if_wm.c
diff -u src/sys/dev/pci/if_wm.c:1.210 src/sys/dev/pci/if_wm.c:1.211
--- src/sys/dev/pci/if_wm.c:1.210	Mon Jun 28 01:43:39 2010
+++ src/sys/dev/pci/if_wm.c	Wed Jul 14 00:11:06 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_wm.c,v 1.210 2010/06/28 01:43:39 msaitoh Exp $	*/
+/*	$NetBSD: if_wm.c,v 1.211 2010/07/14 00:11:06 msaitoh Exp $	*/
 
 /*
  * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.210 2010/06/28 01:43:39 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.211 2010/07/14 00:11:06 msaitoh Exp $");
 
 #include "rnd.h"
 
@@ -3786,26 +3786,30 @@
 	sc->sc_txnext = 0;
 
 	if (sc->sc_type < WM_T_82543) {
-		CSR_WRITE(sc, WMREG_OLD_TBDAH, WM_CDTXADDR_HI(sc, 0));
-		CSR_WRITE(sc, WMREG_OLD_TBDAL, WM_CDTXADDR_LO(sc, 0));
+		CSR_WRITE(sc, WMREG_OLD_TDBAH, WM_CDTXADDR_HI(sc, 0));
+		CSR_WRITE(sc, WMREG_OLD_TDBAL, WM_CDTXADDR_LO(sc, 0));
 		CSR_WRITE(sc, WMREG_OLD_TDLEN, WM_TXDESCSIZE(sc));
 		CSR_WRITE(sc, WMREG_OLD_TDH, 0);
 		CSR_WRITE(sc, WMREG_OLD_TDT, 0);
 		CSR_WRITE(sc, WMREG_OLD_TIDV, 128);
 	} else {
-		CSR_WRITE(sc, WMREG_TBDAH, WM_CDTXADDR_HI(sc, 0));
-		CSR_WRITE(sc, WMREG_TBDAL, WM_CDTXADDR_LO(sc, 0));
+		CSR_WRITE(sc, WMREG_TDBAH, WM_CDTXADDR_HI(sc, 0));
+		CSR_WRITE(sc, WMREG_TDBAL, WM_CDTXADDR_LO(sc, 0));
 		CSR_WRITE(sc, WMREG_TDLEN, WM_TXDESCSIZE(sc));
 		CSR_WRITE(sc, WMREG_TDH, 0);
-		CSR_WRITE(sc, WMREG_TDT, 0);
 		CSR_WRITE(sc, WMREG_TIDV, 375);		/* ITR / 4 */
 		CSR_WRITE(sc, WMREG_TADV, 375);		/* should be same */
 
 		if ((sc->sc_flags & WM_F_NEWQUEUE) != 0)
+			/*
+			 * Don't write TDT before TCTL.EN is set.
+			 * See the document.
+			 */
 			CSR_WRITE(sc, WMREG_TXDCTL, TXDCTL_QUEUE_ENABLE
 			    | TXDCTL_PTHRESH(0) | TXDCTL_HTHRESH(0)
 			    | TXDCTL_WTHRESH(0));
 		else {
+			CSR_WRITE(sc, WMREG_TDT, 0);
 			CSR_WRITE(sc, WMREG_TXDCTL, TXDCTL_PTHRESH(0) |
 			    TXDCTL_HTHRESH(0) | TXDCTL_WTHRESH(0));
 			CSR_WRITE(sc, WMREG_RXDCTL, RXDCTL_PTHRESH(0) |
@@ -3877,6 +3881,11 @@
 		} else {
 			if ((sc->sc_flags & WM_F_NEWQUEUE) == 0)
 				WM_INIT_RXDESC(sc, i);
+			/*
+			 * For 82575 and newer device, the RX descriptors
+			 * must be initialized after the setting of RCTL.EN in
+			 * wm_set_filter()
+			 */
 		}
 	}
 	sc->sc_rxptr = 0;
@@ -4045,6 +4054,14 @@
 		sc->sc_tctl |= TCTL_MULR;
 	CSR_WRITE(sc, WMREG_TCTL, sc->sc_tctl);
 
+	if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) {
+		/*
+		 * Write TDT after TCTL.EN is set.
+		 * See the document.
+		 */
+		CSR_WRITE(sc, WMREG_TDT, 0);
+	}
+
 	if (sc->sc_type == WM_T_80003) {
 		reg = CSR_READ(sc, WMREG_TCTL_EXT);
 		reg &= ~TCTL_EXT_GCEX_MASK;
@@ -4103,7 +4120,7 @@
 	/* Set the receive filter. */
 	wm_set_filter(sc);
 
-	/* On 575 and later set RDT only if RX enabled... */
+	/* On 575 and later set RDT only if RX enabled */
 	if ((sc->sc_flags & WM_F_NEWQUEUE) != 0)
 		for (i = 0; i < WM_NRXDESC; i++)
 			WM_INIT_RXDESC(sc, i);

Index: src/sys/dev/pci/if_wmreg.h
diff -u src/sys/dev/pci/if_wmreg.h:1.43 src/sys/dev/pci/if_wmreg.h:1.44
--- src/sys/dev/pci/if_wmreg.h:1.43	Fri Jun 25 04:16:28 2010
+++ src/sys/dev/pci/if_wmreg.h	Wed Jul 14 00:11:06 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_wmreg.h,v 1.43 2010/06/25 04:16:28 msaitoh Exp $	*/
+/*	$NetBSD: if_wmreg.h,v 1.44 2010/07/14 00:11:06 msaitoh Exp $	*/
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -628,11 +628,11 @@
 
 #define	WMREG_TDFPC	0x3430	/* Transmit Data FIFO Packet Count */
 
-#define	WMREG_OLD_TBDAL	0x0420	/* Transmit Descriptor Base Lo */
-#define	WMREG_TBDAL	0x3800
+#define	WMREG_OLD_TDBAL	0x0420	/* Transmit Descriptor Base Lo */
+#define	WMREG_TDBAL	0x3800
 
-#define	WMREG_OLD_TBDAH	0x0424	/* Transmit Descriptor Base Hi */
-#define	WMREG_TBDAH	0x3804
+#define	WMREG_OLD_TDBAH	0x0424	/* Transmit Descriptor Base Hi */
+#define	WMREG_TDBAH	0x3804
 
 #define	WMREG_OLD_TDLEN	0x0428	/* Transmit Descriptor Length */
 #define	WMREG_TDLEN	0x3808

Reply via email to