summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/ioasic.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/ioasic.9')
-rw-r--r--static/netbsd/man9/ioasic.9214
1 files changed, 214 insertions, 0 deletions
diff --git a/static/netbsd/man9/ioasic.9 b/static/netbsd/man9/ioasic.9
new file mode 100644
index 00000000..5386e1ce
--- /dev/null
+++ b/static/netbsd/man9/ioasic.9
@@ -0,0 +1,214 @@
+.\" $NetBSD: ioasic.9,v 1.13 2017/07/03 21:28:48 wiz Exp $
+.\"
+.\" Copyright (c) 2000 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 August 6, 2000
+.Dt IOASIC 9
+.Os
+.Sh NAME
+.Nm IOASIC ,
+.Nm ioasic_intr_establish ,
+.Nm ioasic_intr_disestablish ,
+.Nm ioasic_intr_evcnt ,
+.Nm ioasic_attach_devs ,
+.Nm ioasic_submatch
+.Nd baseboard I/O control ASIC for DEC TURBOchannel systems
+.Sh SYNOPSIS
+.In sys/bus.h
+.In dev/tc/tcvar.h
+.In dev/tc/ioasicreg.h
+.In dev/tc/ioasicvar.h
+.Ft void
+.Fn ioasic_intr_establish "struct device *dev" "void *cookie" "int level" \
+"int (*handler)(void *)" "void *arg"
+.Ft void
+.Fn ioasic_intr_disestablish "struct device *dev" "void *cookie"
+.Ft const struct evcnt *
+.Fn ioasic_intr_evcnt "struct device *dev" "void *cookie"
+.Ft void
+.Fn ioasic_attach_devs "struct ioasic_softc *sc" \
+"struct ioasic_dev *ioasic_devs" "int ioasic_ndevs"
+.Ft int
+.Fn ioasic_submatch "struct cfdata *match" "struct ioasicdev_attach_args *ia"
+.Sh DESCRIPTION
+The
+.Nm
+device provides support for the DEC proprietary IOCTL ASIC found on
+all DEC TURBOchannel machines with MIPS (DECstation 5000 series,
+excluding the 5000/200) and Alpha (3000-series) systems.
+The
+.Nm
+is memory-mapped into the TURBOchannel system slot to interface up to
+sixteen I/O devices.
+It connects the TURBOchannel to a 16-bit wide I/O bus and supplies
+various control signals to the devices that share this bus.
+.Pp
+The
+.Nm
+provides hardware DMA channels and interrupt support.
+DMA transfers are between one and four 32-bit words (16 bytes) in
+length, depending on the device.
+The
+.Nm
+stores the data in internal data registers.
+The data is transferred to and from the registers in 16-bit words
+to the device.
+Various interrupts are signalled on DMA pointer-related conditions.
+.Sh DATA TYPES
+Drivers for devices attached to the
+.Nm
+will make use of the following data types:
+.Bl -tag -width compact
+.It Fa struct ioasicdev_attach_args
+A structure used to inform the driver of the
+.Nm
+device properties.
+It contains the following members:
+.Bd -literal
+ char iada_modname
+ tc_offset_t iada_offset
+ tc_addr_t iada_addr
+ void *iada_cookie;
+.Ed
+.It Fa struct ioasic_softc
+The parent structure which contains at the following members which are
+useful for drivers:
+.Bd -literal
+ bus_space_tag_t sc_bst;
+ bus_space_handle_t sc_bsh;
+ bus_dma_tag_t sc_dmat;
+.Ed
+.It Fa struct ioasic_dev
+A structure describing the machine-dependent devices attached to the
+.Nm
+containing the following members:
+.Bd -literal
+ char *iad_modname;
+ tc_offset_t iad_offset;
+ void *iad_cookie;
+ uint32_t iad_intrbits;
+.Ed
+.El
+.Sh FUNCTIONS
+.Bl -tag -width compact
+.It Fn ioasic_intr_establish "dev" "cookie" "level" "handler" "arg"
+Establish an interrupt handler with device
+.Fa dev
+for the interrupt described completely by
+.Fa cookie .
+The priority of the interrupt is specified by
+.Fa level .
+When the interrupt occurs the function
+.Fa handler
+is called with argument
+.Fa arg .
+.It Fn ioasic_intr_disestablish "dev" "cookie"
+Dis-establish the interrupt handler with device
+.Fa dev
+for the interrupt described complete ly
+.Fa cookie .
+.It Fn ioasic_intr_evcnt "dev" "cookie"
+Do interrupt event counting with device
+.Fa dev
+for the event described completely by
+.Fa cookie .
+.It Fn ioasic_attach_devs "sc" "ioasic_devs" "ioasic_ndevs"
+Configure each of the
+.Fa ioasic_ndevs
+devices in
+.Fa ioasic_devs .
+.It Fn ioasic_submatch "match" "ia"
+Check that the device offset is not OASIC_OFFSET_UNKNOWN.
+.El
+.Pp
+The
+.Fn ioasic_intr_establish ,
+.Fn ioasic_intr_disestablish ,
+and
+.Fn ioasic_intr_evcnt
+functions are likely to used by all
+.Nm
+device drivers.
+The
+.Fn ioasic_attach_devs
+function is used by ioasic driver internally and is of interest to
+driver writers because it must be aware of your device for it to be
+found during autoconfiguration.
+.Sh AUTOCONFIGURATION
+The IOASIC is a direct-connection bus.
+During autoconfiguration, machine-dependent code will provide an array of
+.Fa struct ioasic_devs
+describing devices attached to the
+.Nm
+to be used by the ioasic driver.
+The ioasic driver will pass this array to
+.Fn ioasic_attach_devs
+to attach the drivers with the devices.
+.Pp
+Drivers match the device using
+.Fa iada_modname .
+.Pp
+During attach, all drivers should use the parent's bus_space and
+bus_dma resources, and map the appropriate bus_space region using
+.Fn bus_space_subregion
+with
+.Fa iada_offset .
+.Sh DMA SUPPORT
+No additional support is provided for
+.Nm
+DMA beyond the facilities provided by the
+.Xr bus_dma 9
+interface.
+.Pp
+The
+.Nm
+provides two pairs of DMA address pointers (transmitting and
+receiving) for each DMA-capable device.
+The pair of address pointers point to consecutive (but not necessarily
+contiguous) DMA blocks of size IOASIC_DMA_BLOCKSIZE.
+Upon successful transfer of the first block, DMA continues to the next
+block and an interrupt is posted to signal an address pointer update.
+DMA transfers are enabled and disabled by bits inside the
+.Nm
+status (CSR) register.
+.Pp
+The interrupt handler must update the address pointers to point to the
+next block in the DMA transfer.
+The address pointer update must be completed before the completion of
+the second DMA block, otherwise a DMA overrun error condition will occur.
+.Sh CODE REFERENCES
+The IOASIC subsystem itself is implemented within the file
+.Pa sys/dev/tc/ioasic_subr.c .
+Machine-dependent portions can be found in
+.Pa sys/arch/<arch>/tc/ioasic.c .
+.Sh SEE ALSO
+.Xr ioasic 4 ,
+.Xr autoconf 9 ,
+.Xr bus_dma 9 ,
+.Xr bus_space 9 ,
+.Xr driver 9