aacreg.h revision 1.13 1 1.13 sborrill /* $NetBSD: aacreg.h,v 1.13 2008/10/02 08:21:57 sborrill Exp $ */
2 1.1 ad
3 1.1 ad /*-
4 1.6 briggs * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
5 1.1 ad * All rights reserved.
6 1.1 ad *
7 1.1 ad * This code is derived from software contributed to The NetBSD Foundation
8 1.1 ad * by Andrew Doran.
9 1.1 ad *
10 1.1 ad * Redistribution and use in source and binary forms, with or without
11 1.1 ad * modification, are permitted provided that the following conditions
12 1.1 ad * are met:
13 1.1 ad * 1. Redistributions of source code must retain the above copyright
14 1.1 ad * notice, this list of conditions and the following disclaimer.
15 1.1 ad * 2. Redistributions in binary form must reproduce the above copyright
16 1.1 ad * notice, this list of conditions and the following disclaimer in the
17 1.1 ad * documentation and/or other materials provided with the distribution.
18 1.1 ad *
19 1.1 ad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 1.1 ad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 1.1 ad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 1.1 ad * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 1.1 ad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 1.1 ad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 1.1 ad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 1.1 ad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 1.1 ad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 1.1 ad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 1.1 ad * POSSIBILITY OF SUCH DAMAGE.
30 1.1 ad */
31 1.1 ad
32 1.1 ad /*-
33 1.1 ad * Copyright (c) 2000 Michael Smith
34 1.6 briggs * Copyright (c) 2000-2001 Scott Long
35 1.1 ad * Copyright (c) 2000 BSDi
36 1.1 ad * Copyright (c) 2000 Niklas Hallqvist
37 1.1 ad * All rights reserved.
38 1.1 ad *
39 1.1 ad * Redistribution and use in source and binary forms, with or without
40 1.1 ad * modification, are permitted provided that the following conditions
41 1.1 ad * are met:
42 1.1 ad * 1. Redistributions of source code must retain the above copyright
43 1.1 ad * notice, this list of conditions and the following disclaimer.
44 1.1 ad * 2. Redistributions in binary form must reproduce the above copyright
45 1.1 ad * notice, this list of conditions and the following disclaimer in the
46 1.1 ad * documentation and/or other materials provided with the distribution.
47 1.1 ad *
48 1.1 ad * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
49 1.1 ad * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50 1.1 ad * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
51 1.1 ad * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
52 1.1 ad * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
53 1.1 ad * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
54 1.1 ad * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55 1.1 ad * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
56 1.1 ad * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57 1.1 ad * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58 1.1 ad * SUCH DAMAGE.
59 1.1 ad *
60 1.1 ad * from FreeBSD: aacreg.h,v 1.1 2000/09/13 03:20:34 msmith Exp
61 1.1 ad * via OpenBSD: aacreg.h,v 1.3 2001/06/12 15:40:29 niklas Exp
62 1.6 briggs * incorporating some of: aacreg.h,v 1.23 2005/10/14 16:22:45 scottl Exp
63 1.1 ad */
64 1.1 ad
65 1.1 ad /*
66 1.1 ad * Data structures defining the interface between the driver and the Adaptec
67 1.1 ad * 'FSA' adapters. Note that many field names and comments here are taken
68 1.1 ad * verbatim from the Adaptec driver source in order to make comparing the
69 1.1 ad * two slightly easier.
70 1.1 ad */
71 1.1 ad
72 1.1 ad #ifndef _PCI_AACREG_H_
73 1.1 ad #define _PCI_AACREG_H_
74 1.1 ad
75 1.1 ad /*
76 1.1 ad * Misc. magic numbers.
77 1.1 ad */
78 1.1 ad #define AAC_MAX_CONTAINERS 64
79 1.1 ad #define AAC_BLOCK_SIZE 512
80 1.1 ad
81 1.1 ad /*
82 1.1 ad * Communications interface.
83 1.1 ad *
84 1.1 ad * Where datastructure layouts are closely parallel to the Adaptec sample code,
85 1.1 ad * retain their naming conventions (for now) to aid in cross-referencing.
86 1.1 ad */
87 1.1 ad
88 1.1 ad /*
89 1.1 ad * We establish 4 command queues and matching response queues. Queues must
90 1.1 ad * be 16-byte aligned, and are sized as follows:
91 1.1 ad */
92 1.1 ad #define AAC_HOST_NORM_CMD_ENTRIES 8 /* cmd adapter->host, normal pri */
93 1.1 ad #define AAC_HOST_HIGH_CMD_ENTRIES 4 /* cmd adapter->host, high pri */
94 1.1 ad #define AAC_ADAP_NORM_CMD_ENTRIES 512 /* cmd host->adapter, normal pri */
95 1.1 ad #define AAC_ADAP_HIGH_CMD_ENTRIES 4 /* cmd host->adapter, high pri */
96 1.1 ad #define AAC_HOST_NORM_RESP_ENTRIES 512 /* resp, adapter->host, normal pri */
97 1.1 ad #define AAC_HOST_HIGH_RESP_ENTRIES 4 /* resp, adapter->host, high pri */
98 1.1 ad #define AAC_ADAP_NORM_RESP_ENTRIES 8 /* resp, host->adapter, normal pri */
99 1.1 ad #define AAC_ADAP_HIGH_RESP_ENTRIES 4 /* resp, host->adapter, high pri */
100 1.1 ad
101 1.1 ad #define AAC_TOTALQ_LENGTH \
102 1.1 ad (AAC_HOST_HIGH_CMD_ENTRIES + AAC_HOST_NORM_CMD_ENTRIES + \
103 1.1 ad AAC_ADAP_HIGH_CMD_ENTRIES + AAC_ADAP_NORM_CMD_ENTRIES + \
104 1.1 ad AAC_HOST_HIGH_RESP_ENTRIES + AAC_HOST_NORM_RESP_ENTRIES + \
105 1.1 ad AAC_ADAP_HIGH_RESP_ENTRIES + AAC_ADAP_NORM_RESP_ENTRIES)
106 1.1 ad
107 1.1 ad #define AAC_QUEUE_COUNT 8
108 1.1 ad #define AAC_QUEUE_ALIGN 16
109 1.1 ad
110 1.1 ad struct aac_queue_entry {
111 1.1 ad u_int32_t aq_fib_size; /* FIB size in bytes */
112 1.1 ad u_int32_t aq_fib_addr; /* receiver-space address of the FIB */
113 1.12 gmcgarry } __packed;
114 1.1 ad
115 1.1 ad #define AAC_PRODUCER_INDEX 0
116 1.1 ad #define AAC_CONSUMER_INDEX 1
117 1.1 ad
118 1.1 ad /*
119 1.1 ad * Table of queue indices and queues used to communicate with the
120 1.1 ad * controller. This structure must be aligned to AAC_QUEUE_ALIGN
121 1.1 ad */
122 1.1 ad struct aac_queue_table {
123 1.1 ad /* queue consumer/producer indexes (layout mandated by adapter) */
124 1.1 ad u_int32_t qt_qindex[AAC_QUEUE_COUNT][2];
125 1.1 ad
126 1.1 ad /* queue entry structures (layout mandated by adapter) */
127 1.1 ad struct aac_queue_entry qt_HostNormCmdQueue[AAC_HOST_NORM_CMD_ENTRIES];
128 1.1 ad struct aac_queue_entry qt_HostHighCmdQueue[AAC_HOST_HIGH_CMD_ENTRIES];
129 1.1 ad struct aac_queue_entry qt_AdapNormCmdQueue[AAC_ADAP_NORM_CMD_ENTRIES];
130 1.1 ad struct aac_queue_entry qt_AdapHighCmdQueue[AAC_ADAP_HIGH_CMD_ENTRIES];
131 1.1 ad struct aac_queue_entry
132 1.1 ad qt_HostNormRespQueue[AAC_HOST_NORM_RESP_ENTRIES];
133 1.1 ad struct aac_queue_entry
134 1.1 ad qt_HostHighRespQueue[AAC_HOST_HIGH_RESP_ENTRIES];
135 1.1 ad struct aac_queue_entry
136 1.1 ad qt_AdapNormRespQueue[AAC_ADAP_NORM_RESP_ENTRIES];
137 1.1 ad struct aac_queue_entry
138 1.1 ad qt_AdapHighRespQueue[AAC_ADAP_HIGH_RESP_ENTRIES];
139 1.12 gmcgarry } __packed;
140 1.1 ad
141 1.1 ad /*
142 1.3 perry * Adapter Init Structure: this is passed to the adapter with the
143 1.1 ad * AAC_MONKER_INITSTRUCT command to point it at our control structures.
144 1.1 ad */
145 1.1 ad struct aac_adapter_init {
146 1.1 ad u_int32_t InitStructRevision;
147 1.1 ad u_int32_t MiniPortRevision;
148 1.1 ad u_int32_t FilesystemRevision;
149 1.1 ad u_int32_t CommHeaderAddress;
150 1.1 ad u_int32_t FastIoCommAreaAddress;
151 1.1 ad u_int32_t AdapterFibsPhysicalAddress;
152 1.7 briggs u_int32_t AdapterFibsVirtualAddress;
153 1.1 ad u_int32_t AdapterFibsSize;
154 1.1 ad u_int32_t AdapterFibAlign;
155 1.1 ad u_int32_t PrintfBufferAddress;
156 1.1 ad u_int32_t PrintfBufferSize;
157 1.1 ad u_int32_t HostPhysMemPages;
158 1.1 ad u_int32_t HostElapsedSeconds;
159 1.7 briggs /* ADAPTER_INIT_STRUCT_REVISION_4 begins here */
160 1.7 briggs u_int32_t InitFlags; /* flags for supported features */
161 1.7 briggs u_int32_t MaxIoCommands; /* max outstanding commands */
162 1.7 briggs u_int32_t MaxIoSize; /* largest I/O command */
163 1.7 briggs u_int32_t MaxFibSize; /* largest FIB to adapter */
164 1.10 perry } __packed;
165 1.1 ad
166 1.8 briggs #define AAC_INIT_STRUCT_REVISION 3
167 1.8 briggs #define AAC_INIT_STRUCT_REVISION_4 4
168 1.8 briggs #define AAC_INIT_STRUCT_MINIPORT_REVISION 1
169 1.8 briggs #define AAC_INITFLAGS_NEW_COMM_SUPPORTED 1
170 1.8 briggs #define AAC_PAGE_SIZE 4096 /* Used to set HostPhysMemPages */
171 1.8 briggs
172 1.1 ad /*
173 1.1 ad * Shared data types
174 1.1 ad */
175 1.1 ad
176 1.1 ad /*
177 1.1 ad * Container types
178 1.1 ad */
179 1.1 ad #define CT_NONE 0
180 1.1 ad #define CT_VOLUME 1
181 1.1 ad #define CT_MIRROR 2
182 1.1 ad #define CT_STRIPE 3
183 1.1 ad #define CT_RAID5 4
184 1.1 ad #define CT_SSRW 5
185 1.1 ad #define CT_SSRO 6
186 1.1 ad #define CT_MORPH 7
187 1.1 ad #define CT_PASSTHRU 8
188 1.1 ad #define CT_RAID4 9
189 1.1 ad #define CT_RAID10 10 /* stripe of mirror */
190 1.1 ad #define CT_RAID00 11 /* stripe of stripe */
191 1.1 ad #define CT_VOLUME_OF_MIRRORS 12 /* volume of mirror */
192 1.1 ad #define CT_PSEUDO_RAID3 13 /* really raid4 */
193 1.9 briggs #define CT_RAID50 14 /* stripe of raid5 */
194 1.9 briggs #define CT_RAID5D 15 /* raid5 distributed hot-sparing */
195 1.9 briggs #define CT_RAID5D0 16
196 1.9 briggs #define CT_RAID1E 17 /* extended raid1 mirroring */
197 1.9 briggs #define CT_RAID6 18
198 1.9 briggs #define CT_RAID60 19
199 1.1 ad
200 1.1 ad /*
201 1.1 ad * Host-addressable object types
202 1.1 ad */
203 1.1 ad #define FT_REG 1 /* regular file */
204 1.1 ad #define FT_DIR 2 /* directory */
205 1.1 ad #define FT_BLK 3 /* "block" device - reserved */
206 1.1 ad #define FT_CHR 4 /* "character special" device - reserved */
207 1.1 ad #define FT_LNK 5 /* symbolic link */
208 1.1 ad #define FT_SOCK 6 /* socket */
209 1.1 ad #define FT_FIFO 7 /* fifo */
210 1.1 ad #define FT_FILESYS 8 /* ADAPTEC's "FSA"(tm) filesystem */
211 1.1 ad #define FT_DRIVE 9 /* phys disk - addressable in scsi by bus/target/lun */
212 1.1 ad #define FT_SLICE 10 /* virtual disk - raw volume - slice */
213 1.1 ad #define FT_PARTITION 11 /* FSA part, inside slice, container building block */
214 1.1 ad #define FT_VOLUME 12 /* Container - Volume Set */
215 1.1 ad #define FT_STRIPE 13 /* Container - Stripe Set */
216 1.1 ad #define FT_MIRROR 14 /* Container - Mirror Set */
217 1.1 ad #define FT_RAID5 15 /* Container - Raid 5 Set */
218 1.1 ad #define FT_DATABASE 16 /* Storage object with "foreign" content manager */
219 1.1 ad
220 1.1 ad /*
221 1.9 briggs * Host-side scatter/gather list for raw commands.
222 1.9 briggs */
223 1.9 briggs struct aac_sg_entryraw {
224 1.9 briggs u_int32_t Next; /* reserved for FW use */
225 1.9 briggs u_int32_t Prev; /* reserved for FW use */
226 1.9 briggs u_int64_t SgAddress;
227 1.9 briggs u_int32_t SgByteCount;
228 1.9 briggs u_int32_t Flags; /* reserved for FW use */
229 1.12 gmcgarry } __packed;
230 1.9 briggs
231 1.9 briggs struct aac_sg_tableraw {
232 1.9 briggs u_int32_t SgCount;
233 1.9 briggs struct aac_sg_entryraw SgEntryRaw[0];
234 1.12 gmcgarry } __packed;
235 1.9 briggs
236 1.9 briggs /*
237 1.1 ad * Host-side scatter/gather list for 32-bit commands.
238 1.1 ad */
239 1.1 ad struct aac_sg_entry {
240 1.1 ad u_int32_t SgAddress;
241 1.1 ad u_int32_t SgByteCount;
242 1.12 gmcgarry } __packed;
243 1.1 ad
244 1.1 ad struct aac_sg_table {
245 1.1 ad u_int32_t SgCount;
246 1.9 briggs struct aac_sg_entry SgEntry[0];
247 1.12 gmcgarry } __packed;
248 1.1 ad
249 1.1 ad /*
250 1.1 ad * Host-side scatter/gather list for 64-bit commands.
251 1.1 ad */
252 1.9 briggs struct aac_sg_entry64 {
253 1.9 briggs u_int64_t SgAddress;
254 1.9 briggs u_int32_t SgByteCount;
255 1.12 gmcgarry } __packed;
256 1.9 briggs
257 1.1 ad struct aac_sg_table64 {
258 1.9 briggs u_int32_t SgCount;
259 1.9 briggs struct aac_sg_entry64 SgEntry64[0];
260 1.12 gmcgarry } __packed;
261 1.1 ad
262 1.1 ad /*
263 1.1 ad * Container creation data
264 1.1 ad */
265 1.1 ad struct aac_container_creation {
266 1.1 ad u_int8_t ViaBuildNumber;
267 1.1 ad u_int8_t MicroSecond;
268 1.1 ad u_int8_t Via; /* 1 = FSU, 2 = API, etc. */
269 1.1 ad u_int8_t YearsSince1900;
270 1.1 ad u_int32_t Month:4; /* 1-12 */
271 1.1 ad u_int32_t Day:6; /* 1-32 */
272 1.1 ad u_int32_t Hour:6; /* 0-23 */
273 1.1 ad u_int32_t Minute:6; /* 0-59 */
274 1.1 ad u_int32_t Second:6; /* 0-59 */
275 1.1 ad u_int64_t ViaAdapterSerialNumber;
276 1.12 gmcgarry } __packed;
277 1.1 ad
278 1.9 briggs typedef enum {
279 1.9 briggs RevApplication = 1,
280 1.9 briggs RevDkiCli,
281 1.9 briggs RevNetService,
282 1.9 briggs RevApi,
283 1.9 briggs RevFileSysDriver,
284 1.9 briggs RevMiniportDriver,
285 1.9 briggs RevAdapterSW,
286 1.9 briggs RevMonitor,
287 1.9 briggs RevRemoteApi,
288 1.9 briggs } RevComponent;
289 1.9 briggs
290 1.1 ad struct FsaRevision {
291 1.1 ad union {
292 1.1 ad struct {
293 1.1 ad u_int8_t dash;
294 1.1 ad u_int8_t type;
295 1.1 ad u_int8_t minor;
296 1.1 ad u_int8_t major;
297 1.1 ad } comp;
298 1.1 ad u_int32_t ul;
299 1.1 ad } external;
300 1.1 ad u_int32_t buildNumber;
301 1.10 perry } __packed;
302 1.1 ad
303 1.1 ad /*
304 1.1 ad * Adapter Information
305 1.1 ad */
306 1.1 ad
307 1.1 ad #define CPU_NTSIM 1
308 1.1 ad #define CPU_I960 2
309 1.1 ad #define CPU_ARM 3
310 1.1 ad #define CPU_SPARC 4
311 1.1 ad #define CPU_POWERPC 5
312 1.1 ad #define CPU_ALPHA 6
313 1.1 ad #define CPU_P7 7
314 1.1 ad #define CPU_I960_RX 8
315 1.1 ad #define CPU__last 9
316 1.1 ad
317 1.1 ad #define CPUI960_JX 1
318 1.1 ad #define CPUI960_CX 2
319 1.1 ad #define CPUI960_HX 3
320 1.1 ad #define CPUI960_RX 4
321 1.1 ad #define CPUARM_SA110 5
322 1.1 ad #define CPUARM_xxx 6
323 1.1 ad #define CPUPPC_603e 7
324 1.1 ad #define CPUPPC_xxx 8
325 1.2 briggs #define CPUI80303 9
326 1.9 briggs #define CPU_XSCALE_80321 10
327 1.9 briggs #define CPU_MIPS_4KC 11
328 1.9 briggs #define CPU_MIPS_5KC 12
329 1.9 briggs #define CPUSUBTYPE__last 13
330 1.1 ad
331 1.1 ad #define PLAT_NTSIM 1
332 1.1 ad #define PLAT_V3ADU 2
333 1.1 ad #define PLAT_CYCLONE 3
334 1.1 ad #define PLAT_CYCLONE_HD 4
335 1.1 ad #define PLAT_BATBOARD 5
336 1.1 ad #define PLAT_BATBOARD_HD 6
337 1.1 ad #define PLAT_YOLO 7
338 1.1 ad #define PLAT_COBRA 8
339 1.1 ad #define PLAT_ANAHEIM 9
340 1.1 ad #define PLAT_JALAPENO 10
341 1.1 ad #define PLAT_QUEENS 11
342 1.1 ad #define PLAT_JALAPENO_DELL 12
343 1.1 ad #define PLAT_POBLANO 13
344 1.1 ad #define PLAT_POBLANO_OPAL 14
345 1.1 ad #define PLAT_POBLANO_SL0 15
346 1.1 ad #define PLAT_POBLANO_SL1 16
347 1.1 ad #define PLAT_POBLANO_SL2 17
348 1.1 ad #define PLAT_POBLANO_XXX 18
349 1.1 ad #define PLAT_JALAPENO_P2 19
350 1.1 ad #define PLAT_HABANERO 20
351 1.9 briggs #define PLAT_VULCAN 21
352 1.9 briggs #define PLAT_CRUSADER 22
353 1.9 briggs #define PLAT_LANCER 23
354 1.9 briggs #define PLAT_HARRIER 24
355 1.9 briggs #define PLAT_TERMINATOR 25
356 1.9 briggs #define PLAT_SKYHAWK 26
357 1.9 briggs #define PLAT_CORSAIR 27
358 1.9 briggs #define PLAT_JAGUAR 28
359 1.9 briggs #define PLAT_SATAHAWK 29
360 1.9 briggs #define PLAT_SATANATOR 30
361 1.9 briggs #define PLAT_PROWLER 31
362 1.9 briggs #define PLAT_BLACKBIRD 32
363 1.9 briggs #define PLAT_SABREEXPRESS 33
364 1.9 briggs #define PLAT_INTRUDER 34
365 1.9 briggs #define PLAT__last 35
366 1.1 ad
367 1.1 ad #define OEM_FLAVOR_ADAPTEC 1
368 1.1 ad #define OEM_FLAVOR_DELL 2
369 1.1 ad #define OEM_FLAVOR_HP 3
370 1.1 ad #define OEM_FLAVOR_IBM 4
371 1.1 ad #define OEM_FLAVOR_CPQ 5
372 1.9 briggs #define OEM_FLAVOR_FSC 6
373 1.9 briggs #define OEM_FLAVOR_DWS 7
374 1.1 ad #define OEM_FLAVOR_BRAND_Z 8
375 1.9 briggs #define OEM_FLAVOR_LEGEND 9
376 1.9 briggs #define OEM_FLAVOR_HITACHI 10
377 1.9 briggs #define OEM_FLAVOR_ESG 11
378 1.9 briggs #define OEM_FLAVOR_ICP 12
379 1.9 briggs #define OEM_FLAVOR_SCM 13
380 1.9 briggs #define OEM_FLAVOR__last 14
381 1.1 ad
382 1.1 ad /*
383 1.1 ad * XXX the aac-2622 with no battery present reports PLATFORM_BAT_OPT_PRESENT
384 1.1 ad */
385 1.1 ad #define PLATFORM_BAT_REQ_PRESENT 1 /* BATTERY REQUIRED AND PRESENT */
386 1.1 ad #define PLATFORM_BAT_REQ_NOTPRESENT 2 /* BATTERY REQUIRED AND NOT PRESENT */
387 1.1 ad #define PLATFORM_BAT_OPT_PRESENT 3 /* BATTERY OPTIONAL AND PRESENT */
388 1.1 ad #define PLATFORM_BAT_OPT_NOTPRESENT 4 /* BATTERY OPTIONAL AND NOT PRESENT */
389 1.1 ad #define PLATFORM_BAT_NOT_SUPPORTED 5 /* BATTERY NOT SUPPORTED */
390 1.1 ad
391 1.9 briggs /*
392 1.9 briggs * options supported by this board
393 1.9 briggs * there has to be a one to one mapping of these defines and the ones in
394 1.9 briggs * fsaapi.h, search for FSA_SUPPORT_SNAPSHOT
395 1.9 briggs */
396 1.9 briggs #define AAC_SUPPORTED_SNAPSHOT 0x01
397 1.9 briggs #define AAC_SUPPORTED_CLUSTERS 0x02
398 1.9 briggs #define AAC_SUPPORTED_WRITE_CACHE 0x04
399 1.9 briggs #define AAC_SUPPORTED_64BIT_DATA 0x08
400 1.9 briggs #define AAC_SUPPORTED_HOST_TIME_FIB 0x10
401 1.9 briggs #define AAC_SUPPORTED_RAID50 0x20
402 1.9 briggs #define AAC_SUPPORTED_4GB_WINDOW 0x40
403 1.9 briggs #define AAC_SUPPORTED_SCSI_UPGRADEABLE 0x80
404 1.9 briggs #define AAC_SUPPORTED_SOFT_ERR_REPORT 0x100
405 1.9 briggs #define AAC_SUPPORTED_NOT_RECONDITION 0x200
406 1.9 briggs #define AAC_SUPPORTED_SGMAP_HOST64 0x400
407 1.9 briggs #define AAC_SUPPORTED_ALARM 0x800
408 1.9 briggs #define AAC_SUPPORTED_NONDASD 0x1000
409 1.9 briggs #define AAC_SUPPORTED_SCSI_MANAGED 0x2000
410 1.9 briggs #define AAC_SUPPORTED_RAID_SCSI_MODE 0x4000
411 1.9 briggs #define AAC_SUPPORTED_SUPPLEMENT_ADAPTER_INFO 0x10000
412 1.9 briggs #define AAC_SUPPORTED_NEW_COMM 0x20000
413 1.9 briggs #define AAC_SUPPORTED_64BIT_ARRAYSIZE 0x40000
414 1.9 briggs #define AAC_SUPPORTED_HEAT_SENSOR 0x80000
415 1.9 briggs
416 1.3 perry /*
417 1.1 ad * Structure used to respond to a RequestAdapterInfo fib.
418 1.1 ad */
419 1.1 ad struct aac_adapter_info {
420 1.1 ad u_int32_t PlatformBase; /* adapter type */
421 1.1 ad u_int32_t CpuArchitecture; /* adapter CPU type */
422 1.1 ad u_int32_t CpuVariant; /* adapter CPU subtype */
423 1.1 ad u_int32_t ClockSpeed; /* adapter CPU clockspeed */
424 1.1 ad u_int32_t ExecutionMem; /* adapter Execution Memory size */
425 1.1 ad u_int32_t BufferMem; /* adapter Data Memory */
426 1.1 ad u_int32_t TotalMem; /* adapter Total Memory */
427 1.1 ad struct FsaRevision KernelRevision; /* adapter Kernel SW Revision */
428 1.1 ad struct FsaRevision MonitorRevision; /* adapter Monitor/Diag SW Rev */
429 1.1 ad struct FsaRevision HardwareRevision; /* TDB */
430 1.1 ad struct FsaRevision BIOSRevision; /* adapter BIOS Revision */
431 1.1 ad u_int32_t ClusteringEnabled;
432 1.1 ad u_int32_t ClusterChannelMask;
433 1.1 ad u_int64_t SerialNumber;
434 1.1 ad u_int32_t batteryPlatform;
435 1.1 ad u_int32_t SupportedOptions; /* supported features of this ctrlr */
436 1.1 ad u_int32_t OemVariant;
437 1.10 perry } __packed;
438 1.1 ad
439 1.1 ad /*
440 1.1 ad * Monitor/Kernel interface.
441 1.1 ad */
442 1.1 ad
443 1.1 ad /*
444 1.1 ad * Synchronous commands to the monitor/kernel.
445 1.1 ad */
446 1.9 briggs #define AAC_MONKER_BREAKPOINT 0x04
447 1.1 ad #define AAC_MONKER_INITSTRUCT 0x05
448 1.1 ad #define AAC_MONKER_SYNCFIB 0x0c
449 1.1 ad #define AAC_MONKER_GETKERNVER 0x11
450 1.9 briggs #define AAC_MONKER_POSTRESULTS 0x14
451 1.4 briggs #define AAC_MONKER_GETINFO 0x19
452 1.9 briggs #define AAC_MONKER_GETDRVPROP 0x23
453 1.9 briggs #define AAC_MONKER_RCVTEMP 0x25
454 1.9 briggs #define AAC_MONKER_GETCOMMPREF 0x26
455 1.9 briggs #define AAC_MONKER_REINIT 0xee
456 1.1 ad
457 1.1 ad /*
458 1.1 ad * Command status values
459 1.1 ad */
460 1.1 ad #define ST_OK 0
461 1.1 ad #define ST_PERM 1
462 1.1 ad #define ST_NOENT 2
463 1.1 ad #define ST_IO 5
464 1.1 ad #define ST_NXIO 6
465 1.1 ad #define ST_E2BIG 7
466 1.1 ad #define ST_ACCES 13
467 1.1 ad #define ST_EXIST 17
468 1.1 ad #define ST_XDEV 18
469 1.1 ad #define ST_NODEV 19
470 1.1 ad #define ST_NOTDIR 20
471 1.1 ad #define ST_ISDIR 21
472 1.1 ad #define ST_INVAL 22
473 1.1 ad #define ST_FBIG 27
474 1.1 ad #define ST_NOSPC 28
475 1.1 ad #define ST_ROFS 30
476 1.1 ad #define ST_MLINK 31
477 1.1 ad #define ST_WOULDBLOCK 35
478 1.1 ad #define ST_NAMETOOLONG 63
479 1.1 ad #define ST_NOTEMPTY 66
480 1.1 ad #define ST_DQUOT 69
481 1.1 ad #define ST_STALE 70
482 1.1 ad #define ST_REMOTE 71
483 1.1 ad #define ST_BADHANDLE 10001
484 1.1 ad #define ST_NOT_SYNC 10002
485 1.1 ad #define ST_BAD_COOKIE 10003
486 1.1 ad #define ST_NOTSUPP 10004
487 1.1 ad #define ST_TOOSMALL 10005
488 1.1 ad #define ST_SERVERFAULT 10006
489 1.1 ad #define ST_BADTYPE 10007
490 1.1 ad #define ST_JUKEBOX 10008
491 1.1 ad #define ST_NOTMOUNTED 10009
492 1.1 ad #define ST_MAINTMODE 10010
493 1.1 ad #define ST_STALEACL 10011
494 1.1 ad
495 1.1 ad /*
496 1.1 ad * Volume manager commands
497 1.1 ad */
498 1.1 ad #define VM_Null 0
499 1.1 ad #define VM_NameServe 1
500 1.1 ad #define VM_ContainerConfig 2
501 1.1 ad #define VM_Ioctl 3
502 1.1 ad #define VM_FilesystemIoctl 4
503 1.1 ad #define VM_CloseAll 5
504 1.1 ad #define VM_CtBlockRead 6
505 1.1 ad #define VM_CtBlockWrite 7
506 1.1 ad #define VM_SliceBlockRead 8 /* raw access to configured "storage objects" */
507 1.1 ad #define VM_SliceBlockWrite 9
508 1.1 ad #define VM_DriveBlockRead 10 /* raw access to physical devices */
509 1.1 ad #define VM_DriveBlockWrite 11
510 1.1 ad #define VM_EnclosureMgt 12 /* enclosure management */
511 1.1 ad #define VM_Unused 13 /* used to be diskset management */
512 1.1 ad #define VM_CtBlockVerify 14
513 1.1 ad #define VM_CtPerf 15 /* performance test */
514 1.1 ad #define VM_CtBlockRead64 16
515 1.1 ad #define VM_CtBlockWrite64 17
516 1.1 ad #define VM_CtBlockVerify64 18
517 1.9 briggs #define VM_CtHostRead64 19
518 1.9 briggs #define VM_CtHostWrite64 20
519 1.9 briggs #define VM_DrvErrTblLog 21 /* drive error table/log type of command */
520 1.9 briggs #define VM_NameServe64 22
521 1.1 ad
522 1.1 ad /*
523 1.1 ad * "Mountable object"
524 1.1 ad */
525 1.1 ad struct aac_mntobj {
526 1.1 ad u_int32_t ObjectId;
527 1.1 ad char FileSystemName[16];
528 1.1 ad struct aac_container_creation CreateInfo;
529 1.1 ad u_int32_t Capacity;
530 1.1 ad u_int32_t VolType;
531 1.1 ad u_int32_t ObjType;
532 1.1 ad u_int32_t ContentState;
533 1.1 ad #define AAC_FSCS_READONLY 0x0002 /* XXX need more information than this */
534 1.1 ad union {
535 1.1 ad u_int32_t pad[8];
536 1.1 ad } ObjExtension;
537 1.1 ad u_int32_t AlterEgoId;
538 1.13 sborrill u_int32_t CapacityHigh; /* Only if VM_NameServe64 */
539 1.12 gmcgarry } __packed;
540 1.1 ad
541 1.1 ad struct aac_mntinfo {
542 1.1 ad u_int32_t Command;
543 1.1 ad u_int32_t MntType;
544 1.1 ad u_int32_t MntCount;
545 1.12 gmcgarry } __packed;
546 1.1 ad
547 1.1 ad struct aac_mntinforesponse {
548 1.1 ad u_int32_t Status;
549 1.1 ad u_int32_t MntType;
550 1.1 ad u_int32_t MntRespCount;
551 1.1 ad struct aac_mntobj MntTable[1];
552 1.12 gmcgarry } __packed;
553 1.1 ad
554 1.1 ad /*
555 1.9 briggs * Container shutdown command.
556 1.9 briggs */
557 1.9 briggs struct aac_closecommand {
558 1.9 briggs u_int32_t Command;
559 1.9 briggs u_int32_t ContainerId;
560 1.12 gmcgarry } __packed;
561 1.9 briggs
562 1.9 briggs /*
563 1.9 briggs * Container Config Command
564 1.9 briggs */
565 1.9 briggs #define CT_GET_SCSI_METHOD 64
566 1.9 briggs struct aac_ctcfg {
567 1.9 briggs u_int32_t Command;
568 1.9 briggs u_int32_t cmd;
569 1.9 briggs u_int32_t param;
570 1.12 gmcgarry } __packed;
571 1.9 briggs
572 1.9 briggs struct aac_ctcfg_resp {
573 1.9 briggs u_int32_t Status;
574 1.9 briggs u_int32_t resp;
575 1.9 briggs u_int32_t param;
576 1.12 gmcgarry } __packed;
577 1.9 briggs
578 1.9 briggs /*
579 1.9 briggs * 'Ioctl' commads
580 1.9 briggs */
581 1.9 briggs #define AAC_SCSI_MAX_PORTS 10
582 1.9 briggs #define AAC_BUS_NO_EXIST 0
583 1.9 briggs #define AAC_BUS_VALID 1
584 1.9 briggs #define AAC_BUS_FAULTED 2
585 1.9 briggs #define AAC_BUS_DISABLED 3
586 1.9 briggs #define GetBusInfo 0x9
587 1.9 briggs
588 1.9 briggs struct aac_getbusinf {
589 1.9 briggs u_int32_t ProbeComplete;
590 1.9 briggs u_int32_t BusCount;
591 1.9 briggs u_int32_t TargetsPerBus;
592 1.9 briggs u_int8_t InitiatorBusId[AAC_SCSI_MAX_PORTS];
593 1.9 briggs u_int8_t BusValid[AAC_SCSI_MAX_PORTS];
594 1.12 gmcgarry } __packed;
595 1.9 briggs
596 1.9 briggs struct aac_vmioctl {
597 1.9 briggs u_int32_t Command;
598 1.9 briggs u_int32_t ObjType;
599 1.9 briggs u_int32_t MethId;
600 1.9 briggs u_int32_t ObjId;
601 1.9 briggs u_int32_t IoctlCmd;
602 1.9 briggs u_int32_t IoctlBuf[1]; /* Placeholder? */
603 1.12 gmcgarry } __packed;
604 1.9 briggs
605 1.9 briggs struct aac_vmi_businf_resp {
606 1.9 briggs u_int32_t Status;
607 1.9 briggs u_int32_t ObjType;
608 1.9 briggs u_int32_t MethId;
609 1.9 briggs u_int32_t ObjId;
610 1.9 briggs u_int32_t IoctlCmd;
611 1.9 briggs struct aac_getbusinf BusInf;
612 1.12 gmcgarry } __packed;
613 1.9 briggs
614 1.9 briggs #if 0
615 1.9 briggs #define AAC_BTL_TO_HANDLE(b, t, l) \
616 1.9 briggs (((b & 0x3f) << 7) | ((l & 0x7) << 4) | (t & 0xf))
617 1.9 briggs #else
618 1.9 briggs #define AAC_BTL_TO_HANDLE(b, t, l) \
619 1.9 briggs ((((u_int32_t)b & 0x0f) << 24) | \
620 1.9 briggs (((u_int32_t)l & 0xff) << 16) | \
621 1.9 briggs ((u_int32_t)t & 0xffff))
622 1.9 briggs #endif
623 1.9 briggs #define GetDeviceProbeInfo 0x5
624 1.9 briggs
625 1.9 briggs struct aac_vmi_devinfo_resp {
626 1.9 briggs u_int32_t Status;
627 1.9 briggs u_int32_t ObjType;
628 1.9 briggs u_int32_t MethId;
629 1.9 briggs u_int32_t ObjId;
630 1.9 briggs u_int32_t IoctlCmd;
631 1.9 briggs u_int8_t VendorId[8];
632 1.9 briggs u_int8_t ProductId[16];
633 1.9 briggs u_int8_t ProductRev[4];
634 1.9 briggs u_int32_t Inquiry7;
635 1.9 briggs u_int32_t align1;
636 1.9 briggs u_int32_t Inquiry0;
637 1.9 briggs u_int32_t align2;
638 1.9 briggs u_int32_t Inquiry1;
639 1.9 briggs u_int32_t align3;
640 1.9 briggs u_int32_t reserved[2];
641 1.9 briggs u_int8_t VendorSpecific[20];
642 1.9 briggs u_int32_t Smart:1;
643 1.9 briggs u_int32_t AAC_Managed:1;
644 1.9 briggs u_int32_t align4;
645 1.9 briggs u_int32_t reserved2:6;
646 1.9 briggs u_int32_t Bus;
647 1.9 briggs u_int32_t Target;
648 1.9 briggs u_int32_t Lun;
649 1.9 briggs u_int32_t ultraEnable:1,
650 1.9 briggs disconnectEnable:1,
651 1.9 briggs fast20EnabledW:1,
652 1.9 briggs scamDevice:1,
653 1.9 briggs scamTolerant:1,
654 1.9 briggs setForSync:1,
655 1.9 briggs setForWide:1,
656 1.9 briggs syncDevice:1,
657 1.9 briggs wideDevice:1,
658 1.9 briggs reserved1:7,
659 1.9 briggs ScsiRate:8,
660 1.9 briggs ScsiOffset:8;
661 1.9 briggs }; /* Do not pack */
662 1.9 briggs
663 1.9 briggs #define ResetBus 0x16
664 1.9 briggs struct aac_resetbus {
665 1.9 briggs u_int32_t BusNumber;
666 1.9 briggs };
667 1.9 briggs
668 1.9 briggs /*
669 1.1 ad * Write 'stability' options.
670 1.1 ad */
671 1.1 ad #define CSTABLE 1
672 1.1 ad #define CUNSTABLE 2
673 1.1 ad
674 1.1 ad /*
675 1.1 ad * Commit level response for a write request.
676 1.1 ad */
677 1.1 ad #define CMFILE_SYNC_NVRAM 1
678 1.1 ad #define CMDATA_SYNC_NVRAM 2
679 1.1 ad #define CMFILE_SYNC 3
680 1.1 ad #define CMDATA_SYNC 4
681 1.1 ad #define CMUNSTABLE 5
682 1.1 ad
683 1.1 ad /*
684 1.1 ad * Block read/write operations. These structures are packed into the 'data'
685 1.1 ad * area in the FIB.
686 1.1 ad */
687 1.1 ad struct aac_blockread {
688 1.1 ad u_int32_t Command; /* not FSACommand! */
689 1.1 ad u_int32_t ContainerId;
690 1.1 ad u_int32_t BlockNumber;
691 1.1 ad u_int32_t ByteCount;
692 1.1 ad struct aac_sg_table SgMap; /* variable size */
693 1.12 gmcgarry } __packed;
694 1.1 ad
695 1.9 briggs struct aac_blockread64 {
696 1.9 briggs u_int32_t Command; /* not FSACommand! */
697 1.9 briggs u_int16_t ContainerId;
698 1.9 briggs u_int16_t SectorCount;
699 1.9 briggs u_int32_t BlockNumber;
700 1.9 briggs u_int16_t Pad;
701 1.9 briggs u_int16_t Flags;
702 1.9 briggs struct aac_sg_table64 SgMap64; /* variable size */
703 1.12 gmcgarry } __packed;
704 1.9 briggs
705 1.1 ad struct aac_blockread_response {
706 1.1 ad u_int32_t Status;
707 1.1 ad u_int32_t ByteCount;
708 1.12 gmcgarry } __packed;
709 1.1 ad
710 1.1 ad struct aac_blockwrite {
711 1.1 ad u_int32_t Command; /* not FSACommand! */
712 1.1 ad u_int32_t ContainerId;
713 1.1 ad u_int32_t BlockNumber;
714 1.1 ad u_int32_t ByteCount;
715 1.1 ad u_int32_t Stable;
716 1.1 ad struct aac_sg_table SgMap; /* variable size */
717 1.12 gmcgarry } __packed;
718 1.1 ad
719 1.9 briggs struct aac_blockwrite64 {
720 1.9 briggs u_int32_t Command; /* not FSACommand! */
721 1.9 briggs u_int16_t ContainerId;
722 1.9 briggs u_int16_t SectorCount;
723 1.9 briggs u_int32_t BlockNumber;
724 1.9 briggs u_int16_t Pad;
725 1.9 briggs u_int16_t Flags;
726 1.9 briggs struct aac_sg_table64 SgMap64; /* variable size */
727 1.12 gmcgarry } __packed;
728 1.9 briggs
729 1.1 ad struct aac_blockwrite_response {
730 1.1 ad u_int32_t Status;
731 1.1 ad u_int32_t ByteCount;
732 1.1 ad u_int32_t Committed;
733 1.12 gmcgarry } __packed;
734 1.1 ad
735 1.9 briggs struct aac_raw_io {
736 1.9 briggs u_int64_t BlockNumber;
737 1.9 briggs u_int32_t ByteCount;
738 1.9 briggs u_int16_t ContainerId;
739 1.9 briggs u_int16_t Flags; /* 0: W, 1: R */
740 1.9 briggs u_int16_t BpTotal; /* reserved for FW use */
741 1.9 briggs u_int16_t BpComplete; /* reserved for FW use */
742 1.9 briggs struct aac_sg_tableraw SgMapRaw; /* variable size */
743 1.12 gmcgarry } __packed;
744 1.9 briggs
745 1.1 ad struct aac_close_command {
746 1.1 ad u_int32_t Command;
747 1.1 ad u_int32_t ContainerId;
748 1.12 gmcgarry } __packed;
749 1.1 ad
750 1.1 ad /*
751 1.9 briggs * SCSI Passthrough structures
752 1.9 briggs */
753 1.9 briggs struct aac_srb32 {
754 1.9 briggs u_int32_t function;
755 1.9 briggs u_int32_t bus;
756 1.9 briggs u_int32_t target;
757 1.9 briggs u_int32_t lun;
758 1.9 briggs u_int32_t timeout;
759 1.9 briggs u_int32_t flags;
760 1.9 briggs u_int32_t data_len;
761 1.9 briggs u_int32_t retry_limit;
762 1.9 briggs u_int32_t cdb_len;
763 1.9 briggs u_int8_t cdb[16];
764 1.9 briggs struct aac_sg_table sg_map32;
765 1.9 briggs };
766 1.9 briggs
767 1.9 briggs #define AAC_SRB_FUNC_EXECUTE_SCSI 0x00
768 1.9 briggs #define AAC_SRB_FUNC_CLAIM_DEVICE 0x01
769 1.9 briggs #define AAC_SRB_FUNC_IO_CONTROL 0x02
770 1.9 briggs #define AAC_SRB_FUNC_RECEIVE_EVENT 0x03
771 1.9 briggs #define AAC_SRB_FUNC_RELEASE_QUEUE 0x04
772 1.9 briggs #define AAC_SRB_FUNC_ATTACH_DEVICE 0x05
773 1.9 briggs #define AAC_SRB_FUNC_RELEASE_DEVICE 0x06
774 1.9 briggs #define AAC_SRB_FUNC_SHUTDOWN 0x07
775 1.9 briggs #define AAC_SRB_FUNC_FLUSH 0x08
776 1.9 briggs #define AAC_SRB_FUNC_ABORT_COMMAND 0x10
777 1.9 briggs #define AAC_SRB_FUNC_RELEASE_RECOVERY 0x11
778 1.9 briggs #define AAC_SRB_FUNC_RESET_BUS 0x12
779 1.9 briggs #define AAC_SRB_FUNC_RESET_DEVICE 0x13
780 1.9 briggs #define AAC_SRB_FUNC_TERMINATE_IO 0x14
781 1.9 briggs #define AAC_SRB_FUNC_FLUSH_QUEUE 0x15
782 1.9 briggs #define AAC_SRB_FUNC_REMOVE_DEVICE 0x16
783 1.9 briggs #define AAC_SRB_FUNC_DOMAIN_VALIDATION 0x17
784 1.9 briggs
785 1.9 briggs #define AAC_SRB_FLAGS_NO_DATA_XFER 0x0000
786 1.9 briggs #define AAC_SRB_FLAGS_DISABLE_DISCONNECT 0x0004
787 1.9 briggs #define AAC_SRB_FLAGS_DISABLE_SYNC_TRANSFER 0x0008
788 1.9 briggs #define AAC_SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x0010
789 1.9 briggs #define AAC_SRB_FLAGS_DISABLE_AUTOSENSE 0x0020
790 1.9 briggs #define AAC_SRB_FLAGS_DATA_IN 0x0040
791 1.9 briggs #define AAC_SRB_FLAGS_DATA_OUT 0x0080
792 1.9 briggs #define AAC_SRB_FLAGS_UNSPECIFIED_DIRECTION \
793 1.9 briggs (AAC_SRB_FLAGS_DATA_IN | AAC_SRB_FLAGS_DATA_OUT)
794 1.9 briggs
795 1.9 briggs #define AAC_HOST_SENSE_DATA_MAX 30
796 1.9 briggs
797 1.9 briggs struct aac_srb_response {
798 1.9 briggs u_int32_t fib_status;
799 1.9 briggs u_int32_t srb_status;
800 1.9 briggs u_int32_t scsi_status;
801 1.9 briggs u_int32_t data_len;
802 1.9 briggs u_int32_t sense_len;
803 1.9 briggs u_int8_t sense[AAC_HOST_SENSE_DATA_MAX];
804 1.9 briggs };
805 1.9 briggs
806 1.9 briggs /*
807 1.9 briggs * Status codes for SCSI passthrough commands. Since they are based on ASPI,
808 1.9 briggs * they also exactly match CAM status codes in both enumeration and meaning.
809 1.9 briggs * They seem to also be used as status codes for synchronous FIBs.
810 1.9 briggs */
811 1.9 briggs #define AAC_SRB_STS_PENDING 0x00
812 1.9 briggs #define AAC_SRB_STS_SUCCESS 0x01
813 1.9 briggs #define AAC_SRB_STS_ABORTED 0x02
814 1.9 briggs #define AAC_SRB_STS_ABORT_FAILED 0x03
815 1.9 briggs #define AAC_SRB_STS_ERROR 0x04
816 1.9 briggs #define AAC_SRB_STS_BUSY 0x05
817 1.9 briggs #define AAC_SRB_STS_INVALID_REQUEST 0x06
818 1.9 briggs #define AAC_SRB_STS_INVALID_PATH_ID 0x07
819 1.9 briggs #define AAC_SRB_STS_NO_DEVICE 0x08
820 1.9 briggs #define AAC_SRB_STS_TIMEOUT 0x09
821 1.9 briggs #define AAC_SRB_STS_SELECTION_TIMEOUT 0x0a
822 1.9 briggs #define AAC_SRB_STS_COMMAND_TIMEOUT 0x0b
823 1.9 briggs #define AAC_SRB_STS_MESSAGE_REJECTED 0x0d
824 1.9 briggs #define AAC_SRB_STS_BUS_RESET 0x0e
825 1.9 briggs #define AAC_SRB_STS_PARITY_ERROR 0x0f
826 1.9 briggs #define AAC_SRB_STS_REQUEST_SENSE_FAILED 0x10
827 1.9 briggs #define AAC_SRB_STS_NO_HBA 0x11
828 1.9 briggs #define AAC_SRB_STS_DATA_OVERRUN 0x12
829 1.9 briggs #define AAC_SRB_STS_UNEXPECTED_BUS_FREE 0x13
830 1.9 briggs #define AAC_SRB_STS_PHASE_SEQUENCE_FAILURE 0x14
831 1.9 briggs #define AAC_SRB_STS_BAD_SRB_BLOCK_LENGTH 0x15
832 1.9 briggs #define AAC_SRB_STS_REQUEST_FLUSHED 0x16
833 1.9 briggs #define AAC_SRB_STS_INVALID_LUN 0x20
834 1.9 briggs #define AAC_SRB_STS_INVALID_TARGET_ID 0x21
835 1.9 briggs #define AAC_SRB_STS_BAD_FUNCTION 0x22
836 1.9 briggs #define AAC_SRB_STS_ERROR_RECOVER 0x23
837 1.9 briggs
838 1.9 briggs /*
839 1.9 briggs * Register set for adapters based on the Falcon bridge and PPC core
840 1.9 briggs */
841 1.9 briggs
842 1.9 briggs #define AAC_FA_DOORBELL0_CLEAR 0x00
843 1.9 briggs #define AAC_FA_DOORBELL1_CLEAR 0x02
844 1.9 briggs #define AAC_FA_DOORBELL0 0x04
845 1.9 briggs #define AAC_FA_DOORBELL1 0x06
846 1.9 briggs #define AAC_FA_MASK0_CLEAR 0x08
847 1.9 briggs #define AAC_FA_MASK1_CLEAR 0x0a
848 1.9 briggs #define AAC_FA_MASK0 0x0c
849 1.9 briggs #define AAC_FA_MASK1 0x0e
850 1.9 briggs #define AAC_FA_MAILBOX 0x10
851 1.9 briggs #define AAC_FA_FWSTATUS 0x2c /* Mailbox 7 */
852 1.9 briggs #define AAC_FA_INTSRC 0x900
853 1.9 briggs
854 1.9 briggs #define AAC_FA_HACK(sc) (void)AAC_GETREG4(sc, AAC_FA_INTSRC)
855 1.9 briggs
856 1.9 briggs /*
857 1.1 ad * Register definitions for the Adaptec AAC-364 'Jalapeno I/II' adapters, based
858 1.1 ad * on the SA110 'StrongArm'.
859 1.1 ad */
860 1.1 ad
861 1.1 ad #define AAC_REGSIZE 0x100
862 1.1 ad
863 1.1 ad /* doorbell 0 (adapter->host) */
864 1.1 ad #define AAC_SA_DOORBELL0_CLEAR 0x98
865 1.1 ad #define AAC_SA_DOORBELL0_SET 0x9c
866 1.1 ad #define AAC_SA_DOORBELL0 0x9c
867 1.1 ad #define AAC_SA_MASK0_CLEAR 0xa0
868 1.1 ad #define AAC_SA_MASK0_SET 0xa4
869 1.1 ad
870 1.1 ad /* doorbell 1 (host->adapter) */
871 1.1 ad #define AAC_SA_DOORBELL1_CLEAR 0x9a
872 1.1 ad #define AAC_SA_DOORBELL1_SET 0x9e
873 1.1 ad #define AAC_SA_MASK1_CLEAR 0xa2
874 1.1 ad #define AAC_SA_MASK1_SET 0xa6
875 1.1 ad
876 1.1 ad /* mailbox (20 bytes) */
877 1.1 ad #define AAC_SA_MAILBOX 0xa8
878 1.1 ad #define AAC_SA_FWSTATUS 0xc4
879 1.1 ad
880 1.1 ad /*
881 1.1 ad * Register definitions for the Adaptec 'Pablano' adapters, based on the
882 1.1 ad * i960Rx, and other related adapters.
883 1.1 ad */
884 1.1 ad
885 1.1 ad #define AAC_RX_IDBR 0x20 /* inbound doorbell */
886 1.1 ad #define AAC_RX_IISR 0x24 /* inbound interrupt status */
887 1.1 ad #define AAC_RX_IIMR 0x28 /* inbound interrupt mask */
888 1.1 ad #define AAC_RX_ODBR 0x2c /* outbound doorbell */
889 1.1 ad #define AAC_RX_OISR 0x30 /* outbound interrupt status */
890 1.1 ad #define AAC_RX_OIMR 0x34 /* outbound interrupt mask */
891 1.9 briggs #define AAC_RX_IQUE 0x40 /* inbound queue */
892 1.9 briggs #define AAC_RX_OQUE 0x44 /* outbound queue */
893 1.1 ad
894 1.1 ad #define AAC_RX_MAILBOX 0x50 /* mailbox (20 bytes) */
895 1.1 ad #define AAC_RX_FWSTATUS 0x6c
896 1.1 ad
897 1.1 ad /*
898 1.9 briggs * Register definitions for the Adaptec 'Rocket' RAID-On-Chip adapters.
899 1.9 briggs * Unsurprisingly, it's quite similar to the i960!
900 1.9 briggs */
901 1.9 briggs
902 1.9 briggs #define AAC_RKT_IDBR 0x20 /* inbound doorbell register */
903 1.9 briggs #define AAC_RKT_IISR 0x24 /* inbound interrupt status register */
904 1.9 briggs #define AAC_RKT_IIMR 0x28 /* inbound interrupt mask register */
905 1.9 briggs #define AAC_RKT_ODBR 0x2c /* outbound doorbell register */
906 1.9 briggs #define AAC_RKT_OISR 0x30 /* outbound interrupt status register */
907 1.9 briggs #define AAC_RKT_OIMR 0x34 /* outbound interrupt mask register */
908 1.9 briggs #define AAC_RKT_IQUE 0x40 /* inbound queue */
909 1.9 briggs #define AAC_RKT_OQUE 0x44 /* outbound queue */
910 1.9 briggs
911 1.9 briggs #define AAC_RKT_MAILBOX 0x1000 /* mailbox */
912 1.9 briggs #define AAC_RKT_FWSTATUS 0x101c /* Firmware Status (mailbox 7) */
913 1.9 briggs
914 1.9 briggs /*
915 1.1 ad * Common bit definitions for the doorbell registers.
916 1.1 ad */
917 1.1 ad
918 1.1 ad /*
919 1.1 ad * Status bits in the doorbell registers.
920 1.1 ad */
921 1.1 ad #define AAC_DB_SYNC_COMMAND (1<<0) /* send/completed synchronous FIB */
922 1.1 ad #define AAC_DB_COMMAND_READY (1<<1) /* posted one or more commands */
923 1.1 ad #define AAC_DB_RESPONSE_READY (1<<2) /* one or more commands complete */
924 1.1 ad #define AAC_DB_COMMAND_NOT_FULL (1<<3) /* command queue not full */
925 1.1 ad #define AAC_DB_RESPONSE_NOT_FULL (1<<4) /* response queue not full */
926 1.1 ad
927 1.1 ad /*
928 1.1 ad * The adapter can request the host print a message by setting the
929 1.1 ad * DB_PRINTF flag in DOORBELL0. The driver responds by collecting the
930 1.3 perry * message from the printf buffer, clearing the DB_PRINTF flag in
931 1.1 ad * DOORBELL0 and setting it in DOORBELL1.
932 1.1 ad * (ODBR and IDBR respectively for the i960Rx adapters)
933 1.1 ad */
934 1.9 briggs #define AAC_DB_PRINTF (1<<5) /* adapter requests host printf */
935 1.9 briggs #define AAC_PRINTF_DONE (1<<5) /* host completed printf processing */
936 1.1 ad
937 1.1 ad /*
938 1.1 ad * Mask containing the interrupt bits we care about. We don't anticipate
939 1.1 ad * (or want) interrupts not in this mask.
940 1.1 ad */
941 1.1 ad #define AAC_DB_INTERRUPTS \
942 1.1 ad (AAC_DB_COMMAND_READY | AAC_DB_RESPONSE_READY | AAC_DB_PRINTF)
943 1.9 briggs #define AAC_DB_INT_NEW_COMM 0x08
944 1.1 ad
945 1.1 ad /*
946 1.1 ad * Queue names
947 1.1 ad *
948 1.1 ad * Note that we base these at 0 in order to use them as array indices. Adaptec
949 1.1 ad * used base 1 for some unknown reason, and sorted them in a different order.
950 1.1 ad */
951 1.1 ad #define AAC_HOST_NORM_CMD_QUEUE 0
952 1.1 ad #define AAC_HOST_HIGH_CMD_QUEUE 1
953 1.1 ad #define AAC_ADAP_NORM_CMD_QUEUE 2
954 1.1 ad #define AAC_ADAP_HIGH_CMD_QUEUE 3
955 1.1 ad #define AAC_HOST_NORM_RESP_QUEUE 4
956 1.1 ad #define AAC_HOST_HIGH_RESP_QUEUE 5
957 1.1 ad #define AAC_ADAP_NORM_RESP_QUEUE 6
958 1.1 ad #define AAC_ADAP_HIGH_RESP_QUEUE 7
959 1.1 ad
960 1.1 ad /*
961 1.1 ad * List structure used to chain FIBs (used by the adapter - we hang FIBs off
962 1.1 ad * our private command structure and don't touch these)
963 1.1 ad */
964 1.1 ad struct aac_fib_list_entry {
965 1.7 briggs u_int32_t Flink;
966 1.7 briggs u_int32_t Blink;
967 1.10 perry } __packed;
968 1.1 ad
969 1.1 ad /*
970 1.1 ad * FIB (FSA Interface Block?); this is the datastructure passed between the
971 1.1 ad * host and adapter.
972 1.1 ad */
973 1.1 ad struct aac_fib_header {
974 1.1 ad u_int32_t XferState;
975 1.1 ad u_int16_t Command;
976 1.1 ad u_int8_t StructType;
977 1.1 ad u_int8_t Flags;
978 1.1 ad u_int16_t Size;
979 1.1 ad u_int16_t SenderSize;
980 1.1 ad u_int32_t SenderFibAddress;
981 1.1 ad u_int32_t ReceiverFibAddress;
982 1.1 ad u_int32_t SenderData;
983 1.1 ad union {
984 1.1 ad struct {
985 1.1 ad u_int32_t ReceiverTimeStart;
986 1.1 ad u_int32_t ReceiverTimeDone;
987 1.1 ad } _s;
988 1.1 ad struct aac_fib_list_entry FibLinks;
989 1.1 ad } _u;
990 1.10 perry } __packed;
991 1.1 ad
992 1.1 ad #define AAC_FIB_DATASIZE (512 - sizeof(struct aac_fib_header))
993 1.1 ad
994 1.1 ad struct aac_fib {
995 1.1 ad struct aac_fib_header Header;
996 1.1 ad u_int8_t data[AAC_FIB_DATASIZE];
997 1.10 perry } __packed;
998 1.1 ad
999 1.1 ad /*
1000 1.1 ad * FIB commands
1001 1.1 ad */
1002 1.1 ad #define TestCommandResponse 1
1003 1.1 ad #define TestAdapterCommand 2
1004 1.1 ad
1005 1.1 ad /* Lowlevel and comm commands */
1006 1.1 ad #define LastTestCommand 100
1007 1.1 ad #define ReinitHostNormCommandQueue 101
1008 1.1 ad #define ReinitHostHighCommandQueue 102
1009 1.1 ad #define ReinitHostHighRespQueue 103
1010 1.1 ad #define ReinitHostNormRespQueue 104
1011 1.1 ad #define ReinitAdapNormCommandQueue 105
1012 1.1 ad #define ReinitAdapHighCommandQueue 107
1013 1.1 ad #define ReinitAdapHighRespQueue 108
1014 1.1 ad #define ReinitAdapNormRespQueue 109
1015 1.1 ad #define InterfaceShutdown 110
1016 1.1 ad #define DmaCommandFib 120
1017 1.1 ad #define StartProfile 121
1018 1.1 ad #define TermProfile 122
1019 1.1 ad #define SpeedTest 123
1020 1.1 ad #define TakeABreakPt 124
1021 1.1 ad #define RequestPerfData 125
1022 1.1 ad #define SetInterruptDefTimer 126
1023 1.1 ad #define SetInterruptDefCount 127
1024 1.1 ad #define GetInterruptDefStatus 128
1025 1.1 ad #define LastCommCommand 129
1026 1.1 ad
1027 1.1 ad /* filesystem commands */
1028 1.1 ad #define NuFileSystem 300
1029 1.1 ad #define UFS 301
1030 1.1 ad #define HostFileSystem 302
1031 1.1 ad #define LastFileSystemCommand 303
1032 1.1 ad
1033 1.1 ad /* Container Commands */
1034 1.1 ad #define ContainerCommand 500
1035 1.1 ad #define ContainerCommand64 501
1036 1.9 briggs #define RawIo 502
1037 1.1 ad
1038 1.1 ad /* Cluster Commands */
1039 1.1 ad #define ClusterCommand 550
1040 1.1 ad
1041 1.1 ad /* Scsi Port commands (scsi passthrough) */
1042 1.1 ad #define ScsiPortCommand 600
1043 1.9 briggs #define ScsiPortCommandU64 601
1044 1.9 briggs #define SataPortCommandU64 602
1045 1.9 briggs #define SasSmpPassThrough 603
1046 1.9 briggs #define SasRequestPhyInfo 612
1047 1.1 ad
1048 1.1 ad /* Misc house keeping and generic adapter initiated commands */
1049 1.1 ad #define AifRequest 700
1050 1.1 ad #define CheckRevision 701
1051 1.1 ad #define FsaHostShutdown 702
1052 1.1 ad #define RequestAdapterInfo 703
1053 1.1 ad #define IsAdapterPaused 704
1054 1.1 ad #define SendHostTime 705
1055 1.9 briggs #define RequestSupplementAdapterInfo 706 /* Supp. Info for set in UCC
1056 1.9 briggs * use only if supported
1057 1.9 briggs * (RequestAdapterInfo first) */
1058 1.9 briggs #define LastMiscCommand 707
1059 1.9 briggs
1060 1.9 briggs #define OnLineDiagnostic 800
1061 1.9 briggs #define FduAdapterTest 801
1062 1.9 briggs #define RequestCompatibilityId 802
1063 1.9 briggs #define AdapterEnvironmentInfo 803 /* temp. sensors */
1064 1.9 briggs
1065 1.9 briggs #define NvsramEventLog 900
1066 1.9 briggs #define ResetNvsramEventLogPointers 901
1067 1.9 briggs #define EnableEventLog 902
1068 1.9 briggs #define DisableEventLog 903
1069 1.9 briggs #define EncryptedKeyTransportFIB 904
1070 1.9 briggs #define KeyableFeaturesFIB 905
1071 1.1 ad
1072 1.1 ad /*
1073 1.1 ad * FIB types
1074 1.1 ad */
1075 1.1 ad #define AAC_FIBTYPE_TFIB 1
1076 1.1 ad #define AAC_FIBTYPE_TQE 2
1077 1.1 ad #define AAC_FIBTYPE_TCTPERF 3
1078 1.1 ad
1079 1.1 ad /*
1080 1.1 ad * FIB transfer state
1081 1.1 ad */
1082 1.1 ad #define AAC_FIBSTATE_HOSTOWNED (1<<0) /* owned by the host */
1083 1.1 ad #define AAC_FIBSTATE_ADAPTEROWNED (1<<1) /* owned by the adapter */
1084 1.1 ad #define AAC_FIBSTATE_INITIALISED (1<<2) /* initialised */
1085 1.1 ad #define AAC_FIBSTATE_EMPTY (1<<3) /* empty */
1086 1.1 ad #define AAC_FIBSTATE_FROMPOOL (1<<4) /* allocated from pool */
1087 1.1 ad #define AAC_FIBSTATE_FROMHOST (1<<5) /* sent from the host */
1088 1.1 ad #define AAC_FIBSTATE_FROMADAP (1<<6) /* sent from the adapter */
1089 1.1 ad #define AAC_FIBSTATE_REXPECTED (1<<7) /* response is expected */
1090 1.1 ad #define AAC_FIBSTATE_RNOTEXPECTED (1<<8) /* response is not expected */
1091 1.1 ad #define AAC_FIBSTATE_DONEADAP (1<<9) /* processed by the adapter */
1092 1.1 ad #define AAC_FIBSTATE_DONEHOST (1<<10) /* processed by the host */
1093 1.1 ad #define AAC_FIBSTATE_HIGH (1<<11) /* high priority */
1094 1.1 ad #define AAC_FIBSTATE_NORM (1<<12) /* normal priority */
1095 1.1 ad #define AAC_FIBSTATE_ASYNC (1<<13)
1096 1.1 ad #define AAC_FIBSTATE_ASYNCIO (1<<13) /* to be removed */
1097 1.1 ad #define AAC_FIBSTATE_PAGEFILEIO (1<<14) /* to be removed */
1098 1.1 ad #define AAC_FIBSTATE_SHUTDOWN (1<<15)
1099 1.1 ad #define AAC_FIBSTATE_LAZYWRITE (1<<16) /* to be removed */
1100 1.1 ad #define AAC_FIBSTATE_ADAPMICROFIB (1<<17)
1101 1.1 ad #define AAC_FIBSTATE_BIOSFIB (1<<18)
1102 1.1 ad #define AAC_FIBSTATE_FAST_RESPONSE (1<<19) /* fast response capable */
1103 1.1 ad #define AAC_FIBSTATE_APIFIB (1<<20)
1104 1.1 ad
1105 1.1 ad /*
1106 1.1 ad * FIB error values
1107 1.1 ad */
1108 1.1 ad #define AAC_ERROR_NORMAL 0x00
1109 1.1 ad #define AAC_ERROR_PENDING 0x01
1110 1.1 ad #define AAC_ERROR_FATAL 0x02
1111 1.1 ad #define AAC_ERROR_INVALID_QUEUE 0x03
1112 1.1 ad #define AAC_ERROR_NOENTRIES 0x04
1113 1.1 ad #define AAC_ERROR_SENDFAILED 0x05
1114 1.1 ad #define AAC_ERROR_INVALID_QUEUE_PRIORITY 0x06
1115 1.1 ad #define AAC_ERROR_FIB_ALLOCATION_FAILED 0x07
1116 1.1 ad #define AAC_ERROR_FIB_DEALLOCATION_FAILED 0x08
1117 1.1 ad
1118 1.1 ad /*
1119 1.1 ad * Adapter Status Register
1120 1.1 ad *
1121 1.1 ad * Phase Staus mailbox is 32bits:
1122 1.1 ad * <31:16> = Phase Status
1123 1.1 ad * <15:0> = Phase
1124 1.1 ad *
1125 1.1 ad * The adapter reports its present state through the phase. Only
1126 1.1 ad * a single phase should be ever be set. Each phase can have multiple
1127 1.1 ad * phase status bits to provide more detailed information about the
1128 1.1 ad * state of the adapter.
1129 1.1 ad */
1130 1.1 ad #define AAC_SELF_TEST_FAILED 0x00000004
1131 1.9 briggs #define AAC_MONITOR_PANIC 0x00000020
1132 1.1 ad #define AAC_UP_AND_RUNNING 0x00000080
1133 1.1 ad #define AAC_KERNEL_PANIC 0x00000100
1134 1.1 ad
1135 1.6 briggs /*
1136 1.6 briggs * Data types relating to control and monitoring of the NVRAM/WriteCache
1137 1.6 briggs * subsystem.
1138 1.6 briggs */
1139 1.6 briggs
1140 1.6 briggs #define AAC_NFILESYS 24 /* maximum number of filesystems */
1141 1.6 briggs
1142 1.6 briggs /*
1143 1.6 briggs * NVRAM/Write Cache subsystem states
1144 1.6 briggs */
1145 1.6 briggs typedef enum {
1146 1.6 briggs NVSTATUS_DISABLED = 0, /* present, clean, not being used */
1147 1.6 briggs NVSTATUS_ENABLED, /* present, possibly dirty, ready for use */
1148 1.6 briggs NVSTATUS_ERROR, /* present, dirty, contains dirty data */
1149 1.6 briggs NVSTATUS_BATTERY, /* present, bad or low battery, may contain
1150 1.6 briggs * dirty data */
1151 1.6 briggs NVSTATUS_UNKNOWN /* for bad/missing device */
1152 1.6 briggs } AAC_NVSTATUS;
1153 1.6 briggs
1154 1.6 briggs /*
1155 1.6 briggs * NVRAM/Write Cache subsystem battery component states
1156 1.6 briggs *
1157 1.6 briggs */
1158 1.6 briggs typedef enum {
1159 1.6 briggs NVBATTSTATUS_NONE = 0, /* battery has no power or is not present */
1160 1.6 briggs NVBATTSTATUS_LOW, /* battery is low on power */
1161 1.6 briggs NVBATTSTATUS_OK, /* battery is okay - normal operation possible
1162 1.6 briggs * only in this state */
1163 1.6 briggs NVBATTSTATUS_RECONDITIONING /* no battery present - reconditioning
1164 1.6 briggs * in process */
1165 1.6 briggs } AAC_NVBATTSTATUS;
1166 1.6 briggs
1167 1.6 briggs /*
1168 1.6 briggs * Battery transition type
1169 1.6 briggs */
1170 1.6 briggs typedef enum {
1171 1.6 briggs NVBATT_TRANSITION_NONE = 0, /* battery now has no power or is not
1172 1.6 briggs * present */
1173 1.6 briggs NVBATT_TRANSITION_LOW, /* battery is now low on power */
1174 1.6 briggs NVBATT_TRANSITION_OK /* battery is now okay - normal
1175 1.6 briggs * operation possible only in this
1176 1.6 briggs * state */
1177 1.6 briggs } AAC_NVBATT_TRANSITION;
1178 1.6 briggs
1179 1.6 briggs /*
1180 1.6 briggs * NVRAM Info structure returned for NVRAM_GetInfo call
1181 1.6 briggs */
1182 1.6 briggs struct aac_nvramdevinfo {
1183 1.6 briggs u_int32_t NV_Enabled; /* write caching enabled */
1184 1.6 briggs u_int32_t NV_Error; /* device in error state */
1185 1.6 briggs u_int32_t NV_NDirty; /* count of dirty NVRAM buffers */
1186 1.6 briggs u_int32_t NV_NActive; /* count of NVRAM buffers being
1187 1.6 briggs * written */
1188 1.12 gmcgarry } __packed;
1189 1.6 briggs
1190 1.6 briggs struct aac_nvraminfo {
1191 1.6 briggs AAC_NVSTATUS NV_Status; /* nvram subsystem status */
1192 1.6 briggs AAC_NVBATTSTATUS NV_BattStatus; /* battery status */
1193 1.6 briggs u_int32_t NV_Size; /* size of WriteCache NVRAM in
1194 1.6 briggs * bytes */
1195 1.6 briggs u_int32_t NV_BufSize; /* size of NVRAM buffers in
1196 1.6 briggs * bytes */
1197 1.6 briggs u_int32_t NV_NBufs; /* number of NVRAM buffers */
1198 1.6 briggs u_int32_t NV_NDirty; /* Num dirty NVRAM buffers */
1199 1.6 briggs u_int32_t NV_NClean; /* Num clean NVRAM buffers */
1200 1.6 briggs u_int32_t NV_NActive; /* Num NVRAM buffers being
1201 1.6 briggs * written */
1202 1.6 briggs u_int32_t NV_NBrokered; /* Num brokered NVRAM buffers */
1203 1.6 briggs struct aac_nvramdevinfo NV_DevInfo[AAC_NFILESYS]; /* per device
1204 1.6 briggs * info */
1205 1.6 briggs u_int32_t NV_BattNeedsReconditioning; /* boolean */
1206 1.6 briggs u_int32_t NV_TotalSize; /* size of all non-volatile
1207 1.6 briggs * memories in bytes */
1208 1.12 gmcgarry } __packed;
1209 1.6 briggs
1210 1.6 briggs /*
1211 1.6 briggs * Data types relating to adapter-initiated FIBs
1212 1.6 briggs *
1213 1.6 briggs * Based on types and structures in <aifstruc.h>
1214 1.6 briggs */
1215 1.6 briggs
1216 1.6 briggs /*
1217 1.6 briggs * Progress Reports
1218 1.6 briggs */
1219 1.6 briggs typedef enum {
1220 1.6 briggs AifJobStsSuccess = 1,
1221 1.6 briggs AifJobStsFinished,
1222 1.6 briggs AifJobStsAborted,
1223 1.6 briggs AifJobStsFailed,
1224 1.6 briggs AifJobStsLastReportMarker = 100, /* All prior mean last report */
1225 1.6 briggs AifJobStsSuspended,
1226 1.6 briggs AifJobStsRunning
1227 1.6 briggs } AAC_AifJobStatus;
1228 1.6 briggs
1229 1.6 briggs typedef enum {
1230 1.6 briggs AifJobScsiMin = 1, /* Minimum value for Scsi operation */
1231 1.6 briggs AifJobScsiZero, /* SCSI device clear operation */
1232 1.6 briggs AifJobScsiVerify, /* SCSI device Verify operation NO
1233 1.6 briggs * REPAIR */
1234 1.6 briggs AifJobScsiExercise, /* SCSI device Exercise operation */
1235 1.6 briggs AifJobScsiVerifyRepair, /* SCSI device Verify operation WITH
1236 1.6 briggs * repair */
1237 1.6 briggs AifJobScsiWritePattern, /* write pattern */
1238 1.6 briggs AifJobScsiMax = 99, /* Max Scsi value */
1239 1.6 briggs AifJobCtrMin, /* Min Ctr op value */
1240 1.6 briggs AifJobCtrZero, /* Container clear operation */
1241 1.6 briggs AifJobCtrCopy, /* Container copy operation */
1242 1.6 briggs AifJobCtrCreateMirror, /* Container Create Mirror operation */
1243 1.6 briggs AifJobCtrMergeMirror, /* Container Merge Mirror operation */
1244 1.6 briggs AifJobCtrScrubMirror, /* Container Scrub Mirror operation */
1245 1.6 briggs AifJobCtrRebuildRaid5, /* Container Rebuild Raid5 operation */
1246 1.6 briggs AifJobCtrScrubRaid5, /* Container Scrub Raid5 operation */
1247 1.6 briggs AifJobCtrMorph, /* Container morph operation */
1248 1.6 briggs AifJobCtrPartCopy, /* Container Partition copy operation */
1249 1.6 briggs AifJobCtrRebuildMirror, /* Container Rebuild Mirror operation */
1250 1.6 briggs AifJobCtrCrazyCache, /* crazy cache */
1251 1.6 briggs AifJobCtrCopyback, /* Container Copyback operation */
1252 1.6 briggs AifJobCtrCompactRaid5D, /* Container Compaction operation */
1253 1.6 briggs AifJobCtrExpandRaid5D, /* Container Expansion operation */
1254 1.6 briggs AifJobCtrRebuildRaid6, /* Container Rebuild Raid6 operation */
1255 1.6 briggs AifJobCtrScrubRaid6, /* Container Scrub Raid6 operation */
1256 1.6 briggs AifJobCtrSSBackup, /* Container snapshot backup task */
1257 1.6 briggs AifJobCtrMax = 199, /* Max Ctr type operation */
1258 1.6 briggs AifJobFsMin, /* Min Fs type operation */
1259 1.6 briggs AifJobFsCreate, /* File System Create operation */
1260 1.6 briggs AifJobFsVerify, /* File System Verify operation */
1261 1.6 briggs AifJobFsExtend, /* File System Extend operation */
1262 1.6 briggs AifJobFsMax = 299, /* Max Fs type operation */
1263 1.6 briggs AifJobApiFormatNTFS, /* Format a drive to NTFS */
1264 1.6 briggs AifJobApiFormatFAT, /* Format a drive to FAT */
1265 1.6 briggs AifJobApiUpdateSnapshot, /* update the read/write half of a
1266 1.6 briggs * snapshot */
1267 1.6 briggs AifJobApiFormatFAT32, /* Format a drive to FAT32 */
1268 1.6 briggs AifJobApiMax = 399, /* Max API type operation */
1269 1.6 briggs AifJobCtlContinuousCtrVerify, /* Adapter operation */
1270 1.6 briggs AifJobCtlMax = 499 /* Max Adapter type operation */
1271 1.6 briggs } AAC_AifJobType;
1272 1.6 briggs
1273 1.6 briggs struct aac_AifContainers {
1274 1.6 briggs u_int32_t src; /* from/master */
1275 1.6 briggs u_int32_t dst; /* to/slave */
1276 1.12 gmcgarry } __packed;
1277 1.6 briggs
1278 1.6 briggs union aac_AifJobClient {
1279 1.6 briggs struct aac_AifContainers container; /* For Container and
1280 1.6 briggs * filesystem progress
1281 1.6 briggs * ops; */
1282 1.6 briggs int32_t scsi_dh; /* For SCSI progress
1283 1.6 briggs * ops */
1284 1.6 briggs };
1285 1.6 briggs
1286 1.6 briggs struct aac_AifJobDesc {
1287 1.6 briggs u_int32_t jobID; /* DO NOT FILL IN! Will be
1288 1.6 briggs * filled in by AIF */
1289 1.6 briggs AAC_AifJobType type; /* Operation that is being
1290 1.6 briggs * performed */
1291 1.6 briggs union aac_AifJobClient client; /* Details */
1292 1.12 gmcgarry } __packed;
1293 1.6 briggs
1294 1.6 briggs struct aac_AifJobProgressReport {
1295 1.6 briggs struct aac_AifJobDesc jd;
1296 1.6 briggs AAC_AifJobStatus status;
1297 1.6 briggs u_int32_t finalTick;
1298 1.6 briggs u_int32_t currentTick;
1299 1.6 briggs u_int32_t jobSpecificData1;
1300 1.6 briggs u_int32_t jobSpecificData2;
1301 1.12 gmcgarry } __packed;
1302 1.6 briggs
1303 1.6 briggs /*
1304 1.6 briggs * Event Notification
1305 1.6 briggs */
1306 1.6 briggs typedef enum {
1307 1.6 briggs /* General application notifies start here */
1308 1.6 briggs AifEnGeneric = 1, /* Generic notification */
1309 1.6 briggs AifEnTaskComplete, /* Task has completed */
1310 1.6 briggs AifEnConfigChange, /* Adapter config change occurred */
1311 1.6 briggs AifEnContainerChange, /* Adapter specific container
1312 1.6 briggs * configuration change */
1313 1.6 briggs AifEnDeviceFailure, /* SCSI device failed */
1314 1.6 briggs AifEnMirrorFailover, /* Mirror failover started */
1315 1.6 briggs AifEnContainerEvent, /* Significant container event */
1316 1.6 briggs AifEnFileSystemChange, /* File system changed */
1317 1.6 briggs AifEnConfigPause, /* Container pause event */
1318 1.6 briggs AifEnConfigResume, /* Container resume event */
1319 1.6 briggs AifEnFailoverChange, /* Failover space assignment changed */
1320 1.6 briggs AifEnRAID5RebuildDone, /* RAID5 rebuild finished */
1321 1.6 briggs AifEnEnclosureManagement, /* Enclosure management event */
1322 1.6 briggs AifEnBatteryEvent, /* Significant NV battery event */
1323 1.6 briggs AifEnAddContainer, /* A new container was created. */
1324 1.6 briggs AifEnDeleteContainer, /* A container was deleted. */
1325 1.6 briggs AifEnSMARTEvent, /* SMART Event */
1326 1.6 briggs AifEnBatteryNeedsRecond, /* The battery needs reconditioning */
1327 1.6 briggs AifEnClusterEvent, /* Some cluster event */
1328 1.6 briggs AifEnDiskSetEvent, /* A disk set event occured. */
1329 1.6 briggs AifDriverNotifyStart=199, /* Notifies for host driver go here */
1330 1.6 briggs /* Host driver notifications start here */
1331 1.6 briggs AifDenMorphComplete, /* A morph operation completed */
1332 1.6 briggs AifDenVolumeExtendComplete /* Volume expand operation completed */
1333 1.6 briggs } AAC_AifEventNotifyType;
1334 1.6 briggs
1335 1.6 briggs struct aac_AifEnsGeneric {
1336 1.6 briggs char text[132]; /* Generic text */
1337 1.12 gmcgarry } __packed;
1338 1.6 briggs
1339 1.6 briggs struct aac_AifEnsDeviceFailure {
1340 1.6 briggs u_int32_t deviceHandle; /* SCSI device handle */
1341 1.12 gmcgarry } __packed;
1342 1.6 briggs
1343 1.6 briggs struct aac_AifEnsMirrorFailover {
1344 1.6 briggs u_int32_t container; /* Container with failed element */
1345 1.6 briggs u_int32_t failedSlice; /* Old slice which failed */
1346 1.6 briggs u_int32_t creatingSlice; /* New slice used for auto-create */
1347 1.12 gmcgarry } __packed;
1348 1.6 briggs
1349 1.6 briggs struct aac_AifEnsContainerChange {
1350 1.6 briggs u_int32_t container[2]; /* container that changed, -1 if no
1351 1.6 briggs * container */
1352 1.12 gmcgarry } __packed;
1353 1.6 briggs
1354 1.6 briggs struct aac_AifEnsContainerEvent {
1355 1.6 briggs u_int32_t container; /* container number */
1356 1.6 briggs u_int32_t eventType; /* event type */
1357 1.12 gmcgarry } __packed;
1358 1.6 briggs
1359 1.6 briggs struct aac_AifEnsEnclosureEvent {
1360 1.6 briggs u_int32_t empID; /* enclosure management proc number */
1361 1.6 briggs u_int32_t unitID; /* unitId, fan id, power supply id,
1362 1.6 briggs * slot id, tempsensor id. */
1363 1.6 briggs u_int32_t eventType; /* event type */
1364 1.12 gmcgarry } __packed;
1365 1.6 briggs
1366 1.6 briggs struct aac_AifEnsBatteryEvent {
1367 1.6 briggs AAC_NVBATT_TRANSITION transition_type; /* eg from low to ok */
1368 1.6 briggs AAC_NVBATTSTATUS current_state; /* current batt state */
1369 1.6 briggs AAC_NVBATTSTATUS prior_state; /* prev batt state */
1370 1.12 gmcgarry } __packed;
1371 1.6 briggs
1372 1.6 briggs struct aac_AifEnsDiskSetEvent {
1373 1.6 briggs u_int32_t eventType;
1374 1.6 briggs u_int64_t DsNum;
1375 1.6 briggs u_int64_t CreatorId;
1376 1.12 gmcgarry } __packed;
1377 1.6 briggs
1378 1.6 briggs typedef enum {
1379 1.6 briggs CLUSTER_NULL_EVENT = 0,
1380 1.6 briggs CLUSTER_PARTNER_NAME_EVENT, /* change in partner hostname or
1381 1.6 briggs * adaptername from NULL to non-NULL */
1382 1.6 briggs /* (partner's agent may be up) */
1383 1.6 briggs CLUSTER_PARTNER_NULL_NAME_EVENT /* change in partner hostname or
1384 1.6 briggs * adaptername from non-null to NULL */
1385 1.6 briggs /* (partner has rebooted) */
1386 1.6 briggs } AAC_ClusterAifEvent;
1387 1.6 briggs
1388 1.6 briggs struct aac_AifEnsClusterEvent {
1389 1.6 briggs AAC_ClusterAifEvent eventType;
1390 1.12 gmcgarry } __packed;
1391 1.6 briggs
1392 1.6 briggs struct aac_AifEventNotify {
1393 1.6 briggs AAC_AifEventNotifyType type;
1394 1.6 briggs union {
1395 1.6 briggs struct aac_AifEnsGeneric EG;
1396 1.6 briggs struct aac_AifEnsDeviceFailure EDF;
1397 1.6 briggs struct aac_AifEnsMirrorFailover EMF;
1398 1.6 briggs struct aac_AifEnsContainerChange ECC;
1399 1.6 briggs struct aac_AifEnsContainerEvent ECE;
1400 1.6 briggs struct aac_AifEnsEnclosureEvent EEE;
1401 1.6 briggs struct aac_AifEnsBatteryEvent EBE;
1402 1.6 briggs struct aac_AifEnsDiskSetEvent EDS;
1403 1.6 briggs /* struct aac_AifEnsSMARTEvent ES;*/
1404 1.6 briggs struct aac_AifEnsClusterEvent ECLE;
1405 1.6 briggs } data;
1406 1.12 gmcgarry } __packed;
1407 1.6 briggs
1408 1.6 briggs /*
1409 1.6 briggs * Adapter Initiated FIB command structures. Start with the adapter
1410 1.6 briggs * initiated FIBs that really come from the adapter, and get responded
1411 1.6 briggs * to by the host.
1412 1.6 briggs */
1413 1.6 briggs #define AAC_AIF_REPORT_MAX_SIZE 64
1414 1.6 briggs
1415 1.6 briggs typedef enum {
1416 1.6 briggs AifCmdEventNotify = 1, /* Notify of event */
1417 1.6 briggs AifCmdJobProgress, /* Progress report */
1418 1.6 briggs AifCmdAPIReport, /* Report from other user of API */
1419 1.6 briggs AifCmdDriverNotify, /* Notify host driver of event */
1420 1.6 briggs AifReqJobList = 100, /* Gets back complete job list */
1421 1.6 briggs AifReqJobsForCtr, /* Gets back jobs for specific container */
1422 1.6 briggs AifReqJobsForScsi, /* Gets back jobs for specific SCSI device */
1423 1.6 briggs AifReqJobReport, /* Gets back a specific job report or list */
1424 1.6 briggs AifReqTerminateJob, /* Terminates job */
1425 1.6 briggs AifReqSuspendJob, /* Suspends a job */
1426 1.6 briggs AifReqResumeJob, /* Resumes a job */
1427 1.6 briggs AifReqSendAPIReport, /* API generic report requests */
1428 1.6 briggs AifReqAPIJobStart, /* Start a job from the API */
1429 1.6 briggs AifReqAPIJobUpdate, /* Update a job report from the API */
1430 1.6 briggs AifReqAPIJobFinish /* Finish a job from the API */
1431 1.6 briggs } AAC_AifCommand;
1432 1.6 briggs
1433 1.6 briggs struct aac_aif_command {
1434 1.6 briggs AAC_AifCommand command; /* Tell host what type of
1435 1.6 briggs * notify this is */
1436 1.6 briggs u_int32_t seqNumber; /* To allow ordering of
1437 1.6 briggs * reports (if necessary) */
1438 1.6 briggs union {
1439 1.6 briggs struct aac_AifEventNotify EN; /* Event notify */
1440 1.6 briggs struct aac_AifJobProgressReport PR[1]; /* Progress report */
1441 1.6 briggs u_int8_t AR[AAC_AIF_REPORT_MAX_SIZE];
1442 1.6 briggs u_int8_t data[AAC_FIB_DATASIZE - 8];
1443 1.6 briggs } data;
1444 1.12 gmcgarry } __packed;
1445 1.6 briggs
1446 1.1 ad #endif /* !_PCI_AACREG_H_ */
1447