1 /*
2 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
4 */
5
6 /*
7 * Copyright (c) 2010-11 PMC-Sierra, Inc.
8 * Copyright (c) 2005-10 Adaptec Inc., Achim Leubner
9 * Copyright (c) 2000 Michael Smith
10 * Copyright (c) 2000 Scott Long
11 * Copyright (c) 2000 BSDi
12 * All rights reserved.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions
16 * are met:
17 * 1. Redistributions of source code must retain the above copyright
18 * notice, this list of conditions and the following disclaimer.
19 * 2. Redistributions in binary form must reproduce the above copyright
20 * notice, this list of conditions and the following disclaimer in the
21 * documentation and/or other materials provided with the distribution.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 */
35
36 #ifndef _AAC_IOCTL_H_
37 #define _AAC_IOCTL_H_
38
39 #pragma ident "@(#)aac_ioctl.h 1.3 07/10/30 SMI"
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 /*
46 * IOCTL Interface
47 */
48
49 /* Macro definitions for IOCTL function control codes */
50 #define CTL_CODE(function, method) \
51 ((4<< 16) | ((function) << 2) | (method))
52
53 /* Method codes for how buffers are passed for I/O and FS controls */
54 #define METHOD_BUFFERED 0
55 #define METHOD_NEITHER 3
56
57 /* IOCTL commands */
58 #define FSACTL_SENDFIB CTL_CODE(2050, METHOD_BUFFERED)
59 #define FSACTL_SEND_RAW_SRB CTL_CODE(2067, METHOD_BUFFERED)
60 #define FSACTL_DELETE_DISK 0x163
61 #define FSACTL_QUERY_DISK 0x173
62 #define FSACTL_OPEN_GET_ADAPTER_FIB CTL_CODE(2100, METHOD_BUFFERED)
63 #define FSACTL_GET_NEXT_ADAPTER_FIB CTL_CODE(2101, METHOD_BUFFERED)
64 #define FSACTL_CLOSE_GET_ADAPTER_FIB CTL_CODE(2102, METHOD_BUFFERED)
65 #define FSACTL_MINIPORT_REV_CHECK CTL_CODE(2107, METHOD_BUFFERED)
66 #define FSACTL_GET_PCI_INFO CTL_CODE(2119, METHOD_BUFFERED)
67 #define FSACTL_FORCE_DELETE_DISK CTL_CODE(2120, METHOD_NEITHER)
68 #define FSACTL_REGISTER_FIB_SEND CTL_CODE(2136, METHOD_BUFFERED)
69 #define FSACTL_GET_CONTAINERS 2131
70 #define FSACTL_GET_VERSION_MATCHING CTL_CODE(2137, METHOD_BUFFERED)
71 #define FSACTL_SEND_LARGE_FIB CTL_CODE(2138, METHOD_BUFFERED)
72 #define FSACTL_GET_FEATURES CTL_CODE(2139, METHOD_BUFFERED)
73
74 #pragma pack(1)
75
76 struct aac_revision
77 {
78 uint32_t compat;
79 uint32_t version;
80 uint32_t build;
81 };
82
83 struct aac_get_adapter_fib
84 {
85 uint32_t context;
86 int wait;
87 uint32_t aif_fib; /* RAID config app is 32bit */
88 };
89
90 struct aac_pci_info {
91 uint32_t bus;
92 uint32_t slot;
93 };
94
95 struct aac_query_disk {
96 int32_t container_no;
97 int32_t bus;
98 int32_t target;
99 int32_t lun;
100 uint32_t valid;
101 uint32_t locked;
102 uint32_t deleted;
103 int32_t instance;
104 char disk_device_name[10];
105 uint32_t unmapped;
106 };
107
108 struct aac_delete_disk {
109 int32_t nt_disk_no;
110 int32_t container_no;
111 };
112
113 /*
114 * The following definitions come from Adaptec:
115 */
116 typedef union {
117 struct {
118 uint32_t largeLBA : 1; /* disk support greater 2TB */
119 uint32_t IoctlBuf : 1; /* ARCIOCTL call support */
120 uint32_t AIFSupport: 1; /* AIF support */
121 uint32_t JBODSupport:1; /* firmware + driver both support JBOD */
122 uint32_t fReserved : 28;
123 } fBits;
124 uint32_t fValue;
125 } featuresState;
126
127 struct aac_features {
128 featuresState feat;
129 uint32_t data[31];
130 uint32_t reserved[32];
131 };
132
133 #pragma pack()
134
135 /*
136 * Aligned structure definitions for variable declarations that require
137 * alignment.
138 *
139 * Normally the packed structures are defined in a way that if the initial
140 * member is aligned, then the following members will also be aligned. So
141 * we need only to make the packed structure, ie. the first member, is
142 * aligned to satisfy alignment requirement.
143 */
144 union aac_revision_align {
145 struct aac_revision d;
146 uint32_t dummy;
147 };
148
149 union aac_get_adapter_fib_align {
150 struct aac_get_adapter_fib d;
151 uint32_t dummy;
152 };
153
154 union aac_pci_info_align {
155 struct aac_pci_info d;
156 uint32_t dummy;
157 };
158
159 union aac_query_disk_align {
160 struct aac_query_disk d;
161 int32_t dummy;
162 };
163
164 union aac_delete_disk_align {
165 struct aac_delete_disk d;
166 int32_t dummy;
167 };
168
169 union aac_features_align {
170 struct aac_features d;
171 uint32_t dummy;
172 };
173
174 #ifdef __cplusplus
175 }
176 #endif
177
178 #endif /* _AAC_IOCTL_H_ */