1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* Copyright(c) 2023 Advanced Micro Devices, Inc */ 3 4 #ifndef _VDPA_DEV_H_ 5 #define _VDPA_DEV_H_ 6 7 #include <linux/pci.h> 8 #include <linux/vdpa.h> 9 10 struct pds_vdpa_vq_info { 11 bool ready; 12 u64 desc_addr; 13 u64 avail_addr; 14 u64 used_addr; 15 u32 q_len; 16 u16 qid; 17 int irq; 18 char irq_name[32]; 19 20 void __iomem *notify; 21 dma_addr_t notify_pa; 22 23 u64 doorbell; 24 u16 avail_idx; 25 u16 used_idx; 26 27 struct vdpa_callback event_cb; 28 struct pds_vdpa_device *pdsv; 29 }; 30 31 #define PDS_VDPA_MAX_QUEUES 65 32 #define PDS_VDPA_MAX_QLEN 32768 33 struct pds_vdpa_device { 34 struct vdpa_device vdpa_dev; 35 struct pds_vdpa_aux *vdpa_aux; 36 37 struct pds_vdpa_vq_info vqs[PDS_VDPA_MAX_QUEUES]; 38 u64 supported_features; /* supported device features */ 39 u64 negotiated_features; /* negotiated features */ 40 u8 vdpa_index; /* rsvd for future subdevice use */ 41 u8 num_vqs; /* num vqs in use */ 42 u8 mac[ETH_ALEN]; /* mac selected when the device was added */ 43 struct vdpa_callback config_cb; 44 struct notifier_block nb; 45 }; 46 47 #define PDS_VDPA_PACKED_INVERT_IDX 0x8000 48 49 void pds_vdpa_release_irqs(struct pds_vdpa_device *pdsv); 50 int pds_vdpa_get_mgmt_info(struct pds_vdpa_aux *vdpa_aux); 51 #endif /* _VDPA_DEV_H_ */ 52