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