IB/mlx4: Use multiple WQ blocks to post smaller send WQEs
[linux-block.git] / drivers / infiniband / hw / mlx4 / mlx4_ib.h
index 705ff2fa237e85e73d3ddf8a6e0d8911f737a9e1..3726e451a327201d037016c4c40173932710d126 100644 (file)
@@ -93,6 +93,11 @@ struct mlx4_ib_mr {
        struct ib_umem         *umem;
 };
 
+struct mlx4_ib_fmr {
+       struct ib_fmr           ibfmr;
+       struct mlx4_fmr         mfmr;
+};
+
 struct mlx4_ib_wq {
        u64                    *wrid;
        spinlock_t              lock;
@@ -115,6 +120,8 @@ struct mlx4_ib_qp {
 
        u32                     doorbell_qpn;
        __be32                  sq_signal_bits;
+       unsigned                sq_next_wqe;
+       int                     sq_max_wqes_per_wr;
        int                     sq_spare_wqes;
        struct mlx4_ib_wq       sq;
 
@@ -199,6 +206,10 @@ static inline struct mlx4_ib_mr *to_mmr(struct ib_mr *ibmr)
        return container_of(ibmr, struct mlx4_ib_mr, ibmr);
 }
 
+static inline struct mlx4_ib_fmr *to_mfmr(struct ib_fmr *ibfmr)
+{
+       return container_of(ibfmr, struct mlx4_ib_fmr, ibfmr);
+}
 static inline struct mlx4_ib_qp *to_mqp(struct ib_qp *ibqp)
 {
        return container_of(ibqp, struct mlx4_ib_qp, ibqp);
@@ -284,6 +295,13 @@ int mlx4_ib_process_mad(struct ib_device *ibdev, int mad_flags,    u8 port_num,
 int mlx4_ib_mad_init(struct mlx4_ib_dev *dev);
 void mlx4_ib_mad_cleanup(struct mlx4_ib_dev *dev);
 
+struct ib_fmr *mlx4_ib_fmr_alloc(struct ib_pd *pd, int mr_access_flags,
+                                 struct ib_fmr_attr *fmr_attr);
+int mlx4_ib_map_phys_fmr(struct ib_fmr *ibfmr, u64 *page_list, int npages,
+                        u64 iova);
+int mlx4_ib_unmap_fmr(struct list_head *fmr_list);
+int mlx4_ib_fmr_dealloc(struct ib_fmr *fmr);
+
 static inline int mlx4_ib_ah_grh_present(struct mlx4_ib_ah *ah)
 {
        return !!(ah->av.g_slid & 0x80);