Merge branch 'vendor/LESS'
[dragonfly.git] / sys / dev / raid / aac / aac_ioctl.h
1 /*-
2  * Copyright (c) 2000 Michael Smith
3  * Copyright (c) 2000 Scott Long
4  * Copyright (c) 2000 BSDi
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  *
28  *      $FreeBSD: head/sys/sys/aac_ioctl.h 218909 2011-02-21 09:01:34Z brucec $
29  */
30
31 #include <sys/ioccom.h>
32
33 /*
34  * Command queue statistics
35  */
36 #define AACQ_FREE       0
37 #define AACQ_BIO        1
38 #define AACQ_READY      2
39 #define AACQ_BUSY       3
40 #define AACQ_COUNT      4       /* total number of queues */
41
42 struct aac_qstat {
43         u_int32_t       q_length;
44         u_int32_t       q_max;
45 };
46
47 /*
48  * Statistics request
49  */
50 union aac_statrequest {
51         u_int32_t               as_item;
52         struct aac_qstat        as_qstat;
53 };
54
55 #define AACIO_STATS             _IOWR('T', 101, union aac_statrequest)
56
57 /*
58  * Ioctl commands likely to be submitted from a Linux management application.
59  * These bit encodings are actually descended from Windows NT.  Ick.
60  */
61
62 #define CTL_CODE(devType, func, meth, acc) (((devType) << 16) | ((acc) << 14) | ((func) << 2) | (meth))
63 #define METHOD_BUFFERED                 0
64 #define METHOD_IN_DIRECT                1
65 #define METHOD_OUT_DIRECT               2
66 #define METHOD_NEITHER                  3
67 #define FILE_ANY_ACCESS                 0
68 #define FILE_READ_ACCESS                ( 0x0001 )
69 #define FILE_WRITE_ACCESS               ( 0x0002 )
70 #define FILE_DEVICE_CONTROLLER          0x00000004
71
72 #define FSACTL_LNX_SENDFIB              CTL_CODE(FILE_DEVICE_CONTROLLER, 2050, \
73                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
74 #define FSACTL_LNX_SEND_RAW_SRB         CTL_CODE(FILE_DEVICE_CONTROLLER, 2067, \
75                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
76 #define FSACTL_LNX_GET_COMM_PERF_DATA   CTL_CODE(FILE_DEVICE_CONTROLLER, 2084, \
77                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
78 #define FSACTL_LNX_OPENCLS_COMM_PERF_DATA CTL_CODE(FILE_DEVICE_CONTROLLER, \
79                                         2085, METHOD_BUFFERED, FILE_ANY_ACCESS)
80 #define FSACTL_LNX_OPEN_GET_ADAPTER_FIB CTL_CODE(FILE_DEVICE_CONTROLLER, 2100, \
81                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
82 #define FSACTL_LNX_GET_NEXT_ADAPTER_FIB CTL_CODE(FILE_DEVICE_CONTROLLER, 2101, \
83                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
84 #define FSACTL_LNX_CLOSE_GET_ADAPTER_FIB CTL_CODE(FILE_DEVICE_CONTROLLER, \
85                                         2102, METHOD_BUFFERED, FILE_ANY_ACCESS)
86 #define FSACTL_LNX_CLOSE_ADAPTER_CONFIG CTL_CODE(FILE_DEVICE_CONTROLLER, 2104, \
87                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
88 #define FSACTL_LNX_OPEN_ADAPTER_CONFIG  CTL_CODE(FILE_DEVICE_CONTROLLER, 2105, \
89                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
90 #define FSACTL_LNX_MINIPORT_REV_CHECK   CTL_CODE(FILE_DEVICE_CONTROLLER, 2107, \
91                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
92 #define FSACTL_LNX_QUERY_ADAPTER_CONFIG CTL_CODE(FILE_DEVICE_CONTROLLER, 2113, \
93                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
94 #define FSACTL_LNX_GET_PCI_INFO         CTL_CODE(FILE_DEVICE_CONTROLLER, 2119, \
95                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
96 #define FSACTL_LNX_FORCE_DELETE_DISK    CTL_CODE(FILE_DEVICE_CONTROLLER, 2120, \
97                                         METHOD_NEITHER, FILE_ANY_ACCESS)
98 #define FSACTL_LNX_AIF_THREAD           CTL_CODE(FILE_DEVICE_CONTROLLER, 2127, \
99                                         METHOD_NEITHER, FILE_ANY_ACCESS)
100 #define FSACTL_LNX_SEND_LARGE_FIB       CTL_CODE(FILE_DEVICE_CONTROLLER, 2138, \
101                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
102 #define FSACTL_LNX_GET_FEATURES         CTL_CODE(FILE_DEVICE_CONTROLLER, 2139, \
103                                         METHOD_BUFFERED, FILE_ANY_ACCESS)
104
105 /* Why these don't follow the previous convention, I don't know */
106 #define FSACTL_LNX_NULL_IO_TEST         0x43
107 #define FSACTL_LNX_SIM_IO_TEST          0x53
108 #define FSACTL_LNX_DOWNLOAD             0x83
109 #define FSACTL_LNX_GET_VAR              0x93
110 #define FSACTL_LNX_SET_VAR              0xa3
111 #define FSACTL_LNX_GET_FIBTIMES         0xb3
112 #define FSACTL_LNX_ZERO_FIBTIMES        0xc3
113 #define FSACTL_LNX_DELETE_DISK          0x163
114 #define FSACTL_LNX_QUERY_DISK           0x173
115
116 /* Ok, here it gets really lame */
117 #define FSACTL_LNX_PROBE_CONTAINERS     2131    /* Just guessing */
118
119 /* Do the native version of the ioctls.  Since the BSD encoding scheme
120  * conflicts with the 'standard' AAC encoding scheme, the resulting numbers
121  * will be different.  The '8' comes from the fact that the previous scheme
122  * used 12 bits for the number, with the 12th bit being the only set
123  * bit above bit 8.  Thus the value of 8, with the lower 8 bits holding the
124  * command number.  9 is used for the odd overflow case.
125  */
126 #define FSACTL_SENDFIB                  _IO('8', 2)
127 #define FSACTL_SEND_RAW_SRB             _IO('8', 19)
128 #define FSACTL_GET_COMM_PERF_DATA       _IO('8', 36)
129 #define FSACTL_OPENCLS_COMM_PERF_DATA   _IO('8', 37)
130 #define FSACTL_OPEN_GET_ADAPTER_FIB     _IO('8', 52)
131 #define FSACTL_GET_NEXT_ADAPTER_FIB     _IO('8', 53)
132 #define FSACTL_CLOSE_GET_ADAPTER_FIB    _IO('8', 54)
133 #define FSACTL_CLOSE_ADAPTER_CONFIG     _IO('8', 56)
134 #define FSACTL_OPEN_ADAPTER_CONFIG      _IO('8', 57)
135 #define FSACTL_MINIPORT_REV_CHECK       _IO('8', 59)
136 #define FSACTL_QUERY_ADAPTER_CONFIG     _IO('8', 65)
137 #define FSACTL_GET_PCI_INFO             _IO('8', 71)
138 #define FSACTL_FORCE_DELETE_DISK        _IO('8', 72)
139 #define FSACTL_AIF_THREAD               _IO('8', 79)
140 #define FSACTL_SEND_LARGE_FIB           _IO('8', 90)
141 #define FSACTL_GET_FEATURES             _IO('8', 91)
142
143 #define FSACTL_NULL_IO_TEST             _IO('8', 67)
144 #define FSACTL_SIM_IO_TEST              _IO('8', 83)
145 #define FSACTL_DOWNLOAD                 _IO('8', 131)
146 #define FSACTL_GET_VAR                  _IO('8', 147)
147 #define FSACTL_SET_VAR                  _IO('8', 163)
148 #define FSACTL_GET_FIBTIMES             _IO('8', 179)
149 #define FSACTL_ZERO_FIBTIMES            _IO('8', 195)
150 #define FSACTL_DELETE_DISK              _IO('8', 99)
151 #define FSACTL_QUERY_DISK               _IO('9', 115)
152
153 #define FSACTL_PROBE_CONTAINERS         _IO('9', 83)    /* Just guessing */
154
155 #ifdef _KERNEL
156 /*
157  * Support for faking the "miniport" version.
158  */
159 struct aac_rev_check {
160         RevComponent            callingComponent;
161         struct FsaRevision      callingRevision;
162 };
163
164 struct aac_rev_check_resp {
165         int                     possiblyCompatible;
166         struct FsaRevision      adapterSWRevision;
167 };
168
169 /*
170  * Context passed in by a consumer looking to collect an AIF.
171  */
172 struct get_adapter_fib_ioctl {
173         u_int32_t       AdapterFibContext;
174         int             Wait;
175         caddr_t         AifFib;
176 };
177
178 struct aac_query_disk {
179         int32_t         ContainerNumber;
180         int32_t         Bus;
181         int32_t         Target;
182         int32_t         Lun;
183         u_int32_t       Valid;
184         u_int32_t       Locked;
185         u_int32_t       Deleted;
186         int32_t         Instance;
187         char            diskDeviceName[10];
188         u_int32_t       UnMapped;
189 };
190
191 /* Features, asked from the tools to know if the driver
192  * supports drives >2TB
193  */
194 typedef union {
195         struct {
196                 u_int32_t largeLBA  : 1;        /* disk support greater 2TB */
197                 u_int32_t IoctlBuf  : 1;        /* ARCIOCTL call support */
198                 u_int32_t AIFSupport: 1;        /* AIF support */
199                 u_int32_t JBODSupport:1;        /* fw + driver support JBOD */
200                 u_int32_t fReserved : 28;
201         } fBits;
202         u_int32_t fValue;
203 } featuresState;
204
205 struct aac_features {
206         featuresState feat;
207         u_int32_t data[31];
208         u_int32_t reserved[32];
209 } __packed;
210 #endif