From: Satheesh Paul <psathe...@marvell.com> Implement rte_flow_info_get API to get the maximum number of counters and meters.
Signed-off-by: Satheesh Paul <psathe...@marvell.com> Reviewed-by: Kiran Kumar K <kirankum...@marvell.com> --- Depends-on: patch-26075 ("common/cnxk: fix dual VLAN parsing issue") drivers/net/cnxk/cn10k_ethdev.c | 1 + drivers/net/cnxk/cn10k_flow.c | 16 ++++++++++++++++ drivers/net/cnxk/cn10k_flow.h | 8 ++++++-- drivers/net/cnxk/cn9k_ethdev.c | 1 + drivers/net/cnxk/cn9k_flow.c | 15 +++++++++++++++ drivers/net/cnxk/cn9k_flow.h | 10 ++++++---- drivers/net/cnxk/cnxk_ethdev.h | 1 + drivers/net/cnxk/cnxk_ethdev_mtr.c | 1 - 8 files changed, 46 insertions(+), 7 deletions(-) diff --git a/drivers/net/cnxk/cn10k_ethdev.c b/drivers/net/cnxk/cn10k_ethdev.c index 4658713591..ef1637ec08 100644 --- a/drivers/net/cnxk/cn10k_ethdev.c +++ b/drivers/net/cnxk/cn10k_ethdev.c @@ -754,6 +754,7 @@ npc_flow_ops_override(void) /* Update platform specific ops */ cnxk_flow_ops.create = cn10k_flow_create; cnxk_flow_ops.destroy = cn10k_flow_destroy; + cnxk_flow_ops.info_get = cn10k_flow_info_get; } static int diff --git a/drivers/net/cnxk/cn10k_flow.c b/drivers/net/cnxk/cn10k_flow.c index 7df879a2bb..2ce9e1de74 100644 --- a/drivers/net/cnxk/cn10k_flow.c +++ b/drivers/net/cnxk/cn10k_flow.c @@ -207,6 +207,22 @@ cn10k_flow_create(struct rte_eth_dev *eth_dev, const struct rte_flow_attr *attr, return (struct rte_flow *)flow; } +int +cn10k_flow_info_get(struct rte_eth_dev *dev, struct rte_flow_port_info *port_info, + struct rte_flow_queue_info *queue_info, struct rte_flow_error *err) +{ + RTE_SET_USED(dev); + RTE_SET_USED(err); + + memset(port_info, 0, sizeof(*port_info)); + memset(queue_info, 0, sizeof(*queue_info)); + + port_info->max_nb_counters = CN10K_NPC_COUNTERS_MAX; + port_info->max_nb_meters = CNXK_NIX_MTR_COUNT_MAX; + + return 0; +} + int cn10k_flow_destroy(struct rte_eth_dev *eth_dev, struct rte_flow *rte_flow, struct rte_flow_error *error) diff --git a/drivers/net/cnxk/cn10k_flow.h b/drivers/net/cnxk/cn10k_flow.h index f64fcf2a5e..316b74e6a6 100644 --- a/drivers/net/cnxk/cn10k_flow.h +++ b/drivers/net/cnxk/cn10k_flow.h @@ -6,12 +6,16 @@ #include <rte_flow_driver.h> -struct rte_flow *cn10k_flow_create(struct rte_eth_dev *dev, - const struct rte_flow_attr *attr, +struct rte_flow *cn10k_flow_create(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, const struct rte_flow_item pattern[], const struct rte_flow_action actions[], struct rte_flow_error *error); int cn10k_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow, struct rte_flow_error *error); +int cn10k_flow_info_get(struct rte_eth_dev *dev, struct rte_flow_port_info *port_info, + struct rte_flow_queue_info *queue_info, struct rte_flow_error *err); + +#define CN10K_NPC_COUNTERS_MAX 512 + #endif /* __CN10K_RTE_FLOW_H__ */ diff --git a/drivers/net/cnxk/cn9k_ethdev.c b/drivers/net/cnxk/cn9k_ethdev.c index 3b702d9696..f08e986bd1 100644 --- a/drivers/net/cnxk/cn9k_ethdev.c +++ b/drivers/net/cnxk/cn9k_ethdev.c @@ -674,6 +674,7 @@ npc_flow_ops_override(void) /* Update platform specific ops */ cnxk_flow_ops.create = cn9k_flow_create; cnxk_flow_ops.destroy = cn9k_flow_destroy; + cnxk_flow_ops.info_get = cn9k_flow_info_get; } static int diff --git a/drivers/net/cnxk/cn9k_flow.c b/drivers/net/cnxk/cn9k_flow.c index 15ccdf8919..a418af185d 100644 --- a/drivers/net/cnxk/cn9k_flow.c +++ b/drivers/net/cnxk/cn9k_flow.c @@ -54,3 +54,18 @@ cn9k_flow_destroy(struct rte_eth_dev *eth_dev, struct rte_flow *rte_flow, return cnxk_flow_destroy(eth_dev, flow, error); } + +int +cn9k_flow_info_get(struct rte_eth_dev *dev, struct rte_flow_port_info *port_info, + struct rte_flow_queue_info *queue_info, struct rte_flow_error *err) +{ + RTE_SET_USED(dev); + RTE_SET_USED(err); + + memset(port_info, 0, sizeof(*port_info)); + memset(queue_info, 0, sizeof(*queue_info)); + + port_info->max_nb_counters = CN9K_NPC_COUNTERS_MAX; + + return 0; +} diff --git a/drivers/net/cnxk/cn9k_flow.h b/drivers/net/cnxk/cn9k_flow.h index 43d59e1eb2..26f93ea204 100644 --- a/drivers/net/cnxk/cn9k_flow.h +++ b/drivers/net/cnxk/cn9k_flow.h @@ -6,12 +6,14 @@ #include <rte_flow_driver.h> -struct rte_flow *cn9k_flow_create(struct rte_eth_dev *dev, - const struct rte_flow_attr *attr, +struct rte_flow *cn9k_flow_create(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, const struct rte_flow_item pattern[], const struct rte_flow_action actions[], struct rte_flow_error *error); -int cn9k_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow, - struct rte_flow_error *error); +int cn9k_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow, struct rte_flow_error *error); +int cn9k_flow_info_get(struct rte_eth_dev *dev, struct rte_flow_port_info *port_info, + struct rte_flow_queue_info *queue_info, struct rte_flow_error *err); + +#define CN9K_NPC_COUNTERS_MAX 512 #endif /* __CN9K_RTE_FLOW_H__ */ diff --git a/drivers/net/cnxk/cnxk_ethdev.h b/drivers/net/cnxk/cnxk_ethdev.h index 651ef45ea8..46917bb5d4 100644 --- a/drivers/net/cnxk/cnxk_ethdev.h +++ b/drivers/net/cnxk/cnxk_ethdev.h @@ -112,6 +112,7 @@ /* Default mark value used when none is provided. */ #define CNXK_FLOW_ACTION_FLAG_DEFAULT 0xffff +#define CNXK_NIX_MTR_COUNT_MAX 73 /* 64(leaf) + 8(mid) + 1(top) */ /* Default cycle counter mask */ #define CNXK_CYCLECOUNTER_MASK 0xffffffffffffffffULL diff --git a/drivers/net/cnxk/cnxk_ethdev_mtr.c b/drivers/net/cnxk/cnxk_ethdev_mtr.c index 0fa18f01c7..dcfa4223d5 100644 --- a/drivers/net/cnxk/cnxk_ethdev_mtr.c +++ b/drivers/net/cnxk/cnxk_ethdev_mtr.c @@ -5,7 +5,6 @@ #include "cnxk_ethdev.h" #include <rte_mtr_driver.h> -#define NIX_MTR_COUNT_MAX 73 /* 64(leaf) + 8(mid) + 1(top) */ #define NIX_MTR_COUNT_PER_FLOW 3 /* 1(leaf) + 1(mid) + 1(top) */ #define NIX_BPF_STATS_MASK_ALL \ -- 2.35.3