summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authoritojun <itojun@NetBSD.org>2002-03-05 04:12:57 +0000
committeritojun <itojun@NetBSD.org>2002-03-05 04:12:57 +0000
commitac36f7cb2c4f72b86e6d2b681ac6e29f4cfaeab9 (patch)
tree445a5cc94468e541a8b928a5ad54928dc33b1d22 /sys/dev
parent69881cf6b8dc615ac34107b2f982835e042159e3 (diff)
bring in latest ALTQ from kjc. ALTQify some of the drivers.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/hd64570.c7
-rw-r--r--sys/dev/ic/midway.c5
-rw-r--r--sys/dev/ic/pdq_ifsubr.c5
-rw-r--r--sys/dev/ieee1394/if_fw.c15
-rw-r--r--sys/dev/isa/if_hp.c7
-rw-r--r--sys/dev/isa/if_iy.c6
-rw-r--r--sys/dev/ofw/ofnet.c7
-rw-r--r--sys/dev/pci/if_tl.c13
-rw-r--r--sys/dev/qbus/if_dmc.c19
-rw-r--r--sys/dev/qbus/if_il.c7
-rw-r--r--sys/dev/usb/if_upl.c34
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);