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