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

Annotation of sys/dev/ic/cissreg.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: cissreg.h,v 1.8 2006/08/28 03:22:37 mickey Exp $      */
        !             2:
        !             3: /*
        !             4:  * Copyright (c) 2005,2006 Michael Shalayeff
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * Permission to use, copy, modify, and distribute this software for any
        !             8:  * purpose with or without fee is hereby granted, provided that the above
        !             9:  * copyright notice and this permission notice appear in all copies.
        !            10:  *
        !            11:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
        !            12:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
        !            13:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
        !            14:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
        !            15:  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN
        !            16:  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
        !            17:  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            18:  */
        !            19:
        !            20: #define        CISS_BIGBIT     0x80    /* texas radio and the big beat! */
        !            21:
        !            22: #define        CISS_IDB        0x20
        !            23: #define        CISS_IDB_CFG    0x01
        !            24: #define        CISS_ISR        0x30
        !            25: #define        CISS_IMR        0x34
        !            26: #define        CISS_READYENAB  4
        !            27: #define        CISS_READYENA   8
        !            28: #define        CISS_INQ        0x40
        !            29: #define        CISS_OUTQ       0x44
        !            30: #define        CISS_CFG_BAR    0xb4
        !            31: #define        CISS_CFG_OFF    0xb8
        !            32:
        !            33: #define        CISS_DRVMAP_SIZE        (128 / 8)
        !            34:
        !            35: #define        CISS_CMD_CTRL_GET       0x26
        !            36: #define        CISS_CMD_CTRL_SET       0x27
        !            37: /* sub-commands for GET/SET */
        !            38: #define        CISS_CMS_CTRL_LDID      0x10
        !            39: #define        CISS_CMS_CTRL_CTRL      0x11
        !            40: #define        CISS_CMS_CTRL_LDSTAT    0x12
        !            41: #define        CISS_CMS_CTRL_PDID      0x15
        !            42: #define        CISS_CMS_CTRL_PDBLINK   0x16
        !            43: #define        CISS_CMS_CTRL_PDBLSENS  0x17
        !            44: #define        CISS_CMS_CTRL_LDIDEXT   0x18
        !            45: #define        CISS_CMS_CTRL_REDSTAT   0x82
        !            46: #define        CISS_CMS_CTRL_FLUSH     0xc2
        !            47: #define        CISS_CMS_CTRL_ACCEPT    0xe0
        !            48:
        !            49: #define        CISS_CMD_READ   0xc0
        !            50: #define        CISS_CMD_READ_EVENT     0xd0
        !            51: #define        CISS_EVENT_RECENT       0x08    /* ignore previous events */
        !            52: #define        CISS_EVENT_RSTOLD       0x04    /* start w/ the oldest one */
        !            53: #define        CISS_EVENT_ORDER        0x02    /* keep the order */
        !            54: #define        CISS_EVENT_SYNC         0x01    /* sync mode: wait till new come */
        !            55: #define        CISS_CMD_LDMAP  0xc2
        !            56: #define        CISS_CMD_PDMAP  0xc3
        !            57:
        !            58: #define        ciss_bitset(d, v)       ((v)[(d) >> 3] & (1 << ((d) & 7)))
        !            59:
        !            60: struct ciss_softc;
        !            61:
        !            62: struct ciss_config {
        !            63:        u_int32_t       signature;
        !            64: #define        CISS_SIGNATURE  (*(u_int32_t *)"CISS")
        !            65:        u_int32_t       version;
        !            66:        u_int32_t       methods;
        !            67: #define        CISS_METH_READY 0x0001
        !            68: #define        CISS_METH_SIMPL 0x0002
        !            69: #define        CISS_METH_PERF  0x0004
        !            70: #define        CISS_METH_EMQ   0x0008
        !            71:        u_int32_t       amethod;
        !            72:        u_int32_t       rmethod;
        !            73:        u_int32_t       paddr_lim;
        !            74:        u_int32_t       int_delay;
        !            75:        u_int32_t       int_count;
        !            76:        u_int32_t       maxcmd;
        !            77:        u_int32_t       scsibus;
        !            78: #define        CISS_BUS_U2     0x0001
        !            79: #define        CISS_BUS_U3     0x0002
        !            80: #define        CISS_BUS_FC1    0x0100
        !            81: #define        CISS_BUS_FC2    0x0200
        !            82:        u_int32_t       troff;
        !            83:        u_int8_t        hostname[16];
        !            84:        u_int32_t       heartbeat;
        !            85:        u_int32_t       driverf;
        !            86: #define        CISS_DRV_UATT   0x0001
        !            87: #define        CISS_DRV_QINI   0x0002
        !            88: #define        CISS_DRV_LCKINT 0x0004
        !            89: #define        CISS_DRV_QTAGS  0x0008
        !            90: #define        CISS_DRV_ALPHA  0x0010
        !            91: #define        CISS_DRV_LUNS   0x0020
        !            92: #define        CISS_DRV_MSGRQ  0x0080
        !            93: #define        CISS_DRV_DBRD   0x0100
        !            94: #define        CISS_DRV_PRF    0x0200
        !            95:        u_int32_t       maxsg;
        !            96: } __packed;
        !            97:
        !            98: struct ciss_inquiry {
        !            99:        u_int8_t        numld;
        !           100:        u_int8_t        sign[4];
        !           101:        u_int8_t        fw_running[4];
        !           102:        u_int8_t        fw_stored[4];
        !           103:        u_int8_t        hw_rev;
        !           104:        u_int8_t        resv0[12];
        !           105:        u_int16_t       pci_vendor;
        !           106:        u_int16_t       pci_product;
        !           107:        u_int8_t        resv1[10];
        !           108:        u_int8_t        market_rev;
        !           109:        u_int8_t        flags;
        !           110: #define        CISS_INQ_WIDE   0x08
        !           111: #define        CISS_INQ_BIGMAP 0x80
        !           112: #define        CISS_INQ_BITS   "\020\04WIDE\010BIGMAP"
        !           113:        u_int8_t        resv2[2];
        !           114:        u_int8_t        nscsi_bus;
        !           115:        u_int8_t        resv3[4];
        !           116:        u_int8_t        clk[4];         /* unaligned dumbness */
        !           117:        u_int8_t        buswidth;
        !           118:        u_int8_t        disks[CISS_DRVMAP_SIZE];
        !           119:        u_int8_t        extdisks[CISS_DRVMAP_SIZE];
        !           120:        u_int8_t        nondisks[CISS_DRVMAP_SIZE];
        !           121: } __packed;
        !           122:
        !           123: struct ciss_ldmap {
        !           124:        u_int32_t       size;
        !           125:        u_int32_t       resv;
        !           126:        struct {
        !           127:                u_int32_t tgt;
        !           128:                u_int32_t tgt2;
        !           129:        } map[1];
        !           130: } __packed;
        !           131:
        !           132: struct ciss_flush {
        !           133:        u_int16_t       flush;
        !           134: #define        CISS_FLUSH_ENABLE       0
        !           135: #define        CISS_FLUSH_DISABLE      1
        !           136:        u_int16_t       resv[255];
        !           137: } __packed;
        !           138:
        !           139: struct ciss_blink {
        !           140:        u_int32_t       duration;       /* x100ms */
        !           141:        u_int32_t       elapsed;        /* only for sense */
        !           142:        u_int8_t        pdtab[256];
        !           143: #define        CISS_BLINK_ALL  1
        !           144: #define        CISS_BLINK_TIMED 2
        !           145:        u_int8_t        res[248];
        !           146: } __packed;
        !           147:
        !           148: struct ciss_ldid {
        !           149:        u_int16_t       blksize;
        !           150:        u_int16_t       nblocks[2];     /* UNALIGNED! */
        !           151:        u_int8_t        params[16];
        !           152:        u_int8_t        type;
        !           153: #define        CISS_LD_RAID0   0
        !           154: #define        CISS_LD_RAID4   1
        !           155: #define        CISS_LD_RAID1   2
        !           156: #define        CISS_LD_RAID5   3
        !           157: #define        CISS_LD_RAID51  4
        !           158: #define        CISS_LD_RAIDADG 5
        !           159:        u_int8_t        res0;
        !           160:        u_int8_t        bios_dis;
        !           161:        u_int8_t        res1;
        !           162:        u_int32_t       id;
        !           163:        u_int8_t        label[64];
        !           164:        u_int64_t       nbigblocks;
        !           165:        u_int8_t        res2[410];
        !           166: } __packed;
        !           167:
        !           168: struct ciss_ldstat {
        !           169:        u_int8_t        stat;
        !           170: #define        CISS_LD_OK      0
        !           171: #define        CISS_LD_FAILED  1
        !           172: #define        CISS_LD_UNCONF  2
        !           173: #define        CISS_LD_DEGRAD  3
        !           174: #define        CISS_LD_RBLDRD  4       /* ready for rebuild */
        !           175: #define        CISS_LD_REBLD   5
        !           176: #define        CISS_LD_PDINV   6       /* wrong phys drive replaced */
        !           177: #define        CISS_LD_PDUNC   7       /* phys drive is not connected proper */
        !           178: #define        CISS_LD_EXPND   10      /* expanding */
        !           179: #define        CISS_LD_NORDY   11      /* volume is not ready */
        !           180: #define        CISS_LD_QEXPND  12      /* queued for expansion */
        !           181:        u_int8_t        failed[4];      /* failed map */
        !           182:        u_int8_t        res0[416];
        !           183:        u_int8_t        prog[4];        /* blocks left to rebuild/expand */
        !           184:        u_int8_t        rebuild;        /* drive that is rebuilding */
        !           185:        u_int16_t       remapcnt[32];   /* count of re3mapped blocks for pds */
        !           186:        u_int8_t        replaced[4];    /* replaced drives map */
        !           187:        u_int8_t        spare[4];       /* used spares map */
        !           188:        u_int8_t        sparestat;      /* spare status */
        !           189: #define        CISS_LD_CONF    0x01    /* spare configured */
        !           190: #define        CISS_LD_RBLD    0x02    /* spare is used and rebuilding */
        !           191: #define        CISS_LD_DONE    0x04    /* spare rebuild done */
        !           192: #define        CISS_LD_FAIL    0x08    /* at least one spare drive has failed */
        !           193: #define        CISS_LD_USED    0x10    /* at least one spare drive is used */
        !           194: #define        CISS_LD_AVAIL   0x20    /* at least one spare is available */
        !           195:        u_int8_t        sparemap[32];   /* spare->pd replacement map */
        !           196:        u_int8_t        replok[4];      /* replaced failed map */
        !           197:        u_int8_t        readyok;        /* ready to become ok */
        !           198:        u_int8_t        memfail;        /* cache mem failure */
        !           199:        u_int8_t        expfail;        /* expansion failure */
        !           200:        u_int8_t        rebldfail;      /* rebuild failure */
        !           201: #define        CISS_LD_RBLD_READ       0x01    /* read faild */
        !           202: #define        CISS_LD_RBLD_WRITE      0x02    /* write fail */
        !           203:        u_int8_t        bigfailed[16];  /* bigmap vers of same of the above */
        !           204:        u_int8_t        bigremapcnt[256];
        !           205:        u_int8_t        bigreplaced[16];
        !           206:        u_int8_t        bigspare[16];
        !           207:        u_int8_t        bigsparemap[128];
        !           208:        u_int8_t        bigreplok[16];
        !           209:        u_int8_t        bigrebuild;     /* big-number rebuilding driveno */
        !           210: } __packed;
        !           211:
        !           212: struct ciss_pdid {
        !           213:        u_int8_t        bus;
        !           214:        u_int8_t        target;
        !           215:        u_int16_t       blksz;
        !           216:        u_int32_t       nblocks;
        !           217:        u_int32_t       resblks;
        !           218:        u_int8_t        model[40];
        !           219:        u_int8_t        serial[40];
        !           220:        u_int8_t        revision[8];
        !           221:        u_int8_t        bits;
        !           222:        u_int8_t        res0[2];
        !           223:        u_int8_t        present;
        !           224: #define        CISS_PD_PRESENT 0x01
        !           225: #define        CISS_PD_NONDSK  0x02
        !           226: #define        CISS_PD_WIDE    0x04
        !           227: #define        CISS_PD_SYNC    0x08
        !           228: #define        CISS_PD_NARROW  0x10
        !           229: #define        CISS_PD_W2NARR  0x20    /* wide downgrade to narrow */
        !           230: #define        CISS_PD_ULTRA   0x40
        !           231: #define        CISS_PD_ULTRA2  0x80
        !           232:        u_int8_t        config;
        !           233: #define        CISS_PD_SMART   0x01
        !           234: #define        CISS_PD_SMERRR  0x02
        !           235: #define        CISS_PD_SMERRE  0x04
        !           236: #define        CISS_PD_SMERRD  0x08
        !           237: #define        CISS_PD_EXT     0x10
        !           238: #define        CISS_PD_CONF    0x20
        !           239: #define        CISS_PD_SPARE   0x40
        !           240: #define        CISS_PD_CASAVE  0x80
        !           241:        u_int8_t        res1;
        !           242:        u_int8_t        cache;
        !           243: #define        CISS_PD_CACHE   0x01
        !           244: #define        CISS_PD_CASAFE  0x01
        !           245:        u_int8_t        res2[5];
        !           246:        u_int8_t        connector[2];
        !           247:        u_int8_t        res3;
        !           248:        u_int8_t        bay;
        !           249:        u_int16_t       rpm;
        !           250:        u_int8_t        type;
        !           251:        u_int8_t        res4[393];
        !           252: } __packed;
        !           253:
        !           254: struct ciss_event {
        !           255:        u_int32_t       reltime;        /* time since controller boot */
        !           256:        u_int16_t       event;
        !           257: #define        CISS_EVCLS_PROTO        0
        !           258: #define        CISS_EVCLS_PLUG         1
        !           259: #define        CISS_EVCLS_HW           2
        !           260: #define        CISS_EVCLS_ENV          3
        !           261: #define        CISS_EVCLS_PD           4       /* ciss_evpdchg in details */
        !           262: #define        CISS_EVCLS_LD           5
        !           263: #define        CISS_EVCLS_CTRL         6
        !           264: #define        CISS_EVCLS_CISS         8       /*  funky errors */
        !           265: #define        CISS_EVCLS_RESV         9
        !           266:        u_int16_t       subevent;
        !           267: #define        CISS_EVPROTO_STAT       0
        !           268: #define        CISS_EVPROTO_ERR        1
        !           269: #define        CISS_EVPLUG_PDCHG       0       /* ciss_evpdchg */
        !           270: #define        CISS_EVPLUG_POWER       1       /* ciss_evpschg */
        !           271: #define        CISS_EVPLUG_FAN         2       /* ciss_evfanchg */
        !           272: #define        CISS_EVPLUG_UPS         3       /* ciss_evupschg */
        !           273: #define        CISS_EVPLUG_CTRL        4       /* ciss_evctrlchg: ctrl removed? (; */
        !           274: #define        CISS_EVHW_CABLES        0
        !           275: #define        CISS_EVHW_MEMORY        1
        !           276: #define        CISS_EVHW_FAN           2       /* detail as in CISS_EVPLUG_FAN */
        !           277: #define        CISS_EVHW_VRM           3
        !           278: #define        CISS_EVENV_TEMP         0       /* ciss_evtempchg */
        !           279: #define        CISS_EVENV_PS           1
        !           280: #define        CISS_EVENV_CHASSIS      2
        !           281: #define        CISS_EVENV_AC           3
        !           282: #define        CISS_EVPD_STAT          0
        !           283: #define        CISS_EVLD_STAT          0
        !           284: #define        CISS_EVLD_ERR           1
        !           285: #define        CISS_EVLD_CHECK         2       /* surface check */
        !           286: #define        CISS_EVCTRL_STAT        0
        !           287:        u_int16_t       detail;
        !           288: #define        CISS_EVSTAT_NONE        0
        !           289: #define        CISS_EVSTAT_DISABLE     1
        !           290: #define        CISS_EVSTAT_TMO         2       /* async event poll timeout */
        !           291: #define        CISS_EVERR_OVERFLOW     0       /* event queue overflow */
        !           292: #define        CISS_EVPLUG_REMOVE      0
        !           293: #define        CISS_EVPLUG_INSERT      1
        !           294: #define        CISS_EVFAN_FAULT        0
        !           295: #define        CISS_EVFAN_DEGRADED     1
        !           296: #define        CISS_EVFAN_OK           2
        !           297: #define        CISS_EVVRM_REMOVE       0
        !           298: #define        CISS_EVVRM_INSERT       1
        !           299: #define        CISS_EVVRM_FAILED       2
        !           300: #define        CISS_EVVRM_OK           3
        !           301: #define        CISS_EVTEMP_LIMEX       0       /* limit exceeded */
        !           302: #define        CISS_EVTEMP_WARN        1
        !           303: #define        CISS_EVTEMP_OK          2
        !           304: #define        CISS_EVPS_FAIL          0
        !           305: #define        CISS_EVPS_OK            2
        !           306: #define        CISS_EVCHAS_OPEN        0
        !           307: #define        CISS_EVCHAS_CLOSE       2
        !           308: #define        CISS_EVAC_FAIL          0
        !           309: #define        CISS_EVAC_BATTLOW       1
        !           310: #define        CISS_EVPDSTAT_FAIL      0
        !           311: #define        CISS_EVLDSTAT_CHG       0       /* ciss_evldchg */
        !           312: #define        CISS_EVLDSTAT_EXMEDIA   1       /* untolerant cfg got drive replaced */
        !           313: #define        CISS_EVLDSTAT_RERDERR   2       /* ciss_evldrblderr */
        !           314: #define        CISS_EVLDSTAT_REWRERR   3       /* ciss_evldrblderr */
        !           315: #define        CISS_EVLDERR_FATAL      0       /* ciss_evlderr */
        !           316: #define        CISS_EVCHECK_DONE       0       /* details have onle 16bit ld num */
        !           317: #define        CISS_EVCTRLSTAT_CHG     0       /* ciss_evctrlstat */
        !           318:        u_int8_t        data[64];
        !           319:        u_int8_t        msg[80];
        !           320:        u_int32_t       tag;
        !           321:        u_int16_t       monday;
        !           322:        u_int16_t       year;
        !           323:        u_int32_t       time;
        !           324:        u_int16_t       presec;         /* time for events before boot */
        !           325:        u_int8_t        device[8];
        !           326:        u_int8_t        resv[336];
        !           327: } __packed;
        !           328:
        !           329: struct ciss_evpdchg {  /* details pointer */
        !           330:        u_int16_t       pd;
        !           331:        u_int8_t        flag;           /* 1 for configured */
        !           332:        u_int8_t        spare;
        !           333:        u_int8_t        bigpd;          /* big number of the pd */
        !           334:        u_int8_t        baynum;
        !           335: } __packed;
        !           336:
        !           337: struct ciss_evpschg {  /* details pointer */
        !           338:        u_int16_t       port;
        !           339:        u_int16_t       psid;
        !           340:        u_int16_t       box;
        !           341: } __packed;
        !           342:
        !           343: struct ciss_evfanchg { /* details pointer */
        !           344:        u_int16_t       port;
        !           345:        u_int16_t       fanid;
        !           346:        u_int16_t       box;
        !           347: } __packed;
        !           348:
        !           349: struct ciss_evupschg { /* details pointer */
        !           350:        u_int16_t       port;
        !           351:        u_int16_t       upsid;
        !           352: } __packed;
        !           353:
        !           354: struct ciss_evctrlchg {        /* details pointer */
        !           355:        u_int16_t       slot;
        !           356: } __packed;
        !           357:
        !           358: struct ciss_evtempchg {        /* details pointer */
        !           359:        u_int16_t       port;
        !           360:        u_int16_t       sensid;
        !           361:        u_int16_t       box;
        !           362: } __packed;
        !           363:
        !           364: struct ciss_evldchg {  /* details pointer */
        !           365:        u_int16_t       ld;
        !           366:        u_int8_t        prevstat;       /* same as ldstat->state */
        !           367:        u_int8_t        newstat;        /* same as ldstat->state */
        !           368:        u_int8_t        sparestat;
        !           369: } __packed;
        !           370:
        !           371: struct ciss_evldrblderr { /* details pointer */
        !           372:        u_int16_t       ld;
        !           373:        u_int8_t        replace;
        !           374:        u_int8_t        errpd;
        !           375:        u_int8_t        bigreplace;
        !           376:        u_int8_t        bigerrpd;
        !           377: } __packed;
        !           378:
        !           379: struct ciss_evlderr {  /* details pointer */
        !           380:        u_int16_t       ld;
        !           381:        u_int16_t       blkno[2];       /* unaligned; if >2tb see big later */
        !           382:        u_int16_t       count;
        !           383:        u_int8_t        ldcmd;
        !           384:        u_int8_t        bus;
        !           385:        u_int8_t        target;
        !           386:        u_int8_t        bigblkno[8];    /* unaligned */
        !           387: } __packed;
        !           388:
        !           389: struct ciss_evctrlstat { /* details pointer */
        !           390:        u_int8_t        prefctrl;
        !           391:        u_int8_t        currmode;
        !           392:        u_int8_t        redctrl;
        !           393:        u_int8_t        redfail;
        !           394:        u_int8_t        prevctrl;
        !           395:        u_int8_t        prevmode;
        !           396:        u_int8_t        prevred;
        !           397:        u_int8_t        prevfail;
        !           398: } __packed;
        !           399:
        !           400: struct ciss_cmd {
        !           401:        u_int8_t        resv0;  /* 00 */
        !           402:        u_int8_t        sgin;   /* 01: #sg in the cmd */
        !           403:        u_int16_t       sglen;  /* 02: #sg total */
        !           404:        u_int32_t       id;     /* 04: cmd id << 2 and status bits */
        !           405: #define        CISS_CMD_ERR    0x02
        !           406:        u_int32_t       id_hi;  /* 08: not used */
        !           407:        u_int32_t       tgt;    /* 0c: tgt:bus:mode or lun:mode */
        !           408: #define        CISS_CMD_MODE_PERIPH    0x00000000
        !           409: #define        CISS_CMD_MODE_LD        0x40000000
        !           410: #define        CISS_CMD_TGT_MASK       0x40ffffff
        !           411: #define        CISS_CMD_BUS_MASK       0x3f000000
        !           412: #define        CISS_CMD_BUS_SHIFT      24
        !           413:        u_int32_t       tgt2;   /* 10: scsi-3 address bytes */
        !           414:
        !           415:        u_int8_t        cdblen; /* 14: valid length of cdb */
        !           416:        u_int8_t        flags;  /* 15 */
        !           417: #define        CISS_CDB_CMD    0x00
        !           418: #define        CISS_CDB_MSG    0x01
        !           419: #define        CISS_CDB_NOTAG  0x00
        !           420: #define        CISS_CDB_SIMPL  0x20
        !           421: #define        CISS_CDB_QHEAD  0x28
        !           422: #define        CISS_CDB_ORDR   0x30
        !           423: #define        CISS_CDB_AUTO   0x38
        !           424: #define        CISS_CDB_IN     0x80
        !           425: #define        CISS_CDB_OUT    0x40
        !           426:        u_int16_t       tmo;    /* 16: timeout in seconds */
        !           427: #define        CISS_MAX_CDB    12
        !           428:        u_int8_t        cdb[16];/* 18 */
        !           429:
        !           430:        u_int64_t       err_pa; /* 28: pa(struct ciss_error *) */
        !           431:        u_int32_t       err_len;/* 30 */
        !           432:
        !           433:        struct {                /* 34 */
        !           434:                u_int32_t       addr_lo;
        !           435:                u_int32_t       addr_hi;
        !           436:                u_int32_t       len;
        !           437:                u_int32_t       flags;
        !           438: #define        CISS_SG_EXT     0x0001
        !           439:        } sgl[1];
        !           440: } __packed;
        !           441:
        !           442: struct ciss_error {
        !           443:        u_int8_t        scsi_stat;      /* SCSI_OK etc */
        !           444:        u_int8_t        senselen;
        !           445:        u_int16_t       cmd_stat;
        !           446: #define        CISS_ERR_OK     0
        !           447: #define        CISS_ERR_TGTST  1       /* target status */
        !           448: #define        CISS_ERR_UNRUN  2
        !           449: #define        CISS_ERR_OVRUN  3
        !           450: #define        CISS_ERR_INVCMD 4
        !           451: #define        CISS_ERR_PROTE  5
        !           452: #define        CISS_ERR_HWERR  6
        !           453: #define        CISS_ERR_CLOSS  7
        !           454: #define        CISS_ERR_ABRT   8
        !           455: #define        CISS_ERR_FABRT  9
        !           456: #define        CISS_ERR_UABRT  10
        !           457: #define        CISS_ERR_TMO    11
        !           458: #define        CISS_ERR_NABRT  12
        !           459:        u_int32_t       resid;
        !           460:        u_int8_t        err_type[4];
        !           461:        u_int32_t       err_info;
        !           462:        u_int8_t        sense[32];
        !           463: } __packed;
        !           464:
        !           465: struct ciss_ccb {
        !           466:        TAILQ_ENTRY(ciss_ccb)   ccb_link;
        !           467:        struct ciss_softc       *ccb_sc;
        !           468:        paddr_t                 ccb_cmdpa;
        !           469:        enum {
        !           470:                CISS_CCB_FREE   = 0x01,
        !           471:                CISS_CCB_READY  = 0x02,
        !           472:                CISS_CCB_ONQ    = 0x04,
        !           473:                CISS_CCB_PREQ   = 0x08,
        !           474:                CISS_CCB_POLL   = 0x10,
        !           475:                CISS_CCB_FAIL   = 0x80
        !           476: #define        CISS_CCB_BITS   "\020\01FREE\02READY\03ONQ\04PREQ\05POLL\010FAIL"
        !           477:        } ccb_state;
        !           478:
        !           479:        struct scsi_xfer        *ccb_xs;
        !           480:        size_t                  ccb_len;
        !           481:        void                    *ccb_data;
        !           482:        bus_dmamap_t            ccb_dmamap;
        !           483:
        !           484:        struct ciss_error       ccb_err;
        !           485:        struct ciss_cmd         ccb_cmd;        /* followed by sgl */
        !           486: };
        !           487:
        !           488: typedef TAILQ_HEAD(ciss_queue_head, ciss_ccb)     ciss_queue_head;
        !           489:

CVSweb