1 /* $NetBSD: aacreg.h,v 1.12 2008/09/08 23:36:54 gmcgarry Exp $ */
4 * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
7 * This code is derived from software contributed to The NetBSD Foundation
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
33 * Copyright (c) 2000 Michael Smith
34 * Copyright (c) 2000-2001 Scott Long
35 * Copyright (c) 2000 BSDi
36 * Copyright (c) 2000 Niklas Hallqvist
37 * All rights reserved.
39 * Redistribution and use in source and binary forms, with or without
40 * modification, are permitted provided that the following conditions
42 * 1. Redistributions of source code must retain the above copyright
43 * notice, this list of conditions and the following disclaimer.
44 * 2. Redistributions in binary form must reproduce the above copyright
45 * notice, this list of conditions and the following disclaimer in the
46 * documentation and/or other materials provided with the distribution.
48 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
49 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
51 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
52 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
53 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
54 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
56 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
60 * from FreeBSD: aacreg.h,v 1.1 2000/09/13 03:20:34 msmith Exp
61 * via OpenBSD: aacreg.h,v 1.3 2001/06/12 15:40:29 niklas Exp
62 * incorporating some of: aacreg.h,v 1.23 2005/10/14 16:22:45 scottl Exp
66 * Data structures defining the interface between the driver and the Adaptec
67 * 'FSA' adapters. Note that many field names and comments here are taken
68 * verbatim from the Adaptec driver source in order to make comparing the
69 * two slightly easier.
72 #ifndef _PCI_AACREG_H_
73 #define _PCI_AACREG_H_
76 * Misc. magic numbers.
78 #define AAC_MAX_CONTAINERS 64
79 #define AAC_BLOCK_SIZE 512
82 * Communications interface.
84 * Where datastructure layouts are closely parallel to the Adaptec sample code,
85 * retain their naming conventions (for now) to aid in cross-referencing.
89 * We establish 4 command queues and matching response queues. Queues must
90 * be 16-byte aligned, and are sized as follows:
92 #define AAC_HOST_NORM_CMD_ENTRIES 8 /* cmd adapter->host, normal pri */
93 #define AAC_HOST_HIGH_CMD_ENTRIES 4 /* cmd adapter->host, high pri */
94 #define AAC_ADAP_NORM_CMD_ENTRIES 512 /* cmd host->adapter, normal pri */
95 #define AAC_ADAP_HIGH_CMD_ENTRIES 4 /* cmd host->adapter, high pri */
96 #define AAC_HOST_NORM_RESP_ENTRIES 512 /* resp, adapter->host, normal pri */
97 #define AAC_HOST_HIGH_RESP_ENTRIES 4 /* resp, adapter->host, high pri */
98 #define AAC_ADAP_NORM_RESP_ENTRIES 8 /* resp, host->adapter, normal pri */
99 #define AAC_ADAP_HIGH_RESP_ENTRIES 4 /* resp, host->adapter, high pri */
101 #define AAC_TOTALQ_LENGTH \
102 (AAC_HOST_HIGH_CMD_ENTRIES + AAC_HOST_NORM_CMD_ENTRIES + \
103 AAC_ADAP_HIGH_CMD_ENTRIES + AAC_ADAP_NORM_CMD_ENTRIES + \
104 AAC_HOST_HIGH_RESP_ENTRIES + AAC_HOST_NORM_RESP_ENTRIES + \
105 AAC_ADAP_HIGH_RESP_ENTRIES + AAC_ADAP_NORM_RESP_ENTRIES)
107 #define AAC_QUEUE_COUNT 8
108 #define AAC_QUEUE_ALIGN 16
110 struct aac_queue_entry
{
111 u_int32_t aq_fib_size
; /* FIB size in bytes */
112 u_int32_t aq_fib_addr
; /* receiver-space address of the FIB */
115 #define AAC_PRODUCER_INDEX 0
116 #define AAC_CONSUMER_INDEX 1
119 * Table of queue indices and queues used to communicate with the
120 * controller. This structure must be aligned to AAC_QUEUE_ALIGN
122 struct aac_queue_table
{
123 /* queue consumer/producer indexes (layout mandated by adapter) */
124 u_int32_t qt_qindex
[AAC_QUEUE_COUNT
][2];
126 /* queue entry structures (layout mandated by adapter) */
127 struct aac_queue_entry qt_HostNormCmdQueue
[AAC_HOST_NORM_CMD_ENTRIES
];
128 struct aac_queue_entry qt_HostHighCmdQueue
[AAC_HOST_HIGH_CMD_ENTRIES
];
129 struct aac_queue_entry qt_AdapNormCmdQueue
[AAC_ADAP_NORM_CMD_ENTRIES
];
130 struct aac_queue_entry qt_AdapHighCmdQueue
[AAC_ADAP_HIGH_CMD_ENTRIES
];
131 struct aac_queue_entry
132 qt_HostNormRespQueue
[AAC_HOST_NORM_RESP_ENTRIES
];
133 struct aac_queue_entry
134 qt_HostHighRespQueue
[AAC_HOST_HIGH_RESP_ENTRIES
];
135 struct aac_queue_entry
136 qt_AdapNormRespQueue
[AAC_ADAP_NORM_RESP_ENTRIES
];
137 struct aac_queue_entry
138 qt_AdapHighRespQueue
[AAC_ADAP_HIGH_RESP_ENTRIES
];
142 * Adapter Init Structure: this is passed to the adapter with the
143 * AAC_MONKER_INITSTRUCT command to point it at our control structures.
145 struct aac_adapter_init
{
146 u_int32_t InitStructRevision
;
147 u_int32_t MiniPortRevision
;
148 u_int32_t FilesystemRevision
;
149 u_int32_t CommHeaderAddress
;
150 u_int32_t FastIoCommAreaAddress
;
151 u_int32_t AdapterFibsPhysicalAddress
;
152 u_int32_t AdapterFibsVirtualAddress
;
153 u_int32_t AdapterFibsSize
;
154 u_int32_t AdapterFibAlign
;
155 u_int32_t PrintfBufferAddress
;
156 u_int32_t PrintfBufferSize
;
157 u_int32_t HostPhysMemPages
;
158 u_int32_t HostElapsedSeconds
;
159 /* ADAPTER_INIT_STRUCT_REVISION_4 begins here */
160 u_int32_t InitFlags
; /* flags for supported features */
161 u_int32_t MaxIoCommands
; /* max outstanding commands */
162 u_int32_t MaxIoSize
; /* largest I/O command */
163 u_int32_t MaxFibSize
; /* largest FIB to adapter */
166 #define AAC_INIT_STRUCT_REVISION 3
167 #define AAC_INIT_STRUCT_REVISION_4 4
168 #define AAC_INIT_STRUCT_MINIPORT_REVISION 1
169 #define AAC_INITFLAGS_NEW_COMM_SUPPORTED 1
170 #define AAC_PAGE_SIZE 4096 /* Used to set HostPhysMemPages */
187 #define CT_PASSTHRU 8
189 #define CT_RAID10 10 /* stripe of mirror */
190 #define CT_RAID00 11 /* stripe of stripe */
191 #define CT_VOLUME_OF_MIRRORS 12 /* volume of mirror */
192 #define CT_PSEUDO_RAID3 13 /* really raid4 */
193 #define CT_RAID50 14 /* stripe of raid5 */
194 #define CT_RAID5D 15 /* raid5 distributed hot-sparing */
195 #define CT_RAID5D0 16
196 #define CT_RAID1E 17 /* extended raid1 mirroring */
201 * Host-addressable object types
203 #define FT_REG 1 /* regular file */
204 #define FT_DIR 2 /* directory */
205 #define FT_BLK 3 /* "block" device - reserved */
206 #define FT_CHR 4 /* "character special" device - reserved */
207 #define FT_LNK 5 /* symbolic link */
208 #define FT_SOCK 6 /* socket */
209 #define FT_FIFO 7 /* fifo */
210 #define FT_FILESYS 8 /* ADAPTEC's "FSA"(tm) filesystem */
211 #define FT_DRIVE 9 /* phys disk - addressable in scsi by bus/target/lun */
212 #define FT_SLICE 10 /* virtual disk - raw volume - slice */
213 #define FT_PARTITION 11 /* FSA part, inside slice, container building block */
214 #define FT_VOLUME 12 /* Container - Volume Set */
215 #define FT_STRIPE 13 /* Container - Stripe Set */
216 #define FT_MIRROR 14 /* Container - Mirror Set */
217 #define FT_RAID5 15 /* Container - Raid 5 Set */
218 #define FT_DATABASE 16 /* Storage object with "foreign" content manager */
221 * Host-side scatter/gather list for raw commands.
223 struct aac_sg_entryraw
{
224 u_int32_t Next
; /* reserved for FW use */
225 u_int32_t Prev
; /* reserved for FW use */
227 u_int32_t SgByteCount
;
228 u_int32_t Flags
; /* reserved for FW use */
231 struct aac_sg_tableraw
{
233 struct aac_sg_entryraw SgEntryRaw
[0];
237 * Host-side scatter/gather list for 32-bit commands.
239 struct aac_sg_entry
{
241 u_int32_t SgByteCount
;
244 struct aac_sg_table
{
246 struct aac_sg_entry SgEntry
[0];
250 * Host-side scatter/gather list for 64-bit commands.
252 struct aac_sg_entry64
{
254 u_int32_t SgByteCount
;
257 struct aac_sg_table64
{
259 struct aac_sg_entry64 SgEntry64
[0];
263 * Container creation data
265 struct aac_container_creation
{
266 u_int8_t ViaBuildNumber
;
267 u_int8_t MicroSecond
;
268 u_int8_t Via
; /* 1 = FSU, 2 = API, etc. */
269 u_int8_t YearsSince1900
;
270 u_int32_t Month
:4; /* 1-12 */
271 u_int32_t Day
:6; /* 1-32 */
272 u_int32_t Hour
:6; /* 0-23 */
273 u_int32_t Minute
:6; /* 0-59 */
274 u_int32_t Second
:6; /* 0-59 */
275 u_int64_t ViaAdapterSerialNumber
;
300 u_int32_t buildNumber
;
304 * Adapter Information
311 #define CPU_POWERPC 5
314 #define CPU_I960_RX 8
321 #define CPUARM_SA110 5
323 #define CPUPPC_603e 7
326 #define CPU_XSCALE_80321 10
327 #define CPU_MIPS_4KC 11
328 #define CPU_MIPS_5KC 12
329 #define CPUSUBTYPE__last 13
333 #define PLAT_CYCLONE 3
334 #define PLAT_CYCLONE_HD 4
335 #define PLAT_BATBOARD 5
336 #define PLAT_BATBOARD_HD 6
339 #define PLAT_ANAHEIM 9
340 #define PLAT_JALAPENO 10
341 #define PLAT_QUEENS 11
342 #define PLAT_JALAPENO_DELL 12
343 #define PLAT_POBLANO 13
344 #define PLAT_POBLANO_OPAL 14
345 #define PLAT_POBLANO_SL0 15
346 #define PLAT_POBLANO_SL1 16
347 #define PLAT_POBLANO_SL2 17
348 #define PLAT_POBLANO_XXX 18
349 #define PLAT_JALAPENO_P2 19
350 #define PLAT_HABANERO 20
351 #define PLAT_VULCAN 21
352 #define PLAT_CRUSADER 22
353 #define PLAT_LANCER 23
354 #define PLAT_HARRIER 24
355 #define PLAT_TERMINATOR 25
356 #define PLAT_SKYHAWK 26
357 #define PLAT_CORSAIR 27
358 #define PLAT_JAGUAR 28
359 #define PLAT_SATAHAWK 29
360 #define PLAT_SATANATOR 30
361 #define PLAT_PROWLER 31
362 #define PLAT_BLACKBIRD 32
363 #define PLAT_SABREEXPRESS 33
364 #define PLAT_INTRUDER 34
365 #define PLAT__last 35
367 #define OEM_FLAVOR_ADAPTEC 1
368 #define OEM_FLAVOR_DELL 2
369 #define OEM_FLAVOR_HP 3
370 #define OEM_FLAVOR_IBM 4
371 #define OEM_FLAVOR_CPQ 5
372 #define OEM_FLAVOR_FSC 6
373 #define OEM_FLAVOR_DWS 7
374 #define OEM_FLAVOR_BRAND_Z 8
375 #define OEM_FLAVOR_LEGEND 9
376 #define OEM_FLAVOR_HITACHI 10
377 #define OEM_FLAVOR_ESG 11
378 #define OEM_FLAVOR_ICP 12
379 #define OEM_FLAVOR_SCM 13
380 #define OEM_FLAVOR__last 14
383 * XXX the aac-2622 with no battery present reports PLATFORM_BAT_OPT_PRESENT
385 #define PLATFORM_BAT_REQ_PRESENT 1 /* BATTERY REQUIRED AND PRESENT */
386 #define PLATFORM_BAT_REQ_NOTPRESENT 2 /* BATTERY REQUIRED AND NOT PRESENT */
387 #define PLATFORM_BAT_OPT_PRESENT 3 /* BATTERY OPTIONAL AND PRESENT */
388 #define PLATFORM_BAT_OPT_NOTPRESENT 4 /* BATTERY OPTIONAL AND NOT PRESENT */
389 #define PLATFORM_BAT_NOT_SUPPORTED 5 /* BATTERY NOT SUPPORTED */
392 * options supported by this board
393 * there has to be a one to one mapping of these defines and the ones in
394 * fsaapi.h, search for FSA_SUPPORT_SNAPSHOT
396 #define AAC_SUPPORTED_SNAPSHOT 0x01
397 #define AAC_SUPPORTED_CLUSTERS 0x02
398 #define AAC_SUPPORTED_WRITE_CACHE 0x04
399 #define AAC_SUPPORTED_64BIT_DATA 0x08
400 #define AAC_SUPPORTED_HOST_TIME_FIB 0x10
401 #define AAC_SUPPORTED_RAID50 0x20
402 #define AAC_SUPPORTED_4GB_WINDOW 0x40
403 #define AAC_SUPPORTED_SCSI_UPGRADEABLE 0x80
404 #define AAC_SUPPORTED_SOFT_ERR_REPORT 0x100
405 #define AAC_SUPPORTED_NOT_RECONDITION 0x200
406 #define AAC_SUPPORTED_SGMAP_HOST64 0x400
407 #define AAC_SUPPORTED_ALARM 0x800
408 #define AAC_SUPPORTED_NONDASD 0x1000
409 #define AAC_SUPPORTED_SCSI_MANAGED 0x2000
410 #define AAC_SUPPORTED_RAID_SCSI_MODE 0x4000
411 #define AAC_SUPPORTED_SUPPLEMENT_ADAPTER_INFO 0x10000
412 #define AAC_SUPPORTED_NEW_COMM 0x20000
413 #define AAC_SUPPORTED_64BIT_ARRAYSIZE 0x40000
414 #define AAC_SUPPORTED_HEAT_SENSOR 0x80000
417 * Structure used to respond to a RequestAdapterInfo fib.
419 struct aac_adapter_info
{
420 u_int32_t PlatformBase
; /* adapter type */
421 u_int32_t CpuArchitecture
; /* adapter CPU type */
422 u_int32_t CpuVariant
; /* adapter CPU subtype */
423 u_int32_t ClockSpeed
; /* adapter CPU clockspeed */
424 u_int32_t ExecutionMem
; /* adapter Execution Memory size */
425 u_int32_t BufferMem
; /* adapter Data Memory */
426 u_int32_t TotalMem
; /* adapter Total Memory */
427 struct FsaRevision KernelRevision
; /* adapter Kernel SW Revision */
428 struct FsaRevision MonitorRevision
; /* adapter Monitor/Diag SW Rev */
429 struct FsaRevision HardwareRevision
; /* TDB */
430 struct FsaRevision BIOSRevision
; /* adapter BIOS Revision */
431 u_int32_t ClusteringEnabled
;
432 u_int32_t ClusterChannelMask
;
433 u_int64_t SerialNumber
;
434 u_int32_t batteryPlatform
;
435 u_int32_t SupportedOptions
; /* supported features of this ctrlr */
436 u_int32_t OemVariant
;
440 * Monitor/Kernel interface.
444 * Synchronous commands to the monitor/kernel.
446 #define AAC_MONKER_BREAKPOINT 0x04
447 #define AAC_MONKER_INITSTRUCT 0x05
448 #define AAC_MONKER_SYNCFIB 0x0c
449 #define AAC_MONKER_GETKERNVER 0x11
450 #define AAC_MONKER_POSTRESULTS 0x14
451 #define AAC_MONKER_GETINFO 0x19
452 #define AAC_MONKER_GETDRVPROP 0x23
453 #define AAC_MONKER_RCVTEMP 0x25
454 #define AAC_MONKER_GETCOMMPREF 0x26
455 #define AAC_MONKER_REINIT 0xee
458 * Command status values
477 #define ST_WOULDBLOCK 35
478 #define ST_NAMETOOLONG 63
479 #define ST_NOTEMPTY 66
483 #define ST_BADHANDLE 10001
484 #define ST_NOT_SYNC 10002
485 #define ST_BAD_COOKIE 10003
486 #define ST_NOTSUPP 10004
487 #define ST_TOOSMALL 10005
488 #define ST_SERVERFAULT 10006
489 #define ST_BADTYPE 10007
490 #define ST_JUKEBOX 10008
491 #define ST_NOTMOUNTED 10009
492 #define ST_MAINTMODE 10010
493 #define ST_STALEACL 10011
496 * Volume manager commands
499 #define VM_NameServe 1
500 #define VM_ContainerConfig 2
502 #define VM_FilesystemIoctl 4
503 #define VM_CloseAll 5
504 #define VM_CtBlockRead 6
505 #define VM_CtBlockWrite 7
506 #define VM_SliceBlockRead 8 /* raw access to configured "storage objects" */
507 #define VM_SliceBlockWrite 9
508 #define VM_DriveBlockRead 10 /* raw access to physical devices */
509 #define VM_DriveBlockWrite 11
510 #define VM_EnclosureMgt 12 /* enclosure management */
511 #define VM_Unused 13 /* used to be diskset management */
512 #define VM_CtBlockVerify 14
513 #define VM_CtPerf 15 /* performance test */
514 #define VM_CtBlockRead64 16
515 #define VM_CtBlockWrite64 17
516 #define VM_CtBlockVerify64 18
517 #define VM_CtHostRead64 19
518 #define VM_CtHostWrite64 20
519 #define VM_DrvErrTblLog 21 /* drive error table/log type of command */
520 #define VM_NameServe64 22
527 char FileSystemName
[16];
528 struct aac_container_creation CreateInfo
;
532 u_int32_t ContentState
;
533 #define AAC_FSCS_READONLY 0x0002 /* XXX need more information than this */
537 u_int32_t AlterEgoId
;
538 u_int32_t CapacityHigh
; /* Only if VM_NameServe64 */
547 struct aac_mntinforesponse
{
550 u_int32_t MntRespCount
;
551 struct aac_mntobj MntTable
[1];
555 * Container shutdown command.
557 struct aac_closecommand
{
559 u_int32_t ContainerId
;
563 * Container Config Command
565 #define CT_GET_SCSI_METHOD 64
572 struct aac_ctcfg_resp
{
581 #define AAC_SCSI_MAX_PORTS 10
582 #define AAC_BUS_NO_EXIST 0
583 #define AAC_BUS_VALID 1
584 #define AAC_BUS_FAULTED 2
585 #define AAC_BUS_DISABLED 3
586 #define GetBusInfo 0x9
588 struct aac_getbusinf
{
589 u_int32_t ProbeComplete
;
591 u_int32_t TargetsPerBus
;
592 u_int8_t InitiatorBusId
[AAC_SCSI_MAX_PORTS
];
593 u_int8_t BusValid
[AAC_SCSI_MAX_PORTS
];
602 u_int32_t IoctlBuf
[1]; /* Placeholder? */
605 struct aac_vmi_businf_resp
{
611 struct aac_getbusinf BusInf
;
615 #define AAC_BTL_TO_HANDLE(b, t, l) \
616 (((b & 0x3f) << 7) | ((l & 0x7) << 4) | (t & 0xf))
618 #define AAC_BTL_TO_HANDLE(b, t, l) \
619 ((((u_int32_t)b & 0x0f) << 24) | \
620 (((u_int32_t)l & 0xff) << 16) | \
621 ((u_int32_t)t & 0xffff))
623 #define GetDeviceProbeInfo 0x5
625 struct aac_vmi_devinfo_resp
{
631 u_int8_t VendorId
[8];
632 u_int8_t ProductId
[16];
633 u_int8_t ProductRev
[4];
640 u_int32_t reserved
[2];
641 u_int8_t VendorSpecific
[20];
643 u_int32_t AAC_Managed
:1;
645 u_int32_t reserved2
:6;
649 u_int32_t ultraEnable
:1,
663 #define ResetBus 0x16
664 struct aac_resetbus
{
669 * Write 'stability' options.
675 * Commit level response for a write request.
677 #define CMFILE_SYNC_NVRAM 1
678 #define CMDATA_SYNC_NVRAM 2
679 #define CMFILE_SYNC 3
680 #define CMDATA_SYNC 4
684 * Block read/write operations. These structures are packed into the 'data'
687 struct aac_blockread
{
688 u_int32_t Command
; /* not FSACommand! */
689 u_int32_t ContainerId
;
690 u_int32_t BlockNumber
;
692 struct aac_sg_table SgMap
; /* variable size */
695 struct aac_blockread64
{
696 u_int32_t Command
; /* not FSACommand! */
697 u_int16_t ContainerId
;
698 u_int16_t SectorCount
;
699 u_int32_t BlockNumber
;
702 struct aac_sg_table64 SgMap64
; /* variable size */
705 struct aac_blockread_response
{
710 struct aac_blockwrite
{
711 u_int32_t Command
; /* not FSACommand! */
712 u_int32_t ContainerId
;
713 u_int32_t BlockNumber
;
716 struct aac_sg_table SgMap
; /* variable size */
719 struct aac_blockwrite64
{
720 u_int32_t Command
; /* not FSACommand! */
721 u_int16_t ContainerId
;
722 u_int16_t SectorCount
;
723 u_int32_t BlockNumber
;
726 struct aac_sg_table64 SgMap64
; /* variable size */
729 struct aac_blockwrite_response
{
736 u_int64_t BlockNumber
;
738 u_int16_t ContainerId
;
739 u_int16_t Flags
; /* 0: W, 1: R */
740 u_int16_t BpTotal
; /* reserved for FW use */
741 u_int16_t BpComplete
; /* reserved for FW use */
742 struct aac_sg_tableraw SgMapRaw
; /* variable size */
745 struct aac_close_command
{
747 u_int32_t ContainerId
;
751 * SCSI Passthrough structures
761 u_int32_t retry_limit
;
764 struct aac_sg_table sg_map32
;
767 #define AAC_SRB_FUNC_EXECUTE_SCSI 0x00
768 #define AAC_SRB_FUNC_CLAIM_DEVICE 0x01
769 #define AAC_SRB_FUNC_IO_CONTROL 0x02
770 #define AAC_SRB_FUNC_RECEIVE_EVENT 0x03
771 #define AAC_SRB_FUNC_RELEASE_QUEUE 0x04
772 #define AAC_SRB_FUNC_ATTACH_DEVICE 0x05
773 #define AAC_SRB_FUNC_RELEASE_DEVICE 0x06
774 #define AAC_SRB_FUNC_SHUTDOWN 0x07
775 #define AAC_SRB_FUNC_FLUSH 0x08
776 #define AAC_SRB_FUNC_ABORT_COMMAND 0x10
777 #define AAC_SRB_FUNC_RELEASE_RECOVERY 0x11
778 #define AAC_SRB_FUNC_RESET_BUS 0x12
779 #define AAC_SRB_FUNC_RESET_DEVICE 0x13
780 #define AAC_SRB_FUNC_TERMINATE_IO 0x14
781 #define AAC_SRB_FUNC_FLUSH_QUEUE 0x15
782 #define AAC_SRB_FUNC_REMOVE_DEVICE 0x16
783 #define AAC_SRB_FUNC_DOMAIN_VALIDATION 0x17
785 #define AAC_SRB_FLAGS_NO_DATA_XFER 0x0000
786 #define AAC_SRB_FLAGS_DISABLE_DISCONNECT 0x0004
787 #define AAC_SRB_FLAGS_DISABLE_SYNC_TRANSFER 0x0008
788 #define AAC_SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x0010
789 #define AAC_SRB_FLAGS_DISABLE_AUTOSENSE 0x0020
790 #define AAC_SRB_FLAGS_DATA_IN 0x0040
791 #define AAC_SRB_FLAGS_DATA_OUT 0x0080
792 #define AAC_SRB_FLAGS_UNSPECIFIED_DIRECTION \
793 (AAC_SRB_FLAGS_DATA_IN | AAC_SRB_FLAGS_DATA_OUT)
795 #define AAC_HOST_SENSE_DATA_MAX 30
797 struct aac_srb_response
{
798 u_int32_t fib_status
;
799 u_int32_t srb_status
;
800 u_int32_t scsi_status
;
803 u_int8_t sense
[AAC_HOST_SENSE_DATA_MAX
];
807 * Status codes for SCSI passthrough commands. Since they are based on ASPI,
808 * they also exactly match CAM status codes in both enumeration and meaning.
809 * They seem to also be used as status codes for synchronous FIBs.
811 #define AAC_SRB_STS_PENDING 0x00
812 #define AAC_SRB_STS_SUCCESS 0x01
813 #define AAC_SRB_STS_ABORTED 0x02
814 #define AAC_SRB_STS_ABORT_FAILED 0x03
815 #define AAC_SRB_STS_ERROR 0x04
816 #define AAC_SRB_STS_BUSY 0x05
817 #define AAC_SRB_STS_INVALID_REQUEST 0x06
818 #define AAC_SRB_STS_INVALID_PATH_ID 0x07
819 #define AAC_SRB_STS_NO_DEVICE 0x08
820 #define AAC_SRB_STS_TIMEOUT 0x09
821 #define AAC_SRB_STS_SELECTION_TIMEOUT 0x0a
822 #define AAC_SRB_STS_COMMAND_TIMEOUT 0x0b
823 #define AAC_SRB_STS_MESSAGE_REJECTED 0x0d
824 #define AAC_SRB_STS_BUS_RESET 0x0e
825 #define AAC_SRB_STS_PARITY_ERROR 0x0f
826 #define AAC_SRB_STS_REQUEST_SENSE_FAILED 0x10
827 #define AAC_SRB_STS_NO_HBA 0x11
828 #define AAC_SRB_STS_DATA_OVERRUN 0x12
829 #define AAC_SRB_STS_UNEXPECTED_BUS_FREE 0x13
830 #define AAC_SRB_STS_PHASE_SEQUENCE_FAILURE 0x14
831 #define AAC_SRB_STS_BAD_SRB_BLOCK_LENGTH 0x15
832 #define AAC_SRB_STS_REQUEST_FLUSHED 0x16
833 #define AAC_SRB_STS_INVALID_LUN 0x20
834 #define AAC_SRB_STS_INVALID_TARGET_ID 0x21
835 #define AAC_SRB_STS_BAD_FUNCTION 0x22
836 #define AAC_SRB_STS_ERROR_RECOVER 0x23
839 * Register set for adapters based on the Falcon bridge and PPC core
842 #define AAC_FA_DOORBELL0_CLEAR 0x00
843 #define AAC_FA_DOORBELL1_CLEAR 0x02
844 #define AAC_FA_DOORBELL0 0x04
845 #define AAC_FA_DOORBELL1 0x06
846 #define AAC_FA_MASK0_CLEAR 0x08
847 #define AAC_FA_MASK1_CLEAR 0x0a
848 #define AAC_FA_MASK0 0x0c
849 #define AAC_FA_MASK1 0x0e
850 #define AAC_FA_MAILBOX 0x10
851 #define AAC_FA_FWSTATUS 0x2c /* Mailbox 7 */
852 #define AAC_FA_INTSRC 0x900
854 #define AAC_FA_HACK(sc) (void)AAC_GETREG4(sc, AAC_FA_INTSRC)
857 * Register definitions for the Adaptec AAC-364 'Jalapeno I/II' adapters, based
858 * on the SA110 'StrongArm'.
861 #define AAC_REGSIZE 0x100
863 /* doorbell 0 (adapter->host) */
864 #define AAC_SA_DOORBELL0_CLEAR 0x98
865 #define AAC_SA_DOORBELL0_SET 0x9c
866 #define AAC_SA_DOORBELL0 0x9c
867 #define AAC_SA_MASK0_CLEAR 0xa0
868 #define AAC_SA_MASK0_SET 0xa4
870 /* doorbell 1 (host->adapter) */
871 #define AAC_SA_DOORBELL1_CLEAR 0x9a
872 #define AAC_SA_DOORBELL1_SET 0x9e
873 #define AAC_SA_MASK1_CLEAR 0xa2
874 #define AAC_SA_MASK1_SET 0xa6
876 /* mailbox (20 bytes) */
877 #define AAC_SA_MAILBOX 0xa8
878 #define AAC_SA_FWSTATUS 0xc4
881 * Register definitions for the Adaptec 'Pablano' adapters, based on the
882 * i960Rx, and other related adapters.
885 #define AAC_RX_IDBR 0x20 /* inbound doorbell */
886 #define AAC_RX_IISR 0x24 /* inbound interrupt status */
887 #define AAC_RX_IIMR 0x28 /* inbound interrupt mask */
888 #define AAC_RX_ODBR 0x2c /* outbound doorbell */
889 #define AAC_RX_OISR 0x30 /* outbound interrupt status */
890 #define AAC_RX_OIMR 0x34 /* outbound interrupt mask */
891 #define AAC_RX_IQUE 0x40 /* inbound queue */
892 #define AAC_RX_OQUE 0x44 /* outbound queue */
894 #define AAC_RX_MAILBOX 0x50 /* mailbox (20 bytes) */
895 #define AAC_RX_FWSTATUS 0x6c
898 * Register definitions for the Adaptec 'Rocket' RAID-On-Chip adapters.
899 * Unsurprisingly, it's quite similar to the i960!
902 #define AAC_RKT_IDBR 0x20 /* inbound doorbell register */
903 #define AAC_RKT_IISR 0x24 /* inbound interrupt status register */
904 #define AAC_RKT_IIMR 0x28 /* inbound interrupt mask register */
905 #define AAC_RKT_ODBR 0x2c /* outbound doorbell register */
906 #define AAC_RKT_OISR 0x30 /* outbound interrupt status register */
907 #define AAC_RKT_OIMR 0x34 /* outbound interrupt mask register */
908 #define AAC_RKT_IQUE 0x40 /* inbound queue */
909 #define AAC_RKT_OQUE 0x44 /* outbound queue */
911 #define AAC_RKT_MAILBOX 0x1000 /* mailbox */
912 #define AAC_RKT_FWSTATUS 0x101c /* Firmware Status (mailbox 7) */
915 * Common bit definitions for the doorbell registers.
919 * Status bits in the doorbell registers.
921 #define AAC_DB_SYNC_COMMAND (1<<0) /* send/completed synchronous FIB */
922 #define AAC_DB_COMMAND_READY (1<<1) /* posted one or more commands */
923 #define AAC_DB_RESPONSE_READY (1<<2) /* one or more commands complete */
924 #define AAC_DB_COMMAND_NOT_FULL (1<<3) /* command queue not full */
925 #define AAC_DB_RESPONSE_NOT_FULL (1<<4) /* response queue not full */
928 * The adapter can request the host print a message by setting the
929 * DB_PRINTF flag in DOORBELL0. The driver responds by collecting the
930 * message from the printf buffer, clearing the DB_PRINTF flag in
931 * DOORBELL0 and setting it in DOORBELL1.
932 * (ODBR and IDBR respectively for the i960Rx adapters)
934 #define AAC_DB_PRINTF (1<<5) /* adapter requests host printf */
935 #define AAC_PRINTF_DONE (1<<5) /* host completed printf processing */
938 * Mask containing the interrupt bits we care about. We don't anticipate
939 * (or want) interrupts not in this mask.
941 #define AAC_DB_INTERRUPTS \
942 (AAC_DB_COMMAND_READY | AAC_DB_RESPONSE_READY | AAC_DB_PRINTF)
943 #define AAC_DB_INT_NEW_COMM 0x08
948 * Note that we base these at 0 in order to use them as array indices. Adaptec
949 * used base 1 for some unknown reason, and sorted them in a different order.
951 #define AAC_HOST_NORM_CMD_QUEUE 0
952 #define AAC_HOST_HIGH_CMD_QUEUE 1
953 #define AAC_ADAP_NORM_CMD_QUEUE 2
954 #define AAC_ADAP_HIGH_CMD_QUEUE 3
955 #define AAC_HOST_NORM_RESP_QUEUE 4
956 #define AAC_HOST_HIGH_RESP_QUEUE 5
957 #define AAC_ADAP_NORM_RESP_QUEUE 6
958 #define AAC_ADAP_HIGH_RESP_QUEUE 7
961 * List structure used to chain FIBs (used by the adapter - we hang FIBs off
962 * our private command structure and don't touch these)
964 struct aac_fib_list_entry
{
970 * FIB (FSA Interface Block?); this is the datastructure passed between the
973 struct aac_fib_header
{
979 u_int16_t SenderSize
;
980 u_int32_t SenderFibAddress
;
981 u_int32_t ReceiverFibAddress
;
982 u_int32_t SenderData
;
985 u_int32_t ReceiverTimeStart
;
986 u_int32_t ReceiverTimeDone
;
988 struct aac_fib_list_entry FibLinks
;
992 #define AAC_FIB_DATASIZE (512 - sizeof(struct aac_fib_header))
995 struct aac_fib_header Header
;
996 u_int8_t data
[AAC_FIB_DATASIZE
];
1002 #define TestCommandResponse 1
1003 #define TestAdapterCommand 2
1005 /* Lowlevel and comm commands */
1006 #define LastTestCommand 100
1007 #define ReinitHostNormCommandQueue 101
1008 #define ReinitHostHighCommandQueue 102
1009 #define ReinitHostHighRespQueue 103
1010 #define ReinitHostNormRespQueue 104
1011 #define ReinitAdapNormCommandQueue 105
1012 #define ReinitAdapHighCommandQueue 107
1013 #define ReinitAdapHighRespQueue 108
1014 #define ReinitAdapNormRespQueue 109
1015 #define InterfaceShutdown 110
1016 #define DmaCommandFib 120
1017 #define StartProfile 121
1018 #define TermProfile 122
1019 #define SpeedTest 123
1020 #define TakeABreakPt 124
1021 #define RequestPerfData 125
1022 #define SetInterruptDefTimer 126
1023 #define SetInterruptDefCount 127
1024 #define GetInterruptDefStatus 128
1025 #define LastCommCommand 129
1027 /* filesystem commands */
1028 #define NuFileSystem 300
1030 #define HostFileSystem 302
1031 #define LastFileSystemCommand 303
1033 /* Container Commands */
1034 #define ContainerCommand 500
1035 #define ContainerCommand64 501
1038 /* Cluster Commands */
1039 #define ClusterCommand 550
1041 /* Scsi Port commands (scsi passthrough) */
1042 #define ScsiPortCommand 600
1043 #define ScsiPortCommandU64 601
1044 #define SataPortCommandU64 602
1045 #define SasSmpPassThrough 603
1046 #define SasRequestPhyInfo 612
1048 /* Misc house keeping and generic adapter initiated commands */
1049 #define AifRequest 700
1050 #define CheckRevision 701
1051 #define FsaHostShutdown 702
1052 #define RequestAdapterInfo 703
1053 #define IsAdapterPaused 704
1054 #define SendHostTime 705
1055 #define RequestSupplementAdapterInfo 706 /* Supp. Info for set in UCC
1056 * use only if supported
1057 * (RequestAdapterInfo first) */
1058 #define LastMiscCommand 707
1060 #define OnLineDiagnostic 800
1061 #define FduAdapterTest 801
1062 #define RequestCompatibilityId 802
1063 #define AdapterEnvironmentInfo 803 /* temp. sensors */
1065 #define NvsramEventLog 900
1066 #define ResetNvsramEventLogPointers 901
1067 #define EnableEventLog 902
1068 #define DisableEventLog 903
1069 #define EncryptedKeyTransportFIB 904
1070 #define KeyableFeaturesFIB 905
1075 #define AAC_FIBTYPE_TFIB 1
1076 #define AAC_FIBTYPE_TQE 2
1077 #define AAC_FIBTYPE_TCTPERF 3
1080 * FIB transfer state
1082 #define AAC_FIBSTATE_HOSTOWNED (1<<0) /* owned by the host */
1083 #define AAC_FIBSTATE_ADAPTEROWNED (1<<1) /* owned by the adapter */
1084 #define AAC_FIBSTATE_INITIALISED (1<<2) /* initialised */
1085 #define AAC_FIBSTATE_EMPTY (1<<3) /* empty */
1086 #define AAC_FIBSTATE_FROMPOOL (1<<4) /* allocated from pool */
1087 #define AAC_FIBSTATE_FROMHOST (1<<5) /* sent from the host */
1088 #define AAC_FIBSTATE_FROMADAP (1<<6) /* sent from the adapter */
1089 #define AAC_FIBSTATE_REXPECTED (1<<7) /* response is expected */
1090 #define AAC_FIBSTATE_RNOTEXPECTED (1<<8) /* response is not expected */
1091 #define AAC_FIBSTATE_DONEADAP (1<<9) /* processed by the adapter */
1092 #define AAC_FIBSTATE_DONEHOST (1<<10) /* processed by the host */
1093 #define AAC_FIBSTATE_HIGH (1<<11) /* high priority */
1094 #define AAC_FIBSTATE_NORM (1<<12) /* normal priority */
1095 #define AAC_FIBSTATE_ASYNC (1<<13)
1096 #define AAC_FIBSTATE_ASYNCIO (1<<13) /* to be removed */
1097 #define AAC_FIBSTATE_PAGEFILEIO (1<<14) /* to be removed */
1098 #define AAC_FIBSTATE_SHUTDOWN (1<<15)
1099 #define AAC_FIBSTATE_LAZYWRITE (1<<16) /* to be removed */
1100 #define AAC_FIBSTATE_ADAPMICROFIB (1<<17)
1101 #define AAC_FIBSTATE_BIOSFIB (1<<18)
1102 #define AAC_FIBSTATE_FAST_RESPONSE (1<<19) /* fast response capable */
1103 #define AAC_FIBSTATE_APIFIB (1<<20)
1108 #define AAC_ERROR_NORMAL 0x00
1109 #define AAC_ERROR_PENDING 0x01
1110 #define AAC_ERROR_FATAL 0x02
1111 #define AAC_ERROR_INVALID_QUEUE 0x03
1112 #define AAC_ERROR_NOENTRIES 0x04
1113 #define AAC_ERROR_SENDFAILED 0x05
1114 #define AAC_ERROR_INVALID_QUEUE_PRIORITY 0x06
1115 #define AAC_ERROR_FIB_ALLOCATION_FAILED 0x07
1116 #define AAC_ERROR_FIB_DEALLOCATION_FAILED 0x08
1119 * Adapter Status Register
1121 * Phase Staus mailbox is 32bits:
1122 * <31:16> = Phase Status
1125 * The adapter reports its present state through the phase. Only
1126 * a single phase should be ever be set. Each phase can have multiple
1127 * phase status bits to provide more detailed information about the
1128 * state of the adapter.
1130 #define AAC_SELF_TEST_FAILED 0x00000004
1131 #define AAC_MONITOR_PANIC 0x00000020
1132 #define AAC_UP_AND_RUNNING 0x00000080
1133 #define AAC_KERNEL_PANIC 0x00000100
1136 * Data types relating to control and monitoring of the NVRAM/WriteCache
1140 #define AAC_NFILESYS 24 /* maximum number of filesystems */
1143 * NVRAM/Write Cache subsystem states
1146 NVSTATUS_DISABLED
= 0, /* present, clean, not being used */
1147 NVSTATUS_ENABLED
, /* present, possibly dirty, ready for use */
1148 NVSTATUS_ERROR
, /* present, dirty, contains dirty data */
1149 NVSTATUS_BATTERY
, /* present, bad or low battery, may contain
1151 NVSTATUS_UNKNOWN
/* for bad/missing device */
1155 * NVRAM/Write Cache subsystem battery component states
1159 NVBATTSTATUS_NONE
= 0, /* battery has no power or is not present */
1160 NVBATTSTATUS_LOW
, /* battery is low on power */
1161 NVBATTSTATUS_OK
, /* battery is okay - normal operation possible
1162 * only in this state */
1163 NVBATTSTATUS_RECONDITIONING
/* no battery present - reconditioning
1168 * Battery transition type
1171 NVBATT_TRANSITION_NONE
= 0, /* battery now has no power or is not
1173 NVBATT_TRANSITION_LOW
, /* battery is now low on power */
1174 NVBATT_TRANSITION_OK
/* battery is now okay - normal
1175 * operation possible only in this
1177 } AAC_NVBATT_TRANSITION
;
1180 * NVRAM Info structure returned for NVRAM_GetInfo call
1182 struct aac_nvramdevinfo
{
1183 u_int32_t NV_Enabled
; /* write caching enabled */
1184 u_int32_t NV_Error
; /* device in error state */
1185 u_int32_t NV_NDirty
; /* count of dirty NVRAM buffers */
1186 u_int32_t NV_NActive
; /* count of NVRAM buffers being
1190 struct aac_nvraminfo
{
1191 AAC_NVSTATUS NV_Status
; /* nvram subsystem status */
1192 AAC_NVBATTSTATUS NV_BattStatus
; /* battery status */
1193 u_int32_t NV_Size
; /* size of WriteCache NVRAM in
1195 u_int32_t NV_BufSize
; /* size of NVRAM buffers in
1197 u_int32_t NV_NBufs
; /* number of NVRAM buffers */
1198 u_int32_t NV_NDirty
; /* Num dirty NVRAM buffers */
1199 u_int32_t NV_NClean
; /* Num clean NVRAM buffers */
1200 u_int32_t NV_NActive
; /* Num NVRAM buffers being
1202 u_int32_t NV_NBrokered
; /* Num brokered NVRAM buffers */
1203 struct aac_nvramdevinfo NV_DevInfo
[AAC_NFILESYS
]; /* per device
1205 u_int32_t NV_BattNeedsReconditioning
; /* boolean */
1206 u_int32_t NV_TotalSize
; /* size of all non-volatile
1207 * memories in bytes */
1211 * Data types relating to adapter-initiated FIBs
1213 * Based on types and structures in <aifstruc.h>
1220 AifJobStsSuccess
= 1,
1224 AifJobStsLastReportMarker
= 100, /* All prior mean last report */
1230 AifJobScsiMin
= 1, /* Minimum value for Scsi operation */
1231 AifJobScsiZero
, /* SCSI device clear operation */
1232 AifJobScsiVerify
, /* SCSI device Verify operation NO
1234 AifJobScsiExercise
, /* SCSI device Exercise operation */
1235 AifJobScsiVerifyRepair
, /* SCSI device Verify operation WITH
1237 AifJobScsiWritePattern
, /* write pattern */
1238 AifJobScsiMax
= 99, /* Max Scsi value */
1239 AifJobCtrMin
, /* Min Ctr op value */
1240 AifJobCtrZero
, /* Container clear operation */
1241 AifJobCtrCopy
, /* Container copy operation */
1242 AifJobCtrCreateMirror
, /* Container Create Mirror operation */
1243 AifJobCtrMergeMirror
, /* Container Merge Mirror operation */
1244 AifJobCtrScrubMirror
, /* Container Scrub Mirror operation */
1245 AifJobCtrRebuildRaid5
, /* Container Rebuild Raid5 operation */
1246 AifJobCtrScrubRaid5
, /* Container Scrub Raid5 operation */
1247 AifJobCtrMorph
, /* Container morph operation */
1248 AifJobCtrPartCopy
, /* Container Partition copy operation */
1249 AifJobCtrRebuildMirror
, /* Container Rebuild Mirror operation */
1250 AifJobCtrCrazyCache
, /* crazy cache */
1251 AifJobCtrCopyback
, /* Container Copyback operation */
1252 AifJobCtrCompactRaid5D
, /* Container Compaction operation */
1253 AifJobCtrExpandRaid5D
, /* Container Expansion operation */
1254 AifJobCtrRebuildRaid6
, /* Container Rebuild Raid6 operation */
1255 AifJobCtrScrubRaid6
, /* Container Scrub Raid6 operation */
1256 AifJobCtrSSBackup
, /* Container snapshot backup task */
1257 AifJobCtrMax
= 199, /* Max Ctr type operation */
1258 AifJobFsMin
, /* Min Fs type operation */
1259 AifJobFsCreate
, /* File System Create operation */
1260 AifJobFsVerify
, /* File System Verify operation */
1261 AifJobFsExtend
, /* File System Extend operation */
1262 AifJobFsMax
= 299, /* Max Fs type operation */
1263 AifJobApiFormatNTFS
, /* Format a drive to NTFS */
1264 AifJobApiFormatFAT
, /* Format a drive to FAT */
1265 AifJobApiUpdateSnapshot
, /* update the read/write half of a
1267 AifJobApiFormatFAT32
, /* Format a drive to FAT32 */
1268 AifJobApiMax
= 399, /* Max API type operation */
1269 AifJobCtlContinuousCtrVerify
, /* Adapter operation */
1270 AifJobCtlMax
= 499 /* Max Adapter type operation */
1273 struct aac_AifContainers
{
1274 u_int32_t src
; /* from/master */
1275 u_int32_t dst
; /* to/slave */
1278 union aac_AifJobClient
{
1279 struct aac_AifContainers container
; /* For Container and
1280 * filesystem progress
1282 int32_t scsi_dh
; /* For SCSI progress
1286 struct aac_AifJobDesc
{
1287 u_int32_t jobID
; /* DO NOT FILL IN! Will be
1288 * filled in by AIF */
1289 AAC_AifJobType type
; /* Operation that is being
1291 union aac_AifJobClient client
; /* Details */
1294 struct aac_AifJobProgressReport
{
1295 struct aac_AifJobDesc jd
;
1296 AAC_AifJobStatus status
;
1297 u_int32_t finalTick
;
1298 u_int32_t currentTick
;
1299 u_int32_t jobSpecificData1
;
1300 u_int32_t jobSpecificData2
;
1304 * Event Notification
1307 /* General application notifies start here */
1308 AifEnGeneric
= 1, /* Generic notification */
1309 AifEnTaskComplete
, /* Task has completed */
1310 AifEnConfigChange
, /* Adapter config change occurred */
1311 AifEnContainerChange
, /* Adapter specific container
1312 * configuration change */
1313 AifEnDeviceFailure
, /* SCSI device failed */
1314 AifEnMirrorFailover
, /* Mirror failover started */
1315 AifEnContainerEvent
, /* Significant container event */
1316 AifEnFileSystemChange
, /* File system changed */
1317 AifEnConfigPause
, /* Container pause event */
1318 AifEnConfigResume
, /* Container resume event */
1319 AifEnFailoverChange
, /* Failover space assignment changed */
1320 AifEnRAID5RebuildDone
, /* RAID5 rebuild finished */
1321 AifEnEnclosureManagement
, /* Enclosure management event */
1322 AifEnBatteryEvent
, /* Significant NV battery event */
1323 AifEnAddContainer
, /* A new container was created. */
1324 AifEnDeleteContainer
, /* A container was deleted. */
1325 AifEnSMARTEvent
, /* SMART Event */
1326 AifEnBatteryNeedsRecond
, /* The battery needs reconditioning */
1327 AifEnClusterEvent
, /* Some cluster event */
1328 AifEnDiskSetEvent
, /* A disk set event occured. */
1329 AifDriverNotifyStart
=199, /* Notifies for host driver go here */
1330 /* Host driver notifications start here */
1331 AifDenMorphComplete
, /* A morph operation completed */
1332 AifDenVolumeExtendComplete
/* Volume expand operation completed */
1333 } AAC_AifEventNotifyType
;
1335 struct aac_AifEnsGeneric
{
1336 char text
[132]; /* Generic text */
1339 struct aac_AifEnsDeviceFailure
{
1340 u_int32_t deviceHandle
; /* SCSI device handle */
1343 struct aac_AifEnsMirrorFailover
{
1344 u_int32_t container
; /* Container with failed element */
1345 u_int32_t failedSlice
; /* Old slice which failed */
1346 u_int32_t creatingSlice
; /* New slice used for auto-create */
1349 struct aac_AifEnsContainerChange
{
1350 u_int32_t container
[2]; /* container that changed, -1 if no
1354 struct aac_AifEnsContainerEvent
{
1355 u_int32_t container
; /* container number */
1356 u_int32_t eventType
; /* event type */
1359 struct aac_AifEnsEnclosureEvent
{
1360 u_int32_t empID
; /* enclosure management proc number */
1361 u_int32_t unitID
; /* unitId, fan id, power supply id,
1362 * slot id, tempsensor id. */
1363 u_int32_t eventType
; /* event type */
1366 struct aac_AifEnsBatteryEvent
{
1367 AAC_NVBATT_TRANSITION transition_type
; /* eg from low to ok */
1368 AAC_NVBATTSTATUS current_state
; /* current batt state */
1369 AAC_NVBATTSTATUS prior_state
; /* prev batt state */
1372 struct aac_AifEnsDiskSetEvent
{
1373 u_int32_t eventType
;
1375 u_int64_t CreatorId
;
1379 CLUSTER_NULL_EVENT
= 0,
1380 CLUSTER_PARTNER_NAME_EVENT
, /* change in partner hostname or
1381 * adaptername from NULL to non-NULL */
1382 /* (partner's agent may be up) */
1383 CLUSTER_PARTNER_NULL_NAME_EVENT
/* change in partner hostname or
1384 * adaptername from non-null to NULL */
1385 /* (partner has rebooted) */
1386 } AAC_ClusterAifEvent
;
1388 struct aac_AifEnsClusterEvent
{
1389 AAC_ClusterAifEvent eventType
;
1392 struct aac_AifEventNotify
{
1393 AAC_AifEventNotifyType type
;
1395 struct aac_AifEnsGeneric EG
;
1396 struct aac_AifEnsDeviceFailure EDF
;
1397 struct aac_AifEnsMirrorFailover EMF
;
1398 struct aac_AifEnsContainerChange ECC
;
1399 struct aac_AifEnsContainerEvent ECE
;
1400 struct aac_AifEnsEnclosureEvent EEE
;
1401 struct aac_AifEnsBatteryEvent EBE
;
1402 struct aac_AifEnsDiskSetEvent EDS
;
1403 /* struct aac_AifEnsSMARTEvent ES;*/
1404 struct aac_AifEnsClusterEvent ECLE
;
1409 * Adapter Initiated FIB command structures. Start with the adapter
1410 * initiated FIBs that really come from the adapter, and get responded
1413 #define AAC_AIF_REPORT_MAX_SIZE 64
1416 AifCmdEventNotify
= 1, /* Notify of event */
1417 AifCmdJobProgress
, /* Progress report */
1418 AifCmdAPIReport
, /* Report from other user of API */
1419 AifCmdDriverNotify
, /* Notify host driver of event */
1420 AifReqJobList
= 100, /* Gets back complete job list */
1421 AifReqJobsForCtr
, /* Gets back jobs for specific container */
1422 AifReqJobsForScsi
, /* Gets back jobs for specific SCSI device */
1423 AifReqJobReport
, /* Gets back a specific job report or list */
1424 AifReqTerminateJob
, /* Terminates job */
1425 AifReqSuspendJob
, /* Suspends a job */
1426 AifReqResumeJob
, /* Resumes a job */
1427 AifReqSendAPIReport
, /* API generic report requests */
1428 AifReqAPIJobStart
, /* Start a job from the API */
1429 AifReqAPIJobUpdate
, /* Update a job report from the API */
1430 AifReqAPIJobFinish
/* Finish a job from the API */
1433 struct aac_aif_command
{
1434 AAC_AifCommand command
; /* Tell host what type of
1436 u_int32_t seqNumber
; /* To allow ordering of
1437 * reports (if necessary) */
1439 struct aac_AifEventNotify EN
; /* Event notify */
1440 struct aac_AifJobProgressReport PR
[1]; /* Progress report */
1441 u_int8_t AR
[AAC_AIF_REPORT_MAX_SIZE
];
1442 u_int8_t data
[AAC_FIB_DATASIZE
- 8];
1446 #endif /* !_PCI_AACREG_H_ */