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
)
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.
struct
isapnp_matchinfo
const char *name; /* device id string */
int variant; /* variant flag */
struct
isapnp_devinfo
struct isapnp_matchinfo *devlogic;
int nlogic;
struct isapnp_matchinfo *devcompat;
int ncompat;
struct
isapnp_region
bus_space_handle_t h;
uint32_t base;
uint32_t length;
struct
isapnp_pin
uint8_t num;
uint8_t flags:4;
uint8_t type:4;
uint16_t bits;
struct
isapnp_attach_args
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];
ipa
, dinfo
, variant
)
ipa
with the device-match information in
dinfo
.
If the device is matched,
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.
iot
, memt
, ipa
)
ipa
.
The device is mapped into the I/O and memory bus spaces specified by
bus-space tags
iot
and
memt
respectively.
The
ipa_io
,
ipa_mem
,
ipa_mem32
,
ipa_irq
,
and
ipa_drq
members of
ipa
are updated to reflect the allocated and mapped resources.
isapnp_config(
)
returns zero on success and non-zero on error.
iot
, memt
, ipa
)
).
struct
isapnp_attach_args
describing the device attached to the ISAPNP bus.
Drivers match the device using
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()
isa(9)
(see)
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
.
/usr/src
.
The
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
.