Annotation of sys/dev/ic/amireg.h, Revision 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