X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fatlantic%2Fatl_rxtx.c;h=449ffd454d5a87a3001251830c5a4a17cf7cee72;hb=a3147ae9aff9d7fd8644083d7d9f87ba9cabc524;hp=fbd50a766098767cc895b365718154c53a7c4abf;hpb=391de3291db4e80723df55cb8040d05c15cc0e0b;p=dpdk.git diff --git a/drivers/net/atlantic/atl_rxtx.c b/drivers/net/atlantic/atl_rxtx.c index fbd50a7660..449ffd454d 100644 --- a/drivers/net/atlantic/atl_rxtx.c +++ b/drivers/net/atlantic/atl_rxtx.c @@ -21,6 +21,8 @@ #define ATL_TX_OFFLOAD_MASK ( \ PKT_TX_VLAN | \ + PKT_TX_IPV6 | \ + PKT_TX_IPV4 | \ PKT_TX_IP_CKSUM | \ PKT_TX_L4_MASK | \ PKT_TX_TCP_SEG) @@ -336,6 +338,7 @@ int atl_rx_init(struct rte_eth_dev *eth_dev) { struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); + struct aq_rss_parameters *rss_params = &hw->aq_nic_cfg->aq_rss; struct atl_rx_queue *rxq; uint64_t base_addr = 0; int i = 0; @@ -379,6 +382,10 @@ atl_rx_init(struct rte_eth_dev *eth_dev) } } + for (i = rss_params->indirection_table_size; i--;) + rss_params->indirection_table[i] = i & + (eth_dev->data->nb_rx_queues - 1); + hw_atl_b0_hw_rss_set(hw, rss_params); return err; } @@ -805,25 +812,25 @@ atl_prep_pkts(__rte_unused void *tx_queue, struct rte_mbuf **tx_pkts, ol_flags = m->ol_flags; if (m->nb_segs > AQ_HW_MAX_SEGS_SIZE) { - rte_errno = -EINVAL; + rte_errno = EINVAL; return i; } if (ol_flags & ATL_TX_OFFLOAD_NOTSUP_MASK) { - rte_errno = -ENOTSUP; + rte_errno = ENOTSUP; return i; } #ifdef RTE_LIBRTE_ETHDEV_DEBUG ret = rte_validate_tx_offload(m); if (ret != 0) { - rte_errno = ret; + rte_errno = -ret; return i; } #endif ret = rte_net_intel_cksum_prepare(m); if (ret != 0) { - rte_errno = ret; + rte_errno = -ret; return i; } } @@ -914,6 +921,8 @@ atl_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) struct atl_adapter *adapter = ATL_DEV_TO_ADAPTER(&rte_eth_devices[rxq->port_id]); struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(adapter); + struct aq_hw_cfg_s *cfg = + ATL_DEV_PRIVATE_TO_CFG(dev->data->dev_private); struct atl_rx_entry *sw_ring = rxq->sw_ring; struct rte_mbuf *new_mbuf; @@ -937,7 +946,7 @@ atl_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) break; } - PMD_RX_LOG(ERR, "port_id=%u queue_id=%u tail=%u " + PMD_RX_LOG(DEBUG, "port_id=%u queue_id=%u tail=%u " "eop=0x%x pkt_len=%u hash=0x%x hash_type=0x%x", (unsigned int)rxq->port_id, (unsigned int)rxq->queue_id, @@ -972,7 +981,7 @@ atl_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) while (true) { new_mbuf = rte_mbuf_raw_alloc(rxq->mb_pool); if (new_mbuf == NULL) { - PMD_RX_LOG(ERR, + PMD_RX_LOG(DEBUG, "RX mbuf alloc failed port_id=%u " "queue_id=%u", (unsigned int)rxq->port_id, (unsigned int)rxq->queue_id); @@ -1031,8 +1040,18 @@ atl_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) rx_mbuf->ol_flags = atl_desc_to_offload_flags(rxq, &rxd_wb); + rx_mbuf->packet_type = atl_desc_to_pkt_type(&rxd_wb); + if (rx_mbuf->packet_type & RTE_PTYPE_L2_ETHER_VLAN) { + rx_mbuf->ol_flags |= PKT_RX_VLAN; + rx_mbuf->vlan_tci = rxd_wb.vlan; + + if (cfg->vlan_strip) + rx_mbuf->ol_flags |= + PKT_RX_VLAN_STRIPPED; + } + if (!rx_mbuf_first) rx_mbuf_first = rx_mbuf; rx_mbuf_first->nb_segs++; @@ -1065,7 +1084,7 @@ atl_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) adapter->sw_stats.q_ibytes[rxq->queue_id] += rx_mbuf_first->pkt_len; - PMD_RX_LOG(ERR, "add mbuf segs=%d pkt_len=%d", + PMD_RX_LOG(DEBUG, "add mbuf segs=%d pkt_len=%d", rx_mbuf_first->nb_segs, rx_mbuf_first->pkt_len); } @@ -1085,7 +1104,7 @@ err_stop: */ nb_hold = (uint16_t)(nb_hold + rxq->nb_rx_hold); if (nb_hold > rxq->rx_free_thresh) { - PMD_RX_LOG(ERR, "port_id=%u queue_id=%u rx_tail=%u " + PMD_RX_LOG(DEBUG, "port_id=%u queue_id=%u rx_tail=%u " "nb_hold=%u nb_rx=%u", (unsigned int)rxq->port_id, (unsigned int)rxq->queue_id, (unsigned int)tail, (unsigned int)nb_hold, @@ -1110,8 +1129,6 @@ atl_xmit_cleanup(struct atl_tx_queue *txq) struct hw_atl_txd_s *txd; int to_clean = 0; - PMD_INIT_FUNC_TRACE(); - if (txq != NULL) { sw_ring = txq->sw_ring; int head = txq->tx_head; @@ -1162,11 +1179,7 @@ atl_tso_setup(struct rte_mbuf *tx_pkt, union hw_atl_txc_s *txc) uint32_t tx_cmd = 0; uint64_t ol_flags = tx_pkt->ol_flags; - PMD_INIT_FUNC_TRACE(); - if (ol_flags & PKT_TX_TCP_SEG) { - PMD_DRV_LOG(DEBUG, "xmit TSO pkt"); - tx_cmd |= tx_desc_cmd_lso | tx_desc_cmd_l4cs; txc->cmd = 0x4; @@ -1221,8 +1234,6 @@ atl_xmit_pkt(struct aq_hw_s *hw, struct atl_tx_queue *txq, u32 tx_cmd = 0U; int desc_count = 0; - PMD_INIT_FUNC_TRACE(); - tail = txq->tx_tail; txc = (union hw_atl_txc_s *)&txq->hw_ring[tail]; @@ -1337,4 +1348,3 @@ atl_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) return nb_tx; } -