aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ep/if_ep.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/ep/if_ep.c')
-rw-r--r--sys/dev/ep/if_ep.c9
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;