@@ -289,6 +289,7 @@ struct mlx5_query_device_ex_resp {
struct mlx5_packet_pacing_caps packet_pacing_caps;
__u32 support_multi_pkt_send_wqe;
__u32 reserved;
+ struct mlx5dv_sw_parsing_caps sw_parsing_caps;
};
#endif /* MLX5_ABI_H */
@@ -630,6 +630,11 @@ int mlx5dv_query_device(struct ibv_context *ctx_in,
if (mctx->vendor_cap_flags & MLX5_VENDOR_CAP_FLAGS_ENHANCED_MPW)
attrs_out->flags |= MLX5DV_CONTEXT_FLAGS_ENHANCED_MPW;
+ if (attrs_out->comp_mask & MLX5DV_CONTEXT_MASK_SWP) {
+ attrs_out->sw_parsing_caps = mctx->sw_parsing_caps;
+ comp_mask_out |= MLX5DV_CONTEXT_MASK_SWP;
+ }
+
attrs_out->comp_mask = comp_mask_out;
return 0;
@@ -272,6 +272,7 @@ struct mlx5_context {
uint64_t vendor_cap_flags; /* Use enum mlx5_vendor_cap_flags */
struct mlx5dv_cqe_comp_caps cqe_comp_caps;
struct mlx5dv_ctx_allocators extern_alloc;
+ struct mlx5dv_sw_parsing_caps sw_parsing_caps;
};
struct mlx5_bitmap {
@@ -58,7 +58,8 @@ enum {
enum mlx5dv_context_comp_mask {
MLX5DV_CONTEXT_MASK_CQE_COMPRESION = 1 << 0,
- MLX5DV_CONTEXT_MASK_RESERVED = 1 << 1,
+ MLX5DV_CONTEXT_MASK_SWP = 1 << 1,
+ MLX5DV_CONTEXT_MASK_RESERVED = 1 << 2,
};
struct mlx5dv_cqe_comp_caps {
@@ -66,6 +67,11 @@ struct mlx5dv_cqe_comp_caps {
uint32_t supported_format; /* enum mlx5dv_cqe_comp_res_format */
};
+struct mlx5dv_sw_parsing_caps {
+ uint32_t sw_parsing_offloads; /* Use enum mlx5dv_sw_parsing_offloads */
+ uint32_t supported_qpts;
+};
+
/*
* Direct verbs device-specific attributes
*/
@@ -74,6 +80,7 @@ struct mlx5dv_context {
uint64_t flags;
uint64_t comp_mask;
struct mlx5dv_cqe_comp_caps cqe_comp_caps;
+ struct mlx5dv_sw_parsing_caps sw_parsing_caps;
};
enum mlx5dv_context_flags {
@@ -316,6 +323,12 @@ enum mlx5dv_cqe_comp_res_format {
MLX5DV_CQE_RES_FORMAT_RESERVED = 1 << 2,
};
+enum mlx5dv_sw_parsing_offloads {
+ MLX5DV_SW_PARSING = 1 << 0,
+ MLX5DV_SW_PARSING_CSUM = 1 << 1,
+ MLX5DV_SW_PARSING_LSO = 1 << 2,
+};
+
static MLX5DV_ALWAYS_INLINE
uint8_t mlx5dv_get_cqe_owner(struct mlx5_cqe64 *cqe)
{
@@ -2002,6 +2002,7 @@ int mlx5_query_device_ex(struct ibv_context *context,
mctx->vendor_cap_flags |= MLX5_VENDOR_CAP_FLAGS_ENHANCED_MPW;
mctx->cqe_comp_caps = resp.cqe_comp_caps;
+ mctx->sw_parsing_caps = resp.sw_parsing_caps;
major = (raw_fw_ver >> 32) & 0xffff;
minor = (raw_fw_ver >> 16) & 0xffff;