Module Name: src Committed By: jdc Date: Thu Feb 14 22:08:28 UTC 2013
Modified Files: src/sys/dev/pci [netbsd-6]: if_wm.c if_wmvar.h Log Message: Pull up revisions: src/sys/dev/pci/if_wm.c revision 1.243 src/sys/dev/pci/if_wmvar.h revision 1.14 (requested by msaitoh in ticket #820). Use 82580(and I350) specific PHY read/write functions. Fixes PR#47542. To generate a diff of this commit: cvs rdiff -u -r1.227.2.5 -r1.227.2.6 src/sys/dev/pci/if_wm.c cvs rdiff -u -r1.12.10.1 -r1.12.10.2 src/sys/dev/pci/if_wmvar.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.227.2.5 src/sys/dev/pci/if_wm.c:1.227.2.6 --- src/sys/dev/pci/if_wm.c:1.227.2.5 Mon Dec 17 00:30:05 2012 +++ src/sys/dev/pci/if_wm.c Thu Feb 14 22:08:28 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: if_wm.c,v 1.227.2.5 2012/12/17 00:30:05 riz Exp $ */ +/* $NetBSD: if_wm.c,v 1.227.2.6 2013/02/14 22:08:28 jdc 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.227.2.5 2012/12/17 00:30:05 riz Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.227.2.6 2013/02/14 22:08:28 jdc Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -542,6 +542,8 @@ static int wm_gmii_bm_readreg(device_t, static void wm_gmii_bm_writereg(device_t, int, int, int); static int wm_gmii_hv_readreg(device_t, int, int); static void wm_gmii_hv_writereg(device_t, int, int, int); +static int wm_gmii_82580_readreg(device_t, int, int); +static void wm_gmii_82580_writereg(device_t, int, int, int); static int wm_sgmii_readreg(device_t, int, int); static void wm_sgmii_writereg(device_t, int, int, int); @@ -6277,6 +6279,10 @@ wm_gmii_mediainit(struct wm_softc *sc, p } else if (sc->sc_type >= WM_T_80003) { sc->sc_mii.mii_readreg = wm_gmii_i80003_readreg; sc->sc_mii.mii_writereg = wm_gmii_i80003_writereg; + } else if (sc->sc_type >= WM_T_82580) { + sc->sc_phytype = WMPHY_82580; + sc->sc_mii.mii_readreg = wm_gmii_82580_readreg; + sc->sc_mii.mii_writereg = wm_gmii_82580_writereg; } else if (sc->sc_type >= WM_T_82544) { sc->sc_mii.mii_readreg = wm_gmii_i82544_readreg; sc->sc_mii.mii_writereg = wm_gmii_i82544_writereg; @@ -6980,6 +6986,58 @@ wm_sgmii_writereg(device_t self, int phy } /* + * wm_gmii_82580_readreg: [mii interface function] + * + * Read a PHY register on the 82580 and I350. + * This could be handled by the PHY layer if we didn't have to lock the + * ressource ... + */ +static int +wm_gmii_82580_readreg(device_t self, int phy, int reg) +{ + struct wm_softc *sc = device_private(self); + int sem; + int rv; + + sem = swfwphysem[sc->sc_funcid]; + if (wm_get_swfw_semaphore(sc, sem)) { + aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n", + __func__); + return 0; + } + + rv = wm_gmii_i82544_readreg(self, phy, reg); + + wm_put_swfw_semaphore(sc, sem); + return rv; +} + +/* + * wm_gmii_82580_writereg: [mii interface function] + * + * Write a PHY register on the 82580 and I350. + * This could be handled by the PHY layer if we didn't have to lock the + * ressource ... + */ +static void +wm_gmii_82580_writereg(device_t self, int phy, int reg, int val) +{ + struct wm_softc *sc = device_private(self); + int sem; + + sem = swfwphysem[sc->sc_funcid]; + if (wm_get_swfw_semaphore(sc, sem)) { + aprint_error_dev(sc->sc_dev, "%s: failed to get semaphore\n", + __func__); + return; + } + + wm_gmii_i82544_writereg(self, phy, reg, val); + + wm_put_swfw_semaphore(sc, sem); +} + +/* * wm_gmii_statchg: [mii interface function] * * Callback from MII layer when media changes. Index: src/sys/dev/pci/if_wmvar.h diff -u src/sys/dev/pci/if_wmvar.h:1.12.10.1 src/sys/dev/pci/if_wmvar.h:1.12.10.2 --- src/sys/dev/pci/if_wmvar.h:1.12.10.1 Thu Jun 28 16:06:36 2012 +++ src/sys/dev/pci/if_wmvar.h Thu Feb 14 22:08:28 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: if_wmvar.h,v 1.12.10.1 2012/06/28 16:06:36 riz Exp $ */ +/* $NetBSD: if_wmvar.h,v 1.12.10.2 2013/02/14 22:08:28 jdc Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc. @@ -140,7 +140,8 @@ typedef enum { WMPHY_BM, WMPHY_82577, WMPHY_82578, - WMPHY_82579 + WMPHY_82579, + WMPHY_82580 } wm_phy_type;