2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
4 * Copyright (c) 2000 Michael Smith
5 * Copyright (c) 2000-2001 Scott Long
6 * Copyright (c) 2000 BSDi
7 * Copyright (c) 2001 Adaptec, Inc.
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 AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * Data structures defining the interface between the driver and the Adaptec
36 * 'FSA' adapters. Note that many field names and comments here are taken
37 * verbatim from the Adaptec driver source in order to make comparing the
38 * two slightly easier.
42 * Misc. magic numbers.
44 #define AAC_MAX_CONTAINERS 64
45 #define AAC_BLOCK_SIZE 512
48 * Communications interface.
50 * Where datastructure layouts are closely parallel to the Adaptec sample code,
51 * retain their naming conventions (for now) to aid in cross-referencing.
55 * We establish 4 command queues and matching response queues. Queues must
56 * be 16-byte aligned, and are sized as follows:
58 #define AAC_HOST_NORM_CMD_ENTRIES 8 /* command adapter->host,
60 #define AAC_HOST_HIGH_CMD_ENTRIES 4 /* command adapter->host,
62 #define AAC_ADAP_NORM_CMD_ENTRIES 512 /* command host->adapter,
64 #define AAC_ADAP_HIGH_CMD_ENTRIES 4 /* command host->adapter,
66 #define AAC_HOST_NORM_RESP_ENTRIES 512 /* response, adapter->host,
68 #define AAC_HOST_HIGH_RESP_ENTRIES 4 /* response, adapter->host,
70 #define AAC_ADAP_NORM_RESP_ENTRIES 8 /* response, host->adapter,
72 #define AAC_ADAP_HIGH_RESP_ENTRIES 4 /* response, host->adapter,
75 #define AAC_TOTALQ_LENGTH (AAC_HOST_HIGH_CMD_ENTRIES + \
76 AAC_HOST_NORM_CMD_ENTRIES + \
77 AAC_ADAP_HIGH_CMD_ENTRIES + \
78 AAC_ADAP_NORM_CMD_ENTRIES + \
79 AAC_HOST_HIGH_RESP_ENTRIES + \
80 AAC_HOST_NORM_RESP_ENTRIES + \
81 AAC_ADAP_HIGH_RESP_ENTRIES + \
82 AAC_ADAP_NORM_RESP_ENTRIES)
83 #define AAC_QUEUE_COUNT 8
84 #define AAC_QUEUE_ALIGN 16
86 struct aac_queue_entry {
87 u_int32_t aq_fib_size; /* FIB size in bytes */
88 u_int32_t aq_fib_addr; /* receiver-space address of the FIB */
91 #define AAC_PRODUCER_INDEX 0
92 #define AAC_CONSUMER_INDEX 1
95 * Table of queue indices and queues used to communicate with the
96 * controller. This structure must be aligned to AAC_QUEUE_ALIGN
98 struct aac_queue_table {
99 /* queue consumer/producer indexes (layout mandated by adapter) */
100 u_int32_t qt_qindex[AAC_QUEUE_COUNT][2];
102 /* queue entry structures (layout mandated by adapter) */
103 struct aac_queue_entry qt_HostNormCmdQueue [AAC_HOST_NORM_CMD_ENTRIES];
104 struct aac_queue_entry qt_HostHighCmdQueue [AAC_HOST_HIGH_CMD_ENTRIES];
105 struct aac_queue_entry qt_AdapNormCmdQueue [AAC_ADAP_NORM_CMD_ENTRIES];
106 struct aac_queue_entry qt_AdapHighCmdQueue [AAC_ADAP_HIGH_CMD_ENTRIES];
107 struct aac_queue_entry qt_HostNormRespQueue[AAC_HOST_NORM_RESP_ENTRIES];
108 struct aac_queue_entry qt_HostHighRespQueue[AAC_HOST_HIGH_RESP_ENTRIES];
109 struct aac_queue_entry qt_AdapNormRespQueue[AAC_ADAP_NORM_RESP_ENTRIES];
110 struct aac_queue_entry qt_AdapHighRespQueue[AAC_ADAP_HIGH_RESP_ENTRIES];
116 * Note that we base these at 0 in order to use them as array indices. Adaptec
117 * used base 1 for some unknown reason, and sorted them in a different order.
119 #define AAC_HOST_NORM_CMD_QUEUE 0
120 #define AAC_HOST_HIGH_CMD_QUEUE 1
121 #define AAC_ADAP_NORM_CMD_QUEUE 2
122 #define AAC_ADAP_HIGH_CMD_QUEUE 3
123 #define AAC_HOST_NORM_RESP_QUEUE 4
124 #define AAC_HOST_HIGH_RESP_QUEUE 5
125 #define AAC_ADAP_NORM_RESP_QUEUE 6
126 #define AAC_ADAP_HIGH_RESP_QUEUE 7
129 * List structure used to chain FIBs (used by the adapter - we hang FIBs off
130 * our private command structure and don't touch these)
132 struct aac_fib_list_entry {
138 * FIB (FSA Interface Block?); this is the datastructure passed between the host
141 struct aac_fib_header {
147 u_int16_t SenderSize;
148 u_int32_t SenderFibAddress;
149 u_int32_t ReceiverFibAddress;
150 u_int32_t SenderData;
153 u_int32_t ReceiverTimeStart;
154 u_int32_t ReceiverTimeDone;
156 struct aac_fib_list_entry FibLinks;
160 #define AAC_FIB_DATASIZE (512 - sizeof(struct aac_fib_header))
163 struct aac_fib_header Header;
164 u_int8_t data[AAC_FIB_DATASIZE];
171 TestCommandResponse = 1,
172 TestAdapterCommand = 2,
174 /* lowlevel and comm commands */
175 LastTestCommand = 100,
176 ReinitHostNormCommandQueue = 101,
177 ReinitHostHighCommandQueue = 102,
178 ReinitHostHighRespQueue = 103,
179 ReinitHostNormRespQueue = 104,
180 ReinitAdapNormCommandQueue = 105,
181 ReinitAdapHighCommandQueue = 107,
182 ReinitAdapHighRespQueue = 108,
183 ReinitAdapNormRespQueue = 109,
184 InterfaceShutdown = 110,
190 RequestPerfData = 125,
191 SetInterruptDefTimer= 126,
192 SetInterruptDefCount= 127,
193 GetInterruptDefStatus= 128,
194 LastCommCommand = 129,
196 /* filesystem commands */
199 HostFileSystem = 302,
200 LastFileSystemCommand = 303,
202 /* Container Commands */
203 ContainerCommand = 500,
204 ContainerCommand64 = 501,
207 /* Cluster Commands */
208 ClusterCommand = 550,
210 /* Scsi Port commands (scsi passthrough) */
211 ScsiPortCommand = 600,
212 ScsiPortCommandU64 = 601,
213 SataPortCommandU64 = 602,
214 SasSmpPassThrough = 603,
215 SasRequestPhyInfo = 612,
217 /* misc house keeping and generic adapter initiated commands */
220 FsaHostShutdown = 702,
221 RequestAdapterInfo = 703,
222 IsAdapterPaused = 704,
224 RequestSupplementAdapterInfo = 706, /* Supp. Info for set in UCC
225 * use only if supported
226 * (RequestAdapterInfo first) */
227 LastMiscCommand = 707,
229 OnLineDiagnostic = 800,
230 FduAdapterTest = 801,
231 RequestCompatibilityId = 802,
232 AdapterEnvironmentInfo = 803, /* temp. sensors */
233 NvsramEventLog = 900,
234 ResetNvsramEventLogPointers = 901,
235 EnableEventLog = 902,
236 DisableEventLog = 903,
237 EncryptedKeyTransportFIB= 904,
238 KeyableFeaturesFIB= 905
244 #define AAC_FIBTYPE_TFIB 1
245 #define AAC_FIBTYPE_TQE 2
246 #define AAC_FIBTYPE_TCTPERF 3
251 #define AAC_FIBSTATE_HOSTOWNED (1<<0) /* owned by the host */
252 #define AAC_FIBSTATE_ADAPTEROWNED (1<<1) /* owned by the adapter */
253 #define AAC_FIBSTATE_INITIALISED (1<<2) /* initialised */
254 #define AAC_FIBSTATE_EMPTY (1<<3) /* empty */
255 #define AAC_FIBSTATE_FROMPOOL (1<<4) /* allocated from pool */
256 #define AAC_FIBSTATE_FROMHOST (1<<5) /* sent from the host */
257 #define AAC_FIBSTATE_FROMADAP (1<<6) /* sent from the adapter */
258 #define AAC_FIBSTATE_REXPECTED (1<<7) /* response is expected */
259 #define AAC_FIBSTATE_RNOTEXPECTED (1<<8) /* response is not expected */
260 #define AAC_FIBSTATE_DONEADAP (1<<9) /* processed by the adapter */
261 #define AAC_FIBSTATE_DONEHOST (1<<10) /* processed by the host */
262 #define AAC_FIBSTATE_HIGH (1<<11) /* high priority */
263 #define AAC_FIBSTATE_NORM (1<<12) /* normal priority */
264 #define AAC_FIBSTATE_ASYNC (1<<13)
265 #define AAC_FIBSTATE_ASYNCIO (1<<13) /* to be removed */
266 #define AAC_FIBSTATE_PAGEFILEIO (1<<14) /* to be removed */
267 #define AAC_FIBSTATE_SHUTDOWN (1<<15)
268 #define AAC_FIBSTATE_LAZYWRITE (1<<16) /* to be removed */
269 #define AAC_FIBSTATE_ADAPMICROFIB (1<<17)
270 #define AAC_FIBSTATE_BIOSFIB (1<<18)
271 #define AAC_FIBSTATE_FAST_RESPONSE (1<<19) /* fast response capable */
272 #define AAC_FIBSTATE_APIFIB (1<<20)
277 #define AAC_ERROR_NORMAL 0x00
278 #define AAC_ERROR_PENDING 0x01
279 #define AAC_ERROR_FATAL 0x02
280 #define AAC_ERROR_INVALID_QUEUE 0x03
281 #define AAC_ERROR_NOENTRIES 0x04
282 #define AAC_ERROR_SENDFAILED 0x05
283 #define AAC_ERROR_INVALID_QUEUE_PRIORITY 0x06
284 #define AAC_ERROR_FIB_ALLOCATION_FAILED 0x07
285 #define AAC_ERROR_FIB_DEALLOCATION_FAILED 0x08
288 * Adapter Init Structure: this is passed to the adapter with the
289 * AAC_MONKER_INITSTRUCT command to point it at our control structures.
291 struct aac_adapter_init {
292 u_int32_t InitStructRevision;
293 #define AAC_INIT_STRUCT_REVISION 3
294 #define AAC_INIT_STRUCT_REVISION_4 4
295 u_int32_t MiniPortRevision;
296 #define AAC_INIT_STRUCT_MINIPORT_REVISION 1
297 u_int32_t FilesystemRevision;
298 u_int32_t CommHeaderAddress;
299 u_int32_t FastIoCommAreaAddress;
300 u_int32_t AdapterFibsPhysicalAddress;
301 u_int32_t AdapterFibsVirtualAddress;
302 u_int32_t AdapterFibsSize;
303 u_int32_t AdapterFibAlign;
304 u_int32_t PrintfBufferAddress;
305 u_int32_t PrintfBufferSize;
306 #define AAC_PAGE_SIZE 4096
307 u_int32_t HostPhysMemPages;
308 u_int32_t HostElapsedSeconds;
309 /* ADAPTER_INIT_STRUCT_REVISION_4 begins here */
310 u_int32_t InitFlags; /* flags for supported features */
311 #define AAC_INITFLAGS_NEW_COMM_SUPPORTED 1
312 #define AAC_INITFLAGS_DRIVER_USES_UTC_TIME 0x10
313 #define AAC_INITFLAGS_DRIVER_SUPPORTS_PM 0x20
314 u_int32_t MaxIoCommands; /* max outstanding commands */
315 u_int32_t MaxIoSize; /* largest I/O command */
316 u_int32_t MaxFibSize; /* largest FIB to adapter */
336 CT_RAID10, /* stripe of mirror */
337 CT_RAID00, /* stripe of stripe */
338 CT_VOLUME_OF_MIRRORS, /* volume of mirror */
339 CT_PSEUDO_RAID3, /* really raid4 */
340 CT_RAID50, /* stripe of raid5 */
341 CT_RAID5D, /* raid5 distributed hot-sparing */
343 CT_RAID1E, /* extended raid1 mirroring */
349 * Host-addressable object types
352 FT_REG = 1, /* regular file */
353 FT_DIR, /* directory */
354 FT_BLK, /* "block" device - reserved */
355 FT_CHR, /* "character special" device - reserved */
356 FT_LNK, /* symbolic link */
357 FT_SOCK, /* socket */
359 FT_FILESYS, /* ADAPTEC's "FSA"(tm) filesystem */
360 FT_DRIVE, /* physical disk - addressable in scsi by b/t/l */
361 FT_SLICE, /* virtual disk - raw volume - slice */
362 FT_PARTITION, /* FSA partition - carved out of a slice - building
363 * block for containers */
364 FT_VOLUME, /* Container - Volume Set */
365 FT_STRIPE, /* Container - Stripe Set */
366 FT_MIRROR, /* Container - Mirror Set */
367 FT_RAID5, /* Container - Raid 5 Set */
368 FT_DATABASE /* Storage object with "foreign" content manager */
372 * Host-side scatter/gather list for 32-bit commands.
374 struct aac_sg_entry {
376 u_int32_t SgByteCount;
379 struct aac_sg_entry64 {
381 u_int32_t SgByteCount;
384 struct aac_sg_entryraw {
385 u_int32_t Next; /* reserved for FW use */
386 u_int32_t Prev; /* reserved for FW use */
388 u_int32_t SgByteCount;
389 u_int32_t Flags; /* reserved for FW use */
392 struct aac_sg_table {
394 struct aac_sg_entry SgEntry[0];
398 * Host-side scatter/gather list for 64-bit commands.
400 struct aac_sg_table64 {
402 struct aac_sg_entry64 SgEntry64[0];
406 * s/g list for raw commands
408 struct aac_sg_tableraw {
410 struct aac_sg_entryraw SgEntryRaw[0];
414 * Container creation data
416 struct aac_container_creation {
417 u_int8_t ViaBuildNumber;
418 u_int8_t MicroSecond;
419 u_int8_t Via; /* 1 = FSU, 2 = API, etc. */
420 u_int8_t YearsSince1900;
421 u_int32_t Month:4; /* 1-12 */
422 u_int32_t Day:6; /* 1-32 */
423 u_int32_t Hour:6; /* 0-23 */
424 u_int32_t Minute:6; /* 0-59 */
425 u_int32_t Second:6; /* 0-59 */
426 u_int64_t ViaAdapterSerialNumber;
430 * Revision number handling
455 u_int32_t buildNumber;
459 * Adapter Information
531 OEM_FLAVOR_ADAPTEC = 1,
548 * XXX the aac-2622 with no battery present reports PLATFORM_BAT_OPT_PRESENT
552 PLATFORM_BAT_REQ_PRESENT = 1, /* BATTERY REQUIRED AND PRESENT */
553 PLATFORM_BAT_REQ_NOTPRESENT, /* BATTERY REQUIRED AND NOT PRESENT */
554 PLATFORM_BAT_OPT_PRESENT, /* BATTERY OPTIONAL AND PRESENT */
555 PLATFORM_BAT_OPT_NOTPRESENT, /* BATTERY OPTIONAL AND NOT PRESENT */
556 PLATFORM_BAT_NOT_SUPPORTED /* BATTERY NOT SUPPORTED */
557 } AAC_BatteryPlatform;
560 * options supported by this board
561 * there has to be a one to one mapping of these defines and the ones in
562 * fsaapi.h, search for FSA_SUPPORT_SNAPSHOT
564 #define AAC_SUPPORTED_SNAPSHOT 0x01
565 #define AAC_SUPPORTED_CLUSTERS 0x02
566 #define AAC_SUPPORTED_WRITE_CACHE 0x04
567 #define AAC_SUPPORTED_64BIT_DATA 0x08
568 #define AAC_SUPPORTED_HOST_TIME_FIB 0x10
569 #define AAC_SUPPORTED_RAID50 0x20
570 #define AAC_SUPPORTED_4GB_WINDOW 0x40
571 #define AAC_SUPPORTED_SCSI_UPGRADEABLE 0x80
572 #define AAC_SUPPORTED_SOFT_ERR_REPORT 0x100
573 #define AAC_SUPPORTED_NOT_RECONDITION 0x200
574 #define AAC_SUPPORTED_SGMAP_HOST64 0x400
575 #define AAC_SUPPORTED_ALARM 0x800
576 #define AAC_SUPPORTED_NONDASD 0x1000
577 #define AAC_SUPPORTED_SCSI_MANAGED 0x2000
578 #define AAC_SUPPORTED_RAID_SCSI_MODE 0x4000
579 #define AAC_SUPPORTED_SUPPLEMENT_ADAPTER_INFO 0x10000
580 #define AAC_SUPPORTED_NEW_COMM 0x20000
581 #define AAC_SUPPORTED_64BIT_ARRAYSIZE 0x40000
582 #define AAC_SUPPORTED_HEAT_SENSOR 0x80000
585 * Structure used to respond to a RequestAdapterInfo fib.
587 struct aac_adapter_info {
588 AAC_Platform PlatformBase; /* adapter type */
589 AAC_CpuType CpuArchitecture; /* adapter CPU type */
590 AAC_CpuSubType CpuVariant; /* adapter CPU subtype */
591 u_int32_t ClockSpeed; /* adapter CPU clockspeed */
592 u_int32_t ExecutionMem; /* adapter Execution Memory
594 u_int32_t BufferMem; /* adapter Data Memory */
595 u_int32_t TotalMem; /* adapter Total Memory */
596 struct FsaRevision KernelRevision; /* adapter Kernel Software
598 struct FsaRevision MonitorRevision; /* adapter Monitor/Diagnostic
599 * Software Revision */
600 struct FsaRevision HardwareRevision;/* TBD */
601 struct FsaRevision BIOSRevision; /* adapter BIOS Revision */
602 u_int32_t ClusteringEnabled;
603 u_int32_t ClusterChannelMask;
604 u_int64_t SerialNumber;
605 AAC_BatteryPlatform batteryPlatform;
606 u_int32_t SupportedOptions; /* supported features of this
608 AAC_OemFlavor OemVariant;
612 * Structure used to respond to a RequestSupplementAdapterInfo fib.
615 u_int8_t AssemblyPn[8];
617 u_int8_t BatteryFruPn[8];
618 u_int8_t EcVersionString[8];
622 #define MFG_PCBA_SERIAL_NUMBER_WIDTH 12
623 #define MFG_WWN_WIDTH 8
625 struct aac_supplement_adapter_info {
626 /* The assigned Adapter Type Text, extra byte for null termination */
627 int8_t AdapterTypeText[17+1];
628 /* Pad for the text above */
630 /* Size in bytes of the memory that is flashed */
631 u_int32_t FlashMemoryByteSize;
632 /* The assigned IMAGEID_xxx for this adapter */
633 u_int32_t FlashImageId;
635 * The maximum number of Phys available on a SATA/SAS
636 * Controller, 0 otherwise
638 u_int32_t MaxNumberPorts;
639 /* Version of expansion area */
641 u_int32_t FeatureBits;
643 u_int8_t ReservedPad0[3];
644 u_int8_t BuildDate[12];
645 /* The current number of Ports on a SAS controller, 0 otherwise */
646 u_int32_t CurrentNumberPorts;
648 struct vpd_info VpdInfo;
650 /* Firmware Revision (Vmaj.min-dash.) */
651 struct FsaRevision FlashFirmwareRevision;
652 u_int32_t RaidTypeMorphOptions;
653 /* Firmware's boot code Revision (Vmaj.min-dash.) */
654 struct FsaRevision FlashFirmwareBootRevision;
655 /* PCBA serial no. from th MFG sector */
656 u_int8_t MfgPcbaSerialNo[MFG_PCBA_SERIAL_NUMBER_WIDTH];
657 /* WWN from the MFG sector */
658 u_int8_t MfgWWNName[MFG_WWN_WIDTH];
659 /* Growth Area for future expansion ((7*4) - 12 - 8)/4 = 2 words */
660 u_int32_t ReservedGrowth[2];
664 * Monitor/Kernel interface.
668 * Synchronous commands to the monitor/kernel.
670 #define AAC_MONKER_BREAKPOINT 0x04
671 #define AAC_MONKER_INITSTRUCT 0x05
672 #define AAC_MONKER_SYNCFIB 0x0c
673 #define AAC_MONKER_GETKERNVER 0x11
674 #define AAC_MONKER_POSTRESULTS 0x14
675 #define AAC_MONKER_GETINFO 0x19
676 #define AAC_MONKER_GETDRVPROP 0x23
677 #define AAC_MONKER_RCVTEMP 0x25
678 #define AAC_MONKER_GETCOMMPREF 0x26
679 #define AAC_MONKER_REINIT 0xee
682 * Adapter Status Register
684 * Phase Staus mailbox is 32bits:
685 * <31:16> = Phase Status
688 * The adapter reports its present state through the phase. Only
689 * a single phase should be ever be set. Each phase can have multiple
690 * phase status bits to provide more detailed information about the
691 * state of the adapter.
693 #define AAC_SELF_TEST_FAILED 0x00000004
694 #define AAC_MONITOR_PANIC 0x00000020
695 #define AAC_UP_AND_RUNNING 0x00000080
696 #define AAC_KERNEL_PANIC 0x00000100
699 * Data types relating to control and monitoring of the NVRAM/WriteCache
703 #define AAC_NFILESYS 24 /* maximum number of filesystems */
706 * NVRAM/Write Cache subsystem states
709 NVSTATUS_DISABLED = 0, /* present, clean, not being used */
710 NVSTATUS_ENABLED, /* present, possibly dirty, ready for use */
711 NVSTATUS_ERROR, /* present, dirty, contains dirty data */
712 NVSTATUS_BATTERY, /* present, bad or low battery, may contain
714 NVSTATUS_UNKNOWN /* for bad/missing device */
718 * NVRAM/Write Cache subsystem battery component states
722 NVBATTSTATUS_NONE = 0, /* battery has no power or is not present */
723 NVBATTSTATUS_LOW, /* battery is low on power */
724 NVBATTSTATUS_OK, /* battery is okay - normal operation possible
725 * only in this state */
726 NVBATTSTATUS_RECONDITIONING /* no battery present - reconditioning
731 * Battery transition type
734 NVBATT_TRANSITION_NONE = 0, /* battery now has no power or is not
736 NVBATT_TRANSITION_LOW, /* battery is now low on power */
737 NVBATT_TRANSITION_OK /* battery is now okay - normal
738 * operation possible only in this
740 } AAC_NVBATT_TRANSITION;
743 * NVRAM Info structure returned for NVRAM_GetInfo call
745 struct aac_nvramdevinfo {
746 u_int32_t NV_Enabled; /* write caching enabled */
747 u_int32_t NV_Error; /* device in error state */
748 u_int32_t NV_NDirty; /* count of dirty NVRAM buffers */
749 u_int32_t NV_NActive; /* count of NVRAM buffers being
753 struct aac_nvraminfo {
754 AAC_NVSTATUS NV_Status; /* nvram subsystem status */
755 AAC_NVBATTSTATUS NV_BattStatus; /* battery status */
756 u_int32_t NV_Size; /* size of WriteCache NVRAM in
758 u_int32_t NV_BufSize; /* size of NVRAM buffers in
760 u_int32_t NV_NBufs; /* number of NVRAM buffers */
761 u_int32_t NV_NDirty; /* Num dirty NVRAM buffers */
762 u_int32_t NV_NClean; /* Num clean NVRAM buffers */
763 u_int32_t NV_NActive; /* Num NVRAM buffers being
765 u_int32_t NV_NBrokered; /* Num brokered NVRAM buffers */
766 struct aac_nvramdevinfo NV_DevInfo[AAC_NFILESYS]; /* per device
768 u_int32_t NV_BattNeedsReconditioning; /* boolean */
769 u_int32_t NV_TotalSize; /* size of all non-volatile
770 * memories in bytes */
774 * Data types relating to adapter-initiated FIBs
776 * Based on types and structures in <aifstruc.h>
783 AifJobStsSuccess = 1,
787 AifJobStsLastReportMarker = 100, /* All prior mean last report */
793 AifJobScsiMin = 1, /* Minimum value for Scsi operation */
794 AifJobScsiZero, /* SCSI device clear operation */
795 AifJobScsiVerify, /* SCSI device Verify operation NO
797 AifJobScsiExercise, /* SCSI device Exercise operation */
798 AifJobScsiVerifyRepair, /* SCSI device Verify operation WITH
800 AifJobScsiWritePattern, /* write pattern */
801 AifJobScsiMax = 99, /* Max Scsi value */
802 AifJobCtrMin, /* Min Ctr op value */
803 AifJobCtrZero, /* Container clear operation */
804 AifJobCtrCopy, /* Container copy operation */
805 AifJobCtrCreateMirror, /* Container Create Mirror operation */
806 AifJobCtrMergeMirror, /* Container Merge Mirror operation */
807 AifJobCtrScrubMirror, /* Container Scrub Mirror operation */
808 AifJobCtrRebuildRaid5, /* Container Rebuild Raid5 operation */
809 AifJobCtrScrubRaid5, /* Container Scrub Raid5 operation */
810 AifJobCtrMorph, /* Container morph operation */
811 AifJobCtrPartCopy, /* Container Partition copy operation */
812 AifJobCtrRebuildMirror, /* Container Rebuild Mirror operation */
813 AifJobCtrCrazyCache, /* crazy cache */
814 AifJobCtrCopyback, /* Container Copyback operation */
815 AifJobCtrCompactRaid5D, /* Container Compaction operation */
816 AifJobCtrExpandRaid5D, /* Container Expansion operation */
817 AifJobCtrRebuildRaid6, /* Container Rebuild Raid6 operation */
818 AifJobCtrScrubRaid6, /* Container Scrub Raid6 operation */
819 AifJobCtrSSBackup, /* Container snapshot backup task */
820 AifJobCtrMax = 199, /* Max Ctr type operation */
821 AifJobFsMin, /* Min Fs type operation */
822 AifJobFsCreate, /* File System Create operation */
823 AifJobFsVerify, /* File System Verify operation */
824 AifJobFsExtend, /* File System Extend operation */
825 AifJobFsMax = 299, /* Max Fs type operation */
826 AifJobApiFormatNTFS, /* Format a drive to NTFS */
827 AifJobApiFormatFAT, /* Format a drive to FAT */
828 AifJobApiUpdateSnapshot, /* update the read/write half of a
830 AifJobApiFormatFAT32, /* Format a drive to FAT32 */
831 AifJobApiMax = 399, /* Max API type operation */
832 AifJobCtlContinuousCtrVerify, /* Adapter operation */
833 AifJobCtlMax = 499 /* Max Adapter type operation */
836 struct aac_AifContainers {
837 u_int32_t src; /* from/master */
838 u_int32_t dst; /* to/slave */
841 union aac_AifJobClient {
842 struct aac_AifContainers container; /* For Container and
843 * filesystem progress
845 int32_t scsi_dh; /* For SCSI progress
849 struct aac_AifJobDesc {
850 u_int32_t jobID; /* DO NOT FILL IN! Will be
851 * filled in by AIF */
852 AAC_AifJobType type; /* Operation that is being
854 union aac_AifJobClient client; /* Details */
857 struct aac_AifJobProgressReport {
858 struct aac_AifJobDesc jd;
859 AAC_AifJobStatus status;
861 u_int32_t currentTick;
862 u_int32_t jobSpecificData1;
863 u_int32_t jobSpecificData2;
870 /* General application notifies start here */
871 AifEnGeneric = 1, /* Generic notification */
872 AifEnTaskComplete, /* Task has completed */
873 AifEnConfigChange, /* Adapter config change occurred */
874 AifEnContainerChange, /* Adapter specific container
875 * configuration change */
876 AifEnDeviceFailure, /* SCSI device failed */
877 AifEnMirrorFailover, /* Mirror failover started */
878 AifEnContainerEvent, /* Significant container event */
879 AifEnFileSystemChange, /* File system changed */
880 AifEnConfigPause, /* Container pause event */
881 AifEnConfigResume, /* Container resume event */
882 AifEnFailoverChange, /* Failover space assignment changed */
883 AifEnRAID5RebuildDone, /* RAID5 rebuild finished */
884 AifEnEnclosureManagement, /* Enclosure management event */
885 AifEnBatteryEvent, /* Significant NV battery event */
886 AifEnAddContainer, /* A new container was created. */
887 AifEnDeleteContainer, /* A container was deleted. */
888 AifEnSMARTEvent, /* SMART Event */
889 AifEnBatteryNeedsRecond, /* The battery needs reconditioning */
890 AifEnClusterEvent, /* Some cluster event */
891 AifEnDiskSetEvent, /* A disk set event occurred. */
892 AifEnContainerScsiEvent, /* a container event with no. and scsi id */
893 AifEnPicBatteryEvent, /* An event gen. by pic_battery.c for an ABM */
894 AifEnExpEvent, /* Exp. Event Type to replace CTPopUp messages */
895 AifEnRAID6RebuildDone, /* RAID6 rebuild finished */
896 AifEnSensorOverHeat, /* Heat Sensor indicate overheat */
897 AifEnSensorCoolDown, /* Heat Sensor ind. cooled down after overheat */
898 AifFeatureKeysModified, /* notif. of updated feature keys */
899 AifApplicationExpirationEvent, /* notif. on app. expiration status */
900 AifEnBackgroundConsistencyCheck,/* BCC notif. for NEC - DDTS 94700 */
901 AifEnAddJBOD, /* A new JBOD type drive was created (30) */
902 AifEnDeleteJBOD, /* A JBOD type drive was deleted (31) */
903 AifDriverNotifyStart=199, /* Notifies for host driver go here */
904 /* Host driver notifications start here */
905 AifDenMorphComplete, /* A morph operation completed */
906 AifDenVolumeExtendComplete /* Volume expand operation completed */
907 } AAC_AifEventNotifyType;
909 struct aac_AifEnsGeneric {
910 char text[132]; /* Generic text */
913 struct aac_AifEnsDeviceFailure {
914 u_int32_t deviceHandle; /* SCSI device handle */
917 struct aac_AifEnsMirrorFailover {
918 u_int32_t container; /* Container with failed element */
919 u_int32_t failedSlice; /* Old slice which failed */
920 u_int32_t creatingSlice; /* New slice used for auto-create */
923 struct aac_AifEnsContainerChange {
924 u_int32_t container[2]; /* container that changed, -1 if no
928 struct aac_AifEnsContainerEvent {
929 u_int32_t container; /* container number */
930 u_int32_t eventType; /* event type */
933 struct aac_AifEnsEnclosureEvent {
934 u_int32_t empID; /* enclosure management proc number */
935 u_int32_t unitID; /* unitId, fan id, power supply id,
936 * slot id, tempsensor id. */
937 u_int32_t eventType; /* event type */
941 AIF_EM_DRIVE_INSERTION=31,
943 } aac_AifEMEventType;
945 struct aac_AifEnsBatteryEvent {
946 AAC_NVBATT_TRANSITION transition_type; /* eg from low to ok */
947 AAC_NVBATTSTATUS current_state; /* current batt state */
948 AAC_NVBATTSTATUS prior_state; /* prev batt state */
951 struct aac_AifEnsDiskSetEvent {
958 CLUSTER_NULL_EVENT = 0,
959 CLUSTER_PARTNER_NAME_EVENT, /* change in partner hostname or
960 * adaptername from NULL to non-NULL */
961 /* (partner's agent may be up) */
962 CLUSTER_PARTNER_NULL_NAME_EVENT /* change in partner hostname or
963 * adaptername from non-null to NULL */
964 /* (partner has rebooted) */
965 } AAC_ClusterAifEvent;
967 struct aac_AifEnsClusterEvent {
968 AAC_ClusterAifEvent eventType;
971 struct aac_AifEventNotify {
972 AAC_AifEventNotifyType type;
974 struct aac_AifEnsGeneric EG;
975 struct aac_AifEnsDeviceFailure EDF;
976 struct aac_AifEnsMirrorFailover EMF;
977 struct aac_AifEnsContainerChange ECC;
978 struct aac_AifEnsContainerEvent ECE;
979 struct aac_AifEnsEnclosureEvent EEE;
980 struct aac_AifEnsBatteryEvent EBE;
981 struct aac_AifEnsDiskSetEvent EDS;
982 /* struct aac_AifEnsSMARTEvent ES;*/
983 struct aac_AifEnsClusterEvent ECLE;
988 * Adapter Initiated FIB command structures. Start with the adapter
989 * initiated FIBs that really come from the adapter, and get responded
992 #define AAC_AIF_REPORT_MAX_SIZE 64
995 AifCmdEventNotify = 1, /* Notify of event */
996 AifCmdJobProgress, /* Progress report */
997 AifCmdAPIReport, /* Report from other user of API */
998 AifCmdDriverNotify, /* Notify host driver of event */
999 AifReqJobList = 100, /* Gets back complete job list */
1000 AifReqJobsForCtr, /* Gets back jobs for specific container */
1001 AifReqJobsForScsi, /* Gets back jobs for specific SCSI device */
1002 AifReqJobReport, /* Gets back a specific job report or list */
1003 AifReqTerminateJob, /* Terminates job */
1004 AifReqSuspendJob, /* Suspends a job */
1005 AifReqResumeJob, /* Resumes a job */
1006 AifReqSendAPIReport, /* API generic report requests */
1007 AifReqAPIJobStart, /* Start a job from the API */
1008 AifReqAPIJobUpdate, /* Update a job report from the API */
1009 AifReqAPIJobFinish /* Finish a job from the API */
1012 struct aac_aif_command {
1013 AAC_AifCommand command; /* Tell host what type of
1015 u_int32_t seqNumber; /* To allow ordering of
1016 * reports (if necessary) */
1018 struct aac_AifEventNotify EN; /* Event notify */
1019 struct aac_AifJobProgressReport PR[1]; /* Progress report */
1020 u_int8_t AR[AAC_AIF_REPORT_MAX_SIZE];
1021 u_int8_t data[AAC_FIB_DATASIZE - 8];
1026 * Filesystem commands/data
1028 * The adapter has a very complex filesystem interface, most of which we ignore.
1029 * (And which seems not to be implemented, anyway.)
1064 SetFileSystemStatus,
1078 * Command status values
1099 ST_NAMETOOLONG = 63,
1105 ST_BADHANDLE = 10001,
1106 ST_NOT_SYNC = 10002,
1107 ST_BAD_COOKIE = 10003,
1109 ST_TOOSMALL = 10005,
1110 ST_SERVERFAULT = 10006,
1113 ST_NOTMOUNTED = 10009,
1114 ST_MAINTMODE = 10010,
1115 ST_STALEACL = 10011,
1116 ST_BUS_RESET = 20001
1120 * Volume manager commands
1122 typedef enum _VM_COMMANDS {
1131 VM_SliceBlockRead, /* raw access to configured storage objects */
1133 VM_DriveBlockRead, /* raw access to physical devices */
1135 VM_EnclosureMgt, /* enclosure management */
1136 VM_Unused, /* used to be diskset management */
1138 VM_CtPerf, /* performance test */
1144 VM_DrvErrTblLog, /* drive error table/log type of command */
1149 * "mountable object"
1153 char FileSystemName[16];
1154 struct aac_container_creation CreateInfo;
1158 u_int32_t ContentState;
1159 #define FSCS_READONLY 0x0002 /* XXX need more information
1164 u_int32_t AlterEgoId;
1165 u_int32_t CapacityHigh;
1168 struct aac_mntinfo {
1174 struct aac_mntinforesp {
1177 u_int32_t MntRespCount;
1178 struct aac_mntobj MntTable[1];
1182 * Container shutdown command.
1184 struct aac_closecommand {
1186 u_int32_t ContainerId;
1190 * Container Config Command
1192 #define CT_GET_SCSI_METHOD 64
1199 struct aac_ctcfg_resp {
1208 #define AAC_SCSI_MAX_PORTS 10
1209 #define AAC_BUS_NO_EXIST 0
1210 #define AAC_BUS_VALID 1
1211 #define AAC_BUS_FAULTED 2
1212 #define AAC_BUS_DISABLED 3
1213 #define GetBusInfo 0x9
1215 struct aac_getbusinf {
1216 u_int32_t ProbeComplete;
1218 u_int32_t TargetsPerBus;
1219 u_int8_t InitiatorBusId[AAC_SCSI_MAX_PORTS];
1220 u_int8_t BusValid[AAC_SCSI_MAX_PORTS];
1223 struct aac_vmioctl {
1229 u_int32_t IoctlBuf[1]; /* Placeholder? */
1232 struct aac_vmi_businf_resp {
1238 struct aac_getbusinf BusInf;
1242 #define AAC_BTL_TO_HANDLE(b, t, l) \
1243 (((b & 0x3f) << 7) | ((l & 0x7) << 4) | (t & 0xf))
1245 #define AAC_BTL_TO_HANDLE(b, t, l) \
1246 ((((u_int32_t)b & 0x0f) << 24) | \
1247 (((u_int32_t)l & 0xff) << 16) | \
1248 ((u_int32_t)t & 0xffff))
1250 #define GetDeviceProbeInfo 0x5
1252 struct aac_vmi_devinfo_resp {
1258 u_int8_t VendorId[8];
1259 u_int8_t ProductId[16];
1260 u_int8_t ProductRev[4];
1267 u_int32_t reserved[2];
1268 u_int8_t VendorSpecific[20];
1270 u_int32_t AAC_Managed:1;
1272 u_int32_t reserved2:6;
1276 u_int32_t ultraEnable:1,
1288 }; /* Do not pack */
1290 #define ResetBus 0x16
1291 struct aac_resetbus {
1292 u_int32_t BusNumber;
1296 * Write 'stability' options.
1304 * Commit level response for a write request.
1307 CMFILE_SYNC_NVRAM = 1,
1315 * Block read/write operations.
1316 * These structures are packed into the 'data' area in the FIB.
1319 struct aac_blockread {
1320 u_int32_t Command; /* not FSACommand! */
1321 u_int32_t ContainerId;
1322 u_int32_t BlockNumber;
1323 u_int32_t ByteCount;
1324 struct aac_sg_table SgMap; /* variable size */
1327 struct aac_blockread64 {
1329 u_int16_t ContainerId;
1330 u_int16_t SectorCount;
1331 u_int32_t BlockNumber;
1334 struct aac_sg_table64 SgMap64;
1337 struct aac_blockread_response {
1339 u_int32_t ByteCount;
1342 struct aac_blockwrite {
1343 u_int32_t Command; /* not FSACommand! */
1344 u_int32_t ContainerId;
1345 u_int32_t BlockNumber;
1346 u_int32_t ByteCount;
1348 struct aac_sg_table SgMap; /* variable size */
1351 struct aac_blockwrite64 {
1352 u_int32_t Command; /* not FSACommand! */
1353 u_int16_t ContainerId;
1354 u_int16_t SectorCount;
1355 u_int32_t BlockNumber;
1358 struct aac_sg_table64 SgMap64; /* variable size */
1361 struct aac_blockwrite_response {
1363 u_int32_t ByteCount;
1364 u_int32_t Committed;
1368 u_int64_t BlockNumber;
1369 u_int32_t ByteCount;
1370 u_int16_t ContainerId;
1371 u_int16_t Flags; /* 0: W, 1: R */
1372 u_int16_t BpTotal; /* reserved for FW use */
1373 u_int16_t BpComplete; /* reserved for FW use */
1374 struct aac_sg_tableraw SgMapRaw; /* variable size */
1378 * Container shutdown command.
1380 struct aac_close_command {
1382 u_int32_t ContainerId;
1386 * SCSI Passthrough structures
1396 u_int32_t retry_limit;
1399 struct aac_sg_table sg_map;
1403 AAC_SRB_FUNC_EXECUTE_SCSI = 0x00,
1404 AAC_SRB_FUNC_CLAIM_DEVICE,
1405 AAC_SRB_FUNC_IO_CONTROL,
1406 AAC_SRB_FUNC_RECEIVE_EVENT,
1407 AAC_SRB_FUNC_RELEASE_QUEUE,
1408 AAC_SRB_FUNC_ATTACH_DEVICE,
1409 AAC_SRB_FUNC_RELEASE_DEVICE,
1410 AAC_SRB_FUNC_SHUTDOWN,
1412 AAC_SRB_FUNC_ABORT_COMMAND = 0x10,
1413 AAC_SRB_FUNC_RELEASE_RECOVERY,
1414 AAC_SRB_FUNC_RESET_BUS,
1415 AAC_SRB_FUNC_RESET_DEVICE,
1416 AAC_SRB_FUNC_TERMINATE_IO,
1417 AAC_SRB_FUNC_FLUSH_QUEUE,
1418 AAC_SRB_FUNC_REMOVE_DEVICE,
1419 AAC_SRB_FUNC_DOMAIN_VALIDATION
1422 #define AAC_SRB_FLAGS_NO_DATA_XFER 0x0000
1423 #define AAC_SRB_FLAGS_DISABLE_DISCONNECT 0x0004
1424 #define AAC_SRB_FLAGS_DISABLE_SYNC_TRANSFER 0x0008
1425 #define AAC_SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x0010
1426 #define AAC_SRB_FLAGS_DISABLE_AUTOSENSE 0x0020
1427 #define AAC_SRB_FLAGS_DATA_IN 0x0040
1428 #define AAC_SRB_FLAGS_DATA_OUT 0x0080
1429 #define AAC_SRB_FLAGS_UNSPECIFIED_DIRECTION \
1430 (AAC_SRB_FLAGS_DATA_IN | AAC_SRB_FLAGS_DATA_OUT)
1432 #define AAC_HOST_SENSE_DATA_MAX 30
1434 struct aac_srb_response {
1435 u_int32_t fib_status;
1436 u_int32_t srb_status;
1437 u_int32_t scsi_status;
1439 u_int32_t sense_len;
1440 u_int8_t sense[AAC_HOST_SENSE_DATA_MAX];
1444 * Status codes for SCSI passthrough commands. Since they are based on ASPI,
1445 * they also exactly match CAM status codes in both enumeration and meaning.
1446 * They seem to also be used as status codes for synchronous FIBs.
1449 AAC_SRB_STS_PENDING = 0x00,
1450 AAC_SRB_STS_SUCCESS,
1451 AAC_SRB_STS_ABORTED,
1452 AAC_SRB_STS_ABORT_FAILED,
1455 AAC_SRB_STS_INVALID_REQUEST,
1456 AAC_SRB_STS_INVALID_PATH_ID,
1457 AAC_SRB_STS_NO_DEVICE,
1458 AAC_SRB_STS_TIMEOUT,
1459 AAC_SRB_STS_SELECTION_TIMEOUT,
1460 AAC_SRB_STS_COMMAND_TIMEOUT,
1461 AAC_SRB_STS_MESSAGE_REJECTED = 0x0D,
1462 AAC_SRB_STS_BUS_RESET,
1463 AAC_SRB_STS_PARITY_ERROR,
1464 AAC_SRB_STS_REQUEST_SENSE_FAILED,
1466 AAC_SRB_STS_DATA_OVERRUN,
1467 AAC_SRB_STS_UNEXPECTED_BUS_FREE,
1468 AAC_SRB_STS_PHASE_SEQUENCE_FAILURE,
1469 AAC_SRB_STS_BAD_SRB_BLOCK_LENGTH,
1470 AAC_SRB_STS_REQUEST_FLUSHED,
1471 AAC_SRB_STS_INVALID_LUN = 0x20,
1472 AAC_SRB_STS_INVALID_TARGET_ID,
1473 AAC_SRB_STS_BAD_FUNCTION,
1474 AAC_SRB_STS_ERROR_RECOVERY
1478 * Register definitions for the Adaptec AAC-364 'Jalapeno I/II' adapters, based
1479 * on the SA110 'StrongArm'.
1482 #define AAC_SA_DOORBELL0_CLEAR 0x98 /* doorbell 0 (adapter->host) */
1483 #define AAC_SA_DOORBELL0_SET 0x9c
1484 #define AAC_SA_DOORBELL0 0x9c
1485 #define AAC_SA_MASK0_CLEAR 0xa0
1486 #define AAC_SA_MASK0_SET 0xa4
1488 #define AAC_SA_DOORBELL1_CLEAR 0x9a /* doorbell 1 (host->adapter) */
1489 #define AAC_SA_DOORBELL1_SET 0x9e
1490 #define AAC_SA_DOORBELL1 0x9e
1491 #define AAC_SA_MASK1_CLEAR 0xa2
1492 #define AAC_SA_MASK1_SET 0xa6
1494 #define AAC_SA_MAILBOX 0xa8 /* mailbox (20 bytes) */
1495 #define AAC_SA_FWSTATUS 0xc4
1498 * Register definitions for the Adaptec 'Pablano' adapters, based on the i960Rx,
1499 * and other related adapters.
1502 #define AAC_RX_OMR0 0x18 /* outbound message register 0 */
1503 #define AAC_RX_OMR1 0x1c /* outbound message register 1 */
1504 #define AAC_RX_IDBR 0x20 /* inbound doorbell register */
1505 #define AAC_RX_IISR 0x24 /* inbound interrupt status register */
1506 #define AAC_RX_IIMR 0x28 /* inbound interrupt mask register */
1507 #define AAC_RX_ODBR 0x2c /* outbound doorbell register */
1508 #define AAC_RX_OISR 0x30 /* outbound interrupt status register */
1509 #define AAC_RX_OIMR 0x34 /* outbound interrupt mask register */
1510 #define AAC_RX_IQUE 0x40 /* inbound queue */
1511 #define AAC_RX_OQUE 0x44 /* outbound queue */
1513 #define AAC_RX_MAILBOX 0x50 /* mailbox (20 bytes) */
1514 #define AAC_RX_FWSTATUS 0x6c
1517 * Register definitions for the Adaptec 'Rocket' RAID-On-Chip adapters.
1518 * Unsurprisingly, it's quite similar to the i960!
1521 #define AAC_RKT_OMR0 0x18 /* outbound message register 0 */
1522 #define AAC_RKT_OMR1 0x1c /* outbound message register 1 */
1523 #define AAC_RKT_IDBR 0x20 /* inbound doorbell register */
1524 #define AAC_RKT_IISR 0x24 /* inbound interrupt status register */
1525 #define AAC_RKT_IIMR 0x28 /* inbound interrupt mask register */
1526 #define AAC_RKT_ODBR 0x2c /* outbound doorbell register */
1527 #define AAC_RKT_OISR 0x30 /* outbound interrupt status register */
1528 #define AAC_RKT_OIMR 0x34 /* outbound interrupt mask register */
1529 #define AAC_RKT_IQUE 0x40 /* inbound queue */
1530 #define AAC_RKT_OQUE 0x44 /* outbound queue */
1532 #define AAC_RKT_MAILBOX 0x1000 /* mailbox */
1533 #define AAC_RKT_FWSTATUS 0x101c /* Firmware Status (mailbox 7) */
1536 * Common bit definitions for the doorbell registers.
1540 * Status bits in the doorbell registers.
1542 #define AAC_DB_SYNC_COMMAND (1<<0) /* send/completed synchronous FIB */
1543 #define AAC_DB_COMMAND_READY (1<<1) /* posted one or more commands */
1544 #define AAC_DB_RESPONSE_READY (1<<2) /* one or more commands complete */
1545 #define AAC_DB_COMMAND_NOT_FULL (1<<3) /* command queue not full */
1546 #define AAC_DB_RESPONSE_NOT_FULL (1<<4) /* response queue not full */
1549 * The adapter can request the host print a message by setting the
1550 * DB_PRINTF flag in DOORBELL0. The driver responds by collecting the
1551 * message from the printf buffer, clearing the DB_PRINTF flag in
1552 * DOORBELL0 and setting it in DOORBELL1.
1553 * (ODBR and IDBR respectively for the i960Rx adapters)
1555 #define AAC_DB_PRINTF (1<<5) /* adapter requests host printf */
1556 #define AAC_PRINTF_DONE (1<<5) /* Host completed printf processing */
1559 * Mask containing the interrupt bits we care about. We don't anticipate (or
1560 * want) interrupts not in this mask.
1562 #define AAC_DB_INTERRUPTS (AAC_DB_COMMAND_READY | \
1563 AAC_DB_RESPONSE_READY | \
1565 #define AAC_DB_INT_NEW_COMM 0x08