These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / scsi / megaraid / megaraid_sas_fusion.h
index 56e6db2..473005c 100644 (file)
 #define _MEGARAID_SAS_FUSION_H_
 
 /* Fusion defines */
-#define MEGASAS_MAX_SZ_CHAIN_FRAME 1024
+#define MEGASAS_CHAIN_FRAME_SZ_MIN 1024
 #define MFI_FUSION_ENABLE_INTERRUPT_MASK (0x00000009)
+#define MEGASAS_MAX_CHAIN_SHIFT                        5
+#define MEGASAS_MAX_CHAIN_SIZE_UNITS_MASK      0x400000
+#define MEGASAS_MAX_CHAIN_SIZE_MASK            0x3E0
+#define MEGASAS_256K_IO                                128
+#define MEGASAS_1MB_IO                         (MEGASAS_256K_IO * 4)
 #define MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE 256
 #define MEGASAS_MPI2_FUNCTION_PASSTHRU_IO_REQUEST   0xF0
 #define MEGASAS_MPI2_FUNCTION_LD_IO_REQUEST         0xF1
@@ -89,6 +94,12 @@ enum MR_RAID_FLAGS_IO_SUB_TYPE {
 #define MEGASAS_FP_CMD_LEN     16
 #define MEGASAS_FUSION_IN_RESET 0
 #define THRESHOLD_REPLY_COUNT 50
+#define JBOD_MAPS_COUNT        2
+
+enum MR_FUSION_ADAPTER_TYPE {
+       THUNDERBOLT_SERIES = 0,
+       INVADER_SERIES = 1,
+};
 
 /*
  * Raid Context structure which describes MegaRAID specific IO Parameters
@@ -104,20 +115,22 @@ struct RAID_CONTEXT {
        u8      nseg:4;
 #endif
        u8      resvd0;
-       u16     timeoutValue;
+       __le16  timeoutValue;
        u8      regLockFlags;
        u8      resvd1;
-       u16     VirtualDiskTgtId;
-       u64     regLockRowLBA;
-       u32     regLockLength;
-       u16     nextLMId;
+       __le16  VirtualDiskTgtId;
+       __le64  regLockRowLBA;
+       __le32  regLockLength;
+       __le16  nextLMId;
        u8      exStatus;
        u8      status;
        u8      RAIDFlags;
        u8      numSGE;
-       u16     configSeqNum;
+       __le16  configSeqNum;
        u8      spanArm;
-       u8      resvd2[3];
+       u8      priority;
+       u8      numSGEExt;
+       u8      resvd2;
 };
 
 #define RAID_CTX_SPANARM_ARM_SHIFT     (0)
@@ -182,61 +195,61 @@ enum REGION_TYPE {
 #define MPI2_WRSEQ_6TH_KEY_VALUE                (0xD)
 
 struct MPI25_IEEE_SGE_CHAIN64 {
-       u64                     Address;
-       u32                     Length;
-       u16                     Reserved1;
+       __le64                  Address;
+       __le32                  Length;
+       __le16                  Reserved1;
        u8                      NextChainOffset;
        u8                      Flags;
 };
 
 struct MPI2_SGE_SIMPLE_UNION {
-       u32                     FlagsLength;
+       __le32                     FlagsLength;
        union {
-               u32                 Address32;
-               u64                 Address64;
+               __le32                 Address32;
+               __le64                 Address64;
        } u;
 };
 
 struct MPI2_SCSI_IO_CDB_EEDP32 {
        u8                      CDB[20];                    /* 0x00 */
-       u32                     PrimaryReferenceTag;        /* 0x14 */
-       u16                     PrimaryApplicationTag;      /* 0x18 */
-       u16                     PrimaryApplicationTagMask;  /* 0x1A */
-       u32                     TransferLength;             /* 0x1C */
+       __be32                  PrimaryReferenceTag;        /* 0x14 */
+       __be16                  PrimaryApplicationTag;      /* 0x18 */
+       __be16                  PrimaryApplicationTagMask;  /* 0x1A */
+       __le32                  TransferLength;             /* 0x1C */
 };
 
 struct MPI2_SGE_CHAIN_UNION {
-       u16                     Length;
+       __le16                  Length;
        u8                      NextChainOffset;
        u8                      Flags;
        union {
-               u32                 Address32;
-               u64                 Address64;
+               __le32          Address32;
+               __le64          Address64;
        } u;
 };
 
 struct MPI2_IEEE_SGE_SIMPLE32 {
-       u32                     Address;
-       u32                     FlagsLength;
+       __le32                  Address;
+       __le32                  FlagsLength;
 };
 
 struct MPI2_IEEE_SGE_CHAIN32 {
-       u32                     Address;
-       u32                     FlagsLength;
+       __le32                  Address;
+       __le32                  FlagsLength;
 };
 
 struct MPI2_IEEE_SGE_SIMPLE64 {
-       u64                     Address;
-       u32                     Length;
-       u16                     Reserved1;
+       __le64                  Address;
+       __le32                  Length;
+       __le16                  Reserved1;
        u8                      Reserved2;
        u8                      Flags;
 };
 
 struct MPI2_IEEE_SGE_CHAIN64 {
-       u64                     Address;
-       u32                     Length;
-       u16                     Reserved1;
+       __le64                  Address;
+       __le32                  Length;
+       __le16                  Reserved1;
        u8                      Reserved2;
        u8                      Flags;
 };
@@ -269,34 +282,34 @@ union MPI2_SCSI_IO_CDB_UNION {
  * Total SGE count will be one less than  _MPI2_SCSI_IO_REQUEST
  */
 struct MPI2_RAID_SCSI_IO_REQUEST {
-       u16                     DevHandle;                      /* 0x00 */
+       __le16                  DevHandle;                      /* 0x00 */
        u8                      ChainOffset;                    /* 0x02 */
        u8                      Function;                       /* 0x03 */
-       u16                     Reserved1;                      /* 0x04 */
+       __le16                  Reserved1;                      /* 0x04 */
        u8                      Reserved2;                      /* 0x06 */
        u8                      MsgFlags;                       /* 0x07 */
        u8                      VP_ID;                          /* 0x08 */
        u8                      VF_ID;                          /* 0x09 */
-       u16                     Reserved3;                      /* 0x0A */
-       u32                     SenseBufferLowAddress;          /* 0x0C */
-       u16                     SGLFlags;                       /* 0x10 */
+       __le16                  Reserved3;                      /* 0x0A */
+       __le32                  SenseBufferLowAddress;          /* 0x0C */
+       __le16                  SGLFlags;                       /* 0x10 */
        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 */
-       u32                     EEDPBlockSize;                  /* 0x28 */
-       u32                     SecondaryReferenceTag;          /* 0x2C */
-       u16                     SecondaryApplicationTag;        /* 0x30 */
-       u16                     ApplicationTagTranslationMask;  /* 0x32 */
+       __le32                  SkipCount;                      /* 0x18 */
+       __le32                  DataLength;                     /* 0x1C */
+       __le32                  BidirectionalDataLength;        /* 0x20 */
+       __le16                  IoFlags;                        /* 0x24 */
+       __le16                  EEDPFlags;                      /* 0x26 */
+       __le32                  EEDPBlockSize;                  /* 0x28 */
+       __le32                  SecondaryReferenceTag;          /* 0x2C */
+       __le16                  SecondaryApplicationTag;        /* 0x30 */
+       __le16                  ApplicationTagTranslationMask;  /* 0x32 */
        u8                      LUN[8];                         /* 0x34 */
-       u32                     Control;                        /* 0x3C */
+       __le32                  Control;                        /* 0x3C */
        union MPI2_SCSI_IO_CDB_UNION  CDB;                      /* 0x40 */
        struct RAID_CONTEXT     RaidContext;                    /* 0x60 */
        union MPI2_SGE_IO_UNION       SGL;                      /* 0x80 */
@@ -315,45 +328,45 @@ struct MEGASAS_RAID_MFA_IO_REQUEST_DESCRIPTOR {
 struct MPI2_DEFAULT_REQUEST_DESCRIPTOR {
        u8              RequestFlags;               /* 0x00 */
        u8              MSIxIndex;                  /* 0x01 */
-       u16             SMID;                       /* 0x02 */
-       u16             LMID;                       /* 0x04 */
-       u16             DescriptorTypeDependent;    /* 0x06 */
+       __le16          SMID;                       /* 0x02 */
+       __le16          LMID;                       /* 0x04 */
+       __le16          DescriptorTypeDependent;    /* 0x06 */
 };
 
 /* High Priority Request Descriptor */
 struct MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR {
        u8              RequestFlags;               /* 0x00 */
        u8              MSIxIndex;                  /* 0x01 */
-       u16             SMID;                       /* 0x02 */
-       u16             LMID;                       /* 0x04 */
-       u16             Reserved1;                  /* 0x06 */
+       __le16          SMID;                       /* 0x02 */
+       __le16          LMID;                       /* 0x04 */
+       __le16          Reserved1;                  /* 0x06 */
 };
 
 /* SCSI IO Request Descriptor */
 struct MPI2_SCSI_IO_REQUEST_DESCRIPTOR {
        u8              RequestFlags;               /* 0x00 */
        u8              MSIxIndex;                  /* 0x01 */
-       u16             SMID;                       /* 0x02 */
-       u16             LMID;                       /* 0x04 */
-       u16             DevHandle;                  /* 0x06 */
+       __le16          SMID;                       /* 0x02 */
+       __le16          LMID;                       /* 0x04 */
+       __le16          DevHandle;                  /* 0x06 */
 };
 
 /* SCSI Target Request Descriptor */
 struct MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR {
        u8              RequestFlags;               /* 0x00 */
        u8              MSIxIndex;                  /* 0x01 */
-       u16             SMID;                       /* 0x02 */
-       u16             LMID;                       /* 0x04 */
-       u16             IoIndex;                    /* 0x06 */
+       __le16          SMID;                       /* 0x02 */
+       __le16          LMID;                       /* 0x04 */
+       __le16          IoIndex;                    /* 0x06 */
 };
 
 /* RAID Accelerator Request Descriptor */
 struct MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR {
        u8              RequestFlags;               /* 0x00 */
        u8              MSIxIndex;                  /* 0x01 */
-       u16             SMID;                       /* 0x02 */
-       u16             LMID;                       /* 0x04 */
-       u16             Reserved;                   /* 0x06 */
+       __le16          SMID;                       /* 0x02 */
+       __le16          LMID;                       /* 0x04 */
+       __le16          Reserved;                   /* 0x06 */
 };
 
 /* union of Request Descriptors */
@@ -366,10 +379,10 @@ union MEGASAS_REQUEST_DESCRIPTOR_UNION {
        struct MEGASAS_RAID_MFA_IO_REQUEST_DESCRIPTOR      MFAIo;
        union {
                struct {
-                       u32 low;
-                       u32 high;
+                       __le32 low;
+                       __le32 high;
                } u;
-               u64 Words;
+               __le64 Words;
        };
 };
 
@@ -377,35 +390,35 @@ union MEGASAS_REQUEST_DESCRIPTOR_UNION {
 struct MPI2_DEFAULT_REPLY_DESCRIPTOR {
        u8              ReplyFlags;                 /* 0x00 */
        u8              MSIxIndex;                  /* 0x01 */
-       u16             DescriptorTypeDependent1;   /* 0x02 */
-       u32             DescriptorTypeDependent2;   /* 0x04 */
+       __le16          DescriptorTypeDependent1;   /* 0x02 */
+       __le32          DescriptorTypeDependent2;   /* 0x04 */
 };
 
 /* Address Reply Descriptor */
 struct MPI2_ADDRESS_REPLY_DESCRIPTOR {
        u8              ReplyFlags;                 /* 0x00 */
        u8              MSIxIndex;                  /* 0x01 */
-       u16             SMID;                       /* 0x02 */
-       u32             ReplyFrameAddress;          /* 0x04 */
+       __le16          SMID;                       /* 0x02 */
+       __le32          ReplyFrameAddress;          /* 0x04 */
 };
 
 /* SCSI IO Success Reply Descriptor */
 struct MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR {
        u8              ReplyFlags;                 /* 0x00 */
        u8              MSIxIndex;                  /* 0x01 */
-       u16             SMID;                       /* 0x02 */
-       u16             TaskTag;                    /* 0x04 */
-       u16             Reserved1;                  /* 0x06 */
+       __le16          SMID;                       /* 0x02 */
+       __le16          TaskTag;                    /* 0x04 */
+       __le16          Reserved1;                  /* 0x06 */
 };
 
 /* TargetAssist Success Reply Descriptor */
 struct MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR {
        u8              ReplyFlags;                 /* 0x00 */
        u8              MSIxIndex;                  /* 0x01 */
-       u16             SMID;                       /* 0x02 */
+       __le16          SMID;                       /* 0x02 */
        u8              SequenceNumber;             /* 0x04 */
        u8              Reserved1;                  /* 0x05 */
-       u16             IoIndex;                    /* 0x06 */
+       __le16          IoIndex;                    /* 0x06 */
 };
 
 /* Target Command Buffer Reply Descriptor */
@@ -414,16 +427,16 @@ struct MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR {
        u8              MSIxIndex;                  /* 0x01 */
        u8              VP_ID;                      /* 0x02 */
        u8              Flags;                      /* 0x03 */
-       u16             InitiatorDevHandle;         /* 0x04 */
-       u16             IoIndex;                    /* 0x06 */
+       __le16          InitiatorDevHandle;         /* 0x04 */
+       __le16          IoIndex;                    /* 0x06 */
 };
 
 /* RAID Accelerator Success Reply Descriptor */
 struct MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR {
        u8              ReplyFlags;                 /* 0x00 */
        u8              MSIxIndex;                  /* 0x01 */
-       u16             SMID;                       /* 0x02 */
-       u32             Reserved;                   /* 0x04 */
+       __le16          SMID;                       /* 0x02 */
+       __le32          Reserved;                   /* 0x04 */
 };
 
 /* union of Reply Descriptors */
@@ -435,7 +448,7 @@ union MPI2_REPLY_DESCRIPTORS_UNION {
        struct MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR TargetCommandBuffer;
        struct MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR
        RAIDAcceleratorSuccess;
-       u64                                             Words;
+       __le64                                             Words;
 };
 
 /* IOCInit Request message */
@@ -444,28 +457,28 @@ struct MPI2_IOC_INIT_REQUEST {
        u8                      Reserved1;                      /* 0x01 */
        u8                      ChainOffset;                    /* 0x02 */
        u8                      Function;                       /* 0x03 */
-       u16                     Reserved2;                      /* 0x04 */
+       __le16                  Reserved2;                      /* 0x04 */
        u8                      Reserved3;                      /* 0x06 */
        u8                      MsgFlags;                       /* 0x07 */
        u8                      VP_ID;                          /* 0x08 */
        u8                      VF_ID;                          /* 0x09 */
-       u16                     Reserved4;                      /* 0x0A */
-       u16                     MsgVersion;                     /* 0x0C */
-       u16                     HeaderVersion;                  /* 0x0E */
+       __le16                  Reserved4;                      /* 0x0A */
+       __le16                  MsgVersion;                     /* 0x0C */
+       __le16                  HeaderVersion;                  /* 0x0E */
        u32                     Reserved5;                      /* 0x10 */
-       u16                     Reserved6;                      /* 0x14 */
+       __le16                  Reserved6;                      /* 0x14 */
        u8                      Reserved7;                      /* 0x16 */
        u8                      HostMSIxVectors;                /* 0x17 */
-       u16                     Reserved8;                      /* 0x18 */
-       u16                     SystemRequestFrameSize;         /* 0x1A */
-       u16                     ReplyDescriptorPostQueueDepth;  /* 0x1C */
-       u16                     ReplyFreeQueueDepth;            /* 0x1E */
-       u32                     SenseBufferAddressHigh;         /* 0x20 */
-       u32                     SystemReplyAddressHigh;         /* 0x24 */
-       u64                     SystemRequestFrameBaseAddress;  /* 0x28 */
-       u64                     ReplyDescriptorPostQueueAddress;/* 0x30 */
-       u64                     ReplyFreeQueueAddress;          /* 0x38 */
-       u64                     TimeStamp;                      /* 0x40 */
+       __le16                  Reserved8;                      /* 0x18 */
+       __le16                  SystemRequestFrameSize;         /* 0x1A */
+       __le16                  ReplyDescriptorPostQueueDepth;  /* 0x1C */
+       __le16                  ReplyFreeQueueDepth;            /* 0x1E */
+       __le32                  SenseBufferAddressHigh;         /* 0x20 */
+       __le32                  SystemReplyAddressHigh;         /* 0x24 */
+       __le64                  SystemRequestFrameBaseAddress;  /* 0x28 */
+       __le64                  ReplyDescriptorPostQueueAddress;/* 0x30 */
+       __le64                  ReplyFreeQueueAddress;          /* 0x38 */
+       __le64                  TimeStamp;                      /* 0x40 */
 };
 
 /* mrpriv defines */
@@ -486,46 +499,47 @@ struct MPI2_IOC_INIT_REQUEST {
 #define MAX_PHYSICAL_DEVICES 256
 #define MAX_RAIDMAP_PHYSICAL_DEVICES (MAX_PHYSICAL_DEVICES)
 #define MR_DCMD_LD_MAP_GET_INFO             0x0300e101
+#define MR_DCMD_SYSTEM_PD_MAP_GET_INFO      0x0200e102
 #define MR_DCMD_CTRL_SHARED_HOST_MEM_ALLOC  0x010e8485   /* SR-IOV HB alloc*/
 #define MR_DCMD_LD_VF_MAP_GET_ALL_LDS_111   0x03200200
 #define MR_DCMD_LD_VF_MAP_GET_ALL_LDS       0x03150200
 
 struct MR_DEV_HANDLE_INFO {
-       u16     curDevHdl;
+       __le16  curDevHdl;
        u8      validHandles;
        u8      reserved;
-       u16     devHandle[2];
+       __le16  devHandle[2];
 };
 
 struct MR_ARRAY_INFO {
-       u16      pd[MAX_RAIDMAP_ROW_SIZE];
+       __le16  pd[MAX_RAIDMAP_ROW_SIZE];
 };
 
 struct MR_QUAD_ELEMENT {
-       u64     logStart;
-       u64     logEnd;
-       u64     offsetInSpan;
-       u32     diff;
-       u32     reserved1;
+       __le64     logStart;
+       __le64     logEnd;
+       __le64     offsetInSpan;
+       __le32     diff;
+       __le32     reserved1;
 };
 
 struct MR_SPAN_INFO {
-       u32             noElements;
-       u32             reserved1;
+       __le32             noElements;
+       __le32             reserved1;
        struct MR_QUAD_ELEMENT quad[MAX_RAIDMAP_SPAN_DEPTH];
 };
 
 struct MR_LD_SPAN {
-       u64      startBlk;
-       u64      numBlks;
-       u16      arrayRef;
+       __le64   startBlk;
+       __le64   numBlks;
+       __le16   arrayRef;
        u8       spanRowSize;
        u8       spanRowDataSize;
        u8       reserved[4];
 };
 
 struct MR_SPAN_BLOCK_INFO {
-       u64          num_rows;
+       __le64          num_rows;
        struct MR_LD_SPAN   span;
        struct MR_SPAN_INFO block_span_info;
 };
@@ -558,8 +572,8 @@ struct MR_LD_RAID {
                u32     reserved4:7;
 #endif
        } capability;
-       u32     reserved6;
-       u64     size;
+       __le32     reserved6;
+       __le64     size;
        u8      spanDepth;
        u8      level;
        u8      stripeShift;
@@ -568,12 +582,12 @@ struct MR_LD_RAID {
        u8      writeMode;
        u8      PRL;
        u8      SRL;
-       u16     targetId;
+       __le16     targetId;
        u8      ldState;
        u8      regTypeReqOnWrite;
        u8      modFactor;
        u8      regTypeReqOnRead;
-       u16     seqNum;
+       __le16     seqNum;
 
        struct {
                u32 ldSyncRequired:1;
@@ -592,20 +606,20 @@ struct MR_LD_SPAN_MAP {
 };
 
 struct MR_FW_RAID_MAP {
-       u32                 totalSize;
+       __le32                 totalSize;
        union {
                struct {
-                       u32         maxLd;
-                       u32         maxSpanDepth;
-                       u32         maxRowSize;
-                       u32         maxPdCount;
-                       u32         maxArrays;
+                       __le32         maxLd;
+                       __le32         maxSpanDepth;
+                       __le32         maxRowSize;
+                       __le32         maxPdCount;
+                       __le32         maxArrays;
                } validationInfo;
-               u32             version[5];
+               __le32             version[5];
        };
 
-       u32                 ldCount;
-       u32                 Reserved1;
+       __le32                 ldCount;
+       __le32                 Reserved1;
        u8                  ldTgtIdToLd[MAX_RAIDMAP_LOGICAL_DRIVES+
                                        MAX_RAIDMAP_VIEWS];
        u8                  fpPdIoTimeoutSec;
@@ -620,7 +634,7 @@ struct IO_REQUEST_INFO {
        u32 numBlocks;
        u16 ldTgtId;
        u8 isRead;
-       u16 devHandle;
+       __le16 devHandle;
        u64 pdBlock;
        u8 fpOkForIo;
        u8 IoforUnevenSpan;
@@ -634,7 +648,7 @@ struct IO_REQUEST_INFO {
 struct MR_LD_TARGET_SYNC {
        u8  targetId;
        u8  reserved;
-       u16 seqNum;
+       __le16 seqNum;
 };
 
 #define IEEE_SGE_FLAGS_ADDR_MASK            (0x03)
@@ -679,7 +693,6 @@ struct megasas_cmd_fusion {
         */
        u32 sync_cmd_idx;
        u32 index;
-       u8 flags;
        u8 pd_r1_lb;
 };
 
@@ -720,27 +733,27 @@ struct MR_DRV_RAID_MAP {
         * This feild will be manupulated by driver for ext raid map,
         * else pick the value from firmware raid map.
         */
-       u32                 totalSize;
+       __le32                 totalSize;
 
        union {
        struct {
-               u32         maxLd;
-               u32         maxSpanDepth;
-               u32         maxRowSize;
-               u32         maxPdCount;
-               u32         maxArrays;
+               __le32         maxLd;
+               __le32         maxSpanDepth;
+               __le32         maxRowSize;
+               __le32         maxPdCount;
+               __le32         maxArrays;
        } validationInfo;
-       u32             version[5];
+       __le32             version[5];
        };
 
        /* timeout value used by driver in FP IOs*/
        u8                  fpPdIoTimeoutSec;
        u8                  reserved2[7];
 
-       u16                 ldCount;
-       u16                 arCount;
-       u16                 spanCount;
-       u16                 reserve3;
+       __le16                 ldCount;
+       __le16                 arCount;
+       __le16                 spanCount;
+       __le16                 reserve3;
 
        struct MR_DEV_HANDLE_INFO  devHndlInfo[MAX_RAIDMAP_PHYSICAL_DEVICES];
        u8                  ldTgtIdToLd[MAX_LOGICAL_DRIVES_EXT];
@@ -779,10 +792,10 @@ struct MR_FW_RAID_MAP_EXT {
        u8                  fpPdIoTimeoutSec;
        u8                  reserved2[7];
 
-       u16                 ldCount;
-       u16                 arCount;
-       u16                 spanCount;
-       u16                 reserve3;
+       __le16                 ldCount;
+       __le16                 arCount;
+       __le16                 spanCount;
+       __le16                 reserve3;
 
        struct MR_DEV_HANDLE_INFO  devHndlInfo[MAX_RAIDMAP_PHYSICAL_DEVICES];
        u8                  ldTgtIdToLd[MAX_LOGICAL_DRIVES_EXT];
@@ -790,12 +803,23 @@ struct MR_FW_RAID_MAP_EXT {
        struct MR_LD_SPAN_MAP      ldSpanMap[MAX_LOGICAL_DRIVES_EXT];
 };
 
-struct fusion_context {
-       struct megasas_cmd_fusion **cmd_list;
-       struct list_head cmd_pool;
+/*
+ *  * define MR_PD_CFG_SEQ structure for system PDs
+ *   */
+struct MR_PD_CFG_SEQ {
+       __le16 seqNum;
+       __le16 devHandle;
+       u8  reserved[4];
+} __packed;
 
-       spinlock_t mpt_pool_lock;
+struct MR_PD_CFG_SEQ_NUM_SYNC {
+       __le32 size;
+       __le32 count;
+       struct MR_PD_CFG_SEQ seq[1];
+} __packed;
 
+struct fusion_context {
+       struct megasas_cmd_fusion **cmd_list;
        dma_addr_t req_frames_desc_phys;
        u8 *req_frames_desc;
 
@@ -833,16 +857,19 @@ struct fusion_context {
        u32 current_map_sz;
        u32 drv_map_sz;
        u32 drv_map_pages;
+       struct MR_PD_CFG_SEQ_NUM_SYNC   *pd_seq_sync[JBOD_MAPS_COUNT];
+       dma_addr_t pd_seq_phys[JBOD_MAPS_COUNT];
        u8 fast_path_io;
        struct LD_LOAD_BALANCE_INFO load_balance_info[MAX_LOGICAL_DRIVES_EXT];
        LD_SPAN_INFO log_to_span[MAX_LOGICAL_DRIVES_EXT];
+       u8 adapter_type;
 };
 
 union desc_value {
-       u64 word;
+       __le64 word;
        struct {
-               u32 low;
-               u32 high;
+               __le32 low;
+               __le32 high;
        } u;
 };