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" 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.
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. Similarly, 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.