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.

*** 18,29 **** * * CDDL HEADER END */ /* ! * Copyright (c) 2000 to 2009, LSI Corporation. ! * All rights reserved. * * Redistribution and use in source and binary forms of all code within * this file that is exclusively owned by LSI, with or without * modification, is permitted provided that, in addition to the CDDL 1.0 * License requirements, the following conditions are met: --- 18,28 ---- * * CDDL HEADER END */ /* ! * Copyright (c) 2000-2012 LSI Corporation. * * Redistribution and use in source and binary forms of all code within * this file that is exclusively owned by LSI, with or without * modification, is permitted provided that, in addition to the CDDL 1.0 * License requirements, the following conditions are met:
*** 49,59 **** /* * Name: mpi2_init.h * Title: MPI SCSI initiator mode messages and structures * Creation Date: June 23, 2006 * ! * mpi2_init.h Version: 02.00.07 * * Version History * --------------- * * Date Version Description --- 48,63 ---- /* * Name: mpi2_init.h * Title: MPI SCSI initiator mode messages and structures * Creation Date: June 23, 2006 * ! * mpi2_init.h Version: 02.00.xx ! * ! * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25 ! * prefix are for use only on MPI v2.5 products, and must not be used ! * with MPI v2.0 products. Unless otherwise noted, names beginning with ! * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products. * * Version History * --------------- * * Date Version Description
*** 70,79 **** --- 74,90 ---- * common to many structures. * 05-06-09 02.00.07 Changed task management type of Query Unit Attention to * Query Asynchronous Event. * Defined two new bits in the SlotStatus field of the SCSI * Enclosure Processor Request and Reply. + * 10-28-09 02.00.08 Added defines for decoding the ResponseInfo bytes for + * both SCSI IO Error Reply and SCSI Task Management Reply. + * Added ResponseInfo field to MPI2_SCSI_TASK_MANAGE_REPLY. + * Added MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG define. + * 02-10-10 02.00.09 Removed unused structure that had "#if 0" around it. + * 05-12-10 02.00.10 Added optional vendor-unique region to SCSI IO Request. + * 11-10-10 02.00.11 Added MPI2_SCSIIO_NUM_SGLOFFSETS define. * -------------------------------------------------------------------------- */ #ifndef MPI2_INIT_H #define MPI2_INIT_H
*** 96,128 **** U16 PrimaryApplicationTagMask; /* 0x1A */ U32 TransferLength; /* 0x1C */ } MPI2_SCSI_IO_CDB_EEDP32, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_EEDP32, Mpi2ScsiIoCdbEedp32_t, MPI2_POINTER pMpi2ScsiIoCdbEedp32_t; - /* TBD: I don't think this is needed for MPI2/Gen2 */ - #if 0 - typedef struct - { - U8 CDB[16]; /* 0x00 */ - U32 DataLength; /* 0x10 */ - U32 PrimaryReferenceTag; /* 0x14 */ - U16 PrimaryApplicationTag; /* 0x18 */ - U16 PrimaryApplicationTagMask; /* 0x1A */ - U32 TransferLength; /* 0x1C */ - } MPI2_SCSI_IO32_CDB_EEDP16, MPI2_POINTER PTR_MPI2_SCSI_IO32_CDB_EEDP16, - Mpi2ScsiIo32CdbEedp16_t, MPI2_POINTER pMpi2ScsiIo32CdbEedp16_t; - #endif - typedef union { U8 CDB32[32]; MPI2_SCSI_IO_CDB_EEDP32 EEDP32; MPI2_SGE_SIMPLE_UNION SGE; } MPI2_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_UNION, Mpi2ScsiIoCdb_t, MPI2_POINTER pMpi2ScsiIoCdb_t; ! /* SCSI IO Request Message */ typedef struct _MPI2_SCSI_IO_REQUEST { U16 DevHandle; /* 0x00 */ U8 ChainOffset; /* 0x02 */ U8 Function; /* 0x03 */ --- 107,125 ---- U16 PrimaryApplicationTagMask; /* 0x1A */ U32 TransferLength; /* 0x1C */ } MPI2_SCSI_IO_CDB_EEDP32, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_EEDP32, Mpi2ScsiIoCdbEedp32_t, MPI2_POINTER pMpi2ScsiIoCdbEedp32_t; typedef union { U8 CDB32[32]; MPI2_SCSI_IO_CDB_EEDP32 EEDP32; MPI2_SGE_SIMPLE_UNION SGE; } MPI2_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI2_SCSI_IO_CDB_UNION, Mpi2ScsiIoCdb_t, MPI2_POINTER pMpi2ScsiIoCdb_t; ! /* MPI v2.0 SCSI IO Request Message */ typedef struct _MPI2_SCSI_IO_REQUEST { U16 DevHandle; /* 0x00 */ U8 ChainOffset; /* 0x02 */ U8 Function; /* 0x03 */
*** 184,193 **** --- 181,193 ---- #define MPI2_SCSIIO_SGLFLAGS_SGL3_SHIFT (12) #define MPI2_SCSIIO_SGLFLAGS_SGL2_SHIFT (8) #define MPI2_SCSIIO_SGLFLAGS_SGL1_SHIFT (4) #define MPI2_SCSIIO_SGLFLAGS_SGL0_SHIFT (0) + /* number of SGLOffset fields */ + #define MPI2_SCSIIO_NUM_SGLOFFSETS (4) + /* SCSI IO IoFlags bits */ /* Large CDB Address Space */ #define MPI2_SCSIIO_CDB_ADDR_MASK (0x6000) #define MPI2_SCSIIO_CDB_ADDR_SYSTEM (0x0000)
*** 248,257 **** --- 248,371 ---- #define MPI2_SCSIIO_CONTROL_NO_TLR (0x00000000) #define MPI2_SCSIIO_CONTROL_TLR_ON (0x00000040) #define MPI2_SCSIIO_CONTROL_TLR_OFF (0x00000080) + /* MPI v2.5 CDB field */ + typedef union _MPI25_SCSI_IO_CDB_UNION + { + U8 CDB32[32]; + MPI2_SCSI_IO_CDB_EEDP32 EEDP32; + MPI2_IEEE_SGE_SIMPLE64 SGE; + } MPI25_SCSI_IO_CDB_UNION, MPI2_POINTER PTR_MPI25_SCSI_IO_CDB_UNION, + Mpi25ScsiIoCdb_t, MPI2_POINTER pMpi25ScsiIoCdb_t; + + /* MPI v2.5 SCSI IO Request Message */ + typedef struct _MPI25_SCSI_IO_REQUEST + { + U16 DevHandle; /* 0x00 */ + U8 ChainOffset; /* 0x02 */ + U8 Function; /* 0x03 */ + U16 Reserved1; /* 0x04 */ + U8 Reserved2; /* 0x06 */ + U8 MsgFlags; /* 0x07 */ + U8 VP_ID; /* 0x08 */ + U8 VF_ID; /* 0x09 */ + U16 Reserved3; /* 0x0A */ + U32 SenseBufferLowAddress; /* 0x0C */ + U8 DMAFlags; /* 0x10 */ + U8 Reserved5; /* 0x11 */ + U8 SenseBufferLength; /* 0x12 */ + U8 Reserved4; /* 0x13 */ + U8 SGLOffset0; /* 0x14 */ + U8 SGLOffset1; /* 0x15 */ + U8 SGLOffset2; /* 0x16 */ + U8 SGLOffset3; /* 0x17 */ + U32 SkipCount; /* 0x18 */ + U32 DataLength; /* 0x1C */ + U32 BidirectionalDataLength; /* 0x20 */ + U16 IoFlags; /* 0x24 */ + U16 EEDPFlags; /* 0x26 */ + U16 EEDPBlockSize; /* 0x28 */ + U16 Reserved6; /* 0x2A */ + U32 SecondaryReferenceTag; /* 0x2C */ + U16 SecondaryApplicationTag; /* 0x30 */ + U16 ApplicationTagTranslationMask; /* 0x32 */ + U8 LUN[8]; /* 0x34 */ + U32 Control; /* 0x3C */ + MPI25_SCSI_IO_CDB_UNION CDB; /* 0x40 */ + + #ifdef MPI25_SCSI_IO_VENDOR_UNIQUE_REGION /* typically this is left undefined */ + MPI25_SCSI_IO_VENDOR_UNIQUE VendorRegion; + #endif + + MPI25_SGE_IO_UNION SGL; /* 0x60 */ + + } MPI25_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI25_SCSI_IO_REQUEST, + Mpi25SCSIIORequest_t, MPI2_POINTER pMpi25SCSIIORequest_t; + + /* use MPI2_SCSIIO_MSGFLAGS_ defines for the MsgFlags field */ + + /* Defines for the DMAFlags field + * Each setting affects 4 SGLS, from SGL0 to SGL3. + * D = Data + * C = Cache DIF + * I = Interleaved + * H = Host DIF + */ + #define MPI25_SCSIIO_DMAFLAGS_OP_MASK (0x0F) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_D (0x00) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_C (0x01) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_I (0x02) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_C_C (0x03) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_C_I (0x04) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_D_I_I (0x05) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_C_C_C (0x06) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_C_C_I (0x07) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_C_I_I (0x08) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_I_I_I (0x09) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_D (0x0A) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_C (0x0B) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_I (0x0C) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_C_C (0x0D) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_C_I (0x0E) + #define MPI25_SCSIIO_DMAFLAGS_OP_D_H_I_I (0x0F) + + /* number of SGLOffset fields */ + #define MPI25_SCSIIO_NUM_SGLOFFSETS (4) + + /* defines for the IoFlags field */ + #define MPI25_SCSIIO_IOFLAGS_IO_PATH_MASK (0xC000) + #define MPI25_SCSIIO_IOFLAGS_NORMAL_PATH (0x0000) + #define MPI25_SCSIIO_IOFLAGS_FAST_PATH (0x4000) + + #define MPI25_SCSIIO_IOFLAGS_LARGE_CDB (0x1000) + #define MPI25_SCSIIO_IOFLAGS_BIDIRECTIONAL (0x0800) + #define MPI25_SCSIIO_IOFLAGS_CMD_DETERMINES_DATA_DIR (0x0200) + #define MPI25_SCSIIO_IOFLAGS_CDBLENGTH_MASK (0x01FF) + + /* MPI v2.5 defines for the EEDPFlags bits */ + /* use MPI2_SCSIIO_EEDPFLAGS_ defines for the other EEDPFlags bits */ + #define MPI25_SCSIIO_EEDPFLAGS_ESCAPE_MODE_MASK (0x00C0) + #define MPI25_SCSIIO_EEDPFLAGS_COMPATIBLE_MODE (0x0000) + #define MPI25_SCSIIO_EEDPFLAGS_DO_NOT_DISABLE_MODE (0x0040) + #define MPI25_SCSIIO_EEDPFLAGS_APPTAG_DISABLE_MODE (0x0080) + #define MPI25_SCSIIO_EEDPFLAGS_APPTAG_REFTAG_DISABLE_MODE (0x00C0) + + #define MPI25_SCSIIO_EEDPFLAGS_HOST_GUARD_METHOD_MASK (0x0030) + #define MPI25_SCSIIO_EEDPFLAGS_T10_CRC_HOST_GUARD (0x0000) + #define MPI25_SCSIIO_EEDPFLAGS_IP_CHKSUM_HOST_GUARD (0x0010) + + /* use MPI2_LUN_ defines from mpi2.h for the LUN field */ + + /* use MPI2_SCSIIO_CONTROL_ defines for the Control field */ + + + /* NOTE: The SCSI IO Reply is the same for MPI 2.0 and MPI 2.5, so + * MPI2_SCSI_IO_REPLY is used for both. + */ + /* SCSI IO Error Reply Message */ typedef struct _MPI2_SCSI_IO_REPLY { U16 DevHandle; /* 0x00 */ U8 MsgLength; /* 0x02 */
*** 297,306 **** --- 411,425 ---- #define MPI2_SCSI_STATE_TERMINATED (0x08) #define MPI2_SCSI_STATE_NO_SCSI_STATUS (0x04) #define MPI2_SCSI_STATE_AUTOSENSE_FAILED (0x02) #define MPI2_SCSI_STATE_AUTOSENSE_VALID (0x01) + /* masks and shifts for the ResponseInfo field */ + + #define MPI2_SCSI_RI_MASK_REASONCODE (0x000000FF) + #define MPI2_SCSI_RI_SHIFT_REASONCODE (0) + #define MPI2_SCSI_TASKTAG_UNKNOWN (0xFFFF) /**************************************************************************** * SCSI Task Management messages
*** 369,378 **** --- 488,498 ---- U16 Reserved2; /* 0x0A */ U16 Reserved3; /* 0x0C */ U16 IOCStatus; /* 0x0E */ U32 IOCLogInfo; /* 0x10 */ U32 TerminationCount; /* 0x14 */ + U32 ResponseInfo; /* 0x18 */ } MPI2_SCSI_TASK_MANAGE_REPLY, MPI2_POINTER PTR_MPI2_SCSI_TASK_MANAGE_REPLY, Mpi2SCSITaskManagementReply_t, MPI2_POINTER pMpi2SCSIManagementReply_t; /* ResponseCode values */
*** 381,392 **** --- 501,524 ---- #define MPI2_SCSITASKMGMT_RSP_INVALID_FRAME (0x02) #define MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED (0x04) #define MPI2_SCSITASKMGMT_RSP_TM_FAILED (0x05) #define MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED (0x08) #define MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN (0x09) + #define MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG (0x0A) #define MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC (0x80) + /* masks and shifts for the ResponseInfo field */ + + #define MPI2_SCSITASKMGMT_RI_MASK_REASONCODE (0x000000FF) + #define MPI2_SCSITASKMGMT_RI_SHIFT_REASONCODE (0) + #define MPI2_SCSITASKMGMT_RI_MASK_ARI2 (0x0000FF00) + #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI2 (8) + #define MPI2_SCSITASKMGMT_RI_MASK_ARI1 (0x00FF0000) + #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI1 (16) + #define MPI2_SCSITASKMGMT_RI_MASK_ARI0 (0xFF000000) + #define MPI2_SCSITASKMGMT_RI_SHIFT_ARI0 (24) + /**************************************************************************** * SCSI Enclosure Processor messages ****************************************************************************/