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