net/mlx5: support meter PPS profile
[dpdk.git] / drivers / net / mlx5 / mlx5_flow.h
index 98f6132..56908ae 100644 (file)
@@ -36,6 +36,8 @@ enum mlx5_rte_flow_action_type {
        MLX5_RTE_FLOW_ACTION_TYPE_DEFAULT_MISS,
        MLX5_RTE_FLOW_ACTION_TYPE_TUNNEL_SET,
        MLX5_RTE_FLOW_ACTION_TYPE_AGE,
+       MLX5_RTE_FLOW_ACTION_TYPE_JUMP,
+       MLX5_RTE_FLOW_ACTION_TYPE_COUNT,
 };
 
 #define MLX5_INDIRECT_ACTION_TYPE_OFFSET 30
@@ -1047,6 +1049,8 @@ struct mlx5_flow_workspace {
        uint32_t rssq_num; /* Allocated queue num in rss_desc. */
        uint32_t flow_idx; /* Intermediate device flow index. */
        struct mlx5_flow_meter_info *fm; /* Pointer to the meter in flow. */
+       uint32_t skip_matcher_reg:1;
+       /* Indicates if need to skip matcher register in translate. */
 };
 
 struct mlx5_flow_split_info {
@@ -1094,6 +1098,11 @@ typedef int (*mlx5_flow_create_mtr_tbls_t)(struct rte_eth_dev *dev,
 typedef void (*mlx5_flow_destroy_mtr_tbls_t)(struct rte_eth_dev *dev,
                                struct mlx5_flow_meter_info *fm);
 typedef void (*mlx5_flow_destroy_mtr_drop_tbls_t)(struct rte_eth_dev *dev);
+typedef struct mlx5_flow_meter_sub_policy *
+       (*mlx5_flow_meter_sub_policy_rss_prepare_t)
+               (struct rte_eth_dev *dev,
+               struct mlx5_flow_meter_policy *mtr_policy,
+               struct mlx5_flow_rss_desc *rss_desc[MLX5_MTR_RTE_COLORS]);
 typedef uint32_t (*mlx5_flow_mtr_alloc_t)
                                            (struct rte_eth_dev *dev);
 typedef void (*mlx5_flow_mtr_free_t)(struct rte_eth_dev *dev,
@@ -1186,6 +1195,7 @@ struct mlx5_flow_driver_ops {
        mlx5_flow_destroy_policy_rules_t destroy_policy_rules;
        mlx5_flow_create_def_policy_t create_def_policy;
        mlx5_flow_destroy_def_policy_t destroy_def_policy;
+       mlx5_flow_meter_sub_policy_rss_prepare_t meter_sub_policy_rss_prepare;
        mlx5_flow_counter_alloc_t counter_alloc;
        mlx5_flow_counter_free_t counter_free;
        mlx5_flow_counter_query_t counter_query;
@@ -1417,6 +1427,10 @@ int mlx5_flow_create_mtr_tbls(struct rte_eth_dev *dev,
 void mlx5_flow_destroy_mtr_tbls(struct rte_eth_dev *dev,
                               struct mlx5_flow_meter_info *fm);
 void mlx5_flow_destroy_mtr_drop_tbls(struct rte_eth_dev *dev);
+struct mlx5_flow_meter_sub_policy *mlx5_flow_meter_sub_policy_rss_prepare
+               (struct rte_eth_dev *dev,
+               struct mlx5_flow_meter_policy *mtr_policy,
+               struct mlx5_flow_rss_desc *rss_desc[MLX5_MTR_RTE_COLORS]);
 int mlx5_flow_dv_discover_counter_offset_support(struct rte_eth_dev *dev);
 int mlx5_action_handle_flush(struct rte_eth_dev *dev);
 void mlx5_release_tunnel_hub(struct mlx5_dev_ctx_shared *sh, uint16_t port_id);