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