Merge tag 'riscv-for-linus-6.8-mw4' of git://git.kernel.org/pub/scm/linux/kernel...
[sfrench/cifs-2.6.git] / drivers / vfio / pci / pds / dirty.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright(c) 2023 Advanced Micro Devices, Inc. */
3
4 #ifndef _DIRTY_H_
5 #define _DIRTY_H_
6
7 struct pds_vfio_region {
8         unsigned long *host_seq;
9         unsigned long *host_ack;
10         u64 bmp_bytes;
11         u64 size;
12         u64 start;
13         u64 page_size;
14         struct pds_lm_sg_elem *sgl;
15         dma_addr_t sgl_addr;
16         u32 dev_bmp_offset_start_byte;
17         u16 num_sge;
18 };
19
20 struct pds_vfio_dirty {
21         struct pds_vfio_region *regions;
22         u8 num_regions;
23         bool is_enabled;
24 };
25
26 struct pds_vfio_pci_device;
27
28 bool pds_vfio_dirty_is_enabled(struct pds_vfio_pci_device *pds_vfio);
29 void pds_vfio_dirty_set_enabled(struct pds_vfio_pci_device *pds_vfio);
30 void pds_vfio_dirty_set_disabled(struct pds_vfio_pci_device *pds_vfio);
31 void pds_vfio_dirty_disable(struct pds_vfio_pci_device *pds_vfio,
32                             bool send_cmd);
33
34 int pds_vfio_dma_logging_report(struct vfio_device *vdev, unsigned long iova,
35                                 unsigned long length,
36                                 struct iova_bitmap *dirty);
37 int pds_vfio_dma_logging_start(struct vfio_device *vdev,
38                                struct rb_root_cached *ranges, u32 nnodes,
39                                u64 *page_size);
40 int pds_vfio_dma_logging_stop(struct vfio_device *vdev);
41 #endif /* _DIRTY_H_ */