diff options
-rw-r--r-- | sys/dev/sk/if_sk.c | 37 | ||||
-rw-r--r-- | sys/pci/if_sk.c | 37 | ||||
-rw-r--r-- | sys/pci/if_tl.c | 47 | ||||
-rw-r--r-- | sys/pci/if_xl.c | 43 |
4 files changed, 92 insertions, 72 deletions
diff --git a/sys/dev/sk/if_sk.c b/sys/dev/sk/if_sk.c index e715593..10f7dc9 100644 --- a/sys/dev/sk/if_sk.c +++ b/sys/dev/sk/if_sk.c @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_sk.c,v 1.5 1999/07/22 04:04:11 wpaul Exp $ + * $Id: if_sk.c,v 1.51 1999/07/14 21:48:19 wpaul Exp $ */ /* @@ -102,7 +102,7 @@ #ifndef lint static const char rcsid[] = - "$Id: if_sk.c,v 1.5 1999/07/22 04:04:11 wpaul Exp $"; + "$Id: if_sk.c,v 1.51 1999/07/14 21:48:19 wpaul Exp $"; #endif static struct sk_type sk_devs[] = { @@ -157,6 +157,14 @@ static u_int32_t sk_calchash __P((caddr_t)); static void sk_setfilt __P((struct sk_if_softc *, caddr_t, int)); static void sk_setmulti __P((struct sk_if_softc *)); +#ifdef SK_USEIOSPACE +#define SK_RES SYS_RES_IOPORT +#define SK_RID SK_PCI_LOIO +#else +#define SK_RES SYS_RES_MEMORY +#define SK_RID SK_PCI_LOMEM +#endif + static device_method_t sk_methods[] = { /* Device interface */ DEVMETHOD(device_probe, sk_probe), @@ -1198,21 +1206,17 @@ static int sk_attach(dev) error = ENXIO; goto fail; } - - rid = SK_PCI_LOIO; - sc->sk_res = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, - 0, ~0, 1, RF_ACTIVE); #else if (!(command & PCIM_CMD_MEMEN)) { printf("skc%d: failed to enable memory mapping!\n", unit); error = ENXIO; goto fail; } +#endif - rid = SK_PCI_LOMEM; - sc->sk_res = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, + rid = SK_RID; + sc->sk_res = bus_alloc_resource(dev, SK_RES, &rid, 0, ~0, 1, RF_ACTIVE); -#endif if (sc->sk_res == NULL) { printf("sk%d: couldn't map ports/memory\n", unit); @@ -1230,6 +1234,7 @@ static int sk_attach(dev) if (sc->sk_irq == NULL) { printf("skc%d: couldn't map interrupt\n", unit); + bus_release_resource(dev, SK_RES, SK_RID, sc->sk_res); error = ENXIO; goto fail; } @@ -1239,6 +1244,8 @@ static int sk_attach(dev) if (error) { printf("skc%d: couldn't set up irq\n", unit); + bus_release_resource(dev, SK_RES, SK_RID, sc->sk_res); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sk_res); goto fail; } @@ -1271,6 +1278,9 @@ static int sk_attach(dev) default: printf("skc%d: unknown ram size: %d\n", sc->sk_unit, sk_win_read_1(sc, SK_EPROM0)); + bus_teardown_intr(dev, sc->sk_irq, sc->sk_intrhand); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sk_irq); + bus_release_resource(dev, SK_RES, SK_RID, sc->sk_res); error = ENXIO; goto fail; break; @@ -1293,6 +1303,9 @@ static int sk_attach(dev) default: printf("skc%d: unknown media type: 0x%x\n", sc->sk_unit, sk_win_read_1(sc, SK_PMDTYPE)); + bus_teardown_intr(dev, sc->sk_irq, sc->sk_intrhand); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sk_irq); + bus_release_resource(dev, SK_RES, SK_RID, sc->sk_res); error = ENXIO; goto fail; } @@ -1340,11 +1353,7 @@ static int sk_detach(dev) bus_teardown_intr(dev, sc->sk_irq, sc->sk_intrhand); bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sk_irq); -#ifdef SK_USEIOSPACE - bus_release_resource(dev, SYS_RES_IOPORT, SK_PCI_LOIO, sc->sk_res); -#else - bus_release_resource(dev, SYS_RES_MEMORY, SK_PCI_LOMEM, sc->sk_res); -#endif + bus_release_resource(dev, SK_RES, SK_RID, sc->sk_res); splx(s); diff --git a/sys/pci/if_sk.c b/sys/pci/if_sk.c index e715593..10f7dc9 100644 --- a/sys/pci/if_sk.c +++ b/sys/pci/if_sk.c @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_sk.c,v 1.5 1999/07/22 04:04:11 wpaul Exp $ + * $Id: if_sk.c,v 1.51 1999/07/14 21:48:19 wpaul Exp $ */ /* @@ -102,7 +102,7 @@ #ifndef lint static const char rcsid[] = - "$Id: if_sk.c,v 1.5 1999/07/22 04:04:11 wpaul Exp $"; + "$Id: if_sk.c,v 1.51 1999/07/14 21:48:19 wpaul Exp $"; #endif static struct sk_type sk_devs[] = { @@ -157,6 +157,14 @@ static u_int32_t sk_calchash __P((caddr_t)); static void sk_setfilt __P((struct sk_if_softc *, caddr_t, int)); static void sk_setmulti __P((struct sk_if_softc *)); +#ifdef SK_USEIOSPACE +#define SK_RES SYS_RES_IOPORT +#define SK_RID SK_PCI_LOIO +#else +#define SK_RES SYS_RES_MEMORY +#define SK_RID SK_PCI_LOMEM +#endif + static device_method_t sk_methods[] = { /* Device interface */ DEVMETHOD(device_probe, sk_probe), @@ -1198,21 +1206,17 @@ static int sk_attach(dev) error = ENXIO; goto fail; } - - rid = SK_PCI_LOIO; - sc->sk_res = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, - 0, ~0, 1, RF_ACTIVE); #else if (!(command & PCIM_CMD_MEMEN)) { printf("skc%d: failed to enable memory mapping!\n", unit); error = ENXIO; goto fail; } +#endif - rid = SK_PCI_LOMEM; - sc->sk_res = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, + rid = SK_RID; + sc->sk_res = bus_alloc_resource(dev, SK_RES, &rid, 0, ~0, 1, RF_ACTIVE); -#endif if (sc->sk_res == NULL) { printf("sk%d: couldn't map ports/memory\n", unit); @@ -1230,6 +1234,7 @@ static int sk_attach(dev) if (sc->sk_irq == NULL) { printf("skc%d: couldn't map interrupt\n", unit); + bus_release_resource(dev, SK_RES, SK_RID, sc->sk_res); error = ENXIO; goto fail; } @@ -1239,6 +1244,8 @@ static int sk_attach(dev) if (error) { printf("skc%d: couldn't set up irq\n", unit); + bus_release_resource(dev, SK_RES, SK_RID, sc->sk_res); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sk_res); goto fail; } @@ -1271,6 +1278,9 @@ static int sk_attach(dev) default: printf("skc%d: unknown ram size: %d\n", sc->sk_unit, sk_win_read_1(sc, SK_EPROM0)); + bus_teardown_intr(dev, sc->sk_irq, sc->sk_intrhand); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sk_irq); + bus_release_resource(dev, SK_RES, SK_RID, sc->sk_res); error = ENXIO; goto fail; break; @@ -1293,6 +1303,9 @@ static int sk_attach(dev) default: printf("skc%d: unknown media type: 0x%x\n", sc->sk_unit, sk_win_read_1(sc, SK_PMDTYPE)); + bus_teardown_intr(dev, sc->sk_irq, sc->sk_intrhand); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sk_irq); + bus_release_resource(dev, SK_RES, SK_RID, sc->sk_res); error = ENXIO; goto fail; } @@ -1340,11 +1353,7 @@ static int sk_detach(dev) bus_teardown_intr(dev, sc->sk_irq, sc->sk_intrhand); bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sk_irq); -#ifdef SK_USEIOSPACE - bus_release_resource(dev, SYS_RES_IOPORT, SK_PCI_LOIO, sc->sk_res); -#else - bus_release_resource(dev, SYS_RES_MEMORY, SK_PCI_LOMEM, sc->sk_res); -#endif + bus_release_resource(dev, SK_RES, SK_RID, sc->sk_res); splx(s); diff --git a/sys/pci/if_tl.c b/sys/pci/if_tl.c index 117d587..688ea42 100644 --- a/sys/pci/if_tl.c +++ b/sys/pci/if_tl.c @@ -339,6 +339,14 @@ static void tl_dio_clrbit __P((struct tl_softc *, int, int)); static void tl_dio_setbit16 __P((struct tl_softc *, int, int)); static void tl_dio_clrbit16 __P((struct tl_softc *, int, int)); +#ifdef TL_USEIOSPACE +#define TL_RES SYS_RES_IOPORT +#define TL_RID TL_PCI_LOIO +#else +#define TL_RES SYS_RES_MEMORY +#define TL_RID TL_PCI_LOMEM +#endif + static device_method_t tl_methods[] = { /* Device interface */ DEVMETHOD(device_probe, tl_probe), @@ -1531,9 +1539,6 @@ static int tl_attach(dev) device_t dev; { int s, i, phys = 0; -#ifndef TL_USEIOSPACE - vm_offset_t pbase, vbase; -#endif u_int32_t command; u_int16_t did, vid; struct tl_type *t; @@ -1635,6 +1640,7 @@ static int tl_attach(dev) RF_SHAREABLE | RF_ACTIVE); if (sc->tl_irq == NULL) { + bus_release_resource(dev, TL_RES, TL_RID, sc->tl_res); printf("tl%d: couldn't map interrupt\n", unit); error = ENXIO; goto fail; @@ -1644,6 +1650,8 @@ static int tl_attach(dev) tl_intr, sc, &sc->tl_intrhand); if (error) { + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->tl_res); + bus_release_resource(dev, TL_RES, TL_RID, sc->tl_res); printf("tl%d: couldn't set up irq\n", unit); goto fail; } @@ -1664,14 +1672,9 @@ static int tl_attach(dev) M_DEVBUF, M_NOWAIT); if (sc->tl_ldata_ptr == NULL) { + bus_teardown_intr(dev, sc->tl_irq, sc->tl_intrhand); bus_release_resource(dev, SYS_RES_IRQ, 0, sc->tl_irq); -#ifdef TL_USEIOSPACE - bus_release_resource(dev, SYS_RES_IOPORT, - TL_PCI_LOIO, sc->tl_res); -#else - bus_release_resource(dev, SYS_RES_MEMORY, - TL_PCI_LOMEM, sc->tl_res); -#endif + bus_release_resource(dev, TL_RES, TL_RID, sc->tl_res); printf("tl%d: no memory for list buffers!\n", unit); error = ENXIO; goto fail; @@ -1713,14 +1716,9 @@ static int tl_attach(dev) */ if (tl_read_eeprom(sc, (caddr_t)&sc->arpcom.ac_enaddr, sc->tl_eeaddr, ETHER_ADDR_LEN)) { + bus_teardown_intr(dev, sc->tl_irq, sc->tl_intrhand); bus_release_resource(dev, SYS_RES_IRQ, 0, sc->tl_irq); -#ifdef TL_USEIOSPACE - bus_release_resource(dev, SYS_RES_IOPORT, - TL_PCI_LOIO, sc->tl_res); -#else - bus_release_resource(dev, SYS_RES_MEMORY, - TL_PCI_LOMEM, sc->tl_res); -#endif + bus_release_resource(dev, TL_RES, TL_RID, sc->tl_res); free(sc->tl_ldata_ptr, M_DEVBUF); printf("tl%d: failed to read station address\n", unit); error = ENXIO; @@ -1793,14 +1791,9 @@ static int tl_attach(dev) if (!sc->tl_phy_sts) continue; if (tl_attach_phy(sc)) { + bus_teardown_intr(dev, sc->tl_irq, sc->tl_intrhand); bus_release_resource(dev, SYS_RES_IRQ, 0, sc->tl_irq); -#ifdef TL_USEIOSPACE - bus_release_resource(dev, SYS_RES_IOPORT, - TL_PCI_LOIO, sc->tl_res); -#else - bus_release_resource(dev, SYS_RES_MEMORY, - TL_PCI_LOMEM, sc->tl_res); -#endif + bus_release_resource(dev, TL_RES, TL_RID, sc->tl_res); free(sc->tl_ldata_ptr, M_DEVBUF); printf("tl%d: failed to attach a phy %d\n", unit, i); error = ENXIO; @@ -1876,11 +1869,7 @@ static int tl_detach(dev) bus_teardown_intr(dev, sc->tl_irq, sc->tl_intrhand); bus_release_resource(dev, SYS_RES_IRQ, 0, sc->tl_irq); -#ifdef TL_USEIOSPACE - bus_release_resource(dev, SYS_RES_IOPORT, TL_PCI_LOIO, sc->tl_res); -#else - bus_release_resource(dev, SYS_RES_MEMORY, TL_PCI_LOMEM, sc->tl_res); -#endif + bus_release_resource(dev, TL_RES, TL_RID, sc->tl_res); splx(s); diff --git a/sys/pci/if_xl.c b/sys/pci/if_xl.c index d9ea654..930227e 100644 --- a/sys/pci/if_xl.c +++ b/sys/pci/if_xl.c @@ -269,6 +269,14 @@ static void xl_mediacheck __P((struct xl_softc *)); static void xl_testpacket __P((struct xl_softc *)); #endif +#ifdef XL_USEIOSPACE +#define XL_RES SYS_RES_IOPORT +#define XL_RID XL_PCI_LOIO +#else +#define XL_RES SYS_RES_MEMORY +#define XL_RID XL_PCI_LOMEM +#endif + static device_method_t xl_methods[] = { /* Device interface */ DEVMETHOD(device_probe, xl_probe), @@ -1398,8 +1406,7 @@ static void xl_mediacheck(sc) * Attach the interface. Allocate softc structures, do ifmedia * setup and ethernet/BPF attach. */ -static int -xl_attach(dev) +static int xl_attach(dev) device_t dev; { int s, i; @@ -1477,24 +1484,20 @@ xl_attach(dev) error = ENXIO; goto fail; } - - rid = XL_PCI_LOIO; - sc->xl_res = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, - 0, ~0, 1, RF_ACTIVE); #else if (!(command & PCIM_CMD_MEMEN)) { printf("xl%d: failed to enable memory mapping!\n", unit); error = ENXIO; goto fail; } +#endif - rid = XL_PCI_LOMEM; - sc->xl_res = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, + rid = XL_RID; + sc->xl_res = bus_alloc_resource(dev, XL_RES, &rid, 0, ~0, 1, RF_ACTIVE); -#endif if (sc->xl_res == NULL) { - printf ("xl%d: couldn't map ports\n", unit); + printf ("xl%d: couldn't map ports/memory\n", unit); error = ENXIO; goto fail; } @@ -1508,6 +1511,7 @@ xl_attach(dev) if (sc->xl_irq == NULL) { printf("xl%d: couldn't map interrupt\n", unit); + bus_release_resource(dev, XL_RES, XL_RID, sc->xl_res); error = ENXIO; goto fail; } @@ -1516,6 +1520,8 @@ xl_attach(dev) xl_intr, sc, &sc->xl_intrhand); if (error) { + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->xl_irq); + bus_release_resource(dev, XL_RES, XL_RID, sc->xl_res); printf("xl%d: couldn't set up irq\n", unit); goto fail; } @@ -1528,6 +1534,9 @@ xl_attach(dev) */ if (xl_read_eeprom(sc, (caddr_t)&eaddr, XL_EE_OEM_ADR0, 3, 1)) { printf("xl%d: failed to read station address\n", sc->xl_unit); + bus_teardown_intr(dev, sc->xl_irq, sc->xl_intrhand); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->xl_irq); + bus_release_resource(dev, XL_RES, XL_RID, sc->xl_res); error = ENXIO; goto fail; } @@ -1545,6 +1554,9 @@ xl_attach(dev) M_DEVBUF, M_NOWAIT); if (sc->xl_ldata_ptr == NULL) { printf("xl%d: no memory for list buffers!\n", unit); + bus_teardown_intr(dev, sc->xl_irq, sc->xl_intrhand); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->xl_irq); + bus_release_resource(dev, XL_RES, XL_RID, sc->xl_res); error = ENXIO; goto fail; } @@ -1665,6 +1677,11 @@ xl_attach(dev) sc->xl_unit, sc->xl_pinfo->xl_name); } else { printf("xl%d: MII without any phy!\n", sc->xl_unit); + bus_teardown_intr(dev, sc->xl_irq, sc->xl_intrhand); + bus_release_resource(dev, SYS_RES_IRQ, 0, sc->xl_irq); + bus_release_resource(dev, XL_RES, XL_RID, sc->xl_res); + error = ENXIO; + goto fail; } } @@ -1838,11 +1855,7 @@ static int xl_detach(dev) bus_teardown_intr(dev, sc->xl_irq, sc->xl_intrhand); bus_release_resource(dev, SYS_RES_IRQ, 0, sc->xl_irq); -#ifdef XL_USEIOSPACE - bus_release_resource(dev, SYS_RES_IOPORT, XL_PCI_LOIO, sc->xl_res); -#else - bus_release_resource(dev, SYS_RES_MEMORY, XL_PCI_LOMEM, sc->xl_res); -#endif + bus_release_resource(dev, XL_RES, XL_RID, sc->xl_res); free(sc->xl_ldata_ptr, M_DEVBUF); ifmedia_removeall(&sc->ifmedia); |