[BACK]Return to amireg.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

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