net/e1000: convert to new Rx/Tx offloads API
cover net/e1000: convert to new Rx/Tx offloads API
This patch set convert net/e1000 to new Rx/Tx offloads API. All Rx offloads are per port features.
All Tx offloads of e1000 are per queue and also per packet as they are enabled in Tx descriptor.
In the new offload API, per queue offload only need to be set in queue_setup(). So if the maimum number of queues is only one in Rx or Tx path, let all offloads in the path are per queue for better convenience.
Wei Dai (2):
net/e1000: convert to new Rx offloads API
net/e1000: convert to new Tx offloads API
drivers/net/e1000/em_ethdev.c | 33 +++++++++++++++----- drivers/net/e1000/em_rxtx.c | 30 +++++++++++------- drivers/net/e1000/igb_ethdev.c | 57 +++++++++++++++++++++++----------- drivers/net/e1000/igb_rxtx.c | 69 +++++++++++++++++++++++++++++++++--------- 4 files changed, 138 insertions(+), 51 deletions(-)
Signature · 1 line
2.9.4
PATCH 1/2 net/e1000: convert to new Rx offloads API
Ethdev Rx offloads API has changed since:
commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") This commit support the new Rx offloads API.
--- drivers/net/e1000/em_ethdev.c | 32 +++++++++++++++----- drivers/net/e1000/em_rxtx.c | 27 ++++++++++------- drivers/net/e1000/igb_ethdev.c | 53 +++++++++++++++++++++------------ drivers/net/e1000/igb_rxtx.c | 66 +++++++++++++++++++++++++++++++++--------- 4 files changed, 127 insertions(+), 51 deletions(-)
drivers/net/e1000/em_ethdev.c +24 -8
@@ -1105,15 +1105,26 @@ eth_em_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->max_rx_pktlen =em_get_max_pktlen (hw); dev_info->max_mac_addrs = hw->mac.rar_entry_count; dev_info->rx_offload_capa = -DEV_RX_OFFLOAD_VLAN_STRIP | -DEV_RX_OFFLOAD_IPV4_CKSUM | -DEV_RX_OFFLOAD_UDP_CKSUM | -DEV_RX_OFFLOAD_TCP_CKSUM ; +DEV_RX_OFFLOAD_VLAN_STRIP | +DEV_RX_OFFLOAD_VLAN_FILTER | +DEV_RX_OFFLOAD_IPV4_CKSUM | +DEV_RX_OFFLOAD_UDP_CKSUM | +DEV_RX_OFFLOAD_TCP_CKSUM | +DEV_RX_OFFLOAD_CRC_STRIP | +DEV_RX_OFFLOAD_SCATTER ; +if (dev_info->max_rx_pktlen >ETHER_MAX_LEN ) + dev_info->rx_offload_capa |=DEV_RX_OFFLOAD_JUMBO_FRAME ; dev_info->tx_offload_capa =DEV_TX_OFFLOAD_VLAN_INSERT |DEV_TX_OFFLOAD_IPV4_CKSUM |DEV_TX_OFFLOAD_UDP_CKSUM |DEV_TX_OFFLOAD_TCP_CKSUM ; +/* +* As only one Rx/Tx queue can be used, let per queue offloading +* capability be same to per port queue offloading capability +* for better compatibility. +*/ + dev_info->rx_queue_offload_capa = dev_info->rx_offload_capa;/* * Starting with 631xESB hw supports 2 TX/RX queues per port.
@@ -1460,15 +1471,18 @@ em_vlan_hw_strip_enable(struct rte_eth_dev *dev)static int eth_em_vlan_offload_set (struct rte_eth_dev *dev,int mask) { +struct rte_eth_rxmode *rxmode; + + rxmode = &dev->data->dev_conf.rxmode;if (mask Ð_VLAN_STRIP_MASK ){ -if (dev->data->dev_conf.rxmode.hw_vlan_strip) +if (rxmode->offloads &DEV_RX_OFFLOAD_VLAN_STRIP )em_vlan_hw_strip_enable (dev);else em_vlan_hw_strip_disable (dev); }if (mask Ð_VLAN_FILTER_MASK ){ -if (dev->data->dev_conf.rxmode.hw_vlan_filter) +if (rxmode->offloads &DEV_RX_OFFLOAD_VLAN_FILTER )em_vlan_hw_filter_enable (dev);else em_vlan_hw_filter_disable (dev);
@@ -1835,10 +1849,12 @@ eth_em_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)/* switch to jumbo mode if needed */ if (frame_size >ETHER_MAX_LEN ) { - dev->data->dev_conf.rxmode.jumbo_frame =1 ; + dev->data->dev_conf.rxmode.offloads |= +DEV_RX_OFFLOAD_JUMBO_FRAME ; rctl |=E1000_RCTL_LPE ; }else { - dev->data->dev_conf.rxmode.jumbo_frame =0 ; + dev->data->dev_conf.rxmode.offloads &= + ~DEV_RX_OFFLOAD_JUMBO_FRAME ; rctl &= ~E1000_RCTL_LPE ; }E1000_WRITE_REG (hw,E1000_RCTL , rctl);
drivers/net/e1000/em_rxtx.c +16 -11
@@ -85,6 +85,7 @@ struct em_rx_queue {struct em_rx_entry *sw_ring;/**< address of RX software ring. */ struct rte_mbuf *pkt_first_seg;/**< First segment of current packet. */ struct rte_mbuf *pkt_last_seg;/**< Last segment of current packet. */ +uint64_t offloads;/**< Offloads of DEV_RX_OFFLOAD_* */ uint16_t nb_rx_desc;/**< number of RX descriptors. */ uint16_t rx_tail;/**< current value of RDT register. */ uint16_t nb_rx_hold;/**< number of held free RX desc. */
@@ -1382,8 +1383,8 @@ eth_em_rx_queue_setup(struct rte_eth_dev *dev, rxq->rx_free_thresh = rx_conf->rx_free_thresh; rxq->queue_id = queue_idx; rxq->port_id = dev->data->port_id; - rxq->crc_len = (uint8_t ) ((dev->data->dev_conf.rxmode.hw_strip_crc) ? -0 :ETHER_CRC_LEN ); + rxq->crc_len = (uint8_t )((dev->data->dev_conf.rxmode.offloads & +DEV_RX_OFFLOAD_CRC_STRIP ) ?0 :ETHER_CRC_LEN ); rxq->rdt_reg_addr =E1000_PCI_REG_ADDR (hw,E1000_RDT (queue_idx)); rxq->rdh_reg_addr =E1000_PCI_REG_ADDR (hw,E1000_RDH (queue_idx));
@@ -1395,6 +1396,7 @@ eth_em_rx_queue_setup(struct rte_eth_dev *dev, dev->data->rx_queues[queue_idx] = rxq;em_reset_rx_queue (rxq); + rxq->offloads = rx_conf->offloads;return 0 ; }
@@ -1646,6 +1648,7 @@ eth_em_rx_init(struct rte_eth_dev *dev) {struct e1000_hw *hw;struct em_rx_queue *rxq; +struct rte_eth_rxmode *rxmode;uint32_t rctl;uint32_t rfctl;uint32_t rxcsum;
@@ -1654,6 +1657,7 @@ eth_em_rx_init(struct rte_eth_dev *dev)int ret; hw =E1000_DEV_PRIVATE_TO_HW (dev->data->dev_private); + rxmode = &dev->data->dev_conf.rxmode;/* * Make sure receives are disabled while setting
@@ -1714,8 +1718,8 @@ eth_em_rx_init(struct rte_eth_dev *dev)* call to configure */ rxq->crc_len = - (uint8_t )(dev->data->dev_conf.rxmode.hw_strip_crc ? -0 :ETHER_CRC_LEN ); + (uint8_t )(dev->data->dev_conf.rxmode.offloads & +DEV_RX_OFFLOAD_CRC_STRIP ?0 :ETHER_CRC_LEN ); bus_addr = rxq->rx_ring_phys_addr; E1000_WRITE_REG(hw, E1000_RDLEN(i),
@@ -1745,7 +1749,7 @@ eth_em_rx_init(struct rte_eth_dev *dev)* to avoid splitting packets that don't fit into * one buffer. */ -if (dev->data->dev_conf.rxmode.jumbo_frame || +if (rxmode->offloads &DEV_RX_OFFLOAD_JUMBO_FRAME || rctl_bsize <ETHER_MAX_LEN ) {if (!dev->data->scattered_rx)PMD_INIT_LOG (DEBUG ,"forcing scatter mode" );
@@ -1755,7 +1759,7 @@ eth_em_rx_init(struct rte_eth_dev *dev) } } -if (dev->data->dev_conf.rxmode.enable_scatter) { +if (dev->data->dev_conf.rxmode.offloads &DEV_RX_OFFLOAD_SCATTER ) {if (!dev->data->scattered_rx)PMD_INIT_LOG (DEBUG ,"forcing scatter mode" ); dev->rx_pkt_burst = eth_em_recv_scattered_pkts;
@@ -1768,7 +1772,7 @@ eth_em_rx_init(struct rte_eth_dev *dev)*/ rxcsum =E1000_READ_REG (hw,E1000_RXCSUM ); -if (dev->data->dev_conf.rxmode.hw_ip_checksum) +if (rxmode->offloads &DEV_RX_OFFLOAD_CHECKSUM ) rxcsum |=E1000_RXCSUM_IPOFL ;else rxcsum &= ~E1000_RXCSUM_IPOFL ;
@@ -1780,21 +1784,21 @@ eth_em_rx_init(struct rte_eth_dev *dev)if ((hw->mac.type == e1000_ich9lan || hw->mac.type == e1000_pch2lan || hw->mac.type == e1000_ich10lan) && - dev->data->dev_conf.rxmode.jumbo_frame ==1 ) { + rxmode->offloads &DEV_RX_OFFLOAD_JUMBO_FRAME ) {u32 rxdctl =E1000_READ_REG (hw,E1000_RXDCTL (0 ));E1000_WRITE_REG (hw,E1000_RXDCTL (0 ), rxdctl |3 );E1000_WRITE_REG (hw,E1000_ERT ,0x100 | (1 <<13 )); }if (hw->mac.type == e1000_pch2lan) { -if (dev->data->dev_conf.rxmode.jumbo_frame ==1 ) +if (rxmode->offloads &DEV_RX_OFFLOAD_JUMBO_FRAME )e1000_lv_jumbo_workaround_ich8lan (hw, TRUE);else e1000_lv_jumbo_workaround_ich8lan (hw, FALSE); }/* Setup the Receive Control Register. */ -if (dev->data->dev_conf.rxmode.hw_strip_crc) +if (dev->data->dev_conf.rxmode.offloads &DEV_RX_OFFLOAD_CRC_STRIP ) rctl |=E1000_RCTL_SECRC ;/* Strip Ethernet CRC. */ else rctl &= ~E1000_RCTL_SECRC ;/* Do not Strip Ethernet CRC. */
@@ -1814,7 +1818,7 @@ eth_em_rx_init(struct rte_eth_dev *dev)/* * Configure support of jumbo frames, if any. */ -if (dev->data->dev_conf.rxmode.jumbo_frame ==1 ) +if (rxmode->offloads &DEV_RX_OFFLOAD_JUMBO_FRAME ) rctl |=E1000_RCTL_LPE ;else rctl &= ~E1000_RCTL_LPE ;
@@ -1894,6 +1898,7 @@ em_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id, qinfo->scattered_rx = dev->data->scattered_rx; qinfo->nb_desc = rxq->nb_rx_desc; qinfo->conf.rx_free_thresh = rxq->rx_free_thresh; + qinfo->conf.offloads = rxq->offloads; }void
drivers/net/e1000/igb_ethdev.c +35 -18
137 lines not on this page · raw message
drivers/net/e1000/igb_rxtx.c +52 -14
145 lines not on this page · raw message
Signature · 1 line
2.9.4
PATCH 2/2 net/e1000: convert to new Tx offloads API
In reply to Wei DaiEthdev Tx offloads API has changed since:
commit cba7f53b717d ("ethdev: introduce Tx queue offloads API") This commit support the new Tx offloads API.
--- drivers/net/e1000/em_ethdev.c | 1 + drivers/net/e1000/em_rxtx.c | 3 +++ drivers/net/e1000/igb_ethdev.c | 4 ++++ drivers/net/e1000/igb_rxtx.c | 3 +++ 4 files changed, 11 insertions(+)
drivers/net/e1000/em_ethdev.c +1 -0
@@ -1125,6 +1125,7 @@ eth_em_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)* for better compatibility. */ dev_info->rx_queue_offload_capa = dev_info->rx_offload_capa; + dev_info->tx_queue_offload_capa = dev_info->tx_offload_capa;/* * Starting with 631xESB hw supports 2 TX/RX queues per port.
drivers/net/e1000/em_rxtx.c +3 -0
@@ -164,6 +164,7 @@ struct em_tx_queue {uint8_t wthresh;/**< Write-back threshold register. */ struct em_ctx_info ctx_cache;/**< Hardware context history.*/ +uint64_t offloads;/**< offloads of DEV_TX_OFFLOAD_* */ };#if 1
@@ -1270,6 +1271,7 @@ eth_em_tx_queue_setup(struct rte_eth_dev *dev,em_reset_tx_queue (txq); dev->data->tx_queues[queue_idx] = txq; + txq->offloads = tx_conf->offloads;return 0 ; }
@@ -1916,4 +1918,5 @@ em_txq_info_get(struct rte_eth_dev *dev, uint16_t queue_id, qinfo->conf.tx_thresh.wthresh = txq->wthresh; qinfo->conf.tx_free_thresh = txq->tx_free_thresh; qinfo->conf.tx_rs_thresh = txq->tx_rs_thresh; + qinfo->conf.offloads = txq->offloads; }
drivers/net/e1000/igb_ethdev.c +4 -0
@@ -2217,6 +2217,7 @@ eth_igb_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)DEV_TX_OFFLOAD_TCP_CKSUM |DEV_TX_OFFLOAD_SCTP_CKSUM |DEV_TX_OFFLOAD_TCP_TSO ; + dev_info->tx_queue_offload_capa = dev_info->tx_offload_capa;switch (hw->mac.type) {case e1000_82575:
@@ -2289,6 +2290,7 @@ eth_igb_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) .wthresh = IGB_DEFAULT_TX_WTHRESH, }, .txq_flags = 0, + .offloads = 0, }; dev_info->rx_desc_lim = rx_desc_lim;
@@ -2348,6 +2350,7 @@ eth_igbvf_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)DEV_TX_OFFLOAD_TCP_CKSUM |DEV_TX_OFFLOAD_SCTP_CKSUM |DEV_TX_OFFLOAD_TCP_TSO ; + dev_info->tx_queue_offload_capa = dev_info->tx_offload_capa;switch (hw->mac.type) {case e1000_vfadapt: dev_info->max_rx_queues =2 ;
@@ -2382,6 +2385,7 @@ eth_igbvf_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) .wthresh = IGB_DEFAULT_TX_WTHRESH, }, .txq_flags = 0, + .offloads = 0, }; dev_info->rx_desc_lim = rx_desc_lim;
drivers/net/e1000/igb_rxtx.c +3 -0
@@ -181,6 +181,7 @@ struct igb_tx_queue {/**< Start context position for transmit queue. */ struct igb_advctx_info ctx_cache[IGB_CTX_NUM ];/**< Hardware context history.*/ +uint64_t offloads;/**< offloads of DEV_TX_OFFLOAD_* */ };#if 1
@@ -1543,6 +1544,7 @@ eth_igb_tx_queue_setup(struct rte_eth_dev *dev, dev->tx_pkt_burst = eth_igb_xmit_pkts; dev->tx_pkt_prepare = ð_igb_prep_pkts; dev->data->tx_queues[queue_idx] = txq; + txq->offloads = tx_conf->offloads;return 0 ; }
@@ -2794,6 +2796,7 @@ igb_txq_info_get(struct rte_eth_dev *dev, uint16_t queue_id, qinfo->conf.tx_thresh.pthresh = txq->pthresh; qinfo->conf.tx_thresh.hthresh = txq->hthresh; qinfo->conf.tx_thresh.wthresh = txq->wthresh; + qinfo->conf.offloads = txq->offloads; }int
Signature · 1 line
2.9.4
v2 cover net/e1000: convert to new Rx/Tx offloads API
In reply to Wei DaiThis patch set convert net/e1000 to new Rx/Tx offloads API. All Rx offloads are per port features.
All Tx offloads of e1000 are per queue and also per packet as they are enabled in Tx descriptor.
In the new offload API, per queue offload only need to be set in queue_setup(). So if the maimum number of queues is only one in Rx or Tx path, let all offloads in the path are per queue for better convenience.
---
v2: add offloads checking
Wei Dai (2):
net/e1000: convert to new Rx offloads API
net/e1000: convert to new Tx offloads API
drivers/net/e1000/e1000_ethdev.h | 14 ++++ drivers/net/e1000/em_ethdev.c | 58 ++++++++++---- drivers/net/e1000/em_rxtx.c | 155 +++++++++++++++++++++++++++++++++--- drivers/net/e1000/igb_ethdev.c | 60 +++++++------- drivers/net/e1000/igb_rxtx.c | 167 +++++++++++++++++++++++++++++++++++---- 5 files changed, 385 insertions(+), 69 deletions(-)
Signature · 1 line
2.9.5
PATCH v2 1/2 net/e1000: convert to new Rx offloads API
Ethdev Rx offloads API has changed since:
commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") This commit support the new Rx offloads API.
--- drivers/net/e1000/e1000_ethdev.h | 8 +++ drivers/net/e1000/em_ethdev.c | 42 ++++++++++----- drivers/net/e1000/em_rxtx.c | 93 +++++++++++++++++++++++++++++---- drivers/net/e1000/igb_ethdev.c | 45 +++++++++------- drivers/net/e1000/igb_rxtx.c | 109 ++++++++++++++++++++++++++++++++++----- 5 files changed, 240 insertions(+), 57 deletions(-)
drivers/net/e1000/e1000_ethdev.h +8 -0
@@ -357,6 +357,9 @@ void eth_igb_rx_queue_release(void *rxq);void igb_dev_clear_queues (struct rte_eth_dev *dev);void igb_dev_free_queues (struct rte_eth_dev *dev); +uint64_t igb_get_rx_port_offloads_capa (struct rte_eth_dev *dev); +uint64_t igb_get_rx_queue_offloads_capa (struct rte_eth_dev *dev); + int eth_igb_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, uint16_t nb_rx_desc, unsigned int socket_id, const struct rte_eth_rxconf *rx_conf,
@@ -417,6 +420,8 @@ void igb_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,void igb_txq_info_get (struct rte_eth_dev *dev,uint16_t queue_id,struct rte_eth_txq_info *qinfo); +uint32_t em_get_max_pktlen (struct rte_eth_dev *dev); +/* * RX/TX EM function prototypes */
@@ -426,6 +431,9 @@ void eth_em_rx_queue_release(void *rxq);void em_dev_clear_queues (struct rte_eth_dev *dev);void em_dev_free_queues (struct rte_eth_dev *dev); +uint64_t em_get_rx_port_offloads_capa (struct rte_eth_dev *dev); +uint64_t em_get_rx_queue_offloads_capa (struct rte_eth_dev *dev); + int eth_em_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, uint16_t nb_rx_desc, unsigned int socket_id, const struct rte_eth_rxconf *rx_conf,
drivers/net/e1000/em_ethdev.c +30 -12
92 lines not on this page · raw message
drivers/net/e1000/em_rxtx.c +82 -11
189 lines not on this page · raw message
drivers/net/e1000/igb_ethdev.c +25 -20
124 lines not on this page · raw message
drivers/net/e1000/igb_rxtx.c +95 -14
188 lines not on this page · raw message
Signature · 1 line
2.9.5
PATCH v2 2/2 net/e1000: convert to new Tx offloads API
In reply to Wei DaiEthdev Tx offloads API has changed since:
commit cba7f53b717d ("ethdev: introduce Tx queue offloads API") This commit support the new Tx offloads API.
--- drivers/net/e1000/e1000_ethdev.h | 6 ++++ drivers/net/e1000/em_ethdev.c | 16 +++++++---- drivers/net/e1000/em_rxtx.c | 62 ++++++++++++++++++++++++++++++++++++++++ drivers/net/e1000/igb_ethdev.c | 15 +++++----- drivers/net/e1000/igb_rxtx.c | 58 +++++++++++++++++++++++++++++++++++++ 5 files changed, 145 insertions(+), 12 deletions(-)
drivers/net/e1000/e1000_ethdev.h +6 -0
@@ -373,6 +373,9 @@ int eth_igb_rx_descriptor_done(void *rx_queue, uint16_t offset);int eth_igb_rx_descriptor_status (void *rx_queue,uint16_t offset);int eth_igb_tx_descriptor_status (void *tx_queue,uint16_t offset); +uint64_t igb_get_tx_port_offloads_capa (struct rte_eth_dev *dev); +uint64_t igb_get_tx_queue_offloads_capa (struct rte_eth_dev *dev); +int eth_igb_tx_queue_setup (struct rte_eth_dev *dev,uint16_t tx_queue_id,uint16_t nb_tx_desc,unsigned int socket_id,const struct rte_eth_txconf *tx_conf);
@@ -447,6 +450,9 @@ int eth_em_rx_descriptor_done(void *rx_queue, uint16_t offset);int eth_em_rx_descriptor_status (void *rx_queue,uint16_t offset);int eth_em_tx_descriptor_status (void *tx_queue,uint16_t offset); +uint64_t em_get_tx_port_offloads_capa (struct rte_eth_dev *dev); +uint64_t em_get_tx_queue_offloads_capa (struct rte_eth_dev *dev); +int eth_em_tx_queue_setup (struct rte_eth_dev *dev,uint16_t tx_queue_id,uint16_t nb_tx_desc,unsigned int socket_id,const struct rte_eth_txconf *tx_conf);
drivers/net/e1000/em_ethdev.c +11 -5
@@ -453,6 +453,7 @@ eth_em_configure(struct rte_eth_dev *dev)E1000_DEV_PRIVATE_TO_INTR (dev->data->dev_private);struct rte_eth_dev_info dev_info;uint64_t rx_offloads; +uint64_t tx_offloads;PMD_INIT_FUNC_TRACE (); intr->flags |=E1000_FLAG_NEED_LINK_UPDATE ;
@@ -465,6 +466,13 @@ eth_em_configure(struct rte_eth_dev *dev) rx_offloads, dev_info.rx_offload_capa);return -ENOTSUP ; } + tx_offloads = dev->data->dev_conf.txmode.offloads; +if ((tx_offloads & dev_info.tx_offload_capa) != tx_offloads) { +PMD_DRV_LOG (ERR ,"Some Tx offloads are not supported " +"requested 0x%" PRIx64" supported 0x%" PRIx64, + tx_offloads, dev_info.tx_offload_capa); +return -ENOTSUP ; + }PMD_INIT_FUNC_TRACE ();
@@ -1066,11 +1074,6 @@ eth_em_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->min_rx_bufsize =256 ;/* See BSIZE field of RCTL register. */ dev_info->max_rx_pktlen =em_get_max_pktlen (dev); dev_info->max_mac_addrs = hw->mac.rar_entry_count; - dev_info->tx_offload_capa = -DEV_TX_OFFLOAD_VLAN_INSERT | -DEV_TX_OFFLOAD_IPV4_CKSUM | -DEV_TX_OFFLOAD_UDP_CKSUM | -DEV_TX_OFFLOAD_TCP_CKSUM ;/* * Starting with 631xESB hw supports 2 TX/RX queues per port.
@@ -1095,6 +1098,9 @@ eth_em_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->rx_queue_offload_capa =em_get_rx_queue_offloads_capa (dev); dev_info->rx_offload_capa =em_get_rx_port_offloads_capa (dev) | dev_info->rx_queue_offload_capa; + dev_info->tx_queue_offload_capa =em_get_tx_queue_offloads_capa (dev); + dev_info->tx_offload_capa =em_get_tx_port_offloads_capa (dev) | + dev_info->tx_queue_offload_capa; dev_info->rx_desc_lim = (struct rte_eth_desc_lim ) { .nb_max =E1000_MAX_RING_DESC ,
drivers/net/e1000/em_rxtx.c +62 -0
90 lines not on this page · raw message
drivers/net/e1000/igb_ethdev.c +8 -7
@@ -2151,13 +2151,9 @@ eth_igb_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->rx_queue_offload_capa =igb_get_rx_queue_offloads_capa (dev); dev_info->rx_offload_capa =igb_get_rx_port_offloads_capa (dev) | dev_info->rx_queue_offload_capa; - dev_info->tx_offload_capa = -DEV_TX_OFFLOAD_VLAN_INSERT | -DEV_TX_OFFLOAD_IPV4_CKSUM | -DEV_TX_OFFLOAD_UDP_CKSUM | -DEV_TX_OFFLOAD_TCP_CKSUM | -DEV_TX_OFFLOAD_SCTP_CKSUM | -DEV_TX_OFFLOAD_TCP_TSO ; + dev_info->tx_queue_offload_capa =igb_get_tx_queue_offloads_capa (dev); + dev_info->tx_offload_capa =igb_get_tx_port_offloads_capa (dev) | + dev_info->tx_queue_offload_capa;switch (hw->mac.type) {case e1000_82575:
@@ -2230,6 +2226,7 @@ eth_igb_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) .wthresh = IGB_DEFAULT_TX_WTHRESH, }, .txq_flags = 0, + .offloads = 0, }; dev_info->rx_desc_lim = rx_desc_lim;
@@ -2299,6 +2296,9 @@ eth_igbvf_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->rx_queue_offload_capa =igb_get_rx_queue_offloads_capa (dev); dev_info->rx_offload_capa =igb_get_rx_port_offloads_capa (dev) | dev_info->rx_queue_offload_capa; + dev_info->tx_queue_offload_capa =igb_get_tx_queue_offloads_capa (dev); + dev_info->tx_offload_capa =igb_get_tx_port_offloads_capa (dev) | + dev_info->tx_queue_offload_capa; dev_info->default_rxconf = (struct rte_eth_rxconf ) { .rx_thresh = {
@@ -2318,6 +2318,7 @@ eth_igbvf_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) .wthresh = IGB_DEFAULT_TX_WTHRESH, }, .txq_flags = 0, + .offloads = 0, }; dev_info->rx_desc_lim = rx_desc_lim;
drivers/net/e1000/igb_rxtx.c +58 -0
88 lines not on this page · raw message
Signature · 1 line
2.9.5
Quoted 34 lines
-----Original Message-----
From: Dai, Wei
Sent: Tuesday, April 3, 2018 10:55 AM
To: Lu, Wenzhuo <[email protected]>; Zhang, Qi Z <[email protected]>
Cc: [email protected]; Dai, Wei <[email protected]>
Subject: [PATCH v2 0/2] net/e1000: convert to new Rx/Tx offloads APIThis patch set convert net/e1000 to new Rx/Tx offloads API.
All Rx offloads are per port features.
All Tx offloads of e1000 are per queue and also per packet as they are enabled in Tx descriptor.
In the new offload API, per queue offload only need to be set inqueue_setup(). So if the maimum number of queues is only one in Rx or Tx path, let all offloads in the path are per queue for better convenience.---
v2: add offloads checkingWei Dai (2):
net/e1000: convert to new Rx offloads API
net/e1000: convert to new Tx offloads APIdrivers/net/e1000/e1000_ethdev.h | 14 ++++ drivers/net/e1000/em_ethdev.c | 58 ++++++++++---- drivers/net/e1000/em_rxtx.c | 155 +++++++++++++++++++++++++++++++++--- drivers/net/e1000/igb_ethdev.c | 60 +++++++------- drivers/net/e1000/igb_rxtx.c | 167 +++++++++++++++++++++++++++++++++++---- 5 files changed, 385 insertions(+), 69 deletions(-)
Quoted 2 lines
--
2.9.5
Quoted 45 lines
-----Original Message-----
From: dev [mailto:[email protected]] On Behalf Of Zhang, Qi Z
Sent: Tuesday, April 3, 2018 9:42 PM
To: Dai, Wei; Lu, Wenzhuo
Cc: [email protected]
Subject: Re: [dpdk-dev] [PATCH v2 0/2] net/e1000: convert to new Rx/Tx offloads APIQuoted 33 lines
-----Original Message-----
From: Dai, Wei
Sent: Tuesday, April 3, 2018 10:55 AM
To: Lu, Wenzhuo <[email protected]>; Zhang, Qi Z <[email protected]>
Cc: [email protected]; Dai, Wei <[email protected]>
Subject: [PATCH v2 0/2] net/e1000: convert to new Rx/Tx offloads APIThis patch set convert net/e1000 to new Rx/Tx offloads API.
All Rx offloads are per port features.
All Tx offloads of e1000 are per queue and also per packet as they are enabled in Tx descriptor.
In the new offload API, per queue offload only need to be set inqueue_setup(). So if the maimum number of queues is only one in Rx or Tx path, let all offloads in the path are per queue for better convenience.---
v2: add offloads checkingWei Dai (2):
net/e1000: convert to new Rx offloads API
net/e1000: convert to new Tx offloads APIdrivers/net/e1000/e1000_ethdev.h | 14 ++++ drivers/net/e1000/em_ethdev.c | 58 ++++++++++---- drivers/net/e1000/em_rxtx.c | 155 +++++++++++++++++++++++++++++++++--- drivers/net/e1000/igb_ethdev.c | 60 +++++++------- drivers/net/e1000/igb_rxtx.c | 167 +++++++++++++++++++++++++++++++++++---- 5 files changed, 385 insertions(+), 69 deletions(-)
Quoted 4 lines
Quoted 2 lines
--
2.9.5Acked-by Qi Zhang <[email protected]>
Series applied to dpdk-next-net-intel, thanks!
/Helin