Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next
[cascardo/linux.git] / drivers / scsi / be2iscsi / be_cmds.h
index 9907308..627ebbe 100644 (file)
@@ -40,6 +40,7 @@ struct be_mcc_wrb {
        u32 tag1;               /* dword 3 */
        u32 rsvd;               /* dword 4 */
        union {
+#define EMBED_MBX_MAX_PAYLOAD_SIZE  220
                u8 embedded_payload[236];       /* used by embedded cmds */
                struct be_sge sgl[19];  /* used by non-embedded cmds */
        } payload;
@@ -162,6 +163,8 @@ struct be_mcc_mailbox {
 #define OPCODE_COMMON_CQ_CREATE                                12
 #define OPCODE_COMMON_EQ_CREATE                                13
 #define OPCODE_COMMON_MCC_CREATE                       21
+#define OPCODE_COMMON_ADD_TEMPLATE_HEADER_BUFFERS      24
+#define OPCODE_COMMON_REMOVE_TEMPLATE_HEADER_BUFFERS   25
 #define OPCODE_COMMON_GET_CNTL_ATTRIBUTES              32
 #define OPCODE_COMMON_GET_FW_VERSION                   35
 #define OPCODE_COMMON_MODIFY_EQ_DELAY                  41
@@ -217,6 +220,10 @@ struct phys_addr {
        u32 hi;
 };
 
+struct virt_addr {
+       u32 lo;
+       u32 hi;
+};
 /**************************
  * BE Command definitions *
  **************************/
@@ -722,7 +729,13 @@ int be_mbox_notify(struct be_ctrl_info *ctrl);
 int be_cmd_create_default_pdu_queue(struct be_ctrl_info *ctrl,
                                    struct be_queue_info *cq,
                                    struct be_queue_info *dq, int length,
-                                   int entry_size);
+                                   int entry_size, uint8_t is_header,
+                                   uint8_t ulp_num);
+
+int be_cmd_iscsi_post_template_hdr(struct be_ctrl_info *ctrl,
+                                   struct be_dma_mem *q_mem);
+
+int be_cmd_iscsi_remove_template_hdr(struct be_ctrl_info *ctrl);
 
 int be_cmd_iscsi_post_sgl_pages(struct be_ctrl_info *ctrl,
                                struct be_dma_mem *q_mem, u32 page_offset,
@@ -731,7 +744,9 @@ int be_cmd_iscsi_post_sgl_pages(struct be_ctrl_info *ctrl,
 int beiscsi_cmd_reset_function(struct beiscsi_hba *phba);
 
 int be_cmd_wrbq_create(struct be_ctrl_info *ctrl, struct be_dma_mem *q_mem,
-                      struct be_queue_info *wrbq);
+                      struct be_queue_info *wrbq,
+                      struct hwi_wrb_context *pwrb_context,
+                      uint8_t ulp_num);
 
 bool is_link_state_evt(u32 trailer);
 
@@ -776,7 +791,9 @@ struct be_defq_create_req {
        struct be_cmd_req_hdr hdr;
        u16 num_pages;
        u8 ulp_num;
-       u8 rsvd0;
+#define BEISCSI_DUAL_ULP_AWARE_BIT     0       /* Byte 3 - Bit 0 */
+#define BEISCSI_BIND_Q_TO_ULP_BIT      1       /* Byte 3 - Bit 1 */
+       u8 dua_feature;
        struct be_default_pdu_context context;
        struct phys_addr pages[8];
 } __packed;
@@ -784,6 +801,27 @@ struct be_defq_create_req {
 struct be_defq_create_resp {
        struct be_cmd_req_hdr hdr;
        u16 id;
+       u8 rsvd0;
+       u8 ulp_num;
+       u32 doorbell_offset;
+       u16 register_set;
+       u16 doorbell_format;
+} __packed;
+
+struct be_post_template_pages_req {
+       struct be_cmd_req_hdr hdr;
+       u16 num_pages;
+#define BEISCSI_TEMPLATE_HDR_TYPE_ISCSI        0x1
+       u16 type;
+       struct phys_addr scratch_pa;
+       struct virt_addr scratch_va;
+       struct virt_addr pages_va;
+       struct phys_addr pages[16];
+} __packed;
+
+struct be_remove_template_pages_req {
+       struct be_cmd_req_hdr hdr;
+       u16 type;
        u16 rsvd0;
 } __packed;
 
@@ -800,14 +838,18 @@ struct be_wrbq_create_req {
        struct be_cmd_req_hdr hdr;
        u16 num_pages;
        u8 ulp_num;
-       u8 rsvd0;
+       u8 dua_feature;
        struct phys_addr pages[8];
 } __packed;
 
 struct be_wrbq_create_resp {
        struct be_cmd_resp_hdr resp_hdr;
        u16 cid;
-       u16 rsvd0;
+       u8 rsvd0;
+       u8 ulp_num;
+       u32 doorbell_offset;
+       u16 register_set;
+       u16 doorbell_format;
 } __packed;
 
 #define SOL_CID_MASK           0x0000FFC0
@@ -1002,6 +1044,7 @@ union tcp_upload_params {
 } __packed;
 
 struct be_ulp_fw_cfg {
+#define BEISCSI_ULP_ISCSI_INI_MODE     0x10
        u32 ulp_mode;
        u32 etx_base;
        u32 etx_count;
@@ -1017,14 +1060,26 @@ struct be_ulp_fw_cfg {
        u32 icd_count;
 };
 
+struct be_ulp_chain_icd {
+       u32 chain_base;
+       u32 chain_count;
+};
+
 struct be_fw_cfg {
        struct be_cmd_req_hdr hdr;
        u32 be_config_number;
        u32 asic_revision;
        u32 phys_port;
+#define BEISCSI_FUNC_ISCSI_INI_MODE    0x10
+#define BEISCSI_FUNC_DUA_MODE  0x800
        u32 function_mode;
        struct be_ulp_fw_cfg ulp[2];
        u32 function_caps;
+       u32 cqid_base;
+       u32 cqid_count;
+       u32 eqid_base;
+       u32 eqid_count;
+       struct be_ulp_chain_icd chain_icd[2];
 } __packed;
 
 struct be_cmd_get_all_if_id_req {