xref: /dragonfly/sys/dev/raid/aac/aac_ioctl.h (revision 984263bc)
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: src/sys/dev/aac/aac_ioctl.h,v 1.2.2.2 2001/09/19 19:09:11 scottl Exp $
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_COMPLETE	4
39 #define AACQ_COUNT	5	/* total number of queues */
40 
41 struct aac_qstat {
42 	u_int32_t	q_length;
43 	u_int32_t	q_max;
44 };
45 
46 /*
47  * Statistics request
48  */
49 union aac_statrequest {
50 	u_int32_t		as_item;
51 	struct aac_qstat	as_qstat;
52 };
53 
54 #define AACIO_STATS		_IOWR('T', 101, union aac_statrequest)
55 
56 /*
57  * Ioctl commands likely to be submitted from a Linux management application.
58  * These bit encodings are actually descended from Windows NT.  Ick.
59  */
60 
61 #define CTL_CODE(devType, func, meth, acc) (((devType) << 16) | ((acc) << 14) | ((func) << 2) | (meth))
62 #define METHOD_BUFFERED                 0
63 #define METHOD_IN_DIRECT                1
64 #define METHOD_OUT_DIRECT               2
65 #define METHOD_NEITHER                  3
66 #define FILE_ANY_ACCESS                 0
67 #define FILE_READ_ACCESS          	( 0x0001 )
68 #define FILE_WRITE_ACCESS         	( 0x0002 )
69 #define FILE_DEVICE_CONTROLLER          0x00000004
70 
71 #define FSACTL_LNX_SENDFIB		CTL_CODE(FILE_DEVICE_CONTROLLER, 2050, \
72 					METHOD_BUFFERED, FILE_ANY_ACCESS)
73 #define FSACTL_LNX_GET_COMM_PERF_DATA	CTL_CODE(FILE_DEVICE_CONTROLLER, 2084, \
74 					METHOD_BUFFERED, FILE_ANY_ACCESS)
75 #define FSACTL_LNX_OPENCLS_COMM_PERF_DATA CTL_CODE(FILE_DEVICE_CONTROLLER, \
76 					2085, METHOD_BUFFERED, FILE_ANY_ACCESS)
77 #define FSACTL_LNX_OPEN_GET_ADAPTER_FIB	CTL_CODE(FILE_DEVICE_CONTROLLER, 2100, \
78 					METHOD_BUFFERED, FILE_ANY_ACCESS)
79 #define FSACTL_LNX_GET_NEXT_ADAPTER_FIB	CTL_CODE(FILE_DEVICE_CONTROLLER, 2101, \
80 					METHOD_BUFFERED, FILE_ANY_ACCESS)
81 #define FSACTL_LNX_CLOSE_GET_ADAPTER_FIB CTL_CODE(FILE_DEVICE_CONTROLLER, \
82 					2102, METHOD_BUFFERED, FILE_ANY_ACCESS)
83 #define FSACTL_LNX_CLOSE_ADAPTER_CONFIG	CTL_CODE(FILE_DEVICE_CONTROLLER, 2104, \
84 					METHOD_BUFFERED, FILE_ANY_ACCESS)
85 #define FSACTL_LNX_OPEN_ADAPTER_CONFIG	CTL_CODE(FILE_DEVICE_CONTROLLER, 2105, \
86 					METHOD_BUFFERED, FILE_ANY_ACCESS)
87 #define FSACTL_LNX_MINIPORT_REV_CHECK	CTL_CODE(FILE_DEVICE_CONTROLLER, 2107, \
88 					METHOD_BUFFERED, FILE_ANY_ACCESS)
89 #define FSACTL_LNX_QUERY_ADAPTER_CONFIG	CTL_CODE(FILE_DEVICE_CONTROLLER, 2113, \
90 					METHOD_BUFFERED, FILE_ANY_ACCESS)
91 #define FSACTL_LNX_GET_PCI_INFO		CTL_CODE(FILE_DEVICE_CONTROLLER, 2119, \
92 					METHOD_BUFFERED, FILE_ANY_ACCESS)
93 #define FSACTL_LNX_FORCE_DELETE_DISK	CTL_CODE(FILE_DEVICE_CONTROLLER, 2120, \
94 					METHOD_NEITHER, FILE_ANY_ACCESS)
95 #define FSACTL_LNX_AIF_THREAD		CTL_CODE(FILE_DEVICE_CONTROLLER, 2127, \
96 					METHOD_NEITHER, FILE_ANY_ACCESS)
97 
98 /* Why these don't follow the previous convention, I don't know */
99 #define FSACTL_LNX_NULL_IO_TEST		0x43
100 #define FSACTL_LNX_SIM_IO_TEST		0x53
101 #define FSACTL_LNX_DOWNLOAD		0x83
102 #define FSACTL_LNX_GET_VAR		0x93
103 #define FSACTL_LNX_SET_VAR		0xa3
104 #define FSACTL_LNX_GET_FIBTIMES		0xb3
105 #define FSACTL_LNX_ZERO_FIBTIMES	0xc3
106 #define FSACTL_LNX_DELETE_DISK		0x163
107 #define FSACTL_LNX_QUERY_DISK		0x173
108 
109 /* Ok, here it gets really lame */
110 #define FSACTL_LNX_PROBE_CONTAINERS	2131	/* Just guessing */
111 
112 /* Do the native version of the ioctls.  Since the BSD encoding scheme
113  * conflicts with the 'standard' AAC encoding scheme, the resulting numbers
114  * will be different.  The '8' comes from the fact that the previous scheme
115  * used 12 bits for the number, with the the 12th bit being the only set
116  * bit above bit 8.  Thus the value of 8, with the lower 8 bits holding the
117  * command number.  9 is used for the odd overflow case.
118  */
119 #define FSACTL_SENDFIB			_IO('8', 2)
120 #define FSACTL_GET_COMM_PERF_DATA	_IO('8', 36)
121 #define FSACTL_OPENCLS_COMM_PERF_DATA	_IO('8', 37)
122 #define FSACTL_OPEN_GET_ADAPTER_FIB	_IO('8', 52)
123 #define FSACTL_GET_NEXT_ADAPTER_FIB	_IO('8', 53)
124 #define FSACTL_CLOSE_GET_ADAPTER_FIB	_IO('8', 54)
125 #define FSACTL_CLOSE_ADAPTER_CONFIG	_IO('8', 56)
126 #define FSACTL_OPEN_ADAPTER_CONFIG	_IO('8', 57)
127 #define FSACTL_MINIPORT_REV_CHECK	_IO('8', 59)
128 #define FSACTL_QUERY_ADAPTER_CONFIG	_IO('8', 65)
129 #define FSACTL_GET_PCI_INFO		_IO('8', 71)
130 #define FSACTL_FORCE_DELETE_DISK	_IO('8', 72)
131 #define FSACTL_AIF_THREAD		_IO('8', 79)
132 
133 #define FSACTL_NULL_IO_TEST		_IO('8', 67)
134 #define FSACTL_SIM_IO_TEST		_IO('8', 83)
135 #define FSACTL_DOWNLOAD			_IO('8', 131)
136 #define FSACTL_GET_VAR			_IO('8', 147)
137 #define FSACTL_SET_VAR			_IO('8', 163)
138 #define FSACTL_GET_FIBTIMES		_IO('8', 179)
139 #define FSACTL_ZERO_FIBTIMES		_IO('8', 195)
140 #define FSACTL_DELETE_DISK		_IO('8', 99)
141 #define FSACTL_QUERY_DISK		_IO('9', 115)
142 
143 #define FSACTL_PROBE_CONTAINERS		_IO('9', 83)	/* Just guessing */
144 
145 
146 /*
147  * Support for faking the "miniport" version.
148  */
149 struct aac_rev_check {
150 	RevComponent		callingComponent;
151 	struct FsaRevision	callingRevision;
152 };
153 
154 struct aac_rev_check_resp {
155 	int			possiblyCompatible;
156 	struct FsaRevision	adapterSWRevision;
157 };
158 
159 /*
160  * Context passed in by a consumer looking to collect an AIF.
161  */
162 struct get_adapter_fib_ioctl {
163 	u_int32_t	AdapterFibContext;
164 	int	  	Wait;
165 	caddr_t		AifFib;
166 };
167 
168 struct aac_query_disk {
169 	int32_t		ContainerNumber;
170 	int32_t		Bus;
171 	int32_t		Target;
172 	int32_t		Lun;
173 	u_int32_t	Valid;
174 	u_int32_t	Locked;
175 	u_int32_t	Deleted;
176 	int32_t		Instance;
177 	char		diskDeviceName[10];
178 	u_int32_t	UnMapped;
179 };
180