diff options
| author | itojun <itojun@NetBSD.org> | 2002-03-05 04:12:57 +0000 |
|---|---|---|
| committer | itojun <itojun@NetBSD.org> | 2002-03-05 04:12:57 +0000 |
| commit | ac36f7cb2c4f72b86e6d2b681ac6e29f4cfaeab9 (patch) | |
| tree | 445a5cc94468e541a8b928a5ad54928dc33b1d22 /sys/dev | |
| parent | 69881cf6b8dc615ac34107b2f982835e042159e3 (diff) | |
bring in latest ALTQ from kjc. ALTQify some of the drivers.
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/ic/hd64570.c | 7 | ||||
| -rw-r--r-- | sys/dev/ic/midway.c | 5 | ||||
| -rw-r--r-- | sys/dev/ic/pdq_ifsubr.c | 5 | ||||
| -rw-r--r-- | sys/dev/ieee1394/if_fw.c | 15 | ||||
| -rw-r--r-- | sys/dev/isa/if_hp.c | 7 | ||||
| -rw-r--r-- | sys/dev/isa/if_iy.c | 6 | ||||
| -rw-r--r-- | sys/dev/ofw/ofnet.c | 7 | ||||
| -rw-r--r-- | sys/dev/pci/if_tl.c | 13 | ||||
| -rw-r--r-- | sys/dev/qbus/if_dmc.c | 19 | ||||
| -rw-r--r-- | sys/dev/qbus/if_il.c | 7 | ||||
| -rw-r--r-- | sys/dev/usb/if_upl.c | 34 |
11 files changed, 69 insertions, 56 deletions
diff --git a/sys/dev/ic/hd64570.c b/sys/dev/ic/hd64570.c index 361507224a6..8ffeb122342 100644 --- a/sys/dev/ic/hd64570.c +++ b/sys/dev/ic/hd64570.c @@ -1,4 +1,4 @@ -/* $NetBSD: hd64570.c,v 1.20 2001/11/13 13:14:37 lukem Exp $ */ +/* $NetBSD: hd64570.c,v 1.21 2002/03/05 04:12:57 itojun Exp $ */ /* * Copyright (c) 1999 Christian E. Hopps @@ -65,7 +65,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hd64570.c,v 1.20 2001/11/13 13:14:37 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hd64570.c,v 1.21 2002/03/05 04:12:57 itojun Exp $"); #include "bpfilter.h" #include "opt_inet.h" @@ -458,6 +458,7 @@ sca_port_attach(struct sca_softc *sc, u_int port) #ifdef SCA_USE_FASTQ scp->fastq.ifq_maxlen = IFQ_MAXLEN; #endif + IFQ_SET_READY(&ifp->if_snd); if_attach(ifp); if_alloc_sadl(ifp); @@ -1068,7 +1069,7 @@ sca_start(ifp) IF_DEQUEUE(&scp->fastq, mb_head); if (mb_head == NULL) #endif - IF_DEQUEUE(&ifp->if_snd, mb_head); + IFQ_DEQUEUE(&ifp->if_snd, mb_head); if (mb_head == NULL) goto start_xmit; diff --git a/sys/dev/ic/midway.c b/sys/dev/ic/midway.c index 947573adb6d..a446f144d61 100644 --- a/sys/dev/ic/midway.c +++ b/sys/dev/ic/midway.c @@ -1,4 +1,4 @@ -/* $NetBSD: midway.c,v 1.57 2002/02/11 11:19:29 wiz Exp $ */ +/* $NetBSD: midway.c,v 1.58 2002/03/05 04:12:57 itojun Exp $ */ /* (sync'd to midway.c 1.68) */ /* @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: midway.c,v 1.57 2002/02/11 11:19:29 wiz Exp $"); +__KERNEL_RCSID(0, "$NetBSD: midway.c,v 1.58 2002/03/05 04:12:57 itojun Exp $"); #undef EN_DEBUG #undef EN_DEBUG_RANGE /* check ranges on en_read/en_write's? */ @@ -812,6 +812,7 @@ done_probe: ifp->if_ioctl = en_ioctl; ifp->if_output = atm_output; ifp->if_start = en_start; + IFQ_SET_READY(&ifp->if_snd); /* * init softc diff --git a/sys/dev/ic/pdq_ifsubr.c b/sys/dev/ic/pdq_ifsubr.c index 0324469ed71..54a77eedd38 100644 --- a/sys/dev/ic/pdq_ifsubr.c +++ b/sys/dev/ic/pdq_ifsubr.c @@ -1,4 +1,4 @@ -/* $NetBSD: pdq_ifsubr.c,v 1.38 2001/12/21 23:21:47 matt Exp $ */ +/* $NetBSD: pdq_ifsubr.c,v 1.39 2002/03/05 04:12:58 itojun Exp $ */ /*- * Copyright (c) 1995, 1996 Matt Thomas <matt@3am-software.com> @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pdq_ifsubr.c,v 1.38 2001/12/21 23:21:47 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pdq_ifsubr.c,v 1.39 2002/03/05 04:12:58 itojun Exp $"); #ifdef __NetBSD__ #include "opt_inet.h" @@ -562,6 +562,7 @@ pdq_ifattach( ifp->if_output = fddi_output; #endif ifp->if_start = pdq_ifstart; + IFQ_SET_READY(&ifp->if_snd); #if defined(IFM_FDDI) { diff --git a/sys/dev/ieee1394/if_fw.c b/sys/dev/ieee1394/if_fw.c index e5dcfe1695e..7603aebbb0d 100644 --- a/sys/dev/ieee1394/if_fw.c +++ b/sys/dev/ieee1394/if_fw.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_fw.c,v 1.13 2002/02/27 05:07:25 jmc Exp $ */ +/* $NetBSD: if_fw.c,v 1.14 2002/03/05 04:12:58 itojun Exp $ */ /* XXX ALTQ XXX */ @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_fw.c,v 1.13 2002/02/27 05:07:25 jmc Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_fw.c,v 1.14 2002/03/05 04:12:58 itojun Exp $"); #include "opt_inet.h" #include "bpfilter.h" @@ -159,6 +159,7 @@ fw_attach(struct device *parent, struct device *self, void *aux) ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; ifp->if_baudrate = IF_Mbps(100 << sc->sc_ic.ic_hwaddr.iha_speed); ifp->if_addrlen = sizeof(struct ieee1394_hwaddr); + IFQ_SET_READY(&ifp->if_snd); printf(":"); for (i = 0; i < sizeof(sc->sc_ic.ic_hwaddr); i++) @@ -242,7 +243,7 @@ fw_start(struct ifnet *ifp) if ((ifp->if_flags & (IFF_RUNNING|IFF_OACTIVE)) != IFF_RUNNING) return; for (;;) { - IF_DEQUEUE(&ifp->if_snd, m0); + IFQ_DEQUEUE(&ifp->if_snd, m0); if (m0 == NULL) break; error = (*psc->sc1394_ifoutput) @@ -250,7 +251,6 @@ fw_start(struct ifnet *ifp) if (error) break; } - IFQ_POLL(&ifp->if_snd, m0); if (m0 != NULL) ifp->if_flags |= IFF_OACTIVE; } @@ -293,12 +293,7 @@ fw_stop(struct ifnet *ifp, int disable) (*psc->sc1394_ifinreg) (sc->sc_sc1394.sc1394_dev.dv_parent, FW_FIFO_HI, FW_FIFO_LO, NULL); - for (;;) { - IF_DEQUEUE(&ifp->if_snd, m); - if (m == NULL) - break; - m_freem(m); - } + IFQ_PURGE(&ifp->if_snd); ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE); } diff --git a/sys/dev/isa/if_hp.c b/sys/dev/isa/if_hp.c index 2f58e528bd0..dff46063560 100644 --- a/sys/dev/isa/if_hp.c +++ b/sys/dev/isa/if_hp.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_hp.c,v 1.33 2001/11/13 08:01:18 lukem Exp $ */ +/* $NetBSD: if_hp.c,v 1.34 2002/03/05 04:12:58 itojun Exp $ */ /* XXX THIS DRIVER IS BROKEN. IT WILL NOT EVEN COMPILE. */ @@ -53,7 +53,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_hp.c,v 1.33 2001/11/13 08:01:18 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_hp.c,v 1.34 2002/03/05 04:12:58 itojun Exp $"); #include "hp.h" #if NHP > 0 @@ -425,6 +425,7 @@ hpattach(dvp) ifp->if_ioctl = hpioctl; ifp->if_reset = hpreset; ifp->if_watchdog = 0; + IFQ_SET_READY(&ifp->if_snd); if_attach(ifp); #if NBPFILTER > 0 @@ -545,7 +546,7 @@ hpstart(ifp) if ((ns->ns_if.if_flags & IFF_RUNNING) == 0) return; - IF_DEQUEUE(&ns->ns_if.if_snd, m); + IFQ_DEQUEUE(&ns->ns_if.if_snd, m); if (m == 0) return; diff --git a/sys/dev/isa/if_iy.c b/sys/dev/isa/if_iy.c index 04f8f93e2fa..53ef53c18be 100644 --- a/sys/dev/isa/if_iy.c +++ b/sys/dev/isa/if_iy.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_iy.c,v 1.57 2002/01/07 21:47:08 thorpej Exp $ */ +/* $NetBSD: if_iy.c,v 1.58 2002/03/05 04:12:58 itojun Exp $ */ /* #define IYDEBUG */ /* #define IYMEMDEBUG */ @@ -46,7 +46,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_iy.c,v 1.57 2002/01/07 21:47:08 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_iy.c,v 1.58 2002/03/05 04:12:58 itojun Exp $"); #include "opt_inet.h" #include "opt_ns.h" @@ -700,7 +700,7 @@ struct ifnet *ifp; if (len + pad > ETHER_MAX_LEN) { /* packet is obviously too large: toss it */ ++ifp->if_oerrors; - IF_DEQUEUE(&ifp->if_snd, m0); + IFQ_DEQUEUE(&ifp->if_snd, m0); m_freem(m0); continue; } diff --git a/sys/dev/ofw/ofnet.c b/sys/dev/ofw/ofnet.c index 8fc0a91b117..a6b9aac99c1 100644 --- a/sys/dev/ofw/ofnet.c +++ b/sys/dev/ofw/ofnet.c @@ -1,4 +1,4 @@ -/* $NetBSD: ofnet.c,v 1.23 2001/11/13 07:26:28 lukem Exp $ */ +/* $NetBSD: ofnet.c,v 1.24 2002/03/05 04:12:58 itojun Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ofnet.c,v 1.23 2001/11/13 07:26:28 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofnet.c,v 1.24 2002/03/05 04:12:58 itojun Exp $"); #include "ofnet.h" #include "opt_inet.h" @@ -162,6 +162,7 @@ ofnet_attach(struct device *parent, struct device *self, void *aux) ifp->if_ioctl = ofnet_ioctl; ifp->if_watchdog = ofnet_watchdog; ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_NOTRAILERS; + IFQ_SET_READY(&ifp->if_snd); if_attach(ifp); ether_ifattach(ifp, myaddr); @@ -327,7 +328,7 @@ ofnet_start(struct ifnet *ifp) ofnet_read(of); /* Now get the first packet on the queue */ - IF_DEQUEUE(&ifp->if_snd, m0); + IFQ_DEQUEUE(&ifp->if_snd, m0); if (!m0) return; diff --git a/sys/dev/pci/if_tl.c b/sys/dev/pci/if_tl.c index b5a3e4db742..79ae64841ae 100644 --- a/sys/dev/pci/if_tl.c +++ b/sys/dev/pci/if_tl.c @@ -1,6 +1,4 @@ -/* $NetBSD: if_tl.c,v 1.49 2002/02/28 00:52:21 christos Exp $ */ - -/* XXX ALTQ XXX */ +/* $NetBSD: if_tl.c,v 1.50 2002/03/05 04:12:59 itojun Exp $ */ /* * Copyright (c) 1997 Manuel Bouyer. All rights reserved. @@ -38,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_tl.c,v 1.49 2002/02/28 00:52:21 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_tl.c,v 1.50 2002/03/05 04:12:59 itojun Exp $"); #undef TLDEBUG #define TL_PRIV_STATS @@ -453,6 +451,7 @@ tl_pci_attach(parent, self, aux) ifp->if_init = tl_init; ifp->if_stop = tl_stop; ifp->if_timer = 0; + IFQ_SET_READY(&ifp->if_snd); if_attach(ifp); ether_ifattach(&(sc)->tl_if, (sc)->tl_enaddr); } @@ -1124,7 +1123,7 @@ tl_intr(v) TL_HR_WRITE(sc, TL_HOST_CMD, HOST_CMD_GO); } sc->tl_if.if_timer = 0; - if (sc->tl_if.if_snd.ifq_head != NULL) + if (IFQ_IS_EMPTY(&sc->tl_if.if_snd) == 0) tl_ifstart(&sc->tl_if); return 1; } @@ -1134,7 +1133,7 @@ tl_intr(v) } #endif sc->tl_if.if_timer = 0; - if (sc->tl_if.if_snd.ifq_head != NULL) + if (IFQ_IS_EMPTY(&sc->tl_if.if_snd) == 0) tl_ifstart(&sc->tl_if); break; case TL_INTR_Stat: @@ -1234,7 +1233,7 @@ txloop: return; } /* Grab a paquet for output */ - IF_DEQUEUE(&ifp->if_snd, mb_head); + IFQ_DEQUEUE(&ifp->if_snd, mb_head); if (mb_head == NULL) { #ifdef TLDEBUG_TX printf("tl_ifstart: nothing to send\n"); diff --git a/sys/dev/qbus/if_dmc.c b/sys/dev/qbus/if_dmc.c index 1d41a5ebab5..865e9d04e0e 100644 --- a/sys/dev/qbus/if_dmc.c +++ b/sys/dev/qbus/if_dmc.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_dmc.c,v 1.2 2001/11/13 07:11:24 lukem Exp $ */ +/* $NetBSD: if_dmc.c,v 1.3 2002/03/05 04:12:59 itojun Exp $ */ /* * Copyright (c) 1982, 1986 Regents of the University of California. * All rights reserved. @@ -45,7 +45,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_dmc.c,v 1.2 2001/11/13 07:11:24 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_dmc.c,v 1.3 2002/03/05 04:12:59 itojun Exp $"); #undef DMCDEBUG /* for base table dump on fatal error */ @@ -269,6 +269,7 @@ dmcattach(struct device *parent, struct device *self, void *aux) sc->sc_if.if_watchdog = dmctimeout; sc->sc_if.if_flags = IFF_POINTOPOINT; sc->sc_if.if_softc = sc; + IFQ_SET_READY(&sc->sc_if.if_snd); uba_intr_establish(ua->ua_icookie, ua->ua_cvec, dmcrint, sc, &sc->sc_rintrcnt); @@ -438,7 +439,7 @@ dmcstart(struct ifnet *ifp) for (rp = &sc->sc_xbufs[0]; rp < &sc->sc_xbufs[NXMT]; rp++ ) { /* find an available buffer */ if ((rp->flags & DBUF_DMCS) == 0) { - IF_DEQUEUE(&sc->sc_if.if_snd, m); + IFQ_DEQUEUE(&sc->sc_if.if_snd, m); if (m == 0) return; /* mark it dmcs */ @@ -773,12 +774,15 @@ dmcoutput(struct ifnet *ifp, struct mbuf *m0, struct sockaddr *dst, int type, error, s; struct mbuf *m = m0; struct dmc_header *dh; + ALTQ_DECL(struct altq_pktattr pktattr;) if ((ifp->if_flags & IFF_UP) == 0) { error = ENETDOWN; goto bad; } + IFQ_CLASSIFY(&ifp->if_snd, m, dst->sa_family, &pktattr); + switch (dst->sa_family) { #ifdef INET case AF_INET: @@ -815,13 +819,12 @@ dmcoutput(struct ifnet *ifp, struct mbuf *m0, struct sockaddr *dst, * not yet active. */ s = splnet(); - if (IF_QFULL(&ifp->if_snd)) { - IF_DROP(&ifp->if_snd); - m_freem(m); + IFQ_ENQUEUE(&ifp->if_snd, m, &pktattr, error); + if (error) { + /* mbuf is already freed */ splx(s); - return (ENOBUFS); + return (error); } - IF_ENQUEUE(&ifp->if_snd, m); dmcstart(ifp); splx(s); return (0); diff --git a/sys/dev/qbus/if_il.c b/sys/dev/qbus/if_il.c index a781dad60a8..136bd2b0e3a 100644 --- a/sys/dev/qbus/if_il.c +++ b/sys/dev/qbus/if_il.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_il.c,v 1.3 2001/12/06 10:28:40 msaitoh Exp $ */ +/* $NetBSD: if_il.c,v 1.4 2002/03/05 04:12:59 itojun Exp $ */ /* * Copyright (c) 1982, 1986 Regents of the University of California. * All rights reserved. @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_il.c,v 1.3 2001/12/06 10:28:40 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_il.c,v 1.4 2002/03/05 04:12:59 itojun Exp $"); #include "opt_inet.h" #include "opt_ns.h" @@ -216,6 +216,7 @@ ilattach(struct device *parent, struct device *self, void *aux) ifp->if_ioctl = ether_ioctl; ifp->if_start = ilstart; ifp->if_watchdog = ilwatch; + IFQ_SET_READY(&ifp->if_snd); if_attach(ifp); ether_ifattach(ifp, sc->sc_stats.ils_addr); @@ -415,7 +416,7 @@ ilstart(struct ifnet *ifp) struct mbuf *m; short csr; - IF_DEQUEUE(&ifp->if_snd, m); + IFQ_DEQUEUE(&ifp->if_snd, m); if (m == 0) { if ((sc->sc_flags & ILF_STATPENDING) == 0) return; diff --git a/sys/dev/usb/if_upl.c b/sys/dev/usb/if_upl.c index 143d2c8ea6a..fb8409f7efd 100644 --- a/sys/dev/usb/if_upl.c +++ b/sys/dev/usb/if_upl.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_upl.c,v 1.16 2001/11/13 06:24:54 lukem Exp $ */ +/* $NetBSD: if_upl.c,v 1.17 2002/03/05 04:12:59 itojun Exp $ */ /* * Copyright (c) 2000 The NetBSD Foundation, Inc. * All rights reserved. @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_upl.c,v 1.16 2001/11/13 06:24:54 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_upl.c,v 1.17 2002/03/05 04:12:59 itojun Exp $"); #include "opt_inet.h" #include "opt_ns.h" @@ -317,6 +317,7 @@ USB_ATTACH(upl) ifp->if_input = upl_input; ifp->if_baudrate = 12000000; ifp->if_dlt = DLT_RAW; + IFQ_SET_READY(&ifp->if_snd); /* Attach the interface. */ if_attach(ifp); @@ -634,7 +635,7 @@ upl_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status) m_freem(c->upl_mbuf); c->upl_mbuf = NULL; - if (ifp->if_snd.ifq_head != NULL) + if (IFQ_IS_EMPTY(&ifp->if_snd) == 0) upl_start(ifp); splx(s); @@ -693,16 +694,17 @@ upl_start(struct ifnet *ifp) if (ifp->if_flags & IFF_OACTIVE) return; - IF_DEQUEUE(&ifp->if_snd, m_head); + IFQ_POLL(&ifp->if_snd, m_head); if (m_head == NULL) return; if (upl_send(sc, m_head, 0)) { - IF_PREPEND(&ifp->if_snd, m_head); ifp->if_flags |= IFF_OACTIVE; return; } + IFQ_DEQUEUE(&ifp->if_snd, m_head); + #if NBPFILTER > 0 /* * If there's a BPF listener, bounce a copy of this frame @@ -940,7 +942,7 @@ upl_watchdog(struct ifnet *ifp) upl_stop(sc); upl_init(sc); - if (ifp->if_snd.ifq_head != NULL) + if (IFQ_IS_EMPTY(&ifp->if_snd) == 0) upl_start(ifp); } @@ -1034,24 +1036,32 @@ Static int upl_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, struct rtentry *rt0) { - int s; + int s, len, error; + ALTQ_DECL(struct altq_pktattr pktattr;) DPRINTFN(10,("%s: %s: enter\n", USBDEVNAME(((struct upl_softc *)ifp->if_softc)->sc_dev), __FUNCTION__)); + /* + * if the queueing discipline needs packet classification, + * do it now. + */ + IFQ_CLASSIFY(&ifp->if_snd, m, dst->sa_family, &pktattr); + + len = m->m_pkthdr.len; s = splnet(); /* * Queue message on interface, and start output if interface * not yet active. */ - if (IF_QFULL(&ifp->if_snd)) { - IF_DROP(&ifp->if_snd); + IFQ_ENQUEUE(&ifp->if_snd, m, &pktattr, error); + if (error) { + /* mbuf is already freed */ splx(s); - return (ENOBUFS); + return (error); } - ifp->if_obytes += m->m_pkthdr.len; - IF_ENQUEUE(&ifp->if_snd, m); + ifp->if_obytes += len; if ((ifp->if_flags & IFF_OACTIVE) == 0) (*ifp->if_start)(ifp); splx(s); |
