xref: /freebsd/sys/dev/aac/aacreg.h (revision 9207b4cff7b8d483f4dd3c62266c2b58819eb7f9)
1 /*-
2  * Copyright (c) 2000 Michael Smith
3  * Copyright (c) 2000-2001 Scott Long
4  * Copyright (c) 2000 BSDi
5  * Copyright (c) 2001 Adaptec, Inc.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  *	$FreeBSD$
30  */
31 
32 /*
33  * Data structures defining the interface between the driver and the Adaptec
34  * 'FSA' adapters.  Note that many field names and comments here are taken
35  * verbatim from the Adaptec driver source in order to make comparing the
36  * two slightly easier.
37  */
38 
39 /*
40  * Misc. magic numbers.
41  */
42 #define AAC_MAX_CONTAINERS	64
43 #define AAC_BLOCK_SIZE		512
44 
45 /*
46  * Communications interface.
47  *
48  * Where datastructure layouts are closely parallel to the Adaptec sample code,
49  * retain their naming conventions (for now) to aid in cross-referencing.
50  */
51 
52 /*
53  * We establish 4 command queues and matching response queues.  Queues must
54  * be 16-byte aligned, and are sized as follows:
55  */
56 #define AAC_HOST_NORM_CMD_ENTRIES	8	/* command adapter->host,
57 						 * normal priority */
58 #define AAC_HOST_HIGH_CMD_ENTRIES	4	/* command adapter->host,
59 						 * high priority */
60 #define AAC_ADAP_NORM_CMD_ENTRIES	512	/* command host->adapter,
61 						 * normal priority */
62 #define AAC_ADAP_HIGH_CMD_ENTRIES	4	/* command host->adapter,
63 						 * high priority */
64 #define AAC_HOST_NORM_RESP_ENTRIES	512	/* response, adapter->host,
65 						 * normal priority */
66 #define AAC_HOST_HIGH_RESP_ENTRIES	4	/* response, adapter->host,
67 						 * high priority */
68 #define AAC_ADAP_NORM_RESP_ENTRIES	8	/* response, host->adapter,
69 						 * normal priority */
70 #define AAC_ADAP_HIGH_RESP_ENTRIES	4	/* response, host->adapter,
71 						 * high priority */
72 
73 #define AAC_TOTALQ_LENGTH	(AAC_HOST_HIGH_CMD_ENTRIES +	\
74 				 AAC_HOST_NORM_CMD_ENTRIES +	\
75 				 AAC_ADAP_HIGH_CMD_ENTRIES +	\
76 				 AAC_ADAP_NORM_CMD_ENTRIES +	\
77 				 AAC_HOST_HIGH_RESP_ENTRIES +	\
78 				 AAC_HOST_NORM_RESP_ENTRIES +	\
79 				 AAC_ADAP_HIGH_RESP_ENTRIES +	\
80 				 AAC_ADAP_NORM_RESP_ENTRIES)
81 #define AAC_QUEUE_COUNT		8
82 #define AAC_QUEUE_ALIGN		16
83 
84 struct aac_queue_entry {
85 	u_int32_t	aq_fib_size;	/* FIB size in bytes */
86 	u_int32_t	aq_fib_addr;	/* receiver-space address of the FIB */
87 } __attribute__ ((packed));
88 
89 #define AAC_PRODUCER_INDEX	0
90 #define AAC_CONSUMER_INDEX	1
91 
92 /*
93  * Table of queue indices and queues used to communicate with the
94  * controller.  This structure must be aligned to AAC_QUEUE_ALIGN
95  */
96 struct aac_queue_table {
97 	/* queue consumer/producer indexes (layout mandated by adapter) */
98 	u_int32_t			qt_qindex[AAC_QUEUE_COUNT][2];
99 
100 	/* queue entry structures (layout mandated by adapter) */
101 	struct aac_queue_entry qt_HostNormCmdQueue [AAC_HOST_NORM_CMD_ENTRIES];
102 	struct aac_queue_entry qt_HostHighCmdQueue [AAC_HOST_HIGH_CMD_ENTRIES];
103 	struct aac_queue_entry qt_AdapNormCmdQueue [AAC_ADAP_NORM_CMD_ENTRIES];
104 	struct aac_queue_entry qt_AdapHighCmdQueue [AAC_ADAP_HIGH_CMD_ENTRIES];
105 	struct aac_queue_entry qt_HostNormRespQueue[AAC_HOST_NORM_RESP_ENTRIES];
106 	struct aac_queue_entry qt_HostHighRespQueue[AAC_HOST_HIGH_RESP_ENTRIES];
107 	struct aac_queue_entry qt_AdapNormRespQueue[AAC_ADAP_NORM_RESP_ENTRIES];
108 	struct aac_queue_entry qt_AdapHighRespQueue[AAC_ADAP_HIGH_RESP_ENTRIES];
109 } __attribute__ ((packed));
110 
111 /*
112  * Queue names
113  *
114  * Note that we base these at 0 in order to use them as array indices.  Adaptec
115  * used base 1 for some unknown reason, and sorted them in a different order.
116  */
117 #define AAC_HOST_NORM_CMD_QUEUE		0
118 #define AAC_HOST_HIGH_CMD_QUEUE		1
119 #define AAC_ADAP_NORM_CMD_QUEUE		2
120 #define AAC_ADAP_HIGH_CMD_QUEUE		3
121 #define AAC_HOST_NORM_RESP_QUEUE	4
122 #define AAC_HOST_HIGH_RESP_QUEUE	5
123 #define AAC_ADAP_NORM_RESP_QUEUE	6
124 #define AAC_ADAP_HIGH_RESP_QUEUE	7
125 
126 /*
127  * List structure used to chain FIBs (used by the adapter - we hang FIBs off
128  * our private command structure and don't touch these)
129  */
130 struct aac_fib_list_entry {
131 	struct fib_list_entry	*Flink;
132 	struct fib_list_entry	*Blink;
133 } __attribute__ ((packed));
134 
135 /*
136  * FIB (FSA Interface Block?); this is the datastructure passed between the host
137  * and adapter.
138  */
139 struct aac_fib_header {
140 	u_int32_t		XferState;
141 	u_int16_t		Command;
142 	u_int8_t		StructType;
143 	u_int8_t		Flags;
144 	u_int16_t		Size;
145 	u_int16_t		SenderSize;
146 	u_int32_t		SenderFibAddress;
147 	u_int32_t		ReceiverFibAddress;
148 	u_int32_t		SenderData;
149 	union {
150 		struct {
151 			u_int32_t	ReceiverTimeStart;
152 			u_int32_t	ReceiverTimeDone;
153 		} _s;
154 		struct aac_fib_list_entry FibLinks;
155 	} _u;
156 } __attribute__ ((packed));
157 
158 #define AAC_FIB_DATASIZE	(512 - sizeof(struct aac_fib_header))
159 
160 struct aac_fib {
161 	struct aac_fib_header	Header;
162 	u_int8_t			data[AAC_FIB_DATASIZE];
163 } __attribute__ ((packed));
164 
165 /*
166  * FIB commands
167  */
168 typedef enum {
169 	TestCommandResponse =		1,
170 	TestAdapterCommand =		2,
171 
172 	/* lowlevel and comm commands */
173 	LastTestCommand =		100,
174 	ReinitHostNormCommandQueue =	101,
175 	ReinitHostHighCommandQueue =	102,
176 	ReinitHostHighRespQueue =	103,
177 	ReinitHostNormRespQueue =	104,
178 	ReinitAdapNormCommandQueue =	105,
179 	ReinitAdapHighCommandQueue =	107,
180 	ReinitAdapHighRespQueue =	108,
181 	ReinitAdapNormRespQueue =	109,
182 	InterfaceShutdown =		110,
183 	DmaCommandFib =			120,
184 	StartProfile =			121,
185 	TermProfile =			122,
186 	SpeedTest =			123,
187 	TakeABreakPt =			124,
188 	RequestPerfData =		125,
189 	SetInterruptDefTimer=		126,
190 	SetInterruptDefCount=		127,
191 	GetInterruptDefStatus=		128,
192 	LastCommCommand =		129,
193 
194 	/* filesystem commands */
195 	NuFileSystem =			300,
196 	UFS =				301,
197 	HostFileSystem =		302,
198 	LastFileSystemCommand =		303,
199 
200 	/* Container Commands */
201 	ContainerCommand =		500,
202 	ContainerCommand64 =		501,
203 
204 	/* Cluster Commands */
205 	ClusterCommand =		550,
206 
207 	/* Scsi Port commands (scsi passthrough) */
208 	ScsiPortCommand =		600,
209 
210 	/* misc house keeping and generic adapter initiated commands */
211 	AifRequest =			700,
212 	CheckRevision =			701,
213 	FsaHostShutdown =		702,
214 	RequestAdapterInfo =		703,
215 	IsAdapterPaused =		704,
216 	SendHostTime =			705,
217 	LastMiscCommand =		706
218 } AAC_FibCommands;
219 
220 /*
221  * FIB types
222  */
223 #define AAC_FIBTYPE_TFIB	1
224 #define AAC_FIBTYPE_TQE		2
225 #define AAC_FIBTYPE_TCTPERF	3
226 
227 /*
228  * FIB transfer state
229  */
230 #define AAC_FIBSTATE_HOSTOWNED		(1<<0)	/* owned by the host */
231 #define AAC_FIBSTATE_ADAPTEROWNED	(1<<1)	/* owned by the adapter */
232 #define AAC_FIBSTATE_INITIALISED	(1<<2)	/* initialised */
233 #define AAC_FIBSTATE_EMPTY		(1<<3)	/* empty */
234 #define AAC_FIBSTATE_FROMPOOL		(1<<4)	/* allocated from pool */
235 #define AAC_FIBSTATE_FROMHOST		(1<<5)	/* sent from the host */
236 #define AAC_FIBSTATE_FROMADAP		(1<<6)	/* sent from the adapter */
237 #define AAC_FIBSTATE_REXPECTED		(1<<7)	/* response is expected */
238 #define AAC_FIBSTATE_RNOTEXPECTED	(1<<8)	/* response is not expected */
239 #define AAC_FIBSTATE_DONEADAP		(1<<9)	/* processed by the adapter */
240 #define AAC_FIBSTATE_DONEHOST		(1<<10)	/* processed by the host */
241 #define AAC_FIBSTATE_HIGH		(1<<11)	/* high priority */
242 #define AAC_FIBSTATE_NORM		(1<<12)	/* normal priority */
243 #define AAC_FIBSTATE_ASYNC		(1<<13)
244 #define AAC_FIBSTATE_ASYNCIO		(1<<13)	/* to be removed */
245 #define AAC_FIBSTATE_PAGEFILEIO		(1<<14)	/* to be removed */
246 #define AAC_FIBSTATE_SHUTDOWN		(1<<15)
247 #define AAC_FIBSTATE_LAZYWRITE		(1<<16)	/* to be removed */
248 #define AAC_FIBSTATE_ADAPMICROFIB	(1<<17)
249 #define AAC_FIBSTATE_BIOSFIB		(1<<18)
250 #define AAC_FIBSTATE_FAST_RESPONSE	(1<<19)	/* fast response capable */
251 #define AAC_FIBSTATE_APIFIB		(1<<20)
252 
253 /*
254  * FIB error values
255  */
256 #define AAC_ERROR_NORMAL			0x00
257 #define AAC_ERROR_PENDING			0x01
258 #define AAC_ERROR_FATAL				0x02
259 #define AAC_ERROR_INVALID_QUEUE			0x03
260 #define AAC_ERROR_NOENTRIES			0x04
261 #define AAC_ERROR_SENDFAILED			0x05
262 #define AAC_ERROR_INVALID_QUEUE_PRIORITY	0x06
263 #define AAC_ERROR_FIB_ALLOCATION_FAILED		0x07
264 #define AAC_ERROR_FIB_DEALLOCATION_FAILED	0x08
265 
266 /*
267  * Adapter Init Structure: this is passed to the adapter with the
268  * AAC_MONKER_INITSTRUCT command to point it at our control structures.
269  */
270 struct aac_adapter_init {
271 	u_int32_t	InitStructRevision;
272 #define AAC_INIT_STRUCT_REVISION	3
273 	u_int32_t	MiniPortRevision;
274 	u_int32_t	FilesystemRevision;
275 	u_int32_t	CommHeaderAddress;
276 	u_int32_t	FastIoCommAreaAddress;
277 	u_int32_t	AdapterFibsPhysicalAddress;
278 	void		*AdapterFibsVirtualAddress;
279 	u_int32_t	AdapterFibsSize;
280 	u_int32_t	AdapterFibAlign;
281 	u_int32_t	PrintfBufferAddress;
282 	u_int32_t	PrintfBufferSize;
283 	u_int32_t	HostPhysMemPages;
284 	u_int32_t	HostElapsedSeconds;
285 } __attribute__ ((packed));
286 
287 /*
288  * Shared data types
289  */
290 /*
291  * Container types
292  */
293 typedef enum {
294 	CT_NONE = 0,
295 	CT_VOLUME,
296 	CT_MIRROR,
297 	CT_STRIPE,
298 	CT_RAID5,
299 	CT_SSRW,
300 	CT_SSRO,
301 	CT_MORPH,
302 	CT_PASSTHRU,
303 	CT_RAID4,
304 	CT_RAID10,                  /* stripe of mirror */
305 	CT_RAID00,                  /* stripe of stripe */
306 	CT_VOLUME_OF_MIRRORS,       /* volume of mirror */
307 	CT_PSEUDO_RAID3,            /* really raid4 */
308 	CT_RAID50,		    /* stripe of raid5 */
309 } AAC_FSAVolType;
310 
311 /*
312  * Host-addressable object types
313  */
314 typedef enum {
315 	FT_REG = 1,     /* regular file */
316 	FT_DIR,         /* directory */
317 	FT_BLK,         /* "block" device - reserved */
318 	FT_CHR,         /* "character special" device - reserved */
319 	FT_LNK,         /* symbolic link */
320 	FT_SOCK,        /* socket */
321 	FT_FIFO,        /* fifo */
322 	FT_FILESYS,     /* ADAPTEC's "FSA"(tm) filesystem */
323 	FT_DRIVE,       /* physical disk - addressable in scsi by b/t/l */
324 	FT_SLICE,       /* virtual disk - raw volume - slice */
325 	FT_PARTITION,   /* FSA partition - carved out of a slice - building
326 			 * block for containers */
327 	FT_VOLUME,      /* Container - Volume Set */
328 	FT_STRIPE,      /* Container - Stripe Set */
329 	FT_MIRROR,      /* Container - Mirror Set */
330 	FT_RAID5,       /* Container - Raid 5 Set */
331 	FT_DATABASE     /* Storage object with "foreign" content manager */
332 } AAC_FType;
333 
334 /*
335  * Host-side scatter/gather list for 32-bit commands.
336  */
337 struct aac_sg_entry {
338 	u_int32_t	SgAddress;
339 	u_int32_t	SgByteCount;
340 } __attribute__ ((packed));
341 
342 struct aac_sg_table {
343 	u_int32_t		SgCount;
344 	struct aac_sg_entry	SgEntry[0];
345 } __attribute__ ((packed));
346 
347 /*
348  * Host-side scatter/gather list for 64-bit commands.
349  */
350 struct aac_sg_table64 {
351 	u_int8_t	SgCount;
352 	u_int8_t	SgSectorsPerPage;
353 	u_int16_t	SgByteOffset;
354 	u_int64_t	SgEntry[0];
355 } __attribute__ ((packed));
356 
357 /*
358  * Container creation data
359  */
360 struct aac_container_creation {
361 	u_int8_t	ViaBuildNumber;
362 	u_int8_t	MicroSecond;
363 	u_int8_t	Via;		/* 1 = FSU, 2 = API, etc. */
364 	u_int8_t	YearsSince1900;
365 	u_int32_t	Month:4;	/* 1-12 */
366 	u_int32_t	Day:6;		/* 1-32 */
367 	u_int32_t	Hour:6;		/* 0-23 */
368 	u_int32_t	Minute:6;	/* 0-59 */
369 	u_int32_t	Second:6;	/* 0-59 */
370 	u_int64_t	ViaAdapterSerialNumber;
371 } __attribute__ ((packed));
372 
373 /*
374  * Revision number handling
375  */
376 
377 typedef enum {
378 	RevApplication = 1,
379 	RevDkiCli,
380 	RevNetService,
381 	RevApi,
382 	RevFileSysDriver,
383 	RevMiniportDriver,
384 	RevAdapterSW,
385 	RevMonitor,
386 	RevRemoteApi
387 } RevComponent;
388 
389 struct FsaRevision {
390 	union {
391 		struct {
392 			u_int8_t	dash;
393 			u_int8_t	type;
394 			u_int8_t	minor;
395 			u_int8_t	major;
396 		} comp;
397 		u_int32_t	ul;
398 	} external;
399 	u_int32_t	buildNumber;
400 }  __attribute__ ((packed));
401 
402 /*
403  * Adapter Information
404  */
405 
406 typedef enum {
407 	CPU_NTSIM = 1,
408 	CPU_I960,
409 	CPU_ARM,
410 	CPU_SPARC,
411 	CPU_POWERPC,
412 	CPU_ALPHA,
413 	CPU_P7,
414 	CPU_I960_RX,
415 	CPU__last
416 } AAC_CpuType;
417 
418 typedef enum {
419 	CPUI960_JX = 1,
420 	CPUI960_CX,
421 	CPUI960_HX,
422 	CPUI960_RX,
423 	CPUARM_SA110,
424 	CPUARM_xxx,
425 	CPUMPC_824x,
426 	CPUPPC_xxx,
427 	CPUSUBTYPE__last
428 } AAC_CpuSubType;
429 
430 typedef enum {
431 	PLAT_NTSIM = 1,
432 	PLAT_V3ADU,
433 	PLAT_CYCLONE,
434 	PLAT_CYCLONE_HD,
435 	PLAT_BATBOARD,
436 	PLAT_BATBOARD_HD,
437 	PLAT_YOLO,
438 	PLAT_COBRA,
439 	PLAT_ANAHEIM,
440 	PLAT_JALAPENO,
441 	PLAT_QUEENS,
442 	PLAT_JALAPENO_DELL,
443 	PLAT_POBLANO,
444 	PLAT_POBLANO_OPAL,
445 	PLAT_POBLANO_SL0,
446 	PLAT_POBLANO_SL1,
447 	PLAT_POBLANO_SL2,
448 	PLAT_POBLANO_XXX,
449 	PLAT_JALAPENO_P2,
450 	PLAT_HABANERO,
451 	PLAT__last
452 } AAC_Platform;
453 
454 typedef enum {
455 	OEM_FLAVOR_ADAPTEC = 1,
456 	OEM_FLAVOR_DELL,
457 	OEM_FLAVOR_HP,
458 	OEM_FLAVOR_IBM,
459 	OEM_FLAVOR_CPQ,
460 	OEM_FLAVOR_BRAND_X,
461 	OEM_FLAVOR_BRAND_Y,
462 	OEM_FLAVOR_BRAND_Z,
463 	OEM_FLAVOR__last
464 } AAC_OemFlavor;
465 
466 /*
467  * XXX the aac-2622 with no battery present reports PLATFORM_BAT_OPT_PRESENT
468  */
469 typedef enum
470 {
471 	PLATFORM_BAT_REQ_PRESENT = 1,	/* BATTERY REQUIRED AND PRESENT */
472 	PLATFORM_BAT_REQ_NOTPRESENT,	/* BATTERY REQUIRED AND NOT PRESENT */
473 	PLATFORM_BAT_OPT_PRESENT,	/* BATTERY OPTIONAL AND PRESENT */
474 	PLATFORM_BAT_OPT_NOTPRESENT,	/* BATTERY OPTIONAL AND NOT PRESENT */
475 	PLATFORM_BAT_NOT_SUPPORTED	/* BATTERY NOT SUPPORTED */
476 } AAC_BatteryPlatform;
477 
478 /*
479  * options supported by this board
480  * there has to be a one to one mapping of these defines and the ones in
481  * fsaapi.h, search for FSA_SUPPORT_SNAPSHOT
482  */
483 #define AAC_SUPPORTED_SNAPSHOT		0x01
484 #define AAC_SUPPORTED_CLUSTERS		0x02
485 #define AAC_SUPPORTED_WRITE_CACHE	0x04
486 #define AAC_SUPPORTED_64BIT_DATA	0x08
487 #define AAC_SUPPORTED_HOST_TIME_FIB	0x10
488 #define AAC_SUPPORTED_RAID50		0x20
489 
490 /*
491  * Structure used to respond to a RequestAdapterInfo fib.
492  */
493 struct aac_adapter_info {
494 	AAC_Platform		PlatformBase;    /* adapter type */
495 	AAC_CpuType		CpuArchitecture; /* adapter CPU type */
496 	AAC_CpuSubType		CpuVariant;      /* adapter CPU subtype */
497 	u_int32_t		ClockSpeed;      /* adapter CPU clockspeed */
498 	u_int32_t		ExecutionMem;    /* adapter Execution Memory
499 						  * size */
500 	u_int32_t		BufferMem;       /* adapter Data Memory */
501 	u_int32_t		TotalMem;        /* adapter Total Memory */
502 	struct FsaRevision	KernelRevision;  /* adapter Kernel Software
503 						  * Revision */
504 	struct FsaRevision	MonitorRevision; /* adapter Monitor/Diagnostic
505 						  * Software Revision */
506 	struct FsaRevision	HardwareRevision;/* TBD */
507 	struct FsaRevision	BIOSRevision;    /* adapter BIOS Revision */
508 	u_int32_t		ClusteringEnabled;
509 	u_int32_t		ClusterChannelMask;
510 	u_int64_t		SerialNumber;
511 	AAC_BatteryPlatform	batteryPlatform;
512 	u_int32_t		SupportedOptions; /* supported features of this
513 						   * controller */
514 	AAC_OemFlavor	OemVariant;
515 } __attribute__ ((packed));
516 
517 /*
518  * Monitor/Kernel interface.
519  */
520 
521 /*
522  * Synchronous commands to the monitor/kernel.
523  */
524 #define AAC_MONKER_INITSTRUCT	0x05
525 #define AAC_MONKER_SYNCFIB	0x0c
526 
527 /*
528  *  Adapter Status Register
529  *
530  *  Phase Staus mailbox is 32bits:
531  *  <31:16> = Phase Status
532  *  <15:0>  = Phase
533  *
534  *  The adapter reports its present state through the phase.  Only
535  *  a single phase should be ever be set.  Each phase can have multiple
536  *  phase status bits to provide more detailed information about the
537  *  state of the adapter.
538  */
539 #define AAC_SELF_TEST_FAILED	0x00000004
540 #define AAC_UP_AND_RUNNING	0x00000080
541 #define AAC_KERNEL_PANIC	0x00000100
542 
543 /*
544  * Data types relating to control and monitoring of the NVRAM/WriteCache
545  * subsystem.
546  */
547 
548 #define AAC_NFILESYS	24	/* maximum number of filesystems */
549 
550 /*
551  * NVRAM/Write Cache subsystem states
552  */
553 typedef enum {
554 	NVSTATUS_DISABLED = 0,	/* present, clean, not being used */
555 	NVSTATUS_ENABLED,	/* present, possibly dirty, ready for use */
556 	NVSTATUS_ERROR,		/* present, dirty, contains dirty data */
557 	NVSTATUS_BATTERY,	/* present, bad or low battery, may contain
558 				 * dirty data */
559 	NVSTATUS_UNKNOWN	/* for bad/missing device */
560 } AAC_NVSTATUS;
561 
562 /*
563  * NVRAM/Write Cache subsystem battery component states
564  *
565  */
566 typedef enum {
567 	NVBATTSTATUS_NONE = 0,	/* battery has no power or is not present */
568 	NVBATTSTATUS_LOW,	/* battery is low on power */
569 	NVBATTSTATUS_OK,	/* battery is okay - normal operation possible
570 				 * only in this state */
571 	NVBATTSTATUS_RECONDITIONING	/* no battery present - reconditioning
572 					 * in process */
573 } AAC_NVBATTSTATUS;
574 
575 /*
576  * Battery transition type
577  */
578 typedef enum {
579 	NVBATT_TRANSITION_NONE = 0,	/* battery now has no power or is not
580 					 * present */
581 	NVBATT_TRANSITION_LOW,		/* battery is now low on power */
582 	NVBATT_TRANSITION_OK		/* battery is now okay - normal
583 					 * operation possible only in this
584 					 * state */
585 } AAC_NVBATT_TRANSITION;
586 
587 /*
588  * NVRAM Info structure returned for NVRAM_GetInfo call
589  */
590 struct aac_nvramdevinfo {
591 	u_int32_t	NV_Enabled;	/* write caching enabled */
592 	u_int32_t	NV_Error;	/* device in error state */
593 	u_int32_t	NV_NDirty;	/* count of dirty NVRAM buffers */
594 	u_int32_t	NV_NActive;	/* count of NVRAM buffers being
595 					 * written */
596 } __attribute__ ((packed));
597 
598 struct aac_nvraminfo {
599 	AAC_NVSTATUS		NV_Status;	/* nvram subsystem status */
600 	AAC_NVBATTSTATUS	NV_BattStatus;	/* battery status */
601 	u_int32_t		NV_Size;	/* size of WriteCache NVRAM in
602 						 * bytes */
603 	u_int32_t		NV_BufSize;	/* size of NVRAM buffers in
604 						 * bytes */
605 	u_int32_t		NV_NBufs;	/* number of NVRAM buffers */
606 	u_int32_t		NV_NDirty;	/* Num dirty NVRAM buffers */
607 	u_int32_t		NV_NClean;	/* Num clean NVRAM buffers */
608 	u_int32_t		NV_NActive;	/* Num NVRAM buffers being
609 						 * written */
610 	u_int32_t		NV_NBrokered;	/* Num brokered NVRAM buffers */
611 	struct aac_nvramdevinfo	NV_DevInfo[AAC_NFILESYS];	/* per device
612 								 * info */
613 	u_int32_t		NV_BattNeedsReconditioning;	/* boolean */
614 	u_int32_t		NV_TotalSize;	/* size of all non-volatile
615 						 * memories in bytes */
616 } __attribute__ ((packed));
617 
618 /*
619  * Data types relating to adapter-initiated FIBs
620  *
621  * Based on types and structures in <aifstruc.h>
622  */
623 
624 /*
625  * Progress Reports
626  */
627 typedef enum {
628 	AifJobStsSuccess = 1,
629 	AifJobStsFinished,
630 	AifJobStsAborted,
631 	AifJobStsFailed,
632 	AifJobStsLastReportMarker = 100,	/* All prior mean last report */
633 	AifJobStsSuspended,
634 	AifJobStsRunning
635 } AAC_AifJobStatus;
636 
637 typedef enum {
638 	AifJobScsiMin = 1,		/* Minimum value for Scsi operation */
639 	AifJobScsiZero,			/* SCSI device clear operation */
640 	AifJobScsiVerify,		/* SCSI device Verify operation NO
641 					 * REPAIR */
642 	AifJobScsiExercise,		/* SCSI device Exercise operation */
643 	AifJobScsiVerifyRepair,		/* SCSI device Verify operation WITH
644 					 * repair */
645 	AifJobScsiMax = 99,		/* Max Scsi value */
646 	AifJobCtrMin,			/* Min Ctr op value */
647 	AifJobCtrZero,			/* Container clear operation */
648 	AifJobCtrCopy,			/* Container copy operation */
649 	AifJobCtrCreateMirror,		/* Container Create Mirror operation */
650 	AifJobCtrMergeMirror,		/* Container Merge Mirror operation */
651 	AifJobCtrScrubMirror,		/* Container Scrub Mirror operation */
652 	AifJobCtrRebuildRaid5,		/* Container Rebuild Raid5 operation */
653 	AifJobCtrScrubRaid5,		/* Container Scrub Raid5 operation */
654 	AifJobCtrMorph,			/* Container morph operation */
655 	AifJobCtrPartCopy,		/* Container Partition copy operation */
656 	AifJobCtrRebuildMirror,		/* Container Rebuild Mirror operation */
657 	AifJobCtrCrazyCache,		/* crazy cache */
658 	AifJobCtrMax = 199,		/* Max Ctr type operation */
659 	AifJobFsMin,			/* Min Fs type operation */
660 	AifJobFsCreate,			/* File System Create operation */
661 	AifJobFsVerify,			/* File System Verify operation */
662 	AifJobFsExtend,			/* File System Extend operation */
663 	AifJobFsMax = 299,		/* Max Fs type operation */
664 	AifJobApiFormatNTFS,		/* Format a drive to NTFS */
665 	AifJobApiFormatFAT,		/* Format a drive to FAT */
666 	AifJobApiUpdateSnapshot,	/* update the read/write half of a
667 					 * snapshot */
668 	AifJobApiFormatFAT32,		/* Format a drive to FAT32 */
669 	AifJobApiMax = 399,		/* Max API type operation */
670 	AifJobCtlContinuousCtrVerify,	/* Adapter operation */
671 	AifJobCtlMax = 499		/* Max Adapter type operation */
672 } AAC_AifJobType;
673 
674 struct aac_AifContainers {
675 	u_int32_t	src;		/* from/master */
676 	u_int32_t	dst;		/* to/slave */
677 } __attribute__ ((packed));
678 
679 union aac_AifJobClient {
680 	struct aac_AifContainers	container;	/* For Container and
681 							 * file system progress
682 							 * ops; */
683 	int32_t				scsi_dh;	/* For SCSI progress
684 							 * ops */
685 };
686 
687 struct aac_AifJobDesc {
688 	u_int32_t		jobID;		/* DO NOT FILL IN! Will be
689 						 * filled in by AIF */
690 	AAC_AifJobType		type;		/* Operation that is being
691 						 * performed */
692 	union aac_AifJobClient	client;		/* Details */
693 } __attribute__ ((packed));
694 
695 struct aac_AifJobProgressReport {
696 	struct aac_AifJobDesc	jd;
697 	AAC_AifJobStatus	status;
698 	u_int32_t		finalTick;
699 	u_int32_t		currentTick;
700 	u_int32_t		jobSpecificData1;
701 	u_int32_t		jobSpecificData2;
702 } __attribute__ ((packed));
703 
704 /*
705  * Event Notification
706  */
707 typedef enum {
708 	/* General application notifies start here */
709 	AifEnGeneric = 1,		/* Generic notification */
710 	AifEnTaskComplete,		/* Task has completed */
711 	AifEnConfigChange,		/* Adapter config change occurred */
712 	AifEnContainerChange,		/* Adapter specific container
713 					 * configuration change */
714 	AifEnDeviceFailure,		/* SCSI device failed */
715 	AifEnMirrorFailover,		/* Mirror failover started */
716 	AifEnContainerEvent,		/* Significant container event */
717 	AifEnFileSystemChange,		/* File system changed */
718 	AifEnConfigPause,		/* Container pause event */
719 	AifEnConfigResume,		/* Container resume event */
720 	AifEnFailoverChange,		/* Failover space assignment changed */
721 	AifEnRAID5RebuildDone,		/* RAID5 rebuild finished */
722 	AifEnEnclosureManagement,	/* Enclosure management event */
723 	AifEnBatteryEvent,		/* Significant NV battery event */
724 	AifEnAddContainer,		/* A new container was created. */
725 	AifEnDeleteContainer,		/* A container was deleted. */
726 	AifEnSMARTEvent, 	       	/* SMART Event */
727 	AifEnBatteryNeedsRecond,	/* The battery needs reconditioning */
728 	AifEnClusterEvent,		/* Some cluster event */
729 	AifEnDiskSetEvent,		/* A disk set event occured. */
730 	AifDriverNotifyStart=199,	/* Notifies for host driver go here */
731 	/* Host driver notifications start here */
732 	AifDenMorphComplete, 		/* A morph operation completed */
733 	AifDenVolumeExtendComplete 	/* Volume expand operation completed */
734 } AAC_AifEventNotifyType;
735 
736 struct aac_AifEnsGeneric {
737 	char	text[132];		/* Generic text */
738 } __attribute__ ((packed));
739 
740 struct aac_AifEnsDeviceFailure {
741 	u_int32_t	deviceHandle;	/* SCSI device handle */
742 } __attribute__ ((packed));
743 
744 struct aac_AifEnsMirrorFailover {
745 	u_int32_t	container;	/* Container with failed element */
746 	u_int32_t	failedSlice;	/* Old slice which failed */
747 	u_int32_t	creatingSlice;	/* New slice used for auto-create */
748 } __attribute__ ((packed));
749 
750 struct aac_AifEnsContainerChange {
751 	u_int32_t	container[2];	/* container that changed, -1 if no
752 					 * container */
753 } __attribute__ ((packed));
754 
755 struct aac_AifEnsContainerEvent {
756 	u_int32_t	container;	/* container number  */
757 	u_int32_t	eventType;	/* event type */
758 } __attribute__ ((packed));
759 
760 struct aac_AifEnsEnclosureEvent {
761 	u_int32_t	empID;		/* enclosure management proc number  */
762 	u_int32_t	unitID;		/* unitId, fan id, power supply id,
763 					 * slot id, tempsensor id.  */
764 	u_int32_t	eventType;	/* event type */
765 } __attribute__ ((packed));
766 
767 struct aac_AifEnsBatteryEvent {
768 	AAC_NVBATT_TRANSITION	transition_type;	/* eg from low to ok */
769 	AAC_NVBATTSTATUS	current_state;		/* current batt state */
770 	AAC_NVBATTSTATUS	prior_state;		/* prev batt state */
771 } __attribute__ ((packed));
772 
773 struct aac_AifEnsDiskSetEvent {
774 	u_int32_t	eventType;
775 	u_int64_t	DsNum;
776 	u_int64_t	CreatorId;
777 } __attribute__ ((packed));
778 
779 typedef enum {
780 	CLUSTER_NULL_EVENT = 0,
781 	CLUSTER_PARTNER_NAME_EVENT,	/* change in partner hostname or
782 					 * adaptername from NULL to non-NULL */
783 	/* (partner's agent may be up) */
784 	CLUSTER_PARTNER_NULL_NAME_EVENT	/* change in partner hostname or
785 					 * adaptername from non-null to NULL */
786 	/* (partner has rebooted) */
787 } AAC_ClusterAifEvent;
788 
789 struct aac_AifEnsClusterEvent {
790 	AAC_ClusterAifEvent	eventType;
791 } __attribute__ ((packed));
792 
793 struct aac_AifEventNotify {
794 	AAC_AifEventNotifyType	type;
795 	union {
796 		struct aac_AifEnsGeneric		EG;
797 		struct aac_AifEnsDeviceFailure		EDF;
798 		struct aac_AifEnsMirrorFailover		EMF;
799 		struct aac_AifEnsContainerChange	ECC;
800 		struct aac_AifEnsContainerEvent		ECE;
801 		struct aac_AifEnsEnclosureEvent		EEE;
802 		struct aac_AifEnsBatteryEvent		EBE;
803 		struct aac_AifEnsDiskSetEvent		EDS;
804 /*		struct aac_AifEnsSMARTEvent		ES;*/
805 		struct aac_AifEnsClusterEvent		ECLE;
806 	} data;
807 } __attribute__ ((packed));
808 
809 /*
810  * Adapter Initiated FIB command structures. Start with the adapter
811  * initiated FIBs that really come from the adapter, and get responded
812  * to by the host.
813  */
814 #define AAC_AIF_REPORT_MAX_SIZE 64
815 
816 typedef enum {
817 	AifCmdEventNotify = 1,	/* Notify of event */
818 	AifCmdJobProgress,	/* Progress report */
819 	AifCmdAPIReport,	/* Report from other user of API */
820 	AifCmdDriverNotify,	/* Notify host driver of event */
821 	AifReqJobList = 100,	/* Gets back complete job list */
822 	AifReqJobsForCtr,	/* Gets back jobs for specific container */
823 	AifReqJobsForScsi,	/* Gets back jobs for specific SCSI device */
824 	AifReqJobReport,	/* Gets back a specific job report or list */
825 	AifReqTerminateJob,	/* Terminates job */
826 	AifReqSuspendJob,	/* Suspends a job */
827 	AifReqResumeJob,	/* Resumes a job */
828 	AifReqSendAPIReport,	/* API generic report requests */
829 	AifReqAPIJobStart,	/* Start a job from the API */
830 	AifReqAPIJobUpdate,	/* Update a job report from the API */
831 	AifReqAPIJobFinish	/* Finish a job from the API */
832 } AAC_AifCommand;
833 
834 struct aac_aif_command {
835 	AAC_AifCommand	command;	/* Tell host what type of
836 					 * notify this is */
837 	u_int32_t	seqNumber;	/* To allow ordering of
838 					 * reports (if necessary) */
839 	union {
840 	struct aac_AifEventNotify	EN;	/* Event notify structure */
841 	struct aac_AifJobProgressReport	PR[1];	/* Progress report */
842 	u_int8_t			AR[AAC_AIF_REPORT_MAX_SIZE];
843 	} data;
844 } __attribute__ ((packed));
845 
846 /*
847  * Filesystem commands/data
848  *
849  * The adapter has a very complex filesystem interface, most of which we ignore.
850  * (And which seems not to be implemented, anyway.)
851  */
852 
853 /*
854  * FSA commands
855  * (not used?)
856  */
857 typedef enum {
858 	Null = 0,
859 	GetAttributes,
860 	SetAttributes,
861 	Lookup,
862 	ReadLink,
863 	Read,
864 	Write,
865 	Create,
866 	MakeDirectory,
867 	SymbolicLink,
868 	MakeNode,
869 	Removex,
870 	RemoveDirectory,
871 	Rename,
872 	Link,
873 	ReadDirectory,
874 	ReadDirectoryPlus,
875 	FileSystemStatus,
876 	FileSystemInfo,
877 	PathConfigure,
878 	Commit,
879 	Mount,
880 	UnMount,
881 	Newfs,
882 	FsCheck,
883 	FsSync,
884 	SimReadWrite,
885 	SetFileSystemStatus,
886 	BlockRead,
887 	BlockWrite,
888 	NvramIoctl,
889 	FsSyncWait,
890 	ClearArchiveBit,
891 	SetAcl,
892 	GetAcl,
893 	AssignAcl,
894 	FaultInsertion,
895 	CrazyCache
896 } AAC_FSACommand;
897 
898 /*
899  * Command status values
900  */
901 typedef enum {
902 	ST_OK = 0,
903 	ST_PERM = 1,
904 	ST_NOENT = 2,
905 	ST_IO = 5,
906 	ST_NXIO = 6,
907 	ST_E2BIG = 7,
908 	ST_ACCES = 13,
909 	ST_EXIST = 17,
910 	ST_XDEV = 18,
911 	ST_NODEV = 19,
912 	ST_NOTDIR = 20,
913 	ST_ISDIR = 21,
914 	ST_INVAL = 22,
915 	ST_FBIG = 27,
916 	ST_NOSPC = 28,
917 	ST_ROFS = 30,
918 	ST_MLINK = 31,
919 	ST_WOULDBLOCK = 35,
920 	ST_NAMETOOLONG = 63,
921 	ST_NOTEMPTY = 66,
922 	ST_DQUOT = 69,
923 	ST_STALE = 70,
924 	ST_REMOTE = 71,
925 	ST_BADHANDLE = 10001,
926 	ST_NOT_SYNC = 10002,
927 	ST_BAD_COOKIE = 10003,
928 	ST_NOTSUPP = 10004,
929 	ST_TOOSMALL = 10005,
930 	ST_SERVERFAULT = 10006,
931 	ST_BADTYPE = 10007,
932 	ST_JUKEBOX = 10008,
933 	ST_NOTMOUNTED = 10009,
934 	ST_MAINTMODE = 10010,
935 	ST_STALEACL = 10011
936 } AAC_FSAStatus;
937 
938 /*
939  * Volume manager commands
940  */
941 typedef enum _VM_COMMANDS {
942 	VM_Null = 0,
943 	VM_NameServe,
944 	VM_ContainerConfig,
945 	VM_Ioctl,
946 	VM_FilesystemIoctl,
947 	VM_CloseAll,
948 	VM_CtBlockRead,
949 	VM_CtBlockWrite,
950 	VM_SliceBlockRead,	 /* raw access to configured storage objects */
951 	VM_SliceBlockWrite,
952 	VM_DriveBlockRead,	 /* raw access to physical devices */
953 	VM_DriveBlockWrite,
954 	VM_EnclosureMgt,	 /* enclosure management */
955 	VM_Unused,		 /* used to be diskset management */
956 	VM_CtBlockVerify,
957 	VM_CtPerf,		 /* performance test */
958 	VM_CtBlockRead64,
959 	VM_CtBlockWrite64,
960 	VM_CtBlockVerify64,
961 } AAC_VMCommand;
962 
963 /*
964  * "mountable object"
965  */
966 struct aac_mntobj {
967 	u_int32_t			ObjectId;
968 	char				FileSystemName[16];
969 	struct aac_container_creation	CreateInfo;
970 	u_int32_t			Capacity;
971 	AAC_FSAVolType			VolType;
972 	AAC_FType			ObjType;
973 	u_int32_t			ContentState;
974 #define FSCS_READONLY		0x0002		/* XXX need more information
975 						 * than this */
976 	union {
977 		u_int32_t	pad[8];
978 	} ObjExtension;
979 	u_int32_t			AlterEgoId;
980 } __attribute__ ((packed));
981 
982 struct aac_mntinfo {
983 	AAC_VMCommand		Command;
984 	AAC_FType		MntType;
985 	u_int32_t		MntCount;
986 } __attribute__ ((packed));
987 
988 struct aac_mntinforesponse {
989 	AAC_FSAStatus		Status;
990 	AAC_FType		MntType;
991 	u_int32_t		MntRespCount;
992 	struct aac_mntobj	MntTable[1];
993 } __attribute__ ((packed));
994 
995 /*
996  * Container shutdown command.
997  */
998 struct aac_closecommand {
999 	u_int32_t	Command;
1000 	u_int32_t	ContainerId;
1001 } __attribute__ ((packed));
1002 
1003 /*
1004  * Write 'stability' options.
1005  */
1006 typedef enum {
1007 	CSTABLE = 1,
1008 	CUNSTABLE
1009 } AAC_CacheLevel;
1010 
1011 /*
1012  * Commit level response for a write request.
1013  */
1014 typedef enum {
1015 	CMFILE_SYNC_NVRAM = 1,
1016 	CMDATA_SYNC_NVRAM,
1017 	CMFILE_SYNC,
1018 	CMDATA_SYNC,
1019 	CMUNSTABLE
1020 } AAC_CommitLevel;
1021 
1022 /*
1023  * Block read/write operations.
1024  * These structures are packed into the 'data' area in the FIB.
1025  */
1026 
1027 struct aac_blockread {
1028 	AAC_VMCommand		Command;	/* not FSACommand! */
1029 	u_int32_t		ContainerId;
1030 	u_int32_t		BlockNumber;
1031 	u_int32_t		ByteCount;
1032 	struct aac_sg_table	SgMap;		/* variable size */
1033 } __attribute__ ((packed));
1034 
1035 struct aac_blockread_response {
1036 	AAC_FSAStatus		Status;
1037 	u_int32_t		ByteCount;
1038 } __attribute__ ((packed));
1039 
1040 struct aac_blockwrite {
1041 	AAC_VMCommand		Command;	/* not FSACommand! */
1042 	u_int32_t		ContainerId;
1043 	u_int32_t		BlockNumber;
1044 	u_int32_t		ByteCount;
1045 	AAC_CacheLevel	Stable;
1046 	struct aac_sg_table	SgMap;		/* variable size */
1047 } __attribute__ ((packed));
1048 
1049 struct aac_blockwrite_response {
1050 	AAC_FSAStatus	Status;
1051 	u_int32_t		ByteCount;
1052 	AAC_CommitLevel	Committed;
1053 } __attribute__ ((packed));
1054 
1055 /*
1056  * Container shutdown command.
1057  */
1058 struct aac_close_command {
1059 	AAC_VMCommand      Command;
1060 	u_int32_t          ContainerId;
1061 };
1062 
1063 /*
1064  * Register set for adapters based on the Falcon bridge and PPC core
1065  */
1066 
1067 #define AAC_FA_DOORBELL0_CLEAR		0x00
1068 #define AAC_FA_DOORBELL1_CLEAR		0x02
1069 #define AAC_FA_DOORBELL0		0x04
1070 #define AAC_FA_DOORBELL1		0x06
1071 #define AAC_FA_MASK0_CLEAR		0x08
1072 #define AAC_FA_MASK1_CLEAR		0x0a
1073 #define	AAC_FA_MASK0			0x0c
1074 #define AAC_FA_MASK1			0x0e
1075 #define AAC_FA_MAILBOX			0x10
1076 #define	AAC_FA_FWSTATUS			0x2c	/* Mailbox 7 */
1077 #define	AAC_FA_INTSRC			0x900
1078 
1079 #define AAC_FA_HACK(sc)	(void)AAC_GETREG4(sc, AAC_FA_INTSRC)
1080 
1081 /*
1082  * Register definitions for the Adaptec AAC-364 'Jalapeno I/II' adapters, based
1083  * on the SA110 'StrongArm'.
1084  */
1085 
1086 #define AAC_SA_DOORBELL0_CLEAR		0x98	/* doorbell 0 (adapter->host) */
1087 #define AAC_SA_DOORBELL0_SET		0x9c
1088 #define AAC_SA_DOORBELL0		0x9c
1089 #define AAC_SA_MASK0_CLEAR		0xa0
1090 #define AAC_SA_MASK0_SET		0xa4
1091 
1092 #define AAC_SA_DOORBELL1_CLEAR		0x9a	/* doorbell 1 (host->adapter) */
1093 #define AAC_SA_DOORBELL1_SET		0x9e
1094 #define AAC_SA_DOORBELL1		0x9e
1095 #define AAC_SA_MASK1_CLEAR		0xa2
1096 #define AAC_SA_MASK1_SET		0xa6
1097 
1098 #define AAC_SA_MAILBOX			0xa8	/* mailbox (20 bytes) */
1099 #define AAC_SA_FWSTATUS			0xc4
1100 
1101 /*
1102  * Register definitions for the Adaptec 'Pablano' adapters, based on the i960Rx,
1103  * and other related adapters.
1104  */
1105 
1106 #define AAC_RX_IDBR		0x20	/* inbound doorbell register */
1107 #define AAC_RX_IISR		0x24	/* inbound interrupt status register */
1108 #define AAC_RX_IIMR		0x28	/* inbound interrupt mask register */
1109 #define AAC_RX_ODBR		0x2c	/* outbound doorbell register */
1110 #define AAC_RX_OISR		0x30	/* outbound interrupt status register */
1111 #define AAC_RX_OIMR		0x34	/* outbound interrupt mask register */
1112 
1113 #define AAC_RX_MAILBOX		0x50	/* mailbox (20 bytes) */
1114 #define AAC_RX_FWSTATUS		0x6c
1115 
1116 /*
1117  * Common bit definitions for the doorbell registers.
1118  */
1119 
1120 /*
1121  * Status bits in the doorbell registers.
1122  */
1123 #define AAC_DB_SYNC_COMMAND	(1<<0)	/* send/completed synchronous FIB */
1124 #define AAC_DB_COMMAND_READY	(1<<1)	/* posted one or more commands */
1125 #define AAC_DB_RESPONSE_READY	(1<<2)	/* one or more commands complete */
1126 #define AAC_DB_COMMAND_NOT_FULL	(1<<3)	/* command queue not full */
1127 #define AAC_DB_RESPONSE_NOT_FULL (1<<4)	/* response queue not full */
1128 
1129 /*
1130  * The adapter can request the host print a message by setting the
1131  * DB_PRINTF flag in DOORBELL0.  The driver responds by collecting the
1132  * message from the printf buffer, clearing the DB_PRINTF flag in
1133  * DOORBELL0 and setting it in DOORBELL1.
1134  * (ODBR and IDBR respectively for the i960Rx adapters)
1135  */
1136 #define AAC_DB_PRINTF		(1<<5)	/* adapter requests host printf */
1137 #define AAC_PRINTF_DONE		(1<<5)	/* Host completed printf processing */
1138 
1139 /*
1140  * Mask containing the interrupt bits we care about.  We don't anticipate (or
1141  * want) interrupts not in this mask.
1142  */
1143 #define AAC_DB_INTERRUPTS	(AAC_DB_COMMAND_READY  |	\
1144 				 AAC_DB_RESPONSE_READY |	\
1145 				 AAC_DB_PRINTF)
1146