1 /*        $NetBSD: iopio.h,v 1.9 2022/04/17 21:24:53 andvar Exp $     */
2 
3 /*-
4  * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Andrew Doran.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef _I2O_IOPIO_H_
33 #define   _I2O_IOPIO_H_
34 
35 #include <sys/types.h>
36 #include <sys/ioccom.h>
37 
38 #define   IOP_MAX_MSG_XFERS   3         /* Maximum transfer count per msg */
39 #define   IOP_MAX_OUTBOUND    256       /* Maximum outbound queue depth */
40 #define   IOP_MAX_INBOUND               256       /* Maximum inbound queue depth */
41 #define   IOP_MF_RESERVE                4         /* Frames to reserve for ctl ops */
42 #define   IOP_MAX_XFER                  64*1024   /* Maximum transfer size */
43 #define   IOP_MAX_MSG_SIZE    160       /* Maximum message frame size */
44 #define   IOP_MIN_MSG_SIZE    128       /* Minimum size supported by IOP */
45 
46 struct iop_tidmap {
47           u_short   it_tid;
48           u_short   it_flags;
49           char      it_dvname[16];
50 };
51 #define   IT_CONFIGURED       0x02      /* target configured */
52 
53 struct ioppt_buf {
54           void      *ptb_data;          /* pointer to buffer */
55           size_t    ptb_datalen;        /* buffer size in bytes */
56           int       ptb_out;  /* non-zero if transfer is to IOP */
57 };
58 
59 struct ioppt {
60           void      *pt_msg;  /* pointer to message buffer */
61           size_t    pt_msglen;          /* message buffer size in bytes */
62           void      *pt_reply;          /* pointer to reply buffer */
63           size_t    pt_replylen;        /* reply buffer size in bytes */
64           int       pt_timo;  /* completion timeout in ms */
65           int       pt_nbufs; /* number of transfers */
66           struct    ioppt_buf pt_bufs[IOP_MAX_MSG_XFERS]; /* transfers */
67 };
68 
69 #define   IOPIOCPT  _IOWR('u', 0, struct ioppt)
70 #define   IOPIOCGLCT          _IOWR('u', 1, struct iovec)
71 #define   IOPIOCGSTATUS       _IOWR('u', 2, struct iovec)
72 #define   IOPIOCRECONFIG      _IO('u', 3)
73 #define   IOPIOCGTIDMAP       _IOWR('u', 4, struct iovec)
74 
75 #endif    /* !_I2O_IOPIO_H_ */
76