Clean up the namespace of <sys/timeb.h>.
[dragonfly.git] / sys / dev / raid / aac / aac_ioctl.h
CommitLineData
984263bc
MD
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 *
b4df2201 28 * $FreeBSD: head/sys/sys/aac_ioctl.h 218909 2011-02-21 09:01:34Z brucec $
984263bc
MD
29 */
30
99dd49c5
SW
31#include <sys/ioccom.h>
32
984263bc
MD
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
e9ae7f4f 40#define AACQ_COUNT 4 /* total number of queues */
984263bc
MD
41
42struct aac_qstat {
43 u_int32_t q_length;
44 u_int32_t q_max;
45};
46
47/*
48 * Statistics request
49 */
50union 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)
e9ae7f4f
SW
74#define FSACTL_LNX_SEND_RAW_SRB CTL_CODE(FILE_DEVICE_CONTROLLER, 2067, \
75 METHOD_BUFFERED, FILE_ANY_ACCESS)
984263bc
MD
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)
e9ae7f4f
SW
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)
984263bc
MD
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
7f8935d3 122 * used 12 bits for the number, with the 12th bit being the only set
984263bc
MD
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)
e9ae7f4f 127#define FSACTL_SEND_RAW_SRB _IO('8', 19)
984263bc
MD
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)
e9ae7f4f
SW
140#define FSACTL_SEND_LARGE_FIB _IO('8', 90)
141#define FSACTL_GET_FEATURES _IO('8', 91)
984263bc
MD
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
e9ae7f4f 155#ifdef _KERNEL
984263bc
MD
156/*
157 * Support for faking the "miniport" version.
158 */
159struct aac_rev_check {
160 RevComponent callingComponent;
161 struct FsaRevision callingRevision;
162};
163
164struct 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 */
172struct get_adapter_fib_ioctl {
173 u_int32_t AdapterFibContext;
174 int Wait;
175 caddr_t AifFib;
176};
177
178struct 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};
e9ae7f4f
SW
190
191/* Features, asked from the tools to know if the driver
192 * supports drives >2TB
193 */
194typedef 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
205struct aac_features {
206 featuresState feat;
207 u_int32_t data[31];
208 u_int32_t reserved[32];
209} __packed;
210#endif