Print this page


Split Close
Expand all
Collapse all
          --- old/./ld_pd_map.h
          +++ new/./ld_pd_map.h
↓ open down ↓ 6 lines elided ↑ open up ↑
   7    7   *
   8    8   * Version:
   9    9   * Author:
  10   10   *              Swaminathan K S
  11   11   *              Arun Chandrashekhar
  12   12   *              Manju R
  13   13   *              Rasheed
  14   14   *              Shakeel Bukhari
  15   15   */
  16   16  
  17      -#ifndef INCLUDE_LD_PD_MAP
  18      -#define INCLUDE_LD_PD_MAP
       17 +#ifndef _LD_PD_MAP
       18 +#define _LD_PD_MAP
  19   19  #include <sys/scsi/scsi.h>
  20   20  #include "fusion.h"
  21   21  
       22 +struct mrsas_instance;  /* This will be defined in mr_sas.h */
       23 +
  22   24  /* raid->write_mode; raid->read_ahead; dcmd->state */
  23   25  /* Write through */
  24   26  #define WRITE_THROUGH                           0
  25   27  /* Delayed Write */
  26   28  #define WRITE_BACK                              1
  27   29  
  28   30  /* SCSI CDB definitions */
  29      -#define READ_6          0x08
  30      -#define READ_16         0x88
  31      -#define READ_10         0x28
  32      -#define READ_12         0xA8
  33      -#define WRITE_16        0x8A
  34      -#define WRITE_10        0x2A
       31 +#define READ_6          0x08
       32 +#define READ_16         0x88
       33 +#define READ_10         0x28
       34 +#define READ_12         0xA8
       35 +#define WRITE_16        0x8A
       36 +#define WRITE_10        0x2A
  35   37  
  36      -// maximum disks per array
       38 +/* maximum disks per array */
  37   39  #define MAX_ROW_SIZE                            32
  38      -// maximum spans per logical drive
       40 +/* maximum spans per logical drive */
  39   41  #define MAX_SPAN_DEPTH                          8
  40      -#define MEGASAS_LOAD_BALANCE_FLAG               0x1
  41      -#define MR_DEFAULT_IO_TIMEOUT   20
       42 +#define MEGASAS_LOAD_BALANCE_FLAG               0x1
       43 +#define MR_DEFAULT_IO_TIMEOUT   20
  42   44  
  43   45  
  44   46  union desc_value {
  45   47          U64 word;
  46   48          struct {
  47   49                  U32 low;
  48   50                  U32 high;
  49   51          } u1;
  50   52  };
  51   53  
  52   54  typedef struct _LD_LOAD_BALANCE_INFO
  53   55  {
  54      -    U8      loadBalanceFlag;
  55      -    U8      reserved1;
  56      -    U16     raid1DevHandle[2];
  57      -    U16     scsi_pending_cmds[2];
  58      -    U64     last_accessed_block[2];
       56 +    U8      loadBalanceFlag;
       57 +    U8      reserved1;
       58 +    U16     raid1DevHandle[2];
       59 +    U16     scsi_pending_cmds[2];
       60 +    U64     last_accessed_block[2];
  59   61  } LD_LOAD_BALANCE_INFO, *PLD_LOAD_BALANCE_INFO;
  60   62  
  61   63  #pragma pack(1)
  62   64  typedef struct _MR_FW_RAID_MAP_ALL {
  63   65          MR_FW_RAID_MAP raidMap;
  64   66          MR_LD_SPAN_MAP ldSpanMap[MAX_LOGICAL_DRIVES - 1];
  65   67  } MR_FW_RAID_MAP_ALL;
  66   68  
  67   69  /*
  68      - * Raid Context structure which describes MegaRAID specific IO Paramenters
       70 + * Raid Context structure which describes MegaRAID specific IO Parameters
  69   71   * This resides at offset 0x60 where the SGL normally starts in MPT IO Frames
  70   72   */
  71   73  typedef struct _MPI2_SCSI_IO_VENDOR_UNIQUE {
  72      -        U8              nsegType;                       // 0x00 nseg[7:4], Type[3:0] */
  73      -        U8              resvd0;                         // 0x01
  74      -    U16     timeoutValue;       /* 0x02 -0x03  */
  75      -    U8      regLockFlags;       /* 0x04        */
  76      -    U8      reservedForHw1;     /* 0x05        */
  77      -    U16     ldTargetId;         /* 0x06 - 0x07 */
  78      -    U64     regLockRowLBA;      /* 0x08 - 0x0F */
  79      -    U32     regLockLength;      /* 0x10 - 0x13 */
  80      -    U16     nextLMId;           /* 0x14 - 0x15 */
  81      -    U8      extStatus;          /* 0x16        */
  82      -    U8      status;             /* 0x17 status */
  83      -    U8      RAIDFlags;          /* 0x18 resvd[7:6], ioSubType[5:4], resvd[3:1], preferredCpu[0] */
  84      -    U8      numSGE;             /* 0x19 numSge; not including chain entries*/
  85      -    U16     configSeqNum;       /* 0x1A -0x1B */
  86      -    U8      spanArm;            /* 0x1C span[7:5], arm[4:0] */
  87      -    U8      resvd2[3];          /* 0x1D-0x1f */
       74 +        U8 nsegType;            /* 0x00 nseg[7:4], Type[3:0] */
       75 +        U8 resvd0;              /* 0x01 */
       76 +        U16 timeoutValue;       /* 0x02 -0x03 */
       77 +        U8 regLockFlags;        /* 0x04 */
       78 +        U8 reservedForHw1;      /* 0x05 */
       79 +        U16 ldTargetId;         /* 0x06 - 0x07 */
       80 +        U64 regLockRowLBA;      /* 0x08 - 0x0F */
       81 +        U32 regLockLength;      /* 0x10 - 0x13 */
       82 +        U16 nextLMId;           /* 0x14 - 0x15 */
       83 +        U8 extStatus;           /* 0x16 */
       84 +        U8 status;              /* 0x17 status */
       85 +        U8 RAIDFlags;           /* 0x18 resvd[7:6], ioSubType[5:4], */
       86 +                                /* resvd[3:1], preferredCpu[0] */
       87 +        U8 numSGE;              /* 0x19 numSge; not including chain entries */
       88 +        U16 configSeqNum;       /* 0x1A -0x1B */
       89 +        U8 spanArm;             /* 0x1C span[7:5], arm[4:0] */
       90 +        U8 resvd2[3];           /* 0x1D-0x1f */
  88   91  } MPI2_SCSI_IO_VENDOR_UNIQUE, MPI25_SCSI_IO_VENDOR_UNIQUE;
  89   92  
  90      -#define RAID_CTX_SPANARM_ARM_SHIFT      (0)
  91      -#define RAID_CTX_SPANARM_ARM_MASK       (0x1f)
       93 +#define RAID_CTX_SPANARM_ARM_SHIFT      (0)
       94 +#define RAID_CTX_SPANARM_ARM_MASK       (0x1f)
  92   95  
  93      -#define RAID_CTX_SPANARM_SPAN_SHIFT     (5)
  94      -#define RAID_CTX_SPANARM_SPAN_MASK      (0xE0)
       96 +#define RAID_CTX_SPANARM_SPAN_SHIFT     (5)
       97 +#define RAID_CTX_SPANARM_SPAN_MASK      (0xE0)
  95   98  
  96   99  
  97  100  /*
  98  101   * RAID SCSI IO Request Message
  99  102   * Total SGE count will be one less
 100      - * than  _MPI2_SCSI_IO_REQUEST
      103 + * than  _MPI2_SCSI_IO_REQUEST
 101  104   */
 102  105  typedef struct _MPI2_RAID_SCSI_IO_REQUEST
 103  106  {
 104  107          uint16_t                DevHandle;                      /* 0x00 */
 105  108          uint8_t                 ChainOffset;                    /* 0x02 */
 106  109          uint8_t                 Function;                       /* 0x03 */
 107  110          uint16_t                Reserved1;                      /* 0x04 */
 108  111          uint8_t                 Reserved2;                      /* 0x06 */
 109  112          uint8_t                 MsgFlags;                       /* 0x07 */
 110  113          uint8_t                 VP_ID;                          /* 0x08 */
↓ open down ↓ 12 lines elided ↑ open up ↑
 123  126          uint32_t                BidirectionalDataLength;        /* 0x20 */
 124  127          uint16_t                IoFlags;                        /* 0x24 */
 125  128          uint16_t                EEDPFlags;                      /* 0x26 */
 126  129          uint32_t                EEDPBlockSize;                  /* 0x28 */
 127  130          uint32_t                SecondaryReferenceTag;          /* 0x2C */
 128  131          uint16_t                SecondaryApplicationTag;        /* 0x30 */
 129  132          uint16_t                ApplicationTagTranslationMask;  /* 0x32 */
 130  133          uint8_t                 LUN[8];                         /* 0x34 */
 131  134          uint32_t                Control;                        /* 0x3C */
 132  135          Mpi2ScsiIoCdb_t         CDB;                            /* 0x40 */
 133      -        MPI2_SCSI_IO_VENDOR_UNIQUE              RaidContext;                    /* 0x60 */
      136 +        MPI2_SCSI_IO_VENDOR_UNIQUE RaidContext;                 /* 0x60 */
 134  137          Mpi2SGEIOUnion_t        SGL; /* 0x80 */
 135  138  } MPI2_RAID_SCSI_IO_REQUEST, MPI2_POINTER PTR_MPI2_RAID_SCSI_IO_REQUEST,
 136  139  Mpi2RaidSCSIIORequest_t, MPI2_POINTER pMpi2RaidSCSIIORequest_t;
 137  140  
 138  141  /*
 139  142   * define region lock types
 140  143   */
 141  144  typedef enum    _REGION_TYPE {
 142      -        REGION_TYPE_UNUSED      = 0,    // lock is currently not active
 143      -        REGION_TYPE_SHARED_READ = 1,    // shared lock (for reads)
      145 +        REGION_TYPE_UNUSED      = 0,    /* lock is currently not active */
      146 +        REGION_TYPE_SHARED_READ = 1,    /* shared lock (for reads) */
 144  147          REGION_TYPE_SHARED_WRITE = 2,
 145      -        REGION_TYPE_EXCLUSIVE   = 3,    // exclusive lock (for writes)
      148 +        REGION_TYPE_EXCLUSIVE   = 3     /* exclusive lock (for writes) */
 146  149  } REGION_TYPE;
 147  150  
 148  151  
 149  152  #define DM_PATH_MAXPATH         2
 150  153  #define DM_PATH_FIRSTPATH       0
 151  154  #define DM_PATH_SECONDPATH      1
 152  155  
 153      -// declare valid Region locking values
      156 +/* declare valid Region locking values */
 154  157  typedef enum _REGION_LOCK {
 155  158          REGION_LOCK_BYPASS              = 0,
 156      -        // for RAID 6 single-drive failure
      159 +        /* for RAID 6 single-drive failure */
 157  160          REGION_LOCK_UNCOND_SHARED_READ  = 1,
 158  161          REGION_LOCK_UNCOND_SHARED_WRITE = 2,
 159  162          REGION_LOCK_UNCOND_SHARED_OTHER = 3,
 160  163          REGION_LOCK_UNCOND_SHARED_EXCLUSIVE = 0xFF
 161  164  } REGION_LOCK;
 162  165  
 163  166  
 164  167  struct mrsas_init_frame2 {
 165  168          uint8_t cmd;                            /* 00h */
 166  169          uint8_t reserved_0;                     /* 01h */
↓ open down ↓ 6 lines elided ↑ open up ↑
 173  176          uint32_t pad_0;                         /* 0Ch */
 174  177  
 175  178          uint16_t flags;                         /* 10h */
 176  179          uint16_t reserved_3;                    /* 12h */
 177  180          uint32_t data_xfer_len;                 /* 14h */
 178  181  
 179  182          uint32_t queue_info_new_phys_addr_lo;   /* 18h */
 180  183          uint32_t queue_info_new_phys_addr_hi;   /* 1Ch */
 181  184          uint32_t queue_info_old_phys_addr_lo;   /* 20h */
 182  185          uint32_t queue_info_old_phys_addr_hi;   /* 24h */
 183      -        uint64_t        driverversion;          /* 28h */
      186 +        uint64_t        driverversion;          /* 28h */
 184  187          uint32_t reserved_4[4];                 /* 30h */
 185  188  };
 186  189  
 187  190  
 188  191  /*
 189  192   * Request descriptor types
 190  193   */
 191  194  #define MPI2_REQ_DESCRIPT_FLAGS_LD_IO           0x7
 192      -#define MPI2_REQ_DESCRIPT_FLAGS_MFA                     0x1
 193      -#define MPI2_REQ_DESCRIPT_FLAGS_NO_LOCK         0x2
      195 +#define MPI2_REQ_DESCRIPT_FLAGS_MFA             0x1
      196 +#define MPI2_REQ_DESCRIPT_FLAGS_NO_LOCK         0x2
 194  197  
 195  198  #define MPI2_REQ_DESCRIPT_FLAGS_TYPE_SHIFT      1
 196  199  
 197  200  
 198  201  /*
 199  202   * MPT RAID MFA IO Descriptor.
 200  203   */
 201  204  typedef struct _MR_RAID_MFA_IO_DESCRIPTOR {
 202  205          uint32_t        RequestFlags : 8;
 203  206          uint32_t        MessageAddress1 : 24;   /* bits 31:8 */
↓ open down ↓ 14 lines elided ↑ open up ↑
 218  221  } MRSAS_REQUEST_DESCRIPTOR_UNION;
 219  222  
 220  223  #pragma pack()
 221  224  
 222  225  enum {
 223  226          MRSAS_SCSI_VARIABLE_LENGTH_CMD          = 0x7F,
 224  227          MRSAS_SCSI_SERVICE_ACTION_READ32        = 0x9,
 225  228          MRSAS_SCSI_SERVICE_ACTION_WRITE32       = 0xB,
 226  229          MRSAS_SCSI_ADDL_CDB_LEN                 = 0x18,
 227  230          MRSAS_RD_WR_PROTECT                     = 0x20,
 228      -        MRSAS_EEDPBLOCKSIZE                     = 512,
      231 +        MRSAS_EEDPBLOCKSIZE                     = 512
 229  232  };
 230  233  
 231  234  
 232  235  #define IEEE_SGE_FLAGS_ADDR_MASK        (0x03)
 233  236  #define IEEE_SGE_FLAGS_SYSTEM_ADDR      (0x00)
 234  237  #define IEEE_SGE_FLAGS_IOCDDR_ADDR      (0x01)
 235  238  #define IEEE_SGE_FLAGS_IOCPLB_ADDR      (0x02)
 236  239  #define IEEE_SGE_FLAGS_IOCPLBNTA_ADDR   (0x03)
 237  240  #define IEEE_SGE_FLAGS_CHAIN_ELEMENT    (0x80)
 238  241  #define IEEE_SGE_FLAGS_END_OF_LIST      (0x40)
 239  242  
 240  243  
 241      -U8      MR_ValidateMapInfo(MR_FW_RAID_MAP_ALL *map, PLD_LOAD_BALANCE_INFO lbInfo);
 242      -U16     MR_CheckDIF(U32, MR_FW_RAID_MAP_ALL *);
 243      -#endif // INCLUDE_LD_PD_MAP
      244 +U8 MR_ValidateMapInfo(MR_FW_RAID_MAP_ALL *map, PLD_LOAD_BALANCE_INFO lbInfo);
      245 +U16 MR_CheckDIF(U32, MR_FW_RAID_MAP_ALL *);
      246 +U8 MR_BuildRaidContext(struct mrsas_instance *, struct IO_REQUEST_INFO *,
      247 +    MPI2_SCSI_IO_VENDOR_UNIQUE *, MR_FW_RAID_MAP_ALL *);
      248 +
      249 +#endif /* _LD_PD_MAP */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX