| 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.4 |