From 5be6a3605b8818f84b427ecba6080a690f2c3cc9 Mon Sep 17 00:00:00 2001 From: Qi Zhang Date: Thu, 3 May 2018 14:03:25 +0800 Subject: [PATCH] ethdev: convert Tx offloads to Tx queue config Tx offload will be converted to txq_flags automatically during rte_eth_dev_info_get and rte_eth_tx_queue_info_get. So PMD can clean the code to get rid of txq_flags at all while keep old APP not be impacted. Signed-off-by: Qi Zhang Tested-by: Andrew Rybchenko Acked-by: Konstantin Ananyev --- lib/librte_ethdev/rte_ethdev.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index e5605242db..a357ee09f6 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1515,6 +1515,30 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id, return eth_err(port_id, ret); } +/** + * Convert from tx offloads to txq_flags. + */ +static void +rte_eth_convert_tx_offload(const uint64_t tx_offloads, uint32_t *txq_flags) +{ + uint32_t flags = 0; + + if (!(tx_offloads & DEV_TX_OFFLOAD_MULTI_SEGS)) + flags |= ETH_TXQ_FLAGS_NOMULTSEGS; + if (!(tx_offloads & DEV_TX_OFFLOAD_VLAN_INSERT)) + flags |= ETH_TXQ_FLAGS_NOVLANOFFL; + if (!(tx_offloads & DEV_TX_OFFLOAD_SCTP_CKSUM)) + flags |= ETH_TXQ_FLAGS_NOXSUMSCTP; + if (!(tx_offloads & DEV_TX_OFFLOAD_UDP_CKSUM)) + flags |= ETH_TXQ_FLAGS_NOXSUMUDP; + if (!(tx_offloads & DEV_TX_OFFLOAD_TCP_CKSUM)) + flags |= ETH_TXQ_FLAGS_NOXSUMTCP; + if (tx_offloads & DEV_TX_OFFLOAD_MBUF_FAST_FREE) + flags |= ETH_TXQ_FLAGS_NOREFCOUNT | ETH_TXQ_FLAGS_NOMULTMEMP; + + *txq_flags = flags; +} + /** * A conversion function from txq_flags API. */ @@ -2359,6 +2383,7 @@ void rte_eth_dev_info_get(uint16_t port_id, struct rte_eth_dev_info *dev_info) { struct rte_eth_dev *dev; + struct rte_eth_txconf *txconf; const struct rte_eth_desc_lim lim = { .nb_max = UINT16_MAX, .nb_min = 0, @@ -2380,6 +2405,9 @@ rte_eth_dev_info_get(uint16_t port_id, struct rte_eth_dev_info *dev_info) dev_info->nb_tx_queues = dev->data->nb_tx_queues; dev_info->dev_flags = &dev->data->dev_flags; + txconf = &dev_info->default_txconf; + /* convert offload to txq_flags to support legacy app */ + rte_eth_convert_tx_offload(txconf->offloads, &txconf->txq_flags); } int @@ -3799,6 +3827,7 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, struct rte_eth_txq_info *qinfo) { struct rte_eth_dev *dev; + struct rte_eth_txconf *txconf = &qinfo->conf; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); @@ -3815,6 +3844,9 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, memset(qinfo, 0, sizeof(*qinfo)); dev->dev_ops->txq_info_get(dev, queue_id, qinfo); + /* convert offload to txq_flags to support legacy app */ + rte_eth_convert_tx_offload(txconf->offloads, &txconf->txq_flags); + return 0; } -- 2.20.1