crypto/mlx5: add WQE set initialization
[dpdk.git] / drivers / net / mlx5 / mlx5.h
index f864c1d..94618e1 100644 (file)
 
 #define MLX5_SH(dev) (((struct mlx5_priv *)(dev)->data->dev_private)->sh)
 
+/*
+ * Number of modification commands.
+ * The maximal actions amount in FW is some constant, and it is 16 in the
+ * latest releases. In some old releases, it will be limited to 8.
+ * Since there is no interface to query the capacity, the maximal value should
+ * be used to allow PMD to create the flow. The validation will be done in the
+ * lower driver layer or FW. A failure will be returned if exceeds the maximal
+ * supported actions number on the root table.
+ * On non-root tables, there is no limitation, but 32 is enough right now.
+ */
+#define MLX5_MAX_MODIFY_NUM                    32
+#define MLX5_ROOT_TBL_MODIFY_NUM               16
+
 enum mlx5_ipool_index {
 #if defined(HAVE_IBV_FLOW_DV_SUPPORT) || !defined(HAVE_INFINIBAND_VERBS_H)
        MLX5_IPOOL_DECAP_ENCAP = 0, /* Pool for encap/decap resource. */
@@ -71,11 +84,20 @@ enum mlx5_reclaim_mem_mode {
        MLX5_RCM_AGGR, /* Reclaim PMD and rdma-core level. */
 };
 
-/* Hash and cache list callback context. */
+/* The type of flow. */
+enum mlx5_flow_type {
+       MLX5_FLOW_TYPE_CTL, /* Control flow. */
+       MLX5_FLOW_TYPE_GEN, /* General flow. */
+       MLX5_FLOW_TYPE_MCP, /* MCP flow. */
+       MLX5_FLOW_TYPE_MAXI,
+};
+
+/* Hlist and list callback context. */
 struct mlx5_flow_cb_ctx {
        struct rte_eth_dev *dev;
        struct rte_flow_error *error;
        void *data;
+       void *data2;
 };
 
 /* Device attributes used in mlx5 PMD */
@@ -1094,6 +1116,9 @@ struct mlx5_dev_ctx_shared {
        uint32_t qp_ts_format:2; /* QP timestamp formats supported. */
        uint32_t meter_aso_en:1; /* Flow Meter ASO is supported. */
        uint32_t ct_aso_en:1; /* Connection Tracking ASO is supported. */
+       uint32_t tunnel_header_0_1:1; /* tunnel_header_0_1 is supported. */
+       uint32_t misc5_cap:1; /* misc5 matcher parameter is supported. */
+       uint32_t reclaim_mode:1; /* Reclaim memory. */
        uint32_t max_port; /* Maximal IB device port index. */
        struct mlx5_bond_info bond; /* Bonding information. */
        void *ctx; /* Verbs/DV/DevX context. */
@@ -1129,14 +1154,15 @@ struct mlx5_dev_ctx_shared {
        struct mlx5_hlist *encaps_decaps; /* Encap/decap action hash list. */
        struct mlx5_hlist *modify_cmds;
        struct mlx5_hlist *tag_table;
-       struct mlx5_cache_list port_id_action_list; /* Port ID action cache. */
-       struct mlx5_cache_list push_vlan_action_list; /* Push VLAN actions. */
-       struct mlx5_cache_list sample_action_list; /* List of sample actions. */
-       struct mlx5_cache_list dest_array_list;
+       struct mlx5_list *port_id_action_list; /* Port ID action list. */
+       struct mlx5_list *push_vlan_action_list; /* Push VLAN actions. */
+       struct mlx5_list *sample_action_list; /* List of sample actions. */
+       struct mlx5_list *dest_array_list;
        /* List of destination array actions. */
        struct mlx5_flow_counter_mng cmng; /* Counters management structure. */
        void *default_miss_action; /* Default miss action. */
        struct mlx5_indexed_pool *ipool[MLX5_IPOOL_MAX];
+       struct mlx5_indexed_pool *mdh_ipools[MLX5_MAX_MODIFY_NUM];
        /* Memory Pool for mlx5 flow resources. */
        struct mlx5_l3t_tbl *cnt_id_tbl; /* Shared counter lookup table. */
        /* Shared interrupt handler section. */
@@ -1236,7 +1262,7 @@ struct mlx5_ind_table_obj {
 /* Hash Rx queue. */
 __extension__
 struct mlx5_hrxq {
-       struct mlx5_cache_entry entry; /* Cache entry. */
+       struct mlx5_list_entry entry; /* List entry. */
        uint32_t standalone:1; /* This object used in shared action. */
        struct mlx5_ind_table_obj *ind_table; /* Indirection table. */
        RTE_STD_C11
@@ -1367,23 +1393,24 @@ struct mlx5_priv {
        unsigned int (*reta_idx)[]; /* RETA index table. */
        unsigned int reta_idx_n; /* RETA index size. */
        struct mlx5_drop drop_queue; /* Flow drop queues. */
-       uint32_t flows; /* RTE Flow rules. */
+       struct mlx5_indexed_pool *flows[MLX5_FLOW_TYPE_MAXI];
+       /* RTE Flow rules. */
        uint32_t ctrl_flows; /* Control flow rules. */
        rte_spinlock_t flow_list_lock;
        struct mlx5_obj_ops obj_ops; /* HW objects operations. */
        LIST_HEAD(rxq, mlx5_rxq_ctrl) rxqsctrl; /* DPDK Rx queues. */
        LIST_HEAD(rxqobj, mlx5_rxq_obj) rxqsobj; /* Verbs/DevX Rx queues. */
-       struct mlx5_cache_list hrxqs; /* Hash Rx queues. */
+       struct mlx5_list *hrxqs; /* Hash Rx queues. */
        LIST_HEAD(txq, mlx5_txq_ctrl) txqsctrl; /* DPDK Tx queues. */
        LIST_HEAD(txqobj, mlx5_txq_obj) txqsobj; /* Verbs/DevX Tx queues. */
        /* Indirection tables. */
        LIST_HEAD(ind_tables, mlx5_ind_table_obj) ind_tbls;
        /* Pointer to next element. */
+       rte_rwlock_t ind_tbls_lock;
        uint32_t refcnt; /**< Reference counter. */
        /**< Verbs modify header action object. */
        uint8_t ft_type; /**< Flow table type, Rx or Tx. */
        uint8_t max_lro_msg_size;
-       /* Tags resources cache. */
        uint32_t link_speed_capa; /* Link speed capabilities. */
        struct mlx5_xstats_ctrl xstats_ctrl; /* Extended stats control. */
        struct mlx5_stats_ctrl stats_ctrl; /* Stats control. */
@@ -1627,7 +1654,8 @@ struct rte_flow *mlx5_flow_create(struct rte_eth_dev *dev,
                                  struct rte_flow_error *error);
 int mlx5_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow,
                      struct rte_flow_error *error);
-void mlx5_flow_list_flush(struct rte_eth_dev *dev, uint32_t *list, bool active);
+void mlx5_flow_list_flush(struct rte_eth_dev *dev, enum mlx5_flow_type type,
+                         bool active);
 int mlx5_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *error);
 int mlx5_flow_query(struct rte_eth_dev *dev, struct rte_flow *flow,
                    const struct rte_flow_action *action, void *data,