/* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright(c) 2023 Advanced Micro Devices, Inc */ #ifndef _VDPA_DEV_H_ #define _VDPA_DEV_H_ #include <linux/pci.h> #include <linux/vdpa.h> struct pds_vdpa_vq_info { bool ready; u64 desc_addr; u64 avail_addr; u64 used_addr; u32 q_len; u16 qid; int irq; char irq_name[32]; void __iomem *notify; dma_addr_t notify_pa; u64 doorbell; u16 avail_idx; u16 used_idx; struct vdpa_callback event_cb; struct pds_vdpa_device *pdsv; }; #define PDS_VDPA_MAX_QUEUES 65 #define PDS_VDPA_MAX_QLEN 32768 struct pds_vdpa_device { struct vdpa_device vdpa_dev; struct pds_vdpa_aux *vdpa_aux; struct pds_vdpa_vq_info vqs[PDS_VDPA_MAX_QUEUES]; u64 supported_features; /* supported device features */ u64 negotiated_features; /* negotiated features */ u8 vdpa_index; /* rsvd for future subdevice use */ u8 num_vqs; /* num vqs in use */ u8 mac[ETH_ALEN]; /* mac selected when the device was added */ struct vdpa_callback config_cb; struct notifier_block nb; }; #define PDS_VDPA_PACKED_INVERT_IDX 0x8000 void pds_vdpa_release_irqs(struct pds_vdpa_device *pdsv); int pds_vdpa_get_mgmt_info(struct pds_vdpa_aux *vdpa_aux); #endif /* _VDPA_DEV_H_ */