]> git.proxmox.com Git - mirror_ubuntu-kernels.git/blobdiff - drivers/infiniband/ulp/isert/ib_isert.h
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[mirror_ubuntu-kernels.git] / drivers / infiniband / ulp / isert / ib_isert.h
index 8d50453eef66ce11d3cf321a535be0abe6b16d43..147900cbb5788209d952f2f394c2991dd1ea8084 100644 (file)
@@ -36,9 +36,7 @@
 /* Constant PDU lengths calculations */
 #define ISER_HEADERS_LEN       (sizeof(struct iser_ctrl) + \
                                 sizeof(struct iscsi_hdr))
-#define ISER_RECV_DATA_SEG_LEN 8192
-#define ISER_RX_PAYLOAD_SIZE   (ISER_HEADERS_LEN + ISER_RECV_DATA_SEG_LEN)
-#define ISER_RX_LOGIN_SIZE     (ISER_HEADERS_LEN + ISCSI_DEF_MAX_RECV_SEG_LEN)
+#define ISER_RX_PAYLOAD_SIZE   (ISER_HEADERS_LEN + ISCSI_DEF_MAX_RECV_SEG_LEN)
 
 /* QP settings */
 /* Maximal bounds on received asynchronous PDUs */
                                ISERT_MAX_TX_MISC_PDUS  + \
                                ISERT_MAX_RX_MISC_PDUS)
 
-#define ISER_RX_PAD_SIZE       (ISER_RECV_DATA_SEG_LEN + 4096 - \
-               (ISER_RX_PAYLOAD_SIZE + sizeof(u64) + sizeof(struct ib_sge)))
+#define ISER_RX_PAD_SIZE       (ISCSI_DEF_MAX_RECV_SEG_LEN + 4096 - \
+               (ISER_RX_PAYLOAD_SIZE + sizeof(u64) + sizeof(struct ib_sge) + \
+                sizeof(struct ib_cqe)))
 
 #define ISCSI_ISER_SG_TABLESIZE                256
-#define ISER_FASTREG_LI_WRID           0xffffffffffffffffULL
-#define ISER_BEACON_WRID               0xfffffffffffffffeULL
 
 enum isert_desc_type {
        ISCSI_TX_CONTROL,
@@ -84,6 +81,7 @@ enum iser_ib_op_code {
 enum iser_conn_state {
        ISER_CONN_INIT,
        ISER_CONN_UP,
+       ISER_CONN_BOUND,
        ISER_CONN_FULL_FEATURE,
        ISER_CONN_TERMINATING,
        ISER_CONN_DOWN,
@@ -92,23 +90,35 @@ enum iser_conn_state {
 struct iser_rx_desc {
        struct iser_ctrl iser_header;
        struct iscsi_hdr iscsi_header;
-       char            data[ISER_RECV_DATA_SEG_LEN];
+       char            data[ISCSI_DEF_MAX_RECV_SEG_LEN];
        u64             dma_addr;
        struct ib_sge   rx_sg;
+       struct ib_cqe   rx_cqe;
        char            pad[ISER_RX_PAD_SIZE];
 } __packed;
 
+static inline struct iser_rx_desc *cqe_to_rx_desc(struct ib_cqe *cqe)
+{
+       return container_of(cqe, struct iser_rx_desc, rx_cqe);
+}
+
 struct iser_tx_desc {
        struct iser_ctrl iser_header;
        struct iscsi_hdr iscsi_header;
        enum isert_desc_type type;
        u64             dma_addr;
        struct ib_sge   tx_sg[2];
+       struct ib_cqe   tx_cqe;
        int             num_sge;
-       struct isert_cmd *isert_cmd;
        struct ib_send_wr send_wr;
 } __packed;
 
+static inline struct iser_tx_desc *cqe_to_tx_desc(struct ib_cqe *cqe)
+{
+       return container_of(cqe, struct iser_tx_desc, tx_cqe);
+}
+
+
 enum isert_indicator {
        ISERT_PROTECTED         = 1 << 0,
        ISERT_DATA_KEY_VALID    = 1 << 1,
@@ -144,20 +154,6 @@ enum {
        SIG = 2,
 };
 
-struct isert_rdma_wr {
-       struct isert_cmd        *isert_cmd;
-       enum iser_ib_op_code    iser_ib_op;
-       struct ib_sge           *ib_sge;
-       struct ib_sge           s_ib_sge;
-       int                     rdma_wr_num;
-       struct ib_rdma_wr       *rdma_wr;
-       struct ib_rdma_wr       s_rdma_wr;
-       struct ib_sge           ib_sg[3];
-       struct isert_data_buf   data;
-       struct isert_data_buf   prot;
-       struct fast_reg_descriptor *fr_desc;
-};
-
 struct isert_cmd {
        uint32_t                read_stag;
        uint32_t                write_stag;
@@ -170,22 +166,34 @@ struct isert_cmd {
        struct iscsi_cmd        *iscsi_cmd;
        struct iser_tx_desc     tx_desc;
        struct iser_rx_desc     *rx_desc;
-       struct isert_rdma_wr    rdma_wr;
+       enum iser_ib_op_code    iser_ib_op;
+       struct ib_sge           *ib_sge;
+       struct ib_sge           s_ib_sge;
+       int                     rdma_wr_num;
+       struct ib_rdma_wr       *rdma_wr;
+       struct ib_rdma_wr       s_rdma_wr;
+       struct ib_sge           ib_sg[3];
+       struct isert_data_buf   data;
+       struct isert_data_buf   prot;
+       struct fast_reg_descriptor *fr_desc;
        struct work_struct      comp_work;
        struct scatterlist      sg;
 };
 
+static inline struct isert_cmd *tx_desc_to_cmd(struct iser_tx_desc *desc)
+{
+       return container_of(desc, struct isert_cmd, tx_desc);
+}
+
 struct isert_device;
 
 struct isert_conn {
        enum iser_conn_state    state;
-       int                     post_recv_buf_count;
        u32                     responder_resources;
        u32                     initiator_depth;
        bool                    pi_support;
        u32                     max_sge;
-       char                    *login_buf;
-       char                    *login_req_buf;
+       struct iser_rx_desc     *login_req_buf;
        char                    *login_rsp_buf;
        u64                     login_req_dma;
        int                     login_req_len;
@@ -201,15 +209,12 @@ struct isert_conn {
        struct ib_qp            *qp;
        struct isert_device     *device;
        struct mutex            mutex;
-       struct completion       wait;
-       struct completion       wait_comp_err;
        struct kref             kref;
        struct list_head        fr_pool;
        int                     fr_pool_size;
        /* lock to protect fastreg pool */
        spinlock_t              pool_lock;
        struct work_struct      release_work;
-       struct ib_recv_wr       beacon;
        bool                    logout_posted;
        bool                    snd_w_inv;
 };
@@ -221,17 +226,13 @@ struct isert_conn {
  *
  * @device:     pointer to device handle
  * @cq:         completion queue
- * @wcs:        work completion array
  * @active_qps: Number of active QPs attached
  *              to completion context
- * @work:       completion work handle
  */
 struct isert_comp {
        struct isert_device     *device;
        struct ib_cq            *cq;
-       struct ib_wc             wcs[16];
        int                      active_qps;
-       struct work_struct       work;
 };
 
 struct isert_device {
@@ -243,9 +244,8 @@ struct isert_device {
        struct isert_comp       *comps;
        int                     comps_used;
        struct list_head        dev_node;
-       int                     (*reg_rdma_mem)(struct iscsi_conn *conn,
-                                                   struct iscsi_cmd *cmd,
-                                                   struct isert_rdma_wr *wr);
+       int                     (*reg_rdma_mem)(struct isert_cmd *isert_cmd,
+                                               struct iscsi_conn *conn);
        void                    (*unreg_rdma_mem)(struct isert_cmd *isert_cmd,
                                                  struct isert_conn *isert_conn);
 };