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

Annotation of sys/dev/i2o/i2o.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: i2o.h,v 1.7 2004/04/12 22:12:32 jmc Exp $     */
        !             2: /*     $NetBSD: i2o.h,v 1.3 2001/03/20 13:01:48 ad Exp $       */
        !             3:
        !             4: /*-
        !             5:  * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * This code is derived from software contributed to The NetBSD Foundation
        !             9:  * by Andrew Doran.
        !            10:  *
        !            11:  * Redistribution and use in source and binary forms, with or without
        !            12:  * modification, are permitted provided that the following conditions
        !            13:  * are met:
        !            14:  * 1. Redistributions of source code must retain the above copyright
        !            15:  *    notice, this list of conditions and the following disclaimer.
        !            16:  * 2. Redistributions in binary form must reproduce the above copyright
        !            17:  *    notice, this list of conditions and the following disclaimer in the
        !            18:  *    documentation and/or other materials provided with the distribution.
        !            19:  * 3. All advertising materials mentioning features or use of this software
        !            20:  *    must display the following acknowledgement:
        !            21:  *        This product includes software developed by the NetBSD
        !            22:  *        Foundation, Inc. and its contributors.
        !            23:  * 4. Neither the name of The NetBSD Foundation nor the names of its
        !            24:  *    contributors may be used to endorse or promote products derived
        !            25:  *    from this software without specific prior written permission.
        !            26:  *
        !            27:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
        !            28:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
        !            29:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
        !            30:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
        !            31:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        !            32:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        !            33:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        !            34:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        !            35:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        !            36:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            37:  * POSSIBILITY OF SUCH DAMAGE.
        !            38:  */
        !            39:
        !            40: /*
        !            41:  * Structures and constants, as presented by the I2O specification revision
        !            42:  * 1.5 (obtainable from http://www.intelligent-io.com/).  Currently, only
        !            43:  * what's useful to us is defined in this file.
        !            44:  */
        !            45:
        !            46: #ifndef        _I2O_I2O_H_
        !            47: #define        _I2O_I2O_H_
        !            48:
        !            49: /*
        !            50:  * ================= Miscellaneous definitions =================
        !            51:  */
        !            52:
        !            53: /* Organisation IDs */
        !            54: #define        I2O_ORG_DPT                     0x001b
        !            55: #define        I2O_ORG_INTEL                   0x0028
        !            56: #define        I2O_ORG_AMI                     0x1000
        !            57:
        !            58: /* Macros to assist in building message headers */
        !            59: #define        I2O_MSGFLAGS(s)         (I2O_VERSION_11 | (sizeof(struct s) << 14))
        !            60: #define        I2O_MSGFUNC(t, f)       ((t) | (I2O_TID_HOST << 12) | ((f) << 24))
        !            61:
        !            62: /* Common message function codes with no payload or an undefined payload */
        !            63: #define        I2O_UTIL_NOP                    0x00
        !            64: #define        I2O_EXEC_IOP_CLEAR              0xbe
        !            65: #define        I2O_EXEC_SYS_QUIESCE            0xc3
        !            66: #define        I2O_EXEC_SYS_ENABLE             0xd1
        !            67: #define        I2O_PRIVATE_MESSAGE             0xff
        !            68:
        !            69: /* Device class codes */
        !            70: #define        I2O_CLASS_EXECUTIVE                     0x00
        !            71: #define        I2O_CLASS_DDM                           0x01
        !            72: #define        I2O_CLASS_RANDOM_BLOCK_STORAGE          0x10
        !            73: #define        I2O_CLASS_SEQUENTIAL_STORAGE            0x11
        !            74: #define        I2O_CLASS_LAN                           0x20
        !            75: #define        I2O_CLASS_WAN                           0x30
        !            76: #define        I2O_CLASS_FIBRE_CHANNEL_PORT            0x40
        !            77: #define        I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL      0x41
        !            78: #define        I2O_CLASS_SCSI_PERIPHERAL               0x51
        !            79: #define        I2O_CLASS_ATE_PORT                      0x60
        !            80: #define        I2O_CLASS_ATE_PERIPHERAL                0x61
        !            81: #define        I2O_CLASS_FLOPPY_CONTROLLER             0x70
        !            82: #define        I2O_CLASS_FLOPPY_DEVICE                 0x71
        !            83: #define        I2O_CLASS_BUS_ADAPTER_PORT              0x80
        !            84: #define        I2O_CLASS_MASK                          0xfff
        !            85:
        !            86: #define        I2O_CLASS_ANY                           0xffffffff
        !            87:
        !            88: /* Reply status codes */
        !            89: #define        I2O_STATUS_SUCCESS                      0x00
        !            90: #define        I2O_STATUS_ABORT_DIRTY                  0x01
        !            91: #define        I2O_STATUS_ABORT_NO_DATA_XFER           0x02
        !            92: #define        I2O_STATUS_ABORT_PARTIAL_XFER           0x03
        !            93: #define        I2O_STATUS_ERROR_DIRTY                  0x04
        !            94: #define        I2O_STATUS_ERROR_NO_DATA_XFER           0x05
        !            95: #define        I2O_STATUS_ERROR_PARTIAL_XFER           0x06
        !            96: #define        I2O_STATUS_PROCESS_ABORT_DIRTY          0x08
        !            97: #define        I2O_STATUS_PROCESS_ABORT_NO_DATA_XFER   0x09
        !            98: #define        I2O_STATUS_PROCESS_ABORT_PARTIAL_XFER   0x0a
        !            99: #define        I2O_STATUS_TRANSACTION_ERROR            0x0b
        !           100: #define        I2O_STATUS_PROGRESS_REPORT              0x80
        !           101:
        !           102: /* Detailed status codes */
        !           103: #define        I2O_DSC_SUCCESS                         0x00
        !           104: #define        I2O_DSC_BAD_KEY                         0x02
        !           105: #define        I2O_DSC_TCL_ERROR                       0x03
        !           106: #define        I2O_DSC_REPLY_BUFFER_FULL               0x04
        !           107: #define        I2O_DSC_NO_SUCH_PAGE                    0x05
        !           108: #define        I2O_DSC_INSUFFICIENT_RESOURCE_SOFT      0x06
        !           109: #define        I2O_DSC_INSUFFICIENT_RESOURCE_HARD      0x07
        !           110: #define        I2O_DSC_CHAIN_BUFFER_TOO_LARGE          0x09
        !           111: #define        I2O_DSC_UNSUPPORTED_FUNCTION            0x0a
        !           112: #define        I2O_DSC_DEVICE_LOCKED                   0x0b
        !           113: #define        I2O_DSC_DEVICE_RESET                    0x0c
        !           114: #define        I2O_DSC_INAPPROPRIATE_FUNCTION          0x0d
        !           115: #define        I2O_DSC_INVALID_INITIATOR_ADDRESS       0x0e
        !           116: #define        I2O_DSC_INVALID_MESSAGE_FLAGS           0x0f
        !           117: #define        I2O_DSC_INVALID_OFFSET                  0x10
        !           118: #define        I2O_DSC_INVALID_PARAMETER               0x11
        !           119: #define        I2O_DSC_INVALID_REQUEST                 0x12
        !           120: #define        I2O_DSC_INVALID_TARGET_ADDRESS          0x13
        !           121: #define        I2O_DSC_MESSAGE_TOO_LARGE               0x14
        !           122: #define        I2O_DSC_MESSAGE_TOO_SMALL               0x15
        !           123: #define        I2O_DSC_MISSING_PARAMETER               0x16
        !           124: #define        I2O_DSC_TIMEOUT                         0x17
        !           125: #define        I2O_DSC_UNKNOWN_ERROR                   0x18
        !           126: #define        I2O_DSC_UNKNOWN_FUNCTION                0x19
        !           127: #define        I2O_DSC_UNSUPPORTED_VERSION             0x1a
        !           128: #define        I2O_DSC_DEVICE_BUSY                     0x1b
        !           129: #define        I2O_DSC_DEVICE_NOT_AVAILABLE            0x1c
        !           130:
        !           131: /* Message versions */
        !           132: #define        I2O_VERSION_10                  0x00
        !           133: #define        I2O_VERSION_11                  0x01
        !           134: #define        I2O_VERSION_20                  0x02
        !           135:
        !           136: /* Commonly used TIDs */
        !           137: #define        I2O_TID_IOP                     0
        !           138: #define        I2O_TID_HOST                    1
        !           139: #define        I2O_TID_NONE                    4095
        !           140:
        !           141: /* SGL flags.  This list covers only a fraction of the possibilities. */
        !           142: #define        I2O_SGL_IGNORE                  0x00000000
        !           143: #define        I2O_SGL_SIMPLE                  0x10000000
        !           144: #define        I2O_SGL_PAGE_LIST               0x20000000
        !           145:
        !           146: #define        I2O_SGL_BC_32BIT                0x01000000
        !           147: #define        I2O_SGL_BC_64BIT                0x02000000
        !           148: #define        I2O_SGL_BC_96BIT                0x03000000
        !           149: #define        I2O_SGL_DATA_OUT                0x04000000
        !           150: #define        I2O_SGL_END_BUFFER              0x40000000
        !           151: #define        I2O_SGL_END                     0x80000000
        !           152:
        !           153: /* Serial number formats */
        !           154: #define        I2O_SNFMT_UNKNOWN               0
        !           155: #define        I2O_SNFMT_BINARY                1
        !           156: #define        I2O_SNFMT_ASCII                 2
        !           157: #define        I2O_SNFMT_UNICODE               3
        !           158: #define        I2O_SNFMT_LAN_MAC               4
        !           159: #define        I2O_SNFMT_WAN_MAC               5
        !           160:
        !           161: /*
        !           162:  * ================= Common structures =================
        !           163:  */
        !           164:
        !           165: /*
        !           166:  * Standard I2O message frame.  All message frames begin with this.
        !           167:  *
        !           168:  * Bits  Field          Meaning
        !           169:  * ----  -------------  ----------------------------------------------------
        !           170:  * 0-2   msgflags       Message header version. Must be 001 (little endian).
        !           171:  * 3     msgflags      Reserved.
        !           172:  * 4-7   msgflags       Offset to SGLs expressed as # of 32-bit words.
        !           173:  * 8-15  msgflags       Control flags.
        !           174:  * 16-31 msgflags       Message frame size expressed as # of 32-bit words.
        !           175:  * 0-11  msgfunc       TID of target.
        !           176:  * 12-23 msgfunc        TID of initiator.
        !           177:  * 24-31 msgfunc        Function (i.e., type of message).
        !           178:  */
        !           179: struct i2o_msg {
        !           180:        u_int32_t       msgflags;
        !           181:        u_int32_t       msgfunc;
        !           182:        u_int32_t       msgictx;        /* Initiator context */
        !           183:        u_int32_t       msgtctx;        /* Transaction context */
        !           184:
        !           185:        /* Message payload */
        !           186:
        !           187: } __attribute__ ((__packed__));
        !           188:
        !           189: #define        I2O_MSGFLAGS_STATICMF           0x0100
        !           190: #define        I2O_MSGFLAGS_64BIT              0x0200
        !           191: #define        I2O_MSGFLAGS_MULTI              0x1000
        !           192: #define        I2O_MSGFLAGS_FAIL               0x2000
        !           193: #define        I2O_MSGFLAGS_LAST_REPLY         0x4000
        !           194: #define        I2O_MSGFLAGS_REPLY              0x8000
        !           195:
        !           196: /*
        !           197:  * Standard reply frame.  msgflags, msgfunc, msgictx and msgtctx have the
        !           198:  * same meaning as in `struct i2o_msg'.
        !           199:  */
        !           200: struct i2o_reply {
        !           201:        u_int32_t       msgflags;
        !           202:        u_int32_t       msgfunc;
        !           203:        u_int32_t       msgictx;
        !           204:        u_int32_t       msgtctx;
        !           205:        u_int16_t       detail;         /* Detailed status code */
        !           206:        u_int8_t        reserved;
        !           207:        u_int8_t        reqstatus;      /* Request status code */
        !           208:
        !           209:        /* Reply payload */
        !           210:
        !           211: } __attribute__ ((__packed__));
        !           212:
        !           213: /*
        !           214:  * Fault notification reply, returned when a message frame can not be
        !           215:  * processed (i.e I2O_MSGFLAGS_FAIL is set in the reply).
        !           216:  */
        !           217: struct i2o_fault_notify {
        !           218:        u_int32_t       msgflags;
        !           219:        u_int32_t       msgfunc;
        !           220:        u_int32_t       msgictx;
        !           221:        u_int32_t       msgtctx;        /* Not valid! */
        !           222:        u_int8_t        lowestver;
        !           223:        u_int8_t        highestver;
        !           224:        u_int8_t        severity;
        !           225:        u_int8_t        failurecode;
        !           226:        u_int16_t       failingiop;     /* Bits 0-12 only */
        !           227:        u_int16_t       failinghostunit;
        !           228:        u_int32_t       agelimit;
        !           229:        u_int32_t       lowmfa;
        !           230:        u_int32_t       highmfa;
        !           231: };
        !           232:
        !           233: /*
        !           234:  * Hardware resource table.  Not documented here.
        !           235:  */
        !           236: struct i2o_hrt_entry {
        !           237:        u_int32_t       adapterid;
        !           238:        u_int16_t       controllingtid;
        !           239:        u_int8_t        busnumber;
        !           240:        u_int8_t        bustype;
        !           241:        u_int8_t        businfo[8];
        !           242: } __attribute__ ((__packed__));
        !           243:
        !           244: struct i2o_hrt {
        !           245:        u_int16_t       numentries;
        !           246:        u_int8_t        entrysize;
        !           247:        u_int8_t        hrtversion;
        !           248:        u_int32_t       changeindicator;
        !           249:        struct i2o_hrt_entry    entry[1];
        !           250: } __attribute__ ((__packed__));
        !           251:
        !           252: /*
        !           253:  * Logical configuration table entry.  Bitfields are broken down as follows:
        !           254:  *
        !           255:  * Bits   Field           Meaning
        !           256:  * -----  --------------  ---------------------------------------------------
        !           257:  *  0-11  classid         Class ID.
        !           258:  * 12-15  classid         Class version.
        !           259:  *  0-11  usertid         User TID
        !           260:  * 12-23  usertid         Parent TID.
        !           261:  * 24-31  usertid         BIOS info.
        !           262:  */
        !           263: struct i2o_lct_entry {
        !           264:        u_int16_t       entrysize;
        !           265:        u_int16_t       localtid;               /* Bits 0-12 only */
        !           266: #define        I2O_LCT_ENTRY_TID_MASK  0xfff
        !           267:        u_int32_t       changeindicator;
        !           268:        u_int32_t       deviceflags;
        !           269:        u_int16_t       classid;
        !           270:        u_int16_t       orgid;
        !           271:        u_int32_t       subclassinfo;
        !           272:        u_int32_t       usertid;
        !           273:        u_int8_t        identitytag[8];
        !           274:        u_int32_t       eventcaps;
        !           275: } __attribute__ ((__packed__));
        !           276:
        !           277: /*
        !           278:  * Logical configuration table header.
        !           279:  */
        !           280: struct i2o_lct {
        !           281:        u_int16_t       tablesize;
        !           282:        u_int16_t       flags;
        !           283:        u_int32_t       iopflags;
        !           284:        u_int32_t       changeindicator;
        !           285:        struct i2o_lct_entry    entry[1];
        !           286: } __attribute__ ((__packed__));
        !           287:
        !           288: /*
        !           289:  * IOP system table.  Bitfields are broken down as follows:
        !           290:  *
        !           291:  * Bits   Field           Meaning
        !           292:  * -----  --------------  ---------------------------------------------------
        !           293:  *  0-11  iopid           IOP ID.
        !           294:  * 12-31  iopid           Reserved.
        !           295:  *  0-11  segnumber       Segment number.
        !           296:  * 12-15  segnumber       I2O version.
        !           297:  * 16-23  segnumber       IOP state.
        !           298:  * 24-31  segnumber       Messenger type.
        !           299:  */
        !           300: struct i2o_systab_entry {
        !           301:        u_int16_t       orgid;
        !           302:        u_int16_t       reserved0;
        !           303:        u_int32_t       iopid;
        !           304:        u_int32_t       segnumber;
        !           305:        u_int16_t       inboundmsgframesize;
        !           306:        u_int16_t       reserved1;
        !           307:        u_int32_t       lastchanged;
        !           308:        u_int32_t       iopcaps;
        !           309:        u_int32_t       inboundmsgportaddresslow;
        !           310:        u_int32_t       inboundmsgportaddresshigh;
        !           311: } __attribute__ ((__packed__));
        !           312:
        !           313: struct i2o_systab {
        !           314:        u_int8_t        numentries;
        !           315:        u_int8_t        version;
        !           316:        u_int16_t       reserved0;
        !           317:        u_int32_t       changeindicator;
        !           318:        u_int32_t       reserved1[2];
        !           319:        struct  i2o_systab_entry entry[1];
        !           320: } __attribute__ ((__packed__));
        !           321:
        !           322: /*
        !           323:  * IOP status record.  Bitfields are broken down as follows:
        !           324:  *
        !           325:  * Bits   Field           Meaning
        !           326:  * -----  --------------  ---------------------------------------------------
        !           327:  *  0-11  iopid           IOP ID.
        !           328:  * 12-15  iopid           Reserved.
        !           329:  * 16-31  iopid           Host unit ID.
        !           330:  *  0-11  segnumber       Segment number.
        !           331:  * 12-15  segnumber       I2O version.
        !           332:  * 16-23  segnumber       IOP state.
        !           333:  * 24-31  segnumber       Messenger type.
        !           334:  */
        !           335: struct i2o_status {
        !           336:        u_int16_t       orgid;
        !           337:        u_int16_t       reserved0;
        !           338:        u_int32_t       iopid;
        !           339:        u_int32_t       segnumber;
        !           340:        u_int16_t       inboundmframesize;
        !           341:        u_int8_t        initcode;
        !           342:        u_int8_t        reserved1;
        !           343:        u_int32_t       maxinboundmframes;
        !           344:        u_int32_t       currentinboundmframes;
        !           345:        u_int32_t       maxoutboundmframes;
        !           346:        u_int8_t        productid[24];
        !           347:        u_int32_t       expectedlctsize;
        !           348:        u_int32_t       iopcaps;
        !           349:        u_int32_t       desiredprivmemsize;
        !           350:        u_int32_t       currentprivmemsize;
        !           351:        u_int32_t       currentprivmembase;
        !           352:        u_int32_t       desiredpriviosize;
        !           353:        u_int32_t       currentpriviosize;
        !           354:        u_int32_t       currentpriviobase;
        !           355:        u_int8_t        reserved2[3];
        !           356:        u_int8_t        syncbyte;
        !           357: } __attribute__ ((__packed__));
        !           358:
        !           359: #define        I2O_IOP_STATE_INITIALIZING              0x01
        !           360: #define        I2O_IOP_STATE_RESET                     0x02
        !           361: #define        I2O_IOP_STATE_HOLD                      0x04
        !           362: #define        I2O_IOP_STATE_READY                     0x05
        !           363: #define        I2O_IOP_STATE_OPERATIONAL               0x08
        !           364: #define        I2O_IOP_STATE_FAILED                    0x10
        !           365: #define        I2O_IOP_STATE_FAULTED                   0x11
        !           366:
        !           367: /*
        !           368:  * ================= Executive class messages =================
        !           369:  */
        !           370:
        !           371: #define        I2O_EXEC_STATUS_GET             0xa0
        !           372: struct i2o_exec_status_get {
        !           373:        u_int32_t       msgflags;
        !           374:        u_int32_t       msgfunc;
        !           375:        u_int32_t       reserved[4];
        !           376:        u_int32_t       addrlow;
        !           377:        u_int32_t       addrhigh;
        !           378:        u_int32_t       length;
        !           379: } __attribute__ ((__packed__));
        !           380:
        !           381: #define        I2O_EXEC_OUTBOUND_INIT          0xa1
        !           382: struct i2o_exec_outbound_init {
        !           383:        u_int32_t       msgflags;
        !           384:        u_int32_t       msgfunc;
        !           385:        u_int32_t       msgictx;
        !           386:        u_int32_t       msgtctx;
        !           387:        u_int32_t       pagesize;
        !           388:        u_int32_t       flags;          /* init code, outbound msg size */
        !           389: } __attribute__ ((__packed__));
        !           390:
        !           391: #define        I2O_EXEC_OUTBOUND_INIT_IN_PROGRESS      1
        !           392: #define        I2O_EXEC_OUTBOUND_INIT_REJECTED         2
        !           393: #define        I2O_EXEC_OUTBOUND_INIT_FAILED           3
        !           394: #define        I2O_EXEC_OUTBOUND_INIT_COMPLETE         4
        !           395:
        !           396: #define        I2O_EXEC_LCT_NOTIFY             0xa2
        !           397: struct i2o_exec_lct_notify {
        !           398:        u_int32_t       msgflags;
        !           399:        u_int32_t       msgfunc;
        !           400:        u_int32_t       msgictx;
        !           401:        u_int32_t       msgtctx;
        !           402:        u_int32_t       classid;
        !           403:        u_int32_t       changeindicator;
        !           404: } __attribute__ ((__packed__));
        !           405:
        !           406: #define        I2O_EXEC_SYS_TAB_SET            0xa3
        !           407: struct i2o_exec_sys_tab_set {
        !           408:        u_int32_t       msgflags;
        !           409:        u_int32_t       msgfunc;
        !           410:        u_int32_t       msgictx;
        !           411:        u_int32_t       msgtctx;
        !           412:        u_int32_t       iopid;
        !           413:        u_int32_t       segnumber;
        !           414: } __attribute__ ((__packed__));
        !           415:
        !           416: #define        I2O_EXEC_HRT_GET                0xa8
        !           417: struct i2o_exec_hrt_get {
        !           418:        u_int32_t       msgflags;
        !           419:        u_int32_t       msgfunc;
        !           420:        u_int32_t       msgictx;
        !           421:        u_int32_t       msgtctx;
        !           422: } __attribute__ ((__packed__));
        !           423:
        !           424: #define        I2O_EXEC_IOP_RESET              0xbd
        !           425: struct i2o_exec_iop_reset {
        !           426:        u_int32_t       msgflags;
        !           427:        u_int32_t       msgfunc;
        !           428:        u_int32_t       reserved[4];
        !           429:        u_int32_t       statuslow;
        !           430:        u_int32_t       statushigh;
        !           431: } __attribute__ ((__packed__));
        !           432:
        !           433: #define        I2O_RESET_IN_PROGRESS           0x01
        !           434: #define        I2O_RESET_REJECTED              0x02
        !           435:
        !           436: /*
        !           437:  * ================= Executive class parameter groups =================
        !           438:  */
        !           439:
        !           440: #define        I2O_PARAM_EXEC_LCT_SCALAR       0x0101
        !           441: #define        I2O_PARAM_EXEC_LCT_TABLE        0x0102
        !           442:
        !           443: /*
        !           444:  * ================= HBA class messages =================
        !           445:  */
        !           446:
        !           447: #define        I2O_HBA_BUS_SCAN                0x89
        !           448: struct i2o_hba_bus_scan {
        !           449:        u_int32_t       msgflags;
        !           450:        u_int32_t       msgfunc;
        !           451:        u_int32_t       msgictx;
        !           452:        u_int32_t       msgtctx;
        !           453: } __attribute__ ((__packed__));
        !           454:
        !           455: /*
        !           456:  * ================= HBA class parameter groups =================
        !           457:  */
        !           458:
        !           459: #define        I2O_PARAM_HBA_CTLR_INFO         0x0000
        !           460: struct i2o_param_hba_ctlr_info {
        !           461:        u_int8_t        bustype;
        !           462:        u_int8_t        busstate;
        !           463:        u_int16_t       reserved;
        !           464:        u_int8_t        busname[12];
        !           465: } __attribute__ ((__packed__));
        !           466:
        !           467: #define        I2O_HBA_BUS_GENERIC             0x00
        !           468: #define        I2O_HBA_BUS_SCSI                0x01
        !           469: #define        I2O_HBA_BUS_FCA                 0x10
        !           470:
        !           471: #define        I2O_PARAM_HBA_SCSI_PORT_INFO    0x0001
        !           472: struct i2o_param_hba_scsi_port_info {
        !           473:        u_int8_t        physicalif;
        !           474: #define        I2O_PARAM_HBA_SCSI_PORT_GENERIC 0x01
        !           475: #define        I2O_PARAM_HBA_SCSI_PORT_UNKNOWN 0x02
        !           476: #define        I2O_PARAM_HBA_SCSI_PORT_PARINTF 0x03
        !           477: #define        I2O_PARAM_HBA_SCSI_PORT_FCL     0x04
        !           478: #define        I2O_PARAM_HBA_SCSI_PORT_1394    0x05
        !           479: #define        I2O_PARAM_HBA_SCSI_PORT_SSA     0x06
        !           480:        u_int8_t        electricalif;
        !           481: #define        I2O_PARAM_HBA_SCSI_PORT_SE      0x03
        !           482: #define        I2O_PARAM_HBA_SCSI_PORT_DIFF    0x04
        !           483: #define        I2O_PARAM_HBA_SCSI_PORT_LVD     0x05
        !           484: #define        I2O_PARAM_HBA_SCSI_PORT_OPTCL   0x06
        !           485:        u_int8_t        isosynchonrous;
        !           486:        u_int8_t        connectortype;
        !           487: #define        I2O_PARAM_HBA_SCSI_PORT_HDBS50  0x04
        !           488: #define        I2O_PARAM_HBA_SCSI_PORT_HDBU50  0x05
        !           489: #define        I2O_PARAM_HBA_SCSI_PORT_DBS50   0x06
        !           490: #define        I2O_PARAM_HBA_SCSI_PORT_DBU50   0x07
        !           491: #define        I2O_PARAM_HBA_SCSI_PORT_HDBS68  0x08
        !           492: #define        I2O_PARAM_HBA_SCSI_PORT_HDBU68  0x09
        !           493: #define        I2O_PARAM_HBA_SCSI_PORT_SCA1    0x0a
        !           494: #define        I2O_PARAM_HBA_SCSI_PORT_SCA2    0x0b
        !           495: #define        I2O_PARAM_HBA_SCSI_PORT_FCDB9   0x0c
        !           496: #define        I2O_PARAM_HBA_SCSI_PORT_FC      0x0d
        !           497: #define        I2O_PARAM_HBA_SCSI_PORT_FCSCA40 0x0e
        !           498: #define        I2O_PARAM_HBA_SCSI_PORT_FCSCA20 0x0f
        !           499: #define        I2O_PARAM_HBA_SCSI_PORT_FCBNC   0x10
        !           500:        u_int8_t        connectorgender;
        !           501: #define        I2O_PARAM_HBA_SCSI_PORT_FEMALE  0x03
        !           502: #define        I2O_PARAM_HBA_SCSI_PORT_MALE    0x04
        !           503:        u_int8_t        reserved1;
        !           504:        u_int16_t       reserved2;
        !           505:        u_int32_t       maxnumberofdevices;
        !           506: } __attribute__ ((__packed__));
        !           507:
        !           508: #define        I2O_PARAM_HBA_SCSI_CTLR_INFO    0x0200
        !           509: struct i2o_param_hba_scsi_ctlr_info {
        !           510:        u_int8_t        scsitype;
        !           511: #define        I2O_PARAM_HBA_SCSI_CTRL_SCSI0   0x00
        !           512: #define        I2O_PARAM_HBA_SCSI_CTRL_SCSI1   0x01
        !           513: #define        I2O_PARAM_HBA_SCSI_CTRL_SCSI2   0x02
        !           514: #define        I2O_PARAM_HBA_SCSI_CTRL_SCSI3   0x03
        !           515:        u_int8_t        protection;
        !           516:        u_int8_t        settings;
        !           517:        u_int8_t        reserved;
        !           518:        u_int32_t       initiatorid;
        !           519:        u_int64_t       scanlun0only;
        !           520:        u_int16_t       disabledevice;
        !           521:        u_int8_t        maxoffset;
        !           522:        u_int8_t        maxdatawidth;
        !           523:        u_int64_t       maxsyncrate;
        !           524: } __attribute__ ((__packed__));
        !           525:
        !           526:
        !           527: /*
        !           528:  * ================= Utility messages =================
        !           529:  */
        !           530:
        !           531: #define        I2O_UTIL_ABORT                  0x01
        !           532: struct i2o_util_abort {
        !           533:        u_int32_t       msgflags;
        !           534:        u_int32_t       msgfunc;
        !           535:        u_int32_t       msgictx;
        !           536:        u_int32_t       msgtctx;
        !           537:        u_int32_t       flags;          /* abort type and function type */
        !           538:        u_int32_t       tctxabort;
        !           539: } __attribute__ ((__packed__));
        !           540:
        !           541: #define        I2O_UTIL_ABORT_EXACT            0x00000000
        !           542: #define        I2O_UTIL_ABORT_FUNCTION         0x00010000
        !           543: #define        I2O_UTIL_ABORT_TRANSACTION      0x00020000
        !           544: #define        I2O_UTIL_ABORT_WILD             0x00030000
        !           545:
        !           546: #define        I2O_UTIL_ABORT_CLEAN            0x00040000
        !           547:
        !           548: struct i2o_util_abort_reply {
        !           549:        u_int32_t       msgflags;
        !           550:        u_int32_t       msgfunc;
        !           551:        u_int32_t       msgictx;
        !           552:        u_int32_t       msgtctx;
        !           553:        u_int32_t       count;
        !           554: } __attribute__ ((__packed__));
        !           555:
        !           556: #define        I2O_UTIL_PARAMS_SET             0x05
        !           557: #define        I2O_UTIL_PARAMS_GET             0x06
        !           558: struct i2o_util_params_op {
        !           559:        u_int32_t       msgflags;
        !           560:        u_int32_t       msgfunc;
        !           561:        u_int32_t       msgictx;
        !           562:        u_int32_t       msgtctx;
        !           563:        u_int32_t       flags;
        !           564: } __attribute__ ((__packed__));
        !           565:
        !           566: #define        I2O_PARAMS_OP_FIELD_GET         1
        !           567: #define        I2O_PARAMS_OP_LIST_GET          2
        !           568: #define        I2O_PARAMS_OP_MORE_GET          3
        !           569: #define        I2O_PARAMS_OP_SIZE_GET          4
        !           570: #define        I2O_PARAMS_OP_TABLE_GET         5
        !           571: #define        I2O_PARAMS_OP_FIELD_SET         6
        !           572: #define        I2O_PARAMS_OP_LIST_SET          7
        !           573: #define        I2O_PARAMS_OP_ROW_ADD           8
        !           574: #define        I2O_PARAMS_OP_ROW_DELETE        9
        !           575: #define        I2O_PARAMS_OP_TABLE_CLEAR       10
        !           576:
        !           577: struct i2o_param_op_list_header {
        !           578:        u_int16_t       count;
        !           579:        u_int16_t       reserved;
        !           580: } __attribute__ ((__packed__));
        !           581:
        !           582: struct i2o_param_op_all_template {
        !           583:        u_int16_t       operation;
        !           584:        u_int16_t       group;
        !           585:        u_int16_t       fieldcount;
        !           586:        u_int16_t       fields[1];
        !           587: } __attribute__ ((__packed__));
        !           588:
        !           589: struct i2o_param_op_results {
        !           590:        u_int16_t       count;
        !           591:        u_int16_t       reserved;
        !           592: } __attribute__ ((__packed__));
        !           593:
        !           594: struct i2o_param_read_results {
        !           595:        u_int16_t       blocksize;
        !           596:        u_int8_t        blockstatus;
        !           597:        u_int8_t        errorinfosize;
        !           598: } __attribute__ ((__packed__));
        !           599:
        !           600: struct i2o_param_table_results {
        !           601:        u_int16_t       blocksize;
        !           602:        u_int8_t        blockstatus;
        !           603:        u_int8_t        errorinfosize;
        !           604:        u_int16_t       rowcount;
        !           605:        u_int16_t       moreflag;
        !           606: } __attribute__ ((__packed__));
        !           607:
        !           608: #define        I2O_UTIL_CLAIM                  0x09
        !           609: struct i2o_util_claim {
        !           610:        u_int32_t       msgflags;
        !           611:        u_int32_t       msgfunc;
        !           612:        u_int32_t       msgictx;
        !           613:        u_int32_t       msgtctx;
        !           614:        u_int32_t       flags;
        !           615: } __attribute__ ((__packed__));
        !           616:
        !           617: #define        I2O_UTIL_CLAIM_RESET_SENSITIVE          0x00000002
        !           618: #define        I2O_UTIL_CLAIM_STATE_SENSITIVE          0x00000004
        !           619: #define        I2O_UTIL_CLAIM_CAPACITY_SENSITIVE       0x00000008
        !           620: #define        I2O_UTIL_CLAIM_NO_PEER_SERVICE          0x00000010
        !           621: #define        I2O_UTIL_CLAIM_NO_MANAGEMENT_SERVICE    0x00000020
        !           622:
        !           623: #define        I2O_UTIL_CLAIM_PRIMARY_USER             0x01000000
        !           624: #define        I2O_UTIL_CLAIM_AUTHORIZED_USER          0x02000000
        !           625: #define        I2O_UTIL_CLAIM_SECONDARY_USER           0x03000000
        !           626: #define        I2O_UTIL_CLAIM_MANAGEMENT_USER          0x04000000
        !           627:
        !           628: #define        I2O_UTIL_CLAIM_RELEASE          0x0b
        !           629: struct i2o_util_claim_release {
        !           630:        u_int32_t       msgflags;
        !           631:        u_int32_t       msgfunc;
        !           632:        u_int32_t       msgictx;
        !           633:        u_int32_t       msgtctx;
        !           634:        u_int32_t       flags;          /* User flags as per I2O_UTIL_CLAIM */
        !           635: } __attribute__ ((__packed__));
        !           636:
        !           637: #define        I2O_UTIL_CLAIM_RELEASE_CONDITIONAL      0x00000001
        !           638:
        !           639: #define        I2O_UTIL_CONFIG_DIALOG          0x10
        !           640: struct i2o_util_config_dialog {
        !           641:        u_int32_t       msgflags;
        !           642:        u_int32_t       msgfunc;
        !           643:        u_int32_t       msgictx;
        !           644:        u_int32_t       msgtctx;
        !           645:        u_int32_t       pageno;
        !           646: } __attribute__ ((__packed__));
        !           647:
        !           648: #define        I2O_UTIL_EVENT_REGISTER         0x13
        !           649: struct i2o_util_event_register {
        !           650:        u_int32_t       msgflags;
        !           651:        u_int32_t       msgfunc;
        !           652:        u_int32_t       msgictx;
        !           653:        u_int32_t       msgtctx;
        !           654:        u_int32_t       eventmask;
        !           655: } __attribute__ ((__packed__));
        !           656:
        !           657: struct i2o_util_event_register_reply {
        !           658:        u_int32_t       msgflags;
        !           659:        u_int32_t       msgfunc;
        !           660:        u_int32_t       msgictx;
        !           661:        u_int32_t       msgtctx;
        !           662:        u_int32_t       event;
        !           663:        u_int32_t       eventdata[1];
        !           664: } __attribute__ ((__packed__));
        !           665:
        !           666: /* Generic events. */
        !           667: #define        I2O_EVENT_GEN_DEVICE_STATE              0x00400000
        !           668: #define        I2O_EVENT_GEN_VENDOR_EVENT              0x00800000
        !           669: #define        I2O_EVENT_GEN_FIELD_MODIFIED            0x01000000
        !           670: #define        I2O_EVENT_GEN_EVENT_MASK_MODIFIED       0x02000000
        !           671: #define        I2O_EVENT_GEN_DEVICE_RESET              0x04000000
        !           672: #define        I2O_EVENT_GEN_CAPABILITY_CHANGE         0x08000000
        !           673: #define        I2O_EVENT_GEN_LOCK_RELEASE              0x10000000
        !           674: #define        I2O_EVENT_GEN_NEED_CONFIGURATION        0x20000000
        !           675: #define        I2O_EVENT_GEN_GENERAL_WARNING           0x40000000
        !           676: #define        I2O_EVENT_GEN_STATE_CHANGE              0x80000000
        !           677:
        !           678: /* Executive class events. */
        !           679: #define        I2O_EVENT_EXEC_RESOURCE_LIMITS          0x00000001
        !           680: #define        I2O_EVENT_EXEC_CONNECTION_FAIL          0x00000002
        !           681: #define        I2O_EVENT_EXEC_ADAPTER_FAULT            0x00000004
        !           682: #define        I2O_EVENT_EXEC_POWER_FAIL               0x00000008
        !           683: #define        I2O_EVENT_EXEC_RESET_PENDING            0x00000010
        !           684: #define        I2O_EVENT_EXEC_RESET_IMMINENT           0x00000020
        !           685: #define        I2O_EVENT_EXEC_HARDWARE_FAIL            0x00000040
        !           686: #define        I2O_EVENT_EXEC_XCT_CHANGE               0x00000080
        !           687: #define        I2O_EVENT_EXEC_NEW_LCT_ENTRY            0x00000100
        !           688: #define        I2O_EVENT_EXEC_MODIFIED_LCT             0x00000200
        !           689: #define        I2O_EVENT_EXEC_DDM_AVAILIBILITY         0x00000400
        !           690:
        !           691: /* LAN class events. */
        !           692: #define        I2O_EVENT_LAN_LINK_DOWN                 0x00000001
        !           693: #define        I2O_EVENT_LAN_LINK_UP                   0x00000002
        !           694: #define        I2O_EVENT_LAN_MEDIA_CHANGE              0x00000004
        !           695:
        !           696: /*
        !           697:  * ================= Utility parameter groups =================
        !           698:  */
        !           699:
        !           700: #define        I2O_PARAM_DEVICE_IDENTITY       0xf100
        !           701: struct i2o_param_device_identity {
        !           702:        u_int32_t       classid;
        !           703:        u_int16_t       ownertid;
        !           704:        u_int16_t       parenttid;
        !           705:        u_int8_t        vendorinfo[16];
        !           706:        u_int8_t        productinfo[16];
        !           707:        u_int8_t        description[16];
        !           708:        u_int8_t        revlevel[8];
        !           709:        u_int8_t        snformat;
        !           710:        u_int8_t        serialnumber[1];
        !           711: } __attribute__ ((__packed__));
        !           712:
        !           713: #define        I2O_PARAM_DDM_IDENTITY          0xf101
        !           714: struct i2o_param_ddm_identity {
        !           715:        u_int16_t       ddmtid;
        !           716:        u_int8_t        name[24];
        !           717:        u_int8_t        revlevel[8];
        !           718:        u_int8_t        snformat;
        !           719:        u_int8_t        serialnumber[12];
        !           720: } __attribute__ ((__packed__));
        !           721:
        !           722: /*
        !           723:  * ================= Block storage class messages =================
        !           724:  */
        !           725:
        !           726: #define        I2O_RBS_BLOCK_READ              0x30
        !           727: struct i2o_rbs_block_read {
        !           728:        u_int32_t       msgflags;
        !           729:        u_int32_t       msgfunc;
        !           730:        u_int32_t       msgictx;
        !           731:        u_int32_t       msgtctx;
        !           732:        u_int32_t       flags;          /* flags, time multipler, read ahead */
        !           733:        u_int32_t       datasize;
        !           734:        u_int32_t       lowoffset;
        !           735:        u_int32_t       highoffset;
        !           736: } __attribute__ ((__packed__));
        !           737:
        !           738: #define        I2O_RBS_BLOCK_READ_NO_RETRY     0x01
        !           739: #define        I2O_RBS_BLOCK_READ_SOLO         0x02
        !           740: #define        I2O_RBS_BLOCK_READ_CACHE_READ   0x04
        !           741: #define        I2O_RBS_BLOCK_READ_PREFETCH     0x08
        !           742: #define        I2O_RBS_BLOCK_READ_CACHE_ONLY   0x10
        !           743:
        !           744: #define        I2O_RBS_BLOCK_WRITE             0x31
        !           745: struct i2o_rbs_block_write {
        !           746:        u_int32_t       msgflags;
        !           747:        u_int32_t       msgfunc;
        !           748:        u_int32_t       msgictx;
        !           749:        u_int32_t       msgtctx;
        !           750:        u_int32_t       flags;          /* flags, time multipler */
        !           751:        u_int32_t       datasize;
        !           752:        u_int32_t       lowoffset;
        !           753:        u_int32_t       highoffset;
        !           754: } __attribute__ ((__packed__));
        !           755:
        !           756: #define        I2O_RBS_BLOCK_WRITE_NO_RETRY    0x01
        !           757: #define        I2O_RBS_BLOCK_WRITE_SOLO        0x02
        !           758: #define        I2O_RBS_BLOCK_WRITE_CACHE_NONE  0x04
        !           759: #define        I2O_RBS_BLOCK_WRITE_CACHE_WT    0x08
        !           760: #define        I2O_RBS_BLOCK_WRITE_CACHE_WB    0x10
        !           761:
        !           762: #define        I2O_RBS_CACHE_FLUSH             0x37
        !           763: struct i2o_rbs_cache_flush {
        !           764:        u_int32_t       msgflags;
        !           765:        u_int32_t       msgfunc;
        !           766:        u_int32_t       msgictx;
        !           767:        u_int32_t       msgtctx;
        !           768:        u_int32_t       flags;          /* flags, time multipler */
        !           769: } __attribute__ ((__packed__));
        !           770:
        !           771: #define        I2O_RBS_MEDIA_MOUNT             0x41
        !           772: struct i2o_rbs_media_mount {
        !           773:        u_int32_t       msgflags;
        !           774:        u_int32_t       msgfunc;
        !           775:        u_int32_t       msgictx;
        !           776:        u_int32_t       msgtctx;
        !           777:        u_int32_t       mediaid;
        !           778:        u_int32_t       loadflags;
        !           779: } __attribute__ ((__packed__));
        !           780:
        !           781: #define        I2O_RBS_MEDIA_EJECT             0x43
        !           782: struct i2o_rbs_media_eject {
        !           783:        u_int32_t       msgflags;
        !           784:        u_int32_t       msgfunc;
        !           785:        u_int32_t       msgictx;
        !           786:        u_int32_t       msgtctx;
        !           787:        u_int32_t       mediaid;
        !           788: } __attribute__ ((__packed__));
        !           789:
        !           790: #define        I2O_RBS_MEDIA_LOCK              0x49
        !           791: struct i2o_rbs_media_lock {
        !           792:        u_int32_t       msgflags;
        !           793:        u_int32_t       msgfunc;
        !           794:        u_int32_t       msgictx;
        !           795:        u_int32_t       msgtctx;
        !           796:        u_int32_t       mediaid;
        !           797: } __attribute__ ((__packed__));
        !           798:
        !           799: #define        I2O_RBS_MEDIA_UNLOCK            0x4b
        !           800: struct i2o_rbs_media_unlock {
        !           801:        u_int32_t       msgflags;
        !           802:        u_int32_t       msgfunc;
        !           803:        u_int32_t       msgictx;
        !           804:        u_int32_t       msgtctx;
        !           805:        u_int32_t       mediaid;
        !           806: } __attribute__ ((__packed__));
        !           807:
        !           808: /* Standard RBS reply frame. */
        !           809: struct i2o_rbs_reply {
        !           810:        u_int32_t       msgflags;
        !           811:        u_int32_t       msgfunc;
        !           812:        u_int32_t       msgictx;
        !           813:        u_int32_t       msgtctx;
        !           814:        u_int16_t       detail;
        !           815:        u_int8_t        retrycount;
        !           816:        u_int8_t        reqstatus;
        !           817:        u_int32_t       transfercount;
        !           818:        u_int64_t       offset;         /* Error replies only */
        !           819: } __attribute__ ((__packed__));
        !           820:
        !           821: /*
        !           822:  * ================= Block storage class parameter groups =================
        !           823:  */
        !           824:
        !           825: #define        I2O_PARAM_RBS_DEVICE_INFO       0x0000
        !           826: struct i2o_param_rbs_device_info {
        !           827:        u_int8_t        type;
        !           828:        u_int8_t        npaths;
        !           829:        u_int16_t       powerstate;
        !           830:        u_int32_t       blocksize;
        !           831:        u_int64_t       capacity;
        !           832:        u_int32_t       capabilities;
        !           833:        u_int32_t       state;
        !           834: } __attribute__ ((__packed__));
        !           835:
        !           836: #define        I2O_RBS_TYPE_DIRECT             0x00
        !           837: #define        I2O_RBS_TYPE_WORM               0x04
        !           838: #define        I2O_RBS_TYPE_CDROM              0x05
        !           839: #define        I2O_RBS_TYPE_OPTICAL            0x07
        !           840:
        !           841: #define        I2O_RBS_CAP_CACHING             0x00000001
        !           842: #define        I2O_RBS_CAP_MULTI_PATH          0x00000002
        !           843: #define        I2O_RBS_CAP_DYNAMIC_CAPACITY    0x00000004
        !           844: #define        I2O_RBS_CAP_REMOVABLE_MEDIA     0x00000008
        !           845: #define        I2O_RBS_CAP_REMOVABLE_DEVICE    0x00000010
        !           846: #define        I2O_RBS_CAP_READ_ONLY           0x00000020
        !           847: #define        I2O_RBS_CAP_LOCKOUT             0x00000040
        !           848: #define        I2O_RBS_CAP_BOOT_BYPASS         0x00000080
        !           849: #define        I2O_RBS_CAP_COMPRESSION         0x00000100
        !           850: #define        I2O_RBS_CAP_DATA_SECURITY       0x00000200
        !           851: #define        I2O_RBS_CAP_RAID                0x00000400
        !           852:
        !           853: #define        I2O_RBS_STATE_CACHING           0x00000001
        !           854: #define        I2O_RBS_STATE_POWERED_ON        0x00000002
        !           855: #define        I2O_RBS_STATE_READY             0x00000004
        !           856: #define        I2O_RBS_STATE_MEDIA_LOADED      0x00000008
        !           857: #define        I2O_RBS_STATE_DEVICE_LOADED     0x00000010
        !           858: #define        I2O_RBS_STATE_READ_ONLY         0x00000020
        !           859: #define        I2O_RBS_STATE_LOCKOUT           0x00000040
        !           860: #define        I2O_RBS_STATE_BOOT_BYPASS       0x00000080
        !           861: #define        I2O_RBS_STATE_COMPRESSION       0x00000100
        !           862: #define        I2O_RBS_STATE_DATA_SECURITY     0x00000200
        !           863: #define        I2O_RBS_STATE_RAID              0x00000400
        !           864:
        !           865: #define        I2O_PARAM_RBS_OPERATION         0x0001
        !           866: struct i2o_param_rbs_operation {
        !           867:        u_int8_t        autoreass;
        !           868:        u_int8_t        reasstolerance;
        !           869:        u_int8_t        numretries;
        !           870:        u_int8_t        reserved0;
        !           871:        u_int32_t       reasssize;
        !           872:        u_int32_t       expectedtimeout;
        !           873:        u_int32_t       rwvtimeout;
        !           874:        u_int32_t       rwvtimeoutbase;
        !           875:        u_int32_t       timeoutbase;
        !           876:        u_int32_t       orderedreqdepth;
        !           877:        u_int32_t       atomicwritesize;
        !           878: } __attribute__ ((__packed__));
        !           879:
        !           880: #define        I2O_PARAM_RBS_CACHE_CONTROL     0x0003
        !           881: struct i2o_param_rbs_cache_control {
        !           882:        u_int32_t       totalcachesize;
        !           883:        u_int32_t       readcachesize;
        !           884:        u_int32_t       writecachesize;
        !           885:        u_int8_t        writepolicy;
        !           886:        u_int8_t        readpolicy;
        !           887:        u_int8_t        errorcorrection;
        !           888:        u_int8_t        reserved;
        !           889: } __attribute__ ((__packed__));
        !           890:
        !           891: /*
        !           892:  * ================= SCSI peripheral class messages =================
        !           893:  */
        !           894:
        !           895: #define        I2O_SCSI_DEVICE_RESET           0x27
        !           896: struct i2o_scsi_device_reset {
        !           897:        u_int32_t       msgflags;
        !           898:        u_int32_t       msgfunc;
        !           899:        u_int32_t       msgictx;
        !           900:        u_int32_t       msgtctx;
        !           901: } __attribute__ ((__packed__));
        !           902:
        !           903: #define        I2O_SCSI_SCB_EXEC               0x81
        !           904: struct i2o_scsi_scb_exec {
        !           905:        u_int32_t       msgflags;
        !           906:        u_int32_t       msgfunc;
        !           907:        u_int32_t       msgictx;
        !           908:        u_int32_t       msgtctx;
        !           909:        u_int32_t       flags;          /* CDB length and flags */
        !           910:        u_int8_t        cdb[16];
        !           911:        u_int32_t       datalen;
        !           912: } __attribute__ ((__packed__));
        !           913:
        !           914: #define        I2O_SCB_FLAG_SENSE_DATA_IN_MESSAGE  0x00200000
        !           915: #define        I2O_SCB_FLAG_SENSE_DATA_IN_BUFFER   0x00600000
        !           916: #define        I2O_SCB_FLAG_SIMPLE_QUEUE_TAG       0x00800000
        !           917: #define        I2O_SCB_FLAG_HEAD_QUEUE_TAG         0x01000000
        !           918: #define        I2O_SCB_FLAG_ORDERED_QUEUE_TAG      0x01800000
        !           919: #define        I2O_SCB_FLAG_ACA_QUEUE_TAG          0x02000000
        !           920: #define        I2O_SCB_FLAG_ENABLE_DISCONNECT      0x20000000
        !           921: #define        I2O_SCB_FLAG_XFER_FROM_DEVICE       0x40000000
        !           922: #define        I2O_SCB_FLAG_XFER_TO_DEVICE         0x80000000
        !           923:
        !           924: #define        I2O_SCSI_SCB_ABORT              0x83
        !           925: struct i2o_scsi_scb_abort {
        !           926:        u_int32_t       msgflags;
        !           927:        u_int32_t       msgfunc;
        !           928:        u_int32_t       msgictx;
        !           929:        u_int32_t       msgtctx;
        !           930:        u_int32_t       tctxabort;
        !           931: } __attribute__ ((__packed__));
        !           932:
        !           933: struct i2o_scsi_reply {
        !           934:        u_int32_t       msgflags;
        !           935:        u_int32_t       msgfunc;
        !           936:        u_int32_t       msgictx;
        !           937:        u_int32_t       msgtctx;
        !           938:        u_int8_t        scsistatus;
        !           939:        u_int8_t        hbastatus;
        !           940:        u_int8_t        reserved;
        !           941:        u_int8_t        reqstatus;
        !           942:        u_int32_t       datalen;
        !           943:        u_int32_t       senselen;
        !           944:        u_int8_t        sense[40];
        !           945: } __attribute__ ((__packed__));
        !           946:
        !           947: #define        I2O_SCSI_DSC_SUCCESS                0x00
        !           948: #define        I2O_SCSI_DSC_REQUEST_ABORTED        0x02
        !           949: #define        I2O_SCSI_DSC_UNABLE_TO_ABORT        0x03
        !           950: #define        I2O_SCSI_DSC_COMPLETE_WITH_ERROR    0x04
        !           951: #define        I2O_SCSI_DSC_ADAPTER_BUSY           0x05
        !           952: #define        I2O_SCSI_DSC_REQUEST_INVALID        0x06
        !           953: #define        I2O_SCSI_DSC_PATH_INVALID           0x07
        !           954: #define        I2O_SCSI_DSC_DEVICE_NOT_PRESENT     0x08
        !           955: #define        I2O_SCSI_DSC_UNABLE_TO_TERMINATE    0x09
        !           956: #define        I2O_SCSI_DSC_SELECTION_TIMEOUT      0x0a
        !           957: #define        I2O_SCSI_DSC_COMMAND_TIMEOUT        0x0b
        !           958: #define        I2O_SCSI_DSC_MR_MESSAGE_RECEIVED    0x0d
        !           959: #define        I2O_SCSI_DSC_SCSI_BUS_RESET         0x0e
        !           960: #define        I2O_SCSI_DSC_PARITY_ERROR_FAILURE   0x0f
        !           961: #define        I2O_SCSI_DSC_AUTOSENSE_FAILED       0x10
        !           962: #define        I2O_SCSI_DSC_NO_ADAPTER             0x11
        !           963: #define        I2O_SCSI_DSC_DATA_OVERRUN           0x12
        !           964: #define        I2O_SCSI_DSC_UNEXPECTED_BUS_FREE    0x13
        !           965: #define        I2O_SCSI_DSC_SEQUENCE_FAILURE       0x14
        !           966: #define        I2O_SCSI_DSC_REQUEST_LENGTH_ERROR   0x15
        !           967: #define        I2O_SCSI_DSC_PROVIDE_FAILURE        0x16
        !           968: #define        I2O_SCSI_DSC_BDR_MESSAGE_SENT       0x17
        !           969: #define        I2O_SCSI_DSC_REQUEST_TERMINATED     0x18
        !           970: #define        I2O_SCSI_DSC_IDE_MESSAGE_SENT       0x33
        !           971: #define        I2O_SCSI_DSC_RESOURCE_UNAVAILABLE   0x34
        !           972: #define        I2O_SCSI_DSC_UNACKNOWLEDGED_EVENT   0x35
        !           973: #define        I2O_SCSI_DSC_MESSAGE_RECEIVED       0x36
        !           974: #define        I2O_SCSI_DSC_INVALID_CDB            0x37
        !           975: #define        I2O_SCSI_DSC_LUN_INVALID            0x38
        !           976: #define        I2O_SCSI_DSC_SCSI_TID_INVALID       0x39
        !           977: #define        I2O_SCSI_DSC_FUNCTION_UNAVAILABLE   0x3a
        !           978: #define        I2O_SCSI_DSC_NO_NEXUS               0x3b
        !           979: #define        I2O_SCSI_DSC_SCSI_IID_INVALID       0x3c
        !           980: #define        I2O_SCSI_DSC_CDB_RECEIVED           0x3d
        !           981: #define        I2O_SCSI_DSC_LUN_ALREADY_ENABLED    0x3e
        !           982: #define        I2O_SCSI_DSC_BUS_BUSY               0x3f
        !           983: #define        I2O_SCSI_DSC_QUEUE_FROZEN           0x40
        !           984:
        !           985: /*
        !           986:  * ================= SCSI peripheral class parameter groups =================
        !           987:  */
        !           988:
        !           989: #define        I2O_PARAM_SCSI_DEVICE_INFO      0x0000
        !           990: struct i2o_param_scsi_device_info {
        !           991:        u_int8_t        devicetype;
        !           992:        u_int8_t        flags;
        !           993:        u_int16_t       reserved0;
        !           994:        u_int32_t       identifier;
        !           995:        u_int8_t        luninfo[8];
        !           996:        u_int32_t       queuedepth;
        !           997:        u_int8_t        reserved1;
        !           998:        u_int8_t        negoffset;
        !           999:        u_int8_t        negdatawidth;
        !          1000:        u_int8_t        reserved2;
        !          1001:        u_int64_t       negsyncrate;
        !          1002: } __attribute__ ((__packed__));
        !          1003:
        !          1004: /*
        !          1005:  * ================= LAN class messages =================
        !          1006:  */
        !          1007:
        !          1008: #define        I2O_LAN_PACKET_SEND             0x3b
        !          1009: struct i2o_lan_packet_send {
        !          1010:        u_int32_t       msgflags;
        !          1011:        u_int32_t       msgfunc;
        !          1012:        u_int32_t       msgictx;
        !          1013:        u_int32_t       tcw;
        !          1014:
        !          1015:        /* SGL follows */
        !          1016: };
        !          1017:
        !          1018: #define        I2O_LAN_TCW_ACCESS_PRI_MASK     0x00000007
        !          1019: #define        I2O_LAN_TCW_SUPPRESS_CRC        0x00000008
        !          1020: #define        I2O_LAN_TCW_SUPPRESS_LOOPBACK   0x00000010
        !          1021: #define        I2O_LAN_TCW_CKSUM_NETWORK       0x00000020
        !          1022: #define        I2O_LAN_TCW_CKSUM_TRANSPORT     0x00000040
        !          1023: #define        I2O_LAN_TCW_REPLY_BATCH         0x00000000
        !          1024: #define        I2O_LAN_TCW_REPLY_IMMEDIATELY   0x40000000
        !          1025: #define        I2O_LAN_TCW_REPLY_UNSUCCESSFUL  0x80000000
        !          1026: #define        I2O_LAN_TCW_REPLY_NONE          0xc0000000
        !          1027:
        !          1028: #define        I2O_LAN_SDU_SEND                0x3d
        !          1029: struct i2o_lan_sdu_send {
        !          1030:        u_int32_t       msgflags;
        !          1031:        u_int32_t       msgfunc;
        !          1032:        u_int32_t       msgictx;
        !          1033:        u_int32_t       tcw;            /* As per PACKET_SEND. */
        !          1034:
        !          1035:        /* SGL follows */
        !          1036: };
        !          1037:
        !          1038: struct i2o_lan_send_reply {
        !          1039:        u_int32_t       msgflags;
        !          1040:        u_int32_t       msgfunc;
        !          1041:        u_int32_t       msgictx;
        !          1042:        u_int32_t       trl;
        !          1043:        u_int16_t       detail;
        !          1044:        u_int8_t        reserved;
        !          1045:        u_int8_t        reqstatus;
        !          1046:        u_int32_t       tctx[1];
        !          1047: };
        !          1048:
        !          1049: #define        I2O_LAN_RECEIVE_POST            0x3e
        !          1050: struct i2o_lan_receive_post {
        !          1051:        u_int32_t       msgflags;
        !          1052:        u_int32_t       msgfunc;
        !          1053:        u_int32_t       msgictx;
        !          1054:        u_int32_t       bktcnt;
        !          1055:
        !          1056:        /* SGL follows */
        !          1057: };
        !          1058:
        !          1059: struct i2o_lan_pdb {
        !          1060:        u_int32_t       bctx;
        !          1061:        u_int32_t       pktoff;
        !          1062:        u_int32_t       pktlen;
        !          1063: };
        !          1064:
        !          1065: #define        I2O_LAN_FRAG_VALID              0x00
        !          1066: #define        I2O_LAN_FRAG_VALID_MASK         foo
        !          1067:
        !          1068: struct i2o_lan_receive_reply {
        !          1069:        u_int32_t       msgflags;
        !          1070:        u_int32_t       msgfunc;
        !          1071:        u_int32_t       msgictx;
        !          1072:        u_int8_t        trlcount;
        !          1073:        u_int8_t        trlesize;
        !          1074:        u_int8_t        reserved;
        !          1075:        u_int8_t        trlflags;
        !          1076:        u_int32_t       bucketsleft;
        !          1077:        struct i2o_lan_pdb      pdb[1];
        !          1078: };
        !          1079:
        !          1080: #define        I2O_LAN_RESET                   0x35
        !          1081: struct i2o_lan_reset {
        !          1082:        u_int32_t       msgflags;
        !          1083:        u_int32_t       msgfunc;
        !          1084:        u_int32_t       msgictx;
        !          1085:        u_int16_t       reserved;
        !          1086:        u_int16_t       resrcflags;
        !          1087: };
        !          1088:
        !          1089: #define        I2O_LAN_RESRC_RETURN_BUCKETS    0x0001
        !          1090: #define        I2O_LAN_RESRC_RETURN_XMITS      0x0002
        !          1091:
        !          1092: #define        I2O_LAN_SUSPEND                 0x37
        !          1093: struct i2o_lan_suspend {
        !          1094:        u_int32_t       msgflags;
        !          1095:        u_int32_t       msgfunc;
        !          1096:        u_int32_t       msgictx;
        !          1097:        u_int16_t       reserved;
        !          1098:        u_int16_t       resrcflags;     /* As per RESET. */
        !          1099: };
        !          1100:
        !          1101: #define        I2O_LAN_DSC_SUCCESS                     0x00
        !          1102: #define        I2O_LAN_DSC_DEVICE_FAILURE              0x01
        !          1103: #define        I2O_LAN_DSC_DESTINATION_NOT_FOUND       0x02
        !          1104: #define        I2O_LAN_DSC_TRANSMIT_ERROR              0x03
        !          1105: #define        I2O_LAN_DSC_TRANSMIT_ABORTED            0x04
        !          1106: #define        I2O_LAN_DSC_RECEIVE_ERROR               0x05
        !          1107: #define        I2O_LAN_DSC_RECEIVE_ABORTED             0x06
        !          1108: #define        I2O_LAN_DSC_DMA_ERROR                   0x07
        !          1109: #define        I2O_LAN_DSC_BAD_PACKET_DETECTED         0x08
        !          1110: #define        I2O_LAN_DSC_OUT_OF_MEMORY               0x09
        !          1111: #define        I2O_LAN_DSC_BUCKET_OVERRUN              0x0a
        !          1112: #define        I2O_LAN_DSC_IOP_INTERNAL_ERROR          0x0b
        !          1113: #define        I2O_LAN_DSC_CANCELED                    0x0c
        !          1114: #define        I2O_LAN_DSC_INVALID_TRANSACTION_CONTEXT 0x0d
        !          1115: #define        I2O_LAN_DSC_DEST_ADDRESS_DETECTED       0x0e
        !          1116: #define        I2O_LAN_DSC_DEST_ADDRESS_OMITTED        0x0f
        !          1117: #define        I2O_LAN_DSC_PARTIAL_PACKET_RETURNED     0x10
        !          1118: #define        I2O_LAN_DSC_TEMP_SUSPENDED_STATE        0x11
        !          1119:
        !          1120: /*
        !          1121:  * ================= LAN class parameter groups =================
        !          1122:  */
        !          1123:
        !          1124: #define        I2O_PARAM_LAN_DEVICE_INFO       0x0000
        !          1125: struct i2o_param_lan_device_info {
        !          1126:        u_int16_t       lantype;
        !          1127:        u_int16_t       flags;
        !          1128:        u_int8_t        addrfmt;
        !          1129:        u_int8_t        reserved1;
        !          1130:        u_int16_t       reserved2;
        !          1131:        u_int32_t       minpktsize;
        !          1132:        u_int32_t       maxpktsize;
        !          1133:        u_int8_t        hwaddr[8];
        !          1134:        u_int64_t       maxtxbps;
        !          1135:        u_int64_t       maxrxbps;
        !          1136: };
        !          1137:
        !          1138: #define        I2O_LAN_TYPE_ETHERNET           0x0030
        !          1139: #define        I2O_LAN_TYPE_100BASEVG          0x0040
        !          1140: #define        I2O_LAN_TYPE_TOKEN_RING         0x0050
        !          1141: #define        I2O_LAN_TYPE_FDDI               0x0060
        !          1142: #define        I2O_LAN_TYPE_FIBRECHANNEL       0x0070
        !          1143:
        !          1144: #define        I2O_PARAM_LAN_MAC_ADDRESS       0x0001
        !          1145: struct i2o_param_lan_mac_address {
        !          1146:        u_int8_t        activeaddr[8];
        !          1147:        u_int8_t        localaddr[8];
        !          1148:        u_int8_t        addrmask[8];
        !          1149:        u_int8_t        filtermask[4];
        !          1150:        u_int8_t        hwfiltermask[4];
        !          1151:        u_int32_t       maxmcastaddr;
        !          1152:        u_int32_t       maxfilterperfect;
        !          1153:        u_int32_t       maxfilterimperfect;
        !          1154: };
        !          1155:
        !          1156: #define        I2O_PARAM_LAN_MCAST_MAC_ADDRESS 0x0002
        !          1157: /*
        !          1158:  * This one's a table, not a scalar.
        !          1159:  */
        !          1160:
        !          1161: #define        I2O_PARAM_LAN_BATCH_CONTROL     0x0003
        !          1162: struct i2o_param_lan_batch_control {
        !          1163:        u_int32_t       batchflags;
        !          1164:        u_int32_t       risingloaddly;
        !          1165:        u_int32_t       risingloadthresh;
        !          1166:        u_int32_t       fallingloaddly;
        !          1167:        u_int32_t       fallingloadthresh;
        !          1168:        u_int32_t       maxbatchcount;
        !          1169:        u_int32_t       maxbatchdelay;
        !          1170:        u_int32_t       transcompdelay;
        !          1171: };
        !          1172:
        !          1173: #define        I2O_PARAM_LAN_OPERATION         0x0004
        !          1174: struct i2o_param_lan_operation {
        !          1175:        u_int32_t       pktprepad;
        !          1176:        u_int32_t       userflags;
        !          1177:        u_int32_t       pktorphanlimit;
        !          1178: };
        !          1179:
        !          1180: #define        I2O_PARAM_LAN_MEDIA_OPERATION   0x0005
        !          1181: struct i2o_param_lan_media_operation {
        !          1182:        u_int32_t       connectortype;
        !          1183:        u_int32_t       connectiontype;
        !          1184:        u_int32_t       curtxbps;
        !          1185:        u_int32_t       currxbps;
        !          1186:        u_int8_t        fullduplex;
        !          1187:        u_int8_t        linkstatus;
        !          1188:        u_int8_t        badpkthandling;
        !          1189: };
        !          1190:
        !          1191: #define        I2O_LAN_CONNECTOR_OTHER         0x00
        !          1192: #define        I2O_LAN_CONNECTOR_UNKNOWN       0x01
        !          1193: #define        I2O_LAN_CONNECTOR_AUI           0x02
        !          1194: #define        I2O_LAN_CONNECTOR_UTP           0x03
        !          1195: #define        I2O_LAN_CONNECTOR_BNC           0x04
        !          1196: #define        I2O_LAN_CONNECTOR_RJ45          0x05
        !          1197: #define        I2O_LAN_CONNECTOR_STP_DB9       0x06
        !          1198: #define        I2O_LAN_CONNECTOR_FIBER_MIC     0x07
        !          1199: #define        I2O_LAN_CONNECTOR_APPLE_AUI     0x08
        !          1200: #define        I2O_LAN_CONNECTOR_MII           0x09
        !          1201: #define        I2O_LAN_CONNECTOR_COPPER_DB9    0x0a
        !          1202: #define        I2O_LAN_CONNECTOR_COPPER_AW     0x0b
        !          1203: #define        I2O_LAN_CONNECTOR_OPTICAL_LW    0x0c
        !          1204: #define        I2O_LAN_CONNECTOR_SIP           0x0d
        !          1205: #define        I2O_LAN_CONNECTOR_OPTICAL_SW    0x0e
        !          1206:
        !          1207: #define        I2O_LAN_CONNECTION_UNKNOWN              0x0000
        !          1208:
        !          1209: #define        I2O_LAN_CONNECTION_ETHERNET_AUI         0x0301
        !          1210: #define        I2O_LAN_CONNECTION_ETHERNET_10BASE5     0x0302
        !          1211: #define        I2O_LAN_CONNECTION_ETHERNET_FOIRL       0x0303
        !          1212: #define        I2O_LAN_CONNECTION_ETHERNET_10BASE2     0x0304
        !          1213: #define        I2O_LAN_CONNECTION_ETHERNET_10BROAD36   0x0305
        !          1214: #define        I2O_LAN_CONNECTION_ETHERNET_10BASET     0x0306
        !          1215: #define        I2O_LAN_CONNECTION_ETHERNET_10BASEFP    0x0307
        !          1216: #define        I2O_LAN_CONNECTION_ETHERNET_10BASEFB    0x0308
        !          1217: #define        I2O_LAN_CONNECTION_ETHERNET_10BASEFL    0x0309
        !          1218: #define        I2O_LAN_CONNECTION_ETHERNET_100BASETX   0x030a
        !          1219: #define        I2O_LAN_CONNECTION_ETHERNET_100BASEFX   0x030b
        !          1220: #define        I2O_LAN_CONNECTION_ETHERNET_100BASET4   0x030c
        !          1221:
        !          1222: #define        I2O_LAN_CONNECTION_100BASEVG_100BASEVG  0x0401
        !          1223:
        !          1224: #define        I2O_LAN_CONNECTION_TOKEN_RING_4MBIT     0x0501
        !          1225: #define        I2O_LAN_CONNECTION_TOKEN_RING_16MBIT    0x0502
        !          1226:
        !          1227: #define        I2O_LAN_CONNECTION_FDDI_125MBIT         0x0601
        !          1228:
        !          1229: #define        I2O_LAN_CONNECTION_FIBRECHANNEL_P2P     0x0701
        !          1230: #define        I2O_LAN_CONNECTION_FIBRECHANNEL_AL      0x0702
        !          1231: #define        I2O_LAN_CONNECTION_FIBRECHANNEL_PL      0x0703
        !          1232: #define        I2O_LAN_CONNECTION_FIBRECHANNEL_F       0x0704
        !          1233:
        !          1234: #define        I2O_LAN_CONNECTION_OTHER_EMULATED       0x0f00
        !          1235: #define        I2O_LAN_CONNECTION_OTHER_OTHER          0x0f01
        !          1236:
        !          1237: #endif /* !defined _I2O_I2O_H_ */

CVSweb