Merge linux_ioctl.c:1.128 svr4_sockio.c:1.17 altq_cbq.c:1.3 if_oltr.c:1.38
if_pflog.c:1.14 if_pfsync.c:1.21 if_an.c:1.70 if_ar.c:1.72 if_arl.c:1.11 amrr.c:1.10 onoe.c:1.10 if_ath.c:1.101 awi.c:1.41 if_bfe.c:1.27 if_bge.c:1.93 if_cm_isa.c:1.7 smc90cx6.c:1.16 if_cnw.c:1.20 if_cp.c:1.25 if_cs.c:1.42 if_ct.c:1.26 if_cx.c:1.46 if_ed.c:1.256 if_em.c:1.68 if_en_pci.c:1.37 midway.c:1.66 if_ep.c:1.143 if_ex.c:1.58 if_fatm.c:1.20 if_fe.c:1.93 if_fwe.c:1.38 if_fwip.c:1.8 if_fxp.c:1.244 if_gem.c:1.33 if_hatm.c:1.25 if_hatm_intr.c:1.20 if_hatm_ioctl.c:1.13 if_hatm_rx.c:1.10 if_hatm_tx.c:1.14 if_hme.c:1.39 if_ie.c:1.104 if_ndis.c:1.101 if_ic.c:1.24 if_ipw.c:1.10 if_iwi.c:1.10 if_ixgb.c:1.13 if_lge.c:1.41 if_lnc.c:1.113 if_my.c:1.31 if_nge.c:1.77 if_nve.c:1.10 if_owi.c:1.12 if_patm.c:1.9 if_patm_intr.c:1.6 if_patm_ioctl.c:1.10 if_patm_tx.c:1.10 pdq_ifsubr.c:1.28 if_plip.c:1.38 if_ral.c:1.12 if_ral_pci.c:1.2 if_ray.c:1.81 if_rayvar.h:1.22 if_re.c:1.49 if_sbni.c:1.21 if_sbsh.c:1.14 if_sn.c:1.48 dp83932.c:1.21 if_snc_pccard.c:1.9 if_sr.c:1.70 if_tx.c:1.91 if_txp.c:1.33 if_aue.c:1.92 if_axe.c:1.32 if_cdce.c:1.8 if_cue.c:1.59 if_kue.c:1.66 if_rue.c:1.23 if_udav.c:1.16 if_ural.c:1.12 if_vge.c:1.16 if_vx.c:1.58 if_wi.c:1.185 if_wi_pci.c:1.26 if_wl.c:1.68 if_xe.c:1.60 if_xe_pccard.c:1.30 if_el.c:1.68 i4b_ipr.c:1.35 i4b_isppp.c:1.31 kern_poll.c:1.20 bridge.c:1.94 bridgestp.c:1.4 if_arcsubr.c:1.27 if_atm.h:1.24 if_atmsubr.c:1.40 if_bridge.c:1.16 if_ef.c:1.35 if_ethersubr.c:1.196 if_faith.c:1.37 if_fddisubr.c:1.100 if_fwsubr.c:1.14 if_gif.c:1.54 if_gre.c:1.34 if_iso88025subr.c:1.70 if_loop.c:1.107 if_ppp.c:1.106 if_spppsubr.c:1.121 if_tap.c:1.57 if_tun.c:1.154 if_vlan.c:1.80 ppp_tty.c:1.67 ieee80211_ioctl.c:1.32 atm_if.c:1.31 ng_eiface.c:1.33 ng_ether.c:1.50 ng_fec.c:1.19 ng_iface.c:1.44 ng_sppp.c:1.9 ip_carp.c:1.30 ip_fastfwd.c:1.30 in6.c:1.53 nd6_nbr.c:1.31 natm.c:1.40 if_dc.c:1.162 if_de.c:1.168 if_pcn.c:1.72 if_rl.c:1.154 if_sf.c:1.84 if_sis.c:1.135 if_sk.c:1.108 if_ste.c:1.86 if_ti.c:1.109 if_tl.c:1.101 if_vr.c:1.106 if_wb.c:1.81 if_xl.c:1.194 from HEAD to RELENG_6: Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and IFF_DRV_RUNNING, as well as the move from ifnet.if_flags to ifnet.if_drv_flags. Device drivers are now responsible for synchronizing access to these flags, as they are in if_drv_flags. This helps prevent races between the network stack and device driver in maintaining the interface flags field. Many __FreeBSD__ and __FreeBSD_version checks maintained and continued; some less so. Reviewed by: pjd, bz Approved by: re (scottl)
This commit is contained in:
parent
8f8fa61d9b
commit
e13b2df854
sys
compat
contrib
dev
an
ar
arl
ath
awi
bfe
bge
cm
cnw
cp
cs
ctau
cx
ed
em
en
ep
ex
fatm
fe
firewire
fxp
gem
hatm
hme
ie
if_ndis
iicbus
ipw
iwi
ixgb
lge
lnc
my
nge
nve
owi
patm
pdq
ppbus
ral
ray
re
sbni
sbsh
sn
snc
sr
tx
txp
usb
vge
vx
wi
wl
xe
i386/isa
i4b/driver
kern
net
@ -2212,9 +2212,9 @@ linux_gifflags(struct thread *td, struct ifnet *ifp, struct l_ifreq *ifr)
|
||||
{
|
||||
l_short flags;
|
||||
|
||||
flags = ifp->if_flags & 0xffff;
|
||||
flags = (ifp->if_flags | ifp->if_drv_flags) & 0xffff;
|
||||
/* these flags have no Linux equivalent */
|
||||
flags &= ~(IFF_SMART|IFF_OACTIVE|IFF_SIMPLEX|
|
||||
flags &= ~(IFF_SMART|IFF_DRV_OACTIVE|IFF_SIMPLEX|
|
||||
IFF_LINK0|IFF_LINK1|IFF_LINK2);
|
||||
/* Linux' multicast flag is in a different bit */
|
||||
if (flags & IFF_MULTICAST) {
|
||||
|
@ -62,7 +62,8 @@ bsd_to_svr4_flags(bf)
|
||||
#if defined(IFF_NOTRAILERS)
|
||||
bsd_to_svr4_flag(FF_NOTRAILERS);
|
||||
#endif
|
||||
bsd_to_svr4_flag(FF_RUNNING);
|
||||
if (bf & IFF_DRV_RUNNING)
|
||||
sf |= SVR4_IFF_RUNNING;
|
||||
bsd_to_svr4_flag(FF_NOARP);
|
||||
bsd_to_svr4_flag(FF_PROMISC);
|
||||
bsd_to_svr4_flag(FF_ALLMULTI);
|
||||
|
@ -598,7 +598,7 @@ cbqrestart(struct ifaltq *ifq)
|
||||
|
||||
ifp = ifq->altq_ifp;
|
||||
if (ifp->if_start &&
|
||||
cbqp->cbq_qlen > 0 && (ifp->if_flags & IFF_OACTIVE) == 0) {
|
||||
cbqp->cbq_qlen > 0 && (ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0) {
|
||||
IFQ_UNLOCK(ifq);
|
||||
(*ifp->if_start)(ifp);
|
||||
IFQ_LOCK(ifq);
|
||||
|
@ -230,7 +230,7 @@ oltr_start(struct ifnet *ifp)
|
||||
/*
|
||||
* Check to see if output is already active
|
||||
*/
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
|
||||
outloop:
|
||||
@ -240,7 +240,7 @@ outloop:
|
||||
*/
|
||||
if (sc->tx_avail <= 0) {
|
||||
printf("oltr%d: tx queue full\n", sc->unit);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -298,7 +298,7 @@ bad:
|
||||
nobuffers:
|
||||
|
||||
printf("oltr%d: queue full\n", sc->unit);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
ifp->if_oerrors++;
|
||||
/*m_freem(m0);*/
|
||||
sc->restart = m0;
|
||||
@ -323,7 +323,8 @@ oltr_stop(struct oltr_softc *sc)
|
||||
|
||||
/*printf("oltr%d: oltr_stop\n", sc->unit);*/
|
||||
|
||||
ifp->if_flags &= ~(IFF_UP | IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_flags &= ~IFF_UP;
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
TRlldClose(sc->TRlldAdapter, 0);
|
||||
sc->state = OL_CLOSING;
|
||||
}
|
||||
@ -539,8 +540,8 @@ oltr_init(void * xsc)
|
||||
|
||||
sc->restart = NULL;
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Set up adapter statistics poll
|
||||
@ -577,7 +578,7 @@ oltr_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
oltr_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
oltr_close(sc);
|
||||
}
|
||||
}
|
||||
@ -902,9 +903,9 @@ DriverTransmitFrameCompleted(void *DriverHandle, void *FrameHandle, int Transmit
|
||||
|
||||
sc->tx_avail += frame->FragmentCount;
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE) {
|
||||
printf("oltr%d: queue restart\n", sc->unit);
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
oltr_start(ifp);
|
||||
}
|
||||
|
||||
|
@ -272,9 +272,9 @@ pflogioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFDSTADDR:
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP)
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
else
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
break;
|
||||
default:
|
||||
return (EINVAL);
|
||||
|
@ -990,9 +990,9 @@ pfsyncioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFDSTADDR:
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP)
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
else
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
break;
|
||||
case SIOCSIFMTU:
|
||||
if (ifr->ifr_mtu < PFSYNC_MINMTU)
|
||||
|
@ -834,7 +834,7 @@ an_detach(device_t dev)
|
||||
an_stop(sc);
|
||||
sc->an_gone = 1;
|
||||
ifmedia_removeall(&sc->an_ifmedia);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
AN_UNLOCK(sc);
|
||||
ether_ifdetach(ifp);
|
||||
if_free(ifp);
|
||||
@ -1118,7 +1118,7 @@ an_txeof(sc, status)
|
||||
ifp = sc->an_ifp;
|
||||
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
if (!sc->mpi350) {
|
||||
id = CSR_READ_2(sc, AN_TX_CMP_FID(sc->mpi350));
|
||||
@ -1180,7 +1180,7 @@ an_stats_update(xsc)
|
||||
sc->an_associated = 0;
|
||||
|
||||
/* Don't do this while we're transmitting */
|
||||
if (ifp->if_flags & IFF_OACTIVE) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE) {
|
||||
sc->an_stat_ch = timeout(an_stats_update, sc, hz);
|
||||
AN_UNLOCK(sc);
|
||||
return;
|
||||
@ -1951,18 +1951,18 @@ an_ioctl(ifp, command, data)
|
||||
switch (command) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->an_if_flags & IFF_PROMISC)) {
|
||||
an_promisc(sc, 1);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->an_if_flags & IFF_PROMISC) {
|
||||
an_promisc(sc, 0);
|
||||
} else
|
||||
an_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
an_stop(sc);
|
||||
}
|
||||
sc->an_if_flags = ifp->if_flags;
|
||||
@ -2544,7 +2544,7 @@ an_init(xsc)
|
||||
return;
|
||||
}
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
an_stop(sc);
|
||||
|
||||
sc->an_associated = 0;
|
||||
@ -2631,8 +2631,8 @@ an_init(xsc)
|
||||
/* enable interrupts */
|
||||
CSR_WRITE_2(sc, AN_INT_EN(sc->mpi350), AN_INTRS(sc->mpi350));
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
sc->an_stat_ch = timeout(an_stats_update, sc, hz);
|
||||
AN_UNLOCK(sc);
|
||||
@ -2658,7 +2658,7 @@ an_start(ifp)
|
||||
if (sc->an_gone)
|
||||
return;
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
|
||||
if (!sc->an_associated)
|
||||
@ -2819,7 +2819,7 @@ an_start(ifp)
|
||||
}
|
||||
|
||||
if (m0 != NULL)
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
sc->an_rdata.an_tx_prod = idx;
|
||||
|
||||
@ -2851,7 +2851,7 @@ an_stop(sc)
|
||||
|
||||
untimeout(an_stats_update, sc, sc->an_stat_ch);
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING|IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING|IFF_DRV_OACTIVE);
|
||||
|
||||
if (sc->an_flash_buffer) {
|
||||
free(sc->an_flash_buffer, M_DEVBUF);
|
||||
|
@ -607,9 +607,9 @@ ar_xmit(struct ar_softc *sc)
|
||||
* This function only place the data in the oncard buffers. It does not
|
||||
* start the transmition. ar_xmit() does that.
|
||||
*
|
||||
* Transmitter idle state is indicated by the IFF_OACTIVE flag. The function
|
||||
* that clears that should ensure that the transmitter and its DMA is
|
||||
* in a "good" idle state.
|
||||
* Transmitter idle state is indicated by the IFF_DRV_OACTIVE flag. The
|
||||
* function that clears that should ensure that the transmitter and its
|
||||
* DMA is in a "good" idle state.
|
||||
*/
|
||||
#ifndef NETGRAPH
|
||||
static void
|
||||
@ -628,7 +628,7 @@ arstart(struct ar_softc *sc)
|
||||
struct buf_block *blkp;
|
||||
|
||||
#ifndef NETGRAPH
|
||||
if(!(ifp->if_flags & IFF_RUNNING))
|
||||
if(!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
#else /* NETGRAPH */
|
||||
/* XXX */
|
||||
@ -641,9 +641,9 @@ top_arstart:
|
||||
*/
|
||||
if(sc->txb_inuse == AR_TX_BLOCKS) {
|
||||
#ifndef NETGRAPH
|
||||
ifp->if_flags |= IFF_OACTIVE; /* yes, mark active */
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE; /* yes, mark active */
|
||||
#else /* NETGRAPH */
|
||||
/*XXX*/ /*ifp->if_flags |= IFF_OACTIVE;*/ /* yes, mark active */
|
||||
/*XXX*/ /*ifp->if_drv_flags |= IFF_DRV_OACTIVE;*/ /* yes, mark active */
|
||||
#endif /* NETGRAPH */
|
||||
return;
|
||||
}
|
||||
@ -775,7 +775,7 @@ arioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
|
||||
TRC(if_printf(ifp, "arioctl.\n");)
|
||||
|
||||
was_up = ifp->if_flags & IFF_RUNNING;
|
||||
was_up = ifp->if_drv_flags & IFF_DRV_RUNNING;
|
||||
|
||||
error = sppp_ioctl(ifp, cmd, data);
|
||||
TRC(if_printf(ifp, "ioctl: ifsppp.pp_flags = %x, if_flags %x.\n",
|
||||
@ -790,7 +790,7 @@ arioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
(cmd == SIOCSIFFLAGS) ? "SIOCSIFFLAGS" : "SIOCSIFADDR");)
|
||||
|
||||
s = splimp();
|
||||
should_be_up = ifp->if_flags & IFF_RUNNING;
|
||||
should_be_up = ifp->if_drv_flags & IFF_DRV_RUNNING;
|
||||
|
||||
if(!was_up && should_be_up) {
|
||||
/* Interface should be up -- start it. */
|
||||
@ -824,7 +824,7 @@ arwatchdog(struct ar_softc *sc)
|
||||
msci_channel *msci = &sc->sca->msci[sc->scachan];
|
||||
|
||||
#ifndef NETGRAPH
|
||||
if(!(ifp->if_flags & IFF_RUNNING))
|
||||
if(!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
#endif /* NETGRAPH */
|
||||
|
||||
@ -848,9 +848,9 @@ arwatchdog(struct ar_softc *sc)
|
||||
|
||||
sc->xmit_busy = 0;
|
||||
#ifndef NETGRAPH
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
#else /* NETGRAPH */
|
||||
/* XXX ifp->if_flags &= ~IFF_OACTIVE; */
|
||||
/* XXX ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; */
|
||||
#endif /* NETGRAPH */
|
||||
|
||||
if(sc->txb_inuse && --sc->txb_inuse)
|
||||
@ -1853,17 +1853,17 @@ ar_dmac_intr(struct ar_hardc *hc, int scano, u_char isr1)
|
||||
/*
|
||||
* This should be the most common case.
|
||||
*
|
||||
* Clear the IFF_OACTIVE flag.
|
||||
* Clear the IFF_DRV_OACTIVE flag.
|
||||
*
|
||||
* Call arstart to start a new transmit if
|
||||
* there is data to transmit.
|
||||
*/
|
||||
sc->xmit_busy = 0;
|
||||
#ifndef NETGRAPH
|
||||
SC2IFP(sc)->if_flags &= ~IFF_OACTIVE;
|
||||
SC2IFP(sc)->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
SC2IFP(sc)->if_timer = 0;
|
||||
#else /* NETGRAPH */
|
||||
/* XXX SC2IFP(sc)->if_flags &= ~IFF_OACTIVE; */
|
||||
/* XXX SC2IFP(sc)->if_drv_flags &= ~IFF_DRV_OACTIVE; */
|
||||
sc->out_dog = 0; /* XXX */
|
||||
#endif /* NETGRAPH */
|
||||
|
||||
|
@ -456,10 +456,10 @@ arl_ioctl(ifp, cmd, data)
|
||||
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
arl_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
arl_stop(sc);
|
||||
}
|
||||
break;
|
||||
@ -694,7 +694,7 @@ arl_waitreg(ifp)
|
||||
|
||||
D(("wait reg\n"));
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
if (ARL_CHECKREG(sc)) {
|
||||
/* wait registration */
|
||||
D(("wait registration\n"));
|
||||
@ -718,7 +718,7 @@ arl_watchdog(ifp)
|
||||
{
|
||||
struct arl_softc *sc = ifp->if_softc;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
|
||||
D(("device timeout\n"));
|
||||
@ -753,8 +753,8 @@ arl_init(xsc)
|
||||
|
||||
/* set flags */
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
arl_start(ifp);
|
||||
|
||||
@ -826,7 +826,7 @@ arl_start(ifp)
|
||||
D(("start\n"));
|
||||
|
||||
/* Don't do anything if output is active */
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
|
||||
/* Dequeue the next datagram */
|
||||
@ -834,7 +834,7 @@ arl_start(ifp)
|
||||
|
||||
/* If there's nothing to send, return. */
|
||||
if (m0 != NULL) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
/* Copy the datagram to the buffer. */
|
||||
sc->tx_len = 0;
|
||||
@ -881,7 +881,7 @@ arl_stop(sc)
|
||||
ifp = sc->arl_ifp;
|
||||
|
||||
ifp->if_timer = 0; /* disable timer */
|
||||
ifp->if_flags &= ~(IFF_RUNNING|IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING|IFF_DRV_OACTIVE);
|
||||
/* arl_hwreset(unit); */
|
||||
sc->rx_len = 0;
|
||||
sc->tx_len = 0;
|
||||
@ -1064,7 +1064,7 @@ arl_intr(arg)
|
||||
if (ar->txStatusVector != 1)
|
||||
sc->arl_ifp->if_collisions++;
|
||||
ifp->if_timer = 0; /* disable timer */
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
arl_start(ifp);
|
||||
ar->txStatusVector = 0;
|
||||
#ifdef ARLCACHE
|
||||
|
@ -464,7 +464,7 @@ ath_ratectl(void *arg)
|
||||
struct ieee80211com *ic = &sc->sc_ic;
|
||||
int interval;
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
sc->sc_stats.ast_rate_calls++;
|
||||
|
||||
if (ic->ic_opmode == IEEE80211_M_STA)
|
||||
|
@ -445,7 +445,7 @@ ath_ratectl(void *arg)
|
||||
struct ieee80211com *ic = &sc->sc_ic;
|
||||
int interval;
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
sc->sc_stats.ast_rate_calls++;
|
||||
|
||||
if (ic->ic_opmode == IEEE80211_M_STA)
|
||||
|
@ -651,7 +651,7 @@ ath_resume(struct ath_softc *sc)
|
||||
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
ath_init(sc);
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ath_start(ifp);
|
||||
}
|
||||
if (sc->sc_softled) {
|
||||
@ -692,7 +692,8 @@ ath_intr(void *arg)
|
||||
}
|
||||
if (!ath_hal_intrpend(ah)) /* shared irq, not for us */
|
||||
return;
|
||||
if ((ifp->if_flags & (IFF_RUNNING|IFF_UP)) != (IFF_RUNNING|IFF_UP)) {
|
||||
if (!((ifp->if_flags & IFF_UP) && (ifp->if_drv_flags &
|
||||
IFF_DRV_RUNNING))) {
|
||||
DPRINTF(sc, ATH_DEBUG_ANY, "%s: if_flags 0x%x\n",
|
||||
__func__, ifp->if_flags);
|
||||
ath_hal_getisr(ah, &status); /* clear ISR */
|
||||
@ -907,7 +908,7 @@ ath_init(void *arg)
|
||||
sc->sc_imask |= HAL_INT_MIB;
|
||||
ath_hal_intrset(ah, sc->sc_imask);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ic->ic_state = IEEE80211_S_INIT;
|
||||
|
||||
/*
|
||||
@ -938,7 +939,7 @@ ath_stop_locked(struct ifnet *ifp)
|
||||
__func__, sc->sc_invalid, ifp->if_flags);
|
||||
|
||||
ATH_LOCK_ASSERT(sc);
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
/*
|
||||
* Shutdown the hardware and driver:
|
||||
* reset 802.11 state machine
|
||||
@ -955,7 +956,7 @@ ath_stop_locked(struct ifnet *ifp)
|
||||
* hardware is gone (invalid).
|
||||
*/
|
||||
ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
ifp->if_timer = 0;
|
||||
if (!sc->sc_invalid) {
|
||||
if (sc->sc_softled) {
|
||||
@ -1060,7 +1061,7 @@ ath_start(struct ifnet *ifp)
|
||||
struct ieee80211_frame *wh;
|
||||
struct ether_header *eh;
|
||||
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0 || sc->sc_invalid)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0 || sc->sc_invalid)
|
||||
return;
|
||||
for (;;) {
|
||||
/*
|
||||
@ -1075,7 +1076,7 @@ ath_start(struct ifnet *ifp)
|
||||
DPRINTF(sc, ATH_DEBUG_ANY, "%s: out of xmit buffers\n",
|
||||
__func__);
|
||||
sc->sc_stats.ast_tx_qstop++;
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
@ -1203,7 +1204,7 @@ static int
|
||||
ath_media_change(struct ifnet *ifp)
|
||||
{
|
||||
#define IS_UP(ifp) \
|
||||
((ifp->if_flags & (IFF_RUNNING|IFF_UP)) == (IFF_RUNNING|IFF_UP))
|
||||
((ifp->if_flags & IFF_UP) && (ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
int error;
|
||||
|
||||
error = ieee80211_media_change(ifp);
|
||||
@ -3749,7 +3750,7 @@ ath_tx_proc_q0(void *arg, int npending)
|
||||
|
||||
ath_tx_processq(sc, &sc->sc_txq[0]);
|
||||
ath_tx_processq(sc, sc->sc_cabq);
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
sc->sc_tx_timer = 0;
|
||||
|
||||
if (sc->sc_softled)
|
||||
@ -3777,7 +3778,7 @@ ath_tx_proc_q0123(void *arg, int npending)
|
||||
ath_tx_processq(sc, &sc->sc_txq[3]);
|
||||
ath_tx_processq(sc, sc->sc_cabq);
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
sc->sc_tx_timer = 0;
|
||||
|
||||
if (sc->sc_softled)
|
||||
@ -3804,7 +3805,7 @@ ath_tx_proc(void *arg, int npending)
|
||||
if (ATH_TXQ_SETUP(sc, i))
|
||||
ath_tx_processq(sc, &sc->sc_txq[i]);
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
sc->sc_tx_timer = 0;
|
||||
|
||||
if (sc->sc_softled)
|
||||
@ -3892,7 +3893,7 @@ ath_draintxq(struct ath_softc *sc)
|
||||
for (i = 0; i < HAL_NUM_TX_QUEUES; i++)
|
||||
if (ATH_TXQ_SETUP(sc, i))
|
||||
ath_tx_draintxq(sc, &sc->sc_txq[i]);
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
sc->sc_tx_timer = 0;
|
||||
}
|
||||
|
||||
@ -4591,7 +4592,7 @@ ath_watchdog(struct ifnet *ifp)
|
||||
struct ieee80211com *ic = &sc->sc_ic;
|
||||
|
||||
ifp->if_timer = 0;
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0 || sc->sc_invalid)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0 || sc->sc_invalid)
|
||||
return;
|
||||
if (sc->sc_tx_timer) {
|
||||
if (--sc->sc_tx_timer == 0) {
|
||||
@ -4670,7 +4671,7 @@ static int
|
||||
ath_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
{
|
||||
#define IS_RUNNING(ifp) \
|
||||
((ifp->if_flags & (IFF_RUNNING|IFF_UP)) == (IFF_RUNNING|IFF_UP))
|
||||
((ifp->if_flags & IFF_UP) && (ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
struct ath_softc *sc = ifp->if_softc;
|
||||
struct ieee80211com *ic = &sc->sc_ic;
|
||||
struct ifreq *ifr = (struct ifreq *)data;
|
||||
@ -4708,7 +4709,7 @@ ath_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
* the multicast address(es), just recalculate the
|
||||
* multicast filter for the card.
|
||||
*/
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ath_mode_init(sc);
|
||||
break;
|
||||
case SIOCGATHSTATS:
|
||||
|
@ -653,8 +653,8 @@ awi_init(struct ifnet *ifp)
|
||||
sc->sc_rxdoff = awi_read_4(sc, AWI_CA_IRX_DATA_DESC);
|
||||
sc->sc_rxmoff = awi_read_4(sc, AWI_CA_IRX_PS_DESC);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ic->ic_state = IEEE80211_S_INIT;
|
||||
|
||||
if (ic->ic_opmode == IEEE80211_M_AHDEMO ||
|
||||
@ -720,7 +720,7 @@ awi_stop(struct ifnet *ifp, int disable)
|
||||
awi_write_1(sc, AWI_CA_FTX_CF, 0);
|
||||
(void)awi_cmd(sc, AWI_CMD_FLUSH_TX, AWI_WAIT);
|
||||
}
|
||||
ifp->if_flags &= ~(IFF_RUNNING|IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING|IFF_DRV_OACTIVE);
|
||||
ifp->if_timer = 0;
|
||||
sc->sc_tx_timer = sc->sc_rx_timer = 0;
|
||||
if (sc->sc_rxpend != NULL) {
|
||||
@ -763,7 +763,7 @@ awi_start(struct ifnet *ifp)
|
||||
if (m0 != NULL) {
|
||||
len = m0->m_pkthdr.len;
|
||||
if (awi_next_txd(sc, len, &frame, &ntxd)) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
IF_DEQUEUE(&ic->ic_mgtq, m0);
|
||||
@ -790,7 +790,7 @@ awi_start(struct ifnet *ifp)
|
||||
IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN;
|
||||
}
|
||||
if (awi_next_txd(sc, len, &frame, &ntxd)) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
IFQ_DEQUEUE(&ifp->if_snd, m0);
|
||||
@ -1293,7 +1293,7 @@ awi_tx_int(struct awi_softc *sc)
|
||||
DPRINTF2(("awi_txint: txdone %d txnext %d txbase %d txend %d\n",
|
||||
sc->sc_txdone, sc->sc_txnext, sc->sc_txbase, sc->sc_txend));
|
||||
sc->sc_tx_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
awi_start(ifp);
|
||||
}
|
||||
|
||||
|
@ -1110,7 +1110,7 @@ bfe_txeof(struct bfe_softc *sc)
|
||||
if(i != sc->bfe_tx_cons) {
|
||||
/* we freed up some mbufs */
|
||||
sc->bfe_tx_cons = i;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
}
|
||||
if(sc->bfe_tx_cnt == 0)
|
||||
ifp->if_timer = 0;
|
||||
@ -1219,7 +1219,7 @@ bfe_intr(void *xsc)
|
||||
if(flag & BFE_RX_FLAG_ERRORS)
|
||||
ifp->if_ierrors++;
|
||||
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
bfe_init_locked(sc);
|
||||
}
|
||||
|
||||
@ -1232,7 +1232,8 @@ bfe_intr(void *xsc)
|
||||
bfe_txeof(sc);
|
||||
|
||||
/* We have packets pending, fire them out */
|
||||
if (ifp->if_flags & IFF_RUNNING && !IFQ_DRV_IS_EMPTY(&ifp->if_snd))
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
|
||||
bfe_start_locked(ifp);
|
||||
|
||||
BFE_UNLOCK(sc);
|
||||
@ -1354,7 +1355,7 @@ bfe_start_locked(struct ifnet *ifp)
|
||||
if (!sc->bfe_link && ifp->if_snd.ifq_len < 10)
|
||||
return;
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
|
||||
while(sc->bfe_tx_ring[idx].bfe_mbuf == NULL) {
|
||||
@ -1368,7 +1369,7 @@ bfe_start_locked(struct ifnet *ifp)
|
||||
*/
|
||||
if(bfe_encap(sc, m_head, &idx)) {
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1410,7 +1411,7 @@ bfe_init_locked(void *xsc)
|
||||
|
||||
BFE_LOCK_ASSERT(sc);
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
bfe_stop(sc);
|
||||
@ -1431,8 +1432,8 @@ bfe_init_locked(void *xsc)
|
||||
CSR_WRITE_4(sc, BFE_IMASK, BFE_IMASK_DEF);
|
||||
|
||||
bfe_ifmedia_upd(ifp);
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
sc->bfe_stat_ch = timeout(bfe_tick, sc, hz);
|
||||
}
|
||||
@ -1488,18 +1489,18 @@ bfe_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
case SIOCSIFFLAGS:
|
||||
BFE_LOCK(sc);
|
||||
if(ifp->if_flags & IFF_UP)
|
||||
if(ifp->if_flags & IFF_RUNNING)
|
||||
if(ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bfe_set_rx_mode(sc);
|
||||
else
|
||||
bfe_init_locked(sc);
|
||||
else if(ifp->if_flags & IFF_RUNNING)
|
||||
else if(ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bfe_stop(sc);
|
||||
BFE_UNLOCK(sc);
|
||||
break;
|
||||
case SIOCADDMULTI:
|
||||
case SIOCDELMULTI:
|
||||
BFE_LOCK(sc);
|
||||
if(ifp->if_flags & IFF_RUNNING)
|
||||
if(ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bfe_set_rx_mode(sc);
|
||||
BFE_UNLOCK(sc);
|
||||
break;
|
||||
@ -1528,7 +1529,7 @@ bfe_watchdog(struct ifnet *ifp)
|
||||
|
||||
printf("bfe%d: watchdog timeout -- resetting\n", sc->bfe_unit);
|
||||
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
bfe_init_locked(sc);
|
||||
|
||||
ifp->if_oerrors++;
|
||||
@ -1584,5 +1585,5 @@ bfe_stop(struct bfe_softc *sc)
|
||||
bfe_tx_ring_free(sc);
|
||||
bfe_rx_ring_free(sc);
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
}
|
||||
|
@ -2895,7 +2895,7 @@ bge_txeof(sc)
|
||||
}
|
||||
|
||||
if (cur_tx != NULL)
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
return;
|
||||
}
|
||||
@ -2995,7 +2995,7 @@ bge_intr(xsc)
|
||||
}
|
||||
}
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
/* Check RX return ring producer/consumer */
|
||||
bge_rxeof(sc);
|
||||
|
||||
@ -3011,7 +3011,8 @@ bge_intr(xsc)
|
||||
/* Re-enable interrupts. */
|
||||
CSR_WRITE_4(sc, BGE_MBX_IRQ0_LO, 0);
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING && !IFQ_DRV_IS_EMPTY(&ifp->if_snd))
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
|
||||
bge_start_locked(ifp);
|
||||
|
||||
BGE_UNLOCK(sc);
|
||||
@ -3262,7 +3263,7 @@ bge_start_locked(ifp)
|
||||
if ((BGE_TX_RING_CNT - sc->bge_txcnt) <
|
||||
m_head->m_pkthdr.csum_data + 16) {
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -3274,7 +3275,7 @@ bge_start_locked(ifp)
|
||||
*/
|
||||
if (bge_encap(sc, m_head, &prodidx)) {
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
++count;
|
||||
@ -3332,7 +3333,7 @@ bge_init_locked(sc)
|
||||
|
||||
ifp = sc->bge_ifp;
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
/* Cancel pending I/O and flush buffers. */
|
||||
@ -3417,8 +3418,8 @@ bge_init_locked(sc)
|
||||
|
||||
bge_ifmedia_upd(ifp);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
callout_reset(&sc->bge_stat_ch, hz, bge_tick, sc);
|
||||
|
||||
@ -3561,7 +3562,7 @@ bge_ioctl(ifp, command, data)
|
||||
error = EINVAL;
|
||||
else {
|
||||
ifp->if_mtu = ifr->ifr_mtu;
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
bge_init(sc);
|
||||
}
|
||||
break;
|
||||
@ -3576,12 +3577,12 @@ bge_ioctl(ifp, command, data)
|
||||
* waiting for it to start up, which may take a
|
||||
* second or two.
|
||||
*/
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->bge_if_flags & IFF_PROMISC)) {
|
||||
BGE_SETBIT(sc, BGE_RX_MODE,
|
||||
BGE_RXMODE_RX_PROMISC);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->bge_if_flags & IFF_PROMISC) {
|
||||
BGE_CLRBIT(sc, BGE_RX_MODE,
|
||||
@ -3589,7 +3590,7 @@ bge_ioctl(ifp, command, data)
|
||||
} else
|
||||
bge_init_locked(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
bge_stop(sc);
|
||||
}
|
||||
}
|
||||
@ -3599,7 +3600,7 @@ bge_ioctl(ifp, command, data)
|
||||
break;
|
||||
case SIOCADDMULTI:
|
||||
case SIOCDELMULTI:
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
BGE_LOCK(sc);
|
||||
bge_setmulti(sc);
|
||||
BGE_UNLOCK(sc);
|
||||
@ -3647,7 +3648,7 @@ bge_watchdog(ifp)
|
||||
|
||||
printf("bge%d: watchdog timeout -- resetting\n", sc->bge_unit);
|
||||
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
bge_init(sc);
|
||||
|
||||
ifp->if_oerrors++;
|
||||
@ -3760,7 +3761,7 @@ bge_stop(sc)
|
||||
|
||||
sc->bge_tx_saved_considx = BGE_TXCONS_UNSET;
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ cm_isa_detach(device_t dev)
|
||||
int s;
|
||||
|
||||
cm_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
|
||||
s = splimp();
|
||||
arc_ifdetach(ifp);
|
||||
|
@ -131,7 +131,7 @@ devclass_t cm_devclass;
|
||||
* else fill tx_act ^ 1 && inc tx_fillcount
|
||||
*
|
||||
* check tx_fillcount again.
|
||||
* case 2: set IFF_OACTIVE to stop arc_output from filling us.
|
||||
* case 2: set IFF_DRV_OACTIVE to stop arc_output from filling us.
|
||||
* case 1: start tx
|
||||
*
|
||||
* tint clears IFF_OCATIVE, decrements and checks tx_fillcount
|
||||
@ -360,9 +360,9 @@ cm_init(xsc)
|
||||
|
||||
ifp = sc->sc_ifp;
|
||||
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
s = splimp();
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
cm_reset(sc);
|
||||
cm_start(ifp);
|
||||
splx(s);
|
||||
@ -441,8 +441,8 @@ cm_reset(sc)
|
||||
sc->sc_tx_act = 0;
|
||||
sc->sc_tx_fillcount = 0;
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
cm_start(ifp);
|
||||
}
|
||||
@ -490,7 +490,7 @@ cm_start(ifp)
|
||||
if_printf(ifp, "start(%p)\n", ifp);
|
||||
#endif
|
||||
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
return;
|
||||
|
||||
s = splimp();
|
||||
@ -577,7 +577,7 @@ cm_start(ifp)
|
||||
* We are filled up to the rim. No more bufs for the moment,
|
||||
* please.
|
||||
*/
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
} else {
|
||||
#ifdef CM_DEBUG
|
||||
if_printf(ifp, "start: starting transmitter on buffer %d\n",
|
||||
@ -588,7 +588,7 @@ cm_start(ifp)
|
||||
|
||||
/*
|
||||
* We still can accept another buf, so don't:
|
||||
* ifp->if_flags |= IFF_OACTIVE;
|
||||
* ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
*/
|
||||
sc->sc_intmask |= CM_TA;
|
||||
PUTREG(CMCMD, CM_TX(buffer));
|
||||
@ -763,7 +763,7 @@ cm_tint(sc, isr)
|
||||
|
||||
|
||||
/* We know we can accept another buffer at this point. */
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
if (--sc->sc_tx_fillcount > 0) {
|
||||
|
||||
@ -1004,15 +1004,15 @@ cm_ioctl(ifp, command, data)
|
||||
|
||||
case SIOCSIFFLAGS:
|
||||
if ((ifp->if_flags & IFF_UP) == 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING) != 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
|
||||
/*
|
||||
* If interface is marked down and it is running,
|
||||
* then stop it.
|
||||
*/
|
||||
cm_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
} else if ((ifp->if_flags & IFF_UP) != 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
/*
|
||||
* If interface is marked up and it is stopped, then
|
||||
* start it.
|
||||
|
@ -773,16 +773,22 @@ cnw_start(ifp)
|
||||
#ifdef CNW_DEBUG
|
||||
if (sc->sc_ethercom.ec_if.if_flags & IFF_DEBUG)
|
||||
printf("%s: cnw_start\n", ifp->if_xname);
|
||||
#if defined(__FreeBSD__)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
#else
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
#endif
|
||||
printf("%s: cnw_start reentered\n", ifp->if_xname);
|
||||
#endif
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
if (sc->cnw_gone)
|
||||
return;
|
||||
#endif
|
||||
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
#endif
|
||||
|
||||
for (;;) {
|
||||
#ifdef ONE_AT_A_TIME
|
||||
@ -863,7 +869,11 @@ cnw_start(ifp)
|
||||
sc->sc_active = 1;
|
||||
}
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1086,7 +1096,7 @@ cnw_intr(arg)
|
||||
(sc->sc_dev.dv_flags & DVF_ACTIVE) == 0)
|
||||
return (0);
|
||||
#else
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
return;
|
||||
#endif
|
||||
ifp->if_timer = 0; /* stop watchdog timer */
|
||||
@ -1201,7 +1211,11 @@ cnw_intr(arg)
|
||||
}
|
||||
|
||||
sc->sc_active = 0;
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
#endif
|
||||
|
||||
/* Continue to send packets from the queue */
|
||||
#if !defined(__FreeBSD__)
|
||||
@ -1291,7 +1305,7 @@ cnw_ioctl(ifp, cmd, data)
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
cnw_freebsd_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
cnw_stop(sc);
|
||||
} else {
|
||||
cnw_freebsd_init(sc);
|
||||
@ -1352,7 +1366,11 @@ cnw_ioctl(ifp, cmd, data)
|
||||
#endif
|
||||
if (error)
|
||||
break;
|
||||
#if !defined(__FreeBSD__)
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0)
|
||||
#else
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
#endif
|
||||
break;
|
||||
bus_space_read_region_1(sc->sc_memt, sc->sc_memh,
|
||||
sc->sc_memoff + CNW_EREG_CB,
|
||||
@ -1464,7 +1482,7 @@ cnw_detach(self, flags)
|
||||
struct cnw_softc *sc = (struct cnw_softc *)self;
|
||||
struct ifnet *ifp = &sc->sc_ethercom.ec_if;
|
||||
|
||||
/* cnw_disable() checks IFF_RUNNING */
|
||||
/* cnw_disable() checks IFF_DRV_RUNNING */
|
||||
cnw_disable(sc);
|
||||
|
||||
if ((sc->sc_resource & CNW_RES_NET) != 0) {
|
||||
@ -1508,12 +1526,12 @@ static void cnw_freebsd_init(xsc)
|
||||
cnw_init(sc);
|
||||
|
||||
#if 0
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
cnw_stop(sc);
|
||||
#endif
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/* sc->cnw_stat_ch = timeout(cnw_inquire, sc, hz * 60); */
|
||||
|
||||
@ -1535,7 +1553,7 @@ static void cnw_stop(sc)
|
||||
cnw_reset(sc);
|
||||
|
||||
ifp = sc->sc_ifp;
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -714,7 +714,7 @@ static int cp_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
bdrv_t *bd = d->board->sys;
|
||||
int error, s, was_up, should_be_up;
|
||||
|
||||
was_up = (ifp->if_flags & IFF_RUNNING) != 0;
|
||||
was_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
|
||||
error = sppp_ioctl (ifp, cmd, data);
|
||||
|
||||
if (error)
|
||||
@ -736,7 +736,7 @@ static int cp_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
/* We get here only in case of SIFFLAGS or SIFADDR. */
|
||||
s = splimp ();
|
||||
CP_LOCK (bd);
|
||||
should_be_up = (ifp->if_flags & IFF_RUNNING) != 0;
|
||||
should_be_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
|
||||
if (! was_up && should_be_up) {
|
||||
/* Interface goes up -- start it. */
|
||||
cp_up (d);
|
||||
@ -844,7 +844,7 @@ static void cp_send (drv_t *d)
|
||||
#endif
|
||||
}
|
||||
#ifndef NETGRAPH
|
||||
d->ifp->if_flags |= IFF_OACTIVE;
|
||||
d->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -896,7 +896,7 @@ static void cp_transmit (cp_chan_t *c, void *attachment, int len)
|
||||
d->timeout = 0;
|
||||
#else
|
||||
++d->ifp->if_opackets;
|
||||
d->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
d->ifp->if_timer = 0;
|
||||
#endif
|
||||
cp_start (d);
|
||||
@ -973,7 +973,7 @@ static void cp_error (cp_chan_t *c, int data)
|
||||
d->timeout = 0;
|
||||
#else
|
||||
++d->ifp->if_oerrors;
|
||||
d->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
d->ifp->if_timer = 0;
|
||||
#endif
|
||||
cp_start (d);
|
||||
@ -1063,7 +1063,7 @@ static int cp_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struc
|
||||
error = suser (td);
|
||||
if (error)
|
||||
return error;
|
||||
if (d->ifp->if_flags & IFF_RUNNING)
|
||||
if (d->ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return EBUSY;
|
||||
if (! strcmp ("cisco", (char*)data)) {
|
||||
IFP2SP(d->ifp)->pp_flags &= ~(PP_FR);
|
||||
|
@ -694,7 +694,7 @@ cs_detach(device_t dev)
|
||||
ifp = sc->ifp;
|
||||
|
||||
cs_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
ether_ifdetach(ifp);
|
||||
if_free(ifp);
|
||||
cs_release_resources(dev);
|
||||
@ -768,8 +768,8 @@ cs_init(void *xsc)
|
||||
/*
|
||||
* Set running and clear output active flags
|
||||
*/
|
||||
sc->ifp->if_flags |= IFF_RUNNING;
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Start sending process
|
||||
@ -882,18 +882,18 @@ csintr(void *arg)
|
||||
ifp->if_opackets++;
|
||||
else
|
||||
ifp->if_oerrors++;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_timer = 0;
|
||||
break;
|
||||
|
||||
case ISQ_BUFFER_EVENT:
|
||||
if (status & READY_FOR_TX) {
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_timer = 0;
|
||||
}
|
||||
|
||||
if (status & TX_UNDERRUN) {
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_oerrors++;
|
||||
}
|
||||
@ -909,7 +909,7 @@ csintr(void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
if (!(ifp->if_flags & IFF_OACTIVE)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_OACTIVE)) {
|
||||
cs_start(ifp);
|
||||
}
|
||||
}
|
||||
@ -1003,7 +1003,7 @@ cs_start(struct ifnet *ifp)
|
||||
if (!(cs_readreg(sc, PP_BusST) & READY_FOR_TX_NOW)) {
|
||||
ifp->if_timer = sc->buf_len;
|
||||
(void) splx(s);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1017,7 +1017,7 @@ cs_start(struct ifnet *ifp)
|
||||
ifp->if_timer = length;
|
||||
|
||||
(void) splx(s);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -1035,7 +1035,7 @@ cs_stop(struct cs_softc *sc)
|
||||
cs_writereg(sc, PP_BufCFG, 0);
|
||||
cs_writereg(sc, PP_BusCTL, 0);
|
||||
|
||||
sc->ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
sc->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
sc->ifp->if_timer = 0;
|
||||
|
||||
(void) splx(s);
|
||||
@ -1112,11 +1112,11 @@ cs_ioctl(register struct ifnet *ifp, u_long command, caddr_t data)
|
||||
* "stopped", reflecting the UP flag.
|
||||
*/
|
||||
if (sc->ifp->if_flags & IFF_UP) {
|
||||
if ((sc->ifp->if_flags & IFF_RUNNING)==0) {
|
||||
if ((sc->ifp->if_drv_flags & IFF_DRV_RUNNING)==0) {
|
||||
cs_init(sc);
|
||||
}
|
||||
} else {
|
||||
if ((sc->ifp->if_flags & IFF_RUNNING)!=0) {
|
||||
if ((sc->ifp->if_drv_flags & IFF_DRV_RUNNING)!=0) {
|
||||
cs_stop(sc);
|
||||
}
|
||||
}
|
||||
|
@ -935,7 +935,7 @@ static int ct_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
bdrv_t *bd = d->bd;
|
||||
int error, s, was_up, should_be_up;
|
||||
|
||||
was_up = (ifp->if_flags & IFF_RUNNING) != 0;
|
||||
was_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
|
||||
error = sppp_ioctl (ifp, cmd, data);
|
||||
if (error)
|
||||
return error;
|
||||
@ -956,7 +956,7 @@ static int ct_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
/* We get here only in case of SIFFLAGS or SIFADDR. */
|
||||
s = splimp ();
|
||||
CT_LOCK (bd);
|
||||
should_be_up = (ifp->if_flags & IFF_RUNNING) != 0;
|
||||
should_be_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
|
||||
if (! was_up && should_be_up) {
|
||||
/* Interface goes up -- start it. */
|
||||
ct_up (d);
|
||||
@ -1053,7 +1053,7 @@ static void ct_send (drv_t *d)
|
||||
#endif
|
||||
}
|
||||
#ifndef NETGRAPH
|
||||
d->ifp->if_flags |= IFF_OACTIVE;
|
||||
d->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1113,7 +1113,7 @@ static void ct_transmit (ct_chan_t *c, void *attachment, int len)
|
||||
d->timeout = 0;
|
||||
#else
|
||||
++d->ifp->if_opackets;
|
||||
d->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
d->ifp->if_timer = 0;
|
||||
#endif
|
||||
ct_start (d);
|
||||
@ -1199,7 +1199,7 @@ static void ct_error (ct_chan_t *c, int data)
|
||||
d->timeout = 0;
|
||||
#else
|
||||
++d->ifp->if_oerrors;
|
||||
d->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
d->ifp->if_timer = 0;
|
||||
#endif
|
||||
ct_start (d);
|
||||
@ -1294,7 +1294,7 @@ static int ct_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struc
|
||||
error = suser (td);
|
||||
if (error)
|
||||
return error;
|
||||
if (d->ifp->if_flags & IFF_RUNNING)
|
||||
if (d->ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return EBUSY;
|
||||
if (! strcmp ("cisco", (char*)data)) {
|
||||
IFP2SP(d->ifp)->pp_flags &= ~(PP_FR);
|
||||
|
@ -1090,7 +1090,7 @@ static int cx_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
return EBUSY;
|
||||
|
||||
/* Socket ioctls on slave subchannels are not allowed. */
|
||||
was_up = (ifp->if_flags & IFF_RUNNING) != 0;
|
||||
was_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
|
||||
error = sppp_ioctl (ifp, cmd, data);
|
||||
if (error)
|
||||
return error;
|
||||
@ -1111,7 +1111,7 @@ static int cx_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
/* We get here only in case of SIFFLAGS or SIFADDR. */
|
||||
s = splhigh ();
|
||||
CX_LOCK (bd);
|
||||
should_be_up = (ifp->if_flags & IFF_RUNNING) != 0;
|
||||
should_be_up = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
|
||||
if (!was_up && should_be_up) {
|
||||
/* Interface goes up -- start it. */
|
||||
cx_up (d);
|
||||
@ -1207,7 +1207,7 @@ static void cx_send (drv_t *d)
|
||||
#endif
|
||||
}
|
||||
#ifndef NETGRAPH
|
||||
d->ifp->if_flags |= IFF_OACTIVE;
|
||||
d->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1275,7 +1275,7 @@ static void cx_transmit (cx_chan_t *c, void *attachment, int len)
|
||||
d->timeout = 0;
|
||||
#else
|
||||
++d->ifp->if_opackets;
|
||||
d->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
d->ifp->if_timer = 0;
|
||||
#endif
|
||||
cx_start (d);
|
||||
@ -1435,7 +1435,7 @@ static void cx_error (cx_chan_t *c, int data)
|
||||
d->timeout = 0;
|
||||
#else
|
||||
++d->ifp->if_oerrors;
|
||||
d->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
d->ifp->if_timer = 0;
|
||||
cx_start (d);
|
||||
#endif
|
||||
@ -1654,7 +1654,7 @@ static int cx_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struc
|
||||
return error;
|
||||
if (c->mode == M_ASYNC)
|
||||
return EBUSY;
|
||||
if (d->ifp->if_flags & IFF_RUNNING)
|
||||
if (d->ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return EBUSY;
|
||||
if (! strcmp ("cisco", (char*)data)) {
|
||||
IFP2SP(d->ifp)->pp_flags &= ~(PP_FR);
|
||||
|
@ -353,7 +353,7 @@ ed_detach(device_t dev)
|
||||
if (sc->gone)
|
||||
return (0);
|
||||
ed_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
ether_ifdetach(ifp);
|
||||
if_free(ifp);
|
||||
sc->gone = 1;
|
||||
@ -595,8 +595,8 @@ ed_init(void *xsc)
|
||||
/*
|
||||
* Set 'running' flag, and clear output active flag.
|
||||
*/
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* ...and attempt to start output
|
||||
@ -665,7 +665,7 @@ ed_xmit(struct ed_softc *sc)
|
||||
* 1) that the current priority is set to splimp _before_ this code
|
||||
* is called *and* is returned to the appropriate priority after
|
||||
* return
|
||||
* 2) that the IFF_OACTIVE flag is checked before this code is called
|
||||
* 2) that the IFF_DRV_OACTIVE flag is checked before this code is called
|
||||
* (i.e. that the output part of the interface is idle)
|
||||
*/
|
||||
static void
|
||||
@ -699,7 +699,7 @@ outloop:
|
||||
/*
|
||||
* No room. Indicate this to the outside world and exit.
|
||||
*/
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
|
||||
@ -712,7 +712,7 @@ outloop:
|
||||
* transmitter may be active, but if we haven't filled all the
|
||||
* buffers with data then we still want to accept more.
|
||||
*/
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1069,7 +1069,7 @@ edintr(void *arg)
|
||||
* reset tx busy and output active flags
|
||||
*/
|
||||
sc->xmit_busy = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* clear watchdog timer
|
||||
@ -1180,7 +1180,7 @@ edintr(void *arg)
|
||||
* attempt to start output on the interface. This is done
|
||||
* after handling the receiver to give the receiver priority.
|
||||
*/
|
||||
if ((ifp->if_flags & IFF_OACTIVE) == 0)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0)
|
||||
ed_start(ifp);
|
||||
|
||||
/*
|
||||
@ -1218,7 +1218,7 @@ ed_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
int s, error = 0;
|
||||
|
||||
if (sc == NULL || sc->gone) {
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
return ENXIO;
|
||||
}
|
||||
s = splimp();
|
||||
@ -1231,12 +1231,12 @@ ed_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
* If it is marked down and running, then stop it.
|
||||
*/
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
ed_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
ed_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -562,7 +562,7 @@ em_detach(device_t dev)
|
||||
|
||||
EM_LOCK_DESTROY(adapter);
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
ifp->if_timer = 0;
|
||||
|
||||
return(0);
|
||||
@ -619,7 +619,7 @@ em_start_locked(struct ifnet *ifp)
|
||||
if (em_encap(adapter, &m_head)) {
|
||||
if (m_head == NULL)
|
||||
break;
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
|
||||
break;
|
||||
}
|
||||
@ -693,14 +693,14 @@ em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFFLAGS (Set Interface Flags)");
|
||||
EM_LOCK(adapter);
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
em_init_locked(adapter);
|
||||
}
|
||||
|
||||
em_disable_promisc(adapter);
|
||||
em_set_promisc(adapter);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
em_stop(adapter);
|
||||
}
|
||||
}
|
||||
@ -709,7 +709,7 @@ em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
case SIOCADDMULTI:
|
||||
case SIOCDELMULTI:
|
||||
IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
EM_LOCK(adapter);
|
||||
em_disable_intr(adapter);
|
||||
em_set_multi(adapter);
|
||||
@ -742,7 +742,7 @@ em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
|
||||
reinit = 1;
|
||||
}
|
||||
if (reinit && (ifp->if_flags & IFF_RUNNING))
|
||||
if (reinit && (ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
em_init(adapter);
|
||||
break;
|
||||
default:
|
||||
@ -777,7 +777,7 @@ em_watchdog(struct ifnet *ifp)
|
||||
if (em_check_for_link(&adapter->hw))
|
||||
printf("em%d: watchdog timeout -- resetting\n", adapter->unit);
|
||||
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
|
||||
em_init(adapter);
|
||||
|
||||
@ -878,8 +878,8 @@ em_init_locked(struct adapter * adapter)
|
||||
/* Don't loose promiscuous settings */
|
||||
em_set_promisc(adapter);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
if (adapter->hw.mac_type >= em_82543) {
|
||||
if (ifp->if_capenable & IFCAP_TXCSUM)
|
||||
@ -948,12 +948,13 @@ em_poll_locked(struct ifnet *ifp, enum poll_cmd cmd, int count)
|
||||
callout_reset(&adapter->timer, hz, em_local_timer, adapter);
|
||||
}
|
||||
}
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
em_process_receive_interrupts(adapter, count);
|
||||
em_clean_transmit_interrupts(adapter);
|
||||
}
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING && !IFQ_DRV_IS_EMPTY(&ifp->if_snd))
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
|
||||
em_start_locked(ifp);
|
||||
}
|
||||
|
||||
@ -1016,14 +1017,15 @@ em_intr(void *arg)
|
||||
}
|
||||
|
||||
while (loop_cnt > 0) {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
em_process_receive_interrupts(adapter, -1);
|
||||
em_clean_transmit_interrupts(adapter);
|
||||
}
|
||||
loop_cnt--;
|
||||
}
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING && !IFQ_DRV_IS_EMPTY(&ifp->if_snd))
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
|
||||
em_start_locked(ifp);
|
||||
|
||||
EM_UNLOCK(adapter);
|
||||
@ -1654,7 +1656,7 @@ em_local_timer(void *arg)
|
||||
em_check_for_link(&adapter->hw);
|
||||
em_print_link_status(adapter);
|
||||
em_update_stats_counters(adapter);
|
||||
if (em_display_debug_stats && ifp->if_flags & IFF_RUNNING) {
|
||||
if (em_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
em_print_hw_stats(adapter);
|
||||
}
|
||||
em_smartspeed(adapter);
|
||||
@ -1725,7 +1727,7 @@ em_stop(void *arg)
|
||||
|
||||
|
||||
/* Tell the stack that the interface is no longer active */
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -2468,13 +2470,13 @@ em_clean_transmit_interrupts(struct adapter * adapter)
|
||||
adapter->oldest_used_tx_desc = i;
|
||||
|
||||
/*
|
||||
* If we have enough room, clear IFF_OACTIVE to tell the stack
|
||||
* If we have enough room, clear IFF_DRV_OACTIVE to tell the stack
|
||||
* that it is OK to send packets.
|
||||
* If there are no pending descriptors, clear the timeout. Otherwise,
|
||||
* if some descriptors have been freed, restart the timeout.
|
||||
*/
|
||||
if (num_avail > EM_TX_CLEANUP_THRESHOLD) {
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
if (num_avail == adapter->num_tx_desc)
|
||||
ifp->if_timer = 0;
|
||||
else if (num_avail == adapter->num_tx_desc_avail)
|
||||
|
@ -304,9 +304,9 @@ en_pci_detach(device_t dev)
|
||||
/*
|
||||
* Stop DMA and drop transmit queue.
|
||||
*/
|
||||
if ((sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if ((sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
if_printf(sc->ifp, "still running\n");
|
||||
sc->ifp->if_flags &= ~IFF_RUNNING;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1043,7 +1043,7 @@ en_start(struct ifnet *ifp)
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
EN_UNLOCK(sc);
|
||||
uma_zfree(sc->map_zone, map);
|
||||
m_freem(m);
|
||||
@ -1314,12 +1314,12 @@ en_close_vcc(struct en_softc *sc, struct atmio_closevcc *cl)
|
||||
goto done;
|
||||
|
||||
vc->vflags |= VCC_CLOSE_RX;
|
||||
while ((sc->ifp->if_flags & IFF_RUNNING) &&
|
||||
while ((sc->ifp->if_drv_flags & IFF_DRV_RUNNING) &&
|
||||
(vc->vflags & VCC_DRAIN))
|
||||
cv_wait(&sc->cv_close, &sc->en_mtx);
|
||||
|
||||
en_close_finish(sc, vc);
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
error = EIO;
|
||||
goto done;
|
||||
}
|
||||
@ -1350,7 +1350,7 @@ en_reset_ul(struct en_softc *sc)
|
||||
int lcv;
|
||||
|
||||
if_printf(sc->ifp, "reset\n");
|
||||
sc->ifp->if_flags &= ~IFF_RUNNING;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
|
||||
if (sc->en_busreset)
|
||||
sc->en_busreset(sc);
|
||||
@ -1446,7 +1446,7 @@ en_init(struct en_softc *sc)
|
||||
}
|
||||
|
||||
DBG(sc, INIT, ("going up"));
|
||||
sc->ifp->if_flags |= IFF_RUNNING; /* enable */
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING; /* enable */
|
||||
|
||||
if (sc->en_busreset)
|
||||
sc->en_busreset(sc);
|
||||
@ -1550,7 +1550,7 @@ en_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
#if defined(INET) || defined(INET6)
|
||||
if (ifa->ifa_addr->sa_family == AF_INET
|
||||
|| ifa->ifa_addr->sa_family == AF_INET6) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
en_reset_ul(sc);
|
||||
en_init(sc);
|
||||
}
|
||||
@ -1559,7 +1559,7 @@ en_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
break;
|
||||
}
|
||||
#endif /* INET */
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
en_reset_ul(sc);
|
||||
en_init(sc);
|
||||
}
|
||||
@ -1569,10 +1569,10 @@ en_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFFLAGS:
|
||||
EN_LOCK(sc);
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
en_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
en_reset_ul(sc);
|
||||
}
|
||||
EN_UNLOCK(sc);
|
||||
@ -2434,7 +2434,7 @@ en_intr(void *arg)
|
||||
"resetting\n", reg, MID_INTBITS);
|
||||
#ifdef EN_DEBUG
|
||||
kdb_enter("en: unexpected error");
|
||||
sc->ifp->if_flags &= ~IFF_RUNNING; /* FREEZE! */
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_RUNNING; /* FREEZE! */
|
||||
#else
|
||||
en_reset_ul(sc);
|
||||
en_init(sc);
|
||||
|
@ -355,7 +355,7 @@ ep_detach(device_t dev)
|
||||
if (bus_child_present(dev))
|
||||
epstop(sc);
|
||||
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
ether_ifdetach(ifp);
|
||||
if_free(ifp);
|
||||
|
||||
@ -436,8 +436,8 @@ epinit_locked(struct ep_softc *sc)
|
||||
CSR_WRITE_2(sc, EP_COMMAND, RX_ENABLE);
|
||||
CSR_WRITE_2(sc, EP_COMMAND, TX_ENABLE);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE; /* just in case */
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; /* just in case */
|
||||
|
||||
#ifdef EP_LOCAL_STATS
|
||||
sc->rx_no_first = sc->rx_no_mbuf =
|
||||
@ -478,7 +478,7 @@ epstart_locked(struct ifnet *ifp)
|
||||
return;
|
||||
EP_ASSERT_LOCKED(sc);
|
||||
EP_BUSY_WAIT(sc);
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
startagain:
|
||||
/* Sneak a peek at the next packet */
|
||||
@ -506,7 +506,7 @@ startagain:
|
||||
CSR_WRITE_2(sc, EP_COMMAND, SET_TX_AVAIL_THRESH | (len + pad + 4));
|
||||
/* make sure */
|
||||
if (CSR_READ_2(sc, EP_W1_FREE_TX) < len + pad + 4) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
IF_PREPEND(&ifp->if_snd, m0);
|
||||
goto done;
|
||||
}
|
||||
@ -605,7 +605,7 @@ rescan:
|
||||
if (status & S_TX_AVAIL) {
|
||||
/* we need ACK */
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
GO_WINDOW(sc, 1);
|
||||
CSR_READ_2(sc, EP_W1_FREE_TX);
|
||||
epstart_locked(ifp);
|
||||
@ -679,7 +679,7 @@ rescan:
|
||||
/* pops up the next status */
|
||||
CSR_WRITE_1(sc, EP_W1_TX_STATUS, 0x0);
|
||||
} /* while */
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
GO_WINDOW(sc, 1);
|
||||
CSR_READ_2(sc, EP_W1_FREE_TX);
|
||||
epstart_locked(ifp);
|
||||
@ -908,8 +908,8 @@ epioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFFLAGS:
|
||||
EP_LOCK(sc);
|
||||
if (((ifp->if_flags & IFF_UP) == 0) &&
|
||||
(ifp->if_flags & IFF_RUNNING)) {
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
epstop(sc);
|
||||
} else
|
||||
/* reinitialize card on any parameter change */
|
||||
@ -954,7 +954,7 @@ epwatchdog(struct ifnet *ifp)
|
||||
|
||||
if (sc->gone)
|
||||
return;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
epstart(ifp);
|
||||
ep_intr(ifp->if_softc);
|
||||
}
|
||||
|
@ -274,7 +274,7 @@ ex_detach(device_t dev)
|
||||
|
||||
ex_stop(sc);
|
||||
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
ether_ifdetach(ifp);
|
||||
if_free(ifp);
|
||||
|
||||
@ -354,8 +354,8 @@ ex_init(void *xsc)
|
||||
CSR_WRITE_2(sc, XMT_BAR, sc->tx_lower_limit);
|
||||
sc->tx_head = sc->tx_tail = sc->tx_lower_limit;
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
DODEBUG(Status, printf("OIDLE init\n"););
|
||||
|
||||
ex_setmulti(sc);
|
||||
@ -392,7 +392,7 @@ ex_start(struct ifnet *ifp)
|
||||
* more packets left, or the card cannot accept any more yet.
|
||||
*/
|
||||
while (((opkt = ifp->if_snd.ifq_head) != NULL) &&
|
||||
!(ifp->if_flags & IFF_OACTIVE)) {
|
||||
!(ifp->if_drv_flags & IFF_DRV_OACTIVE)) {
|
||||
|
||||
/*
|
||||
* Ensure there is enough free transmit buffer space for
|
||||
@ -538,7 +538,7 @@ ex_start(struct ifnet *ifp)
|
||||
ifp->if_opackets++;
|
||||
m_freem(opkt);
|
||||
} else {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
DODEBUG(Status, printf("OACTIVE start\n"););
|
||||
}
|
||||
}
|
||||
@ -656,7 +656,7 @@ ex_tx_intr(struct ex_softc *sc)
|
||||
* The card should be ready to accept more packets now.
|
||||
*/
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
DODEBUG(Status, printf("OIDLE tx_intr\n"););
|
||||
DODEBUG(Start_End, printf("ex_tx_intr%d: finish\n", unit););
|
||||
@ -792,9 +792,9 @@ ex_ioctl(register struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFFLAGS:
|
||||
DODEBUG(Start_End, printf("SIOCSIFFLAGS"););
|
||||
if ((ifp->if_flags & IFF_UP) == 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING)) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
ex_stop(sc);
|
||||
} else {
|
||||
ex_init(sc);
|
||||
@ -951,7 +951,7 @@ ex_watchdog(struct ifnet *ifp)
|
||||
|
||||
DODEBUG(Start_End, printf("%s: ex_watchdog: start\n", ifp->if_xname););
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
DODEBUG(Status, printf("OIDLE watchdog\n"););
|
||||
|
||||
|
@ -171,7 +171,7 @@ fatm_utopia_writereg(struct ifatm *ifatm, u_int reg, u_int mask, u_int val)
|
||||
|
||||
sc = ifatm->ifp->if_softc;
|
||||
FATM_CHECKLOCK(sc);
|
||||
if (!(ifatm->ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifatm->ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return (EIO);
|
||||
|
||||
/* get queue element and fill it */
|
||||
@ -254,7 +254,7 @@ fatm_utopia_readregs_internal(struct fatm_softc *sc)
|
||||
|
||||
/* get the buffer */
|
||||
for (;;) {
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING))
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return (EIO);
|
||||
if (!(sc->flags & FATM_REGS_INUSE))
|
||||
break;
|
||||
@ -396,7 +396,7 @@ fatm_watchdog(struct ifnet *ifp)
|
||||
struct fatm_softc *sc = ifp->if_softc;
|
||||
|
||||
FATM_LOCK(sc);
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
fatm_check_heartbeat(sc);
|
||||
ifp->if_timer = 5;
|
||||
}
|
||||
@ -476,8 +476,8 @@ fatm_stop(struct fatm_softc *sc)
|
||||
/* stop watchdog */
|
||||
sc->ifp->if_timer = 0;
|
||||
|
||||
if (sc->ifp->if_flags & IFF_RUNNING) {
|
||||
sc->ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
if (sc->ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
sc->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
ATMEV_SEND_IFSTATE_CHANGED(IFP2IFATM(sc->ifp),
|
||||
sc->utopia.carrier == UTP_CARR_OK);
|
||||
|
||||
@ -1260,7 +1260,7 @@ fatm_init_locked(struct fatm_softc *sc)
|
||||
uint32_t start;
|
||||
|
||||
DBG(sc, INIT, ("initialize"));
|
||||
if (sc->ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
fatm_stop(sc);
|
||||
|
||||
/*
|
||||
@ -1336,7 +1336,7 @@ fatm_init_locked(struct fatm_softc *sc)
|
||||
/*
|
||||
* Now set flags, that we are ready
|
||||
*/
|
||||
sc->ifp->if_flags |= IFF_RUNNING;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
|
||||
/*
|
||||
* Start the watchdog timer
|
||||
@ -1635,7 +1635,7 @@ fatm_intr(void *p)
|
||||
}
|
||||
WRITE4(sc, FATMO_HCR, FATM_HCR_CLRIRQ);
|
||||
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
FATM_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -1690,7 +1690,7 @@ fatm_getstat(struct fatm_softc *sc)
|
||||
* statistics buffer
|
||||
*/
|
||||
for (;;) {
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING))
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return (EIO);
|
||||
if (!(sc->flags & FATM_STAT_INUSE))
|
||||
break;
|
||||
@ -2096,7 +2096,7 @@ fatm_start(struct ifnet *ifp)
|
||||
* From here on we need the softc
|
||||
*/
|
||||
FATM_LOCK(sc);
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
FATM_UNLOCK(sc);
|
||||
m_freem(m);
|
||||
break;
|
||||
@ -2264,7 +2264,7 @@ fatm_open_vcc(struct fatm_softc *sc, struct atmio_openvcc *op)
|
||||
error = 0;
|
||||
|
||||
FATM_LOCK(sc);
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
error = EIO;
|
||||
goto done;
|
||||
}
|
||||
@ -2404,7 +2404,7 @@ fatm_close_vcc(struct fatm_softc *sc, struct atmio_closevcc *cl)
|
||||
error = 0;
|
||||
|
||||
FATM_LOCK(sc);
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
error = EIO;
|
||||
goto done;
|
||||
}
|
||||
@ -2467,7 +2467,7 @@ fatm_ioctl(struct ifnet *ifp, u_long cmd, caddr_t arg)
|
||||
case SIOCSIFADDR:
|
||||
FATM_LOCK(sc);
|
||||
ifp->if_flags |= IFF_UP;
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
fatm_init_locked(sc);
|
||||
switch (ifa->ifa_addr->sa_family) {
|
||||
#ifdef INET
|
||||
@ -2485,11 +2485,11 @@ fatm_ioctl(struct ifnet *ifp, u_long cmd, caddr_t arg)
|
||||
case SIOCSIFFLAGS:
|
||||
FATM_LOCK(sc);
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
fatm_init_locked(sc);
|
||||
}
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
fatm_stop(sc);
|
||||
}
|
||||
}
|
||||
@ -2498,7 +2498,7 @@ fatm_ioctl(struct ifnet *ifp, u_long cmd, caddr_t arg)
|
||||
|
||||
case SIOCGIFMEDIA:
|
||||
case SIOCSIFMEDIA:
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
error = ifmedia_ioctl(ifp, ifr, &sc->media, cmd);
|
||||
else
|
||||
error = EINVAL;
|
||||
|
@ -976,7 +976,7 @@ fe_stop (struct fe_softc *sc)
|
||||
DELAY(200);
|
||||
|
||||
/* Reset transmitter variables and interface flags. */
|
||||
sc->ifp->if_flags &= ~(IFF_OACTIVE | IFF_RUNNING);
|
||||
sc->ifp->if_drv_flags &= ~(IFF_DRV_OACTIVE | IFF_DRV_RUNNING);
|
||||
sc->ifp->if_timer = 0;
|
||||
sc->txb_free = sc->txb_size;
|
||||
sc->txb_count = 0;
|
||||
@ -1110,7 +1110,7 @@ fe_init (void * xsc)
|
||||
#endif
|
||||
|
||||
/* Set 'running' flag, because we are now running. */
|
||||
sc->ifp->if_flags |= IFF_RUNNING;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
|
||||
/*
|
||||
* At this point, the interface is running properly,
|
||||
@ -1162,7 +1162,7 @@ fe_xmit (struct fe_softc *sc)
|
||||
* 1) that the current priority is set to splimp _before_ this code
|
||||
* is called *and* is returned to the appropriate priority after
|
||||
* return
|
||||
* 2) that the IFF_OACTIVE flag is checked before this code is called
|
||||
* 2) that the IFF_DRV_OACTIVE flag is checked before this code is called
|
||||
* (i.e. that the output part of the interface is idle)
|
||||
*/
|
||||
static void
|
||||
@ -1300,7 +1300,7 @@ fe_start (struct ifnet *ifp)
|
||||
* filled all the buffers with data then we still
|
||||
* want to accept more.
|
||||
*/
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
return;
|
||||
|
||||
indicate_active:
|
||||
@ -1308,7 +1308,7 @@ fe_start (struct ifnet *ifp)
|
||||
* The transmitter is active, and there are no room for
|
||||
* more outgoing packets in the transmission buffer.
|
||||
*/
|
||||
sc->ifp->if_flags |= IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1532,7 +1532,7 @@ fe_tint (struct fe_softc * sc, u_char tstat)
|
||||
* The transmitter is no more active.
|
||||
* Reset output active flag and watchdog timer.
|
||||
*/
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
sc->ifp->if_timer = 0;
|
||||
|
||||
/*
|
||||
@ -1723,7 +1723,7 @@ fe_intr (void *arg)
|
||||
if (sc->filter_change &&
|
||||
sc->txb_count == 0 && sc->txb_sched == 0) {
|
||||
fe_loadmar(sc);
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1739,7 +1739,7 @@ fe_intr (void *arg)
|
||||
* receiver interrupts. 86960 can raise a receiver
|
||||
* interrupt when the transmission buffer is full.
|
||||
*/
|
||||
if ((sc->ifp->if_flags & IFF_OACTIVE) == 0)
|
||||
if ((sc->ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0)
|
||||
fe_start(sc->ifp);
|
||||
}
|
||||
|
||||
@ -1767,10 +1767,10 @@ fe_ioctl (struct ifnet * ifp, u_long command, caddr_t data)
|
||||
* "stopped", reflecting the UP flag.
|
||||
*/
|
||||
if (sc->ifp->if_flags & IFF_UP) {
|
||||
if ((sc->ifp->if_flags & IFF_RUNNING) == 0)
|
||||
if ((sc->ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
fe_init(sc);
|
||||
} else {
|
||||
if ((sc->ifp->if_flags & IFF_RUNNING) != 0)
|
||||
if ((sc->ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
|
||||
fe_stop(sc);
|
||||
}
|
||||
|
||||
@ -2084,7 +2084,6 @@ fe_mcaf ( struct fe_softc *sc )
|
||||
static void
|
||||
fe_setmode (struct fe_softc *sc)
|
||||
{
|
||||
int flags = sc->ifp->if_flags;
|
||||
|
||||
/*
|
||||
* If the interface is not running, we postpone the update
|
||||
@ -2096,13 +2095,13 @@ fe_setmode (struct fe_softc *sc)
|
||||
* To complete the trick, fe_init() calls fe_setmode() after
|
||||
* restarting the interface.
|
||||
*/
|
||||
if (!(flags & IFF_RUNNING))
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Promiscuous mode is handled separately.
|
||||
*/
|
||||
if (flags & IFF_PROMISC) {
|
||||
if (sc->ifp->if_flags & IFF_PROMISC) {
|
||||
/*
|
||||
* Program 86960 to receive all packets on the segment
|
||||
* including those directed to other stations.
|
||||
@ -2128,7 +2127,7 @@ fe_setmode (struct fe_softc *sc)
|
||||
/*
|
||||
* Find the new multicast filter value.
|
||||
*/
|
||||
if (flags & IFF_ALLMULTI)
|
||||
if (sc->ifp->if_flags & IFF_ALLMULTI)
|
||||
sc->filter = fe_filter_all;
|
||||
else
|
||||
sc->filter = fe_mcaf(sc);
|
||||
|
@ -289,7 +289,11 @@ fwe_stop(struct fwe_softc *fwe)
|
||||
fwe->dma_ch = -1;
|
||||
}
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
#else
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int
|
||||
@ -404,8 +408,13 @@ found:
|
||||
if ((xferq->flag & FWXFERQ_RUNNING) == 0)
|
||||
fc->irx_enable(fc, fwe->dma_ch);
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
#endif
|
||||
|
||||
FWE_POLL_REGISTER(fwe_poll, fwe, ifp);
|
||||
#if 0
|
||||
@ -426,10 +435,18 @@ fwe_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFFLAGS:
|
||||
s = splimp();
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
#if defined(__FreeBSD__)
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
#else
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
#endif
|
||||
fwe_init(&fwe->eth_softc);
|
||||
} else {
|
||||
#if defined(__FreeBSD__)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
#else
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
#endif
|
||||
fwe_stop(fwe);
|
||||
}
|
||||
/* XXX keep promiscoud mode */
|
||||
@ -525,12 +542,20 @@ fwe_start(struct ifnet *ifp)
|
||||
}
|
||||
|
||||
s = splimp();
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
#endif
|
||||
|
||||
if (ifp->if_snd.ifq_len != 0)
|
||||
fwe_as_output(fwe, ifp);
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
#endif
|
||||
splx(s);
|
||||
}
|
||||
|
||||
|
@ -268,7 +268,11 @@ fwip_stop(struct fwip_softc *fwip)
|
||||
fwip->dma_ch = -1;
|
||||
}
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
#else
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int
|
||||
@ -396,8 +400,13 @@ found:
|
||||
if ((xferq->flag & FWXFERQ_RUNNING) == 0)
|
||||
fc->irx_enable(fc, fwip->dma_ch);
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
#endif
|
||||
|
||||
FWIP_POLL_REGISTER(fwip_poll, fwip, ifp);
|
||||
#if 0
|
||||
@ -416,10 +425,18 @@ fwip_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFFLAGS:
|
||||
s = splimp();
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
#if defined(__FreeBSD__)
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
#else
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
#endif
|
||||
fwip_init(&fwip->fw_softc);
|
||||
} else {
|
||||
#if defined(__FreeBSD__)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
#else
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
#endif
|
||||
fwip_stop(fwip);
|
||||
}
|
||||
splx(s);
|
||||
@ -535,12 +552,20 @@ fwip_start(struct ifnet *ifp)
|
||||
}
|
||||
|
||||
s = splimp();
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
#endif
|
||||
|
||||
if (ifp->if_snd.ifq_len != 0)
|
||||
fwip_async_output(fwip, ifp);
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
#endif
|
||||
splx(s);
|
||||
}
|
||||
|
||||
|
@ -1855,7 +1855,7 @@ fxp_stop(struct fxp_softc *sc)
|
||||
struct fxp_tx *txp;
|
||||
int i;
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
ifp->if_timer = 0;
|
||||
|
||||
#ifdef DEVICE_POLLING
|
||||
@ -2174,8 +2174,8 @@ fxp_init_body(struct fxp_softc *sc)
|
||||
if (sc->miibus != NULL)
|
||||
mii_mediachg(device_get_softc(sc->miibus));
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Enable interrupts.
|
||||
@ -2405,7 +2405,7 @@ fxp_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
fxp_init_body(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
fxp_stop(sc);
|
||||
}
|
||||
break;
|
||||
|
@ -640,7 +640,7 @@ gem_stop(ifp, disable)
|
||||
/*
|
||||
* Mark the interface down and cancel the watchdog timer.
|
||||
*/
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
ifp->if_timer = 0;
|
||||
}
|
||||
|
||||
@ -963,8 +963,8 @@ gem_init(xsc)
|
||||
/* Start the one second timer. */
|
||||
callout_reset(&sc->sc_tick_ch, hz, gem_tick, sc);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_timer = 0;
|
||||
sc->sc_ifflags = ifp->if_flags;
|
||||
splx(s);
|
||||
@ -1120,7 +1120,8 @@ gem_start(ifp)
|
||||
struct mbuf *m0 = NULL;
|
||||
int firsttx, ntx = 0, ofree, txmfail;
|
||||
|
||||
if ((ifp->if_flags & (IFF_RUNNING | IFF_OACTIVE)) != IFF_RUNNING)
|
||||
if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
|
||||
IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
/*
|
||||
@ -1179,7 +1180,7 @@ gem_start(ifp)
|
||||
|
||||
if (txmfail == -1 || sc->sc_txfree == 0) {
|
||||
/* No more slots left; notify upper layer. */
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
}
|
||||
|
||||
if (ntx > 0) {
|
||||
@ -1320,7 +1321,7 @@ gem_tint(sc)
|
||||
sc->sc_txwin = 0;
|
||||
|
||||
/* Freed some descriptors, so reset IFF_OACTIVE and restart. */
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
gem_start(ifp);
|
||||
|
||||
if (STAILQ_EMPTY(&sc->sc_txdirtyq))
|
||||
@ -1817,7 +1818,7 @@ gem_ioctl(ifp, cmd, data)
|
||||
else
|
||||
gem_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
gem_stop(ifp, 0);
|
||||
}
|
||||
sc->sc_ifflags = ifp->if_flags;
|
||||
|
@ -1974,7 +1974,7 @@ hatm_initialize(struct hatm_softc *sc)
|
||||
u_int cid;
|
||||
static const u_int layout[2][7] = HE_CONFIG_MEM_LAYOUT;
|
||||
|
||||
if (sc->ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
hatm_init_bus_width(sc);
|
||||
@ -2244,7 +2244,7 @@ hatm_initialize(struct hatm_softc *sc)
|
||||
v |= HE_PCIM_CTL0_INIT_ENB | HE_PCIM_CTL0_INT_PROC_ENB;
|
||||
pci_write_config(sc->dev, HE_PCIR_GEN_CNTL_0, v, 4);
|
||||
|
||||
sc->ifp->if_flags |= IFF_RUNNING;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
sc->ifp->if_baudrate = 53 * 8 * IFP2IFATM(sc->ifp)->mib.pcr;
|
||||
|
||||
sc->utopia.flags &= ~UTP_FL_POLL_CARRIER;
|
||||
@ -2272,9 +2272,9 @@ hatm_stop(struct hatm_softc *sc)
|
||||
|
||||
mtx_assert(&sc->mtx, MA_OWNED);
|
||||
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING))
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
sc->ifp->if_flags &= ~IFF_RUNNING;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
|
||||
ATMEV_SEND_IFSTATE_CHANGED(IFP2IFATM(sc->ifp),
|
||||
sc->utopia.carrier == UTP_CARR_OK);
|
||||
@ -2318,7 +2318,7 @@ hatm_stop(struct hatm_softc *sc)
|
||||
|
||||
/*
|
||||
* Give any waiters on closing a VCC a chance. They will stop
|
||||
* to wait if they see that IFF_RUNNING disappeared.
|
||||
* to wait if they see that IFF_DRV_RUNNING disappeared.
|
||||
*/
|
||||
cv_broadcast(&sc->vcc_cv);
|
||||
cv_broadcast(&sc->cv_rcclose);
|
||||
|
@ -537,7 +537,7 @@ hatm_intr(void *p)
|
||||
|
||||
/* if we have a stray interrupt with a non-initialized card,
|
||||
* we cannot even lock before looking at the flag */
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING))
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
|
||||
mtx_lock(&sc->mtx);
|
||||
|
@ -116,7 +116,7 @@ hatm_open_vcc(struct hatm_softc *sc, struct atmio_openvcc *arg)
|
||||
return (ENOMEM);
|
||||
|
||||
mtx_lock(&sc->mtx);
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
error = EIO;
|
||||
goto done;
|
||||
}
|
||||
@ -230,7 +230,7 @@ hatm_close_vcc(struct hatm_softc *sc, struct atmio_closevcc *arg)
|
||||
|
||||
mtx_lock(&sc->mtx);
|
||||
vcc = sc->vccs[cid];
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
error = EIO;
|
||||
goto done;
|
||||
}
|
||||
@ -248,11 +248,11 @@ hatm_close_vcc(struct hatm_softc *sc, struct atmio_closevcc *arg)
|
||||
if (vcc->param.flags & ATMIO_FLAG_ASYNC)
|
||||
goto done;
|
||||
|
||||
while ((sc->ifp->if_flags & IFF_RUNNING) &&
|
||||
while ((sc->ifp->if_drv_flags & IFF_DRV_RUNNING) &&
|
||||
(vcc->vflags & (HE_VCC_TX_CLOSING | HE_VCC_RX_CLOSING)))
|
||||
cv_wait(&sc->vcc_cv, &sc->mtx);
|
||||
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
error = EIO;
|
||||
goto done;
|
||||
}
|
||||
@ -284,7 +284,7 @@ hatm_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFADDR:
|
||||
mtx_lock(&sc->mtx);
|
||||
ifp->if_flags |= IFF_UP;
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
hatm_initialize(sc);
|
||||
switch (ifa->ifa_addr->sa_family) {
|
||||
|
||||
@ -303,11 +303,11 @@ hatm_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFFLAGS:
|
||||
mtx_lock(&sc->mtx);
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
hatm_initialize(sc);
|
||||
}
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
hatm_stop(sc);
|
||||
}
|
||||
}
|
||||
|
@ -316,11 +316,11 @@ hatm_rx_vcc_close(struct hatm_softc *sc, u_int cid)
|
||||
WRITE_RSR(sc, cid, 0, 0xf, 0);
|
||||
|
||||
v = READ4(sc, HE_REGO_RCCSTAT);
|
||||
while ((sc->ifp->if_flags & IFF_RUNNING) &&
|
||||
while ((sc->ifp->if_drv_flags & IFF_DRV_RUNNING) &&
|
||||
(READ4(sc, HE_REGO_RCCSTAT) & HE_REGM_RCCSTAT_PROG))
|
||||
cv_timedwait(&sc->cv_rcclose, &sc->mtx, 1);
|
||||
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING))
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
|
||||
WRITE_MBOX4(sc, HE_REGO_RCON_CLOSE, cid);
|
||||
|
@ -360,7 +360,7 @@ hatm_start(struct ifnet *ifp)
|
||||
u_int len;
|
||||
int error;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
mtx_lock(&sc->mtx);
|
||||
arg.sc = sc;
|
||||
|
@ -880,8 +880,8 @@ hme_init_locked(struct hme_softc *sc)
|
||||
/* Start the one second timer. */
|
||||
callout_reset(&sc->sc_tick_ch, hz, hme_tick, sc);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_timer = 0;
|
||||
hme_start_locked(ifp);
|
||||
}
|
||||
@ -1107,7 +1107,8 @@ hme_start_locked(struct ifnet *ifp)
|
||||
struct mbuf *m;
|
||||
int error, enq = 0;
|
||||
|
||||
if ((ifp->if_flags & (IFF_RUNNING | IFF_OACTIVE)) != IFF_RUNNING)
|
||||
if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
|
||||
IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
error = 0;
|
||||
@ -1118,7 +1119,7 @@ hme_start_locked(struct ifnet *ifp)
|
||||
|
||||
error = hme_load_txmbuf(sc, m);
|
||||
if (error == -1) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m);
|
||||
break;
|
||||
} else if (error > 0) {
|
||||
@ -1131,7 +1132,7 @@ hme_start_locked(struct ifnet *ifp)
|
||||
}
|
||||
|
||||
if (sc->sc_rb.rb_td_nbusy == HME_NTXDESC || error == -1)
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
/* Set watchdog timer if a packet was queued */
|
||||
if (enq) {
|
||||
bus_dmamap_sync(sc->sc_cdmatag, sc->sc_cdmamap,
|
||||
@ -1184,7 +1185,7 @@ hme_tint(struct hme_softc *sc)
|
||||
|
||||
CTR0(KTR_HME, "hme_tint: not owned");
|
||||
--sc->sc_rb.rb_td_nbusy;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/* Complete packet transmitted? */
|
||||
if ((txflags & HME_XD_EOP) == 0)
|
||||
@ -1558,15 +1559,15 @@ hme_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
switch (cmd) {
|
||||
case SIOCSIFFLAGS:
|
||||
if ((ifp->if_flags & IFF_UP) == 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING) != 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
|
||||
/*
|
||||
* If interface is marked down and it is running, then
|
||||
* stop it.
|
||||
*/
|
||||
hme_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
} else if ((ifp->if_flags & IFF_UP) != 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
/*
|
||||
* If interface is marked up and it is stopped, then
|
||||
* start it.
|
||||
|
@ -466,7 +466,7 @@ ietint(struct ie_softc *sc)
|
||||
int i;
|
||||
|
||||
sc->ifp->if_timer = 0;
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
for (i = 0; i < sc->xmit_count; i++) {
|
||||
status = sc->xmit_cmds[i]->ie_xmit_status;
|
||||
@ -927,9 +927,9 @@ iestart(struct ifnet *ifp)
|
||||
*/
|
||||
volatile u_short *bptr = &sc->scb->ie_command_list;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
|
||||
do {
|
||||
@ -985,7 +985,7 @@ iestart(struct ifnet *ifp)
|
||||
* command. I wish I understood what was happening here.
|
||||
*/
|
||||
command_and_wait(sc, IE_CU_START, 0, 0);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -1601,9 +1601,9 @@ ieinit(xsc)
|
||||
ee16_interrupt_enable(sc);
|
||||
ee16_chan_attn(sc);
|
||||
}
|
||||
sc->ifp->if_flags |= IFF_RUNNING; /* tell higher levels
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING; /* tell higher levels
|
||||
* we're here */
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
start_receiver(sc);
|
||||
|
||||
@ -1632,11 +1632,11 @@ ieioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
* filtering manually.
|
||||
*/
|
||||
if ((ifp->if_flags & IFF_UP) == 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING)) {
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
ie_stop(sc);
|
||||
} else if ((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
sc->promisc =
|
||||
ifp->if_flags & (IFF_PROMISC | IFF_ALLMULTI);
|
||||
ieinit(sc);
|
||||
@ -1794,7 +1794,7 @@ ie_detach (device_t dev)
|
||||
ee16_shutdown(sc, 0);
|
||||
|
||||
ie_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
ether_ifdetach(ifp);
|
||||
if_free(ifp);
|
||||
ie_release_resources(dev);
|
||||
|
@ -1310,7 +1310,7 @@ ndis_txeof(adapter, packet, status)
|
||||
else
|
||||
ifp->if_oerrors++;
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
NDIS_UNLOCK(sc);
|
||||
|
||||
@ -1549,7 +1549,7 @@ ndis_start(ifp)
|
||||
|
||||
NDIS_LOCK(sc);
|
||||
|
||||
if (!sc->ndis_link || ifp->if_flags & IFF_OACTIVE) {
|
||||
if (!sc->ndis_link || ifp->if_drv_flags & IFF_DRV_OACTIVE) {
|
||||
NDIS_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -1651,7 +1651,7 @@ ndis_start(ifp)
|
||||
}
|
||||
|
||||
if (sc->ndis_txpending == 0)
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Set a timeout in case the chip goes out to lunch.
|
||||
@ -1732,8 +1732,8 @@ ndis_init(xsc)
|
||||
sc->ndis_txpending = sc->ndis_maxpkts;
|
||||
sc->ndis_link = 0;
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
NDIS_UNLOCK(sc);
|
||||
|
||||
@ -2274,7 +2274,7 @@ ndis_ioctl(ifp, command, data)
|
||||
switch(command) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->ndis_if_flags & IFF_PROMISC)) {
|
||||
sc->ndis_filter |=
|
||||
@ -2283,7 +2283,7 @@ ndis_ioctl(ifp, command, data)
|
||||
error = ndis_set_info(sc,
|
||||
OID_GEN_CURRENT_PACKET_FILTER,
|
||||
&sc->ndis_filter, &i);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->ndis_if_flags & IFF_PROMISC) {
|
||||
sc->ndis_filter &=
|
||||
@ -2295,7 +2295,7 @@ ndis_ioctl(ifp, command, data)
|
||||
} else
|
||||
ndis_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ndis_stop(sc);
|
||||
}
|
||||
sc->ndis_if_flags = ifp->if_flags;
|
||||
@ -3000,7 +3000,7 @@ ndis_stop(sc)
|
||||
NDIS_LOCK(sc);
|
||||
ifp->if_timer = 0;
|
||||
sc->ndis_link = 0;
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
NDIS_UNLOCK(sc);
|
||||
|
||||
ndis_halt_nic(sc);
|
||||
|
@ -182,16 +182,18 @@ icioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
ifp->if_flags |= IFF_UP;
|
||||
/* FALLTHROUGH */
|
||||
case SIOCSIFFLAGS:
|
||||
if ((!(ifp->if_flags & IFF_UP)) && (ifp->if_flags & IFF_RUNNING)) {
|
||||
if ((!(ifp->if_flags & IFF_UP)) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
|
||||
/* XXX disable PCF */
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
|
||||
/* IFF_UP is not set, try to release the bus anyway */
|
||||
iicbus_release_bus(parent, icdev);
|
||||
break;
|
||||
}
|
||||
if (((ifp->if_flags & IFF_UP)) && (!(ifp->if_flags & IFF_RUNNING))) {
|
||||
if (((ifp->if_flags & IFF_UP)) &&
|
||||
(!(ifp->if_drv_flags & IFF_DRV_RUNNING))) {
|
||||
|
||||
if ((error = iicbus_request_bus(parent, icdev, IIC_WAIT|IIC_INTR)))
|
||||
return (error);
|
||||
@ -212,7 +214,7 @@ icioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
|
||||
iicbus_reset(parent, IIC_FASTEST, 0, NULL);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -382,7 +384,7 @@ icoutput(struct ifnet *ifp, struct mbuf *m,
|
||||
else
|
||||
hdr = dst->sa_family;
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
|
||||
s = splhigh();
|
||||
|
||||
|
@ -733,7 +733,7 @@ ipw_resume(device_t dev)
|
||||
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
ifp->if_init(ifp->if_softc);
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ifp->if_start(ifp);
|
||||
}
|
||||
|
||||
@ -756,7 +756,7 @@ ipw_media_change(struct ifnet *ifp)
|
||||
return error;
|
||||
}
|
||||
|
||||
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
|
||||
if ((ifp->if_flags & IFF_UP) && (ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
ipw_init(sc);
|
||||
|
||||
IPW_UNLOCK(sc);
|
||||
@ -1199,7 +1199,7 @@ ipw_tx_intr(struct ipw_softc *sc)
|
||||
/* remember what the firmware has processed */
|
||||
sc->txold = (r == 0) ? IPW_NTBD - 1 : r - 1;
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ipw_start(ifp);
|
||||
}
|
||||
|
||||
@ -1475,7 +1475,7 @@ ipw_start(struct ifnet *ifp)
|
||||
|
||||
if (sc->txfree < 1 + IPW_MAX_NSEG) {
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m0);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1549,10 +1549,10 @@ ipw_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
switch (cmd) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
ipw_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ipw_stop(sc);
|
||||
}
|
||||
break;
|
||||
@ -1581,8 +1581,8 @@ ipw_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
}
|
||||
|
||||
if (error == ENETRESET) {
|
||||
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
|
||||
(IFF_UP | IFF_RUNNING))
|
||||
if ((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
ipw_init(sc);
|
||||
error = 0;
|
||||
}
|
||||
@ -2090,8 +2090,8 @@ ipw_init(void *priv)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
|
||||
return;
|
||||
|
||||
@ -2119,7 +2119,7 @@ ipw_stop(void *priv)
|
||||
|
||||
sc->sc_tx_timer = 0;
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
|
||||
}
|
||||
|
@ -786,7 +786,7 @@ iwi_resume(device_t dev)
|
||||
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
ifp->if_init(ifp->if_softc);
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ifp->if_start(ifp);
|
||||
}
|
||||
|
||||
@ -809,7 +809,7 @@ iwi_media_change(struct ifnet *ifp)
|
||||
return error;
|
||||
}
|
||||
|
||||
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
|
||||
if ((ifp->if_flags & IFF_UP) && (ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
iwi_init(sc);
|
||||
|
||||
IWI_UNLOCK(sc);
|
||||
@ -1247,7 +1247,7 @@ iwi_tx_intr(struct iwi_softc *sc)
|
||||
}
|
||||
|
||||
sc->sc_tx_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
iwi_start(ifp);
|
||||
}
|
||||
|
||||
@ -1460,7 +1460,7 @@ iwi_start(struct ifnet *ifp)
|
||||
|
||||
if (sc->txq.queued >= IWI_TX_RING_COUNT - 4) {
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m0);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1538,10 +1538,10 @@ iwi_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
switch (cmd) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
iwi_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
iwi_stop(sc);
|
||||
}
|
||||
break;
|
||||
@ -1570,8 +1570,8 @@ iwi_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
}
|
||||
|
||||
if (error == ENETRESET) {
|
||||
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
|
||||
(IFF_UP | IFF_RUNNING))
|
||||
if ((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
iwi_init(sc);
|
||||
error = 0;
|
||||
}
|
||||
@ -2276,8 +2276,8 @@ iwi_init(void *priv)
|
||||
else
|
||||
ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
|
||||
return;
|
||||
|
||||
@ -2303,7 +2303,7 @@ iwi_stop(void *priv)
|
||||
|
||||
sc->sc_tx_timer = 0;
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
|
||||
}
|
||||
|
@ -401,7 +401,7 @@ ixgb_detach(device_t dev)
|
||||
if (adapter->prev != NULL)
|
||||
adapter->prev->next = adapter->next;
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
ifp->if_timer = 0;
|
||||
|
||||
IXGB_LOCK_DESTROY(adapter);
|
||||
@ -453,7 +453,7 @@ ixgb_start_locked(struct ifnet * ifp)
|
||||
break;
|
||||
|
||||
if (ixgb_encap(adapter, m_head)) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
break;
|
||||
}
|
||||
@ -525,13 +525,13 @@ ixgb_ioctl(struct ifnet * ifp, IOCTL_CMD_TYPE command, caddr_t data)
|
||||
IOCTL_DEBUGOUT("ioctl rcv'd: SIOCSIFFLAGS (Set Interface Flags)");
|
||||
IXGB_LOCK(adapter);
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
ixgb_init_locked(adapter);
|
||||
}
|
||||
ixgb_disable_promisc(adapter);
|
||||
ixgb_set_promisc(adapter);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
ixgb_stop(adapter);
|
||||
}
|
||||
}
|
||||
@ -540,7 +540,7 @@ ixgb_ioctl(struct ifnet * ifp, IOCTL_CMD_TYPE command, caddr_t data)
|
||||
case SIOCADDMULTI:
|
||||
case SIOCDELMULTI:
|
||||
IOCTL_DEBUGOUT("ioctl rcv'd: SIOC(ADD|DEL)MULTI");
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
IXGB_LOCK(adapter);
|
||||
ixgb_disable_intr(adapter);
|
||||
ixgb_set_multi(adapter);
|
||||
@ -561,7 +561,7 @@ ixgb_ioctl(struct ifnet * ifp, IOCTL_CMD_TYPE command, caddr_t data)
|
||||
ifp->if_capenable &= ~IFCAP_HWCSUM;
|
||||
else
|
||||
ifp->if_capenable |= IFCAP_HWCSUM;
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ixgb_init(adapter);
|
||||
}
|
||||
break;
|
||||
@ -597,7 +597,7 @@ ixgb_watchdog(struct ifnet * ifp)
|
||||
}
|
||||
printf("ixgb%d: watchdog timeout -- resetting\n", adapter->unit);
|
||||
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
|
||||
|
||||
ixgb_stop(adapter);
|
||||
@ -668,8 +668,8 @@ ixgb_init_locked(struct adapter *adapter)
|
||||
ixgb_set_promisc(adapter);
|
||||
|
||||
ifp = adapter->ifp;
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
|
||||
if (ifp->if_capenable & IFCAP_TXCSUM)
|
||||
@ -744,11 +744,12 @@ ixgb_poll_locked(struct ifnet * ifp, enum poll_cmd cmd, int count)
|
||||
adapter);
|
||||
}
|
||||
}
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
ixgb_process_receive_interrupts(adapter, count);
|
||||
ixgb_clean_transmit_interrupts(adapter);
|
||||
}
|
||||
if (ifp->if_flags & IFF_RUNNING && ifp->if_snd.ifq_head != NULL)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_snd.ifq_head != NULL)
|
||||
ixgb_start_locked(ifp);
|
||||
}
|
||||
|
||||
@ -826,7 +827,7 @@ ixgb_intr(void *arg)
|
||||
adapter);
|
||||
}
|
||||
while (loop_cnt > 0) {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
ixgb_process_receive_interrupts(adapter, -1);
|
||||
ixgb_clean_transmit_interrupts(adapter);
|
||||
}
|
||||
@ -837,7 +838,7 @@ ixgb_intr(void *arg)
|
||||
IXGB_WRITE_REG(&adapter->hw, IMC, IXGB_INT_RXDMT0);
|
||||
IXGB_WRITE_REG(&adapter->hw, IMS, IXGB_INT_RXDMT0);
|
||||
}
|
||||
if (ifp->if_flags & IFF_RUNNING && ifp->if_snd.ifq_head != NULL)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING && ifp->if_snd.ifq_head != NULL)
|
||||
ixgb_start_locked(ifp);
|
||||
|
||||
IXGB_UNLOCK(adapter);
|
||||
@ -1116,7 +1117,7 @@ ixgb_local_timer(void *arg)
|
||||
ixgb_check_for_link(&adapter->hw);
|
||||
ixgb_print_link_status(adapter);
|
||||
ixgb_update_stats_counters(adapter);
|
||||
if (ixgb_display_debug_stats && ifp->if_flags & IFF_RUNNING) {
|
||||
if (ixgb_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
ixgb_print_hw_stats(adapter);
|
||||
}
|
||||
callout_reset(&adapter->timer, 2 * hz, ixgb_local_timer, adapter);
|
||||
@ -1174,7 +1175,7 @@ ixgb_stop(void *arg)
|
||||
|
||||
|
||||
/* Tell the stack that the interface is no longer active */
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1733,7 +1734,7 @@ ixgb_clean_transmit_interrupts(struct adapter * adapter)
|
||||
adapter->oldest_used_tx_desc = i;
|
||||
|
||||
/*
|
||||
* If we have enough room, clear IFF_OACTIVE to tell the stack that
|
||||
* If we have enough room, clear IFF_DRV_OACTIVE to tell the stack that
|
||||
* it is OK to send packets. If there are no pending descriptors,
|
||||
* clear the timeout. Otherwise, if some descriptors have been freed,
|
||||
* restart the timeout.
|
||||
@ -1741,7 +1742,7 @@ ixgb_clean_transmit_interrupts(struct adapter * adapter)
|
||||
if (num_avail > IXGB_TX_CLEANUP_THRESHOLD) {
|
||||
struct ifnet *ifp = adapter->ifp;
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
if (num_avail == adapter->num_tx_desc)
|
||||
ifp->if_timer = 0;
|
||||
else if (num_avail == adapter->num_tx_desc_avail)
|
||||
|
@ -986,7 +986,7 @@ lge_rxeoc(sc)
|
||||
struct ifnet *ifp;
|
||||
|
||||
ifp = sc->lge_ifp;
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
lge_init(sc);
|
||||
return;
|
||||
}
|
||||
@ -1034,7 +1034,7 @@ lge_txeof(sc)
|
||||
sc->lge_cdata.lge_tx_cons = idx;
|
||||
|
||||
if (cur_tx != NULL)
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1204,7 +1204,7 @@ lge_start(ifp)
|
||||
|
||||
idx = sc->lge_cdata.lge_tx_prod;
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
|
||||
while(sc->lge_ldata->lge_tx_list[idx].lge_mbuf == NULL) {
|
||||
@ -1217,7 +1217,7 @@ lge_start(ifp)
|
||||
|
||||
if (lge_encap(sc, m_head, &idx)) {
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1247,7 +1247,7 @@ lge_init(xsc)
|
||||
struct mii_data *mii;
|
||||
int s;
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
s = splimp();
|
||||
@ -1363,8 +1363,8 @@ lge_init(xsc)
|
||||
|
||||
lge_ifmedia_upd(ifp);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
(void)splx(s);
|
||||
|
||||
@ -1441,23 +1441,23 @@ lge_ioctl(ifp, command, data)
|
||||
break;
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->lge_if_flags & IFF_PROMISC)) {
|
||||
CSR_WRITE_4(sc, LGE_MODE1,
|
||||
LGE_MODE1_SETRST_CTL1|
|
||||
LGE_MODE1_RX_PROMISC);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->lge_if_flags & IFF_PROMISC) {
|
||||
CSR_WRITE_4(sc, LGE_MODE1,
|
||||
LGE_MODE1_RX_PROMISC);
|
||||
} else {
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
lge_init(sc);
|
||||
}
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
lge_stop(sc);
|
||||
}
|
||||
sc->lge_if_flags = ifp->if_flags;
|
||||
@ -1496,7 +1496,7 @@ lge_watchdog(ifp)
|
||||
|
||||
lge_stop(sc);
|
||||
lge_reset(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
lge_init(sc);
|
||||
|
||||
if (ifp->if_snd.ifq_head != NULL)
|
||||
@ -1550,7 +1550,7 @@ lge_stop(sc)
|
||||
bzero((char *)&sc->lge_ldata->lge_tx_list,
|
||||
sizeof(sc->lge_ldata->lge_tx_list));
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -820,7 +820,7 @@ lnc_tint(struct lnc_softc *sc)
|
||||
* more packets again.
|
||||
*/
|
||||
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
lookahead++;
|
||||
|
||||
@ -1070,8 +1070,8 @@ printf("Enabling lnc interrupts\n");
|
||||
* running and transmit any pending packets.
|
||||
*/
|
||||
write_csr(sc, CSR0, STRT | INEA);
|
||||
sc->ifp->if_flags |= IFF_RUNNING;
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
lnc_start(sc->ifp);
|
||||
} else
|
||||
log(LOG_ERR, "%s: Initialisation failed\n",
|
||||
@ -1130,8 +1130,8 @@ lncintr(void *arg)
|
||||
printf("IDON\n");
|
||||
sc->ifp->if_timer = 0;
|
||||
write_csr(sc, CSR0, STRT | INEA);
|
||||
sc->ifp->if_flags |= IFF_RUNNING;
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
lnc_start(sc->ifp);
|
||||
continue;
|
||||
}
|
||||
@ -1174,7 +1174,7 @@ printf("IDON\n");
|
||||
* some more transmit packets.
|
||||
*/
|
||||
|
||||
if (!(sc->ifp->if_flags & IFF_OACTIVE))
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_OACTIVE))
|
||||
lnc_start(sc->ifp);
|
||||
}
|
||||
}
|
||||
@ -1213,9 +1213,9 @@ chain_to_cluster(struct mbuf *m)
|
||||
}
|
||||
|
||||
/*
|
||||
* IFF_OACTIVE and IFF_RUNNING are checked in ether_output so it's redundant
|
||||
* to check them again since we wouldn't have got here if they were not
|
||||
* appropriately set. This is also called from lnc_init and lncintr but the
|
||||
* IFF_DRV_OACTIVE and IFF_DRV_RUNNING are checked in ether_output so it's
|
||||
* redundant to check them again since we wouldn't have got here if they were
|
||||
* not appropriately set. This is also called from lnc_init and lncintr but the
|
||||
* flags should be ok at those points too.
|
||||
*/
|
||||
|
||||
@ -1366,11 +1366,11 @@ lnc_start(struct ifnet *ifp)
|
||||
} while (sc->pending_transmits < NDESC(sc->ntdre));
|
||||
|
||||
/*
|
||||
* Transmit ring is full so set IFF_OACTIVE
|
||||
* Transmit ring is full so set IFF_DRV_OACTIVE
|
||||
* since we can't buffer any more packets.
|
||||
*/
|
||||
|
||||
sc->ifp->if_flags |= IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
LNCSTATS(trans_ring_full)
|
||||
}
|
||||
|
||||
@ -1412,15 +1412,15 @@ lnc_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
|
||||
}
|
||||
|
||||
if ((ifp->if_flags & IFF_UP) == 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING) != 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
|
||||
/*
|
||||
* If interface is marked down and it is running,
|
||||
* then stop it.
|
||||
*/
|
||||
lnc_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
} else if ((ifp->if_flags & IFF_UP) != 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
/*
|
||||
* If interface is marked up and it is stopped, then
|
||||
* start it.
|
||||
|
@ -1322,7 +1322,7 @@ my_txeoc(struct my_softc * sc)
|
||||
ifp = sc->my_ifp;
|
||||
ifp->if_timer = 0;
|
||||
if (sc->my_cdata.my_tx_head == NULL) {
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
sc->my_cdata.my_tx_tail = NULL;
|
||||
if (sc->my_want_auto)
|
||||
my_autoneg_mii(sc, MY_FLAG_SCHEDDELAY, 1);
|
||||
@ -1480,7 +1480,7 @@ my_start(struct ifnet * ifp)
|
||||
* Check for an available queue slot. If there are none, punt.
|
||||
*/
|
||||
if (sc->my_cdata.my_tx_free->my_mbuf != NULL) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
MY_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -1627,8 +1627,8 @@ my_init(void *xsc)
|
||||
/* Restore state of BMCR */
|
||||
if (sc->my_pinfo != NULL)
|
||||
my_phy_writereg(sc, PHY_BMCR, phy_bmcr);
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
(void)splx(s);
|
||||
MY_UNLOCK(sc);
|
||||
return;
|
||||
@ -1733,7 +1733,7 @@ my_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP)
|
||||
my_init(sc);
|
||||
else if (ifp->if_flags & IFF_RUNNING)
|
||||
else if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
my_stop(sc);
|
||||
error = 0;
|
||||
break;
|
||||
@ -1822,7 +1822,7 @@ my_stop(struct my_softc * sc)
|
||||
}
|
||||
bzero((char *)&sc->my_ldata->my_tx_list,
|
||||
sizeof(sc->my_ldata->my_tx_list));
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
MY_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
|
@ -1291,7 +1291,7 @@ nge_txeof(sc)
|
||||
if (cur_tx->nge_mbuf != NULL) {
|
||||
m_freem(cur_tx->nge_mbuf);
|
||||
cur_tx->nge_mbuf = NULL;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
}
|
||||
|
||||
sc->nge_cdata.nge_tx_cnt--;
|
||||
@ -1484,7 +1484,7 @@ nge_intr(arg)
|
||||
|
||||
if (status & NGE_ISR_SYSERR) {
|
||||
nge_reset(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
nge_init_locked(sc);
|
||||
}
|
||||
|
||||
@ -1622,7 +1622,7 @@ nge_start_locked(ifp)
|
||||
|
||||
idx = sc->nge_cdata.nge_tx_prod;
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
|
||||
while(sc->nge_ldata->nge_tx_list[idx].nge_mbuf == NULL) {
|
||||
@ -1632,7 +1632,7 @@ nge_start_locked(ifp)
|
||||
|
||||
if (nge_encap(sc, m_head, &idx)) {
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1676,7 +1676,7 @@ nge_init_locked(sc)
|
||||
|
||||
NGE_LOCK_ASSERT(sc);
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
/*
|
||||
@ -1849,8 +1849,8 @@ nge_init_locked(sc)
|
||||
|
||||
nge_ifmedia_upd(ifp);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1999,13 +1999,13 @@ nge_ioctl(ifp, command, data)
|
||||
case SIOCSIFFLAGS:
|
||||
NGE_LOCK(sc);
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->nge_if_flags & IFF_PROMISC)) {
|
||||
NGE_SETBIT(sc, NGE_RXFILT_CTL,
|
||||
NGE_RXFILTCTL_ALLPHYS|
|
||||
NGE_RXFILTCTL_ALLMULTI);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->nge_if_flags & IFF_PROMISC) {
|
||||
NGE_CLRBIT(sc, NGE_RXFILT_CTL,
|
||||
@ -2014,11 +2014,11 @@ nge_ioctl(ifp, command, data)
|
||||
NGE_CLRBIT(sc, NGE_RXFILT_CTL,
|
||||
NGE_RXFILTCTL_ALLMULTI);
|
||||
} else {
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
nge_init_locked(sc);
|
||||
}
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
nge_stop(sc);
|
||||
}
|
||||
sc->nge_if_flags = ifp->if_flags;
|
||||
@ -2069,7 +2069,7 @@ nge_watchdog(ifp)
|
||||
NGE_LOCK(sc);
|
||||
nge_stop(sc);
|
||||
nge_reset(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
nge_init_locked(sc);
|
||||
|
||||
if (ifp->if_snd.ifq_head != NULL)
|
||||
@ -2142,7 +2142,7 @@ nge_stop(sc)
|
||||
bzero((char *)&sc->nge_ldata->nge_tx_list,
|
||||
sizeof(sc->nge_ldata->nge_tx_list));
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -621,7 +621,7 @@ nve_init(void *xsc)
|
||||
ifp = sc->ifp;
|
||||
|
||||
/* Do nothing if already running */
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
goto fail;
|
||||
|
||||
nve_stop(sc);
|
||||
@ -650,8 +650,8 @@ nve_init(void *xsc)
|
||||
nve_ifmedia_upd(ifp);
|
||||
|
||||
/* Update interface parameters */
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
sc->stat_ch = timeout(nve_tick, sc, hz);
|
||||
|
||||
@ -692,7 +692,7 @@ nve_stop(struct nve_softc *sc)
|
||||
sc->cur_rx = 0;
|
||||
sc->pending_rxs = 0;
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
DEBUGOUT(NVE_DEBUG_RUNNING, "nve: nve_stop - exit\n");
|
||||
|
||||
@ -840,7 +840,7 @@ nve_ifstart(struct ifnet *ifp)
|
||||
DEBUGOUT(NVE_DEBUG_RUNNING, "nve: nve_ifstart - entry\n");
|
||||
|
||||
/* If link is down/busy or queue is empty do nothing */
|
||||
if (ifp->if_flags & IFF_OACTIVE || ifp->if_snd.ifq_head == NULL)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE || ifp->if_snd.ifq_head == NULL)
|
||||
return;
|
||||
|
||||
/* Transmit queued packets until sent or TX ring is full */
|
||||
@ -916,7 +916,7 @@ nve_ifstart(struct ifnet *ifp)
|
||||
/* The API TX queue is full - requeue the packet */
|
||||
device_printf(sc->dev,
|
||||
"nve_ifstart: transmit queue is full\n");
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
bus_dmamap_unload(sc->mtag, buf->map);
|
||||
IF_PREPEND(&ifp->if_snd, buf->mbuf);
|
||||
buf->mbuf = NULL;
|
||||
@ -937,7 +937,7 @@ nve_ifstart(struct ifnet *ifp)
|
||||
/* Copy packet to BPF tap */
|
||||
BPF_MTAP(ifp, m0);
|
||||
}
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
DEBUGOUT(NVE_DEBUG_RUNNING, "nve: nve_ifstart - exit\n");
|
||||
}
|
||||
@ -971,12 +971,12 @@ nve_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
case SIOCSIFFLAGS:
|
||||
/* Setup interface flags */
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
nve_init(sc);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
nve_stop(sc);
|
||||
break;
|
||||
}
|
||||
@ -988,7 +988,7 @@ nve_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
case SIOCADDMULTI:
|
||||
case SIOCDELMULTI:
|
||||
/* Setup multicast filter */
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
nve_setmulti(sc);
|
||||
}
|
||||
break;
|
||||
@ -1250,7 +1250,7 @@ nve_watchdog(struct ifnet *ifp)
|
||||
sc->tx_errors++;
|
||||
|
||||
nve_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
nve_init(sc);
|
||||
|
||||
if (ifp->if_snd.ifq_head != NULL)
|
||||
@ -1491,7 +1491,7 @@ nve_ospackettx(PNV_VOID ctx, PNV_VOID id, NV_UINT32 success)
|
||||
|
||||
/* Send more packets if we have them */
|
||||
if (sc->pending_txs < TX_RING_SIZE)
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
if (ifp->if_snd.ifq_head != NULL && sc->pending_txs < TX_RING_SIZE)
|
||||
nve_ifstart(ifp);
|
||||
|
@ -669,7 +669,7 @@ wi_txeof(sc, status)
|
||||
ifp = sc->ifp;
|
||||
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
if (status & WI_EV_TX_EXC)
|
||||
ifp->if_oerrors++;
|
||||
@ -693,7 +693,7 @@ wi_inquire(xsc)
|
||||
sc->wi_stat_ch = timeout(wi_inquire, sc, hz * 60);
|
||||
|
||||
/* Don't do this while we're transmitting */
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
|
||||
WI_LOCK(sc, s);
|
||||
@ -1358,7 +1358,7 @@ wi_ioctl(ifp, command, data)
|
||||
* wi_init() by just setting PROMISC in the hardware.
|
||||
*/
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
if (ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->wi_if_flags & IFF_PROMISC)) {
|
||||
WI_SETVAL(WI_RID_PROMISC, 1);
|
||||
@ -1372,7 +1372,7 @@ wi_ioctl(ifp, command, data)
|
||||
wi_init(sc);
|
||||
}
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
owi_stop(sc);
|
||||
}
|
||||
}
|
||||
@ -1704,7 +1704,7 @@ wi_init(xsc)
|
||||
return;
|
||||
}
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
owi_stop(sc);
|
||||
|
||||
wi_reset(sc);
|
||||
@ -1792,8 +1792,8 @@ wi_init(xsc)
|
||||
/* enable interrupts */
|
||||
CSR_WRITE_2(sc, WI_INT_EN, WI_INTRS);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
sc->wi_stat_ch = timeout(wi_inquire, sc, hz * 60);
|
||||
WI_UNLOCK(sc, s);
|
||||
@ -1820,7 +1820,7 @@ wi_start(ifp)
|
||||
return;
|
||||
}
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE) {
|
||||
WI_UNLOCK(sc, s);
|
||||
return;
|
||||
}
|
||||
@ -1888,7 +1888,7 @@ wi_start(ifp)
|
||||
if (wi_cmd(sc, WI_CMD_TX|WI_RECLAIM, id, 0, 0))
|
||||
device_printf(sc->dev, "xmit failed\n");
|
||||
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Set a timeout in case the chip goes out to lunch.
|
||||
@ -1927,7 +1927,7 @@ owi_stop(sc)
|
||||
wi_cmd(sc, WI_CMD_DISABLE|sc->wi_portnum, 0, 0, 0);
|
||||
}
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING|IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING|IFF_DRV_OACTIVE);
|
||||
|
||||
WI_UNLOCK(sc, s);
|
||||
return;
|
||||
|
@ -204,7 +204,7 @@ patm_initialize(struct patm_softc *sc)
|
||||
patm_debug(sc, ATTACH, "go...");
|
||||
|
||||
sc->utopia.flags &= ~UTP_FL_POLL_CARRIER;
|
||||
sc->ifp->if_flags |= IFF_RUNNING;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
|
||||
/* enable interrupts, Tx and Rx paths */
|
||||
cfg |= IDT_CFG_RXPTH | IDT_CFG_RXIIMM | IDT_CFG_RAWIE | IDT_CFG_RQFIE |
|
||||
@ -245,7 +245,7 @@ patm_stop(struct patm_softc *sc)
|
||||
struct patm_txmap *map;
|
||||
struct patm_scd *scd;
|
||||
|
||||
sc->ifp->if_flags &= ~IFF_RUNNING;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
sc->utopia.flags |= UTP_FL_POLL_CARRIER;
|
||||
|
||||
patm_reset(sc);
|
||||
@ -265,7 +265,7 @@ patm_stop(struct patm_softc *sc)
|
||||
|
||||
/*
|
||||
* Give any waiters on closing a VCC a chance. They will stop
|
||||
* to wait if they see that IFF_RUNNING disappeared.
|
||||
* to wait if they see that IFF_DRV_RUNNING disappeared.
|
||||
*/
|
||||
cv_broadcast(&sc->vcc_cv);
|
||||
|
||||
|
@ -119,7 +119,7 @@ patm_intr(void *p)
|
||||
stat = patm_nor_read(sc, IDT_NOR_STAT);
|
||||
patm_nor_write(sc, IDT_NOR_STAT, stat & (ints | fbqa));
|
||||
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
/* if we are stopped ack all interrupts and handle PHYI */
|
||||
if (stat & IDT_STAT_PHYI) {
|
||||
patm_debug(sc, INTR, "PHYI (stopped)");
|
||||
|
@ -107,7 +107,7 @@ patm_open_vcc(struct patm_softc *sc, struct atmio_openvcc *arg)
|
||||
return (ENOMEM);
|
||||
|
||||
mtx_lock(&sc->mtx);
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
/* stopped while we have analyzed the arguments */
|
||||
error = EIO;
|
||||
goto done;
|
||||
@ -224,7 +224,7 @@ patm_close_vcc(struct patm_softc *sc, struct atmio_closevcc *arg)
|
||||
cid = PATM_CID(sc, arg->vpi, arg->vci);
|
||||
|
||||
mtx_lock(&sc->mtx);
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
/* stopped while we have analyzed the arguments */
|
||||
error = EIO;
|
||||
goto done;
|
||||
@ -246,7 +246,7 @@ patm_close_vcc(struct patm_softc *sc, struct atmio_closevcc *arg)
|
||||
|
||||
while (vcc->vflags & (PATM_VCC_TX_CLOSING | PATM_VCC_RX_CLOSING)) {
|
||||
cv_wait(&sc->vcc_cv, &sc->mtx);
|
||||
if (!(sc->ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(sc->ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
/* ups, has been stopped */
|
||||
error = EIO;
|
||||
goto done;
|
||||
@ -299,7 +299,7 @@ patm_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFADDR:
|
||||
mtx_lock(&sc->mtx);
|
||||
ifp->if_flags |= IFF_UP;
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
patm_initialize(sc);
|
||||
switch (ifa->ifa_addr->sa_family) {
|
||||
|
||||
@ -318,11 +318,11 @@ patm_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFFLAGS:
|
||||
mtx_lock(&sc->mtx);
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
patm_initialize(sc);
|
||||
}
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
patm_stop(sc);
|
||||
}
|
||||
}
|
||||
@ -339,7 +339,7 @@ patm_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
* null cells of it gets the timing wrong.
|
||||
*/
|
||||
mtx_lock(&sc->mtx);
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
if (sc->utopia.state & UTP_ST_UNASS) {
|
||||
if (!(sc->flags & PATM_UNASS)) {
|
||||
cfg = patm_nor_read(sc, IDT_NOR_CFG);
|
||||
|
@ -289,7 +289,7 @@ patm_start(struct ifnet *ifp)
|
||||
struct patm_vcc *vcc;
|
||||
|
||||
mtx_lock(&sc->mtx);
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
mtx_unlock(&sc->mtx);
|
||||
return;
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ pdq_ifinit(
|
||||
pdq_softc_t *sc)
|
||||
{
|
||||
if (PDQ_IFNET(sc)->if_flags & IFF_UP) {
|
||||
PDQ_IFNET(sc)->if_flags |= IFF_RUNNING;
|
||||
PDQ_IFNET(sc)->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
if (PDQ_IFNET(sc)->if_flags & IFF_PROMISC) {
|
||||
sc->sc_pdq->pdq_flags |= PDQ_PROMISC;
|
||||
} else {
|
||||
@ -88,7 +88,7 @@ pdq_ifinit(
|
||||
sc->sc_pdq->pdq_flags |= PDQ_RUNNING;
|
||||
pdq_run(sc->sc_pdq);
|
||||
} else {
|
||||
PDQ_IFNET(sc)->if_flags &= ~IFF_RUNNING;
|
||||
PDQ_IFNET(sc)->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
sc->sc_pdq->pdq_flags &= ~PDQ_RUNNING;
|
||||
pdq_stop(sc->sc_pdq);
|
||||
}
|
||||
@ -103,7 +103,7 @@ pdq_ifwatchdog(
|
||||
* seconds. Remove all queued packets.
|
||||
*/
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_timer = 0;
|
||||
for (;;) {
|
||||
struct mbuf *m;
|
||||
@ -122,14 +122,14 @@ pdq_ifstart(
|
||||
struct mbuf *m;
|
||||
int tx = 0;
|
||||
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
return;
|
||||
|
||||
if (PDQ_IFNET(sc)->if_timer == 0)
|
||||
PDQ_IFNET(sc)->if_timer = PDQ_OS_TX_TIMEOUT;
|
||||
|
||||
if ((sc->sc_pdq->pdq_flags & PDQ_TXOK) == 0) {
|
||||
PDQ_IFNET(sc)->if_flags |= IFF_OACTIVE;
|
||||
PDQ_IFNET(sc)->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
sc->sc_flags |= PDQIF_DOWNCALL;
|
||||
@ -170,7 +170,7 @@ pdq_ifstart(
|
||||
break;
|
||||
}
|
||||
if (m != NULL) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
IF_PREPEND(&ifp->if_snd, m);
|
||||
}
|
||||
if (tx)
|
||||
@ -226,7 +226,7 @@ pdq_os_restart_transmitter(
|
||||
pdq_t *pdq)
|
||||
{
|
||||
pdq_softc_t *sc = pdq->pdq_os_ctx;
|
||||
PDQ_IFNET(sc)->if_flags &= ~IFF_OACTIVE;
|
||||
PDQ_IFNET(sc)->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
if (IFQ_IS_EMPTY(&PDQ_IFNET(sc)->if_snd) == 0) {
|
||||
PDQ_IFNET(sc)->if_timer = PDQ_OS_TX_TIMEOUT;
|
||||
if ((sc->sc_flags & PDQIF_DOWNCALL) == 0)
|
||||
@ -379,7 +379,7 @@ pdq_ifioctl(
|
||||
|
||||
case SIOCADDMULTI:
|
||||
case SIOCDELMULTI: {
|
||||
if (PDQ_IFNET(sc)->if_flags & IFF_RUNNING) {
|
||||
if (PDQ_IFNET(sc)->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
pdq_run(sc->sc_pdq);
|
||||
error = 0;
|
||||
}
|
||||
|
@ -321,16 +321,18 @@ lpioctl (struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
ifp->if_flags |= IFF_UP;
|
||||
/* FALLTHROUGH */
|
||||
case SIOCSIFFLAGS:
|
||||
if ((!(ifp->if_flags & IFF_UP)) && (ifp->if_flags & IFF_RUNNING)) {
|
||||
if ((!(ifp->if_flags & IFF_UP)) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
|
||||
ppb_wctr(ppbus, 0x00);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
|
||||
/* IFF_UP is not set, try to release the bus anyway */
|
||||
ppb_release_bus(ppbus, dev);
|
||||
break;
|
||||
}
|
||||
if (((ifp->if_flags & IFF_UP)) && (!(ifp->if_flags & IFF_RUNNING))) {
|
||||
if (((ifp->if_flags & IFF_UP)) &&
|
||||
(!(ifp->if_drv_flags & IFF_DRV_RUNNING))) {
|
||||
|
||||
/* XXX
|
||||
* Should the request be interruptible?
|
||||
@ -362,7 +364,7 @@ lpioctl (struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
}
|
||||
|
||||
ppb_wctr(ppbus, IRQENABLE);
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -577,7 +579,7 @@ lp_intr (void *arg)
|
||||
if (sc->sc_iferrs > LPMAXERRS) {
|
||||
printf("lp%d: Too many errors, Going off-line.\n", device_get_unit(dev));
|
||||
ppb_wctr(ppbus, 0x00);
|
||||
sc->sc_ifp->if_flags &= ~IFF_RUNNING;
|
||||
sc->sc_ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
sc->sc_iferrs=0;
|
||||
}
|
||||
|
||||
@ -615,7 +617,7 @@ lpoutput (struct ifnet *ifp, struct mbuf *m,
|
||||
|
||||
/* We need a sensible value if we abort */
|
||||
cp++;
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
|
||||
err = 1; /* assume we're aborting because of an error */
|
||||
|
||||
|
@ -915,7 +915,8 @@ ral_media_change(struct ifnet *ifp)
|
||||
if (error != ENETRESET)
|
||||
return error;
|
||||
|
||||
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
|
||||
if ((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
ral_init(sc);
|
||||
|
||||
return 0;
|
||||
@ -1220,7 +1221,7 @@ ral_tx_intr(struct ral_softc *sc)
|
||||
BUS_DMASYNC_PREWRITE);
|
||||
|
||||
sc->sc_tx_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ral_start(ifp);
|
||||
}
|
||||
|
||||
@ -1286,7 +1287,7 @@ ral_prio_intr(struct ral_softc *sc)
|
||||
BUS_DMASYNC_PREWRITE);
|
||||
|
||||
sc->sc_tx_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ral_start(ifp);
|
||||
}
|
||||
|
||||
@ -2058,7 +2059,7 @@ ral_start(struct ifnet *ifp)
|
||||
IF_POLL(&ic->ic_mgtq, m0);
|
||||
if (m0 != NULL) {
|
||||
if (sc->prioq.queued >= RAL_PRIO_RING_COUNT) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
IF_DEQUEUE(&ic->ic_mgtq, m0);
|
||||
@ -2080,7 +2081,7 @@ ral_start(struct ifnet *ifp)
|
||||
break;
|
||||
if (sc->txq.queued >= RAL_TX_RING_COUNT - 1) {
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m0);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2176,12 +2177,12 @@ ral_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
switch (cmd) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ral_update_promisc(sc);
|
||||
else
|
||||
ral_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ral_stop(sc);
|
||||
}
|
||||
break;
|
||||
@ -2191,8 +2192,8 @@ ral_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
}
|
||||
|
||||
if (error == ENETRESET) {
|
||||
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
|
||||
(IFF_UP | IFF_RUNNING))
|
||||
if ((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
ral_init(sc);
|
||||
error = 0;
|
||||
}
|
||||
@ -2761,8 +2762,8 @@ ral_init(void *priv)
|
||||
/* enable interrupts */
|
||||
RAL_WRITE(sc, RAL_CSR8, RAL_INTR_MASK);
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
|
||||
if (ic->ic_opmode == IEEE80211_M_MONITOR)
|
||||
ieee80211_new_state(ic, IEEE80211_S_RUN, -1);
|
||||
@ -2782,7 +2783,7 @@ ral_stop(void *priv)
|
||||
|
||||
sc->sc_tx_timer = 0;
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
/* abort Tx */
|
||||
RAL_WRITE(sc, RAL_TXCSR0, RAL_ABORT_TX);
|
||||
|
@ -160,7 +160,7 @@ ral_pci_resume(device_t dev)
|
||||
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
ifp->if_init(ifp->if_softc);
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ifp->if_start(ifp);
|
||||
}
|
||||
|
||||
|
@ -602,7 +602,7 @@ ray_detach(device_t dev)
|
||||
*/
|
||||
sc->sc_gone = 1;
|
||||
sc->sc_c.np_havenet = 0;
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
ether_ifdetach(ifp);
|
||||
if_free(ifp);
|
||||
|
||||
@ -769,7 +769,7 @@ ray_init(void *xsc)
|
||||
* Returns values are either 0 for success, a varity of resource allocation
|
||||
* failures or errors in the command sent to the card.
|
||||
*
|
||||
* Note, IFF_RUNNING is eventually set by init_sj_done or init_assoc_done
|
||||
* Note, IFF_DRV_RUNNING is eventually set by init_sj_done or init_assoc_done
|
||||
*/
|
||||
static int
|
||||
ray_init_user(struct ray_softc *sc)
|
||||
@ -792,7 +792,7 @@ ray_init_user(struct ray_softc *sc)
|
||||
* We may enter this routine from a simple change of IP
|
||||
* address and do not need to get the card to do these things.
|
||||
* However, we cannot perform the check here as there may be
|
||||
* commands in the runq that change the IFF_RUNNING state of
|
||||
* commands in the runq that change the IFF_DRV_RUNNING state of
|
||||
* the interface.
|
||||
*/
|
||||
ncom = 0;
|
||||
@ -1156,15 +1156,15 @@ ray_init_sj_done(struct ray_softc *sc, u_int8_t status, size_t ccs)
|
||||
/*
|
||||
* Hurrah! The network is now active.
|
||||
*
|
||||
* Clearing IFF_OACTIVE will ensure that the system will send us
|
||||
* Clearing IFF_DRV_OACTIVE will ensure that the system will send us
|
||||
* packets. Just before we return from the interrupt context
|
||||
* we check to see if packets have been queued.
|
||||
*/
|
||||
if (SRAM_READ_FIELD_1(sc, ccs, ray_cmd, c_cmd) == RAY_CMD_START_NET) {
|
||||
sc->sc_c.np_havenet = 1;
|
||||
sc->sc_c.np_framing = sc->sc_d.np_framing;
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
}
|
||||
|
||||
ray_com_ecf_done(sc);
|
||||
@ -1313,14 +1313,14 @@ ray_init_assoc_done(struct ray_softc *sc, u_int8_t status, size_t ccs)
|
||||
/*
|
||||
* Hurrah! The network is now active.
|
||||
*
|
||||
* Clearing IFF_OACTIVE will ensure that the system will send us
|
||||
* Clearing IFF_DRV_OACTIVE will ensure that the system will send us
|
||||
* packets. Just before we return from the interrupt context
|
||||
* we check to see if packets have been queued.
|
||||
*/
|
||||
sc->sc_c.np_havenet = 1;
|
||||
sc->sc_c.np_framing = sc->sc_d.np_framing;
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
ray_com_ecf_done(sc);
|
||||
}
|
||||
@ -1371,7 +1371,7 @@ ray_stop(struct ray_softc *sc, struct ray_comq_entry *com)
|
||||
/*
|
||||
* Mark as not running and drain output queue
|
||||
*/
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
ifp->if_timer = 0;
|
||||
for (;;) {
|
||||
IF_DEQUEUE(&ifp->if_snd, m);
|
||||
@ -1408,7 +1408,7 @@ ray_watchdog(struct ifnet *ifp)
|
||||
* 1) That the current priority is set to splimp _before_ this code
|
||||
* is called *and* is returned to the appropriate priority after
|
||||
* return
|
||||
* 2) That the IFF_OACTIVE flag is checked before this code is called
|
||||
* 2) That the IFF_DRV_OACTIVE flag is checked before this code is called
|
||||
* (i.e. that the output part of the interface is idle)
|
||||
*
|
||||
* A simple one packet at a time TX routine is used - we don't bother
|
||||
@ -1447,7 +1447,7 @@ ray_tx(struct ifnet *ifp)
|
||||
*/
|
||||
if ((sc == NULL) || (sc->sc_gone))
|
||||
return;
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
RAY_RECERR(sc, "cannot transmit - not running");
|
||||
return;
|
||||
}
|
||||
@ -1473,7 +1473,7 @@ ray_tx(struct ifnet *ifp)
|
||||
* errors and the packet wouldn't get through anyway.
|
||||
*/
|
||||
if (ray_ccs_tx(sc, &ccs, &bufp)) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1628,7 +1628,7 @@ ray_tx_timo(void *xsc)
|
||||
|
||||
RAY_DPRINTF(sc, RAY_DBG_SUBR, "");
|
||||
|
||||
if (!(ifp->if_flags & IFF_OACTIVE) && (ifp->if_snd.ifq_head != NULL)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_OACTIVE) && (ifp->if_snd.ifq_head != NULL)) {
|
||||
s = splimp();
|
||||
ray_tx(ifp);
|
||||
splx(s);
|
||||
@ -1746,8 +1746,8 @@ ray_tx_done(struct ray_softc *sc, u_int8_t status, size_t ccs)
|
||||
|
||||
RAY_CCS_FREE(sc, ccs);
|
||||
ifp->if_timer = 0;
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2490,7 +2490,7 @@ ray_intr(void *xsc)
|
||||
}
|
||||
|
||||
/* Send any packets lying around and update error counters */
|
||||
if (!(ifp->if_flags & IFF_OACTIVE) && (ifp->if_snd.ifq_head != NULL))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_OACTIVE) && (ifp->if_snd.ifq_head != NULL))
|
||||
ray_tx(ifp);
|
||||
if ((++sc->sc_checkcounters % 32) == 0)
|
||||
ray_intr_updt_errcntrs(sc);
|
||||
@ -2694,7 +2694,7 @@ ray_mcast(struct ray_softc *sc, struct ray_comq_entry *com)
|
||||
/*
|
||||
* If card is not running we don't need to update this.
|
||||
*/
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
RAY_DPRINTF(sc, RAY_DBG_IOCTL, "not running");
|
||||
ray_com_runq_done(sc);
|
||||
return;
|
||||
@ -2770,7 +2770,7 @@ ray_promisc(struct ray_softc *sc, struct ray_comq_entry *com)
|
||||
* we don't need to update this
|
||||
*/
|
||||
sc->sc_d.np_promisc = !!(ifp->if_flags & (IFF_PROMISC | IFF_ALLMULTI));
|
||||
if (!(ifp->if_flags & IFF_RUNNING) ||
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING) ||
|
||||
(sc->sc_c.np_promisc == sc->sc_d.np_promisc)) {
|
||||
ray_com_runq_done(sc);
|
||||
return;
|
||||
@ -3317,7 +3317,7 @@ ray_com_runq_done(struct ray_softc *sc)
|
||||
/* XXX what about error on completion then? deal with when i fix
|
||||
* XXX the status checking
|
||||
*
|
||||
* XXX all the runq_done calls from IFF_RUNNING checks in runq
|
||||
* XXX all the runq_done calls from IFF_DRV_RUNNING checks in runq
|
||||
* XXX routines should return EIO but shouldn't abort the runq
|
||||
*/
|
||||
}
|
||||
|
@ -191,7 +191,7 @@ static int mib_info[RAY_MIB_MAX+1][3] = RAY_MIB_INFO;
|
||||
#define RAY_COM_FRUNNING 0x0002 /* This one running */
|
||||
#define RAY_COM_FCOMPLETED 0x0004 /* This one completed */
|
||||
#define RAY_COM_FWAIT 0x0008 /* Do not run the queue */
|
||||
#define RAY_COM_FCHKRUNNING 0x0010 /* Check IFF_RUNNING */
|
||||
#define RAY_COM_FCHKRUNNING 0x0010 /* Check IFF_DRV_RUNNING*/
|
||||
#define RAY_COM_FDETACHED 0x0020 /* Card is gone */
|
||||
#define RAY_COM_FWOKEN 0x0040 /* Woken by detach */
|
||||
#define RAY_COM_FLAGS_PRINTFB \
|
||||
@ -272,13 +272,13 @@ static int mib_info[RAY_MIB_MAX+1][3] = RAY_MIB_INFO;
|
||||
* of a change to the cards operating parameters (e.g. BSSID change), and
|
||||
* b) those that happen as a result of a change to the interface parameters
|
||||
* (e.g. a change to the IP address). The second set of entries need not
|
||||
* send a command to the card when the card is IFF_RUNNING. The
|
||||
* send a command to the card when the card is IFF_DRV_RUNNING. The
|
||||
* RAY_COM_FCHKRUNNING flags indicates when the RUNNING flag should be
|
||||
* checked, and this macro does the necessary check and command abort.
|
||||
*/
|
||||
#define RAY_COM_CHKRUNNING(sc, com, ifp) do { \
|
||||
if (((com)->c_flags & RAY_COM_FCHKRUNNING) && \
|
||||
((ifp)->if_flags & IFF_RUNNING)) { \
|
||||
((ifp)->if_drv_flags & IFF_DRV_RUNNING)) { \
|
||||
ray_com_runq_done(sc); \
|
||||
return; \
|
||||
} } while (0)
|
||||
|
@ -1731,7 +1731,7 @@ re_txeof(sc)
|
||||
|
||||
if (idx != sc->rl_ldata.rl_tx_considx) {
|
||||
sc->rl_ldata.rl_tx_considx = idx;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_timer = 0;
|
||||
}
|
||||
|
||||
@ -2039,7 +2039,7 @@ re_start_locked(ifp)
|
||||
|
||||
if (re_encap(sc, &m_head, &idx)) {
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2257,8 +2257,8 @@ re_init_locked(sc)
|
||||
|
||||
CSR_WRITE_1(sc, RL_CFG1, RL_CFG1_DRVLOAD|RL_CFG1_FULLDUPLEX);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
sc->rl_stat_ch = timeout(re_tick, sc, hz);
|
||||
}
|
||||
@ -2320,7 +2320,7 @@ re_ioctl(ifp, command, data)
|
||||
RL_LOCK(sc);
|
||||
if (ifp->if_flags & IFF_UP)
|
||||
re_init_locked(sc);
|
||||
else if (ifp->if_flags & IFF_RUNNING)
|
||||
else if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
re_stop(sc);
|
||||
RL_UNLOCK(sc);
|
||||
error = 0;
|
||||
@ -2345,7 +2345,7 @@ re_ioctl(ifp, command, data)
|
||||
ifp->if_hwassist = RE_CSUM_FEATURES;
|
||||
else
|
||||
ifp->if_hwassist = 0;
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
re_init(sc);
|
||||
break;
|
||||
default:
|
||||
@ -2391,7 +2391,7 @@ re_stop(sc)
|
||||
ifp->if_timer = 0;
|
||||
|
||||
untimeout(re_tick, sc, sc->rl_stat_ch);
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
#ifdef DEVICE_POLLING
|
||||
ether_poll_deregister(ifp);
|
||||
#endif /* DEVICE_POLLING */
|
||||
|
@ -271,7 +271,7 @@ sbni_init(void *xsc)
|
||||
* kludge to avoid multiple initialization when more than once
|
||||
* protocols configured
|
||||
*/
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
s = splimp();
|
||||
@ -279,8 +279,8 @@ sbni_init(void *xsc)
|
||||
card_start(sc);
|
||||
sc->wch = timeout(sbni_timeout, sc, hz/SBNI_HZ);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/* attempt to start output */
|
||||
sbni_start(ifp);
|
||||
@ -669,7 +669,7 @@ prepare_to_send(struct sbni_softc *sc)
|
||||
sc->pktlen = 0;
|
||||
sc->tx_frameno = 0;
|
||||
sc->framelen = 0;
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -689,7 +689,7 @@ prepare_to_send(struct sbni_softc *sc)
|
||||
sc->framelen = min(len, sc->maxframe);
|
||||
|
||||
sbni_outb(sc, CSR0, sbni_inb(sc, CSR0) | TR_REQ);
|
||||
sc->ifp->if_flags |= IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
BPF_MTAP(sc->ifp, sc->tx_buf_p);
|
||||
}
|
||||
|
||||
@ -717,7 +717,7 @@ drop_xmit_queue(struct sbni_softc *sc)
|
||||
sc->framelen = 0;
|
||||
sc->outpos = 0;
|
||||
sc->state &= ~(FL_WAIT_ACK | FL_NEED_RESEND);
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
}
|
||||
|
||||
|
||||
@ -1062,12 +1062,12 @@ sbni_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
* If it is marked down and running, then stop it.
|
||||
*/
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
sbni_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
sbni_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -345,7 +345,7 @@ sbsh_init(void *xsc)
|
||||
int s;
|
||||
u_int8_t t;
|
||||
|
||||
if ((ifp->if_flags & IFF_RUNNING) || sc->state == NOT_LOADED)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) || sc->state == NOT_LOADED)
|
||||
return;
|
||||
|
||||
s = splimp();
|
||||
@ -360,8 +360,8 @@ sbsh_init(void *xsc)
|
||||
if (issue_cx28975_cmd(sc, _DSL_ACTIVATION, &t, 1) == 0) {
|
||||
sc->state = ACTIVATION;
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
}
|
||||
|
||||
splx(s);
|
||||
@ -488,7 +488,7 @@ sbsh_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
if (sc->state == NOT_LOADED) {
|
||||
if_printf(ifp, "firmware wasn't loaded\n");
|
||||
error = EBUSY;
|
||||
@ -496,9 +496,9 @@ sbsh_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
sbsh_init(sc);
|
||||
}
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
sbsh_stop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -658,9 +658,9 @@ start_xmit_frames(struct sbsh_softc *sc)
|
||||
}
|
||||
|
||||
if (sc->regs->CTDR != sc->regs->LTDR)
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
else
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -231,7 +231,7 @@ sn_detach(device_t dev)
|
||||
struct ifnet *ifp = sc->ifp;
|
||||
|
||||
snstop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
ether_ifdetach(ifp);
|
||||
if_free(ifp);
|
||||
sn_deactivate(dev);
|
||||
@ -337,8 +337,8 @@ sninit_locked(void *xsc)
|
||||
/*
|
||||
* Mark the interface running but not active.
|
||||
*/
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Attempt to push out any waiting packets.
|
||||
@ -373,7 +373,7 @@ snstart_locked(struct ifnet *ifp)
|
||||
|
||||
SN_ASSERT_LOCKED(sc);
|
||||
|
||||
if (sc->ifp->if_flags & IFF_OACTIVE)
|
||||
if (sc->ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
if (sc->pages_wanted != -1) {
|
||||
if_printf(ifp, "snstart() while memory allocation pending\n");
|
||||
@ -461,7 +461,7 @@ startagain:
|
||||
sc->intr_mask = mask;
|
||||
|
||||
sc->ifp->if_timer = 1;
|
||||
sc->ifp->if_flags |= IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
sc->pages_wanted = numPages;
|
||||
return;
|
||||
}
|
||||
@ -544,7 +544,7 @@ startagain:
|
||||
|
||||
CSR_WRITE_2(sc, MMU_CMD_REG_W, MMUCR_ENQUEUE);
|
||||
|
||||
sc->ifp->if_flags |= IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
sc->ifp->if_timer = 1;
|
||||
|
||||
BPF_MTAP(ifp, top);
|
||||
@ -751,14 +751,14 @@ try_start:
|
||||
/*
|
||||
* Now pass control to snstart() to queue any additional packets
|
||||
*/
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
snstart(ifp);
|
||||
|
||||
/*
|
||||
* We've sent something, so we're active. Set a watchdog in case the
|
||||
* TX_EMPTY interrupt is lost.
|
||||
*/
|
||||
sc->ifp->if_flags |= IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
sc->ifp->if_timer = 1;
|
||||
|
||||
return;
|
||||
@ -845,7 +845,7 @@ sn_intr(void *arg)
|
||||
* Disable this interrupt.
|
||||
*/
|
||||
mask &= ~IM_ALLOC_INT;
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
snresume(sc->ifp);
|
||||
}
|
||||
/*
|
||||
@ -912,7 +912,7 @@ sn_intr(void *arg)
|
||||
/*
|
||||
* Attempt to queue more transmits.
|
||||
*/
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
snstart_locked(sc->ifp);
|
||||
}
|
||||
/*
|
||||
@ -950,7 +950,7 @@ sn_intr(void *arg)
|
||||
/*
|
||||
* Attempt to enqueue some more stuff.
|
||||
*/
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
snstart_locked(sc->ifp);
|
||||
}
|
||||
/*
|
||||
@ -1131,8 +1131,9 @@ snioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
switch (cmd) {
|
||||
case SIOCSIFFLAGS:
|
||||
SN_LOCK(sc);
|
||||
if ((ifp->if_flags & IFF_UP) == 0 && ifp->if_flags & IFF_RUNNING) {
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
if ((ifp->if_flags & IFF_UP) == 0 &&
|
||||
ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
snstop(sc);
|
||||
} else {
|
||||
/* reinitialize card on any parameter change */
|
||||
|
@ -266,16 +266,16 @@ sncioctl(ifp, cmd, data)
|
||||
|
||||
case SIOCSIFFLAGS:
|
||||
if ((ifp->if_flags & IFF_UP) == 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING) != 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
|
||||
/*
|
||||
* If interface is marked down and it is running,
|
||||
* then stop it.
|
||||
*/
|
||||
sncstop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
snc_disable(sc);
|
||||
} else if ((ifp->if_flags & IFF_UP) != 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
/*
|
||||
* If interface is marked up and it is stopped,
|
||||
* then start it.
|
||||
@ -330,7 +330,8 @@ sncstart(ifp)
|
||||
struct mbuf *m;
|
||||
int mtd_next;
|
||||
|
||||
if ((ifp->if_flags & (IFF_RUNNING | IFF_OACTIVE)) != IFF_RUNNING)
|
||||
if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
|
||||
IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
outloop:
|
||||
@ -339,7 +340,7 @@ outloop:
|
||||
mtd_next = 0;
|
||||
|
||||
if (mtd_next == sc->mtd_hw) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -399,7 +400,7 @@ sncinit(xsc)
|
||||
u_long s_rcr;
|
||||
int s;
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
/* already running */
|
||||
return;
|
||||
|
||||
@ -451,8 +452,8 @@ sncinit(xsc)
|
||||
wbflush();
|
||||
|
||||
/* flag interface as "running" */
|
||||
sc->sc_ifp->if_flags |= IFF_RUNNING;
|
||||
sc->sc_ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->sc_ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
sc->sc_ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
splx(s);
|
||||
return;
|
||||
@ -485,7 +486,8 @@ sncstop(sc)
|
||||
}
|
||||
|
||||
sc->sc_ifp->if_timer = 0;
|
||||
sc->sc_ifp->if_flags &= ~(IFF_RUNNING | IFF_UP);
|
||||
sc->sc_ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
sc->sc_ifp->if_flags &= ~IFF_UP;
|
||||
|
||||
splx(s);
|
||||
return (0);
|
||||
@ -939,7 +941,7 @@ sonictxint(sc)
|
||||
}
|
||||
#endif /* SNCDEBUG */
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
if (mtd->mtd_mbuf != 0) {
|
||||
m_freem(mtd->mtd_mbuf);
|
||||
|
@ -95,7 +95,7 @@ snc_pccard_detach(device_t dev)
|
||||
return (0);
|
||||
}
|
||||
sncshutdown(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
if_detach(ifp);
|
||||
sc->gone = 1;
|
||||
bus_teardown_intr(dev, sc->irq, sc->irq_handle);
|
||||
|
@ -744,7 +744,7 @@ sr_xmit(struct sr_softc *sc)
|
||||
* This function only place the data in the oncard buffers. It does not
|
||||
* start the transmition. sr_xmit() does that.
|
||||
*
|
||||
* Transmitter idle state is indicated by the IFF_OACTIVE flag.
|
||||
* Transmitter idle state is indicated by the IFF_DRV_OACTIVE flag.
|
||||
* The function that clears that should ensure that the transmitter
|
||||
* and its DMA is in a "good" idle state.
|
||||
*/
|
||||
@ -773,7 +773,7 @@ srstart(struct sr_softc *sc)
|
||||
printf("sr: srstart( ifp=%08x)\n", ifp);
|
||||
#endif
|
||||
sc = ifp->if_softc;
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
return;
|
||||
#endif /* NETGRAPH */
|
||||
hc = sc->hc;
|
||||
@ -799,9 +799,9 @@ top_srstart:
|
||||
*/
|
||||
if (sc->txb_inuse == SR_TX_BLOCKS) { /* out of space? */
|
||||
#ifndef NETGRAPH
|
||||
ifp->if_flags |= IFF_OACTIVE; /* yes, mark active */
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE; /* yes, mark active */
|
||||
#else
|
||||
/*ifp->if_flags |= IFF_OACTIVE;*/ /* yes, mark active */
|
||||
/*ifp->if_drv_flags |= IFF_DRV_OACTIVE;*/ /* yes, mark active */
|
||||
#endif /* NETGRAPH */
|
||||
|
||||
if (hc->mempages)
|
||||
@ -1009,7 +1009,7 @@ srioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
ifp, cmd, data);
|
||||
#endif
|
||||
|
||||
was_up = ifp->if_flags & IFF_RUNNING;
|
||||
was_up = ifp->if_drv_flags & IFF_DRV_RUNNING;
|
||||
|
||||
error = sppp_ioctl(ifp, cmd, data);
|
||||
|
||||
@ -1048,7 +1048,7 @@ srioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
}
|
||||
|
||||
s = splimp();
|
||||
should_be_up = ifp->if_flags & IFF_RUNNING;
|
||||
should_be_up = ifp->if_drv_flags & IFF_DRV_RUNNING;
|
||||
|
||||
if (!was_up && should_be_up) {
|
||||
/*
|
||||
@ -1101,7 +1101,7 @@ srwatchdog(struct sr_softc *sc)
|
||||
#endif
|
||||
|
||||
#ifndef NETGRAPH
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
|
||||
ifp->if_oerrors++; /* update output error count */
|
||||
@ -1133,9 +1133,9 @@ srwatchdog(struct sr_softc *sc)
|
||||
}
|
||||
sc->xmit_busy = 0;
|
||||
#ifndef NETGRAPH
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
#else
|
||||
/*ifp->if_flags &= ~IFF_OACTIVE; */
|
||||
/*ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; */
|
||||
#endif /* NETGRAPH */
|
||||
|
||||
if (sc->txb_inuse && --sc->txb_inuse)
|
||||
@ -2281,7 +2281,7 @@ sr_dmac_intr(struct sr_hardc *hc, u_char isr1)
|
||||
/*
|
||||
* This should be the most common case.
|
||||
*
|
||||
* Clear the IFF_OACTIVE flag.
|
||||
* Clear the IFF_DRV_OACTIVE flag.
|
||||
*
|
||||
* Call srstart to start a new transmit if
|
||||
* there is data to transmit.
|
||||
@ -2291,7 +2291,7 @@ sr_dmac_intr(struct sr_hardc *hc, u_char isr1)
|
||||
#endif
|
||||
sc->xmit_busy = 0;
|
||||
#ifndef NETGRAPH
|
||||
SC2IFP(sc)->if_flags &= ~IFF_OACTIVE;
|
||||
SC2IFP(sc)->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
SC2IFP(sc)->if_timer = 0;
|
||||
#else
|
||||
/* XXX may need to mark tx inactive? */
|
||||
|
@ -567,12 +567,12 @@ epic_ifioctl(ifp, command, data)
|
||||
* If it is marked down and running, then stop it.
|
||||
*/
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
epic_init(sc);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
epic_stop(sc);
|
||||
break;
|
||||
}
|
||||
@ -719,7 +719,7 @@ epic_ifstart(ifp)
|
||||
BPF_MTAP(ifp, m0);
|
||||
}
|
||||
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -852,7 +852,7 @@ epic_tx_done(sc)
|
||||
}
|
||||
|
||||
if (sc->pending_txs < TX_RING_SIZE)
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
bus_dmamap_sync(sc->ttag, sc->tmap,
|
||||
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
|
||||
}
|
||||
@ -1267,7 +1267,7 @@ epic_init(xsc)
|
||||
s = splimp();
|
||||
|
||||
/* If interface is already running, then we need not do anything. */
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
splx(s);
|
||||
return;
|
||||
}
|
||||
@ -1323,12 +1323,12 @@ epic_init(xsc)
|
||||
|
||||
/* Mark interface running ... */
|
||||
if (ifp->if_flags & IFF_UP)
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
else
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
|
||||
/* ... and free */
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/* Start Rx process */
|
||||
epic_start_activity(sc);
|
||||
@ -1590,7 +1590,7 @@ epic_stop(sc)
|
||||
CSR_WRITE_4(sc, GENCTL, GENCTL_POWER_DOWN);
|
||||
|
||||
/* Mark as stoped */
|
||||
sc->ifp->if_flags &= ~IFF_RUNNING;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
|
||||
splx(s);
|
||||
}
|
||||
|
@ -811,7 +811,7 @@ txp_rxbuf_reclaim(sc)
|
||||
struct txp_swdesc *sd;
|
||||
u_int32_t i;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
|
||||
i = sc->sc_rxbufprod;
|
||||
@ -884,7 +884,7 @@ txp_tx_reclaim(sc, r)
|
||||
ifp->if_opackets++;
|
||||
}
|
||||
}
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
if (++cons == TX_ENTRIES) {
|
||||
txd = r->r_desc;
|
||||
@ -1078,7 +1078,7 @@ txp_ioctl(ifp, command, data)
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
txp_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
txp_stop(sc);
|
||||
}
|
||||
break;
|
||||
@ -1178,7 +1178,7 @@ txp_init(xsc)
|
||||
sc = xsc;
|
||||
ifp = sc->sc_ifp;
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
txp_stop(sc);
|
||||
@ -1212,8 +1212,8 @@ txp_init(xsc)
|
||||
TXP_INT_PCI_TABORT | TXP_INT_PCI_MABORT | TXP_INT_LATCH);
|
||||
WRITE_REG(sc, TXP_IMR, TXP_INT_A2H_3);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_timer = 0;
|
||||
|
||||
sc->sc_tick = timeout(txp_tick, sc, hz);
|
||||
@ -1276,7 +1276,8 @@ txp_start(ifp)
|
||||
u_int32_t firstprod, firstcnt, prod, cnt;
|
||||
struct m_tag *mtag;
|
||||
|
||||
if ((ifp->if_flags & (IFF_RUNNING | IFF_OACTIVE)) != IFF_RUNNING)
|
||||
if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
|
||||
IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
prod = r->r_prod;
|
||||
@ -1362,7 +1363,7 @@ txp_start(ifp)
|
||||
return;
|
||||
|
||||
oactive:
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
r->r_prod = firstprod;
|
||||
r->r_cnt = firstcnt;
|
||||
IF_PREPEND(&ifp->if_snd, m);
|
||||
@ -1580,7 +1581,7 @@ txp_stop(sc)
|
||||
|
||||
ifp = sc->sc_ifp;
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
untimeout(txp_tick, sc, sc->sc_tick);
|
||||
|
||||
|
@ -818,7 +818,7 @@ aue_intr(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
AUE_LOCK(sc);
|
||||
ifp = sc->aue_ifp;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
AUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -897,7 +897,7 @@ aue_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
AUE_LOCK(sc);
|
||||
ifp = sc->aue_ifp;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
AUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -986,7 +986,7 @@ aue_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
}
|
||||
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
usbd_get_xfer_status(c->ue_xfer, NULL, NULL, NULL, &err);
|
||||
|
||||
if (c->ue_mbuf != NULL) {
|
||||
@ -1095,7 +1095,7 @@ aue_start(struct ifnet *ifp)
|
||||
return;
|
||||
}
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE) {
|
||||
AUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -1108,7 +1108,7 @@ aue_start(struct ifnet *ifp)
|
||||
|
||||
if (aue_encap(sc, m_head, 0)) {
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
AUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -1119,7 +1119,7 @@ aue_start(struct ifnet *ifp)
|
||||
*/
|
||||
BPF_MTAP(ifp, m_head);
|
||||
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Set a timeout in case the chip goes out to lunch.
|
||||
@ -1142,7 +1142,7 @@ aue_init(void *xsc)
|
||||
|
||||
AUE_LOCK(sc);
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
AUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -1232,8 +1232,8 @@ aue_init(void *xsc)
|
||||
usbd_transfer(c->ue_xfer);
|
||||
}
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
sc->aue_stat_ch = timeout(aue_tick, sc, hz);
|
||||
|
||||
@ -1291,18 +1291,18 @@ aue_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
switch(command) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->aue_if_flags & IFF_PROMISC)) {
|
||||
AUE_SETBIT(sc, AUE_CTL2, AUE_CTL2_RX_PROMISC);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->aue_if_flags & IFF_PROMISC) {
|
||||
AUE_CLRBIT(sc, AUE_CTL2, AUE_CTL2_RX_PROMISC);
|
||||
} else if (!(ifp->if_flags & IFF_RUNNING))
|
||||
} else if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
aue_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
aue_stop(sc);
|
||||
}
|
||||
sc->aue_if_flags = ifp->if_flags;
|
||||
@ -1426,7 +1426,7 @@ aue_stop(struct aue_softc *sc)
|
||||
|
||||
sc->aue_link = 0;
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
AUE_UNLOCK(sc);
|
||||
|
||||
return;
|
||||
|
@ -612,7 +612,7 @@ axe_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
AXE_LOCK(sc);
|
||||
ifp = sc->axe_ifp;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
AXE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -691,7 +691,7 @@ axe_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
}
|
||||
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
usbd_get_xfer_status(c->ue_xfer, NULL, NULL, NULL, &err);
|
||||
|
||||
if (c->ue_mbuf != NULL) {
|
||||
@ -791,7 +791,7 @@ axe_start(struct ifnet *ifp)
|
||||
return;
|
||||
}
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE) {
|
||||
AXE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -804,7 +804,7 @@ axe_start(struct ifnet *ifp)
|
||||
|
||||
if (axe_encap(sc, m_head, 0)) {
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
AXE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -815,7 +815,7 @@ axe_start(struct ifnet *ifp)
|
||||
*/
|
||||
BPF_MTAP(ifp, m_head);
|
||||
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Set a timeout in case the chip goes out to lunch.
|
||||
@ -836,7 +836,7 @@ axe_init(void *xsc)
|
||||
int i;
|
||||
int rxmode;
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
AXE_LOCK(sc);
|
||||
@ -918,8 +918,8 @@ axe_init(void *xsc)
|
||||
usbd_transfer(c->ue_xfer);
|
||||
}
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
AXE_UNLOCK(sc);
|
||||
|
||||
@ -940,7 +940,7 @@ axe_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
switch(command) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->axe_if_flags & IFF_PROMISC)) {
|
||||
AXE_LOCK(sc);
|
||||
@ -951,7 +951,7 @@ axe_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
0, rxmode, NULL);
|
||||
AXE_UNLOCK(sc);
|
||||
axe_setmulti(sc);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->axe_if_flags & IFF_PROMISC) {
|
||||
AXE_LOCK(sc);
|
||||
@ -962,10 +962,10 @@ axe_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
0, rxmode, NULL);
|
||||
AXE_UNLOCK(sc);
|
||||
axe_setmulti(sc);
|
||||
} else if (!(ifp->if_flags & IFF_RUNNING))
|
||||
} else if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
axe_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
axe_stop(sc);
|
||||
}
|
||||
sc->axe_if_flags = ifp->if_flags;
|
||||
@ -1084,7 +1084,7 @@ axe_stop(struct axe_softc *sc)
|
||||
/* Free TX resources. */
|
||||
usb_ether_tx_list_free(&sc->axe_cdata);
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
sc->axe_link = 0;
|
||||
AXE_UNLOCK(sc);
|
||||
|
||||
|
@ -322,7 +322,7 @@ USB_DETACH(cdce)
|
||||
CDCE_LOCK(sc);
|
||||
sc->cdce_dying = 1;
|
||||
ifp = GET_IFP(sc);
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
cdce_shutdown(sc->cdce_dev);
|
||||
|
||||
ether_ifdetach(ifp);
|
||||
@ -344,8 +344,8 @@ cdce_start(struct ifnet *ifp)
|
||||
|
||||
|
||||
if (sc->cdce_dying ||
|
||||
ifp->if_flags & IFF_OACTIVE ||
|
||||
!(ifp->if_flags & IFF_RUNNING)) {
|
||||
ifp->if_drv_flags & IFF_DRV_OACTIVE ||
|
||||
!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
CDCE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -358,14 +358,14 @@ cdce_start(struct ifnet *ifp)
|
||||
|
||||
if (cdce_encap(sc, m_head, 0)) {
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
CDCE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
|
||||
BPF_MTAP(ifp, m_head);
|
||||
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
CDCE_UNLOCK(sc);
|
||||
|
||||
@ -445,7 +445,7 @@ cdce_stop(struct cdce_softc *sc)
|
||||
usb_ether_rx_list_free(&sc->cdce_cdata);
|
||||
usb_ether_tx_list_free(&sc->cdce_cdata);
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
CDCE_UNLOCK(sc);
|
||||
|
||||
return;
|
||||
@ -474,10 +474,10 @@ cdce_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
switch(command) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING))
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
cdce_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
cdce_stop(sc);
|
||||
}
|
||||
error = 0;
|
||||
@ -507,7 +507,7 @@ cdce_init(void *xsc)
|
||||
usbd_status err;
|
||||
int i;
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
CDCE_LOCK(sc);
|
||||
@ -555,8 +555,8 @@ cdce_init(void *xsc)
|
||||
usbd_transfer(c->ue_xfer);
|
||||
}
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
CDCE_UNLOCK(sc);
|
||||
|
||||
@ -575,7 +575,7 @@ cdce_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
CDCE_LOCK(sc);
|
||||
ifp = GET_IFP(sc);
|
||||
|
||||
if (sc->cdce_dying || !(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (sc->cdce_dying || !(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
CDCE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -643,7 +643,7 @@ cdce_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
ifp = GET_IFP(sc);
|
||||
|
||||
if (sc->cdce_dying ||
|
||||
!(ifp->if_flags & IFF_RUNNING)) {
|
||||
!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
CDCE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -662,7 +662,7 @@ cdce_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
return;
|
||||
}
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
usbd_get_xfer_status(c->ue_xfer, NULL, NULL, NULL, &err);
|
||||
|
||||
if (c->ue_mbuf != NULL) {
|
||||
@ -690,7 +690,7 @@ cdce_rxstart(struct ifnet *ifp)
|
||||
sc = ifp->if_softc;
|
||||
CDCE_LOCK(sc);
|
||||
|
||||
if (sc->cdce_dying || !(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (sc->cdce_dying || !(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
CDCE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
|
@ -620,7 +620,7 @@ cue_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
CUE_LOCK(sc);
|
||||
ifp = sc->cue_ifp;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
CUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -704,7 +704,7 @@ cue_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
}
|
||||
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
usbd_get_xfer_status(c->ue_xfer, NULL, NULL, NULL, &err);
|
||||
|
||||
if (c->ue_mbuf != NULL) {
|
||||
@ -798,7 +798,7 @@ cue_start(struct ifnet *ifp)
|
||||
sc = ifp->if_softc;
|
||||
CUE_LOCK(sc);
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE) {
|
||||
CUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -811,7 +811,7 @@ cue_start(struct ifnet *ifp)
|
||||
|
||||
if (cue_encap(sc, m_head, 0)) {
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
CUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -822,7 +822,7 @@ cue_start(struct ifnet *ifp)
|
||||
*/
|
||||
BPF_MTAP(ifp, m_head);
|
||||
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Set a timeout in case the chip goes out to lunch.
|
||||
@ -842,7 +842,7 @@ cue_init(void *xsc)
|
||||
usbd_status err;
|
||||
int i;
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
CUE_LOCK(sc);
|
||||
@ -928,8 +928,8 @@ cue_init(void *xsc)
|
||||
usbd_transfer(c->ue_xfer);
|
||||
}
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
CUE_UNLOCK(sc);
|
||||
|
||||
@ -949,20 +949,20 @@ cue_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
switch(command) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->cue_if_flags & IFF_PROMISC)) {
|
||||
CUE_SETBIT(sc, CUE_ETHCTL, CUE_ETHCTL_PROMISC);
|
||||
cue_setmulti(sc);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->cue_if_flags & IFF_PROMISC) {
|
||||
CUE_CLRBIT(sc, CUE_ETHCTL, CUE_ETHCTL_PROMISC);
|
||||
cue_setmulti(sc);
|
||||
} else if (!(ifp->if_flags & IFF_RUNNING))
|
||||
} else if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
cue_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
cue_stop(sc);
|
||||
}
|
||||
sc->cue_if_flags = ifp->if_flags;
|
||||
@ -1074,7 +1074,7 @@ cue_stop(struct cue_softc *sc)
|
||||
/* Free TX resources. */
|
||||
usb_ether_tx_list_free(&sc->cue_cdata);
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
CUE_UNLOCK(sc);
|
||||
|
||||
return;
|
||||
|
@ -598,7 +598,7 @@ Static void kue_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv,
|
||||
KUE_LOCK(sc);
|
||||
ifp = sc->kue_ifp;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
KUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -672,7 +672,7 @@ kue_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
|
||||
ifp = sc->kue_ifp;
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
if (status != USBD_NORMAL_COMPLETION) {
|
||||
if (status == USBD_NOT_STARTED || status == USBD_CANCELLED) {
|
||||
@ -752,7 +752,7 @@ kue_start(struct ifnet *ifp)
|
||||
sc = ifp->if_softc;
|
||||
KUE_LOCK(sc);
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE) {
|
||||
KUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -765,7 +765,7 @@ kue_start(struct ifnet *ifp)
|
||||
|
||||
if (kue_encap(sc, m_head, 0)) {
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
KUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -776,7 +776,7 @@ kue_start(struct ifnet *ifp)
|
||||
*/
|
||||
BPF_MTAP(ifp, m_head);
|
||||
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Set a timeout in case the chip goes out to lunch.
|
||||
@ -798,7 +798,7 @@ kue_init(void *xsc)
|
||||
|
||||
KUE_LOCK(sc);
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
KUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -872,8 +872,8 @@ kue_init(void *xsc)
|
||||
usbd_transfer(c->ue_xfer);
|
||||
}
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
KUE_UNLOCK(sc);
|
||||
|
||||
@ -891,22 +891,22 @@ kue_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
switch(command) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->kue_if_flags & IFF_PROMISC)) {
|
||||
sc->kue_rxfilt |= KUE_RXFILT_PROMISC;
|
||||
kue_setword(sc, KUE_CMD_SET_PKT_FILTER,
|
||||
sc->kue_rxfilt);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->kue_if_flags & IFF_PROMISC) {
|
||||
sc->kue_rxfilt &= ~KUE_RXFILT_PROMISC;
|
||||
kue_setword(sc, KUE_CMD_SET_PKT_FILTER,
|
||||
sc->kue_rxfilt);
|
||||
} else if (!(ifp->if_flags & IFF_RUNNING))
|
||||
} else if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
kue_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
kue_stop(sc);
|
||||
}
|
||||
sc->kue_if_flags = ifp->if_flags;
|
||||
@ -1012,7 +1012,7 @@ kue_stop(struct kue_softc *sc)
|
||||
/* Free TX resources. */
|
||||
usb_ether_tx_list_free(&sc->kue_cdata);
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
KUE_UNLOCK(sc);
|
||||
|
||||
return;
|
||||
|
@ -766,7 +766,7 @@ rue_intr(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
RUE_LOCK(sc);
|
||||
ifp = sc->rue_ifp;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
RUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -842,7 +842,7 @@ rue_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
RUE_LOCK(sc);
|
||||
ifp = sc->rue_ifp;
|
||||
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
RUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -929,7 +929,7 @@ rue_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
}
|
||||
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
usbd_get_xfer_status(c->ue_xfer, NULL, NULL, NULL, &err);
|
||||
|
||||
if (c->ue_mbuf != NULL) {
|
||||
@ -1032,7 +1032,7 @@ rue_start(struct ifnet *ifp)
|
||||
return;
|
||||
}
|
||||
|
||||
if (ifp->if_flags & IFF_OACTIVE) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE) {
|
||||
RUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -1045,7 +1045,7 @@ rue_start(struct ifnet *ifp)
|
||||
|
||||
if (rue_encap(sc, m_head, 0)) {
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
RUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -1056,7 +1056,7 @@ rue_start(struct ifnet *ifp)
|
||||
*/
|
||||
BPF_MTAP(ifp, m_head);
|
||||
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
/*
|
||||
* Set a timeout in case the chip goes out to lunch.
|
||||
@ -1079,7 +1079,7 @@ rue_init(void *xsc)
|
||||
|
||||
RUE_LOCK(sc);
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
RUE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -1183,8 +1183,8 @@ rue_init(void *xsc)
|
||||
usbd_transfer(c->ue_xfer);
|
||||
}
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
sc->rue_stat_ch = timeout(rue_tick, sc, hz);
|
||||
|
||||
@ -1240,22 +1240,22 @@ rue_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
||||
switch (command) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->rue_if_flags & IFF_PROMISC)) {
|
||||
RUE_SETBIT_2(sc, RUE_RCR,
|
||||
(RUE_RCR_AAM | RUE_RCR_AAP));
|
||||
rue_setmulti(sc);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->rue_if_flags & IFF_PROMISC) {
|
||||
RUE_CLRBIT_2(sc, RUE_RCR,
|
||||
(RUE_RCR_AAM | RUE_RCR_AAP));
|
||||
rue_setmulti(sc);
|
||||
} else if (!(ifp->if_flags & IFF_RUNNING))
|
||||
} else if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
rue_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
rue_stop(sc);
|
||||
}
|
||||
sc->rue_if_flags = ifp->if_flags;
|
||||
@ -1381,7 +1381,7 @@ rue_stop(struct rue_softc *sc)
|
||||
|
||||
sc->rue_link = 0;
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
RUE_UNLOCK(sc);
|
||||
}
|
||||
|
@ -519,7 +519,11 @@ USB_DETACH(udav)
|
||||
/* Wait for processes to go away */
|
||||
usb_detach_wait(USBDEV(sc->sc_dev));
|
||||
}
|
||||
#if defined(__FreeBSD__)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
#else
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
#endif
|
||||
udav_stop(GET_IFP(sc), 1);
|
||||
|
||||
#if NRND > 0
|
||||
@ -913,8 +917,13 @@ udav_init(void *xsc)
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
#endif
|
||||
|
||||
#if defined(__NetBSD__)
|
||||
splx(s);
|
||||
@ -1151,7 +1160,11 @@ udav_start(struct ifnet *ifp)
|
||||
if (!sc->sc_link)
|
||||
return;
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
#else
|
||||
if (ifp->if_flags & IFF_OACTIVE)
|
||||
#endif
|
||||
return;
|
||||
#if defined(__NetBSD__)
|
||||
IFQ_POLL(&ifp->if_snd, m_head);
|
||||
@ -1164,8 +1177,10 @@ udav_start(struct ifnet *ifp)
|
||||
if (udav_send(sc, m_head, 0)) {
|
||||
#if defined(__FreeBSD__)
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
#endif
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1177,7 +1192,11 @@ udav_start(struct ifnet *ifp)
|
||||
BPF_MTAP(ifp, m_head);
|
||||
#endif
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
#endif
|
||||
|
||||
/* Set a timeout in case the chip goes out to lunch. */
|
||||
ifp->if_timer = 5;
|
||||
@ -1257,7 +1276,11 @@ udav_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
DPRINTF(("%s: %s: enter\n", USBDEVNAME(sc->sc_dev), __func__));
|
||||
|
||||
ifp->if_timer = 0;
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
#else
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
#endif
|
||||
|
||||
if (status != USBD_NORMAL_COMPLETION) {
|
||||
if (status == USBD_NOT_STARTED || status == USBD_CANCELLED) {
|
||||
@ -1458,11 +1481,11 @@ udav_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
#if defined(__FreeBSD__)
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC) {
|
||||
UDAV_SETBIT(sc, UDAV_RCR,
|
||||
UDAV_RCR_ALL|UDAV_RCR_PRMSC);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC)) {
|
||||
if (ifp->if_flags & IFF_ALLMULTI)
|
||||
UDAV_CLRBIT(sc, UDAV_RCR,
|
||||
@ -1470,10 +1493,10 @@ udav_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
else
|
||||
UDAV_CLRBIT(sc, UDAV_RCR,
|
||||
UDAV_RCR_ALL|UDAV_RCR_PRMSC);
|
||||
} else if (!(ifp->if_flags & IFF_RUNNING))
|
||||
} else if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
udav_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
udav_stop(ifp, 1);
|
||||
}
|
||||
error = 0;
|
||||
@ -1617,7 +1640,11 @@ udav_stop(struct ifnet *ifp, int disable)
|
||||
usb_ether_tx_list_free(&sc->sc_cdata);
|
||||
|
||||
sc->sc_link = 0;
|
||||
#if defined(__FreeBSD__)
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
#else
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Set media options */
|
||||
@ -1655,7 +1682,11 @@ udav_ifmedia_status(struct ifnet *ifp, struct ifmediareq *ifmr)
|
||||
if (sc->sc_dying)
|
||||
return;
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
#else
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
#endif
|
||||
ifmr->ifm_active = IFM_ETHER | IFM_NONE;
|
||||
ifmr->ifm_status = 0;
|
||||
return;
|
||||
|
@ -677,7 +677,8 @@ ural_media_change(struct ifnet *ifp)
|
||||
return error;
|
||||
}
|
||||
|
||||
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
|
||||
if ((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
ural_init(sc);
|
||||
|
||||
RAL_UNLOCK(sc);
|
||||
@ -820,7 +821,7 @@ ural_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
|
||||
DPRINTFN(10, ("tx done\n"));
|
||||
|
||||
sc->sc_tx_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ural_start(ifp);
|
||||
}
|
||||
|
||||
@ -1275,7 +1276,7 @@ ural_start(struct ifnet *ifp)
|
||||
IF_POLL(&ic->ic_mgtq, m0);
|
||||
if (m0 != NULL) {
|
||||
if (sc->tx_queued >= RAL_TX_LIST_COUNT) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
IF_DEQUEUE(&ic->ic_mgtq, m0);
|
||||
@ -1297,7 +1298,7 @@ ural_start(struct ifnet *ifp)
|
||||
break;
|
||||
if (sc->tx_queued >= RAL_TX_LIST_COUNT) {
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m0);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1391,12 +1392,12 @@ ural_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
switch (cmd) {
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ural_update_promisc(sc);
|
||||
else
|
||||
ural_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ural_stop(sc);
|
||||
}
|
||||
break;
|
||||
@ -1406,8 +1407,8 @@ ural_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
}
|
||||
|
||||
if (error == ENETRESET) {
|
||||
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
|
||||
(IFF_UP | IFF_RUNNING))
|
||||
if ((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
ural_init(sc);
|
||||
error = 0;
|
||||
}
|
||||
@ -2033,8 +2034,8 @@ ural_init(void *priv)
|
||||
}
|
||||
ural_write(sc, RAL_TXRX_CSR2, tmp);
|
||||
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
|
||||
if (ic->ic_opmode == IEEE80211_M_MONITOR)
|
||||
ieee80211_new_state(ic, IEEE80211_S_RUN, -1);
|
||||
@ -2058,7 +2059,7 @@ ural_stop(void *priv)
|
||||
|
||||
sc->sc_tx_timer = 0;
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
|
||||
/* disable Rx */
|
||||
ural_write(sc, RAL_TXRX_CSR2, RAL_DISABLE_RX);
|
||||
|
@ -1551,7 +1551,7 @@ vge_txeof(sc)
|
||||
|
||||
if (idx != sc->vge_ldata.vge_tx_considx) {
|
||||
sc->vge_ldata.vge_tx_considx = idx;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
ifp->if_timer = 0;
|
||||
}
|
||||
|
||||
@ -1866,7 +1866,7 @@ vge_start(ifp)
|
||||
sc = ifp->if_softc;
|
||||
VGE_LOCK(sc);
|
||||
|
||||
if (!sc->vge_link || ifp->if_flags & IFF_OACTIVE) {
|
||||
if (!sc->vge_link || ifp->if_drv_flags & IFF_DRV_OACTIVE) {
|
||||
VGE_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -1902,7 +1902,7 @@ vge_start(ifp)
|
||||
#else
|
||||
IF_PREPEND(&ifp->if_snd, m_head);
|
||||
#endif
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2119,8 +2119,8 @@ vge_init(xsc)
|
||||
|
||||
mii_mediachg(mii);
|
||||
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
sc->vge_if_flags = 0;
|
||||
sc->vge_link = 0;
|
||||
@ -2237,13 +2237,13 @@ vge_ioctl(ifp, command, data)
|
||||
break;
|
||||
case SIOCSIFFLAGS:
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ifp->if_flags & IFF_RUNNING &&
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->vge_if_flags & IFF_PROMISC)) {
|
||||
CSR_SETBIT_1(sc, VGE_RXCTL,
|
||||
VGE_RXCTL_RX_PROMISC);
|
||||
vge_setmulti(sc);
|
||||
} else if (ifp->if_flags & IFF_RUNNING &&
|
||||
} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||
!(ifp->if_flags & IFF_PROMISC) &&
|
||||
sc->vge_if_flags & IFF_PROMISC) {
|
||||
CSR_CLRBIT_1(sc, VGE_RXCTL,
|
||||
@ -2252,7 +2252,7 @@ vge_ioctl(ifp, command, data)
|
||||
} else
|
||||
vge_init(sc);
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
vge_stop(sc);
|
||||
}
|
||||
sc->vge_if_flags = ifp->if_flags;
|
||||
@ -2282,7 +2282,7 @@ vge_ioctl(ifp, command, data)
|
||||
ifp->if_hwassist = VGE_CSUM_FEATURES;
|
||||
else
|
||||
ifp->if_hwassist = 0;
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
vge_init(sc);
|
||||
break;
|
||||
default:
|
||||
@ -2329,7 +2329,7 @@ vge_stop(sc)
|
||||
ifp = sc->vge_ifp;
|
||||
ifp->if_timer = 0;
|
||||
|
||||
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
|
||||
#ifdef DEVICE_POLLING
|
||||
ether_poll_deregister(ifp);
|
||||
#endif /* DEVICE_POLLING */
|
||||
|
@ -245,8 +245,8 @@ vxinit(void *xsc)
|
||||
vxmbuffill((caddr_t) sc);
|
||||
|
||||
/* Interface is now `running', with no output active. */
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/* Attempt to start output, if any. */
|
||||
vxstart(ifp);
|
||||
@ -405,8 +405,8 @@ vxstart(struct ifnet *ifp)
|
||||
int sh, len, pad;
|
||||
|
||||
/* Don't transmit if interface is busy or not running */
|
||||
if ((sc->ifp->if_flags &
|
||||
(IFF_RUNNING | IFF_OACTIVE)) != IFF_RUNNING)
|
||||
if ((sc->ifp->if_drv_flags &
|
||||
(IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
startagain:
|
||||
@ -439,7 +439,7 @@ startagain:
|
||||
SET_TX_AVAIL_THRESH | ((len + pad + 4) >> 2));
|
||||
/* not enough room in FIFO - make sure */
|
||||
if (CSR_READ_2(sc, VX_W1_FREE_TX) < len + pad + 4) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
ifp->if_timer = 1;
|
||||
return;
|
||||
}
|
||||
@ -585,7 +585,7 @@ vxtxstat(struct vx_softc *sc)
|
||||
} else if (i & TXS_MAX_COLLISION) {
|
||||
++sc->ifp->if_collisions;
|
||||
CSR_WRITE_2(sc, VX_COMMAND, TX_ENABLE);
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
} else
|
||||
sc->tx_succ_ok = (sc->tx_succ_ok + 1) & 127;
|
||||
}
|
||||
@ -619,7 +619,7 @@ vxintr(void *voidsc)
|
||||
vxread(sc);
|
||||
if (status & S_TX_AVAIL) {
|
||||
ifp->if_timer = 0;
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
vxstart(sc->ifp);
|
||||
}
|
||||
if (status & S_CARD_FAILURE) {
|
||||
@ -853,15 +853,15 @@ vxioctl(register struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
switch (cmd) {
|
||||
case SIOCSIFFLAGS:
|
||||
if ((ifp->if_flags & IFF_UP) == 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING) != 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
|
||||
/*
|
||||
* If interface is marked up and it is stopped, then
|
||||
* start it.
|
||||
*/
|
||||
vxstop(sc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
} else if ((ifp->if_flags & IFF_UP) != 0 &&
|
||||
(ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
/*
|
||||
* If interface is marked up and it is stopped, then
|
||||
* start it.
|
||||
@ -929,7 +929,7 @@ vxwatchdog(struct ifnet *ifp)
|
||||
|
||||
if (ifp->if_flags & IFF_DEBUG)
|
||||
if_printf(ifp, "device timeout\n");
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
vxstart(ifp);
|
||||
vxintr(sc);
|
||||
}
|
||||
|
@ -627,7 +627,7 @@ wi_intr(void *arg)
|
||||
wi_tx_ex_intr(sc);
|
||||
if (status & WI_EV_INFO)
|
||||
wi_info_intr(sc);
|
||||
if ((ifp->if_flags & IFF_OACTIVE) == 0 &&
|
||||
if ((ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0 &&
|
||||
(sc->sc_flags & WI_FLAGS_OUTRANGE) == 0 &&
|
||||
!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
|
||||
wi_start(ifp);
|
||||
@ -790,8 +790,8 @@ wi_init(void *arg)
|
||||
wi_cmd(sc, WI_CMD_ENABLE | sc->sc_portnum, 0, 0, 0);
|
||||
|
||||
sc->sc_enabled = 1;
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
if (ic->ic_opmode == IEEE80211_M_AHDEMO ||
|
||||
ic->ic_opmode == IEEE80211_M_IBSS ||
|
||||
ic->ic_opmode == IEEE80211_M_MONITOR ||
|
||||
@ -864,7 +864,7 @@ wi_stop(struct ifnet *ifp, int disable)
|
||||
sc->sc_scan_timer = 0;
|
||||
sc->sc_false_syns = 0;
|
||||
sc->sc_naps = 0;
|
||||
ifp->if_flags &= ~(IFF_OACTIVE | IFF_RUNNING);
|
||||
ifp->if_drv_flags &= ~(IFF_DRV_OACTIVE | IFF_DRV_RUNNING);
|
||||
ifp->if_timer = 0;
|
||||
|
||||
WI_UNLOCK(sc);
|
||||
@ -900,7 +900,7 @@ wi_start(struct ifnet *ifp)
|
||||
IF_POLL(&ic->ic_mgtq, m0);
|
||||
if (m0 != NULL) {
|
||||
if (sc->sc_txd[cur].d_len != 0) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
IF_DEQUEUE(&ic->ic_mgtq, m0);
|
||||
@ -928,7 +928,7 @@ wi_start(struct ifnet *ifp)
|
||||
break;
|
||||
if (sc->sc_txd[cur].d_len != 0) {
|
||||
IFQ_DRV_PREPEND(&ifp->if_snd, m0);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
break;
|
||||
}
|
||||
if (m0->m_len < sizeof(struct ether_header) &&
|
||||
@ -1119,7 +1119,7 @@ wi_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
WI_LOCK(sc);
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (ic->ic_opmode != IEEE80211_M_HOSTAP &&
|
||||
ifp->if_flags & IFF_RUNNING) {
|
||||
ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
if (ifp->if_flags & IFF_PROMISC &&
|
||||
!(sc->sc_if_flags & IFF_PROMISC)) {
|
||||
wi_write_val(sc, WI_RID_PROMISC, 1);
|
||||
@ -1133,7 +1133,7 @@ wi_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
wi_init(sc);
|
||||
}
|
||||
} else {
|
||||
if (ifp->if_flags & IFF_RUNNING) {
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
wi_stop(ifp, 1);
|
||||
}
|
||||
sc->wi_gone = 0;
|
||||
@ -1162,7 +1162,7 @@ wi_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
error = copyin(ifr->ifr_data, &wreq, sizeof(wreq));
|
||||
if (error)
|
||||
break;
|
||||
if (!(ifp->if_flags & IFF_RUNNING) ||
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING) ||
|
||||
sc->sc_firmware_type == WI_LUCENT) {
|
||||
error = EIO;
|
||||
break;
|
||||
@ -1629,7 +1629,7 @@ wi_tx_intr(struct wi_softc *sc)
|
||||
sc->sc_txd[cur].d_len = 0;
|
||||
sc->sc_txcur = cur = (cur + 1) % sc->sc_ntxbuf;
|
||||
if (sc->sc_txd[cur].d_len == 0)
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
else {
|
||||
if (wi_cmd(sc, WI_CMD_TX | WI_RECLAIM, sc->sc_txd[cur].d_fid,
|
||||
0, 0)) {
|
||||
|
@ -267,7 +267,7 @@ wi_pci_resume(device_t dev)
|
||||
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
ifp->if_init(ifp->if_softc);
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
ifp->if_start(ifp);
|
||||
}
|
||||
|
||||
|
@ -810,12 +810,12 @@ wlinit(void *xsc)
|
||||
WL_LOCK(sc);
|
||||
oldpri = splimp();
|
||||
if ((stat = wlhwrst(sc)) == TRUE) {
|
||||
sc->ifp->if_flags |= IFF_RUNNING; /* same as DSF_RUNNING */
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_RUNNING; /* same as DSF_RUNNING */
|
||||
/*
|
||||
* OACTIVE is used by upper-level routines
|
||||
* and must be set
|
||||
*/
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE; /* same as tbusy below */
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; /* same as tbusy below */
|
||||
|
||||
sc->flags |= DSF_RUNNING;
|
||||
sc->tbusy = 0;
|
||||
@ -990,7 +990,7 @@ wlstart(struct ifnet *ifp)
|
||||
(cu_status & AC_SW_B) == 0){
|
||||
sc->tbusy = 0;
|
||||
untimeout(wlwatchdog, sc, sc->watchdog_ch);
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
/*
|
||||
* This is probably just a race. The xmt'r is just
|
||||
* became idle but WE have masked interrupts so ...
|
||||
@ -1027,11 +1027,11 @@ wlstart(struct ifnet *ifp)
|
||||
*/
|
||||
/* try 10 ticks, not very long */
|
||||
sc->watchdog_ch = timeout(wlwatchdog, sc, 10);
|
||||
sc->ifp->if_flags |= IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
sc->ifp->if_opackets++;
|
||||
wlxmt(sc, m);
|
||||
} else {
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
}
|
||||
WL_UNLOCK(sc);
|
||||
return;
|
||||
@ -1074,7 +1074,7 @@ wlread(struct wl_softc *sc, u_short fd_p)
|
||||
if (sc->ifp->if_flags & IFF_DEBUG)
|
||||
printf("wl%d: entered wlread()\n", sc->unit);
|
||||
#endif
|
||||
if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING)) {
|
||||
if (!((ifp->if_flags & IFF_UP) && (ifp->if_drv_flags & IFF_DRV_RUNNING))) {
|
||||
printf("%s read(): board is not running.\n", ifp->if_xname);
|
||||
sc->hacr &= ~HACR_INTRON;
|
||||
CMD(sc); /* turn off interrupts */
|
||||
@ -1627,7 +1627,7 @@ wlintr(void *arg)
|
||||
}
|
||||
sc->tbusy = 0;
|
||||
untimeout(wlwatchdog, sc, sc->watchdog_ch);
|
||||
sc->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
wlstart(sc->ifp);
|
||||
}
|
||||
}
|
||||
|
@ -415,8 +415,8 @@ xe_init(void *xscp) {
|
||||
xe_setmedia(scp);
|
||||
|
||||
/* Enable output */
|
||||
scp->ifp->if_flags |= IFF_RUNNING;
|
||||
scp->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
scp->ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
scp->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
(void)splx(s);
|
||||
}
|
||||
@ -424,8 +424,8 @@ xe_init(void *xscp) {
|
||||
|
||||
/*
|
||||
* Start output on interface. Should be called at splimp() priority. Check
|
||||
* that the output is idle (ie, IFF_OACTIVE is not set) before calling this
|
||||
* function. If media selection is in progress we set IFF_OACTIVE ourselves
|
||||
* that the output is idle (ie, IFF_DRV_OACTIVE is not set) before calling this
|
||||
* function. If media selection is in progress we set IFF_DRV_OACTIVE ourselves
|
||||
* and return immediately.
|
||||
*/
|
||||
static void
|
||||
@ -434,7 +434,7 @@ xe_start(struct ifnet *ifp) {
|
||||
struct mbuf *mbp;
|
||||
|
||||
if (scp->autoneg_status != XE_AUTONEG_NONE) {
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -455,14 +455,14 @@ xe_start(struct ifnet *ifp) {
|
||||
* we haven't filled all the buffers with data then we still want to
|
||||
* accept more.
|
||||
*/
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
if (xe_pio_write_packet(scp, mbp) != 0) {
|
||||
/* Push the packet back onto the queue */
|
||||
IF_PREPEND(&ifp->if_snd, mbp);
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -500,13 +500,13 @@ xe_ioctl (register struct ifnet *ifp, u_long command, caddr_t data) {
|
||||
* marked down and running, then stop it.
|
||||
*/
|
||||
if (ifp->if_flags & IFF_UP) {
|
||||
if (!(ifp->if_flags & IFF_RUNNING)) {
|
||||
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
xe_reset(scp);
|
||||
xe_init(scp);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
xe_stop(scp);
|
||||
}
|
||||
/* FALL THROUGH (handle changes to PROMISC/ALLMULTI flags) */
|
||||
@ -634,7 +634,7 @@ xe_intr(void *xscp)
|
||||
}
|
||||
}
|
||||
ifp->if_timer = 0;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
}
|
||||
|
||||
/* Handle most MAC interrupts */
|
||||
@ -939,7 +939,7 @@ static void xe_setmedia(void *xscp) {
|
||||
|
||||
case XE_AUTONEG_NONE:
|
||||
DEVPRINTF(2, (scp->dev, "Waiting for idle transmitter\n"));
|
||||
scp->ifp->if_flags |= IFF_OACTIVE;
|
||||
scp->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
scp->autoneg_status = XE_AUTONEG_WAITING;
|
||||
/* FALL THROUGH */
|
||||
|
||||
@ -1133,7 +1133,7 @@ static void xe_setmedia(void *xscp) {
|
||||
|
||||
/* Restart output? */
|
||||
xe_enable_intr(scp);
|
||||
scp->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
scp->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
xe_start(scp->ifp);
|
||||
}
|
||||
|
||||
@ -1202,10 +1202,10 @@ xe_stop(struct xe_softc *scp) {
|
||||
}
|
||||
|
||||
/*
|
||||
* ~IFF_RUNNING == interface down.
|
||||
* ~IFF_DRV_RUNNING == interface down.
|
||||
*/
|
||||
scp->ifp->if_flags &= ~IFF_RUNNING;
|
||||
scp->ifp->if_flags &= ~IFF_OACTIVE;
|
||||
scp->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
scp->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
scp->ifp->if_timer = 0;
|
||||
|
||||
(void)splx(s);
|
||||
|
@ -392,7 +392,7 @@ xe_pccard_detach(device_t dev)
|
||||
|
||||
DEVPRINTF(2, (dev, "pccard_detach\n"));
|
||||
|
||||
sc->ifp->if_flags &= ~IFF_RUNNING;
|
||||
sc->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
ether_ifdetach(sc->ifp);
|
||||
if_free(sc->ifp);
|
||||
xe_deactivate(dev);
|
||||
|
@ -386,8 +386,8 @@ el_init(xsc)
|
||||
CSR_WRITE_1(sc,EL_AC,(EL_AC_IRQE|EL_AC_RX));
|
||||
|
||||
/* Set flags appropriately */
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
/* And start output. */
|
||||
el_start(ifp);
|
||||
@ -413,9 +413,9 @@ el_start(struct ifnet *ifp)
|
||||
EL_LOCK(sc);
|
||||
|
||||
/* Don't do anything if output is active */
|
||||
if(sc->el_ifp->if_flags & IFF_OACTIVE)
|
||||
if(sc->el_ifp->if_drv_flags & IFF_DRV_OACTIVE)
|
||||
return;
|
||||
sc->el_ifp->if_flags |= IFF_OACTIVE;
|
||||
sc->el_ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
|
||||
/* The main loop. They warned me against endless loops, but
|
||||
* would I listen? NOOO....
|
||||
@ -426,7 +426,7 @@ el_start(struct ifnet *ifp)
|
||||
|
||||
/* If there's nothing to send, return. */
|
||||
if(m0 == NULL) {
|
||||
sc->el_ifp->if_flags &= ~IFF_OACTIVE;
|
||||
sc->el_ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
EL_UNLOCK(sc);
|
||||
return;
|
||||
}
|
||||
@ -744,15 +744,15 @@ el_ioctl(ifp, command, data)
|
||||
* If interface is marked down and it is running, then stop it
|
||||
*/
|
||||
if (((ifp->if_flags & IFF_UP) == 0) &&
|
||||
(ifp->if_flags & IFF_RUNNING)) {
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
el_stop(ifp->if_softc);
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
} else {
|
||||
/*
|
||||
* If interface is marked up and it is stopped, then start it
|
||||
*/
|
||||
if ((ifp->if_flags & IFF_UP) &&
|
||||
((ifp->if_flags & IFF_RUNNING) == 0))
|
||||
((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0))
|
||||
el_init(ifp->if_softc);
|
||||
}
|
||||
break;
|
||||
|
@ -444,12 +444,13 @@ i4biprioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
case SIOCSIFFLAGS: /* set interface flags */
|
||||
if(!(ifr->ifr_flags & IFF_UP))
|
||||
{
|
||||
if(sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if(sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
{
|
||||
/* disconnect ISDN line */
|
||||
i4b_l4_drvrdisc(BDRV_IPR,
|
||||
ifp->if_dunit);
|
||||
sc->sc_ifp->if_flags &= ~IFF_RUNNING;
|
||||
sc->sc_ifp->if_drv_flags &=
|
||||
~IFF_DRV_RUNNING;
|
||||
}
|
||||
|
||||
sc->sc_state = ST_IDLE;
|
||||
@ -594,7 +595,7 @@ ipr_connect(int unit, void *cdp)
|
||||
|
||||
NDBGL4(L4_DIALST, "ipr%d: setting dial state to ST_CONNECTED", unit);
|
||||
|
||||
sc->sc_ifp->if_flags |= IFF_RUNNING;
|
||||
sc->sc_ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
sc->sc_state = ST_CONNECTED_W;
|
||||
|
||||
sc->sc_dialresp = DSTAT_NONE;
|
||||
@ -687,7 +688,7 @@ ipr_disconnect(int unit, void *cdp)
|
||||
sc->sc_dialresp = DSTAT_NONE;
|
||||
sc->sc_lastdialresp = DSTAT_NONE;
|
||||
|
||||
sc->sc_ifp->if_flags &= ~IFF_RUNNING;
|
||||
sc->sc_ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
sc->sc_state = ST_IDLE;
|
||||
}
|
||||
|
||||
|
@ -280,7 +280,7 @@ i4bisppp_start(struct ifnet *ifp)
|
||||
|
||||
/*
|
||||
* s = splimp();
|
||||
* ifp->if_flags |= IFF_OACTIVE; // - need to clear this somewhere
|
||||
* ifp->if_drv_flags |= IFF_DRV_OACTIVE; // - need to clear this somewhere
|
||||
* splx(s);
|
||||
*/
|
||||
|
||||
|
@ -66,7 +66,7 @@ void ether_poll(int); /* polling while in trap */
|
||||
* POLL_DEREGISTER: deregister and return to interrupt mode.
|
||||
*
|
||||
* The first two commands are only issued if the interface is marked as
|
||||
* 'IFF_UP and IFF_RUNNING', the last one only if IFF_RUNNING is set.
|
||||
* 'IFF_UP and IFF_DRV_RUNNING', the last one only if IFF_DRV_RUNNING is set.
|
||||
*
|
||||
* The count limit specifies how much work the handler can do during the
|
||||
* call -- typically this is the number of packets to be received, or
|
||||
@ -251,8 +251,9 @@ ether_poll(int count)
|
||||
if (count > poll_each_burst)
|
||||
count = poll_each_burst;
|
||||
for (i = 0 ; i < poll_handlers ; i++)
|
||||
if (pr[i].handler && (IFF_UP|IFF_RUNNING) ==
|
||||
(pr[i].ifp->if_flags & (IFF_UP|IFF_RUNNING)) )
|
||||
if (pr[i].handler &&
|
||||
(pr[i].ifp->if_flags & IFF_UP) &&
|
||||
(pr[i].ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
pr[i].handler(pr[i].ifp, 0, count); /* quick check */
|
||||
mtx_unlock(&Giant);
|
||||
}
|
||||
@ -373,13 +374,14 @@ netisr_poll(void)
|
||||
|
||||
if (polling) {
|
||||
for (i = 0 ; i < poll_handlers ; i++)
|
||||
if (pr[i].handler && (IFF_UP|IFF_RUNNING) ==
|
||||
(pr[i].ifp->if_flags & (IFF_UP|IFF_RUNNING)) )
|
||||
if (pr[i].handler &&
|
||||
(pr[i].ifp->if_flags & IFF_UP) &&
|
||||
(pr[i].ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
pr[i].handler(pr[i].ifp, arg, cycles);
|
||||
} else { /* unregister */
|
||||
for (i = 0 ; i < poll_handlers ; i++) {
|
||||
if (pr[i].handler &&
|
||||
pr[i].ifp->if_flags & IFF_RUNNING) {
|
||||
pr[i].ifp->if_drv_flags & IFF_DRV_RUNNING) {
|
||||
pr[i].ifp->if_flags &= ~IFF_POLLING;
|
||||
pr[i].handler(pr[i].ifp, POLL_DEREGISTER, 1);
|
||||
}
|
||||
|
@ -908,7 +908,8 @@ bridge_ifok(struct ifnet *ifp, struct ifnet *src, struct ifnet *dst)
|
||||
return (BDG_USED(ifp)
|
||||
&& !BDG_MUTED(ifp)
|
||||
&& !_IF_QFULL(&ifp->if_snd)
|
||||
&& (ifp->if_flags & (IFF_UP|IFF_RUNNING)) == (IFF_UP|IFF_RUNNING)
|
||||
&& (ifp->if_flags & IFF_UP)
|
||||
&& (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
&& ifp != src
|
||||
&& BDG_SAMECLUSTER(ifp, dst));
|
||||
}
|
||||
|
@ -228,7 +228,7 @@ bstp_send_config_bpdu(struct bridge_softc *sc, struct bridge_iflist *bif,
|
||||
|
||||
ifp = bif->bif_ifp;
|
||||
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
return;
|
||||
|
||||
MGETHDR(m, M_DONTWAIT, MT_DATA);
|
||||
@ -370,7 +370,7 @@ bstp_transmit_tcn(struct bridge_softc *sc)
|
||||
|
||||
BRIDGE_LOCK_ASSERT(sc);
|
||||
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
return;
|
||||
|
||||
MGETHDR(m, M_DONTWAIT, MT_DATA);
|
||||
@ -1139,7 +1139,7 @@ bstp_tick(void *arg)
|
||||
bstp_hold_timer_expiry(sc, bif);
|
||||
}
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
callout_reset(&sc->sc_bstpcallout, hz, bstp_tick, sc);
|
||||
|
||||
BRIDGE_UNLOCK(sc);
|
||||
|
@ -112,7 +112,8 @@ arc_output(ifp, m, dst, rt0)
|
||||
int loop_copy = 0;
|
||||
int isphds;
|
||||
|
||||
if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING))
|
||||
if (!((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)))
|
||||
return(ENETDOWN); /* m, m1 aren't initialized yet */
|
||||
|
||||
error = 0;
|
||||
|
@ -320,8 +320,8 @@ void atm_event(struct ifnet *, u_int, void *);
|
||||
#define ATMEV_SEND_IFSTATE_CHANGED(ATMIF, CARRIER) \
|
||||
do { \
|
||||
struct atmev_ifstate_changed _arg; \
|
||||
_arg.running = (((ATMIF)->ifp->if_flags & \
|
||||
IFF_RUNNING) != 0); \
|
||||
_arg.running = (((ATMIF)->ifp->if_drv_flags & \
|
||||
IFF_DRV_RUNNING) != 0); \
|
||||
_arg.carrier = ((CARRIER) != 0); \
|
||||
atm_event((ATMIF)->ifp, ATMEV_IFSTATE_CHANGED, &_arg); \
|
||||
} while (0)
|
||||
|
@ -138,7 +138,8 @@ atm_output(struct ifnet *ifp, struct mbuf *m0, struct sockaddr *dst,
|
||||
senderr(error);
|
||||
#endif
|
||||
|
||||
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) != (IFF_UP | IFF_RUNNING))
|
||||
if (!((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)))
|
||||
senderr(ENETDOWN);
|
||||
|
||||
/*
|
||||
|
@ -584,13 +584,15 @@ bridge_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
||||
break;
|
||||
|
||||
case SIOCSIFFLAGS:
|
||||
if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) == IFF_RUNNING) {
|
||||
if (!(ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
/*
|
||||
* If interface is marked down and it is running,
|
||||
* then stop and disable it.
|
||||
*/
|
||||
bridge_stop(ifp, 1);
|
||||
} else if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) == IFF_UP) {
|
||||
} else if ((ifp->if_flags & IFF_UP) &&
|
||||
!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
|
||||
/*
|
||||
* If interface is marked up and it is stopped, then
|
||||
* start it.
|
||||
@ -700,7 +702,7 @@ bridge_delete_member(struct bridge_softc *sc, struct bridge_iflist *bif)
|
||||
|
||||
free(bif, M_DEVBUF);
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bstp_initialization(sc);
|
||||
}
|
||||
|
||||
@ -765,7 +767,7 @@ bridge_ioctl_add(struct bridge_softc *sc, void *arg)
|
||||
*/
|
||||
LIST_INSERT_HEAD(&sc->sc_iflist, bif, bif_next);
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bstp_initialization(sc);
|
||||
else
|
||||
bstp_stop(sc);
|
||||
@ -842,7 +844,7 @@ bridge_ioctl_sifflags(struct bridge_softc *sc, void *arg)
|
||||
|
||||
bif->bif_flags = req->ifbr_ifsflags;
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bstp_initialization(sc);
|
||||
|
||||
return (0);
|
||||
@ -1043,7 +1045,7 @@ bridge_ioctl_spri(struct bridge_softc *sc, void *arg)
|
||||
|
||||
sc->sc_bridge_priority = param->ifbrp_prio;
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bstp_initialization(sc);
|
||||
|
||||
return (0);
|
||||
@ -1072,7 +1074,7 @@ bridge_ioctl_sht(struct bridge_softc *sc, void *arg)
|
||||
return (EINVAL);
|
||||
sc->sc_bridge_hello_time = param->ifbrp_hellotime << 8;
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bstp_initialization(sc);
|
||||
|
||||
return (0);
|
||||
@ -1101,7 +1103,7 @@ bridge_ioctl_sfd(struct bridge_softc *sc, void *arg)
|
||||
return (EINVAL);
|
||||
sc->sc_bridge_forward_delay = param->ifbrp_fwddelay << 8;
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bstp_initialization(sc);
|
||||
|
||||
return (0);
|
||||
@ -1130,7 +1132,7 @@ bridge_ioctl_sma(struct bridge_softc *sc, void *arg)
|
||||
return (EINVAL);
|
||||
sc->sc_bridge_max_age = param->ifbrp_maxage << 8;
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bstp_initialization(sc);
|
||||
|
||||
return (0);
|
||||
@ -1150,7 +1152,7 @@ bridge_ioctl_sifprio(struct bridge_softc *sc, void *arg)
|
||||
|
||||
bif->bif_priority = req->ifbr_priority;
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bstp_initialization(sc);
|
||||
|
||||
return (0);
|
||||
@ -1170,7 +1172,7 @@ bridge_ioctl_sifcost(struct bridge_softc *sc, void *arg)
|
||||
|
||||
bif->bif_path_cost = req->ifbr_path_cost;
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
bstp_initialization(sc);
|
||||
|
||||
return (0);
|
||||
@ -1207,14 +1209,14 @@ bridge_init(void *xsc)
|
||||
struct bridge_softc *sc = (struct bridge_softc *)xsc;
|
||||
struct ifnet *ifp = sc->sc_ifp;
|
||||
|
||||
if (ifp->if_flags & IFF_RUNNING)
|
||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
return;
|
||||
|
||||
callout_reset(&sc->sc_brcallout, bridge_rtable_prune_period * hz,
|
||||
bridge_timer, sc);
|
||||
|
||||
BRIDGE_LOCK(sc);
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
bstp_initialization(sc);
|
||||
BRIDGE_UNLOCK(sc);
|
||||
return;
|
||||
@ -1232,7 +1234,7 @@ bridge_stop(struct ifnet *ifp, int disable)
|
||||
|
||||
BRIDGE_LOCK_ASSERT(sc);
|
||||
|
||||
if ((ifp->if_flags & IFF_RUNNING) == 0)
|
||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
return;
|
||||
|
||||
callout_stop(&sc->sc_brcallout);
|
||||
@ -1240,7 +1242,7 @@ bridge_stop(struct ifnet *ifp, int disable)
|
||||
|
||||
bridge_rtflush(sc, IFBF_FLUSHDYN);
|
||||
|
||||
ifp->if_flags &= ~IFF_RUNNING;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1284,7 +1286,7 @@ bridge_enqueue(struct bridge_softc *sc, struct ifnet *dst_ifp, struct mbuf *m)
|
||||
}
|
||||
}
|
||||
|
||||
if ((dst_ifp->if_flags & IFF_OACTIVE) == 0)
|
||||
if ((dst_ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0)
|
||||
(*dst_ifp->if_start)(dst_ifp);
|
||||
}
|
||||
|
||||
@ -1361,7 +1363,7 @@ bridge_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *sa,
|
||||
* go ahead and send out that interface. Otherwise, the packet
|
||||
* is dropped below.
|
||||
*/
|
||||
if ((sc->sc_ifp->if_flags & IFF_RUNNING) == 0) {
|
||||
if ((sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
dst_if = ifp;
|
||||
goto sendunicast;
|
||||
}
|
||||
@ -1386,7 +1388,7 @@ bridge_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *sa,
|
||||
}
|
||||
LIST_FOREACH(bif, &sc->sc_iflist, bif_next) {
|
||||
dst_if = bif->bif_ifp;
|
||||
if ((dst_if->if_flags & IFF_RUNNING) == 0)
|
||||
if ((dst_if->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
continue;
|
||||
|
||||
/*
|
||||
@ -1429,7 +1431,7 @@ bridge_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *sa,
|
||||
* XXX Spanning tree consideration here?
|
||||
*/
|
||||
|
||||
if ((dst_if->if_flags & IFF_RUNNING) == 0) {
|
||||
if ((dst_if->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
m_freem(m);
|
||||
BRIDGE_UNLOCK(sc);
|
||||
return (0);
|
||||
@ -1456,7 +1458,7 @@ bridge_start(struct ifnet *ifp)
|
||||
|
||||
sc = ifp->if_softc;
|
||||
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
for (;;) {
|
||||
IFQ_DEQUEUE(&ifp->if_snd, m);
|
||||
if (m == 0)
|
||||
@ -1490,7 +1492,7 @@ bridge_start(struct ifnet *ifp)
|
||||
bridge_enqueue(sc, dst_if, m);
|
||||
}
|
||||
}
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1612,7 +1614,7 @@ bridge_forward(struct bridge_softc *sc, struct mbuf *m)
|
||||
* At this point, we're dealing with a unicast frame
|
||||
* going to a different interface.
|
||||
*/
|
||||
if ((dst_if->if_flags & IFF_RUNNING) == 0) {
|
||||
if ((dst_if->if_drv_flags & IFF_DRV_RUNNING) == 0) {
|
||||
BRIDGE_UNLOCK(sc);
|
||||
m_freem(m);
|
||||
return;
|
||||
@ -1668,7 +1670,7 @@ bridge_input(struct ifnet *ifp, struct mbuf *m)
|
||||
struct ether_header *eh;
|
||||
struct mbuf *mc;
|
||||
|
||||
if ((sc->sc_ifp->if_flags & IFF_RUNNING) == 0)
|
||||
if ((sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
return (m);
|
||||
|
||||
BRIDGE_LOCK(sc);
|
||||
@ -1834,7 +1836,7 @@ bridge_broadcast(struct bridge_softc *sc, struct ifnet *src_if,
|
||||
(m->m_flags & (M_BCAST|M_MCAST)) == 0)
|
||||
continue;
|
||||
|
||||
if ((dst_if->if_flags & IFF_RUNNING) == 0)
|
||||
if ((dst_if->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
||||
continue;
|
||||
|
||||
if (LIST_NEXT(bif, bif_next) == NULL) {
|
||||
@ -1990,7 +1992,7 @@ bridge_timer(void *arg)
|
||||
bridge_rtage(sc);
|
||||
BRIDGE_UNLOCK(sc);
|
||||
|
||||
if (sc->sc_ifp->if_flags & IFF_RUNNING)
|
||||
if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||
callout_reset(&sc->sc_brcallout,
|
||||
bridge_rtable_prune_period * hz, bridge_timer, sc);
|
||||
}
|
||||
|
@ -143,7 +143,7 @@ ef_attach(struct efnet *sc)
|
||||
|
||||
ifp->if_resolvemulti = 0;
|
||||
ifp->if_type = IFT_XETHER;
|
||||
ifp->if_flags |= IFF_RUNNING;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
|
||||
EFDEBUG("%s: attached\n", ifp->if_xname);
|
||||
return 1;
|
||||
@ -214,7 +214,7 @@ ef_start(struct ifnet *ifp)
|
||||
struct mbuf *m;
|
||||
int error;
|
||||
|
||||
ifp->if_flags |= IFF_OACTIVE;
|
||||
ifp->if_drv_flags |= IFF_DRV_OACTIVE;
|
||||
p = sc->ef_pifp;
|
||||
|
||||
EFDEBUG("\n");
|
||||
@ -230,7 +230,7 @@ ef_start(struct ifnet *ifp)
|
||||
}
|
||||
ifp->if_opackets++;
|
||||
}
|
||||
ifp->if_flags &= ~IFF_OACTIVE;
|
||||
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -163,7 +163,8 @@ ether_output(struct ifnet *ifp, struct mbuf *m,
|
||||
|
||||
if (ifp->if_flags & IFF_MONITOR)
|
||||
senderr(ENETDOWN);
|
||||
if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING))
|
||||
if (!((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)))
|
||||
senderr(ENETDOWN);
|
||||
|
||||
hlen = ETHER_HDR_LEN;
|
||||
|
@ -300,7 +300,8 @@ faithioctl(ifp, cmd, data)
|
||||
switch (cmd) {
|
||||
|
||||
case SIOCSIFADDR:
|
||||
ifp->if_flags |= IFF_UP | IFF_RUNNING;
|
||||
ifp->if_flags |= IFF_UP;
|
||||
ifp->if_drv_flags |= IFF_DRV_RUNNING;
|
||||
ifa = (struct ifaddr *)data;
|
||||
ifa->ifa_rtrequest = faithrtrequest;
|
||||
/*
|
||||
|
@ -127,7 +127,8 @@ fddi_output(ifp, m, dst, rt0)
|
||||
|
||||
if (ifp->if_flags & IFF_MONITOR)
|
||||
senderr(ENETDOWN);
|
||||
if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING))
|
||||
if (!((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)))
|
||||
senderr(ENETDOWN);
|
||||
getmicrotime(&ifp->if_lastchange);
|
||||
|
||||
@ -387,7 +388,8 @@ fddi_input(ifp, m)
|
||||
/*
|
||||
* Discard packet if interface is not up.
|
||||
*/
|
||||
if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING))
|
||||
if (!((ifp->if_flags & IFF_UP) &&
|
||||
(ifp->if_drv_flags & IFF_DRV_RUNNING)))
|
||||
goto dropanyway;
|
||||
|
||||
/*
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user