ethdev: add device flag to bypass auto-filled queue xstats
[dpdk.git] / drivers / net / mlx5 / mlx5_flow.h
index f47170d..0dc76c4 100644 (file)
@@ -520,6 +520,58 @@ struct mlx5_flow_tbl_data_entry {
        uint32_t idx; /**< index for the indexed mempool. */
 };
 
+/* Sub rdma-core actions list. */
+struct mlx5_flow_sub_actions_list {
+       uint32_t actions_num; /**< Number of sample actions. */
+       uint64_t action_flags;
+       void *dr_queue_action;
+       void *dr_tag_action;
+       void *dr_cnt_action;
+       void *dr_port_id_action;
+       void *dr_encap_action;
+};
+
+/* Sample sub-actions resource list. */
+struct mlx5_flow_sub_actions_idx {
+       uint32_t rix_hrxq; /**< Hash Rx queue object index. */
+       uint32_t rix_tag; /**< Index to the tag action. */
+       uint32_t cnt;
+       uint32_t rix_port_id_action; /**< Index to port ID action resource. */
+       uint32_t rix_encap_decap; /**< Index to encap/decap resource. */
+};
+
+/* Sample action resource structure. */
+struct mlx5_flow_dv_sample_resource {
+       ILIST_ENTRY(uint32_t)next; /**< Pointer to next element. */
+       uint32_t refcnt; /**< Reference counter. */
+       void *verbs_action; /**< Verbs sample action object. */
+       uint8_t ft_type; /** Flow Table Type */
+       uint32_t ft_id; /** Flow Table Level */
+       uint32_t ratio;   /** Sample Ratio */
+       uint64_t set_action; /** Restore reg_c0 value */
+       void *normal_path_tbl; /** Flow Table pointer */
+       void *default_miss; /** default_miss dr_action. */
+       struct mlx5_flow_sub_actions_idx sample_idx;
+       /**< Action index resources. */
+       struct mlx5_flow_sub_actions_list sample_act;
+       /**< Action resources. */
+};
+
+#define MLX5_MAX_DEST_NUM      2
+
+/* Destination array action resource structure. */
+struct mlx5_flow_dv_dest_array_resource {
+       ILIST_ENTRY(uint32_t)next; /**< Pointer to next element. */
+       uint32_t refcnt; /**< Reference counter. */
+       uint8_t ft_type; /** Flow Table Type */
+       uint8_t num_of_dest; /**< Number of destination actions. */
+       void *action; /**< Pointer to the rdma core action. */
+       struct mlx5_flow_sub_actions_idx sample_idx[MLX5_MAX_DEST_NUM];
+       /**< Action index resources. */
+       struct mlx5_flow_sub_actions_list sample_act[MLX5_MAX_DEST_NUM];
+       /**< Action resources. */
+};
+
 /* Verbs specification header. */
 struct ibv_spec_header {
        enum ibv_flow_spec_type type;
@@ -552,6 +604,10 @@ struct mlx5_flow_handle_dv {
        /**< Index to push VLAN action resource in cache. */
        uint32_t rix_tag;
        /**< Index to the tag action. */
+       uint32_t rix_sample;
+       /**< Index to sample action resource in cache. */
+       uint32_t rix_dest_array;
+       /**< Index to destination array resource in cache. */
 } __rte_packed;
 
 /** Device flow handle structure: used both for creating & destroying. */
@@ -617,6 +673,10 @@ struct mlx5_flow_dv_workspace {
        /**< Pointer to the jump action resource. */
        struct mlx5_flow_dv_match_params value;
        /**< Holds the value that the packet is compared to. */
+       struct mlx5_flow_dv_sample_resource *sample_res;
+       /**< Pointer to the sample action resource. */
+       struct mlx5_flow_dv_dest_array_resource *dest_array_res;
+       /**< Pointer to the destination array resource. */
 };
 
 /*