@@ -3786,6 +3786,46 @@ flow_null_sync_domain(struct rte_eth_dev *dev __rte_unused,
return 0;
}
+int
+flow_null_get_aged_flows(struct rte_eth_dev *dev,
+ void **context __rte_unused,
+ uint32_t nb_contexts __rte_unused,
+ struct rte_flow_error *error __rte_unused)
+{
+ DRV_LOG(ERR, "port %u get aged flows is not supported.",
+ dev->data->port_id);
+ return -ENOTSUP;
+}
+
+uint32_t
+flow_null_counter_allocate(struct rte_eth_dev *dev)
+{
+ DRV_LOG(ERR, "port %u counter allocate is not supported.",
+ dev->data->port_id);
+ return 0;
+}
+
+void
+flow_null_counter_free(struct rte_eth_dev *dev,
+ uint32_t counter __rte_unused)
+{
+ DRV_LOG(ERR, "port %u counter free is not supported.",
+ dev->data->port_id);
+}
+
+int
+flow_null_counter_query(struct rte_eth_dev *dev,
+ uint32_t counter __rte_unused,
+ bool clear __rte_unused,
+ uint64_t *pkts __rte_unused,
+ uint64_t *bytes __rte_unused,
+ void **action __rte_unused)
+{
+ DRV_LOG(ERR, "port %u counter query is not supported.",
+ dev->data->port_id);
+ return -ENOTSUP;
+}
+
/* Void driver to protect from null pointer reference. */
const struct mlx5_flow_driver_ops mlx5_flow_null_drv_ops = {
.validate = flow_null_validate,
@@ -3796,6 +3836,10 @@ const struct mlx5_flow_driver_ops mlx5_flow_null_drv_ops = {
.destroy = flow_null_destroy,
.query = flow_null_query,
.sync_domain = flow_null_sync_domain,
+ .get_aged_flows = flow_null_get_aged_flows,
+ .counter_alloc = flow_null_counter_allocate,
+ .counter_free = flow_null_counter_free,
+ .counter_query = flow_null_counter_query
};
/**
@@ -8352,17 +8396,10 @@ mlx5_flow_mtr_free(struct rte_eth_dev *dev, uint32_t mtr_idx)
uint32_t
mlx5_counter_alloc(struct rte_eth_dev *dev)
{
- const struct mlx5_flow_driver_ops *fops;
struct rte_flow_attr attr = { .transfer = 0 };
- if (flow_get_drv_type(dev, &attr) == MLX5_FLOW_TYPE_DV) {
- fops = flow_get_drv_ops(MLX5_FLOW_TYPE_DV);
- return fops->counter_alloc(dev);
- }
- DRV_LOG(ERR,
- "port %u counter allocate is not supported.",
- dev->data->port_id);
- return 0;
+ return flow_get_drv_ops(flow_get_drv_type(dev, &attr))->counter_alloc
+ (dev);
}
/**
@@ -8376,17 +8413,9 @@ mlx5_counter_alloc(struct rte_eth_dev *dev)
void
mlx5_counter_free(struct rte_eth_dev *dev, uint32_t cnt)
{
- const struct mlx5_flow_driver_ops *fops;
struct rte_flow_attr attr = { .transfer = 0 };
- if (flow_get_drv_type(dev, &attr) == MLX5_FLOW_TYPE_DV) {
- fops = flow_get_drv_ops(MLX5_FLOW_TYPE_DV);
- fops->counter_free(dev, cnt);
- return;
- }
- DRV_LOG(ERR,
- "port %u counter free is not supported.",
- dev->data->port_id);
+ flow_get_drv_ops(flow_get_drv_type(dev, &attr))->counter_free(dev, cnt);
}
/**
@@ -8410,18 +8439,10 @@ int
mlx5_counter_query(struct rte_eth_dev *dev, uint32_t cnt,
bool clear, uint64_t *pkts, uint64_t *bytes, void **action)
{
- const struct mlx5_flow_driver_ops *fops;
struct rte_flow_attr attr = { .transfer = 0 };
- if (flow_get_drv_type(dev, &attr) == MLX5_FLOW_TYPE_DV) {
- fops = flow_get_drv_ops(MLX5_FLOW_TYPE_DV);
- return fops->counter_query(dev, cnt, clear, pkts,
- bytes, action);
- }
- DRV_LOG(ERR,
- "port %u counter query is not supported.",
- dev->data->port_id);
- return -ENOTSUP;
+ return flow_get_drv_ops(flow_get_drv_type(dev, &attr))->counter_query
+ (dev, cnt, clear, pkts, bytes, action);
}
/**
@@ -9889,17 +9910,10 @@ int
mlx5_flow_get_aged_flows(struct rte_eth_dev *dev, void **contexts,
uint32_t nb_contexts, struct rte_flow_error *error)
{
- const struct mlx5_flow_driver_ops *fops;
struct rte_flow_attr attr = { .transfer = 0 };
- enum mlx5_flow_drv_type type = flow_get_drv_type(dev, &attr);
- if (type == MLX5_FLOW_TYPE_DV || type == MLX5_FLOW_TYPE_HW) {
- fops = flow_get_drv_ops(type);
- return fops->get_aged_flows(dev, contexts, nb_contexts, error);
- }
- DRV_LOG(ERR, "port %u get aged flows is not supported.",
- dev->data->port_id);
- return -ENOTSUP;
+ return flow_get_drv_ops(flow_get_drv_type(dev, &attr))->get_aged_flows
+ (dev, contexts, nb_contexts, error);
}
/**
@@ -2575,6 +2575,19 @@ int flow_dv_translate_items_hws(const struct rte_flow_item *items,
int mlx5_flow_pick_transfer_proxy(struct rte_eth_dev *dev,
uint16_t *proxy_port_id,
struct rte_flow_error *error);
+int flow_null_get_aged_flows(struct rte_eth_dev *dev,
+ void **context,
+ uint32_t nb_contexts,
+ struct rte_flow_error *error);
+uint32_t flow_null_counter_allocate(struct rte_eth_dev *dev);
+void flow_null_counter_free(struct rte_eth_dev *dev,
+ uint32_t counter);
+int flow_null_counter_query(struct rte_eth_dev *dev,
+ uint32_t counter,
+ bool clear,
+ uint64_t *pkts,
+ uint64_t *bytes,
+ void **action);
int mlx5_flow_hw_flush_ctrl_flows(struct rte_eth_dev *dev);
@@ -2132,4 +2132,8 @@ const struct mlx5_flow_driver_ops mlx5_flow_verbs_drv_ops = {
.query = flow_verbs_query,
.sync_domain = flow_verbs_sync_domain,
.discover_priorities = flow_verbs_discover_priorities,
+ .get_aged_flows = flow_null_get_aged_flows,
+ .counter_alloc = flow_null_counter_allocate,
+ .counter_free = flow_null_counter_free,
+ .counter_query = flow_null_counter_query,
};