Currently ring pmd does not support ``rte_power_monitor`` api. This patch adds support by adding umonitor callback that is called whenever we enter sleep state and need to check if it is time to wake up.
Signed-off-by: Herakliusz Lipiec <herakliusz.lip...@intel.com> --- drivers/net/ring/rte_eth_ring.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c index cfb81da5fe..1bb6b196cb 100644 --- a/drivers/net/ring/rte_eth_ring.c +++ b/drivers/net/ring/rte_eth_ring.c @@ -284,6 +284,28 @@ eth_dev_close(struct rte_eth_dev *dev) return ret; } +static int ring_monitor_callback(const uint64_t value, + const uint64_t arg[RTE_POWER_MONITOR_OPAQUE_SZ]) +{ + /* Check if the head pointer has changed */ + return value != arg[0]; +} + +static int +eth_get_monitor_addr(void* rx_queue, struct rte_power_monitor_cond *pmc) +{ + struct rte_ring *rng = ((struct ring_queue*) rx_queue)->rng; + + /* Monitor ring head since if head moves + * there are packets to transmit + * */ + pmc->addr = &rng->prod.head; + pmc->size = sizeof(rng->prod.head); + pmc->opaque[0] = rng->prod.head; + pmc->fn = ring_monitor_callback; + return 0; +} + static const struct eth_dev_ops ops = { .dev_close = eth_dev_close, .dev_start = eth_dev_start, @@ -303,6 +325,7 @@ static const struct eth_dev_ops ops = { .promiscuous_disable = eth_promiscuous_disable, .allmulticast_enable = eth_allmulticast_enable, .allmulticast_disable = eth_allmulticast_disable, + .get_monitor_addr = eth_get_monitor_addr, }; static int -- 2.36.1