Module Name:    src
Committed By:   snj
Date:           Tue Mar 24 20:38:38 UTC 2009

Modified Files:
        src/sys/dev/ic [netbsd-5]: rtl8169.c rtl81x9var.h

Log Message:
Pull up following revision(s) (requested by tsutsui in ticket #596):
        sys/dev/ic/rtl8169.c: revision 1.108
        sys/dev/ic/rtl81x9var.h: revision 1.42
Access LDPS register in re_reset() only on 8169S single chip variants.
>From OpenBSD and FreeBSD drivers via PR kern/41009, and
Realtek-supplied FreeBSD driver.


To generate a diff of this commit:
cvs rdiff -u -r1.105 -r1.105.4.1 src/sys/dev/ic/rtl8169.c
cvs rdiff -u -r1.41 -r1.41.12.1 src/sys/dev/ic/rtl81x9var.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/ic/rtl8169.c
diff -u src/sys/dev/ic/rtl8169.c:1.105 src/sys/dev/ic/rtl8169.c:1.105.4.1
--- src/sys/dev/ic/rtl8169.c:1.105	Sat Aug 23 14:27:45 2008
+++ src/sys/dev/ic/rtl8169.c	Tue Mar 24 20:38:38 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtl8169.c,v 1.105 2008/08/23 14:27:45 tnn Exp $	*/
+/*	$NetBSD: rtl8169.c,v 1.105.4.1 2009/03/24 20:38:38 snj Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998-2003
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtl8169.c,v 1.105 2008/08/23 14:27:45 tnn Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtl8169.c,v 1.105.4.1 2009/03/24 20:38:38 snj Exp $");
 /* $FreeBSD: /repoman/r/ncvs/src/sys/dev/re/if_re.c,v 1.20 2004/04/11 20:34:08 ru Exp $ */
 
 /*
@@ -389,10 +389,10 @@
 		    device_xname(sc->sc_dev));
 
 	/*
-	 * NB: Realtek-supplied Linux driver does this only for
-	 * MCFG_METHOD_2, which corresponds to sc->sc_rev == 3.
+	 * NB: Realtek-supplied FreeBSD driver does this only for MACFG_3,
+	 *     but also says "Rtl8169s sigle chip detected".
 	 */
-	if (1) /* XXX check softc flag for 8169s version */
+	if ((sc->sc_quirk & RTKQ_MACLDPS) != 0)
 		CSR_WRITE_1(sc, RTK_LDPS, 1);
 
 }
@@ -567,9 +567,6 @@
 	struct ifnet *ifp;
 	int error = 0, i, addr_len;
 
-	/* Reset the adapter. */
-	re_reset(sc);
-
 	if ((sc->sc_quirk & RTKQ_8139CPLUS) == 0) {
 		uint32_t hwrev;
 
@@ -585,12 +582,15 @@
 		case RTK_HWREV_8169S:
 		case RTK_HWREV_8110S:
 			sc->sc_rev = 3;
+			sc->sc_quirk |= RTKQ_MACLDPS;
 			break;
 		case RTK_HWREV_8169_8110SB:
 			sc->sc_rev = 4;
+			sc->sc_quirk |= RTKQ_MACLDPS;
 			break;
 		case RTK_HWREV_8169_8110SC:
 			sc->sc_rev = 5;
+			sc->sc_quirk |= RTKQ_MACLDPS;
 			break;
 		case RTK_HWREV_8101E:
 			sc->sc_rev = 11;
@@ -631,6 +631,9 @@
 		sc->re_ldata.re_tx_desc_cnt = RE_TX_DESC_CNT_8139;
 	}
 
+	/* Reset the adapter. */
+	re_reset(sc);
+
 	if (sc->sc_rev == 24 || sc->sc_rev == 25) {
 		/*
 		 * Get station address from ID registers.

Index: src/sys/dev/ic/rtl81x9var.h
diff -u src/sys/dev/ic/rtl81x9var.h:1.41 src/sys/dev/ic/rtl81x9var.h:1.41.12.1
--- src/sys/dev/ic/rtl81x9var.h:1.41	Fri Apr 25 11:27:19 2008
+++ src/sys/dev/ic/rtl81x9var.h	Tue Mar 24 20:38:38 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtl81x9var.h,v 1.41 2008/04/25 11:27:19 tsutsui Exp $	*/
+/*	$NetBSD: rtl81x9var.h,v 1.41.12.1 2009/03/24 20:38:38 snj Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998
@@ -188,6 +188,7 @@
 #define RTKQ_8139CPLUS		0x00000002	/* 8139C+ */
 #define RTKQ_8169NONS		0x00000004	/* old non-single 8169 */
 #define RTKQ_PCIE		0x00000008	/* PCIe variants */
+#define RTKQ_MACLDPS		0x00000010	/* has LDPS register */
 
 	bus_dma_tag_t 		sc_dmat;
 

Reply via email to