ethdev: add switch domain allocator
Add switch domain allocate and free API to enable NET devices to synchronise switch domain allocation. Signed-off-by: Declan Doherty <declan.doherty@intel.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
33af337773
commit
ce92504063
@ -4126,6 +4126,60 @@ rte_eth_dev_pool_ops_supported(uint16_t port_id, const char *pool)
|
||||
return (*dev->dev_ops->pool_ops_supported)(dev, pool);
|
||||
}
|
||||
|
||||
/**
|
||||
* A set of values to describe the possible states of a switch domain.
|
||||
*/
|
||||
enum rte_eth_switch_domain_state {
|
||||
RTE_ETH_SWITCH_DOMAIN_UNUSED = 0,
|
||||
RTE_ETH_SWITCH_DOMAIN_ALLOCATED
|
||||
};
|
||||
|
||||
/**
|
||||
* Array of switch domains available for allocation. Array is sized to
|
||||
* RTE_MAX_ETHPORTS elements as there cannot be more active switch domains than
|
||||
* ethdev ports in a single process.
|
||||
*/
|
||||
struct rte_eth_dev_switch {
|
||||
enum rte_eth_switch_domain_state state;
|
||||
} rte_eth_switch_domains[RTE_MAX_ETHPORTS];
|
||||
|
||||
int __rte_experimental
|
||||
rte_eth_switch_domain_alloc(uint16_t *domain_id)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
*domain_id = RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID;
|
||||
|
||||
for (i = RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID + 1;
|
||||
i < RTE_MAX_ETHPORTS; i++) {
|
||||
if (rte_eth_switch_domains[i].state ==
|
||||
RTE_ETH_SWITCH_DOMAIN_UNUSED) {
|
||||
rte_eth_switch_domains[i].state =
|
||||
RTE_ETH_SWITCH_DOMAIN_ALLOCATED;
|
||||
*domain_id = i;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
int __rte_experimental
|
||||
rte_eth_switch_domain_free(uint16_t domain_id)
|
||||
{
|
||||
if (domain_id == RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID ||
|
||||
domain_id >= RTE_MAX_ETHPORTS)
|
||||
return -EINVAL;
|
||||
|
||||
if (rte_eth_switch_domains[domain_id].state !=
|
||||
RTE_ETH_SWITCH_DOMAIN_ALLOCATED)
|
||||
return -EINVAL;
|
||||
|
||||
rte_eth_switch_domains[domain_id].state = RTE_ETH_SWITCH_DOMAIN_UNUSED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
typedef int (*rte_eth_devargs_callback_t)(char *str, void *data);
|
||||
|
||||
static int
|
||||
|
@ -188,6 +188,43 @@ rte_eth_linkstatus_get(const struct rte_eth_dev *dev,
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @warning
|
||||
* @b EXPERIMENTAL: this API may change without prior notice.
|
||||
*
|
||||
* Allocate an unique switch domain identifier.
|
||||
*
|
||||
* A pool of switch domain identifiers which can be allocated on request. This
|
||||
* will enabled devices which support the concept of switch domains to request
|
||||
* a switch domain id which is guaranteed to be unique from other devices
|
||||
* running in the same process.
|
||||
*
|
||||
* @param domain_id
|
||||
* switch domain identifier parameter to pass back to application
|
||||
*
|
||||
* @return
|
||||
* Negative errno value on error, 0 on success.
|
||||
*/
|
||||
int __rte_experimental
|
||||
rte_eth_switch_domain_alloc(uint16_t *domain_id);
|
||||
|
||||
/**
|
||||
* @warning
|
||||
* @b EXPERIMENTAL: this API may change without prior notice.
|
||||
*
|
||||
* Free switch domain.
|
||||
*
|
||||
* Return a switch domain identifier to the pool of free identifiers after it is
|
||||
* no longer in use by device.
|
||||
*
|
||||
* @param domain_id
|
||||
* switch domain identifier to free
|
||||
*
|
||||
* @return
|
||||
* Negative errno value on error, 0 on success.
|
||||
*/
|
||||
int __rte_experimental
|
||||
rte_eth_switch_domain_free(uint16_t domain_id);
|
||||
|
||||
/** Generic Ethernet device arguments */
|
||||
struct rte_eth_devargs {
|
||||
|
@ -228,6 +228,8 @@ EXPERIMENTAL {
|
||||
rte_eth_dev_owner_unset;
|
||||
rte_eth_dev_rx_offload_name;
|
||||
rte_eth_dev_tx_offload_name;
|
||||
rte_eth_switch_domain_alloc;
|
||||
rte_eth_switch_domain_free;
|
||||
rte_mtr_capabilities_get;
|
||||
rte_mtr_create;
|
||||
rte_mtr_destroy;
|
||||
|
Loading…
Reference in New Issue
Block a user