Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/share/man/man4 Manual page for pseudo-device access to hardw...
details: https://anonhg.NetBSD.org/src/rev/9a20ad6a995f
branches: trunk
changeset: 534700:9a20ad6a995f
user: thorpej <thorpej%NetBSD.org@localhost>
date: Fri Aug 02 00:43:12 2002 +0000
description:
Manual page for pseudo-device access to hardware-assisted data movers.
diffstat:
share/man/man4/Makefile | 8 +-
share/man/man4/dmoverio.4 | 243 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 247 insertions(+), 4 deletions(-)
diffs (269 lines):
diff -r 0c481603988d -r 9a20ad6a995f share/man/man4/Makefile
--- a/share/man/man4/Makefile Fri Aug 02 00:41:53 2002 +0000
+++ b/share/man/man4/Makefile Fri Aug 02 00:43:12 2002 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.263 2002/07/09 23:30:23 wiz Exp $
+# $NetBSD: Makefile,v 1.264 2002/08/02 00:43:12 thorpej Exp $
# @(#)Makefile 8.1 (Berkeley) 6/18/93
MAN= aac.4 acphy.4 adv.4 adw.4 agp.4 ahb.4 ahc.4 amdpm.4 \
@@ -7,9 +7,9 @@
auvia.4 awi.4 bba.4 bha.4 bktr.4 bpf.4 bmtphy.4 brgphy.4 \
bridge.4 cac.4 cardbus.4 ccd.4 cd.4 cfb.4 ch.4 clcs.4 clct.4 \
clnp.4 clockctl.4 cltp.4 \
- cmpci.4 cms.4 cnw.4 com.4 ddb.4 de.4 dmphy.4 dpt.4 dpti.4 drum.4 eap.4 \
- ebus.4 edc.4 elmc.4 emuxki.4 en.4 envsys.4 ep.4 esh.4 esis.4 esa.4 \
- esiop.4 esl.4 esm.4 eso.4 exphy.4 \
+ cmpci.4 cms.4 cnw.4 com.4 ddb.4 de.4 dmoverio.4 dmphy.4 dpt.4 dpti.4 \
+ drum.4 eap.4 ebus.4 edc.4 elmc.4 emuxki.4 en.4 envsys.4 ep.4 esh.4 \
+ esis.4 esa.4 esiop.4 esl.4 esm.4 eso.4 exphy.4 \
fd.4 fpa.4 fms.4 fxp.4 \
gem.4 gentbi.4 glxtphy.4 gre.4 gphyter.4 gsip.4 hme.4 \
icmp.4 icp.4 icsphy.4 idp.4 ifmedia.4 iha.4 inet.4 \
diff -r 0c481603988d -r 9a20ad6a995f share/man/man4/dmoverio.4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/man/man4/dmoverio.4 Fri Aug 02 00:43:12 2002 +0000
@@ -0,0 +1,243 @@
+.\" $NetBSD: dmoverio.4,v 1.1 2002/08/02 00:43:13 thorpej Exp $
+.\"
+.\" Copyright (c) 2002 Wasabi Systems, Inc.
+.\" All rights reserved.
+.\"
+.\" Written by Jason R. Thorpe for Wasabi Systems, Inc.
+.\"
+.\" 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.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed for the NetBSD Project by
+.\" Wasabi Systems, Inc.
+.\" 4. The name of Wasabi Systems, Inc. may not be used to endorse
+.\" or promote products derived from this software without specific prior
+.\" written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``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 WASABI SYSTEMS, INC
+.\" 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 Aug 1, 2002
+.Dt DMOVERIO 4
+.Os
+.Sh NAME
+.Nm dmoverio
+.Nd hardware-assisted data mover interface
+.Sh SYNOPSIS
+.Cd pseudo-device dmoverio
+.Pp
+.Fd #include \*[Lt]dev/dmover/dmover_io.h\*[Gt]
+.Sh DESCRIPTION
+The
+.Nm dmoverio
+pesudo-device driver provides an interface to hardware-assisted
+data movers, which the kernel supports using the
+.Xr dmover 9
+facility. This can be used to copy data from one location in
+memory to another, clear a region of memory, fill a region of memory
+with a patter, and perform simple operations on multiple regions of
+memory, such as an XOR, without intervention by the CPU.
+.Pp
+A
+.Nm dmoverio
+function always has one output region. A function may have zero or more
+input regions, or may use an immediate value as an input. For functions
+which use input regions, the lenghts of each input region and the output
+region must be the same. All
+.Nm dmover
+functions with the same name will have the same number of and type inputs.
+.Pp
+To use
+.Nm dmoverio ,
+the client must first create a session. This is achieved by performing
+the following steps:
+.Bl -bullet
+.It
+Create a session handle by opening the
+.Pa /dev/dmover
+device.
+.It
+Select the
+.Nm dmoverio
+function using the DMIO_SETFUNC ioctl, which takes the following
+argument:
+.Bd -literal -offset indent
+#define DMIO_MAX_FUNCNAME 64
+struct dmio_setfunc {
+ char dsf_name[DMIO_MAX_FUNCNAME];
+};
+.Ed
+.Pp
+If the specified function is not available, the DMIO_SETFUNC ioctl
+will fail with an error code of
+.Er ESRCH .
+.El
+.Pp
+To submit a request for processing the following steps must be
+performed:
+.Bl -bullet
+.It
+Fill in a request structure:
+.Bd -literal -offset indent
+typedef struct {
+ struct iovec *dmbuf_iov;
+ u_int dmbuf_iovcnt;
+} dmio_buffer;
+
+struct dmio_usrreq {
+ /* Output buffer. */
+ dmio_buffer req_outbuf;
+
+ /* Input buffer. */
+ union {
+ uint8_t _immediate[8];
+ dmio_buffer *_inbuf;
+ } _req_inbuf_un;
+
+#define req_immediate _req_inbuf_un._immediate
+#define req_inbuf _req_inbuf_un._inbuf
+
+ uint32_t req_id; /* request ID; passed in response */
+};
+.Ed
+.Pp
+For functions which use an immediate value as an input, the
+.Em req_immediate
+member is used to specify the value. Values smaller than 8 bytes should
+use the least-significant bytes first. For example, a 32-bit integer
+would occupy bytes 0, 1, 2, and 3.
+.Pp
+For functions which use input regions,
+.Em req_inbuf
+should point to an array of
+.Fa dmio_buffer Ns 's .
+.Pp
+The
+.Em req_id
+should be a unique value for each request submitted by the client. It
+will be passed back unchanged in the response when processing of the
+request has completed.
+.It
+Write the request structure to the session handle using the
+.Xr write 2
+system call. Multiple requests may be written to the session in a
+single call.
+.It
+Read the response structure back from the session handle using the
+.Xr read 2
+system call. The response structure is defined as follows:
+.Bd -literal -offset indent
+struct dmio_usrresp {
+ uint32_t resp_id;
+ int resp_error;
+};
+.Ed
+.Pp
+The
+.Em resp_id
+corresponds to the
+.Em req_id
+in the request.
+.Em resp_error
+contains 0 if the request succeeded or an
+.Xr errno 2
+value indicating why the request failed. Multiple responses may
+be read back in a single call. Note that responses may not be
+received in the same order as requests were written.
+.El
+.Pp
+When a client is finished using a
+.Nm dmoverio
+session, the session is destroyed by closing the session handle using
+.Xr close 2 .
+.Ss EXAMPLE USAGE
+The following is an example of a client using
+.Nm dmoverio
+to zero-fill a region of memory. In this example, the application would
+be able to perform other work while the hardware-assisted data mover clears
+the specified block of memory.
+.Bd -literal
+int
+hw_bzero(void *buf, size_t len)
+{
+ static uint32_t reqid;
+
+ struct dmio_setfunc dsf;
+ struct iovec iov;
+ struct dmio_usrreq req;
+ struct dmio_usrresp resp;
+ int fd;
+
+ fd = open("/dev/dmover", O_RDWR, 0666);
+ if (fd == -1)
+ return (-1);
+
+ strcpy(dsf.dsf_name, "zero");
+
+ if (ioctl(fd, DMIO_SETFUNC, &dsf) == -1) {
+ close(fd);
+ return (-1);
+ }
+
+ iov.iov_base = buf;
+ iov.iov_len = len;
+
+ req.req_outbuf.dmbuf_iov = &iov;
+ req.req_outbuf.dmbuf_iovcnt = 1;
+
+ if (write(fd, &req, sizeof(req)) != sizeof(req)) {
+ close(fd);
+ return (-1);
+ }
+
+ /* Application can do other work here. */
+
+ if (read(fd, &resp, sizeof(resp)) != sizeof(resp)) {
+ close(fd);
+ return (-1);
+ }
+
+ if (resp.resp_id != req.req_id) {
+ close(fd);
+ return (-1);
+ }
+
+ if (resp.resp_error != 0) {
+ close(fd);
+ return (-1);
+ }
+
+ close(fd);
+ return (0);
+}
+.Ed
+.Sh SEE ALSO
+.Xr dmover 9
+.Sh HISTORY
+The
+.Nm dmoverio
+device first appeared in
+.Nx 2.0 .
+.Sh AUTHORS
+The
+.Nm dmoverio
+device was designed and implemented by
+.An Jason R. Thorpe
+.Aq thorpej%wasabisystems.com@localhost
+and contributed by Wasabi Systems, Inc.
Home |
Main Index |
Thread Index |
Old Index