version 1.1, 2001/05/06 17:36:04 |
version 1.1.4.2, 2002/03/16 16:01:26 |
|
|
* New York University |
* New York University |
*/ |
*/ |
|
|
|
#include <sys/cdefs.h> |
|
__KERNEL_RCSID(0, "$NetBSD$"); |
|
|
#undef DMCDEBUG /* for base table dump on fatal error */ |
#undef DMCDEBUG /* for base table dump on fatal error */ |
|
|
#include "opt_inet.h" |
#include "opt_inet.h" |
Line 266 dmcattach(struct device *parent, struct |
|
Line 269 dmcattach(struct device *parent, struct |
|
sc->sc_if.if_watchdog = dmctimeout; |
sc->sc_if.if_watchdog = dmctimeout; |
sc->sc_if.if_flags = IFF_POINTOPOINT; |
sc->sc_if.if_flags = IFF_POINTOPOINT; |
sc->sc_if.if_softc = sc; |
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, |
uba_intr_establish(ua->ua_icookie, ua->ua_cvec, dmcrint, sc, |
&sc->sc_rintrcnt); |
&sc->sc_rintrcnt); |
Line 435 dmcstart(struct ifnet *ifp) |
|
Line 439 dmcstart(struct ifnet *ifp) |
|
for (rp = &sc->sc_xbufs[0]; rp < &sc->sc_xbufs[NXMT]; rp++ ) { |
for (rp = &sc->sc_xbufs[0]; rp < &sc->sc_xbufs[NXMT]; rp++ ) { |
/* find an available buffer */ |
/* find an available buffer */ |
if ((rp->flags & DBUF_DMCS) == 0) { |
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) |
if (m == 0) |
return; |
return; |
/* mark it dmcs */ |
/* mark it dmcs */ |
Line 770 dmcoutput(struct ifnet *ifp, struct mbuf |
|
Line 774 dmcoutput(struct ifnet *ifp, struct mbuf |
|
int type, error, s; |
int type, error, s; |
struct mbuf *m = m0; |
struct mbuf *m = m0; |
struct dmc_header *dh; |
struct dmc_header *dh; |
|
ALTQ_DECL(struct altq_pktattr pktattr;) |
|
|
if ((ifp->if_flags & IFF_UP) == 0) { |
if ((ifp->if_flags & IFF_UP) == 0) { |
error = ENETDOWN; |
error = ENETDOWN; |
goto bad; |
goto bad; |
} |
} |
|
|
|
IFQ_CLASSIFY(&ifp->if_snd, m, dst->sa_family, &pktattr); |
|
|
switch (dst->sa_family) { |
switch (dst->sa_family) { |
#ifdef INET |
#ifdef INET |
case AF_INET: |
case AF_INET: |
Line 812 dmcoutput(struct ifnet *ifp, struct mbuf |
|
Line 819 dmcoutput(struct ifnet *ifp, struct mbuf |
|
* not yet active. |
* not yet active. |
*/ |
*/ |
s = splnet(); |
s = splnet(); |
if (IF_QFULL(&ifp->if_snd)) { |
IFQ_ENQUEUE(&ifp->if_snd, m, &pktattr, error); |
IF_DROP(&ifp->if_snd); |
if (error) { |
m_freem(m); |
/* mbuf is already freed */ |
splx(s); |
splx(s); |
return (ENOBUFS); |
return (error); |
} |
} |
IF_ENQUEUE(&ifp->if_snd, m); |
|
dmcstart(ifp); |
dmcstart(ifp); |
splx(s); |
splx(s); |
return (0); |
return (0); |