IB/mlx5: Report mlx5 CQE compression caps during query
authorBodong Wang <bodong@mellanox.com>
Mon, 31 Oct 2016 10:16:44 +0000 (12:16 +0200)
committerDoug Ledford <dledford@redhat.com>
Tue, 13 Dec 2016 18:34:03 +0000 (13:34 -0500)
The capabilities include:
- Max number of compressed and aggregated CQEs in a single session,
  while zero means unsupported.
- For Responder, there are two formats of mini CQE: mini CQE with Rx
  hash and mini CQE with checksum. They're mutual exclusive.

Signed-off-by: Bodong Wang <bodong@mellanox.com>
Reviewed-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/mlx5/main.c
include/uapi/rdma/mlx5-abi.h

index a16207c333336be21da109ecf08c333af2f4309c..2687a93c4af2d14dfa2b4d5a9aca1ba323839a93 100644 (file)
@@ -683,6 +683,16 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
        if (field_avail(typeof(resp), reserved, uhw->outlen))
                resp.response_length += sizeof(resp.reserved);
 
+       if (field_avail(typeof(resp), cqe_comp_caps, uhw->outlen)) {
+               resp.cqe_comp_caps.max_num =
+                       MLX5_CAP_GEN(dev->mdev, cqe_compression) ?
+                       MLX5_CAP_GEN(dev->mdev, cqe_compression_max_num) : 0;
+               resp.cqe_comp_caps.supported_format =
+                       MLX5_IB_CQE_RES_FORMAT_HASH |
+                       MLX5_IB_CQE_RES_FORMAT_CSUM;
+               resp.response_length += sizeof(resp.cqe_comp_caps);
+       }
+
        if (uhw->outlen) {
                err = ib_copy_to_udata(uhw, &resp, resp.response_length);
 
index 93d6b9fe8e78b56aa2682f3410adef72a3a9412f..6649d13a2dbb257e0aed1d54c4bb52fed9a2ed7b 100644 (file)
@@ -124,11 +124,23 @@ struct mlx5_ib_rss_caps {
        __u8 reserved[7];
 };
 
+enum mlx5_ib_cqe_comp_res_format {
+       MLX5_IB_CQE_RES_FORMAT_HASH     = 1 << 0,
+       MLX5_IB_CQE_RES_FORMAT_CSUM     = 1 << 1,
+       MLX5_IB_CQE_RES_RESERVED        = 1 << 2,
+};
+
+struct mlx5_ib_cqe_comp_caps {
+       __u32 max_num;
+       __u32 supported_format; /* enum mlx5_ib_cqe_comp_res_format */
+};
+
 struct mlx5_ib_query_device_resp {
        __u32   comp_mask;
        __u32   response_length;
        struct  mlx5_ib_tso_caps tso_caps;
        struct  mlx5_ib_rss_caps rss_caps;
+       struct  mlx5_ib_cqe_comp_caps cqe_comp_caps;
        __u32   mlx5_ib_support_multi_pkt_send_wqes;
        __u32   reserved;
 };