Module Name: src Committed By: msaitoh Date: Thu Dec 26 15:32:37 UTC 2019
Modified Files: src/sys/dev/pci: if_stge.c Log Message: Improve flow control. To generate a diff of this commit: cvs rdiff -u -r1.74 -r1.75 src/sys/dev/pci/if_stge.c 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_stge.c diff -u src/sys/dev/pci/if_stge.c:1.74 src/sys/dev/pci/if_stge.c:1.75 --- src/sys/dev/pci/if_stge.c:1.74 Thu Dec 26 15:26:58 2019 +++ src/sys/dev/pci/if_stge.c Thu Dec 26 15:32:37 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: if_stge.c,v 1.74 2019/12/26 15:26:58 msaitoh Exp $ */ +/* $NetBSD: if_stge.c,v 1.75 2019/12/26 15:32:37 msaitoh Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.74 2019/12/26 15:26:58 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.75 2019/12/26 15:32:37 msaitoh Exp $"); #include <sys/param.h> @@ -1498,11 +1498,11 @@ stge_init(struct ifnet *ifp) /* * Send a PAUSE frame when we reach 29,696 bytes in the Rx - * FIFO, and send an un-PAUSE frame when the FIFO is totally - * empty again. + * FIFO, and send an un-PAUSE frame when we reach 3056 bytes + * in the Rx FIFO. */ bus_space_write_2(st, sh, STGE_FlowOnTresh, 29696 / 16); - bus_space_write_2(st, sh, STGE_FlowOffThresh, 0); + bus_space_write_2(st, sh, STGE_FlowOffThresh, 3056 / 16); /* * Set the maximum frame size. @@ -1857,12 +1857,15 @@ stge_mii_statchg(struct ifnet *ifp) { struct stge_softc *sc = ifp->if_softc; + sc->sc_MACCtrl &= ~(MC_DuplexSelect | MC_RxFlowControlEnable | + MC_TxFlowControlEnable); + if (sc->sc_mii.mii_media_active & IFM_FDX) sc->sc_MACCtrl |= MC_DuplexSelect; - else - sc->sc_MACCtrl &= ~MC_DuplexSelect; - - /* XXX 802.1x flow-control? */ + if ((sc->sc_mii.mii_media_active & IFM_ETH_RXPAUSE) != 0) + sc->sc_MACCtrl |= MC_RxFlowControlEnable; + if ((sc->sc_mii.mii_media_active & IFM_ETH_TXPAUSE) != 0) + sc->sc_MACCtrl |= MC_TxFlowControlEnable; bus_space_write_4(sc->sc_st, sc->sc_sh, STGE_MACCtrl, sc->sc_MACCtrl); }