Print this page
        
*** 12,26 ****
   *              Manju R
   *              Rasheed
   *              Shakeel Bukhari
   */
  
! #ifndef INCLUDE_LD_PD_MAP
! #define INCLUDE_LD_PD_MAP
  #include <sys/scsi/scsi.h>
  #include "fusion.h"
  
  /* raid->write_mode; raid->read_ahead; dcmd->state */
  /* Write through */
  #define WRITE_THROUGH                           0
  /* Delayed Write */
  #define WRITE_BACK                              1
--- 12,28 ----
   *              Manju R
   *              Rasheed
   *              Shakeel Bukhari
   */
  
! #ifndef _LD_PD_MAP
! #define _LD_PD_MAP
  #include <sys/scsi/scsi.h>
  #include "fusion.h"
  
+ struct mrsas_instance;  /* This will be defined in mr_sas.h */
+ 
  /* raid->write_mode; raid->read_ahead; dcmd->state */
  /* Write through */
  #define WRITE_THROUGH                           0
  /* Delayed Write */
  #define WRITE_BACK                              1
*** 31,43 ****
  #define READ_10         0x28
  #define READ_12         0xA8
  #define WRITE_16        0x8A
  #define WRITE_10        0x2A
  
! // maximum disks per array
  #define MAX_ROW_SIZE                            32
! // maximum spans per logical drive
  #define MAX_SPAN_DEPTH                          8
  #define MEGASAS_LOAD_BALANCE_FLAG               0x1
  #define MR_DEFAULT_IO_TIMEOUT   20
  
  
--- 33,45 ----
  #define READ_10         0x28
  #define READ_12         0xA8
  #define WRITE_16        0x8A
  #define WRITE_10        0x2A
  
! /* maximum disks per array */
  #define MAX_ROW_SIZE                            32
! /* maximum spans per logical drive */
  #define MAX_SPAN_DEPTH                          8
  #define MEGASAS_LOAD_BALANCE_FLAG               0x1
  #define MR_DEFAULT_IO_TIMEOUT   20
  
  
*** 63,89 ****
          MR_FW_RAID_MAP raidMap;
          MR_LD_SPAN_MAP ldSpanMap[MAX_LOGICAL_DRIVES - 1];
  } MR_FW_RAID_MAP_ALL;
  
  /*
!  * Raid Context structure which describes MegaRAID specific IO Paramenters
   * This resides at offset 0x60 where the SGL normally starts in MPT IO Frames
   */
  typedef struct _MPI2_SCSI_IO_VENDOR_UNIQUE {
!         U8              nsegType;                       // 0x00 nseg[7:4], Type[3:0] */
!         U8              resvd0;                         // 0x01
      U16     timeoutValue;       /* 0x02 -0x03  */
      U8      regLockFlags;       /* 0x04        */
      U8      reservedForHw1;     /* 0x05        */
      U16     ldTargetId;         /* 0x06 - 0x07 */
      U64     regLockRowLBA;      /* 0x08 - 0x0F */
      U32     regLockLength;      /* 0x10 - 0x13 */
      U16     nextLMId;           /* 0x14 - 0x15 */
      U8      extStatus;          /* 0x16        */
      U8      status;             /* 0x17 status */
!     U8      RAIDFlags;          /* 0x18 resvd[7:6], ioSubType[5:4], resvd[3:1], preferredCpu[0] */
!     U8      numSGE;             /* 0x19 numSge; not including chain entries*/
      U16     configSeqNum;       /* 0x1A -0x1B */
      U8      spanArm;            /* 0x1C span[7:5], arm[4:0] */
      U8      resvd2[3];          /* 0x1D-0x1f */
  } MPI2_SCSI_IO_VENDOR_UNIQUE, MPI25_SCSI_IO_VENDOR_UNIQUE;
  
--- 65,92 ----
          MR_FW_RAID_MAP raidMap;
          MR_LD_SPAN_MAP ldSpanMap[MAX_LOGICAL_DRIVES - 1];
  } MR_FW_RAID_MAP_ALL;
  
  /*
!  * Raid Context structure which describes MegaRAID specific IO Parameters
   * This resides at offset 0x60 where the SGL normally starts in MPT IO Frames
   */
  typedef struct _MPI2_SCSI_IO_VENDOR_UNIQUE {
!         U8 nsegType;            /* 0x00 nseg[7:4], Type[3:0] */
!         U8 resvd0;              /* 0x01 */
          U16 timeoutValue;       /* 0x02 -0x03 */
          U8 regLockFlags;        /* 0x04 */
          U8 reservedForHw1;      /* 0x05 */
          U16 ldTargetId;         /* 0x06 - 0x07 */
          U64 regLockRowLBA;      /* 0x08 - 0x0F */
          U32 regLockLength;      /* 0x10 - 0x13 */
          U16 nextLMId;           /* 0x14 - 0x15 */
          U8 extStatus;           /* 0x16 */
          U8 status;              /* 0x17 status */
!         U8 RAIDFlags;           /* 0x18 resvd[7:6], ioSubType[5:4], */
!                                 /* resvd[3:1], preferredCpu[0] */
!         U8 numSGE;              /* 0x19 numSge; not including chain entries */
          U16 configSeqNum;       /* 0x1A -0x1B */
          U8 spanArm;             /* 0x1C span[7:5], arm[4:0] */
          U8 resvd2[3];           /* 0x1D-0x1f */
  } MPI2_SCSI_IO_VENDOR_UNIQUE, MPI25_SCSI_IO_VENDOR_UNIQUE;
  
*** 137,161 ****
  
  /*
   * define region lock types
   */
  typedef enum    _REGION_TYPE {
!         REGION_TYPE_UNUSED      = 0,    // lock is currently not active
!         REGION_TYPE_SHARED_READ = 1,    // shared lock (for reads)
          REGION_TYPE_SHARED_WRITE = 2,
!         REGION_TYPE_EXCLUSIVE   = 3,    // exclusive lock (for writes)
  } REGION_TYPE;
  
  
  #define DM_PATH_MAXPATH         2
  #define DM_PATH_FIRSTPATH       0
  #define DM_PATH_SECONDPATH      1
  
! // declare valid Region locking values
  typedef enum _REGION_LOCK {
          REGION_LOCK_BYPASS              = 0,
!         // for RAID 6 single-drive failure
          REGION_LOCK_UNCOND_SHARED_READ  = 1,
          REGION_LOCK_UNCOND_SHARED_WRITE = 2,
          REGION_LOCK_UNCOND_SHARED_OTHER = 3,
          REGION_LOCK_UNCOND_SHARED_EXCLUSIVE = 0xFF
  } REGION_LOCK;
--- 140,164 ----
  
  /*
   * define region lock types
   */
  typedef enum    _REGION_TYPE {
!         REGION_TYPE_UNUSED      = 0,    /* lock is currently not active */
!         REGION_TYPE_SHARED_READ = 1,    /* shared lock (for reads) */
          REGION_TYPE_SHARED_WRITE = 2,
!         REGION_TYPE_EXCLUSIVE   = 3     /* exclusive lock (for writes) */
  } REGION_TYPE;
  
  
  #define DM_PATH_MAXPATH         2
  #define DM_PATH_FIRSTPATH       0
  #define DM_PATH_SECONDPATH      1
  
! /* declare valid Region locking values */
  typedef enum _REGION_LOCK {
          REGION_LOCK_BYPASS              = 0,
!         /* for RAID 6 single-drive failure */
          REGION_LOCK_UNCOND_SHARED_READ  = 1,
          REGION_LOCK_UNCOND_SHARED_WRITE = 2,
          REGION_LOCK_UNCOND_SHARED_OTHER = 3,
          REGION_LOCK_UNCOND_SHARED_EXCLUSIVE = 0xFF
  } REGION_LOCK;
*** 223,233 ****
          MRSAS_SCSI_VARIABLE_LENGTH_CMD          = 0x7F,
          MRSAS_SCSI_SERVICE_ACTION_READ32        = 0x9,
          MRSAS_SCSI_SERVICE_ACTION_WRITE32       = 0xB,
          MRSAS_SCSI_ADDL_CDB_LEN                 = 0x18,
          MRSAS_RD_WR_PROTECT                     = 0x20,
!         MRSAS_EEDPBLOCKSIZE                     = 512,
  };
  
  
  #define IEEE_SGE_FLAGS_ADDR_MASK        (0x03)
  #define IEEE_SGE_FLAGS_SYSTEM_ADDR      (0x00)
--- 226,236 ----
          MRSAS_SCSI_VARIABLE_LENGTH_CMD          = 0x7F,
          MRSAS_SCSI_SERVICE_ACTION_READ32        = 0x9,
          MRSAS_SCSI_SERVICE_ACTION_WRITE32       = 0xB,
          MRSAS_SCSI_ADDL_CDB_LEN                 = 0x18,
          MRSAS_RD_WR_PROTECT                     = 0x20,
!         MRSAS_EEDPBLOCKSIZE                     = 512
  };
  
  
  #define IEEE_SGE_FLAGS_ADDR_MASK        (0x03)
  #define IEEE_SGE_FLAGS_SYSTEM_ADDR      (0x00)
*** 238,243 ****
  #define IEEE_SGE_FLAGS_END_OF_LIST      (0x40)
  
  
  U8      MR_ValidateMapInfo(MR_FW_RAID_MAP_ALL *map, PLD_LOAD_BALANCE_INFO lbInfo);
  U16     MR_CheckDIF(U32, MR_FW_RAID_MAP_ALL *);
! #endif // INCLUDE_LD_PD_MAP
--- 241,249 ----
  #define IEEE_SGE_FLAGS_END_OF_LIST      (0x40)
  
  
  U8 MR_ValidateMapInfo(MR_FW_RAID_MAP_ALL *map, PLD_LOAD_BALANCE_INFO lbInfo);
  U16 MR_CheckDIF(U32, MR_FW_RAID_MAP_ALL *);
! U8 MR_BuildRaidContext(struct mrsas_instance *, struct IO_REQUEST_INFO *,
!     MPI2_SCSI_IO_VENDOR_UNIQUE *, MR_FW_RAID_MAP_ALL *);
! 
! #endif /* _LD_PD_MAP */