On Sat, Jul 25, 2009 at 07:14:42AM -0400, Brad wrote: > Please test the following diff which adds flow control support > with any gem(4) adapter. > > Please provide a dmesg and "ifconfig gemX" output. No one ever reported any issues with this so I'd like to get this in.
OK? > Index: gem.c > =================================================================== > RCS file: /cvs/src/sys/dev/ic/gem.c,v > retrieving revision 1.92 > diff -u -p -r1.92 gem.c > --- gem.c 18 Jul 2009 14:42:47 -0000 1.92 > +++ gem.c 25 Jul 2009 10:22:23 -0000 > @@ -134,7 +134,7 @@ gem_config(struct gem_softc *sc) > struct ifnet *ifp = &sc->sc_arpcom.ac_if; > struct mii_data *mii = &sc->sc_mii; > struct mii_softc *child; > - int i, error, phyad; > + int i, error, mii_flags, phyad; > struct ifmedia_entry *ifm; > > /* Make sure the chip is stopped. */ > @@ -248,6 +248,8 @@ gem_config(struct gem_softc *sc) > > gem_mifinit(sc); > > + mii_flags = MIIF_DOPAUSE; > + > /* > * Look for an external PHY. > */ > @@ -266,7 +268,7 @@ gem_config(struct gem_softc *sc) > } > > mii_attach(&sc->sc_dev, mii, 0xffffffff, phyad, > - MII_OFFSET_ANY, 0); > + MII_OFFSET_ANY, mii_flags); > } > > /* > @@ -292,7 +294,7 @@ gem_config(struct gem_softc *sc) > } > > mii_attach(&sc->sc_dev, mii, 0xffffffff, phyad, > - MII_OFFSET_ANY, 0); > + MII_OFFSET_ANY, mii_flags); > } > > /* > @@ -314,8 +316,10 @@ gem_config(struct gem_softc *sc) > mii->mii_readreg = gem_pcs_readreg; > mii->mii_writereg = gem_pcs_writereg; > > + mii_flags |= MIIF_NOISOLATE; > + > mii_attach(&sc->sc_dev, mii, 0xffffffff, MII_PHY_ANY, > - MII_OFFSET_ANY, MIIF_NOISOLATE); > + MII_OFFSET_ANY, mii_flags); > } > > child = LIST_FIRST(&mii->mii_phys); > @@ -873,8 +877,8 @@ gem_init_regs(struct gem_softc *sc) > bus_space_write_4(t, h, GEM_MAC_RX_CRC_ERR_CNT, 0); > bus_space_write_4(t, h, GEM_MAC_RX_CODE_VIOL, 0); > > - /* Un-pause stuff */ > - bus_space_write_4(t, h, GEM_MAC_SEND_PAUSE_CMD, 0); > + /* Set XOFF PAUSE time */ > + bus_space_write_4(t, h, GEM_MAC_SEND_PAUSE_CMD, 0x1BF0); > > /* > * Set the internal arbitration to "infinite" bursts of the > @@ -1331,6 +1335,17 @@ gem_mii_statchg(struct device *dev) > v &= ~GEM_MAC_XIF_GMII_MODE; > } > bus_space_write_4(t, mac, GEM_MAC_XIF_CONFIG, v); > + > + /* > + * 802.3x flow control > + */ > + v = bus_space_read_4(t, mac, GEM_MAC_CONTROL_CONFIG); > + v &= ~(GEM_MAC_CC_RX_PAUSE | GEM_MAC_CC_TX_PAUSE); > + if ((IFM_OPTIONS(sc->sc_mii.mii_media_active) & IFM_ETH_RXPAUSE) != 0) > + v |= GEM_MAC_CC_RX_PAUSE; > + if ((IFM_OPTIONS(sc->sc_mii.mii_media_active) & IFM_ETH_TXPAUSE) != 0) > + v |= GEM_MAC_CC_TX_PAUSE; > + bus_space_write_4(t, mac, GEM_MAC_CONTROL_CONFIG, v); > } > > int > > -- > This message has been scanned for viruses and > dangerous content by MailScanner, and is > believed to be clean. > -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.
