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;