common/mlx5/linux: replace malloc and free in glue
[dpdk.git] / drivers / common / mlx5 / mlx5_prm.h
index adf5299..7d671a3 100644 (file)
@@ -6,21 +6,12 @@
 #ifndef RTE_PMD_MLX5_PRM_H_
 #define RTE_PMD_MLX5_PRM_H_
 
-/* Verbs header. */
-/* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */
-#ifdef PEDANTIC
-#pragma GCC diagnostic ignored "-Wpedantic"
-#endif
-#include <infiniband/mlx5dv.h>
-#ifdef PEDANTIC
-#pragma GCC diagnostic error "-Wpedantic"
-#endif
-
 #include <unistd.h>
 
 #include <rte_vect.h>
 #include <rte_byteorder.h>
 
+#include <mlx5_glue.h>
 #include "mlx5_autoconf.h"
 
 /* RSS hash key size. */
 #define MLX5_MAX_LOG_RQ_SEGS 5u
 
 /* The alignment needed for WQ buffer. */
-#define MLX5_WQE_BUF_ALIGNMENT sysconf(_SC_PAGESIZE)
+#define MLX5_WQE_BUF_ALIGNMENT rte_mem_page_size()
 
 /* The alignment needed for CQ buffer. */
-#define MLX5_CQE_BUF_ALIGNMENT sysconf(_SC_PAGESIZE)
+#define MLX5_CQE_BUF_ALIGNMENT rte_mem_page_size()
 
 /* Completion mode. */
 enum mlx5_completion_mode {
@@ -548,7 +539,7 @@ enum mlx5_modification_field {
 #define MLX5_MREG_C_NUM (MLX5_MODI_META_REG_C_7 - MLX5_MODI_META_REG_C_0 + 1)
 
 enum modify_reg {
-       REG_NONE = 0,
+       REG_NON = 0,
        REG_A,
        REG_B,
        REG_C_0,
@@ -617,7 +608,7 @@ typedef uint8_t u8;
 #define MLX5_SET(typ, p, fld, v) \
        do { \
                u32 _v = v; \
-               *((__be32 *)(p) + __mlx5_dw_off(typ, fld)) = \
+               *((rte_be32_t *)(p) + __mlx5_dw_off(typ, fld)) = \
                rte_cpu_to_be_32((rte_be_to_cpu_32(*((u32 *)(p) + \
                                  __mlx5_dw_off(typ, fld))) & \
                                  (~__mlx5_dw_mask(typ, fld))) | \
@@ -628,15 +619,15 @@ typedef uint8_t u8;
 #define MLX5_SET64(typ, p, fld, v) \
        do { \
                MLX5_ASSERT(__mlx5_bit_sz(typ, fld) == 64); \
-               *((__be64 *)(p) + __mlx5_64_off(typ, fld)) = \
+               *((rte_be64_t *)(p) + __mlx5_64_off(typ, fld)) = \
                        rte_cpu_to_be_64(v); \
        } while (0)
 
 #define MLX5_SET16(typ, p, fld, v) \
        do { \
                u16 _v = v; \
-               *((__be16 *)(p) + __mlx5_16_off(typ, fld)) = \
-               rte_cpu_to_be_16((rte_be_to_cpu_16(*((__be16 *)(p) + \
+               *((rte_be16_t *)(p) + __mlx5_16_off(typ, fld)) = \
+               rte_cpu_to_be_16((rte_be_to_cpu_16(*((rte_be16_t *)(p) + \
                                  __mlx5_16_off(typ, fld))) & \
                                  (~__mlx5_16_mask(typ, fld))) | \
                                 (((_v) & __mlx5_mask16(typ, fld)) << \
@@ -648,14 +639,14 @@ typedef uint8_t u8;
        __mlx5_dw_off(typ, fld))) >> __mlx5_dw_bit_off(typ, fld)) & \
        __mlx5_mask(typ, fld))
 #define MLX5_GET(typ, p, fld) \
-       ((rte_be_to_cpu_32(*((__be32 *)(p) +\
+       ((rte_be_to_cpu_32(*((rte_be32_t *)(p) +\
        __mlx5_dw_off(typ, fld))) >> __mlx5_dw_bit_off(typ, fld)) & \
        __mlx5_mask(typ, fld))
 #define MLX5_GET16(typ, p, fld) \
-       ((rte_be_to_cpu_16(*((__be16 *)(p) + \
+       ((rte_be_to_cpu_16(*((rte_be16_t *)(p) + \
          __mlx5_16_off(typ, fld))) >> __mlx5_16_bit_off(typ, fld)) & \
         __mlx5_mask16(typ, fld))
-#define MLX5_GET64(typ, p, fld) rte_be_to_cpu_64(*((__be64 *)(p) + \
+#define MLX5_GET64(typ, p, fld) rte_be_to_cpu_64(*((rte_be64_t *)(p) + \
                                                   __mlx5_64_off(typ, fld)))
 #define MLX5_FLD_SZ_BYTES(typ, fld) (__mlx5_bit_sz(typ, fld) / 8)
 
@@ -839,6 +830,7 @@ enum {
        MLX5_CMD_OP_ACCESS_REGISTER = 0x805,
        MLX5_CMD_OP_ALLOC_TRANSPORT_DOMAIN = 0x816,
        MLX5_CMD_OP_CREATE_TIR = 0x900,
+       MLX5_CMD_OP_MODIFY_TIR = 0x901,
        MLX5_CMD_OP_CREATE_SQ = 0X904,
        MLX5_CMD_OP_MODIFY_SQ = 0X905,
        MLX5_CMD_OP_CREATE_RQ = 0x908,
@@ -877,6 +869,9 @@ enum {
  */
 #define MLX5_CNT_BATCH_OFFSET 0x800000
 
+/* The counter batch query requires ID align with 4. */
+#define MLX5_CNT_BATCH_QUERY_ID_ALIGNMENT 4
+
 /* Flow counters. */
 struct mlx5_ifc_alloc_flow_counter_out_bits {
        u8         status[0x8];
@@ -1042,6 +1037,7 @@ enum {
        MLX5_GET_HCA_CAP_OP_MOD_GENERAL_DEVICE = 0x0 << 1,
        MLX5_GET_HCA_CAP_OP_MOD_ETHERNET_OFFLOAD_CAPS = 0x1 << 1,
        MLX5_GET_HCA_CAP_OP_MOD_QOS_CAP = 0xc << 1,
+       MLX5_GET_HCA_CAP_OP_MOD_NIC_FLOW_TABLE = 0x7 << 1,
        MLX5_GET_HCA_CAP_OP_MOD_VDPA_EMULATION = 0x13 << 1,
 };
 
@@ -1110,7 +1106,8 @@ struct mlx5_ifc_cmd_hca_cap_bits {
        u8 log_max_eq_sz[0x8];
        u8 relaxed_ordering_write[0x1];
        u8 relaxed_ordering_read[0x1];
-       u8 log_max_mkey[0x6];
+       u8 access_register_user[0x1];
+       u8 log_max_mkey[0x5];
        u8 reserved_at_f0[0x8];
        u8 dump_fill_mkey[0x1];
        u8 reserved_at_f9[0x3];
@@ -1475,15 +1472,75 @@ struct mlx5_ifc_virtio_emulation_cap_bits {
        u8 reserved_at_1c0[0x620];
 };
 
+struct mlx5_ifc_flow_table_prop_layout_bits {
+       u8 ft_support[0x1];
+       u8 flow_tag[0x1];
+       u8 flow_counter[0x1];
+       u8 flow_modify_en[0x1];
+       u8 modify_root[0x1];
+       u8 identified_miss_table[0x1];
+       u8 flow_table_modify[0x1];
+       u8 reformat[0x1];
+       u8 decap[0x1];
+       u8 reset_root_to_default[0x1];
+       u8 pop_vlan[0x1];
+       u8 push_vlan[0x1];
+       u8 fpga_vendor_acceleration[0x1];
+       u8 pop_vlan_2[0x1];
+       u8 push_vlan_2[0x1];
+       u8 reformat_and_vlan_action[0x1];
+       u8 modify_and_vlan_action[0x1];
+       u8 sw_owner[0x1];
+       u8 reformat_l3_tunnel_to_l2[0x1];
+       u8 reformat_l2_to_l3_tunnel[0x1];
+       u8 reformat_and_modify_action[0x1];
+       u8 reserved_at_15[0x9];
+       u8 sw_owner_v2[0x1];
+       u8 reserved_at_1f[0x1];
+       u8 reserved_at_20[0x2];
+       u8 log_max_ft_size[0x6];
+       u8 log_max_modify_header_context[0x8];
+       u8 max_modify_header_actions[0x8];
+       u8 max_ft_level[0x8];
+       u8 reserved_at_40[0x8];
+       u8 log_max_ft_sampler_num[8];
+       u8 metadata_reg_b_width[0x8];
+       u8 metadata_reg_a_width[0x8];
+       u8 reserved_at_60[0x18];
+       u8 log_max_ft_num[0x8];
+       u8 reserved_at_80[0x10];
+       u8 log_max_flow_counter[0x8];
+       u8 log_max_destination[0x8];
+       u8 reserved_at_a0[0x18];
+       u8 log_max_flow[0x8];
+       u8 reserved_at_c0[0x140];
+};
+
+struct mlx5_ifc_flow_table_nic_cap_bits {
+       u8         reserved_at_0[0x200];
+       struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties;
+};
+
 union mlx5_ifc_hca_cap_union_bits {
        struct mlx5_ifc_cmd_hca_cap_bits cmd_hca_cap;
        struct mlx5_ifc_per_protocol_networking_offload_caps_bits
               per_protocol_networking_offload_caps;
        struct mlx5_ifc_qos_cap_bits qos_cap;
        struct mlx5_ifc_virtio_emulation_cap_bits vdpa_caps;
+       struct mlx5_ifc_flow_table_nic_cap_bits flow_table_nic_cap;
        u8 reserved_at_0[0x8000];
 };
 
+struct mlx5_ifc_set_action_in_bits {
+       u8 action_type[0x4];
+       u8 field[0xc];
+       u8 reserved_at_10[0x3];
+       u8 offset[0x5];
+       u8 reserved_at_18[0x3];
+       u8 length[0x5];
+       u8 data[0x20];
+};
+
 struct mlx5_ifc_query_hca_cap_out_bits {
        u8 status[0x8];
        u8 reserved_at_8[0x18];
@@ -1863,6 +1920,34 @@ struct mlx5_ifc_create_tir_in_bits {
        struct mlx5_ifc_tirc_bits ctx;
 };
 
+enum {
+       MLX5_MODIFY_TIR_IN_MODIFY_BITMASK_LRO = 1ULL << 0,
+       MLX5_MODIFY_TIR_IN_MODIFY_BITMASK_INDIRECT_TABLE = 1ULL << 1,
+       MLX5_MODIFY_TIR_IN_MODIFY_BITMASK_HASH = 1ULL << 2,
+       /* bit 3 - tunneled_offload_en modify not supported. */
+       MLX5_MODIFY_TIR_IN_MODIFY_BITMASK_SELF_LB_EN = 1ULL << 4,
+};
+
+struct mlx5_ifc_modify_tir_out_bits {
+       u8 status[0x8];
+       u8 reserved_at_8[0x18];
+       u8 syndrome[0x20];
+       u8 reserved_at_40[0x40];
+};
+
+struct mlx5_ifc_modify_tir_in_bits {
+       u8 opcode[0x10];
+       u8 uid[0x10];
+       u8 reserved_at_20[0x10];
+       u8 op_mod[0x10];
+       u8 reserved_at_40[0x8];
+       u8 tirn[0x18];
+       u8 reserved_at_60[0x20];
+       u8 modify_bitmask[0x40];
+       u8 reserved_at_c0[0x40];
+       struct mlx5_ifc_tirc_bits ctx;
+};
+
 enum {
        MLX5_INLINE_Q_TYPE_RQ = 0x0,
        MLX5_INLINE_Q_TYPE_VIRTQ = 0x1,
@@ -2195,7 +2280,8 @@ struct mlx5_ifc_virtio_q_bits {
        u8 used_addr[0x40];
        u8 available_addr[0x40];
        u8 virtio_q_mkey[0x20];
-       u8 reserved_at_160[0x20];
+       u8 reserved_at_160[0x18];
+       u8 error_type[0x8];
        u8 umem_1_id[0x20];
        u8 umem_1_size[0x20];
        u8 umem_1_offset[0x40];
@@ -2223,7 +2309,7 @@ struct mlx5_ifc_virtio_net_q_bits {
        u8 vhost_log_page[0x5];
        u8 reserved_at_90[0xc];
        u8 state[0x4];
-       u8 error_type[0x8];
+       u8 reserved_at_a0[0x8];
        u8 tisn_or_qpn[0x18];
        u8 dirty_bitmap_mkey[0x20];
        u8 dirty_bitmap_size[0x20];
@@ -2244,6 +2330,10 @@ struct mlx5_ifc_query_virtq_out_bits {
        struct mlx5_ifc_virtio_net_q_bits virtq;
 };
 
+enum {
+       MLX5_EVENT_TYPE_OBJECT_CHANGE = 0x27,
+};
+
 enum {
        MLX5_QP_ST_RC = 0x0,
 };
@@ -2789,7 +2879,7 @@ struct mlx5_ifc_set_regexp_register_in_bits {
        u8 engine_id[0x8];
        u8 register_address[0x20];
        u8 register_data[0x20];
-       u8 reserved[0x40];
+       u8 reserved[0x60];
 };
 
 struct mlx5_ifc_set_regexp_register_out_bits {
@@ -2840,6 +2930,14 @@ struct mlx5_mini_cqe8 {
        uint32_t byte_cnt;
 };
 
+/* Mini CQE responder format. */
+enum {
+       MLX5_CQE_RESP_FORMAT_HASH = 0x0,
+       MLX5_CQE_RESP_FORMAT_CSUM = 0x1,
+       MLX5_CQE_RESP_FORMAT_CSUM_FLOW_TAG = 0x2,
+       MLX5_CQE_RESP_FORMAT_CSUM_STRIDX = 0x3,
+};
+
 /* srTCM PRM flow meter parameters. */
 enum {
        MLX5_FLOW_COLOR_RED = 0,