On Mon, Aug 29, 2022 at 1:45 PM Ganapati Kundapura <ganapati.kundap...@intel.com> wrote: > > Added rte_event_eth_tx_adapter_instance_get() to get the > adapter instance id for specified ethernet device id and > tx queue index. > > Added rte_event_eth_tx_adapter_instance_get() details in > prog_guide/event_ethernet_tx_adapter.rst > > Signed-off-by: Ganapati Kundapura <ganapati.kundap...@intel.com> > > Reviewed-by: Naga Harish K S V <s.v.naga.haris...@intel.com> > Acked-by: Jay Jayatheerthan <jay.jayatheert...@intel.com>
Acked-by: Jerin Jacob <jer...@marvell.com> > > diff --git a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst > b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst > index f80d226..4da9bcd 100644 > --- a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst > +++ b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst > @@ -165,6 +165,12 @@ in struct ``rte_event_eth_tx_adapter_stats``. The > counter values are the sum of > the counts from the eventdev PMD callback if the callback is supported, and > the counts maintained by the service function, if one exists. > > +Getting Adapter instance id > +~~~~~~~~~~~~~~~~~~~~~~~~~~~ > + > +The ``rte_event_eth_tx_adapter_instance_get()`` function reports > +tx adapter instance id for a specified ethernet device id and tx queue index. > + > Tx event vectorization > ~~~~~~~~~~~~~~~~~~~~~~ > > diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h > index c58ba05..f514a37 100644 > --- a/lib/eventdev/eventdev_pmd.h > +++ b/lib/eventdev/eventdev_pmd.h > @@ -1274,6 +1274,27 @@ typedef int (*eventdev_eth_tx_adapter_stats_get_t)( > typedef int (*eventdev_eth_tx_adapter_stats_reset_t)(uint8_t id, > const struct rte_eventdev *dev); > > +/** > + * Get TX adapter instance id for TX queue > + * > + * @param eth_dev_id > + * Port identifier of Ethernet device > + * > + * @param tx_queue_id > + * Ethernet device TX queue index > + * > + * @param[out] txa_inst_id > + * Pointer to TX adapter instance identifier > + * Contains valid Tx adapter instance id when return value is 0 > + * > + * @return > + * - 0: Success > + * - <0: Error code on failure > + */ > +typedef int (*eventdev_eth_tx_adapter_instance_get_t) > + (uint16_t eth_dev_id, uint16_t tx_queue_id, uint8_t *txa_inst_id); > + > + > /** Event device operations function pointer table */ > struct eventdev_ops { > eventdev_info_get_t dev_infos_get; /**< Get device info. */ > @@ -1386,6 +1407,8 @@ struct eventdev_ops { > /**< Get eth Tx adapter statistics */ > eventdev_eth_tx_adapter_stats_reset_t eth_tx_adapter_stats_reset; > /**< Reset eth Tx adapter statistics */ > + eventdev_eth_tx_adapter_instance_get_t eth_tx_adapter_instance_get; > + /**< Get Tx adapter instance id for Tx queue */ > > eventdev_selftest dev_selftest; > /**< Start eventdev Selftest */ > diff --git a/lib/eventdev/rte_event_eth_tx_adapter.c > b/lib/eventdev/rte_event_eth_tx_adapter.c > index b4b37f1..aaef352 100644 > --- a/lib/eventdev/rte_event_eth_tx_adapter.c > +++ b/lib/eventdev/rte_event_eth_tx_adapter.c > @@ -18,6 +18,9 @@ > #define TXA_INVALID_DEV_ID INT32_C(-1) > #define TXA_INVALID_SERVICE_ID INT64_C(-1) > > +#define TXA_ADAPTER_ARRAY "txa_adapter_array" > +#define TXA_SERVICE_DATA_ARRAY "txa_service_data_array" > + > #define txa_evdev(id) (&rte_eventdevs[txa_dev_id_array[(id)]]) > > #define txa_dev_caps_get(id) > txa_evdev((id))->dev_ops->eth_tx_adapter_caps_get > @@ -41,6 +44,9 @@ > > #define txa_dev_stats_get(t) txa_evdev(t)->dev_ops->eth_tx_adapter_stats_get > > +#define txa_dev_instance_get(id) \ > + txa_evdev(id)->dev_ops->eth_tx_adapter_instance_get > + > #define RTE_EVENT_ETH_TX_ADAPTER_ID_VALID_OR_ERR_RET(id, retval) \ > do { \ > if (!txa_valid_id(id)) { \ > @@ -194,12 +200,34 @@ txa_memzone_array_get(const char *name, unsigned int > elt_size, int nb_elems) > } > > static int > +txa_lookup(void) > +{ > + const struct rte_memzone *mz; > + > + if (txa_dev_id_array == NULL) { > + mz = rte_memzone_lookup(TXA_ADAPTER_ARRAY); > + if (mz == NULL) > + return -ENOMEM; > + txa_dev_id_array = mz->addr; > + } > + > + if (txa_service_data_array == NULL) { > + mz = rte_memzone_lookup(TXA_SERVICE_DATA_ARRAY); > + if (mz == NULL) > + return -ENOMEM; > + txa_service_data_array = mz->addr; > + } > + > + return 0; > +} > + > +static int > txa_dev_id_array_init(void) > { > if (txa_dev_id_array == NULL) { > int i; > > - txa_dev_id_array = txa_memzone_array_get("txa_adapter_array", > + txa_dev_id_array = txa_memzone_array_get(TXA_ADAPTER_ARRAY, > sizeof(int), > > RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE); > if (txa_dev_id_array == NULL) > @@ -222,12 +250,18 @@ static int > txa_service_data_init(void) > { > if (txa_service_data_array == NULL) { > + int i; > + > txa_service_data_array = > - > txa_memzone_array_get("txa_service_data_array", > + txa_memzone_array_get(TXA_SERVICE_DATA_ARRAY, > sizeof(*txa_service_data_array), > > RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE); > if (txa_service_data_array == NULL) > return -ENOMEM; > + > + /* Reset the txa service pointers */ > + for (i = 0; i < RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE; i++) > + txa_service_data_array[i] = NULL; > } > > return 0; > @@ -1222,3 +1256,67 @@ rte_event_eth_tx_adapter_stop(uint8_t id) > rte_eventdev_trace_eth_tx_adapter_stop(id, ret); > return ret; > } > + > +int > +rte_event_eth_tx_adapter_instance_get(uint16_t eth_dev_id, > + uint16_t tx_queue_id, > + uint8_t *txa_inst_id) > +{ > + uint8_t id; > + int ret = -EINVAL; > + uint32_t caps; > + struct txa_service_data *txa; > + > + if (txa_lookup()) > + return -ENOMEM; > + > + if (eth_dev_id >= rte_eth_dev_count_avail()) { > + RTE_EDEV_LOG_ERR("Invalid ethernet port id %u", eth_dev_id); > + return -EINVAL; > + } > + > + if (tx_queue_id >= rte_eth_devices[eth_dev_id].data->nb_tx_queues) { > + RTE_EDEV_LOG_ERR("Invalid tx queue id %u", tx_queue_id); > + return -EINVAL; > + } > + > + if (txa_inst_id == NULL) { > + RTE_EDEV_LOG_ERR("txa_instance_id cannot be NULL"); > + return -EINVAL; > + } > + > + /* Iterate through all Tx adapter instances */ > + for (id = 0; id < RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE; id++) { > + txa = txa_service_id_to_data(id); > + if (!txa) > + continue; > + > + caps = 0; > + if (rte_event_eth_tx_adapter_caps_get(txa->eventdev_id, > + eth_dev_id, > + &caps)) > + continue; > + > + if (caps & RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT) { > + ret = txa_dev_instance_get(id) ? > + txa_dev_instance_get(id)(eth_dev_id, > + tx_queue_id, > + txa_inst_id) > + : -EINVAL; > + if (ret == 0) > + return ret; > + } else { > + struct rte_eth_dev *eth_dev; > + > + eth_dev = &rte_eth_devices[eth_dev_id]; > + > + if (txa_service_is_queue_added(txa, eth_dev, > + tx_queue_id)) { > + *txa_inst_id = txa->id; > + return 0; > + } > + } > + } > + > + return -EINVAL; > +} > diff --git a/lib/eventdev/rte_event_eth_tx_adapter.h > b/lib/eventdev/rte_event_eth_tx_adapter.h > index 3908c2d..9432b74 100644 > --- a/lib/eventdev/rte_event_eth_tx_adapter.h > +++ b/lib/eventdev/rte_event_eth_tx_adapter.h > @@ -34,6 +34,7 @@ > * - rte_event_eth_tx_adapter_enqueue() > * - rte_event_eth_tx_adapter_event_port_get() > * - rte_event_eth_tx_adapter_service_id_get() > + * - rte_event_eth_tx_adapter_instance_get() > * > * The application creates the adapter using > * rte_event_eth_tx_adapter_create() or > rte_event_eth_tx_adapter_create_ext(). > @@ -423,6 +424,29 @@ rte_event_eth_tx_adapter_stats_reset(uint8_t id); > int > rte_event_eth_tx_adapter_service_id_get(uint8_t id, uint32_t *service_id); > > +/** > + * Get TX adapter instance id for TX queue > + * > + * @param eth_dev_id > + * Port identifier of Ethernet device > + * > + * @param tx_queue_id > + * Etherdev device TX queue index > + * > + * @param[out] txa_inst_id > + * Pointer to TX adapter instance identifier > + * Contains valid Tx adapter instance id when return value is 0 > + * > + * @return > + * - 0: Success > + * - <0: Error code on failure > + */ > +__rte_experimental > +int > +rte_event_eth_tx_adapter_instance_get(uint16_t eth_dev_id, > + uint16_t tx_queue_id, > + uint8_t *txa_inst_id); > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map > index 0066187..9a71cf3 100644 > --- a/lib/eventdev/version.map > +++ b/lib/eventdev/version.map > @@ -115,6 +115,7 @@ EXPERIMENTAL { > > # added in 22.11 > rte_event_eth_rx_adapter_instance_get; > + rte_event_eth_tx_adapter_instance_get; > }; > > INTERNAL { > -- > 2.6.4 >