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: stable/10/sys/sys/aac_ioctl.h 331637 2018-03-27 17:52:52Z brooks $
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
40struct aac_qstat {
41	u_int32_t	q_length;
42	u_int32_t	q_max;
43};
44
45/*
46 * Statistics request
47 */
48union 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 */
157struct aac_rev_check {
158	RevComponent		callingComponent;
159	struct FsaRevision	callingRevision;
160};
161
162struct 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 */
170struct get_adapter_fib_ioctl {
171	u_int32_t	AdapterFibContext;
172	int	  	Wait;
173	caddr_t		AifFib;
174};
175
176#ifdef _KERNEL
177struct get_adapter_fib_ioctl32 {
178	u_int32_t	AdapterFibContext;
179	int	  	Wait;
180	u_int32_t	AifFib;
181};
182#endif
183
184struct 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 */
200typedef 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
211struct aac_features {
212	featuresState feat;
213	u_int32_t data[31];
214	u_int32_t reserved[32];
215} __packed;
216#endif
217