1aaf4363eSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause
2aaf4363eSJerin Jacob * Copyright(c) 2017 Cavium, Inc
39e747589SJerin Jacob */
49e747589SJerin Jacob
59e747589SJerin Jacob #include <stdint.h>
69e747589SJerin Jacob #include <stdio.h>
79e747589SJerin Jacob #include <stdlib.h>
89e747589SJerin Jacob #include <unistd.h>
99e747589SJerin Jacob
109e747589SJerin Jacob #include <rte_atomic.h>
119e747589SJerin Jacob #include <rte_common.h>
12*df96fd0dSBruce Richardson #include <ethdev_driver.h>
139e747589SJerin Jacob #include <rte_ether.h>
149e747589SJerin Jacob #include <rte_log.h>
159e747589SJerin Jacob #include <rte_mbuf.h>
169e747589SJerin Jacob #include <rte_prefetch.h>
179e747589SJerin Jacob
189e747589SJerin Jacob #include "octeontx_ethdev.h"
199e747589SJerin Jacob #include "octeontx_rxtx.h"
209e747589SJerin Jacob #include "octeontx_logs.h"
219e747589SJerin Jacob
22e3866e73SThomas Monjalon uint16_t __rte_hot
octeontx_recv_pkts(void * rx_queue,struct rte_mbuf ** rx_pkts,uint16_t nb_pkts)232d2c7918SJerin Jacob octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
242d2c7918SJerin Jacob {
252d2c7918SJerin Jacob struct octeontx_rxq *rxq;
262d2c7918SJerin Jacob struct rte_event ev;
272d2c7918SJerin Jacob size_t count;
282d2c7918SJerin Jacob uint16_t valid_event;
292d2c7918SJerin Jacob
302d2c7918SJerin Jacob rxq = rx_queue;
312d2c7918SJerin Jacob count = 0;
322d2c7918SJerin Jacob while (count < nb_pkts) {
332d2c7918SJerin Jacob valid_event = rte_event_dequeue_burst(rxq->evdev,
342d2c7918SJerin Jacob rxq->ev_ports, &ev,
352d2c7918SJerin Jacob 1, 0);
362d2c7918SJerin Jacob if (!valid_event)
372d2c7918SJerin Jacob break;
38d0d65498SPavan Nikhilesh rx_pkts[count++] = ev.mbuf;
392d2c7918SJerin Jacob }
402d2c7918SJerin Jacob
412d2c7918SJerin Jacob return count; /* return number of pkts received */
422d2c7918SJerin Jacob }
437f4116bdSHarman Kalra
44100f6992SHarman Kalra #define T(name, f3, f2, f1, f0, sz, flags) \
457f4116bdSHarman Kalra static uint16_t __rte_noinline __rte_hot \
467f4116bdSHarman Kalra octeontx_xmit_pkts_ ##name(void *tx_queue, \
477f4116bdSHarman Kalra struct rte_mbuf **tx_pkts, uint16_t pkts) \
487f4116bdSHarman Kalra { \
497f4116bdSHarman Kalra uint64_t cmd[(sz)]; \
507f4116bdSHarman Kalra \
517f4116bdSHarman Kalra return __octeontx_xmit_pkts(tx_queue, tx_pkts, pkts, cmd, \
527f4116bdSHarman Kalra flags); \
537f4116bdSHarman Kalra }
547f4116bdSHarman Kalra
557f4116bdSHarman Kalra OCCTX_TX_FASTPATH_MODES
567f4116bdSHarman Kalra #undef T
577f4116bdSHarman Kalra
587f4116bdSHarman Kalra void __rte_hot
octeontx_set_tx_function(struct rte_eth_dev * dev)597f4116bdSHarman Kalra octeontx_set_tx_function(struct rte_eth_dev *dev)
607f4116bdSHarman Kalra {
617f4116bdSHarman Kalra struct octeontx_nic *nic = octeontx_pmd_priv(dev);
627f4116bdSHarman Kalra
63100f6992SHarman Kalra const eth_tx_burst_t tx_burst_func[2][2][2][2] = {
64100f6992SHarman Kalra #define T(name, f3, f2, f1, f0, sz, flags) \
65100f6992SHarman Kalra [f3][f2][f1][f0] = octeontx_xmit_pkts_ ##name,
667f4116bdSHarman Kalra
677f4116bdSHarman Kalra OCCTX_TX_FASTPATH_MODES
687f4116bdSHarman Kalra #undef T
697f4116bdSHarman Kalra };
707f4116bdSHarman Kalra
717f4116bdSHarman Kalra dev->tx_pkt_burst = tx_burst_func
725cbe1848SHarman Kalra [!!(nic->tx_offload_flags & OCCTX_TX_OFFLOAD_MBUF_NOFF_F)]
73100f6992SHarman Kalra [!!(nic->tx_offload_flags & OCCTX_TX_OFFLOAD_OL3_OL4_CSUM_F)]
74100f6992SHarman Kalra [!!(nic->tx_offload_flags & OCCTX_TX_OFFLOAD_L3_L4_CSUM_F)]
757f4116bdSHarman Kalra [!!(nic->tx_offload_flags & OCCTX_TX_MULTI_SEG_F)];
767f4116bdSHarman Kalra }
77