xref: /dpdk/drivers/vdpa/nfp/nfp_vdpa_core.h (revision 02fe8366156a0bc7f3049f92120c185d11bbc217)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2023 Corigine, Inc.
3  * All rights reserved.
4  */
5 
6 #ifndef __NFP_VDPA_CORE_H__
7 #define __NFP_VDPA_CORE_H__
8 
9 #include <bus_pci_driver.h>
10 #include <nfp_common.h>
11 #include <rte_ether.h>
12 #include <rte_vhost.h>
13 
14 #define NFP_VDPA_MAX_QUEUES         1
15 
16 #define NFP_VDPA_NOTIFY_ADDR_BASE        0x4000
17 #define NFP_VDPA_NOTIFY_ADDR_INTERVAL    0x1000
18 
19 #define NFP_VDPA_RELAY_VRING             0xd0000000
20 
21 struct nfp_vdpa_vring {
22 	uint64_t desc;
23 	uint64_t avail;
24 	uint64_t used;
25 	uint16_t size;
26 	uint16_t last_avail_idx;
27 	uint16_t last_used_idx;
28 };
29 
30 struct nfp_vdpa_hw {
31 	struct nfp_hw super;
32 
33 	uint64_t features;
34 	uint64_t req_features;
35 
36 	uint8_t *notify_addr[NFP_VDPA_MAX_QUEUES * 2];
37 	struct nfp_vdpa_vring vring[NFP_VDPA_MAX_QUEUES * 2];
38 
39 	uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
40 	uint8_t notify_region;
41 	uint8_t nr_vring;
42 
43 	/** Software Live Migration */
44 	bool sw_lm;
45 	bool sw_fallback_running;
46 
47 	/** Mediated vring for SW fallback */
48 	struct vring m_vring[NFP_VDPA_MAX_QUEUES * 2];
49 };
50 
51 int nfp_vdpa_hw_init(struct nfp_vdpa_hw *vdpa_hw, struct rte_pci_device *dev);
52 
53 int nfp_vdpa_hw_start(struct nfp_vdpa_hw *vdpa_hw, int vid);
54 
55 int nfp_vdpa_relay_hw_start(struct nfp_vdpa_hw *vdpa_hw, int vid);
56 
57 void nfp_vdpa_hw_stop(struct nfp_vdpa_hw *vdpa_hw);
58 
59 void nfp_vdpa_notify_queue(struct nfp_vdpa_hw *vdpa_hw, uint16_t qid);
60 
61 uint64_t nfp_vdpa_get_queue_notify_offset(struct nfp_vdpa_hw *vdpa_hw, int qid);
62 
63 void nfp_vdpa_irq_unmask(struct nfp_vdpa_hw *vdpa_hw);
64 
65 #endif /* __NFP_VDPA_CORE_H__ */
66