diff options
Diffstat (limited to 'sys/dev/ep/if_ep.c')
| -rw-r--r-- | sys/dev/ep/if_ep.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/dev/ep/if_ep.c b/sys/dev/ep/if_ep.c index b6aac055eb95..c56639d8940b 100644 --- a/sys/dev/ep/if_ep.c +++ b/sys/dev/ep/if_ep.c @@ -435,7 +435,8 @@ epinit_locked(struct ep_softc *sc) if (!sc->epb.mii_trans) ep_ifmedia_upd(ifp); - CSR_WRITE_2(sc, EP_COMMAND, TX_PLL_ENABLE); + if (sc->stat & F_HAS_TX_PLL) + CSR_WRITE_2(sc, EP_COMMAND, TX_PLL_ENABLE); CSR_WRITE_2(sc, EP_COMMAND, RX_ENABLE); CSR_WRITE_2(sc, EP_COMMAND, TX_ENABLE); @@ -474,7 +475,7 @@ epstart_locked(struct ifnet *ifp) struct ep_softc *sc; u_int len; struct mbuf *m, *m0; - int pad; + int pad, started; sc = ifp->if_softc; if (sc->gone) @@ -483,11 +484,15 @@ epstart_locked(struct ifnet *ifp) EP_BUSY_WAIT(sc); if (ifp->if_drv_flags & IFF_DRV_OACTIVE) return; + started = 0; startagain: /* Sneak a peek at the next packet */ IFQ_DRV_DEQUEUE(&ifp->if_snd, m0); if (m0 == NULL) return; + if (!started && (sc->stat & F_HAS_TX_PLL)) + CSR_WRITE_2(sc, EP_COMMAND, TX_PLL_ENABLE); + started++; for (len = 0, m = m0; m != NULL; m = m->m_next) len += m->m_len; |
