xref: /dpdk/drivers/net/virtio/virtio_ethdev.h (revision efcda13648d25ed21bc9de2f19082fe8eb5ab8ff)
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