Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

.\"     $NetBSD: isapnp.9,v 1.12 2011/05/30 01:50:07 dyoung Exp $
.\"
.\" Copyright (c) 2001 The NetBSD Foundation, Inc.
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to The NetBSD Foundation
.\" by Gregory McGarry.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd June 19, 2001
.Dt ISAPNP 9
.Os
.Sh NAME
.Nm ISAPNP ,
.Nm isapnp_devmatch ,
.Nm isapnp_config ,
.Nm isapnp_unconfig
.Nd Plug 'n' Play ISA bus
.Sh SYNOPSIS
.In sys/bus.h
.In dev/isa/isareg.h
.In dev/isa/isavar.h
.In dev/isapnp/isapnpreg.h
.In dev/isapnp/isapnpvar.h
.In dev/isapnp/isapnpdevs.h
.Ft int
.Fn isapnp_devmatch "const struct isapnp_attach_args *ipa" \
"const struct isapnp_devinfo *dinfo" "int *variant"
.Ft int
.Fn isapnp_config "bus_space_tag_t iot" "bus_space_tag_t memt" \
"struct isapnp_attach_args *ipa"
.Ft void
.Fn isapnp_unconfig "bus_space_tag_t iot" "bus_space_tag_t memt" \
"struct isapnp_attach_args *ipa"
.Sh DESCRIPTION
The machine-independent
.Nm
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
.Xr isa 9 ) .
.Pp
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
.Nx
will attempt to allocate resources as necessary.
.Sh DATA TYPES
Drivers attached to the ISAPNP bus will make use of the following data
types:
.Bl -tag -width compact
.It Fa struct isapnp_matchinfo
.Nx
kernel contains a database of known ISAPNP devices.
Each entry in the database has a
.Em struct isapnp_matchinfo .
It contains the following members:
.Bd -literal
	const char *name;		/* device id string */
	int variant;			/* variant flag */
.Ed
.It Fa struct isapnp_devinfo
Defines the devices supported by a driver.
It contains pointer to an array of supported
.Em struct isapnp_matchinfo
structures and a pointer to another array of compatibility devices.
It contains the following members:
.Bd -literal
	struct isapnp_matchinfo *devlogic;
	int nlogic;
	struct isapnp_matchinfo *devcompat;
	int ncompat;
.Ed
.It Fa struct isapnp_region
Describes ISAPNP bus-space regions.
It contains the following members:
.Bd -literal
	bus_space_handle_t h;
	uint32_t base;
	uint32_t length;
.Ed
.It Fa struct isapnp_pin
Describes the wiring of interrupts and DMA pins from the ISAPNP bus
onto the host processor.
It contains the following members:
.Bd -literal
	uint8_t  num;
	uint8_t  flags:4;
	uint8_t  type:4;
	uint16_t bits;
.Ed
.It Fa struct isapnp_attach_args
A structure used to inform the driver of the device properties.
It contains the following members:
.Bd -literal
	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];
.Ed
.El
.Sh FUNCTIONS
.Bl -tag -width compact
.It Fn isapnp_devmatch "ipa" "dinfo" "variant"
Matches the device described by the attachment
.Fa ipa
with the device-match information in
.Fa dinfo .
If the device is matched,
.Fn isapnp_devmatch
returns a non-zero value and variant is the flag describing the device
variant.
.Fn isapnp_devmatch
returns zero if the device is not found.
.It Fn isapnp_config "iot" "memt" "ipa"
Allocate device resources specified by
.Fa ipa .
The device is mapped into the I/O and memory bus spaces specified by
bus-space tags
.Fa iot
and
.Fa memt
respectively.
The
.Fa ipa_io ,
.Fa ipa_mem ,
.Fa ipa_mem32 ,
.Fa ipa_irq ,
and
.Fa ipa_drq
members of
.Fa ipa
are updated to reflect the allocated and mapped resources.
.Fn isapnp_config
returns zero on success and non-zero on error.
.It Fn isapnp_unconfig "iot" "memt" "ipa"
Free the resources allocated by
.Fn isapnp_config .
.El
.Sh AUTOCONFIGURATION
During autoconfiguration, an ISAPNP driver will receive a pointer to
.Fa struct isapnp_attach_args
describing the device attached to the ISAPNP bus.
Drivers match the device using
.Fn ispnp_devmatch .
.Pp
During the driver attach step, driver should initially allocate and
map resources using
.Fn isapnp_config .
The I/O (memory) bus-space resources can be accessed using the
bus-space tag
.Fa ipa_iot
.Po
.Fa ipa_memt
.Pc
and the bus-space handle
.Fa ipa_io[0].h
.Po
.Fa ipa_mem[0].h
.Pc
members of
.Fa ipa .
.Pp
Interrupts should be established using
.Fn isa_intr_establish
.Po
see
.Xr isa 9
.Pc
with the IRQ specified by the
.Fa ipa_irq[0].num
member of
.Fa ipa .
Similarly, the standard
.Xr isa 9
DMA interface should be used with the
.Fa ipa_drq[0].num
member of
.Fa ipa .
.Sh DMA SUPPORT
Extensive DMA facilities are provided through the
.Xr isa 9
DMA facilities.
.Sh CODE REFERENCES
The
.Nm
subsystem itself is implemented within the file
.Pa sys/dev/isapnp/isapnp.c .
The database of the known devices exists within the file
.Pa sys/dev/isapnp/isapnpdevs.c
and is generated automatically from the file
.Pa sys/dev/isapnp/isapnpdevs .
New devices should be added to this file.
The database can be regenerated using the Makefile
.Pa sys/dev/isapnp/Makefile.isapnpdevs .
.Sh SEE ALSO
.Xr isa 4 ,
.Xr isapnp 4 ,
.Xr pnpbios 4 ,
.Xr autoconf 9 ,
.Xr bus_dma 9 ,
.Xr bus_space 9 ,
.Xr driver 9 ,
.Xr isa 9
.Rs
.%T "Plug and Play ISA Specification V1.0a"
.%D May 5 1994
.Re
.Sh HISTORY
The machine-independent ISAPNP subsystem appear in
.Nx 1.3 .