]> git.proxmox.com Git - ceph.git/blame - ceph/src/spdk/dpdk/drivers/net/octeontx/octeontx_rxtx.c
import 15.2.0 Octopus source
[ceph.git] / ceph / src / spdk / dpdk / drivers / net / octeontx / octeontx_rxtx.c
CommitLineData
11fdf7f2
TL
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Cavium, Inc
3 */
4
5#include <stdint.h>
6#include <stdio.h>
7#include <stdlib.h>
8#include <unistd.h>
9
10#include <rte_atomic.h>
11#include <rte_common.h>
12#include <rte_ethdev_driver.h>
13#include <rte_ether.h>
14#include <rte_log.h>
15#include <rte_mbuf.h>
16#include <rte_prefetch.h>
17
18#include "octeontx_ethdev.h"
19#include "octeontx_rxtx.h"
20#include "octeontx_logs.h"
21
11fdf7f2
TL
22uint16_t __hot
23octeontx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
24{
25 int count;
26 struct octeontx_txq *txq = tx_queue;
27 octeontx_dq_t *dq = &txq->dq;
28 int res;
29
30 count = 0;
31
9f95a23c 32 rte_cio_wmb();
11fdf7f2
TL
33 while (count < nb_pkts) {
34 res = __octeontx_xmit_pkts(dq->lmtline_va, dq->ioreg_va,
35 dq->fc_status_va,
36 tx_pkts[count]);
37 if (res < 0)
38 break;
39
40 count++;
41 }
42
43 return count; /* return number of pkts transmitted */
44}
45
46uint16_t __hot
47octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
48{
49 struct octeontx_rxq *rxq;
50 struct rte_event ev;
51 size_t count;
52 uint16_t valid_event;
53
54 rxq = rx_queue;
55 count = 0;
56 while (count < nb_pkts) {
57 valid_event = rte_event_dequeue_burst(rxq->evdev,
58 rxq->ev_ports, &ev,
59 1, 0);
60 if (!valid_event)
61 break;
62 rx_pkts[count++] = ev.mbuf;
63 }
64
65 return count; /* return number of pkts received */
66}