diff options
| author | 1996-08-14 14:36:14 +0000 | |
|---|---|---|
| committer | 1996-08-14 14:36:14 +0000 | |
| commit | 000edd755ef1d17b077802fc86eee347c96a40bf (patch) | |
| tree | 835a444da369dc8faf6622dc7044b531f7e59504 /sys/dev/isa/isa.c | |
| parent | Fix this, too. (diff) | |
| download | wireguard-openbsd-000edd755ef1d17b077802fc86eee347c96a40bf.tar.xz wireguard-openbsd-000edd755ef1d17b077802fc86eee347c96a40bf.zip | |
rudimentary plug-and-play support, see pnp(4)
Diffstat (limited to 'sys/dev/isa/isa.c')
| -rw-r--r-- | sys/dev/isa/isa.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/sys/dev/isa/isa.c b/sys/dev/isa/isa.c index 73e4607cb77..c3c92971110 100644 --- a/sys/dev/isa/isa.c +++ b/sys/dev/isa/isa.c @@ -1,4 +1,4 @@ -/* $OpenBSD: isa.c,v 1.11 1996/07/02 22:21:15 deraadt Exp $ */ +/* $OpenBSD: isa.c,v 1.12 1996/08/14 14:36:15 shawn Exp $ */ /* $NetBSD: isa.c,v 1.85 1996/05/14 00:31:04 thorpej Exp $ */ /*- @@ -36,12 +36,15 @@ #include <sys/conf.h> #include <sys/malloc.h> #include <sys/device.h> +#include <sys/extent.h> #include <machine/intr.h> #include <dev/isa/isareg.h> #include <dev/isa/isavar.h> +#include "isapnp.h" + int isamatch __P((struct device *, void *, void *)); void isaattach __P((struct device *, struct device *, void *)); int isaprint __P((void *, char *)); @@ -77,6 +80,9 @@ isaattach(parent, self, aux) { struct isa_softc *sc = (struct isa_softc *)self; struct isabus_attach_args *iba = aux; +#if NISAPNP > 0 + void postisapnpattach(struct device *, struct device *, void *); +#endif /* NISAPNP > 0 */ isa_attach_hook(parent, self, iba); printf("\n"); @@ -93,6 +99,10 @@ isaattach(parent, self, aux) TAILQ_INIT(&sc->sc_subdevs); config_scan(isascan, self); + +#if NISAPNP > 0 + postisapnpattach(parent, self, aux); +#endif /* NISAPNP > 0 */ } int @@ -126,6 +136,12 @@ isascan(parent, match) struct device *dev = match; struct cfdata *cf = dev->dv_cfdata; struct isa_attach_args ia; + struct emap *io_map, *mem_map, *irq_map, *drq_map; + + io_map = find_emap("io"); + mem_map = find_emap("mem"); + irq_map = find_emap("irq"); + drq_map = find_emap("drq"); ia.ia_bc = sc->sc_bc; ia.ia_ic = sc->sc_ic; @@ -141,6 +157,10 @@ isascan(parent, match) struct isa_attach_args ia2 = ia; while ((*cf->cf_attach->ca_match)(parent, dev, &ia2) > 0) { + add_extent(io_map, ia.ia_iobase, ia.ia_iosize); + add_extent(mem_map, ia.ia_maddr, ia.ia_msize); + add_extent(irq_map, ia.ia_irq, 1); + add_extent(drq_map, ia.ia_drq, 1); config_attach(parent, dev, &ia2, isaprint); dev = config_make_softc(parent, cf); ia2 = ia; @@ -149,8 +169,13 @@ isascan(parent, match) return; } - if ((*cf->cf_attach->ca_match)(parent, dev, &ia) > 0) + if ((*cf->cf_attach->ca_match)(parent, dev, &ia) > 0) { + add_extent(io_map, ia.ia_iobase, ia.ia_iosize); + add_extent(mem_map, ia.ia_maddr, ia.ia_msize); + add_extent(irq_map, ia.ia_irq, 1); + add_extent(drq_map, ia.ia_drq, 1); config_attach(parent, dev, &ia, isaprint); + } else free(dev, M_DEVBUF); } |
