Print this page
Initial modifications using the code changes present between
the LSI source code for FreeBSD drivers. Specifically the changes
between from mpslsi-source-17.00.00.00 -> mpslsi-source-03.00.00.00.
This mainly involves using a different scatter/gather element in
frame setup.

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/sys/scsi/adapters/mpt_sas3/mpi/mpi2_init.h
          +++ new/usr/src/uts/common/sys/scsi/adapters/mpt_sas3/mpi/mpi2_init.h
↓ open down ↓ 12 lines elided ↑ open up ↑
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23      - * Copyright (c) 2000 to 2009, LSI Corporation.
  24      - * All rights reserved.
       23 + *  Copyright (c) 2000-2012 LSI Corporation.
  25   24   *
  26   25   * Redistribution and use in source and binary forms of all code within
  27   26   * this file that is exclusively owned by LSI, with or without
  28   27   * modification, is permitted provided that, in addition to the CDDL 1.0
  29   28   * License requirements, the following conditions are met:
  30   29   *
  31   30   *    Neither the name of the author nor the names of its contributors may be
  32   31   *    used to endorse or promote products derived from this software without
  33   32   *    specific prior written permission.
  34   33   *
↓ open down ↓ 9 lines elided ↑ open up ↑
  44   43   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45   44   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  46   45   * DAMAGE.
  47   46   */
  48   47  
  49   48  /*
  50   49   *           Name:  mpi2_init.h
  51   50   *          Title:  MPI SCSI initiator mode messages and structures
  52   51   *  Creation Date:  June 23, 2006
  53   52   *
  54      - *    mpi2_init.h Version:  02.00.07
       53 + *  mpi2_init.h Version:  02.00.xx
       54 + *
       55 + *  NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
       56 + *        prefix are for use only on MPI v2.5 products, and must not be used
       57 + *        with MPI v2.0 products. Unless otherwise noted, names beginning with
       58 + *        MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products.
  55   59   *
  56   60   *  Version History
  57   61   *  ---------------
  58   62   *
  59   63   *  Date      Version   Description
  60   64   *  --------  --------  ------------------------------------------------------
  61   65   *  04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
  62   66   *  10-31-07  02.00.01  Fixed name for pMpi2SCSITaskManagementRequest_t.
  63   67   *  12-18-07  02.00.02  Modified Task Management Target Reset Method defines.
  64   68   *  02-29-08  02.00.03  Added Query Task Set and Query Unit Attention.
  65   69   *  03-03-08  02.00.04  Fixed name of struct _MPI2_SCSI_TASK_MANAGE_REPLY.
  66   70   *  05-21-08  02.00.05  Fixed typo in name of Mpi2SepRequest_t.
  67   71   *  10-02-08  02.00.06  Removed Untagged and No Disconnect values from SCSI IO
  68   72   *                      Control field Task Attribute flags.
  69   73   *                      Moved LUN field defines to mpi2.h becasue they are
  70   74   *                      common to many structures.
  71   75   *  05-06-09  02.00.07  Changed task management type of Query Unit Attention to
  72   76   *                      Query Asynchronous Event.
  73   77   *                      Defined two new bits in the SlotStatus field of the SCSI
  74   78   *                      Enclosure Processor Request and Reply.
       79 + *  10-28-09  02.00.08  Added defines for decoding the ResponseInfo bytes for
       80 + *                      both SCSI IO Error Reply and SCSI Task Management Reply.
       81 + *                      Added ResponseInfo field to MPI2_SCSI_TASK_MANAGE_REPLY.
       82 + *                      Added MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG define.
       83 + *  02-10-10  02.00.09  Removed unused structure that had "#if 0" around it.
       84 + *  05-12-10  02.00.10  Added optional vendor-unique region to SCSI IO Request.
       85 + *  11-10-10  02.00.11  Added MPI2_SCSIIO_NUM_SGLOFFSETS define.
  75   86   *  --------------------------------------------------------------------------
  76   87   */
  77   88  
  78   89  #ifndef MPI2_INIT_H
  79   90  #define MPI2_INIT_H
  80   91  
  81   92  /*****************************************************************************
  82   93  *
  83   94  *               SCSI Initiator Messages
  84   95  *
↓ open down ↓ 6 lines elided ↑ open up ↑
  91  102  typedef struct
  92  103  {
  93  104      U8                      CDB[20];                    /* 0x00 */
  94  105      U32                     PrimaryReferenceTag;        /* 0x14 */
  95  106      U16                     PrimaryApplicationTag;      /* 0x18 */
  96  107      U16                     PrimaryApplicationTagMask;  /* 0x1A */
  97  108      U32                     TransferLength;             /* 0x1C */
  98  109  } MPI2_SCSI_IO_CDB_EEDP32, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_EEDP32,
  99  110    Mpi2ScsiIoCdbEedp32_t, MPI2_POINTER pMpi2ScsiIoCdbEedp32_t;
 100  111  
 101      -/* TBD: I don't think this is needed for MPI2/Gen2 */
 102      -#if 0
 103      -typedef struct
 104      -{
 105      -    U8                      CDB[16];                    /* 0x00 */
 106      -    U32                     DataLength;                 /* 0x10 */
 107      -    U32                     PrimaryReferenceTag;        /* 0x14 */
 108      -    U16                     PrimaryApplicationTag;      /* 0x18 */
 109      -    U16                     PrimaryApplicationTagMask;  /* 0x1A */
 110      -    U32                     TransferLength;             /* 0x1C */
 111      -} MPI2_SCSI_IO32_CDB_EEDP16, MPI2_POINTER PTR_MPI2_SCSI_IO32_CDB_EEDP16,
 112      -  Mpi2ScsiIo32CdbEedp16_t, MPI2_POINTER pMpi2ScsiIo32CdbEedp16_t;
 113      -#endif
 114      -
 115  112  typedef union
 116  113  {
 117  114      U8                      CDB32[32];
 118  115      MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
 119  116      MPI2_SGE_SIMPLE_UNION   SGE;
 120  117  } MPI2_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_UNION,
 121  118    Mpi2ScsiIoCdb_t, MPI2_POINTER pMpi2ScsiIoCdb_t;
 122  119  
 123      -/* SCSI IO Request Message */
      120 +/* MPI v2.0 SCSI IO Request Message */
 124  121  typedef struct _MPI2_SCSI_IO_REQUEST
 125  122  {
 126  123      U16                     DevHandle;                      /* 0x00 */
 127  124      U8                      ChainOffset;                    /* 0x02 */
 128  125      U8                      Function;                       /* 0x03 */
 129  126      U16                     Reserved1;                      /* 0x04 */
 130  127      U8                      Reserved2;                      /* 0x06 */
 131  128      U8                      MsgFlags;                       /* 0x07 */
 132  129      U8                      VP_ID;                          /* 0x08 */
 133  130      U8                      VF_ID;                          /* 0x09 */
↓ open down ↓ 45 lines elided ↑ open up ↑
 179  176  #define MPI2_SCSIIO_SGLFLAGS_TYPE_MPI               (0x00)
 180  177  #define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE32            (0x01)
 181  178  #define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE64            (0x02)
 182  179  
 183  180  /* shift values for each sub-field */
 184  181  #define MPI2_SCSIIO_SGLFLAGS_SGL3_SHIFT             (12)
 185  182  #define MPI2_SCSIIO_SGLFLAGS_SGL2_SHIFT             (8)
 186  183  #define MPI2_SCSIIO_SGLFLAGS_SGL1_SHIFT             (4)
 187  184  #define MPI2_SCSIIO_SGLFLAGS_SGL0_SHIFT             (0)
 188  185  
      186 +/* number of SGLOffset fields */
      187 +#define MPI2_SCSIIO_NUM_SGLOFFSETS                  (4)
      188 +
 189  189  /* SCSI IO IoFlags bits */
 190  190  
 191  191  /* Large CDB Address Space */
 192  192  #define MPI2_SCSIIO_CDB_ADDR_MASK                   (0x6000)
 193  193  #define MPI2_SCSIIO_CDB_ADDR_SYSTEM                 (0x0000)
 194  194  #define MPI2_SCSIIO_CDB_ADDR_IOCDDR                 (0x2000)
 195  195  #define MPI2_SCSIIO_CDB_ADDR_IOCPLB                 (0x4000)
 196  196  #define MPI2_SCSIIO_CDB_ADDR_IOCPLBNTA              (0x6000)
 197  197  
 198  198  #define MPI2_SCSIIO_IOFLAGS_LARGE_CDB               (0x1000)
↓ open down ↓ 44 lines elided ↑ open up ↑
 243  243  #define MPI2_SCSIIO_CONTROL_HEADOFQ             (0x00000100)
 244  244  #define MPI2_SCSIIO_CONTROL_ORDEREDQ            (0x00000200)
 245  245  #define MPI2_SCSIIO_CONTROL_ACAQ                (0x00000400)
 246  246  
 247  247  #define MPI2_SCSIIO_CONTROL_TLR_MASK            (0x000000C0)
 248  248  #define MPI2_SCSIIO_CONTROL_NO_TLR              (0x00000000)
 249  249  #define MPI2_SCSIIO_CONTROL_TLR_ON              (0x00000040)
 250  250  #define MPI2_SCSIIO_CONTROL_TLR_OFF             (0x00000080)
 251  251  
 252  252  
      253 +/* MPI v2.5 CDB field */
      254 +typedef union _MPI25_SCSI_IO_CDB_UNION
      255 +{
      256 +    U8                      CDB32[32];
      257 +    MPI2_SCSI_IO_CDB_EEDP32 EEDP32;
      258 +    MPI2_IEEE_SGE_SIMPLE64  SGE;
      259 +} MPI25_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI25_SCSI_IO_CDB_UNION,
      260 +  Mpi25ScsiIoCdb_t, MPI2_POINTER pMpi25ScsiIoCdb_t;
      261 +
      262 +/* MPI v2.5 SCSI IO Request Message */
      263 +typedef struct _MPI25_SCSI_IO_REQUEST
      264 +{
      265 +    U16                     DevHandle;                      /* 0x00 */
      266 +    U8                      ChainOffset;                    /* 0x02 */
      267 +    U8                      Function;                       /* 0x03 */
      268 +    U16                     Reserved1;                      /* 0x04 */
      269 +    U8                      Reserved2;                      /* 0x06 */
      270 +    U8                      MsgFlags;                       /* 0x07 */
      271 +    U8                      VP_ID;                          /* 0x08 */
      272 +    U8                      VF_ID;                          /* 0x09 */
      273 +    U16                     Reserved3;                      /* 0x0A */
      274 +    U32                     SenseBufferLowAddress;          /* 0x0C */
      275 +    U8                      DMAFlags;                       /* 0x10 */
      276 +    U8                      Reserved5;                      /* 0x11 */
      277 +    U8                      SenseBufferLength;              /* 0x12 */
      278 +    U8                      Reserved4;                      /* 0x13 */
      279 +    U8                      SGLOffset0;                     /* 0x14 */
      280 +    U8                      SGLOffset1;                     /* 0x15 */
      281 +    U8                      SGLOffset2;                     /* 0x16 */
      282 +    U8                      SGLOffset3;                     /* 0x17 */
      283 +    U32                     SkipCount;                      /* 0x18 */
      284 +    U32                     DataLength;                     /* 0x1C */
      285 +    U32                     BidirectionalDataLength;        /* 0x20 */
      286 +    U16                     IoFlags;                        /* 0x24 */
      287 +    U16                     EEDPFlags;                      /* 0x26 */
      288 +    U16                     EEDPBlockSize;                  /* 0x28 */
      289 +    U16                     Reserved6;                      /* 0x2A */
      290 +    U32                     SecondaryReferenceTag;          /* 0x2C */
      291 +    U16                     SecondaryApplicationTag;        /* 0x30 */
      292 +    U16                     ApplicationTagTranslationMask;  /* 0x32 */
      293 +    U8                      LUN[8];                         /* 0x34 */
      294 +    U32                     Control;                        /* 0x3C */
      295 +    MPI25_SCSI_IO_CDB_UNION CDB;                            /* 0x40 */
      296 +
      297 +#ifdef MPI25_SCSI_IO_VENDOR_UNIQUE_REGION /* typically this is left undefined */
      298 +    MPI25_SCSI_IO_VENDOR_UNIQUE VendorRegion;
      299 +#endif
      300 +
      301 +    MPI25_SGE_IO_UNION      SGL;                            /* 0x60 */
      302 +
      303 +} MPI25_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI25_SCSI_IO_REQUEST,
      304 +  Mpi25SCSIIORequest_t, MPI2_POINTER pMpi25SCSIIORequest_t;
      305 +
      306 +/* use MPI2_SCSIIO_MSGFLAGS_ defines for the MsgFlags field */
      307 +
      308 +/* Defines for the DMAFlags field
      309 + *  Each setting affects 4 SGLS, from SGL0 to SGL3.
      310 + *      D = Data
      311 + *      C = Cache DIF
      312 + *      I = Interleaved
      313 + *      H = Host DIF
      314 + */
      315 +#define MPI25_SCSIIO_DMAFLAGS_OP_MASK               (0x0F)
      316 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_D            (0x00)
      317 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_C            (0x01)
      318 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_I            (0x02)
      319 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_C_C            (0x03)
      320 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_C_I            (0x04)
      321 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_I_I            (0x05)
      322 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_C_C_C            (0x06)
      323 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_C_C_I            (0x07)
      324 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_C_I_I            (0x08)
      325 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_I_I_I            (0x09)
      326 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_D            (0x0A)
      327 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_C            (0x0B)
      328 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_I            (0x0C)
      329 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_C_C            (0x0D)
      330 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_C_I            (0x0E)
      331 +#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_I_I            (0x0F)
      332 +
      333 +/* number of SGLOffset fields */
      334 +#define MPI25_SCSIIO_NUM_SGLOFFSETS                 (4)
      335 +
      336 +/* defines for the IoFlags field */
      337 +#define MPI25_SCSIIO_IOFLAGS_IO_PATH_MASK           (0xC000)
      338 +#define MPI25_SCSIIO_IOFLAGS_NORMAL_PATH            (0x0000)
      339 +#define MPI25_SCSIIO_IOFLAGS_FAST_PATH              (0x4000)
      340 +
      341 +#define MPI25_SCSIIO_IOFLAGS_LARGE_CDB                  (0x1000)
      342 +#define MPI25_SCSIIO_IOFLAGS_BIDIRECTIONAL              (0x0800)
      343 +#define MPI25_SCSIIO_IOFLAGS_CMD_DETERMINES_DATA_DIR    (0x0200)
      344 +#define MPI25_SCSIIO_IOFLAGS_CDBLENGTH_MASK             (0x01FF)
      345 +
      346 +/* MPI v2.5 defines for the EEDPFlags bits */
      347 +/* use MPI2_SCSIIO_EEDPFLAGS_ defines for the other EEDPFlags bits */
      348 +#define MPI25_SCSIIO_EEDPFLAGS_ESCAPE_MODE_MASK             (0x00C0)
      349 +#define MPI25_SCSIIO_EEDPFLAGS_COMPATIBLE_MODE              (0x0000)
      350 +#define MPI25_SCSIIO_EEDPFLAGS_DO_NOT_DISABLE_MODE          (0x0040)
      351 +#define MPI25_SCSIIO_EEDPFLAGS_APPTAG_DISABLE_MODE          (0x0080)
      352 +#define MPI25_SCSIIO_EEDPFLAGS_APPTAG_REFTAG_DISABLE_MODE   (0x00C0)
      353 +
      354 +#define MPI25_SCSIIO_EEDPFLAGS_HOST_GUARD_METHOD_MASK       (0x0030)
      355 +#define MPI25_SCSIIO_EEDPFLAGS_T10_CRC_HOST_GUARD           (0x0000)
      356 +#define MPI25_SCSIIO_EEDPFLAGS_IP_CHKSUM_HOST_GUARD         (0x0010)
      357 +
      358 +/* use MPI2_LUN_ defines from mpi2.h for the LUN field */
      359 +
      360 +/* use MPI2_SCSIIO_CONTROL_ defines for the Control field */
      361 +
      362 +
      363 +/* NOTE: The SCSI IO Reply is the same for MPI 2.0 and MPI 2.5, so
      364 + *       MPI2_SCSI_IO_REPLY is used for both.
      365 + */
      366 +
 253  367  /* SCSI IO Error Reply Message */
 254  368  typedef struct _MPI2_SCSI_IO_REPLY
 255  369  {
 256  370      U16                     DevHandle;                      /* 0x00 */
 257  371      U8                      MsgLength;                      /* 0x02 */
 258  372      U8                      Function;                       /* 0x03 */
 259  373      U16                     Reserved1;                      /* 0x04 */
 260  374      U8                      Reserved2;                      /* 0x06 */
 261  375      U8                      MsgFlags;                       /* 0x07 */
 262  376      U8                      VP_ID;                          /* 0x08 */
↓ open down ↓ 29 lines elided ↑ open up ↑
 292  406  #define MPI2_SCSI_STATUS_TASK_ABORTED           (0x40)
 293  407  
 294  408  /* SCSI IO Reply SCSIState flags */
 295  409  
 296  410  #define MPI2_SCSI_STATE_RESPONSE_INFO_VALID     (0x10)
 297  411  #define MPI2_SCSI_STATE_TERMINATED              (0x08)
 298  412  #define MPI2_SCSI_STATE_NO_SCSI_STATUS          (0x04)
 299  413  #define MPI2_SCSI_STATE_AUTOSENSE_FAILED        (0x02)
 300  414  #define MPI2_SCSI_STATE_AUTOSENSE_VALID         (0x01)
 301  415  
      416 +/* masks and shifts for the ResponseInfo field */
      417 +
      418 +#define MPI2_SCSI_RI_MASK_REASONCODE            (0x000000FF)
      419 +#define MPI2_SCSI_RI_SHIFT_REASONCODE           (0)
      420 +
 302  421  #define MPI2_SCSI_TASKTAG_UNKNOWN               (0xFFFF)
 303  422  
 304  423  
 305  424  /****************************************************************************
 306  425  *  SCSI Task Management messages
 307  426  ****************************************************************************/
 308  427  
 309  428  /* SCSI Task Management Request Message */
 310  429  typedef struct _MPI2_SCSI_TASK_MANAGE_REQUEST
 311  430  {
↓ open down ↓ 52 lines elided ↑ open up ↑
 364  483      U8                      TaskType;                       /* 0x05 */
 365  484      U8                      Reserved1;                      /* 0x06 */
 366  485      U8                      MsgFlags;                       /* 0x07 */
 367  486      U8                      VP_ID;                          /* 0x08 */
 368  487      U8                      VF_ID;                          /* 0x09 */
 369  488      U16                     Reserved2;                      /* 0x0A */
 370  489      U16                     Reserved3;                      /* 0x0C */
 371  490      U16                     IOCStatus;                      /* 0x0E */
 372  491      U32                     IOCLogInfo;                     /* 0x10 */
 373  492      U32                     TerminationCount;               /* 0x14 */
      493 +    U32                     ResponseInfo;                   /* 0x18 */
 374  494  } MPI2_SCSI_TASK_MANAGE_REPLY,
 375  495    MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REPLY,
 376  496    Mpi2SCSITaskManagementReply_t, MPI2_POINTER pMpi2SCSIManagementReply_t;
 377  497  
 378  498  /* ResponseCode values */
 379  499  
 380  500  #define MPI2_SCSITASKMGMT_RSP_TM_COMPLETE               (0x00)
 381  501  #define MPI2_SCSITASKMGMT_RSP_INVALID_FRAME             (0x02)
 382  502  #define MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED          (0x04)
 383  503  #define MPI2_SCSITASKMGMT_RSP_TM_FAILED                 (0x05)
 384  504  #define MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED              (0x08)
 385  505  #define MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN            (0x09)
      506 +#define MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG         (0x0A)
 386  507  #define MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC          (0x80)
 387  508  
      509 +/* masks and shifts for the ResponseInfo field */
      510 +
      511 +#define MPI2_SCSITASKMGMT_RI_MASK_REASONCODE            (0x000000FF)
      512 +#define MPI2_SCSITASKMGMT_RI_SHIFT_REASONCODE           (0)
      513 +#define MPI2_SCSITASKMGMT_RI_MASK_ARI2                  (0x0000FF00)
      514 +#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI2                 (8)
      515 +#define MPI2_SCSITASKMGMT_RI_MASK_ARI1                  (0x00FF0000)
      516 +#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI1                 (16)
      517 +#define MPI2_SCSITASKMGMT_RI_MASK_ARI0                  (0xFF000000)
      518 +#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI0                 (24)
      519 +
 388  520  
 389  521  /****************************************************************************
 390  522  *  SCSI Enclosure Processor messages
 391  523  ****************************************************************************/
 392  524  
 393  525  /* SCSI Enclosure Processor Request Message */
 394  526  typedef struct _MPI2_SEP_REQUEST
 395  527  {
 396  528      U16                     DevHandle;          /* 0x00 */
 397  529      U8                      ChainOffset;        /* 0x02 */
↓ open down ↓ 79 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX