xref: /dpdk/drivers/net/virtio/virtio_rxtx_simple.c (revision 43fd3624fdfe3a33904a9b64d94306dd3d4f2c13)
15566a3e3SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
25566a3e3SBruce Richardson  * Copyright(c) 2010-2015 Intel Corporation
3cab04612SHuawei Xie  */
4cab04612SHuawei Xie 
5cab04612SHuawei Xie #include <stdint.h>
6cab04612SHuawei Xie #include <stdio.h>
7cab04612SHuawei Xie #include <stdlib.h>
8cab04612SHuawei Xie #include <string.h>
9cab04612SHuawei Xie #include <errno.h>
10cab04612SHuawei Xie 
11cab04612SHuawei Xie #include <rte_cycles.h>
12cab04612SHuawei Xie #include <rte_memory.h>
13cab04612SHuawei Xie #include <rte_branch_prediction.h>
14cab04612SHuawei Xie #include <rte_mempool.h>
15cab04612SHuawei Xie #include <rte_malloc.h>
16cab04612SHuawei Xie #include <rte_mbuf.h>
17cab04612SHuawei Xie #include <rte_ether.h>
18df96fd0dSBruce Richardson #include <ethdev_driver.h>
19cab04612SHuawei Xie #include <rte_prefetch.h>
20cab04612SHuawei Xie #include <rte_string_fns.h>
21cab04612SHuawei Xie #include <rte_errno.h>
22cab04612SHuawei Xie #include <rte_byteorder.h>
23cab04612SHuawei Xie 
24f412f14fSJerin Jacob #include "virtio_rxtx_simple.h"
25fc3d6621SHuawei Xie 
26ce6427ddSThomas Monjalon int __rte_cold
2701ad44fdSHuawei Xie virtio_rxq_vec_setup(struct virtnet_rx *rxq)
28fc3d6621SHuawei Xie {
29*4e6bcde9SMaxime Coquelin 	struct virtqueue *vq = virtnet_rxq_to_vq(rxq);
30fc3d6621SHuawei Xie 	uintptr_t p;
31fc3d6621SHuawei Xie 	struct rte_mbuf mb_def = { .buf_addr = 0 }; /* zeroed mbuf */
32fc3d6621SHuawei Xie 
33fc3d6621SHuawei Xie 	mb_def.nb_segs = 1;
34fc3d6621SHuawei Xie 	mb_def.data_off = RTE_PKTMBUF_HEADROOM;
35*4e6bcde9SMaxime Coquelin 	mb_def.port = vq->hw->port_id;
36fc3d6621SHuawei Xie 	rte_mbuf_refcnt_set(&mb_def, 1);
37fc3d6621SHuawei Xie 
38fc3d6621SHuawei Xie 	/* prevent compiler reordering: rearm_data covers previous fields */
39fc3d6621SHuawei Xie 	rte_compiler_barrier();
40fc3d6621SHuawei Xie 	p = (uintptr_t)&mb_def.rearm_data;
41fc3d6621SHuawei Xie 	rxq->mbuf_initializer = *(uint64_t *)p;
42fc3d6621SHuawei Xie 
43fc3d6621SHuawei Xie 	return 0;
44fc3d6621SHuawei Xie }
45f412f14fSJerin Jacob 
46f412f14fSJerin Jacob /* Stub for linkage when arch specific implementation is not available */
4781bede55SKeith Wiles __rte_weak uint16_t
48f412f14fSJerin Jacob virtio_recv_pkts_vec(void *rx_queue __rte_unused,
49f412f14fSJerin Jacob 		     struct rte_mbuf **rx_pkts __rte_unused,
50f412f14fSJerin Jacob 		     uint16_t nb_pkts __rte_unused)
51f412f14fSJerin Jacob {
52f412f14fSJerin Jacob 	rte_panic("Wrong weak function linked by linker\n");
53f412f14fSJerin Jacob 	return 0;
54f412f14fSJerin Jacob }
55