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