ethdev: add simple power management API
Add a simple API to allow getting the monitor conditions for power-optimized monitoring of the Rx queues from the PMD, as well as release notes information. Signed-off-by: Liang Ma <liang.j.ma@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
This commit is contained in:
parent
55243435f5
commit
1fe3eef5e9
@ -7,3 +7,7 @@
|
||||
symbol_version = INTERNAL
|
||||
[suppress_variable]
|
||||
symbol_version = INTERNAL
|
||||
|
||||
; Explicit ignore for driver-only ABI
|
||||
[suppress_type]
|
||||
name = eth_dev_ops
|
||||
|
@ -55,6 +55,11 @@ New Features
|
||||
Also, make sure to start the actual text at the margin.
|
||||
=======================================================
|
||||
|
||||
* **Added new ethdev API for PMD power management.**
|
||||
|
||||
Added ``rte_eth_get_monitor_addr()``, to be used in conjunction with
|
||||
``rte_power_monitor()`` to enable automatic power management for PMDs.
|
||||
|
||||
* **Updated Broadcom bnxt driver.**
|
||||
|
||||
Updated the Broadcom bnxt driver with fixes and improvements, including:
|
||||
|
@ -5115,6 +5115,34 @@ rte_eth_tx_burst_mode_get(uint16_t port_id, uint16_t queue_id,
|
||||
dev->dev_ops->tx_burst_mode_get(dev, queue_id, mode));
|
||||
}
|
||||
|
||||
int
|
||||
rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id,
|
||||
struct rte_power_monitor_cond *pmc)
|
||||
{
|
||||
struct rte_eth_dev *dev;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
|
||||
|
||||
dev = &rte_eth_devices[port_id];
|
||||
|
||||
RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_monitor_addr, -ENOTSUP);
|
||||
|
||||
if (queue_id >= dev->data->nb_rx_queues) {
|
||||
RTE_ETHDEV_LOG(ERR, "Invalid Rx queue_id=%u\n", queue_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (pmc == NULL) {
|
||||
RTE_ETHDEV_LOG(ERR, "Invalid power monitor condition=%p\n",
|
||||
pmc);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return eth_err(port_id,
|
||||
dev->dev_ops->get_monitor_addr(dev->data->rx_queues[queue_id],
|
||||
pmc));
|
||||
}
|
||||
|
||||
int
|
||||
rte_eth_dev_set_mc_addr_list(uint16_t port_id,
|
||||
struct rte_ether_addr *mc_addr_set,
|
||||
|
@ -157,6 +157,7 @@ extern "C" {
|
||||
#include <rte_common.h>
|
||||
#include <rte_config.h>
|
||||
#include <rte_ether.h>
|
||||
#include <rte_power_intrinsics.h>
|
||||
|
||||
#include "rte_ethdev_trace_fp.h"
|
||||
#include "rte_dev_info.h"
|
||||
@ -4334,6 +4335,30 @@ __rte_experimental
|
||||
int rte_eth_tx_burst_mode_get(uint16_t port_id, uint16_t queue_id,
|
||||
struct rte_eth_burst_mode *mode);
|
||||
|
||||
/**
|
||||
* @warning
|
||||
* @b EXPERIMENTAL: this API may change without prior notice.
|
||||
*
|
||||
* Retrieve the monitor condition for a given receive queue.
|
||||
*
|
||||
* @param port_id
|
||||
* The port identifier of the Ethernet device.
|
||||
* @param queue_id
|
||||
* The Rx queue on the Ethernet device for which information
|
||||
* will be retrieved.
|
||||
* @param pmc
|
||||
* The pointer to power-optimized monitoring condition structure.
|
||||
*
|
||||
* @return
|
||||
* - 0: Success.
|
||||
* -ENOTSUP: Operation not supported.
|
||||
* -EINVAL: Invalid parameters.
|
||||
* -ENODEV: Invalid port ID.
|
||||
*/
|
||||
__rte_experimental
|
||||
int rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id,
|
||||
struct rte_power_monitor_cond *pmc);
|
||||
|
||||
/**
|
||||
* Retrieve device registers and register attributes (number of registers and
|
||||
* register size)
|
||||
|
@ -763,6 +763,26 @@ typedef int (*eth_hairpin_queue_peer_unbind_t)
|
||||
(struct rte_eth_dev *dev, uint16_t cur_queue, uint32_t direction);
|
||||
/**< @internal Unbind peer queue from the current queue. */
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* Get address of memory location whose contents will change whenever there is
|
||||
* new data to be received on an Rx queue.
|
||||
*
|
||||
* @param rxq
|
||||
* Ethdev queue pointer.
|
||||
* @param pmc
|
||||
* The pointer to power-optimized monitoring condition structure.
|
||||
* @return
|
||||
* Negative errno value on error, 0 on success.
|
||||
*
|
||||
* @retval 0
|
||||
* Success
|
||||
* @retval -EINVAL
|
||||
* Invalid parameters
|
||||
*/
|
||||
typedef int (*eth_get_monitor_addr_t)(void *rxq,
|
||||
struct rte_power_monitor_cond *pmc);
|
||||
|
||||
/**
|
||||
* @internal A structure containing the functions exported by an Ethernet driver.
|
||||
*/
|
||||
@ -917,6 +937,9 @@ struct eth_dev_ops {
|
||||
/**< Set up the connection between the pair of hairpin queues. */
|
||||
eth_hairpin_queue_peer_unbind_t hairpin_queue_peer_unbind;
|
||||
/**< Disconnect the hairpin queues of a pair from each other. */
|
||||
|
||||
eth_get_monitor_addr_t get_monitor_addr;
|
||||
/**< Get power monitoring condition for Rx queue. */
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -240,6 +240,9 @@ EXPERIMENTAL {
|
||||
rte_flow_get_restore_info;
|
||||
rte_flow_tunnel_action_decap_release;
|
||||
rte_flow_tunnel_item_release;
|
||||
|
||||
# added in 21.02
|
||||
rte_eth_get_monitor_addr;
|
||||
};
|
||||
|
||||
INTERNAL {
|
||||
|
Loading…
Reference in New Issue
Block a user