summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorharti <harti@FreeBSD.org>2003-04-29 08:07:44 +0000
committerharti <harti@FreeBSD.org>2003-04-29 08:07:44 +0000
commit434086177ff1782e5033d3ef3944a029b263f85b (patch)
tree631feff583589aa3eebd1ddb28044891f36cc315
parentdb92d84028d043a57be76ff4d516386f5736053e (diff)
downloadFreeBSD-src-434086177ff1782e5033d3ef3944a029b263f85b.zip
FreeBSD-src-434086177ff1782e5033d3ef3944a029b263f85b.tar.gz
Add module data and version to the atm_subr and reference this info from the
(currently) only consumer (en). Add a sysctl node hw.atm where the atm drivers will hook on their hardware sysctl sub-trees. Make atm_ifattach call if_attach and remove the corresponding call to if_attach from en. Create atm_ifdetach and use that in en. While the last change actually changes the interface this is not a problem in practice because the only other consumer of this API is an older LANAI driver on the net, that is not ready for current anyway. Reviewed by: -atm
-rw-r--r--sys/dev/en/if_en_pci.c7
-rw-r--r--sys/dev/en/midway.c5
-rw-r--r--sys/net/if_atm.h1
-rw-r--r--sys/net/if_atmsubr.c26
-rw-r--r--sys/pci/if_en_pci.c7
5 files changed, 38 insertions, 8 deletions
diff --git a/sys/dev/en/if_en_pci.c b/sys/dev/en/if_en_pci.c
index 45e5e3a..19b174c 100644
--- a/sys/dev/en/if_en_pci.c
+++ b/sys/dev/en/if_en_pci.c
@@ -66,6 +66,9 @@
#include <dev/en/midwayreg.h>
#include <dev/en/midwayvar.h>
+MODULE_DEPEND(en, pci, 1, 1, 1);
+MODULE_DEPEND(en, atm, 1, 1, 1);
+
/*
* local structures
*/
@@ -262,7 +265,7 @@ en_pci_attach(device_t dev)
en_intr, sc, &scp->ih);
if (error) {
en_reset(sc);
- if_detach(&sc->enif);
+ atm_ifdetach(&sc->enif);
device_printf(dev, "could not setup irq\n");
bus_release_resource(dev, SYS_RES_IRQ, 0, scp->irq);
bus_release_resource(dev, SYS_RES_MEMORY, PCI_CBMA, scp->res);
@@ -297,7 +300,7 @@ en_pci_detach(device_t dev)
* Close down routes etc.
*/
en_reset(sc);
- if_detach(&sc->enif);
+ atm_ifdetach(&sc->enif);
/*
* Deallocate resources.
diff --git a/sys/dev/en/midway.c b/sys/dev/en/midway.c
index 5ccb66a..e468f4f 100644
--- a/sys/dev/en/midway.c
+++ b/sys/dev/en/midway.c
@@ -173,7 +173,7 @@ enum {
#define ENOTHER_DRAIN 0x02 /* almost free (drain DRQ dma) */
#define ENOTHER_SWSL 0x08 /* in software service list */
-SYSCTL_NODE(_hw, OID_AUTO, en, CTLFLAG_RW, 0, "ENI 155p");
+SYSCTL_DECL(_hw_atm);
/*
* dma tables
@@ -2767,7 +2767,7 @@ en_attach(struct en_softc *sc)
sysctl_ctx_init(&sc->sysctl_ctx);
if ((sc->sysctl_tree = SYSCTL_ADD_NODE(&sc->sysctl_ctx,
- SYSCTL_STATIC_CHILDREN(_hw_en), OID_AUTO,
+ SYSCTL_STATIC_CHILDREN(_hw_atm), OID_AUTO,
device_get_nameunit(sc->dev), CTLFLAG_RD, 0, "")) == NULL)
goto fail;
@@ -2877,7 +2877,6 @@ en_attach(struct en_softc *sc)
/*
* final commit
*/
- if_attach(ifp);
atm_ifattach(ifp);
#ifdef ENABLE_BPF
diff --git a/sys/net/if_atm.h b/sys/net/if_atm.h
index f09f7a6..b8a34a8 100644
--- a/sys/net/if_atm.h
+++ b/sys/net/if_atm.h
@@ -99,6 +99,7 @@ struct atmllc {
#ifdef _KERNEL
void atm_ifattach(struct ifnet *);
+void atm_ifdetach(struct ifnet *);
void atm_input(struct ifnet *, struct atm_pseudohdr *,
struct mbuf *, void *);
int atm_output(struct ifnet *, struct mbuf *, struct sockaddr *,
diff --git a/sys/net/if_atmsubr.c b/sys/net/if_atmsubr.c
index 7fbf1e8..ac1c8da 100644
--- a/sys/net/if_atmsubr.c
+++ b/sys/net/if_atmsubr.c
@@ -45,11 +45,14 @@
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
#include <sys/mac.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <sys/errno.h>
+#include <sys/sysctl.h>
#include <net/if.h>
#include <net/netisr.h>
@@ -68,6 +71,8 @@
#include <netnatm/natm.h>
#endif
+SYSCTL_NODE(_hw, OID_AUTO, atm, CTLFLAG_RW, 0, "ATM hardware");
+
#ifndef ETHERTYPE_IPV6
#define ETHERTYPE_IPV6 0x86dd
#endif
@@ -283,7 +288,7 @@ atm_input(ifp, ah, m, rxhand)
}
/*
- * Perform common duties while attaching to interface list
+ * Perform common duties while attaching to interface list.
*/
void
atm_ifattach(ifp)
@@ -295,6 +300,7 @@ atm_ifattach(ifp)
ifp->if_type = IFT_ATM;
ifp->if_addrlen = 0;
ifp->if_hdrlen = 0;
+ if_attach(ifp);
ifp->if_mtu = ATMMTU;
ifp->if_output = atm_output;
#if 0
@@ -321,3 +327,21 @@ atm_ifattach(ifp)
}
}
+
+/*
+ * Common stuff for detaching an ATM interface
+ */
+void
+atm_ifdetach(struct ifnet *ifp)
+{
+ if_detach(ifp);
+}
+
+static moduledata_t atm_mod = {
+ "atm",
+ NULL,
+ 0
+};
+
+DECLARE_MODULE(atm, atm_mod, SI_SUB_PSEUDO, SI_ORDER_ANY);
+MODULE_VERSION(atm, 1);
diff --git a/sys/pci/if_en_pci.c b/sys/pci/if_en_pci.c
index 45e5e3a..19b174c 100644
--- a/sys/pci/if_en_pci.c
+++ b/sys/pci/if_en_pci.c
@@ -66,6 +66,9 @@
#include <dev/en/midwayreg.h>
#include <dev/en/midwayvar.h>
+MODULE_DEPEND(en, pci, 1, 1, 1);
+MODULE_DEPEND(en, atm, 1, 1, 1);
+
/*
* local structures
*/
@@ -262,7 +265,7 @@ en_pci_attach(device_t dev)
en_intr, sc, &scp->ih);
if (error) {
en_reset(sc);
- if_detach(&sc->enif);
+ atm_ifdetach(&sc->enif);
device_printf(dev, "could not setup irq\n");
bus_release_resource(dev, SYS_RES_IRQ, 0, scp->irq);
bus_release_resource(dev, SYS_RES_MEMORY, PCI_CBMA, scp->res);
@@ -297,7 +300,7 @@ en_pci_detach(device_t dev)
* Close down routes etc.
*/
en_reset(sc);
- if_detach(&sc->enif);
+ atm_ifdetach(&sc->enif);
/*
* Deallocate resources.
OpenPOWER on IntegriCloud