1d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause 2d30ea906Sjfb8856606 * Copyright(c) 2010-2015 Intel Corporation 3a9643ea8Slogwang */ 4a9643ea8Slogwang 5a9643ea8Slogwang #ifndef _VIRTIO_ETHDEV_H_ 6a9643ea8Slogwang #define _VIRTIO_ETHDEV_H_ 7a9643ea8Slogwang 8a9643ea8Slogwang #include <stdint.h> 9a9643ea8Slogwang 10a9643ea8Slogwang #include "virtio_pci.h" 11a9643ea8Slogwang 12a9643ea8Slogwang #ifndef PAGE_SIZE 13a9643ea8Slogwang #define PAGE_SIZE 4096 14a9643ea8Slogwang #endif 15a9643ea8Slogwang 162bfe3f2eSlogwang #define VIRTIO_MAX_RX_QUEUES 128U 172bfe3f2eSlogwang #define VIRTIO_MAX_TX_QUEUES 128U 18a9643ea8Slogwang #define VIRTIO_MAX_MAC_ADDRS 64 19a9643ea8Slogwang #define VIRTIO_MIN_RX_BUFSIZE 64 202bfe3f2eSlogwang #define VIRTIO_MAX_RX_PKTLEN 9728U 21a9643ea8Slogwang 22a9643ea8Slogwang /* Features desired/implemented by this driver. */ 232bfe3f2eSlogwang #define VIRTIO_PMD_DEFAULT_GUEST_FEATURES \ 24a9643ea8Slogwang (1u << VIRTIO_NET_F_MAC | \ 25a9643ea8Slogwang 1u << VIRTIO_NET_F_STATUS | \ 26a9643ea8Slogwang 1u << VIRTIO_NET_F_MQ | \ 27a9643ea8Slogwang 1u << VIRTIO_NET_F_CTRL_MAC_ADDR | \ 28a9643ea8Slogwang 1u << VIRTIO_NET_F_CTRL_VQ | \ 29a9643ea8Slogwang 1u << VIRTIO_NET_F_CTRL_RX | \ 30a9643ea8Slogwang 1u << VIRTIO_NET_F_CTRL_VLAN | \ 31a9643ea8Slogwang 1u << VIRTIO_NET_F_MRG_RXBUF | \ 322bfe3f2eSlogwang 1u << VIRTIO_NET_F_MTU | \ 33d30ea906Sjfb8856606 1ULL << VIRTIO_NET_F_GUEST_ANNOUNCE | \ 342bfe3f2eSlogwang 1u << VIRTIO_RING_F_INDIRECT_DESC | \ 352bfe3f2eSlogwang 1ULL << VIRTIO_F_VERSION_1 | \ 36d30ea906Sjfb8856606 1ULL << VIRTIO_F_IN_ORDER | \ 374418919fSjohnjiang 1ULL << VIRTIO_F_RING_PACKED | \ 384418919fSjohnjiang 1ULL << VIRTIO_F_IOMMU_PLATFORM | \ 39*2d9fd380Sjfb8856606 1ULL << VIRTIO_F_ORDER_PLATFORM | \ 40*2d9fd380Sjfb8856606 1ULL << VIRTIO_F_NOTIFICATION_DATA | \ 41*2d9fd380Sjfb8856606 1ULL << VIRTIO_NET_F_SPEED_DUPLEX) 42a9643ea8Slogwang 432bfe3f2eSlogwang #define VIRTIO_PMD_SUPPORTED_GUEST_FEATURES \ 442bfe3f2eSlogwang (VIRTIO_PMD_DEFAULT_GUEST_FEATURES | \ 452bfe3f2eSlogwang 1u << VIRTIO_NET_F_GUEST_CSUM | \ 462bfe3f2eSlogwang 1u << VIRTIO_NET_F_GUEST_TSO4 | \ 47d30ea906Sjfb8856606 1u << VIRTIO_NET_F_GUEST_TSO6 | \ 48d30ea906Sjfb8856606 1u << VIRTIO_NET_F_CSUM | \ 49d30ea906Sjfb8856606 1u << VIRTIO_NET_F_HOST_TSO4 | \ 50d30ea906Sjfb8856606 1u << VIRTIO_NET_F_HOST_TSO6) 51d30ea906Sjfb8856606 521646932aSjfb8856606 extern const struct eth_dev_ops virtio_user_secondary_eth_dev_ops; 531646932aSjfb8856606 54a9643ea8Slogwang /* 55a9643ea8Slogwang * CQ function prototype 56a9643ea8Slogwang */ 57a9643ea8Slogwang void virtio_dev_cq_start(struct rte_eth_dev *dev); 58a9643ea8Slogwang 59a9643ea8Slogwang /* 60a9643ea8Slogwang * RX/TX function prototypes 61a9643ea8Slogwang */ 62a9643ea8Slogwang 632bfe3f2eSlogwang int virtio_dev_rx_queue_done(void *rxq, uint16_t offset); 64a9643ea8Slogwang 65a9643ea8Slogwang int virtio_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, 66a9643ea8Slogwang uint16_t nb_rx_desc, unsigned int socket_id, 67a9643ea8Slogwang const struct rte_eth_rxconf *rx_conf, 68a9643ea8Slogwang struct rte_mempool *mb_pool); 69a9643ea8Slogwang 702bfe3f2eSlogwang int virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev, 712bfe3f2eSlogwang uint16_t rx_queue_id); 72a9643ea8Slogwang 73a9643ea8Slogwang int virtio_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id, 74a9643ea8Slogwang uint16_t nb_tx_desc, unsigned int socket_id, 75a9643ea8Slogwang const struct rte_eth_txconf *tx_conf); 76a9643ea8Slogwang 772bfe3f2eSlogwang int virtio_dev_tx_queue_setup_finish(struct rte_eth_dev *dev, 782bfe3f2eSlogwang uint16_t tx_queue_id); 79a9643ea8Slogwang 80a9643ea8Slogwang uint16_t virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, 81a9643ea8Slogwang uint16_t nb_pkts); 824418919fSjohnjiang uint16_t virtio_recv_pkts_packed(void *rx_queue, struct rte_mbuf **rx_pkts, 834418919fSjohnjiang uint16_t nb_pkts); 84a9643ea8Slogwang 85a9643ea8Slogwang uint16_t virtio_recv_mergeable_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, 86a9643ea8Slogwang uint16_t nb_pkts); 87a9643ea8Slogwang 884418919fSjohnjiang uint16_t virtio_recv_mergeable_pkts_packed(void *rx_queue, 894418919fSjohnjiang struct rte_mbuf **rx_pkts, uint16_t nb_pkts); 904418919fSjohnjiang 914418919fSjohnjiang uint16_t virtio_recv_pkts_inorder(void *rx_queue, 92d30ea906Sjfb8856606 struct rte_mbuf **rx_pkts, uint16_t nb_pkts); 93d30ea906Sjfb8856606 944b05018fSfengbojiang uint16_t virtio_xmit_pkts_prepare(void *tx_queue, struct rte_mbuf **tx_pkts, 954b05018fSfengbojiang uint16_t nb_pkts); 964b05018fSfengbojiang 97a9643ea8Slogwang uint16_t virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, 98a9643ea8Slogwang uint16_t nb_pkts); 994418919fSjohnjiang uint16_t virtio_xmit_pkts_packed(void *tx_queue, struct rte_mbuf **tx_pkts, 1004418919fSjohnjiang uint16_t nb_pkts); 101a9643ea8Slogwang 102d30ea906Sjfb8856606 uint16_t virtio_xmit_pkts_inorder(void *tx_queue, struct rte_mbuf **tx_pkts, 103d30ea906Sjfb8856606 uint16_t nb_pkts); 104d30ea906Sjfb8856606 105a9643ea8Slogwang uint16_t virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, 106a9643ea8Slogwang uint16_t nb_pkts); 107a9643ea8Slogwang 108*2d9fd380Sjfb8856606 uint16_t virtio_recv_pkts_packed_vec(void *rx_queue, struct rte_mbuf **rx_pkts, 109*2d9fd380Sjfb8856606 uint16_t nb_pkts); 110*2d9fd380Sjfb8856606 111*2d9fd380Sjfb8856606 uint16_t virtio_xmit_pkts_packed_vec(void *tx_queue, struct rte_mbuf **tx_pkts, 112*2d9fd380Sjfb8856606 uint16_t nb_pkts); 113*2d9fd380Sjfb8856606 114a9643ea8Slogwang int eth_virtio_dev_init(struct rte_eth_dev *eth_dev); 115a9643ea8Slogwang 1162bfe3f2eSlogwang void virtio_interrupt_handler(void *param); 117a9643ea8Slogwang 118d30ea906Sjfb8856606 int virtio_dev_pause(struct rte_eth_dev *dev); 119d30ea906Sjfb8856606 void virtio_dev_resume(struct rte_eth_dev *dev); 120d30ea906Sjfb8856606 int virtio_inject_pkts(struct rte_eth_dev *dev, struct rte_mbuf **tx_pkts, 121d30ea906Sjfb8856606 int nb_pkts); 122d30ea906Sjfb8856606 123a9643ea8Slogwang #endif /* _VIRTIO_ETHDEV_H_ */ 124