X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fbnxt%2Fbnxt_txr.c;h=e2b7e405716650ab2e9e4fb5cd03838368a7c473;hb=9fda31c3229ca6e036cae80392578ed6e5a51119;hp=54eaab34a0325e7d8f13f42b54506637109d3285;hpb=2b5a36f4df0c00407117ed6f8f9444dd943b4f4c;p=dpdk.git diff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c index 54eaab34a0..e2b7e40571 100644 --- a/drivers/net/bnxt/bnxt_txr.c +++ b/drivers/net/bnxt/bnxt_txr.c @@ -9,6 +9,7 @@ #include #include "bnxt.h" +#include "bnxt_hwrm.h" #include "bnxt_ring.h" #include "bnxt_txq.h" #include "bnxt_txr.h" @@ -37,6 +38,9 @@ void bnxt_free_tx_rings(struct bnxt *bp) rte_free(txq->cp_ring->cp_ring_struct); rte_free(txq->cp_ring); + rte_memzone_free(txq->mz); + txq->mz = NULL; + rte_free(txq); bp->tx_queues[i] = NULL; } @@ -107,12 +111,12 @@ int bnxt_init_tx_ring_struct(struct bnxt_tx_queue *txq, unsigned int socket_id) static bool bnxt_xmit_need_long_bd(struct rte_mbuf *tx_pkt, struct bnxt_tx_queue *txq) { - if (tx_pkt->ol_flags & (PKT_TX_TCP_SEG | PKT_TX_TCP_CKSUM | - PKT_TX_UDP_CKSUM | PKT_TX_IP_CKSUM | - PKT_TX_VLAN_PKT | PKT_TX_OUTER_IP_CKSUM | - PKT_TX_TUNNEL_GRE | PKT_TX_TUNNEL_VXLAN | - PKT_TX_TUNNEL_GENEVE | PKT_TX_IEEE1588_TMST | - PKT_TX_QINQ_PKT) || + if (tx_pkt->ol_flags & (RTE_MBUF_F_TX_TCP_SEG | RTE_MBUF_F_TX_TCP_CKSUM | + RTE_MBUF_F_TX_UDP_CKSUM | RTE_MBUF_F_TX_IP_CKSUM | + RTE_MBUF_F_TX_VLAN | RTE_MBUF_F_TX_OUTER_IP_CKSUM | + RTE_MBUF_F_TX_TUNNEL_GRE | RTE_MBUF_F_TX_TUNNEL_VXLAN | + RTE_MBUF_F_TX_TUNNEL_GENEVE | RTE_MBUF_F_TX_IEEE1588_TMST | + RTE_MBUF_F_TX_QINQ) || (BNXT_TRUFLOW_EN(txq->bp) && (txq->bp->tx_cfa_action || txq->vfr_tx_cfa_action))) return true; @@ -199,13 +203,13 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt, vlan_tag_flags = 0; /* HW can accelerate only outer vlan in QinQ mode */ - if (tx_pkt->ol_flags & PKT_TX_QINQ_PKT) { + if (tx_pkt->ol_flags & RTE_MBUF_F_TX_QINQ) { vlan_tag_flags = TX_BD_LONG_CFA_META_KEY_VLAN_TAG | tx_pkt->vlan_tci_outer; outer_tpid_bd = txq->bp->outer_tpid_bd & BNXT_OUTER_TPID_BD_MASK; vlan_tag_flags |= outer_tpid_bd; - } else if (tx_pkt->ol_flags & PKT_TX_VLAN_PKT) { + } else if (tx_pkt->ol_flags & RTE_MBUF_F_TX_VLAN) { /* shurd: Should this mask at * TX_BD_LONG_CFA_META_VLAN_VID_MASK? */ @@ -235,7 +239,7 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt, else txbd1->cfa_action = txq->bp->tx_cfa_action; - if (tx_pkt->ol_flags & PKT_TX_TCP_SEG) { + if (tx_pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG) { uint16_t hdr_size; /* TSO */ @@ -243,7 +247,7 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt, TX_BD_LONG_LFLAGS_T_IPID; hdr_size = tx_pkt->l2_len + tx_pkt->l3_len + tx_pkt->l4_len; - hdr_size += (tx_pkt->ol_flags & PKT_TX_TUNNEL_MASK) ? + hdr_size += (tx_pkt->ol_flags & RTE_MBUF_F_TX_TUNNEL_MASK) ? tx_pkt->outer_l2_len + tx_pkt->outer_l3_len : 0; /* The hdr_size is multiple of 16bit units not 8bit. @@ -298,24 +302,24 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt, PKT_TX_TCP_UDP_CKSUM) { /* TCP/UDP CSO */ txbd1->lflags |= TX_BD_LONG_LFLAGS_TCP_UDP_CHKSUM; - } else if ((tx_pkt->ol_flags & PKT_TX_TCP_CKSUM) == - PKT_TX_TCP_CKSUM) { + } else if ((tx_pkt->ol_flags & RTE_MBUF_F_TX_TCP_CKSUM) == + RTE_MBUF_F_TX_TCP_CKSUM) { /* TCP/UDP CSO */ txbd1->lflags |= TX_BD_LONG_LFLAGS_TCP_UDP_CHKSUM; - } else if ((tx_pkt->ol_flags & PKT_TX_UDP_CKSUM) == - PKT_TX_UDP_CKSUM) { + } else if ((tx_pkt->ol_flags & RTE_MBUF_F_TX_UDP_CKSUM) == + RTE_MBUF_F_TX_UDP_CKSUM) { /* TCP/UDP CSO */ txbd1->lflags |= TX_BD_LONG_LFLAGS_TCP_UDP_CHKSUM; - } else if ((tx_pkt->ol_flags & PKT_TX_IP_CKSUM) == - PKT_TX_IP_CKSUM) { + } else if ((tx_pkt->ol_flags & RTE_MBUF_F_TX_IP_CKSUM) == + RTE_MBUF_F_TX_IP_CKSUM) { /* IP CSO */ txbd1->lflags |= TX_BD_LONG_LFLAGS_IP_CHKSUM; - } else if ((tx_pkt->ol_flags & PKT_TX_OUTER_IP_CKSUM) == - PKT_TX_OUTER_IP_CKSUM) { + } else if ((tx_pkt->ol_flags & RTE_MBUF_F_TX_OUTER_IP_CKSUM) == + RTE_MBUF_F_TX_OUTER_IP_CKSUM) { /* IP CSO */ txbd1->lflags |= TX_BD_LONG_LFLAGS_T_IP_CHKSUM; - } else if ((tx_pkt->ol_flags & PKT_TX_IEEE1588_TMST) == - PKT_TX_IEEE1588_TMST) { + } else if ((tx_pkt->ol_flags & RTE_MBUF_F_TX_IEEE1588_TMST) == + RTE_MBUF_F_TX_IEEE1588_TMST) { /* PTP */ txbd1->lflags |= TX_BD_LONG_LFLAGS_STAMP; } @@ -349,7 +353,7 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt, } /* - * Transmit completion function for use when DEV_TX_OFFLOAD_MBUF_FAST_FREE + * Transmit completion function for use when RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE * is enabled. */ static void bnxt_tx_cmp_fast(struct bnxt_tx_queue *txq, int nr_pkts) @@ -460,7 +464,7 @@ static int bnxt_handle_tx_cp(struct bnxt_tx_queue *txq) cons = RING_CMPL(ring_mask, raw_cons); txcmp = (struct tx_cmpl *)&cpr->cp_desc_ring[cons]; - if (!CMP_VALID(txcmp, raw_cons, cp_ring_struct)) + if (!bnxt_cpr_cmp_valid(txcmp, raw_cons, ring_mask + 1)) break; opaque = rte_le_to_cpu_32(txcmp->opaque); @@ -474,10 +478,8 @@ static int bnxt_handle_tx_cp(struct bnxt_tx_queue *txq) raw_cons = NEXT_RAW_CMP(raw_cons); } while (nb_tx_pkts < ring_mask); - cpr->valid = !!(raw_cons & cp_ring_struct->ring_size); - if (nb_tx_pkts) { - if (txq->offloads & DEV_TX_OFFLOAD_MBUF_FAST_FREE) + if (txq->offloads & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE) bnxt_tx_cmp_fast(txq, nb_tx_pkts); else bnxt_tx_cmp(txq, nb_tx_pkts); @@ -549,6 +551,11 @@ int bnxt_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id) if (rc) return rc; + bnxt_free_hwrm_tx_ring(bp, tx_queue_id); + rc = bnxt_alloc_hwrm_tx_ring(bp, tx_queue_id); + if (rc) + return rc; + dev->data->tx_queue_state[tx_queue_id] = RTE_ETH_QUEUE_STATE_STARTED; txq->tx_started = true; PMD_DRV_LOG(DEBUG, "Tx queue started\n");