summaryrefslogtreecommitdiffstats
path: root/sys/dev/arl/if_arl_isa.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/arl/if_arl_isa.c')
-rw-r--r--sys/dev/arl/if_arl_isa.c28
1 files changed, 7 insertions, 21 deletions
diff --git a/sys/dev/arl/if_arl_isa.c b/sys/dev/arl/if_arl_isa.c
index 11cbf5f..91b6e41 100644
--- a/sys/dev/arl/if_arl_isa.c
+++ b/sys/dev/arl/if_arl_isa.c
@@ -214,13 +214,10 @@ arl_isa_probe (device_t dev)
if (isa_get_vendorid(dev))
return (ENXIO);
+ sc->arl_dev = dev;
if (bootverbose)
device_printf(dev, "in probe\n");
- bzero(sc, sizeof(struct arl_softc));
-
- sc->arl_unit = device_get_unit(dev);
-
error = arl_alloc_memory(dev, 0, ARL_BASE_STEP);
if (error) {
if (bootverbose)
@@ -294,25 +291,14 @@ static int
arl_isa_attach (device_t dev)
{
struct arl_softc *sc = device_get_softc(dev);
- int error;
+ sc->arl_dev = dev;
if (bootverbose)
device_printf(dev, "in attach\n");
arl_alloc_memory(dev, sc->mem_rid, ARL_BASE_STEP);
arl_alloc_irq(dev, sc->irq_rid, 0);
- error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET,
- NULL, arl_intr, sc, &sc->irq_handle);
- if (error) {
- arl_release_resources(dev);
- return (error);
- }
-
-#if __FreeBSD_version < 502108
- device_printf(dev, "Ethernet address %6D\n", IFP2ENADDR(sc->arl_ifp), ":");
-#endif
-
return arl_attach(dev);
}
@@ -321,16 +307,16 @@ arl_isa_detach(device_t dev)
{
struct arl_softc *sc = device_get_softc(dev);
+ ARL_LOCK(sc);
arl_stop(sc);
+ ARL_UNLOCK(sc);
+ callout_drain(&sc->arl_timer);
+ ether_ifdetach(sc->arl_ifp);
ifmedia_removeall(&sc->arl_ifmedia);
bus_teardown_intr(dev, sc->irq_res, sc->irq_handle);
-#if __FreeBSD_version < 500100
- ether_ifdetach(sc->arl_ifp, ETHER_BPF_SUPPORTED);
-#else
- ether_ifdetach(sc->arl_ifp);
if_free(sc->arl_ifp);
-#endif
arl_release_resources(dev);
+ mtx_destroy(&sc->arl_lock);
return (0);
}
OpenPOWER on IntegriCloud