From 7bc770a2546e8a5f93ee931634d4064b3b6e08f2 Mon Sep 17 00:00:00 2001 From: mlaier Date: Fri, 2 Jul 2004 12:16:02 +0000 Subject: Bring in the first chunk of altq driver modifications. This covers the following drivers: bfe(4), em(4), fxp(4), lnc(4), tun(4), de(4) rl(4), sis(4) and xl(4) More patches are pending on: http://peoples.freebsd.org/~mlaier/ Please take a look and tell me if "your" driver is missing, so I can fix this. Tested-by: many No-objection: -current, -net --- sys/pci/if_de.c | 23 ++++++++++++++--------- sys/pci/if_rl.c | 10 ++++++---- sys/pci/if_sis.c | 16 +++++++++------- sys/pci/if_xl.c | 14 ++++++++------ 4 files changed, 37 insertions(+), 26 deletions(-) (limited to 'sys/pci') diff --git a/sys/pci/if_de.c b/sys/pci/if_de.c index a56f1b8..6c3592e 100644 --- a/sys/pci/if_de.c +++ b/sys/pci/if_de.c @@ -4619,15 +4619,17 @@ tulip_ifstart( if ((sc->tulip_flags & (TULIP_WANTSETUP|TULIP_TXPROBE_ACTIVE)) == TULIP_WANTSETUP) tulip_txput_setup(sc); - while (sc->tulip_if.if_snd.ifq_head != NULL) { + while (!IFQ_DRV_IS_EMPTY(&sc->tulip_if.if_snd)) { struct mbuf *m; - IF_DEQUEUE(&sc->tulip_if.if_snd, m); + IFQ_DRV_DEQUEUE(&sc->tulip_if.if_snd, m); + if(m == NULL) + break; if ((m = tulip_txput(sc, m)) != NULL) { - IF_PREPEND(&sc->tulip_if.if_snd, m); + IFQ_DRV_PREPEND(&sc->tulip_if.if_snd, m); break; } } - if (sc->tulip_if.if_snd.ifq_head == NULL) + if (IFQ_DRV_IS_EMPTY(&sc->tulip_if.if_snd)) sc->tulip_if.if_start = tulip_ifstart_one; } @@ -4642,11 +4644,12 @@ tulip_ifstart_one( tulip_softc_t * const sc = (tulip_softc_t *)ifp->if_softc; if ((sc->tulip_if.if_flags & IFF_RUNNING) - && sc->tulip_if.if_snd.ifq_head != NULL) { + && !IFQ_DRV_IS_EMPTY(&sc->tulip_if.if_snd)) { struct mbuf *m; - IF_DEQUEUE(&sc->tulip_if.if_snd, m); - if ((m = tulip_txput(sc, m)) != NULL) - IF_PREPEND(&sc->tulip_if.if_snd, m); + IFQ_DRV_DEQUEUE(&sc->tulip_if.if_snd, m); + if(m == NULL); + else if((m = tulip_txput(sc, m)) != NULL) + IFQ_DRV_PREPEND(&sc->tulip_if.if_snd, m); } TULIP_PERFEND(ifstart_one); } @@ -4788,7 +4791,9 @@ tulip_attach( tulip_reset(sc); ether_ifattach(&(sc)->tulip_if, sc->tulip_enaddr); - ifp->if_snd.ifq_maxlen = ifqmaxlen; + IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen); + ifp->if_snd.ifq_drv_maxlen = ifqmaxlen; + IFQ_SET_READY(&ifp->if_snd); } #if defined(TULIP_BUS_DMA) diff --git a/sys/pci/if_rl.c b/sys/pci/if_rl.c index 262b6a1..6398752 100644 --- a/sys/pci/if_rl.c +++ b/sys/pci/if_rl.c @@ -1048,7 +1048,9 @@ rl_attach(dev) ifp->if_capabilities |= IFCAP_POLLING; #endif ifp->if_capenable = ifp->if_capabilities; - ifp->if_snd.ifq_maxlen = IFQ_MAXLEN; + IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN); + ifp->if_snd.ifq_drv_maxlen = IFQ_MAXLEN; + IFQ_SET_READY(&ifp->if_snd); callout_handle_init(&sc->rl_stat_ch); @@ -1393,7 +1395,7 @@ rl_poll (struct ifnet *ifp, enum poll_cmd cmd, int count) sc->rxcycles = count; rl_rxeof(sc); rl_txeof(sc); - if (ifp->if_snd.ifq_head != NULL) + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) rl_start(ifp); if (cmd == POLL_AND_CHECK_STATUS) { /* also check status register */ @@ -1475,7 +1477,7 @@ rl_intr(arg) } - if (ifp->if_snd.ifq_head != NULL) + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) rl_start(ifp); #ifdef DEVICE_POLLING @@ -1545,7 +1547,7 @@ rl_start(ifp) RL_LOCK(sc); while(RL_CUR_TXMBUF(sc) == NULL) { - IF_DEQUEUE(&ifp->if_snd, m_head); + IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); if (m_head == NULL) break; diff --git a/sys/pci/if_sis.c b/sys/pci/if_sis.c index 108c356..6a30c7e 100644 --- a/sys/pci/if_sis.c +++ b/sys/pci/if_sis.c @@ -1337,7 +1337,9 @@ sis_attach(dev) ifp->if_watchdog = sis_watchdog; ifp->if_init = sis_init; ifp->if_baudrate = 10000000; - ifp->if_snd.ifq_maxlen = SIS_TX_LIST_CNT - 1; + IFQ_SET_MAXLEN(&ifp->if_snd, SIS_TX_LIST_CNT - 1); + ifp->if_snd.ifq_drv_maxlen = SIS_TX_LIST_CNT - 1; + IFQ_SET_READY(&ifp->if_snd); /* * Do MII setup. @@ -1727,7 +1729,7 @@ sis_tick(xsc) if (!sc->sis_link && mii->mii_media_status & IFM_ACTIVE && IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) { sc->sis_link++; - if (ifp->if_snd.ifq_head != NULL) + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) sis_start(ifp); } @@ -1766,7 +1768,7 @@ sis_poll(struct ifnet *ifp, enum poll_cmd cmd, int count) sc->rxcycles = count; sis_rxeof(sc); sis_txeof(sc); - if (ifp->if_snd.ifq_head != NULL) + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) sis_start(ifp); if (sc->rxcycles > 0 || cmd == POLL_AND_CHECK_STATUS) { @@ -1853,7 +1855,7 @@ sis_intr(arg) /* Re-enable interrupts. */ CSR_WRITE_4(sc, SIS_IER, 1); - if (ifp->if_snd.ifq_head != NULL) + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) sis_start(ifp); done: SIS_UNLOCK(sc); @@ -1970,12 +1972,12 @@ sis_start(ifp) } while(sc->sis_ldata.sis_tx_list[idx].sis_mbuf == NULL) { - IF_DEQUEUE(&ifp->if_snd, m_head); + IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); if (m_head == NULL) break; if (sis_encap(sc, &m_head, &idx)) { - IF_PREPEND(&ifp->if_snd, m_head); + IFQ_DRV_PREPEND(&ifp->if_snd, m_head); ifp->if_flags |= IFF_OACTIVE; break; } @@ -2337,7 +2339,7 @@ sis_watchdog(ifp) sis_reset(sc); sis_init(sc); - if (ifp->if_snd.ifq_head != NULL) + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) sis_start(ifp); SIS_UNLOCK(sc); diff --git a/sys/pci/if_xl.c b/sys/pci/if_xl.c index 31adf06..29e5705 100644 --- a/sys/pci/if_xl.c +++ b/sys/pci/if_xl.c @@ -933,7 +933,7 @@ xl_testpacket(sc) mtod(m, unsigned char *)[15] = 0; mtod(m, unsigned char *)[16] = 0xE3; m->m_len = m->m_pkthdr.len = sizeof(struct ether_header) + 3; - IF_ENQUEUE(&ifp->if_snd, m); + IFQ_ENQUEUE(&ifp->if_snd, m); xl_start(ifp); return; @@ -1556,7 +1556,9 @@ xl_attach(dev) ifp->if_watchdog = xl_watchdog; ifp->if_init = xl_init; ifp->if_baudrate = 10000000; - ifp->if_snd.ifq_maxlen = XL_TX_LIST_CNT - 1; + IFQ_SET_MAXLEN(&ifp->if_snd, XL_TX_LIST_CNT - 1); + ifp->if_snd.ifq_drv_maxlen = XL_TX_LIST_CNT - 1; + IFQ_SET_READY(&ifp->if_snd); ifp->if_capenable = ifp->if_capabilities; /* @@ -2337,7 +2339,7 @@ xl_intr(arg) } } - if (ifp->if_snd.ifq_head != NULL) + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) (*ifp->if_start)(ifp); XL_UNLOCK(sc); @@ -2513,7 +2515,7 @@ xl_start(ifp) start_tx = sc->xl_cdata.xl_tx_free; while(sc->xl_cdata.xl_tx_free != NULL) { - IF_DEQUEUE(&ifp->if_snd, m_head); + IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); if (m_head == NULL) break; @@ -2646,7 +2648,7 @@ xl_start_90xB(ifp) break; } - IF_DEQUEUE(&ifp->if_snd, m_head); + IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head); if (m_head == NULL) break; @@ -3156,7 +3158,7 @@ xl_watchdog(ifp) xl_reset(sc); xl_init(sc); - if (ifp->if_snd.ifq_head != NULL) + if (IFQ_DRV_IS_EMPTY(&ifp->if_snd)) (*ifp->if_start)(ifp); XL_UNLOCK(sc); -- cgit v1.1