[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

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