ISAPNP(9) | Kernel Developer's Manual | ISAPNP(9) |
ISAPNP
, isapnp_devmatch
,
isapnp_config
, isapnp_unconfig
—
#include <sys/bus.h>
#include <dev/isa/isareg.h>
#include <dev/isa/isavar.h>
#include
<dev/isapnp/isapnpreg.h>
#include
<dev/isapnp/isapnpvar.h>
#include
<dev/isapnp/isapnpdevs.h>
int
isapnp_devmatch
(const
struct isapnp_attach_args *ipa,
const struct isapnp_devinfo
*dinfo, int
*variant);
int
isapnp_config
(bus_space_tag_t
iot, bus_space_tag_t
memt, struct
isapnp_attach_args *ipa);
void
isapnp_unconfig
(bus_space_tag_t
iot, bus_space_tag_t
memt, struct
isapnp_attach_args *ipa);
ISAPNP
subsystem provides
support for ISAPNP devices. ISAPNP devices were developed to support
"plug and play" connection on the ISA bus. In all other aspects, the
ISAPNP bus is same as the ISA bus (see
isa(9)).
Devices on the ISAPNP bus are uniquely identified by a 7-character string. Resources, such as I/O address space and interrupts, should be allocated to the devices by the machine firmware. On some machine the firmware seems doesn't work correctly and NetBSD will attempt to allocate resources as necessary.
const char *name; /* device id string */ int variant; /* variant flag */
struct isapnp_matchinfo *devlogic; int nlogic; struct isapnp_matchinfo *devcompat; int ncompat;
bus_space_handle_t h; uint32_t base; uint32_t length;
uint8_t num; uint8_t flags:4; uint8_t type:4; uint16_t bits;
bus_space_tag_t ipa_iot; /* isa i/o space tag */ bus_space_tag_t ipa_memt; /* isa mem space tag */ bus_dma_tag_t ipa_dmat; /* isa dma tag */ isa_chipset_tag_t ipa_ic; struct isapnp_region ipa_io[ISAPNP_NUM_IO]; struct isapnp_region ipa_mem[ISAPNP_NUM_MEM]; struct isapnp_region ipa_mem32[ISAPNP_NUM_MEM32]; struct isapnp_pin ipa_irq[ISAPNP_NUM_IRQ]; struct isapnp_pin ipa_drq[ISAPNP_NUM_DRQ];
isapnp_devmatch
(ipa,
dinfo, variant)isapnp_devmatch
() returns a
non-zero value and variant is the flag describing the device variant.
isapnp_devmatch
() returns zero if the device is
not found.isapnp_config
(iot,
memt, ipa)isapnp_config
() returns zero on
success and non-zero on error.isapnp_unconfig
(iot,
memt, ipa)isapnp_config
().ispnp_devmatch
().
During the driver attach step, driver should initially allocate
and map resources using isapnp_config
(). The I/O
(memory) bus-space resources can be accessed using the bus-space tag
ipa_iot (ipa_memt) and the
bus-space handle ipa_io[0].h
(ipa_mem[0].h) members of
ipa.
Interrupts should be established using
isa_intr_establish
() (see
isa(9)) with the IRQ specified by
the ipa_irq[0].num member of
ipa. Similarly, the standard
isa(9) DMA interface should be
used with the ipa_drq[0].num member of
ipa.
ISAPNP
subsystem itself is implemented within the
file sys/dev/isapnp/isapnp.c. The database of the
known devices exists within the file
sys/dev/isapnp/isapnpdevs.c and is generated
automatically from the file sys/dev/isapnp/isapnpdevs.
New devices should be added to this file. The database can be regenerated
using the Makefile sys/dev/isapnp/Makefile.isapnpdevs.
Plug and Play ISA Specification V1.0a, May 5 1994.
June 19, 2001 | NetBSD 9.0 |