X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Focteontx%2Focteontx_rxtx.c;h=61865ef0bcdbed2be9ba4d3fd5b3b3b6baf2281f;hb=93dfebd2c237217ab22c2acb8795c61da6e50870;hp=1e201f3228619cfdf66a08c1c40f3e3644001541;hpb=1dedffeba714eebb462e1cfa8c322db0bfede9c9;p=dpdk.git diff --git a/drivers/net/octeontx/octeontx_rxtx.c b/drivers/net/octeontx/octeontx_rxtx.c index 1e201f3228..61865ef0bc 100644 --- a/drivers/net/octeontx/octeontx_rxtx.c +++ b/drivers/net/octeontx/octeontx_rxtx.c @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include @@ -19,31 +19,7 @@ #include "octeontx_rxtx.h" #include "octeontx_logs.h" -uint16_t __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]); - if (res < 0) - break; - - count++; - } - - return count; /* return number of pkts transmitted */ -} - -uint16_t __hot +uint16_t __rte_hot octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) { struct octeontx_rxq *rxq; @@ -64,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)]; +}