summaryrefslogtreecommitdiffstats
path: root/sys/dev/pdq/pdq_ifsubr.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/pdq/pdq_ifsubr.c')
-rw-r--r--sys/dev/pdq/pdq_ifsubr.c72
1 files changed, 29 insertions, 43 deletions
diff --git a/sys/dev/pdq/pdq_ifsubr.c b/sys/dev/pdq/pdq_ifsubr.c
index d3a64e2..fa48594 100644
--- a/sys/dev/pdq/pdq_ifsubr.c
+++ b/sys/dev/pdq/pdq_ifsubr.c
@@ -36,10 +36,6 @@ __FBSDID("$FreeBSD$");
* (ie. it provides an ifnet interface to the rest of the system)
*/
-#ifdef __NetBSD__
-#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pdq_ifsubr.c,v 1.38 2001/12/21 23:21:47 matt Exp $");
-#endif
#define PDQ_OSSUPPORT
@@ -63,6 +59,7 @@ __KERNEL_RCSID(0, "$NetBSD: pdq_ifsubr.c,v 1.38 2001/12/21 23:21:47 matt Exp $")
#include <net/if_arp.h>
#include <net/if_dl.h>
#include <net/if_media.h>
+#include <net/if_types.h>
#include <net/fddi.h>
#include <net/bpf.h>
@@ -76,14 +73,14 @@ static void
pdq_ifinit(
pdq_softc_t *sc)
{
- if (sc->sc_if.if_flags & IFF_UP) {
- sc->sc_if.if_flags |= IFF_RUNNING;
- if (sc->sc_if.if_flags & IFF_PROMISC) {
+ if (PDQ_IFNET(sc)->if_flags & IFF_UP) {
+ PDQ_IFNET(sc)->if_flags |= IFF_RUNNING;
+ if (PDQ_IFNET(sc)->if_flags & IFF_PROMISC) {
sc->sc_pdq->pdq_flags |= PDQ_PROMISC;
} else {
sc->sc_pdq->pdq_flags &= ~PDQ_PROMISC;
}
- if (sc->sc_if.if_flags & IFF_LINK1) {
+ if (PDQ_IFNET(sc)->if_flags & IFF_LINK1) {
sc->sc_pdq->pdq_flags |= PDQ_PASS_SMT;
} else {
sc->sc_pdq->pdq_flags &= ~PDQ_PASS_SMT;
@@ -91,7 +88,7 @@ pdq_ifinit(
sc->sc_pdq->pdq_flags |= PDQ_RUNNING;
pdq_run(sc->sc_pdq);
} else {
- sc->sc_if.if_flags &= ~IFF_RUNNING;
+ PDQ_IFNET(sc)->if_flags &= ~IFF_RUNNING;
sc->sc_pdq->pdq_flags &= ~PDQ_RUNNING;
pdq_stop(sc->sc_pdq);
}
@@ -128,11 +125,11 @@ pdq_ifstart(
if ((ifp->if_flags & IFF_RUNNING) == 0)
return;
- if (sc->sc_if.if_timer == 0)
- sc->sc_if.if_timer = PDQ_OS_TX_TIMEOUT;
+ 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) {
- sc->sc_if.if_flags |= IFF_OACTIVE;
+ PDQ_IFNET(sc)->if_flags |= IFF_OACTIVE;
return;
}
sc->sc_flags |= PDQIF_DOWNCALL;
@@ -189,7 +186,7 @@ pdq_os_receive_pdu(
int drop)
{
pdq_softc_t *sc = pdq->pdq_os_ctx;
- struct ifnet *ifp = &sc->sc_if;
+ struct ifnet *ifp = PDQ_IFNET(sc);
struct fddi_header *fh;
ifp->if_ipackets++;
@@ -212,10 +209,6 @@ pdq_os_receive_pdu(
}
#endif
m->m_pkthdr.len = pktlen;
-#if NBPFILTER > 0 && defined(__NetBSD__)
- if (sc->sc_bpf != NULL)
- PDQ_BPF_MTAP(sc, m);
-#endif
fh = mtod(m, struct fddi_header *);
if (drop || (fh->fddi_fc & (FDDIFC_L|FDDIFC_F)) != FDDIFC_LLC_ASYNC) {
ifp->if_iqdrops++;
@@ -233,13 +226,13 @@ pdq_os_restart_transmitter(
pdq_t *pdq)
{
pdq_softc_t *sc = pdq->pdq_os_ctx;
- sc->sc_if.if_flags &= ~IFF_OACTIVE;
- if (IFQ_IS_EMPTY(&sc->sc_if.if_snd) == 0) {
- sc->sc_if.if_timer = PDQ_OS_TX_TIMEOUT;
+ PDQ_IFNET(sc)->if_flags &= ~IFF_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)
- pdq_ifstart(&sc->sc_if);
+ pdq_ifstart(PDQ_IFNET(sc));
} else {
- sc->sc_if.if_timer = 0;
+ PDQ_IFNET(sc)->if_timer = 0;
}
}
@@ -250,11 +243,11 @@ pdq_os_transmit_done(
{
pdq_softc_t *sc = pdq->pdq_os_ctx;
#if NBPFILTER > 0
- if (sc->sc_bpf != NULL)
+ if (PQD_IFNET(sc)->if_bpf != NULL)
PDQ_BPF_MTAP(sc, m);
#endif
PDQ_OS_DATABUF_FREE(pdq, m);
- sc->sc_if.if_opackets++;
+ PDQ_IFNET(sc)->if_opackets++;
}
void
@@ -267,7 +260,7 @@ pdq_os_addr_fill(
struct ifnet *ifp;
struct ifmultiaddr *ifma;
- ifp = &sc->arpcom.ac_if;
+ ifp = sc->ifp;
/*
* ADDR_FILTER_SET is always issued before FILTER_SET so
@@ -277,10 +270,10 @@ pdq_os_addr_fill(
pdq->pdq_flags &= ~PDQ_ALLMULTI;
#if defined(IFF_ALLMULTI)
- sc->sc_if.if_flags &= ~IFF_ALLMULTI;
+ PDQ_IFNET(sc)->if_flags &= ~IFF_ALLMULTI;
#endif
- for (ifma = TAILQ_FIRST(&sc->sc_if.if_multiaddrs); ifma && num_addrs > 0;
+ for (ifma = TAILQ_FIRST(&PDQ_IFNET(sc)->if_multiaddrs); ifma && num_addrs > 0;
ifma = TAILQ_NEXT(ifma, ifma_link)) {
char *mcaddr;
if (ifma->ifma_addr->sa_family != AF_LINK)
@@ -298,7 +291,7 @@ pdq_os_addr_fill(
if (ifma != NULL) {
pdq->pdq_flags |= PDQ_ALLMULTI;
#if defined(IFF_ALLMULTI)
- sc->sc_if.if_flags |= IFF_ALLMULTI;
+ PDQ_IFNET(sc)->if_flags |= IFF_ALLMULTI;
#endif
}
}
@@ -384,7 +377,7 @@ pdq_ifioctl(
case SIOCADDMULTI:
case SIOCDELMULTI: {
- if (sc->sc_if.if_flags & IFF_RUNNING) {
+ if (PDQ_IFNET(sc)->if_flags & IFF_RUNNING) {
pdq_run(sc->sc_pdq);
error = 0;
}
@@ -417,7 +410,11 @@ pdq_ifioctl(
void
pdq_ifattach(pdq_softc_t *sc)
{
- struct ifnet *ifp = &sc->sc_if;
+ struct ifnet *ifp;
+
+ ifp = PDQ_IFNET(sc) = if_alloc(IFT_FDDI);
+ if (ifp == NULL)
+ panic("%s: can not if_alloc()", device_get_nameunit(sc->dev));
mtx_init(&sc->mtx, device_get_nameunit(sc->dev), MTX_NETWORK_LOCK,
MTX_DEF | MTX_RECURSE);
@@ -427,16 +424,9 @@ pdq_ifattach(pdq_softc_t *sc)
ifp->if_snd.ifq_maxlen = IFQ_MAXLEN;
ifp->if_flags = IFF_BROADCAST|IFF_SIMPLEX|IFF_NOTRAILERS|IFF_MULTICAST;
-#if (defined(__FreeBSD__) && BSD >= 199506) || defined(__NetBSD__)
ifp->if_watchdog = pdq_ifwatchdog;
-#else
- ifp->if_watchdog = ifwatchdog;
-#endif
ifp->if_ioctl = pdq_ifioctl;
-#if !defined(__NetBSD__) && !defined(__FreeBSD__)
- ifp->if_output = fddi_output;
-#endif
ifp->if_start = pdq_ifstart;
#if defined(IFM_FDDI)
@@ -449,12 +439,7 @@ pdq_ifattach(pdq_softc_t *sc)
}
#endif
-#if defined(__NetBSD__)
- if_attach(ifp);
- fddi_ifattach(ifp, (caddr_t)&sc->sc_pdq->pdq_hwaddr);
-#else
fddi_ifattach(ifp, FDDI_BPF_SUPPORTED);
-#endif
}
void
@@ -462,9 +447,10 @@ pdq_ifdetach (pdq_softc_t *sc)
{
struct ifnet *ifp;
- ifp = &sc->arpcom.ac_if;
+ ifp = sc->ifp;
fddi_ifdetach(ifp, FDDI_BPF_SUPPORTED);
+ if_free(ifp);
pdq_stop(sc->sc_pdq);
pdq_free(sc->dev);
OpenPOWER on IntegriCloud