The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/i2o/i2o.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: 247ad2be9353c7ee74c45a6ff8bc0d94


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.