xref: /openbsd-src/sys/dev/ic/amireg.h (revision 946f45ce260ece8602342a2fd5e9b29225bede67)
1*946f45ceSmarco /*	$OpenBSD: amireg.h,v 1.30 2008/10/22 18:42:29 marco Exp $	*/
2ebaedd01Smickey 
3ebaedd01Smickey /*
4ebaedd01Smickey  * Copyright (c) 2000 Michael Shalayeff
5473e8dcaSmarco  * Copyright (c) 2005 Marco Peereboom
6ebaedd01Smickey  * All rights reserved.
7ebaedd01Smickey  *
8ebaedd01Smickey  * Redistribution and use in source and binary forms, with or without
9ebaedd01Smickey  * modification, are permitted provided that the following conditions
10ebaedd01Smickey  * are met:
11ebaedd01Smickey  * 1. Redistributions of source code must retain the above copyright
12ebaedd01Smickey  *    notice, this list of conditions and the following disclaimer.
13ebaedd01Smickey  * 2. Redistributions in binary form must reproduce the above copyright
14ebaedd01Smickey  *    notice, this list of conditions and the following disclaimer in the
15ebaedd01Smickey  *    documentation and/or other materials provided with the distribution.
16ebaedd01Smickey  *
17ebaedd01Smickey  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18ebaedd01Smickey  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19ebaedd01Smickey  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20ebaedd01Smickey  * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
21ebaedd01Smickey  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22ebaedd01Smickey  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23ebaedd01Smickey  * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24ebaedd01Smickey  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
25ebaedd01Smickey  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
26ebaedd01Smickey  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27ebaedd01Smickey  * THE POSSIBILITY OF SUCH DAMAGE.
28ebaedd01Smickey  */
29ebaedd01Smickey 
30ebaedd01Smickey #define	AMI_MAX_PDRIVES		(75)
31ebaedd01Smickey #define	AMI_MAX_LDRIVES		8
32ebaedd01Smickey #define	AMI_MAX_SPANDEPTH	4
33ebaedd01Smickey #define	AMI_MAX_DEVDEPTH	8
3433dde987Smarco #define	AMI_MAX_TARGET		16
35ebaedd01Smickey 
36ebaedd01Smickey #define	AMI_BIG_MAX_PDRIVES	(256)
37ebaedd01Smickey #define	AMI_BIG_MAX_LDRIVES	40
38ebaedd01Smickey #define	AMI_BIG_MAX_SPANDEPTH	8
39ebaedd01Smickey #define	AMI_BIG_MAX_DEVDEPTH	32
40ebaedd01Smickey 
41051bc45aSmarco #define	AMI_MAXCMDS	126		/* theoretical limit is 250 */
42ebaedd01Smickey #define	AMI_SECTOR_SIZE	512
43ebaedd01Smickey #define	AMI_MAXOFFSETS	26
44ebaedd01Smickey #define	AMI_SGEPERCMD	32		/* to prevent page boundary crossing */
45400dd348Smarco #define AMI_MAX_BUSYWAIT 10		/* wait up to 10 usecs */
46191ce3f2Smarco #define AMI_MAX_POLLWAIT 1000000	/* wait up to 1000 000 usecs */
47711ce438Skrw #define AMI_MAXIOCTLCMDS 1		/* number of parallel ioctl calls */
48711ce438Skrw #define AMI_MAXPROCS	 2		/* number of processors on a channel */
49711ce438Skrw #define AMI_MAXRAWCMDS	 2		/* number of parallel processor cmds */
50ebaedd01Smickey 
51ebaedd01Smickey #define	AMI_MAXFER	(AMI_MAXOFFSETS * PAGE_SIZE)
52ebaedd01Smickey 
53ebaedd01Smickey #define	AMI_QIDB	0x20
54ebaedd01Smickey #define		AMI_QIDB_EXEC	0x01
55ebaedd01Smickey #define		AMI_QIDB_ACK	0x02
56ebaedd01Smickey #define	AMI_QODB	0x2c
57ebaedd01Smickey #define		AMI_QODB_READY	0x10001234
58ebaedd01Smickey 
59ebaedd01Smickey #define	AMI_SCMD	0x10
60ebaedd01Smickey #define		AMI_SCMD_EXEC	0x10
61ebaedd01Smickey #define		AMI_SCMD_ACK	0x08
62ebaedd01Smickey #define	AMI_SMBSTAT	0x10
63ebaedd01Smickey #define		AMI_SMBST_BUSY	0x10
64ebaedd01Smickey #define	AMI_SIEM	0x11
65ebaedd01Smickey #define		AMI_SEIM_ENA	0xc0
66ebaedd01Smickey #define	AMI_SMBADDR	0x14
67ebaedd01Smickey #define	AMI_SMBENA	0x18
68ebaedd01Smickey #define	AMI_ISTAT	0x1a
69ebaedd01Smickey #define		AMI_ISTAT_PEND	0x40
70ebaedd01Smickey 
71ebaedd01Smickey /* commands */
72ebaedd01Smickey #define	AMI_READ	0x01
73ebaedd01Smickey #define	AMI_WRITE	0x02
74fc109205Smickey #define	AMI_PASSTHRU	0x03	/* pass scsi cdb to the device */
75ebaedd01Smickey #define	AMI_EINQUIRY	0x04	/* extended inquiry */
76ebaedd01Smickey #define	AMI_INQUIRY	0x05	/* inquiry */
77ebaedd01Smickey #define	AMI_CHSTATE	0x06	/* pad[0] -- state */
78ebaedd01Smickey #define		AMI_STATE_ON	3
79ebaedd01Smickey #define		AMI_STATE_FAIL	4
80ebaedd01Smickey #define		AMI_STATE_SPARE	6
815760a079Smarco #define	AMI_RCONFIG	0x07	/* read configuration up to 4 spans */
825760a079Smarco #define	AMI_REBUILDPD	0x08	/* rebuild physical drive */
83ebaedd01Smickey #define	AMI_CHECK	0x09	/* check consistency */
84ebaedd01Smickey #define	AMI_FLUSH	0x0a
85ebaedd01Smickey #define	AMI_ILDRIVE	0x0b	/* init logical drive */
86ebaedd01Smickey #define	AMI_EINQUIRY3	0x0c
87fc109205Smickey #define	AMI_DCHDR	0x14	/* get/set dedicated channel/drives */
88ebaedd01Smickey #define	AMI_GRBLDPROGR	0x18	/* get rebuild progress */
89ebaedd01Smickey #define	AMI_GCHECKPROGR	0x19	/* get check consistency progress */
90ebaedd01Smickey #define	AMI_GILDRPROGR	0x1b	/* get init logical drive progress */
91ebaedd01Smickey #define	AMI_WRCONFIG	0x20	/* write configuration up to 4 spans */
92ebaedd01Smickey #define	AMI_RWRCONFIG	0x21	/* raid write config */
93ebaedd01Smickey #define	AMI_RRDCONFIG	0x22	/* raid read config */
94ebaedd01Smickey #define	AMI_GRBLDRATE	0x23	/* get rebuild rate */
95ebaedd01Smickey #define	AMI_SRBLDRATE	0x24	/* set rebuild rate */
96ebaedd01Smickey #define	AMI_UPLDCFGUT	0x25	/* upload config utility */
97ebaedd01Smickey #define	AMI_UPLDRVPROP	0x26	/* update logical drive property */
98ebaedd01Smickey #define	AMI_ABRTREBLD	0x28	/* abort rebuild */
99ebaedd01Smickey #define	AMI_ABRTCHECK	0x29	/* abort check consistency */
100ebaedd01Smickey #define	AMI_ABRTILDRV	0x2b	/* abort init logical drive */
101ebaedd01Smickey #define	AMI_WRBLOCK	0x2c	/* flash write block */
102ebaedd01Smickey #define	AMI_PRGFLASH	0x2d	/* flash program */
103ebaedd01Smickey #define	AMI_SFLUSHINTV	0x2e	/* channel == cache flush interval */
104ebaedd01Smickey #define	AMI_PCHIPSETVAL	0x2f	/* program chipset values */
105ebaedd01Smickey #define		AMI_CS_NEPTUNE	0x61
106ebaedd01Smickey #define		AMI_CS_OTHER	0xe1
107ebaedd01Smickey #define		AMI_CS_TRITON	0xe2
108ebaedd01Smickey #define	AMI_SNEG	0x30	/* scsi sync negotiation get/ena/dis */
109ebaedd01Smickey #define		AMI_SNEG_GET	1
110ebaedd01Smickey #define		AMI_SNEG_SET	2
111ebaedd01Smickey #define	AMI_QTAG	0x31	/* scsi queue tag get/set */
112ebaedd01Smickey #define		AMI_QTAG_GET	1
113ebaedd01Smickey #define		AMI_QTAG_SET	2
114ebaedd01Smickey #define	AMI_GSUPARAM	0x32	/* get spinup parameters */
115ebaedd01Smickey #define	AMI_SSUPARAM	0x33	/* set spinup parameters */
116ebaedd01Smickey #define	AMI_GDROAMINFO	0x34
117ebaedd01Smickey #define	AMI_GMACHID	0x36	/* get machine id */
118ebaedd01Smickey #define	AMI_BIOSPDATA	0x40	/* get bios private data */
119ebaedd01Smickey #define	AMI_I2OCFGDLG	0x41	/* I2O config dialog */
120ebaedd01Smickey #define	AMI_GCACHESTAT	0x50	/* get cache statistics */
121ebaedd01Smickey #define	AMI_SPEAKER	0x51	/* speaker control */
122ebaedd01Smickey #define		AMI_SPKR_OFF	0
123ebaedd01Smickey #define		AMI_SPKR_ON	1
124ebaedd01Smickey #define		AMI_SPKR_SHUT	2
125ebaedd01Smickey #define		AMI_SPKR_GVAL	3
1269d1bf941Smarco #define		AMI_SPKR_TEST	4
127ebaedd01Smickey #define	AMI_GDUMP	0x52	/* get error condition in text */
128ebaedd01Smickey #define	AMI_SENSEDUMPA	0x53	/* get SCSI sense dump area */
129ebaedd01Smickey #define	AMI_STDIAG	0x54	/* start diagnostics -- 2.1 */
130ebaedd01Smickey #define	AMI_FRAID_PF	0x55	/* get/set flexraid power fail */
131ebaedd01Smickey #define		AMI_GFRAIDPF	1
132ebaedd01Smickey #define		AMI_SFRAIDPF	2
133fc109205Smickey #define	AMI_FRAIDVS	0x56	/* get/set flexraid virtual sizing */
134ebaedd01Smickey #define		AMI_GFRAIDVS	1
135ebaedd01Smickey #define		AMI_SFRAIDVS	2
136ebaedd01Smickey #define	AMI_BBMANAGE	0x57	/* bad block manage */
137ebaedd01Smickey #define	AMI_RECONSTRUCT	0x60	/* begin reconstruction */
138ebaedd01Smickey #define	AMI_GRECONSTRUCT 0x61	/* get reconstruction progress */
139ebaedd01Smickey #define	AMI_BIOSSTAT	0x62	/* enable/disable bios */
140ebaedd01Smickey #define	AMI_RDCFGDSK	0x63	/* read configuration from disk */
141ebaedd01Smickey #define	AMI_AREBUILD	0x64	/* get/set autorebuild/battery charge */
142ebaedd01Smickey #define		AMI_GUCAP	1	/* get ultra capabilities */
143ebaedd01Smickey #define		AMI_SUCAP	2	/* set ultra capability */
144ebaedd01Smickey #define		AMI_GARBLD	3
145ebaedd01Smickey #define		AMI_SARBLD	4
146ebaedd01Smickey #define		AMI_GFCC	5	/* get fast charge counter */
147ebaedd01Smickey #define		AMI_SFCC	6	/* set fast charge counter */
148ebaedd01Smickey #define		AMI_GCUCAP	7	/* get channel ultra capabilities */
149ebaedd01Smickey #define		AMI_SCUCAP	8	/* set channel ultra capabilities */
150ebaedd01Smickey #define	AMI_SFD		0x66	/* set factory defaults */
151ebaedd01Smickey #define	AMI_RDCONFIG8	0x67	/* read configuration up to 8 spans */
152ebaedd01Smickey #define	AMI_WRCONFIG8	0x68	/* write config up to 8 spans */
153ebaedd01Smickey #define	AMI_ESENSEDUMPA	0x69	/* extended scsi dump area */
154ebaedd01Smickey #define	AMI_RERRC	0x6a	/* reset error counter */
155ebaedd01Smickey #define	AMI_BOOTUP	0x6b	/* ena/dis physical drive boot up */
156ebaedd01Smickey #define	AMI_ENCLOSURE	0x6c	/* get/set enclosure type */
157ebaedd01Smickey #define	AMI_WRCFGD	0x6c	/* write config disk -- 2.1 */
158ebaedd01Smickey #define	AMI_HAPIRRLD	0x6e
159ebaedd01Smickey #define	AMI_LDRVRIGHTS	0x6f
160ebaedd01Smickey #define	AMI_CLUSTERING	0x70
161ebaedd01Smickey #define	AMI_GCHPROP	0x71	/* get channel properties */
162ebaedd01Smickey #define	AMI_SCHTERM	0x72	/* set channel termination */
163ebaedd01Smickey #define		AMI_TERM_DISABLE 0
164ebaedd01Smickey #define		AMI_TERM_ENABLE	1
165ebaedd01Smickey #define		AMI_TERM_HIGH	2
166ebaedd01Smickey #define		AMI_TERM_WIDE	3
167ebaedd01Smickey #define		AMI_TERM_DFLT	16
168ebaedd01Smickey #define	AMI_QUIETCH	0x73	/* quiet channel */
169ebaedd01Smickey #define	AMI_ACTIVATECH	0x74	/* activate channel */
170ebaedd01Smickey #define	AMI_STARTU	0x75	/* start unit, pad[0] -- sync/async */
171ebaedd01Smickey #define		AMI_STARTU_SYNC	1
172ebaedd01Smickey #define		AMI_STARTU_ASYN	2
173ebaedd01Smickey #define	AMI_STOPU	0x76	/* stop unit */
174ebaedd01Smickey #define	AMI_GERRC	0x77	/* get error counter */
175ebaedd01Smickey #define	AMI_GBTDS	0x78	/* get boot time drive status */
176ebaedd01Smickey #define	AMI_FMTPROG	0x79
177ebaedd01Smickey #define	AMI_RCAPCMD	0x7a	/* read capacity */
178ebaedd01Smickey #define	AMI_WRCRX	0x7b
179ebaedd01Smickey #define	AMI_RDCRX	0x7c
180ebaedd01Smickey #define	AMI_GINID	0x7d	/* get initiator id */
181ebaedd01Smickey #define	AMI_HAPICMD	0x7e
182ebaedd01Smickey #define	AMI_SINID	0x7f	/* set initiator id */
183ebaedd01Smickey #define	AMI_SMARTMSEL	0x80
184ebaedd01Smickey #define	AMI_SPSTARTU	0x85	/* special start unit command */
185ebaedd01Smickey #define	AMI_NVFAILHIST	0x90
186ebaedd01Smickey #define	AMI_DCMDABRT	0x91
187ebaedd01Smickey #define	AMI_GDRIVEHIST	0x92	/* get drive history */
188ebaedd01Smickey #define	AMI_GESENSE	0x93	/* get extended sense data dump */
189ebaedd01Smickey #define	AMI_ADAPTER	0x95	/* save/restore adapter params */
190ebaedd01Smickey #define		AMI_ADP_SAVE	0
191ebaedd01Smickey #define		AMI_ADP_LOAD	1
192ebaedd01Smickey #define	AMI_RESET	0x96	/* adapter reset */
193ebaedd01Smickey #define	AMI_PRGCLASS	0x97	/* program class code */
194ebaedd01Smickey #define	AMI_UPHTML	0x98	/* upload html utility */
195ebaedd01Smickey #define	AMI_NEWCFG	0x99
196ebaedd01Smickey #define	AMI_NEWOP	0xa0
197ebaedd01Smickey #define	AMI_FCOP	0xa1
198ebaedd01Smickey #define		AMI_FC_PROCEED	0x02
199ebaedd01Smickey #define		AMI_FC_DELLDRV	0x03
200ebaedd01Smickey #define		AMI_FC_RDCONF	0x04
201ebaedd01Smickey #define		AMI_FC_RDFCONF	0x05
202ebaedd01Smickey #define		AMI_FC_GCONFDSK	0x06
203ebaedd01Smickey #define		AMI_FC_CHLDNO	0x07
204ebaedd01Smickey #define		AMI_FC_CMPCTCFG	0x08
205ebaedd01Smickey #define		AMI_FC_DRVGRP	0x09
206ebaedd01Smickey #define		AMI_FC_GLOOPINF	0x0a
207ebaedd01Smickey #define		AMI_FC_CHLOOPID	0x0b
208ebaedd01Smickey #define		AMI_FC_GNSCH	0x0c
209ebaedd01Smickey #define		AMI_FC_WRCONF	0x0d
210ebaedd01Smickey #define		AMI_FC_PRODINF	0x0e
211ebaedd01Smickey #define		AMI_FC_EINQ3	0x0f
2124fcc9d5dSmarco #define		AMI_FC_EINQ4	0x1f
213ebaedd01Smickey #define			AMI_FC_EINQ3_SOLICITED_NOTIFY	0x01
214ebaedd01Smickey #define			AMI_FC_EINQ3_SOLICITED_FULL	0x02
215ebaedd01Smickey #define			AMI_FC_EINQ3_UNSOLICITED	0x03
216ebaedd01Smickey #define	AMI_MISC	0xa4
21794d7d32fSmarco #define		AMI_GET_BGI	0x13
218001b382fSmarco #define		AMI_GET_IO_CMPL	0x5b
219001b382fSmarco #define		AMI_SET_IO_CMPL	0x5c
220ebaedd01Smickey #define	AMI_CHFUNC	0xa9
221ebaedd01Smickey #define	AMI_MANAGE	0xb0	/* manage functions */
222ebaedd01Smickey #define		AMI_MGR_LUN	0x00
223ebaedd01Smickey #define		AMI_MGR_THERM	0x01
224ebaedd01Smickey #define		AMI_MGR_EEPROM	0x02
225ebaedd01Smickey #define		AMI_MGR_LDNAMES	0x03
226ebaedd01Smickey #define		AMI_MGR_FCWWN	0x04
227ebaedd01Smickey #define		AMI_MGR_CFGACC	0x05
228ebaedd01Smickey #define	AMI_HSPDIAG	0xb1
229ebaedd01Smickey #define	AMI_GESENSEINFO	0xb2	/* get extended sense info */
230ebaedd01Smickey #define	AMI_SYSFLUSH	0xfe	/* flush system */
231ebaedd01Smickey 
232ebaedd01Smickey /* command structures */
233ebaedd01Smickey struct ami_iocmd {
234ebaedd01Smickey 	u_int8_t	acc_cmd;
235ebaedd01Smickey 	u_int8_t	acc_id;
236ebaedd01Smickey 	union {
237ebaedd01Smickey #define	acc_mbox	_._ami_mbox
238ebaedd01Smickey 		struct {
239ebaedd01Smickey 			u_int16_t	amb_nsect;
240ebaedd01Smickey 			u_int32_t	amb_lba;
241ebaedd01Smickey 			u_int32_t	amb_data;
242ebaedd01Smickey 			u_int8_t	amb_ldn;	/* logical drive no */
243ebaedd01Smickey 			u_int8_t	amb_nsge;
244ebaedd01Smickey 			u_int8_t	amb_reserved;
245a4bdad68Sdlg 		} __packed _ami_mbox;
246ebaedd01Smickey 
247ebaedd01Smickey #define	acc_io		_._ami_io
248ebaedd01Smickey 		struct {
249ebaedd01Smickey 			u_int8_t	aio_channel;
250ebaedd01Smickey 			u_int8_t	aio_param;
251ebaedd01Smickey 			u_int8_t	aio_pad[4];
252ebaedd01Smickey 			u_int32_t	aio_data;
253ebaedd01Smickey 			u_int8_t	aio_pad1[3];
254a4bdad68Sdlg 		} __packed _ami_io;
255ebaedd01Smickey 
2567bceb969Sdlg #define	acc_passthru	_._ami_passthru
257ebaedd01Smickey 		struct {
258ebaedd01Smickey 			u_int16_t	apt_dummy0;
259ebaedd01Smickey 			u_int32_t	apt_dummy1;
260ebaedd01Smickey 			u_int32_t	apt_data;
261ebaedd01Smickey 			u_int8_t	apt_dummy2;
262ebaedd01Smickey 			u_int8_t	apt_dummy3;
263ebaedd01Smickey 			u_int8_t	apt_reserved;
264a4bdad68Sdlg 		} __packed _ami_passthru;
265ebaedd01Smickey 
266ebaedd01Smickey #define	acc_ldrv	_._ami_ldrv
267ebaedd01Smickey 		struct {
268ebaedd01Smickey 			u_int16_t	ald_dummy0;
269ebaedd01Smickey 			u_int32_t	ald_dummy1;
270ebaedd01Smickey 			u_int32_t	ald_data;
271ebaedd01Smickey 			u_int8_t	ald_ldrv;
272ebaedd01Smickey 			u_int8_t	ald_dummy2;
273ebaedd01Smickey 			u_int8_t	ald_reserved;
274a4bdad68Sdlg 		} __packed _ami_ldrv;
275a4bdad68Sdlg 	} __packed _;
276ebaedd01Smickey 	u_int8_t	acc_busy;
277ebaedd01Smickey 	u_int8_t	acc_nstat;
278ebaedd01Smickey 	u_int8_t	acc_status;
279ebaedd01Smickey #define	AMI_MAXSTATACK	0x2e
280ebaedd01Smickey 	u_int8_t	acc_cmplidl[AMI_MAXSTATACK];
281ebaedd01Smickey 	u_int8_t	acc_poll;
282ebaedd01Smickey 	u_int8_t	acc_ack;
2832d7b028aSmickey 	u_int8_t	acc_pad[0x3e];	/* pad to 128 bytes */
284a4bdad68Sdlg } __packed;
285ebaedd01Smickey 
286ebaedd01Smickey struct ami_sgent {
287ebaedd01Smickey 	u_int32_t	asg_addr;
288ebaedd01Smickey 	u_int32_t	asg_len;
289a4bdad68Sdlg } __packed;
290ebaedd01Smickey 
291ebaedd01Smickey struct ami_iocmd64 {
292ebaedd01Smickey 	u_int8_t	acc_cmd;
293ebaedd01Smickey 	u_int8_t	acc_id;
294ebaedd01Smickey 	union {
295ebaedd01Smickey 		struct {
296ebaedd01Smickey 			u_int16_t	amb_nsect;
297ebaedd01Smickey 			u_int32_t	amb_lba;
298ebaedd01Smickey 			u_int32_t	amb_reserved1;
299ebaedd01Smickey 			u_int8_t	amb_ldn;	/* logical drive no */
300ebaedd01Smickey 			u_int8_t	amb_nsge;	/* high bit == 1 */
301ebaedd01Smickey 			u_int8_t	amb_reserved;
302a4bdad68Sdlg 		} __packed _ami_mbox;
303ebaedd01Smickey 
304ebaedd01Smickey 		struct {
305ebaedd01Smickey 			u_int8_t	aio_channel;
306ebaedd01Smickey 			u_int8_t	aio_param;
307ebaedd01Smickey 			u_int8_t	aio_pad[4];
308ebaedd01Smickey 			u_int32_t	aio_data;
309ebaedd01Smickey 			u_int8_t	aio_pad1[3];
310a4bdad68Sdlg 		} __packed _ami_io;
311ebaedd01Smickey 
312ebaedd01Smickey 		struct {
313ebaedd01Smickey 			u_int16_t	apt_dummy0;
314ebaedd01Smickey 			u_int32_t	apt_dummy1;
315ebaedd01Smickey 			u_int32_t	apt_data;
316ebaedd01Smickey 			u_int8_t	apt_dummy2;
317ebaedd01Smickey 			u_int8_t	apt_dummy3;
318ebaedd01Smickey 			u_int8_t	apt_reserved;
319a4bdad68Sdlg 		} __packed _ami_passthru;
320ebaedd01Smickey 
321ebaedd01Smickey 		struct {
322ebaedd01Smickey 			u_int16_t	ald_dummy0;
323ebaedd01Smickey 			u_int32_t	ald_dummy1;
324ebaedd01Smickey 			u_int32_t	ald_data;
325ebaedd01Smickey 			u_int8_t	ald_ldrv;
326ebaedd01Smickey 			u_int8_t	ald_dummy2;
327ebaedd01Smickey 			u_int8_t	ald_reserved;
328a4bdad68Sdlg 		} __packed _ami_ldrv;
329a4bdad68Sdlg 	} __packed _;
330ebaedd01Smickey 	u_int8_t	acc_busy;
331ebaedd01Smickey 	u_int32_t	acc_data_l;
332ebaedd01Smickey 	u_int32_t	acc_data_h;
333ebaedd01Smickey 	u_int32_t	acc_reserved;
334ebaedd01Smickey 	u_int8_t	acc_nstat;
335ebaedd01Smickey 	u_int8_t	acc_status;
336ebaedd01Smickey 	u_int8_t	acc_cmplidl[AMI_MAXSTATACK];
337ebaedd01Smickey 	u_int8_t	acc_poll;
338ebaedd01Smickey 	u_int8_t	acc_ack;
3392d7b028aSmickey 	u_int8_t	acc_pad[0x32];	/* pad to 128 bytes */
340a4bdad68Sdlg } __packed;
341ebaedd01Smickey 
342ebaedd01Smickey struct ami_sgent64 {
343ebaedd01Smickey 	u_int32_t	asg_addr_l;
344ebaedd01Smickey 	u_int32_t	asg_addr_h;
345ebaedd01Smickey 	u_int32_t	asg_len;
346a4bdad68Sdlg } __packed;
347ebaedd01Smickey 
348ebaedd01Smickey struct ami_passthrough {
349ebaedd01Smickey 	u_int8_t	apt_param;
350ebaedd01Smickey #define	AMI_PTPARAM(t,a,l)	(((l) << 7) | (((a) & 1) << 3) | ((t) & 3))
351ebaedd01Smickey #define	AMI_TIMEOUT_6	0
352ebaedd01Smickey #define	AMI_TIMEOUT_60	1
353ebaedd01Smickey #define	AMI_TIMEOUT_10m	2
354ebaedd01Smickey #define	AMI_TIMEOUT_3h	3
355ebaedd01Smickey 	u_int8_t	apt_ldn;
356ebaedd01Smickey 	u_int8_t	apt_channel;
357ebaedd01Smickey 	u_int8_t	apt_target;
358ebaedd01Smickey 	u_int8_t	apt_qtag;
359ebaedd01Smickey 	u_int8_t	apt_qact;
360ebaedd01Smickey #define	AMI_MAX_CDB	10
361ebaedd01Smickey 	u_int8_t	apt_cdb[AMI_MAX_CDB];
362ebaedd01Smickey 	u_int8_t	apt_ncdb;
363ebaedd01Smickey 	u_int8_t	apt_nsense;
364ebaedd01Smickey #define	AMI_MAX_SENSE	32
365ebaedd01Smickey 	u_int8_t	apt_sense[AMI_MAX_SENSE];
3663f46cb50Sdlg 	u_int8_t	apt_nsge;
367ebaedd01Smickey 	u_int8_t	apt_scsistat;
368ebaedd01Smickey 	u_int32_t	apt_data;
369ebaedd01Smickey 	u_int32_t	apt_datalen;
370a4bdad68Sdlg } __packed;
371ebaedd01Smickey 
372ebaedd01Smickey struct ami_inquiry {
373ebaedd01Smickey 	u_int8_t	ain_maxcmd;
374ebaedd01Smickey 	u_int8_t	ain_rbldrate;	/* rebuild rate %% */
375ebaedd01Smickey 	u_int8_t	ain_targets;	/* max targets per channel */
376ebaedd01Smickey 	u_int8_t	ain_channels;
377ebaedd01Smickey 	u_int8_t	ain_fwver[4];
378ebaedd01Smickey 	u_int16_t	ain_flashage;
379ebaedd01Smickey 	u_int8_t	ain_chipset;	/* parity generation policy */
380ebaedd01Smickey 	u_int8_t	ain_ramsize;
381ebaedd01Smickey 	u_int8_t	ain_flushintv;
382ebaedd01Smickey 	u_int8_t	ain_biosver[4];
383ebaedd01Smickey 	u_int8_t	ain_brdtype;
384ebaedd01Smickey 	u_int8_t	ain_scsisensealert;
385ebaedd01Smickey 	u_int8_t	ain_wrcfgcnt;	/* write config count */
386ebaedd01Smickey 	u_int8_t	ain_drvinscnt;	/* drive insertion count */
387ebaedd01Smickey 	u_int8_t	ain_insdrv;	/* inserted drive */
388ebaedd01Smickey 	u_int8_t	ain_battery;	/* battery status */
389ebaedd01Smickey 	u_int8_t	ain_reserved;
390ebaedd01Smickey 
391ebaedd01Smickey 	u_int8_t	ain_nlogdrv;
392ebaedd01Smickey 	u_int8_t	ain_reserved1[3];
393ebaedd01Smickey 	u_int32_t	ain_ldsize[AMI_MAX_LDRIVES];
394ebaedd01Smickey 	u_int8_t	ain_ldprop[AMI_MAX_LDRIVES];
395ebaedd01Smickey 	u_int8_t	ain_ldstat[AMI_MAX_LDRIVES];
396ebaedd01Smickey 
397ebaedd01Smickey 	u_int8_t	ain_pdstat[AMI_MAX_PDRIVES];
398ebaedd01Smickey 	u_int8_t	ain_predictivefailure;
399ebaedd01Smickey 
400ebaedd01Smickey 	u_int8_t	ain_pdfmtinp[AMI_MAX_PDRIVES];
401ebaedd01Smickey 	u_int8_t	ain_reserved2[AMI_MAX_PDRIVES];
402ebaedd01Smickey 
403ebaedd01Smickey 	u_int32_t	ain_esize;	/* extended data size */
404ebaedd01Smickey 	u_int16_t	ain_ssid;	/* subsystem id */
405ebaedd01Smickey 	u_int16_t	ain_ssvid;	/* subsystem vendor id */
406ebaedd01Smickey 	u_int32_t	ain_signature;
407ebaedd01Smickey #define	AMI_SIGN431	0xfffe0001
408ebaedd01Smickey #define	AMI_SIGN438	0xfffd0002
409ebaedd01Smickey #define	AMI_SIGN762	0xfffc0003
410ebaedd01Smickey #define	AMI_SIGNT5	0xfffb0004
411ebaedd01Smickey #define	AMI_SIGN466	0xfffa0005
412a4bdad68Sdlg } __packed;
413ebaedd01Smickey 
4144fcc9d5dSmarco #define MAX_NOTIFY_SIZE	0x80
4154fcc9d5dSmarco #define CUR_NOTIFY_SIZE (sizeof(struct ami_notify))
416a4bdad68Sdlg struct ami_notify {
4174fcc9d5dSmarco 	u_int32_t	ano_eventcounter;	/* incremented for changes */
4184fcc9d5dSmarco 
4194fcc9d5dSmarco 	u_int8_t	ano_paramcounter;	/* param change */
4204fcc9d5dSmarco 	u_int8_t	ano_paramid;		/* param modified */
4214fcc9d5dSmarco #define AMI_PARAM_RBLD_RATE		0x01 /* new rebuild rate */
4224fcc9d5dSmarco #define AMI_PARAM_CACHE_FLUSH_INTERVAL	0x02 /* new cache flush interval */
4234fcc9d5dSmarco #define AMI_PARAM_SENSE_ALERT		0x03 /* pd caused check condition */
4244fcc9d5dSmarco #define AMI_PARAM_DRIVE_INSERTED	0x04 /* pd inserted */
4254fcc9d5dSmarco #define AMI_PARAM_BATTERY_STATUS	0x05 /* battery status */
4264fcc9d5dSmarco #define AMI_PARAM_NVRAM_EVENT_ALERT	0x06 /* NVRAM # of entries */
4274fcc9d5dSmarco #define AMI_PARAM_PATROL_READ_UPDATE	0x07 /* # pd done with patrol read */
4284fcc9d5dSmarco #define AMI_PARAM_PATROL_READ_STATUS	0x08 /* 0 stopped
4294fcc9d5dSmarco 					      * 2 aborted
4304fcc9d5dSmarco 					      * 4 started */
4314fcc9d5dSmarco 
4324fcc9d5dSmarco 	u_int16_t	ano_paramval;		/* new val modified param */
4334fcc9d5dSmarco 
4344fcc9d5dSmarco 	u_int8_t	ano_writeconfcounter;	/* write config */
4354fcc9d5dSmarco 	u_int8_t	ano_writeconfrsvd[3];
4364fcc9d5dSmarco 
4374fcc9d5dSmarco 	u_int8_t	ano_ldopcounter;	/* ld op started/completed */
4384fcc9d5dSmarco 	u_int8_t	ano_ldopid;		/* ld modified */
4394fcc9d5dSmarco 	u_int8_t	ano_ldopcmd;		/* ld operation */
4404fcc9d5dSmarco #define AMI_LDCMD_CHKCONSISTANCY	0x01
4414fcc9d5dSmarco #define AMI_LDCMD_INITIALIZE		0x02
4424fcc9d5dSmarco #define AMI_LDCMD_RECONSTRUCTION	0x03
4434fcc9d5dSmarco 	u_int8_t	ano_ldopstatus;		/* status of the operation */
4444fcc9d5dSmarco #define AMI_LDOP_SUCCESS		0x00
4454fcc9d5dSmarco #define AMI_LDOP_FAILED			0x01
4464fcc9d5dSmarco #define AMI_LDOP_ABORTED		0x02
4474fcc9d5dSmarco #define AMI_LDOP_CORRECTED		0x03
4484fcc9d5dSmarco #define AMI_LDOP_STARTED		0x04
4494fcc9d5dSmarco 
4504fcc9d5dSmarco 	u_int8_t	ano_ldstatecounter;	/* change of ld state */
4514fcc9d5dSmarco 	u_int8_t	ano_ldstateid;		/* ld state changed */
4524fcc9d5dSmarco 	u_int8_t	ano_ldstatenew;		/* new state */
4534fcc9d5dSmarco 	u_int8_t	ano_ldstateold;		/* old state */
4544fcc9d5dSmarco #define AMI_RDRV_OFFLINE		0
4554fcc9d5dSmarco #define AMI_RDRV_DEGRADED		1
4564fcc9d5dSmarco #define AMI_RDRV_OPTIMAL		2
4574fcc9d5dSmarco #define AMI_RDRV_DELETED		3
4584fcc9d5dSmarco 
4594fcc9d5dSmarco 	u_int8_t	ano_pdstatecounter;	/* change of pd state */
4604fcc9d5dSmarco 	u_int8_t	ano_pdstateid;		/* pd state changed */
4614fcc9d5dSmarco 	u_int8_t	ano_pdstatenew;		/* new state */
4624fcc9d5dSmarco 	u_int8_t	ano_pdstateold;		/* old state */
4634fcc9d5dSmarco #define AMI_PD_UNCNF			0
4644fcc9d5dSmarco #define AMI_PD_ONLINE			3
4654fcc9d5dSmarco #define AMI_PD_FAILED			4
4664fcc9d5dSmarco #define AMI_PD_RBLD			5
4674fcc9d5dSmarco #define AMI_PD_HOTSPARE			6
4684fcc9d5dSmarco 
4694fcc9d5dSmarco 	u_int8_t	ano_pdfmtcounter;	/* pd format started/over */
4704fcc9d5dSmarco 	u_int8_t	ano_pdfmtid;		/* pd id */
4714fcc9d5dSmarco 	u_int8_t	ano_pdfmtval;		/* format started/over */
4724fcc9d5dSmarco #define AMI_PDFMT_START			0x01
4734fcc9d5dSmarco #define AMI_PDFMT_OVER			0x02
4744fcc9d5dSmarco 	u_int8_t	ano_pdfmtrsvd;
4754fcc9d5dSmarco 
4764fcc9d5dSmarco 	u_int8_t	ano_targxfercounter;	/* SCSI-2 Xfer rate change */
4774fcc9d5dSmarco 	u_int8_t	ano_targxferid;		/* pd that changed  */
4784fcc9d5dSmarco 	u_int8_t	ano_targxferval;	/* new xfer parameters */
4794fcc9d5dSmarco 	u_int8_t	ano_targxferrsvd;
4804fcc9d5dSmarco 
4814fcc9d5dSmarco 	u_int8_t	ano_fclidchgcounter;	/* loop id changed */
4824fcc9d5dSmarco 	u_int8_t	ano_fclidpdid;		/* pd id */
4834fcc9d5dSmarco 	u_int8_t	ano_fclid0;		/* loop id on fc loop 0 */
4844fcc9d5dSmarco 	u_int8_t	ano_fclid1;		/* loop id on fc loop 1 */
4854fcc9d5dSmarco 
4864fcc9d5dSmarco 	u_int8_t	ano_fclstatecounter;	/* loop state changed */
4874fcc9d5dSmarco 	u_int8_t	ano_fclstate0;		/* state of fc loop 0 */
4884fcc9d5dSmarco 	u_int8_t	ano_fclstate1;		/* state of fc loop 1 */
4894fcc9d5dSmarco #define AMI_FCLOOP_FAILED		0
4904fcc9d5dSmarco #define AMI_FCLOOP_ACTIVE		1
4914fcc9d5dSmarco #define AMI_FCLOOP_TRANSIENT		2
4924fcc9d5dSmarco 	u_int8_t	ano_fclstatersvd;
493a4bdad68Sdlg } __packed;
4944fcc9d5dSmarco 
495ebaedd01Smickey struct ami_fc_einquiry {
496ebaedd01Smickey 	u_int32_t	ain_size;	/* size of this structure */
497ebaedd01Smickey 
498ebaedd01Smickey 	/* notify */
4994fcc9d5dSmarco 	struct	ami_notify ain_notify;
5004fcc9d5dSmarco 	u_int8_t	ain_notifyrsvd[MAX_NOTIFY_SIZE - CUR_NOTIFY_SIZE];
501ebaedd01Smickey 
502ebaedd01Smickey 	u_int8_t	ain_rbldrate;	/* rebuild rate %% */
503ebaedd01Smickey 	u_int8_t	ain_flushintvl;
504ebaedd01Smickey 	u_int8_t	ain_sensealert;
505ebaedd01Smickey 	u_int8_t	ain_drvinscnt;	/* drive insertion count */
506ebaedd01Smickey 	u_int8_t	ain_battery;	/* battery status */
507ebaedd01Smickey 
508ebaedd01Smickey 	u_int8_t	ain_nlogdrv;
509ebaedd01Smickey 	u_int8_t	ain_recon[AMI_BIG_MAX_LDRIVES / 8];
510ebaedd01Smickey 	u_int16_t	ain_stat[AMI_BIG_MAX_LDRIVES / 8];
511ebaedd01Smickey 
512ebaedd01Smickey 	u_int32_t	ain_ldsize[AMI_BIG_MAX_LDRIVES];
513ebaedd01Smickey 	u_int8_t	ain_ldprop[AMI_BIG_MAX_LDRIVES];
514ebaedd01Smickey 	u_int8_t	ain_ldstat[AMI_BIG_MAX_LDRIVES];
515ebaedd01Smickey 
5165d4072b7Smarco 	u_int8_t	ain_pdstat[AMI_BIG_MAX_PDRIVES];
5171e1a51daSmarco 	u_int16_t	ain_pdfmtinp[AMI_BIG_MAX_PDRIVES / 16];
518fc109205Smickey 	u_int8_t	ain_pdrates[80];	/* pdrv xfer rates */
5195d4072b7Smarco 	u_int8_t	ain_pad[263];		/* pad to 1k */
520a4bdad68Sdlg } __packed;
521ebaedd01Smickey 
522ebaedd01Smickey struct ami_fc_prodinfo {
523ebaedd01Smickey 	u_int32_t	api_size;	/* size of this structure */
524ebaedd01Smickey 	u_int32_t	api_config;
525ebaedd01Smickey 	u_int8_t	api_fwver[16];
526ebaedd01Smickey 	u_int8_t	api_biosver[16];
527ebaedd01Smickey 	u_int8_t	api_product[80];
528ebaedd01Smickey 	u_int8_t	api_maxcmd;
529ebaedd01Smickey 	u_int8_t	api_channels;
530ebaedd01Smickey 	u_int8_t	api_fcloops;
531ebaedd01Smickey 	u_int8_t	api_memtype;
532ebaedd01Smickey 	u_int32_t	api_signature;
533ebaedd01Smickey 	u_int16_t	api_ramsize;
534ebaedd01Smickey 	u_int16_t	api_ssid;
535ebaedd01Smickey 	u_int16_t	api_ssvid;
536ebaedd01Smickey 	u_int8_t	api_nnotify;
537a4bdad68Sdlg } __packed;
538ebaedd01Smickey 
539ebaedd01Smickey struct ami_diskarray {
540ebaedd01Smickey 	u_int8_t	ada_nld;
541ebaedd01Smickey 	u_int8_t	ada_pad[3];
542ebaedd01Smickey 	struct {
543ebaedd01Smickey 		u_int8_t	adl_spandepth;
544ebaedd01Smickey 		u_int8_t	adl_raidlvl;
545ebaedd01Smickey 		u_int8_t	adl_rdahead;
546ebaedd01Smickey 		u_int8_t	adl_stripesz;
547ebaedd01Smickey 		u_int8_t	adl_status;
548ebaedd01Smickey 		u_int8_t	adl_wrpolicy;
549ebaedd01Smickey 		u_int8_t	adl_directio;
550ebaedd01Smickey 		u_int8_t	adl_nstripes;
551ebaedd01Smickey 		struct {
552ebaedd01Smickey 			u_int32_t	ads_start;
553ebaedd01Smickey 			u_int32_t	ads_length;	/* blocks */
554ebaedd01Smickey 			struct {
555ebaedd01Smickey 				u_int8_t	add_channel;
556ebaedd01Smickey 				u_int8_t	add_target;
557a4bdad68Sdlg 			} __packed ads_devs[AMI_MAX_DEVDEPTH];
558a4bdad68Sdlg 		} __packed adl_spans[AMI_MAX_SPANDEPTH];
559a4bdad68Sdlg 	} __packed ada_ldrv[AMI_MAX_LDRIVES];
560ebaedd01Smickey 	struct {
561ebaedd01Smickey 		u_int8_t	adp_type;	/* SCSI device type */
562ebaedd01Smickey 		u_int8_t	adp_ostatus;	/* status during config */
563ebaedd01Smickey 		u_int8_t	adp_tagdepth;	/* level of tagging */
564ebaedd01Smickey 		u_int8_t	adp_sneg;	/* sync negotiation */
565ebaedd01Smickey 		u_int32_t	adp_size;
566a4bdad68Sdlg 	} __packed ada_pdrv[AMI_MAX_PDRIVES];
567a4bdad68Sdlg } __packed;
568ebaedd01Smickey 
569d12ab0b2Smarco struct ami_big_diskarray {
570d12ab0b2Smarco 	u_int8_t	ada_nld;
571d12ab0b2Smarco 	u_int8_t	ada_pad[3];
572db2730c1Smarco #define ald ada_ldrv
573d12ab0b2Smarco 	struct {
574d12ab0b2Smarco 		u_int8_t	adl_spandepth;
575d12ab0b2Smarco 		u_int8_t	adl_raidlvl;
576d12ab0b2Smarco 		u_int8_t	adl_rdahead;
577d12ab0b2Smarco 		u_int8_t	adl_stripesz;
578d12ab0b2Smarco 		u_int8_t	adl_status;
579d12ab0b2Smarco 		u_int8_t	adl_wrpolicy;
580d12ab0b2Smarco 		u_int8_t	adl_directio;
581d12ab0b2Smarco 		u_int8_t	adl_nstripes;
582db2730c1Smarco #define 	asp adl_spans
583d12ab0b2Smarco 		struct {
584d12ab0b2Smarco 			u_int32_t	ads_start;
585d12ab0b2Smarco 			u_int32_t	ads_length;	/* blocks */
586db2730c1Smarco #define 		adv ads_devs
587d12ab0b2Smarco 			struct {
588d12ab0b2Smarco 				u_int8_t	add_channel;
589d12ab0b2Smarco 				u_int8_t	add_target;
590a4bdad68Sdlg 			} __packed ads_devs[AMI_BIG_MAX_DEVDEPTH];
591a4bdad68Sdlg 		} __packed adl_spans[AMI_BIG_MAX_SPANDEPTH];
592a4bdad68Sdlg 	} __packed ada_ldrv[AMI_BIG_MAX_LDRIVES];
593db2730c1Smarco #define apd ada_pdrv
594d12ab0b2Smarco 	struct {
595d12ab0b2Smarco 		u_int8_t	adp_type;	/* SCSI device type */
596d12ab0b2Smarco 		u_int8_t	adp_ostatus;	/* status during config */
597d12ab0b2Smarco 		u_int8_t	adp_tagdepth;	/* level of tagging */
598d12ab0b2Smarco 		u_int8_t	adp_sneg;	/* sync negotiation */
599d12ab0b2Smarco 		u_int32_t	adp_size;
600a4bdad68Sdlg 	} __packed ada_pdrv[AMI_BIG_MAX_PDRIVES];
601a4bdad68Sdlg } __packed;
602d12ab0b2Smarco 
603ebaedd01Smickey struct ami_scsisense {
604ebaedd01Smickey 	u_int8_t	ase_end;
605ebaedd01Smickey 	struct {
606ebaedd01Smickey 		u_int8_t	asd_channel;
607ebaedd01Smickey 		u_int8_t	asd_target;
608ebaedd01Smickey 		u_int16_t	asd_errcode;
609ebaedd01Smickey 		u_int16_t	asd_sense;
610ebaedd01Smickey 		u_int16_t	asd_addarea1;
611ebaedd01Smickey 		u_int16_t	asd_addarea2;
612ebaedd01Smickey 		u_int16_t	asd_cmdspec0;
613ebaedd01Smickey 		u_int16_t	asd_cmdspec1;
614ebaedd01Smickey 		u_int16_t	asd_asc_ascq;
615a4bdad68Sdlg 	} __packed ase_dump[5];
616a4bdad68Sdlg } __packed;
617ebaedd01Smickey 
618ebaedd01Smickey struct ami_escsisense {
619ebaedd01Smickey 	u_int8_t	ase_end;
620ebaedd01Smickey 	struct {
621ebaedd01Smickey 		u_int8_t	asd_channel;
622ebaedd01Smickey 		u_int8_t	asd_target;
623ebaedd01Smickey 		u_int16_t	asd_errcode;
624ebaedd01Smickey 		u_int16_t	asd_sense;
625ebaedd01Smickey 		u_int16_t	asd_addarea1;
626ebaedd01Smickey 		u_int16_t	asd_addarea2;
627ebaedd01Smickey 		u_int16_t	asd_cmdspec0;
628ebaedd01Smickey 		u_int16_t	asd_cmdspec1;
629ebaedd01Smickey 		u_int16_t	asd_asc_ascq;
630ebaedd01Smickey 		u_int16_t	asd_extarea;
631a4bdad68Sdlg 	} __packed ase_dump[5];
632a4bdad68Sdlg } __packed;
633ebaedd01Smickey 
634ebaedd01Smickey struct ami_cachestats {
635ebaedd01Smickey 	u_int32_t	acs_total;
636ebaedd01Smickey 	u_int32_t	acs_hits;
637a4bdad68Sdlg } __packed;
638ebaedd01Smickey 
639ebaedd01Smickey struct ami_drivehistory {
640ebaedd01Smickey 	struct {
641ebaedd01Smickey 		u_int8_t	adh_error;
642ebaedd01Smickey #define	AMI_ADHERR_TIMEOUT(e)	((e) & 15)
643ebaedd01Smickey #define	AMI_ADHERR_PARITY(e)	(((e) >> 4) & 15)
644ebaedd01Smickey 		u_int8_t	adh_throttle;
645a4bdad68Sdlg 	} __packed adh_err[3][16];	/* channels * drives */
646ebaedd01Smickey 	u_int8_t	adh_failidx;
647ebaedd01Smickey 	struct {
648ebaedd01Smickey 		u_int8_t	adh_tag;
649ebaedd01Smickey #define	AMI_ADHTAG_CH(t)	((t) & 7)
650ebaedd01Smickey #define	AMI_ADHTAG_TARG(t)	(((t) >> 3) & 15)
651ebaedd01Smickey #define	AMI_ADHTAG_VALID(t)	((t) & 0x80)
652ebaedd01Smickey 		u_int8_t	reason;
653ebaedd01Smickey #define	AMI_ADHERR_MEDIA	1
654ebaedd01Smickey #define	AMI_ADHERR_NMEDIA	2
655ebaedd01Smickey #define	AMI_ADHERR_CMDTMO	3
656ebaedd01Smickey #define	AMI_ADHERR_SELTMO	4
657ebaedd01Smickey #define	AMI_ADHERR_HAFAIL	5
658ebaedd01Smickey #define	AMI_ADHERR_REASSIGN	6
659ebaedd01Smickey #define	AMI_ADHERR_CMDFAIL	7
660ebaedd01Smickey #define	AMI_ADHERR_OTHER	8
661ebaedd01Smickey 
662ebaedd01Smickey #define	AMI_FAILHISTORY		10
663a4bdad68Sdlg 	} __packed adh_fail[AMI_FAILHISTORY];
664a4bdad68Sdlg } __packed;
665ebaedd01Smickey 
66694d7d32fSmarco struct ami_progress {
66794d7d32fSmarco 	u_int32_t	apr_progress;
66894d7d32fSmarco } __packed;
669