[dpdk-dev] [PATCH 23/26] net/octeontx: add packet receive burst function

Jerin Jacob jerin.jacob at caviumnetworks.com
Thu Aug 31 16:54:33 CEST 2017


Signed-off-by: Jerin Jacob <jerin.jacob at caviumnetworks.com>
Co-authored-by: Santosh Shukla <santosh.shukla at caviumnetworks.com>
---
 drivers/net/octeontx/octeontx_rxtx.c | 38 ++++++++++++++++++++++++++++++++++++
 drivers/net/octeontx/octeontx_rxtx.h |  2 ++
 2 files changed, 40 insertions(+)

diff --git a/drivers/net/octeontx/octeontx_rxtx.c b/drivers/net/octeontx/octeontx_rxtx.c
index 32f46ae49..05f003649 100644
--- a/drivers/net/octeontx/octeontx_rxtx.c
+++ b/drivers/net/octeontx/octeontx_rxtx.c
@@ -102,3 +102,41 @@ octeontx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 
 	return count; /* return number of pkts transmitted */
 }
+
+uint16_t __hot
+octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
+{
+	struct rte_mbuf *mbuf;
+	struct octeontx_rxq *rxq;
+	struct rte_event ev;
+	octtx_wqe_t *wqe;
+	size_t count;
+	uint16_t valid_event;
+
+	rxq = rx_queue;
+	count = 0;
+	while (count < nb_pkts) {
+		valid_event = rte_event_dequeue_burst(rxq->evdev,
+							rxq->ev_ports, &ev,
+							1, 0);
+		if (!valid_event)
+			break;
+
+		wqe = (octtx_wqe_t *)(uintptr_t)ev.u64;
+		rte_prefetch_non_temporal(wqe);
+
+		/* Get mbuf from wqe */
+		mbuf = (struct rte_mbuf *)((uintptr_t)wqe -
+						OCTTX_PACKET_WQE_SKIP);
+		mbuf->data_off = RTE_PTR_DIFF(wqe->s.w3.addr, mbuf->buf_addr);
+		mbuf->pkt_len = wqe->s.w1.len;
+		mbuf->data_len = mbuf->pkt_len;
+		mbuf->nb_segs = 1;
+		mbuf->ol_flags = 0;
+		mbuf->port = rxq->port_id;
+		rte_mbuf_refcnt_set(mbuf, 1);
+		rx_pkts[count++] = mbuf;
+	}
+
+	return count; /* return number of pkts received */
+}
diff --git a/drivers/net/octeontx/octeontx_rxtx.h b/drivers/net/octeontx/octeontx_rxtx.h
index 4a49fc159..1f9153272 100644
--- a/drivers/net/octeontx/octeontx_rxtx.h
+++ b/drivers/net/octeontx/octeontx_rxtx.h
@@ -42,5 +42,7 @@
 uint16_t
 octeontx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts);
 
+uint16_t
+octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
 
 #endif /* __OCTEONTX_RXTX_H__ */
-- 
2.14.1



More information about the dev mailing list