15566a3e3SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 25566a3e3SBruce Richardson * Copyright(c) 2010-2015 Intel Corporation 36c3169a3SBruce Richardson */ 46c3169a3SBruce Richardson 56c3169a3SBruce Richardson #ifndef _VIRTIO_ETHDEV_H_ 66c3169a3SBruce Richardson #define _VIRTIO_ETHDEV_H_ 76c3169a3SBruce Richardson 86c3169a3SBruce Richardson #include <stdint.h> 96c3169a3SBruce Richardson 106c3169a3SBruce Richardson #include "virtio_pci.h" 116c3169a3SBruce Richardson 126c3169a3SBruce Richardson #ifndef PAGE_SIZE 136c3169a3SBruce Richardson #define PAGE_SIZE 4096 146c3169a3SBruce Richardson #endif 156c3169a3SBruce Richardson 1645e4acd4SOlivier Matz #define VIRTIO_MAX_RX_QUEUES 128U 1745e4acd4SOlivier Matz #define VIRTIO_MAX_TX_QUEUES 128U 186c3169a3SBruce Richardson #define VIRTIO_MAX_MAC_ADDRS 64 196c3169a3SBruce Richardson #define VIRTIO_MIN_RX_BUFSIZE 64 2049d26d9eSMaxime Coquelin #define VIRTIO_MAX_RX_PKTLEN 9728U 216c3169a3SBruce Richardson 226c3169a3SBruce Richardson /* Features desired/implemented by this driver. */ 2396cb6711SOlivier Matz #define VIRTIO_PMD_DEFAULT_GUEST_FEATURES \ 244a92b671SStephen Hemminger (1u << VIRTIO_NET_F_MAC | \ 254a92b671SStephen Hemminger 1u << VIRTIO_NET_F_STATUS | \ 264a92b671SStephen Hemminger 1u << VIRTIO_NET_F_MQ | \ 274a92b671SStephen Hemminger 1u << VIRTIO_NET_F_CTRL_MAC_ADDR | \ 284a92b671SStephen Hemminger 1u << VIRTIO_NET_F_CTRL_VQ | \ 294a92b671SStephen Hemminger 1u << VIRTIO_NET_F_CTRL_RX | \ 304a92b671SStephen Hemminger 1u << VIRTIO_NET_F_CTRL_VLAN | \ 316ba1f63bSYuanhan Liu 1u << VIRTIO_NET_F_MRG_RXBUF | \ 3249d26d9eSMaxime Coquelin 1u << VIRTIO_NET_F_MTU | \ 337365504fSXiao Wang 1ULL << VIRTIO_NET_F_GUEST_ANNOUNCE | \ 34eb9dce6cSPierre Pfister 1u << VIRTIO_RING_F_INDIRECT_DESC | \ 357a75276eSJason Wang 1ULL << VIRTIO_F_VERSION_1 | \ 3641e45c90SMarvin Liu 1ULL << VIRTIO_F_IN_ORDER | \ 37aea29aa5SJens Freimann 1ULL << VIRTIO_F_RING_PACKED | \ 387a75276eSJason Wang 1ULL << VIRTIO_F_IOMMU_PLATFORM) 396c3169a3SBruce Richardson 40142678d4SJianfeng Tan #define VIRTIO_PMD_SUPPORTED_GUEST_FEATURES \ 41142678d4SJianfeng Tan (VIRTIO_PMD_DEFAULT_GUEST_FEATURES | \ 42142678d4SJianfeng Tan 1u << VIRTIO_NET_F_GUEST_CSUM | \ 43142678d4SJianfeng Tan 1u << VIRTIO_NET_F_GUEST_TSO4 | \ 4466908effSTiwei Bie 1u << VIRTIO_NET_F_GUEST_TSO6 | \ 4566908effSTiwei Bie 1u << VIRTIO_NET_F_CSUM | \ 4666908effSTiwei Bie 1u << VIRTIO_NET_F_HOST_TSO4 | \ 4766908effSTiwei Bie 1u << VIRTIO_NET_F_HOST_TSO6) 489c7ce8bdSTiwei Bie 496c3169a3SBruce Richardson /* 506c3169a3SBruce Richardson * CQ function prototype 516c3169a3SBruce Richardson */ 526c3169a3SBruce Richardson void virtio_dev_cq_start(struct rte_eth_dev *dev); 536c3169a3SBruce Richardson 546c3169a3SBruce Richardson /* 556c3169a3SBruce Richardson * RX/TX function prototypes 566c3169a3SBruce Richardson */ 57b0caba1aSJianfeng Tan 58b0caba1aSJianfeng Tan int virtio_dev_rx_queue_done(void *rxq, uint16_t offset); 59b0caba1aSJianfeng Tan 606c3169a3SBruce Richardson int virtio_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, 616c3169a3SBruce Richardson uint16_t nb_rx_desc, unsigned int socket_id, 626c3169a3SBruce Richardson const struct rte_eth_rxconf *rx_conf, 636c3169a3SBruce Richardson struct rte_mempool *mb_pool); 646c3169a3SBruce Richardson 65efc83a1eSOlivier Matz int virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev, 66efc83a1eSOlivier Matz uint16_t rx_queue_id); 67efc83a1eSOlivier Matz 686c3169a3SBruce Richardson int virtio_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id, 696c3169a3SBruce Richardson uint16_t nb_tx_desc, unsigned int socket_id, 706c3169a3SBruce Richardson const struct rte_eth_txconf *tx_conf); 716c3169a3SBruce Richardson 72efc83a1eSOlivier Matz int virtio_dev_tx_queue_setup_finish(struct rte_eth_dev *dev, 73efc83a1eSOlivier Matz uint16_t tx_queue_id); 74efc83a1eSOlivier Matz 756c3169a3SBruce Richardson uint16_t virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, 766c3169a3SBruce Richardson uint16_t nb_pkts); 77a76290c8SJens Freimann uint16_t virtio_recv_pkts_packed(void *rx_queue, struct rte_mbuf **rx_pkts, 78a76290c8SJens Freimann uint16_t nb_pkts); 796c3169a3SBruce Richardson 806c3169a3SBruce Richardson uint16_t virtio_recv_mergeable_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, 816c3169a3SBruce Richardson uint16_t nb_pkts); 826c3169a3SBruce Richardson 83a76290c8SJens Freimann uint16_t virtio_recv_mergeable_pkts_packed(void *rx_queue, 84a76290c8SJens Freimann struct rte_mbuf **rx_pkts, uint16_t nb_pkts); 85a76290c8SJens Freimann 86*efcda136SMaxime Coquelin uint16_t virtio_recv_pkts_inorder(void *rx_queue, 87e5f456a9SMarvin Liu struct rte_mbuf **rx_pkts, uint16_t nb_pkts); 88e5f456a9SMarvin Liu 896c3169a3SBruce Richardson uint16_t virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, 906c3169a3SBruce Richardson uint16_t nb_pkts); 91892dc798SJens Freimann uint16_t virtio_xmit_pkts_packed(void *tx_queue, struct rte_mbuf **tx_pkts, 92892dc798SJens Freimann uint16_t nb_pkts); 936c3169a3SBruce Richardson 94e5f456a9SMarvin Liu uint16_t virtio_xmit_pkts_inorder(void *tx_queue, struct rte_mbuf **tx_pkts, 95e5f456a9SMarvin Liu uint16_t nb_pkts); 96e5f456a9SMarvin Liu 97fc3d6621SHuawei Xie uint16_t virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, 98fc3d6621SHuawei Xie uint16_t nb_pkts); 996c3169a3SBruce Richardson 100c121c8d6SHuawei Xie uint16_t virtio_xmit_pkts_simple(void *tx_queue, struct rte_mbuf **tx_pkts, 101c121c8d6SHuawei Xie uint16_t nb_pkts); 102c121c8d6SHuawei Xie 103ce2eabddSJianfeng Tan int eth_virtio_dev_init(struct rte_eth_dev *eth_dev); 104ce2eabddSJianfeng Tan 105c23a1a30SQi Zhang void virtio_interrupt_handler(void *param); 106ef53b603SJianfeng Tan 1071978a9dcSXiao Wang int virtio_dev_pause(struct rte_eth_dev *dev); 1081978a9dcSXiao Wang void virtio_dev_resume(struct rte_eth_dev *dev); 1091978a9dcSXiao Wang int virtio_inject_pkts(struct rte_eth_dev *dev, struct rte_mbuf **tx_pkts, 1101978a9dcSXiao Wang int nb_pkts); 1111978a9dcSXiao Wang 1126c3169a3SBruce Richardson #endif /* _VIRTIO_ETHDEV_H_ */ 113