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 | |