diff options
| author | Max Laier <mlaier@FreeBSD.org> | 2004-10-09 15:20:18 +0000 |
|---|---|---|
| committer | Max Laier <mlaier@FreeBSD.org> | 2004-10-09 15:20:18 +0000 |
| commit | 23db2fa1dfd5dd6ff03940578d4218b65633da21 (patch) | |
| tree | d62aba125ea28f863d5bdc76d550d58e4a4dcb37 | |
| parent | 8bc61b56c6214408a374d76d5636e4b1d8329662 (diff) | |
Notes
| -rw-r--r-- | sys/dev/bfe/if_bfe.c | 23 | ||||
| -rw-r--r-- | sys/dev/if_ndis/if_ndis.c | 3 | ||||
| -rw-r--r-- | sys/pci/if_sis.c | 20 |
3 files changed, 29 insertions, 17 deletions
diff --git a/sys/dev/bfe/if_bfe.c b/sys/dev/bfe/if_bfe.c index ba69c541a652..805cd2669e19 100644 --- a/sys/dev/bfe/if_bfe.c +++ b/sys/dev/bfe/if_bfe.c @@ -1357,7 +1357,7 @@ bfe_start(struct ifnet *ifp) { struct bfe_softc *sc; struct mbuf *m_head = NULL; - int idx; + int idx, queued = 0; sc = ifp->if_softc; idx = sc->bfe_tx_prod; @@ -1393,6 +1393,8 @@ bfe_start(struct ifnet *ifp) break; } + queued++; + /* * If there's a BPF listener, bounce a copy of this frame * to him. @@ -1400,15 +1402,18 @@ bfe_start(struct ifnet *ifp) BPF_MTAP(ifp, m_head); } - sc->bfe_tx_prod = idx; - /* Transmit - twice due to apparent hardware bug */ - CSR_WRITE_4(sc, BFE_DMATX_PTR, idx * sizeof(struct bfe_desc)); - CSR_WRITE_4(sc, BFE_DMATX_PTR, idx * sizeof(struct bfe_desc)); + if (queued) { + sc->bfe_tx_prod = idx; + /* Transmit - twice due to apparent hardware bug */ + CSR_WRITE_4(sc, BFE_DMATX_PTR, idx * sizeof(struct bfe_desc)); + CSR_WRITE_4(sc, BFE_DMATX_PTR, idx * sizeof(struct bfe_desc)); + + /* + * Set a timeout in case the chip goes out to lunch. + */ + ifp->if_timer = 5; + } - /* - * Set a timeout in case the chip goes out to lunch. - */ - ifp->if_timer = 5; BFE_UNLOCK(sc); } diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c index 48da1f8efd18..2412cf082070 100644 --- a/sys/dev/if_ndis/if_ndis.c +++ b/sys/dev/if_ndis/if_ndis.c @@ -1291,6 +1291,9 @@ ndis_start(ifp) break; } + if (pcnt == 0) + return; + if (sc->ndis_txpending == 0) ifp->if_flags |= IFF_OACTIVE; diff --git a/sys/pci/if_sis.c b/sys/pci/if_sis.c index 6a30c7effa13..0fe85ab4ea27 100644 --- a/sys/pci/if_sis.c +++ b/sys/pci/if_sis.c @@ -1954,7 +1954,7 @@ sis_start(ifp) { struct sis_softc *sc; struct mbuf *m_head = NULL; - u_int32_t idx; + u_int32_t idx, queued = 0; sc = ifp->if_softc; SIS_LOCK(sc); @@ -1982,6 +1982,8 @@ sis_start(ifp) break; } + queued++; + /* * If there's a BPF listener, bounce a copy of this frame * to him. @@ -1990,14 +1992,16 @@ sis_start(ifp) } - /* Transmit */ - sc->sis_cdata.sis_tx_prod = idx; - SIS_SETBIT(sc, SIS_CSR, SIS_CSR_TX_ENABLE); + if (queued) { + /* Transmit */ + sc->sis_cdata.sis_tx_prod = idx; + SIS_SETBIT(sc, SIS_CSR, SIS_CSR_TX_ENABLE); - /* - * Set a timeout in case the chip goes out to lunch. - */ - ifp->if_timer = 5; + /* + * Set a timeout in case the chip goes out to lunch. + */ + ifp->if_timer = 5; + } SIS_UNLOCK(sc); |
