Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-2.6-block.git] / drivers / scsi / megaraid / megaraid_sas_fusion.h
index 7fa73eaca1a8538aae1bac904498e2d864cb4219..c013c80fe4e6d3fa321ea708657794f08025888d 100644 (file)
@@ -75,7 +75,8 @@ enum MR_RAID_FLAGS_IO_SUB_TYPE {
        MR_RAID_FLAGS_IO_SUB_TYPE_RMW_P        = 3,
        MR_RAID_FLAGS_IO_SUB_TYPE_RMW_Q        = 4,
        MR_RAID_FLAGS_IO_SUB_TYPE_CACHE_BYPASS = 6,
-       MR_RAID_FLAGS_IO_SUB_TYPE_LDIO_BW_LIMIT = 7
+       MR_RAID_FLAGS_IO_SUB_TYPE_LDIO_BW_LIMIT = 7,
+       MR_RAID_FLAGS_IO_SUB_TYPE_R56_DIV_OFFLOAD = 8
 };
 
 /*
@@ -88,7 +89,6 @@ 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 RAID_1_PEER_CMDS 2
 #define JBOD_MAPS_COUNT        2
 #define MEGASAS_REDUCE_QD_COUNT 64
@@ -140,12 +140,15 @@ struct RAID_CONTEXT_G35 {
        u16 timeout_value; /* 0x02 -0x03 */
        u16             routing_flags;  // 0x04 -0x05 routing flags
        u16 virtual_disk_tgt_id;   /* 0x06 -0x07 */
-       u64 reg_lock_row_lba;      /* 0x08 - 0x0F */
+       __le64 reg_lock_row_lba;      /* 0x08 - 0x0F */
        u32 reg_lock_length;      /* 0x10 - 0x13 */
-       union {
-               u16 next_lmid; /* 0x14 - 0x15 */
-               u16     peer_smid;      /* used for the raid 1/10 fp writes */
-       } smid;
+       union {                     // flow specific
+               u16 rmw_op_index;   /* 0x14 - 0x15, R5/6 RMW: rmw operation index*/
+               u16 peer_smid;      /* 0x14 - 0x15, R1 Write: peer smid*/
+               u16 r56_arm_map;    /* 0x14 - 0x15, Unused [15], LogArm[14:10], P-Arm[9:5], Q-Arm[4:0] */
+
+       } flow_specific;
+
        u8 ex_status;       /* 0x16 : OUT */
        u8 status;          /* 0x17 status */
        u8 raid_flags;          /* 0x18 resvd[7:6], ioSubType[5:4],
@@ -236,6 +239,13 @@ union RAID_CONTEXT_UNION {
 #define RAID_CTX_SPANARM_SPAN_SHIFT    (5)
 #define RAID_CTX_SPANARM_SPAN_MASK     (0xE0)
 
+/* LogArm[14:10], P-Arm[9:5], Q-Arm[4:0] */
+#define RAID_CTX_R56_Q_ARM_MASK                (0x1F)
+#define RAID_CTX_R56_P_ARM_SHIFT       (5)
+#define RAID_CTX_R56_P_ARM_MASK                (0x3E0)
+#define RAID_CTX_R56_LOG_ARM_SHIFT     (10)
+#define RAID_CTX_R56_LOG_ARM_MASK      (0x7C00)
+
 /* number of bits per index in U32 TrackStream */
 #define BITS_PER_INDEX_STREAM          4
 #define INVALID_STREAM_NUM              16
@@ -940,6 +950,7 @@ struct IO_REQUEST_INFO {
        u8  pd_after_lb;
        u16 r1_alt_dev_handle; /* raid 1/10 only */
        bool ra_capable;
+       u8 data_arms;
 };
 
 struct MR_LD_TARGET_SYNC {
@@ -1324,7 +1335,8 @@ struct fusion_context {
        dma_addr_t ioc_init_request_phys;
        struct MPI2_IOC_INIT_REQUEST *ioc_init_request;
        struct megasas_cmd *ioc_init_cmd;
-
+       bool pcie_bw_limitation;
+       bool r56_div_offload;
 };
 
 union desc_value {
@@ -1349,6 +1361,11 @@ struct  MR_SNAPDUMP_PROPERTIES {
        u8       reserved[12];
 };
 
+struct megasas_debugfs_buffer {
+       void *buf;
+       u32 len;
+};
+
 void megasas_free_cmds_fusion(struct megasas_instance *instance);
 int megasas_ioc_init_fusion(struct megasas_instance *instance);
 u8 megasas_get_map_info(struct megasas_instance *instance);