X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Focteontx%2Focteontx_rxtx.c;h=bbe43a874b7000f1b49ac89c30f225febcc92781;hb=bd885ab120e2335f978a28ee0aa4303017390e15;hp=5451cabebe5918e5ccf5c79edc9492e2f1a6619f;hpb=85221a0c7c28e10e6b31504448c37134e8facd55;p=dpdk.git diff --git a/drivers/net/octeontx/octeontx_rxtx.c b/drivers/net/octeontx/octeontx_rxtx.c index 5451cabebe..bbe43a874b 100644 --- a/drivers/net/octeontx/octeontx_rxtx.c +++ b/drivers/net/octeontx/octeontx_rxtx.c @@ -19,56 +19,6 @@ #include "octeontx_rxtx.h" #include "octeontx_logs.h" -uint16_t __rte_hot -octeontx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) -{ - int count; - struct octeontx_txq *txq = tx_queue; - octeontx_dq_t *dq = &txq->dq; - int res; - - count = 0; - - rte_cio_wmb(); - while (count < nb_pkts) { - res = __octeontx_xmit_pkts(dq->lmtline_va, dq->ioreg_va, - dq->fc_status_va, tx_pkts[count], - OCCTX_TX_OFFLOAD_NONE); - if (res < 0) - break; - - count++; - } - - return count; /* return number of pkts transmitted */ -} - -uint16_t __hot -octeontx_xmit_pkts_mseg(void *tx_queue, struct rte_mbuf **tx_pkts, - uint16_t nb_pkts) -{ - int count; - struct octeontx_txq *txq = tx_queue; - octeontx_dq_t *dq = &txq->dq; - int res; - - count = 0; - - rte_cio_wmb(); - while (count < nb_pkts) { - res = __octeontx_xmit_pkts(dq->lmtline_va, dq->ioreg_va, - dq->fc_status_va, tx_pkts[count], - OCCTX_TX_OFFLOAD_NONE | - OCCTX_TX_MULTI_SEG_F); - if (res < 0) - break; - - count++; - } - - return count; /* return number of pkts transmitted */ -} - uint16_t __rte_hot octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) { @@ -90,3 +40,37 @@ octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) return count; /* return number of pkts received */ } + +#define T(name, f3, f2, f1, f0, sz, flags) \ +static uint16_t __rte_noinline __rte_hot \ +octeontx_xmit_pkts_ ##name(void *tx_queue, \ + struct rte_mbuf **tx_pkts, uint16_t pkts) \ +{ \ + uint64_t cmd[(sz)]; \ + \ + return __octeontx_xmit_pkts(tx_queue, tx_pkts, pkts, cmd, \ + flags); \ +} + +OCCTX_TX_FASTPATH_MODES +#undef T + +void __rte_hot +octeontx_set_tx_function(struct rte_eth_dev *dev) +{ + struct octeontx_nic *nic = octeontx_pmd_priv(dev); + + const eth_tx_burst_t tx_burst_func[2][2][2][2] = { +#define T(name, f3, f2, f1, f0, sz, flags) \ + [f3][f2][f1][f0] = octeontx_xmit_pkts_ ##name, + +OCCTX_TX_FASTPATH_MODES +#undef T + }; + + dev->tx_pkt_burst = tx_burst_func + [!!(nic->tx_offload_flags & OCCTX_TX_OFFLOAD_MBUF_NOFF_F)] + [!!(nic->tx_offload_flags & OCCTX_TX_OFFLOAD_OL3_OL4_CSUM_F)] + [!!(nic->tx_offload_flags & OCCTX_TX_OFFLOAD_L3_L4_CSUM_F)] + [!!(nic->tx_offload_flags & OCCTX_TX_MULTI_SEG_F)]; +}