| /* 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_ */ |