ISAPNP(9) BSD Kernel Developer's Manual ISAPNP(9)
NAME
ISAPNP, isapnp_devmatch, isapnp_config, isapnp_unconfig -- Plug 'n' Play ISA bus
SYNOPSIS
#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);
DESCRIPTION
The machine-independent ISAPNP subsystem provides support for ISAPNP devices. ISAPNP devices were developed to support "plug and play" con-
nection 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 allo-
cate resources as necessary.
DATA TYPES
Drivers attached to the ISAPNP bus will make use of the following data types:
struct isapnp_matchinfo
NetBSD kernel contains a database of known ISAPNP devices. Each entry in the database has a struct isapnp_matchinfo. It contains
the following members:
const char *name; /* device id string */
int variant; /* variant flag */
struct isapnp_devinfo
Defines the devices supported by a driver. It contains pointer to an array of supported struct isapnp_matchinfo structures and a
pointer to another array of compatibility devices. It contains the following members:
struct isapnp_matchinfo *devlogic;
int nlogic;
struct isapnp_matchinfo *devcompat;
int ncompat;
struct isapnp_region
Describes ISAPNP bus-space regions. It contains the following members:
bus_space_handle_t h;
uint32_t base;
uint32_t length;
struct isapnp_pin
Describes the wiring of interrupts and DMA pins from the ISAPNP bus onto the host processor. It contains the following members:
uint8_t num;
uint8_t flags:4;
uint8_t type:4;
uint16_t bits;
struct isapnp_attach_args
A structure used to inform the driver of the device properties. It contains the following members:
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];
FUNCTIONS
isapnp_devmatch(ipa, dinfo, variant)
Matches the device described by the attachment 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.
isapnp_config(iot, memt, ipa)
Allocate device resources specified by 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.
isapnp_unconfig(iot, memt, ipa)
Free the resources allocated by isapnp_config().
AUTOCONFIGURATION
During autoconfiguration, an ISAPNP driver will receive a pointer to 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() (see isa(9)) with the IRQ specified by the ipa_irq[0].num member of ipa. Simi-
larly, the standard isa(9) DMA interface should be used with the ipa_drq[0].num member of ipa.
DMA SUPPORT
Extensive DMA facilities are provided through the isa(9) DMA facilities.
CODE REFERENCES
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.
SEE ALSO
isa(4), isapnp(4), pnpbios(4), autoconf(9), bus_dma(9), bus_space(9), driver(9), isa(9)
Plug and Play ISA Specification V1.0a, May 5 1994.
HISTORY
The machine-independent ISAPNP subsystem appear in NetBSD 1.3.
BSD
June 19, 2001 BSD