[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     ! 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