194 lines
6.1 KiB
Groff
194 lines
6.1 KiB
Groff
.\" $NetBSD: iop.4,v 1.21 2012/03/13 19:25:40 njoly Exp $
|
|
.\"
|
|
.\" Copyright (c) 2000, 2001, 2007 The NetBSD Foundation, Inc.
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" This code is derived from software contributed to The NetBSD Foundation
|
|
.\" by Andrew Doran.
|
|
.\"
|
|
.\" 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 December 2, 2007
|
|
.Dt IOP 4
|
|
.Os
|
|
.Sh NAME
|
|
.Nm iop
|
|
.Nd
|
|
.Tn I2O adapter driver
|
|
.Sh SYNOPSIS
|
|
.Cd "iop* at pci? dev ? function ?"
|
|
.Cd "iopsp* at iop? tid ?"
|
|
.Cd "ld* at iop? tid ?"
|
|
.Cd "dpti* at iop? tid 0"
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Nm
|
|
driver provides support for
|
|
.Tn PCI
|
|
I/O processors conforming to the
|
|
.Tn I2O
|
|
specification, revision 1.5 and above.
|
|
.Pp
|
|
I2O is a specification that defines a software interface for communicating
|
|
with a number of device types.
|
|
In its basic form, I2O provides the following:
|
|
.Pp
|
|
.Bl -bullet
|
|
.It
|
|
A vendor-neutral interface for communicating with an I/O processor (IOP)
|
|
and a number of types of peripherals.
|
|
In order to achieve this, hardware-specific device drivers run on
|
|
the IOP, and hardware-neutral device drivers run on the host.
|
|
.It
|
|
Reduced I/O overhead for the host.
|
|
All communication between the host and the IOP is performed using
|
|
a high level protocol.
|
|
The specification also provides for batching of requests and replies
|
|
between the host and IOP.
|
|
.It
|
|
An optional vendor-neutral configuration interface.
|
|
Data from HTTP GET and POST operations can be channeled to individual
|
|
devices, and HTML pages returned.
|
|
.El
|
|
.Pp
|
|
Five types of devices are well defined by the specification.
|
|
These are:
|
|
.Pp
|
|
.Bl -bullet -compact
|
|
.It
|
|
Random block storage devices (disks).
|
|
.It
|
|
Sequential storage devices (tapes).
|
|
.It
|
|
LAN interfaces, including Ethernet, FDDI, and Token Ring.
|
|
.It
|
|
Bus ports (SCSI).
|
|
.It
|
|
SCSI peripherals.
|
|
.El
|
|
.Pp
|
|
The
|
|
.Nm
|
|
driver's role is to initialize and monitor the IOP, provide a conduit for
|
|
messages and replies to and from devices, and provide other common services
|
|
for peripheral drivers, such as DMA mapping.
|
|
.Sh IOCTL INTERFACE
|
|
The following structures and constants are defined in
|
|
.Pa dev/i2o/iopio.h .
|
|
Note that the headers
|
|
.Pa sys/types.h ,
|
|
.Pa sys/device.h
|
|
and
|
|
.Pa dev/i2o/i2o.h
|
|
are prerequisites and must therefore be included beforehand.
|
|
.Bl -tag -width OTTF
|
|
.It Dv IOPIOCPT (struct ioppt)
|
|
Submit a message to the IOP and return the reply.
|
|
Note that the return value of this ioctl is not affected by completion
|
|
status as indicated by the reply.
|
|
.Bd -literal
|
|
struct ioppt {
|
|
void *pt_msg; /* pointer to message buffer */
|
|
size_t pt_msglen; /* message buffer size in bytes */
|
|
void *pt_reply; /* pointer to reply buffer */
|
|
size_t pt_replylen; /* reply buffer size in bytes */
|
|
int pt_timo; /* completion timeout in ms */
|
|
int pt_nbufs; /* number of transfers */
|
|
struct ioppt_buf pt_bufs[IOP_MAX_MSG_XFERS]; /* transfers */
|
|
};
|
|
|
|
struct ioppt_buf {
|
|
void *ptb_data; /* pointer to buffer */
|
|
size_t ptb_datalen; /* buffer size in bytes */
|
|
int ptb_out; /* non-zero if transfer is to IOP */
|
|
};
|
|
.Ed
|
|
.Pp
|
|
The minimum timeout value that may be specified is 1000ms.
|
|
All other values must not exceed the
|
|
.Nm
|
|
driver's operational limits.
|
|
.Pp
|
|
The initiator context and transaction context fields in the message frame
|
|
will be filled by the
|
|
.Nm
|
|
driver.
|
|
As such, this ioctl may not be used to send messages without a
|
|
transaction context payload.
|
|
.It Dv IOPIOCGSTATUS (struct iovec)
|
|
Request the latest available status record from the IOP.
|
|
This special-case ioctl is provided as the I2O_EXEC_STATUS_GET
|
|
message does not post replies, and can therefore not be safely
|
|
issued using the IOPIOCPT ioctl.
|
|
.El
|
|
.Pp
|
|
The following ioctls may block while attempting to acquire the
|
|
.Nm
|
|
driver's configuration lock, and may fail if the acquisition times out.
|
|
.Bl -tag -width OTTF
|
|
.It Dv IOPIOCGLCT (struct iovec)
|
|
Retrieve the
|
|
.Nm
|
|
driver's copy of the logical configuration table.
|
|
This copy of the LCT matches the current device configuration, but
|
|
is not necessarily the latest available version of the LCT.
|
|
.It Dv IOPIOCRECONFIG
|
|
Request that the
|
|
.Nm
|
|
driver scan all bus ports, retrieve the latest version of the LCT, and
|
|
attach or detach devices as necessary.
|
|
Note that higher-level reconfiguration tasks (such as logically
|
|
re-scanning SCSI busses) will not be performed by this ioctl.
|
|
.It Dv IOPIOCGTIDMAP (struct iovec)
|
|
Retrieve the TID to device map.
|
|
This map indicates which targets are
|
|
configured, and what the corresponding device name for each is.
|
|
Although at any given point it contains the same number of entries
|
|
as the LCT, the number of entries should be determined using the
|
|
iov_len field from the returned iovec.
|
|
.Bd -literal
|
|
struct iop_tidmap {
|
|
u_short it_tid;
|
|
u_short it_flags;
|
|
char it_dvname[sizeof(((struct device *)NULL)-\*[Gt]dv_xname)];
|
|
};
|
|
#define IT_CONFIGURED 0x02 /* target configured */
|
|
.Ed
|
|
.El
|
|
.Sh FILES
|
|
.Bl -tag -width /dev/iopn -compact
|
|
.It Pa /dev/iop Ns Ar u
|
|
control device for IOP unit
|
|
.Ar u
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr dpti 4 ,
|
|
.Xr intro 4 ,
|
|
.Xr iopsp 4 ,
|
|
.Xr ld 4 ,
|
|
.Xr iopctl 8
|
|
.Sh HISTORY
|
|
The
|
|
.Nm
|
|
driver first appeared in
|
|
.Nx 1.5.3 .
|