1*3998e2a0SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 2*3998e2a0SBruce Richardson * Copyright(c) 2010-2017 Intel Corporation 3d19533e8SHuawei Xie */ 4d19533e8SHuawei Xie 5d19533e8SHuawei Xie #ifndef _MAIN_H_ 6d19533e8SHuawei Xie #define _MAIN_H_ 7d19533e8SHuawei Xie 845657a5cSYuanhan Liu #include <sys/queue.h> 945657a5cSYuanhan Liu 10aca49772SYuanhan Liu #include <rte_ether.h> 11aca49772SYuanhan Liu 12d19533e8SHuawei Xie /* Macros for printing using RTE_LOG */ 13d19533e8SHuawei Xie #define RTE_LOGTYPE_VHOST_CONFIG RTE_LOGTYPE_USER1 14d19533e8SHuawei Xie #define RTE_LOGTYPE_VHOST_DATA RTE_LOGTYPE_USER2 15d19533e8SHuawei Xie #define RTE_LOGTYPE_VHOST_PORT RTE_LOGTYPE_USER3 16d19533e8SHuawei Xie 17f53cf839SYuanhan Liu enum {VIRTIO_RXQ, VIRTIO_TXQ, VIRTIO_QNUM}; 18f53cf839SYuanhan Liu 19ca059fa5SYuanhan Liu #define MAX_PKT_BURST 32 /* Max burst size for RX/TX */ 20ca059fa5SYuanhan Liu 2156fe86f8SYuanhan Liu struct device_statistics { 2256fe86f8SYuanhan Liu uint64_t tx; 2356fe86f8SYuanhan Liu uint64_t tx_total; 2456fe86f8SYuanhan Liu rte_atomic64_t rx_atomic; 2556fe86f8SYuanhan Liu rte_atomic64_t rx_total_atomic; 2656fe86f8SYuanhan Liu }; 2756fe86f8SYuanhan Liu 28ca059fa5SYuanhan Liu struct vhost_queue { 29ca059fa5SYuanhan Liu struct rte_vhost_vring vr; 30ca059fa5SYuanhan Liu uint16_t last_avail_idx; 31ca059fa5SYuanhan Liu uint16_t last_used_idx; 32ca059fa5SYuanhan Liu }; 33ca059fa5SYuanhan Liu 34e571e6b4SHuawei Xie struct vhost_dev { 35e571e6b4SHuawei Xie /**< Number of memory regions for gpa to hpa translation. */ 36e571e6b4SHuawei Xie uint32_t nregions_hpa; 37e571e6b4SHuawei Xie /**< Device MAC address (Obtained on first TX packet). */ 38e571e6b4SHuawei Xie struct ether_addr mac_address; 39e571e6b4SHuawei Xie /**< RX VMDQ queue number. */ 40e571e6b4SHuawei Xie uint16_t vmdq_rx_q; 41e571e6b4SHuawei Xie /**< Vlan tag assigned to the pool */ 42e571e6b4SHuawei Xie uint32_t vlan_tag; 43e571e6b4SHuawei Xie /**< Data core that the device is added to. */ 44e571e6b4SHuawei Xie uint16_t coreid; 45e571e6b4SHuawei Xie /**< A device is set as ready if the MAC address has been set. */ 46e571e6b4SHuawei Xie volatile uint8_t ready; 47e571e6b4SHuawei Xie /**< Device is marked for removal from the data core. */ 48e571e6b4SHuawei Xie volatile uint8_t remove; 4945657a5cSYuanhan Liu 50e2a1dd12SYuanhan Liu int vid; 51ca059fa5SYuanhan Liu uint64_t features; 52ca059fa5SYuanhan Liu size_t hdr_len; 53ca059fa5SYuanhan Liu uint16_t nr_vrings; 54ca059fa5SYuanhan Liu struct rte_vhost_memory *mem; 5556fe86f8SYuanhan Liu struct device_statistics stats; 5697daf19eSYuanhan Liu TAILQ_ENTRY(vhost_dev) global_vdev_entry; 5797daf19eSYuanhan Liu TAILQ_ENTRY(vhost_dev) lcore_vdev_entry; 58ca059fa5SYuanhan Liu 59ca059fa5SYuanhan Liu #define MAX_QUEUE_PAIRS 4 60ca059fa5SYuanhan Liu struct vhost_queue queues[MAX_QUEUE_PAIRS * 2]; 61e571e6b4SHuawei Xie } __rte_cache_aligned; 62e571e6b4SHuawei Xie 6345657a5cSYuanhan Liu TAILQ_HEAD(vhost_dev_tailq_list, vhost_dev); 6445657a5cSYuanhan Liu 6545657a5cSYuanhan Liu 6645657a5cSYuanhan Liu #define REQUEST_DEV_REMOVAL 1 6745657a5cSYuanhan Liu #define ACK_DEV_REMOVAL 0 68d19533e8SHuawei Xie 69d19533e8SHuawei Xie /* 70d19533e8SHuawei Xie * Structure containing data core specific information. 71d19533e8SHuawei Xie */ 7245657a5cSYuanhan Liu struct lcore_info { 7345657a5cSYuanhan Liu uint32_t device_num; 74d19533e8SHuawei Xie 7545657a5cSYuanhan Liu /* Flag to synchronize device removal. */ 7645657a5cSYuanhan Liu volatile uint8_t dev_removal_flag; 7745657a5cSYuanhan Liu 7845657a5cSYuanhan Liu struct vhost_dev_tailq_list vdev_list; 79d19533e8SHuawei Xie }; 80d19533e8SHuawei Xie 81ca059fa5SYuanhan Liu /* we implement non-extra virtio net features */ 82ca059fa5SYuanhan Liu #define VIRTIO_NET_FEATURES 0 83ca059fa5SYuanhan Liu 84ca059fa5SYuanhan Liu void vs_vhost_net_setup(struct vhost_dev *dev); 85ca059fa5SYuanhan Liu void vs_vhost_net_remove(struct vhost_dev *dev); 86ca059fa5SYuanhan Liu uint16_t vs_enqueue_pkts(struct vhost_dev *dev, uint16_t queue_id, 87ca059fa5SYuanhan Liu struct rte_mbuf **pkts, uint32_t count); 88ca059fa5SYuanhan Liu 89ca059fa5SYuanhan Liu uint16_t vs_dequeue_pkts(struct vhost_dev *dev, uint16_t queue_id, 90ca059fa5SYuanhan Liu struct rte_mempool *mbuf_pool, 91ca059fa5SYuanhan Liu struct rte_mbuf **pkts, uint16_t count); 92d19533e8SHuawei Xie #endif /* _MAIN_H_ */ 93