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.

Reply via email to