xref: /openbmc/linux/drivers/vfio/pci/pds/dirty.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1*f232836aSBrett Creeley /* SPDX-License-Identifier: GPL-2.0 */
2*f232836aSBrett Creeley /* Copyright(c) 2023 Advanced Micro Devices, Inc. */
3*f232836aSBrett Creeley 
4*f232836aSBrett Creeley #ifndef _DIRTY_H_
5*f232836aSBrett Creeley #define _DIRTY_H_
6*f232836aSBrett Creeley 
7*f232836aSBrett Creeley struct pds_vfio_bmp_info {
8*f232836aSBrett Creeley 	unsigned long *bmp;
9*f232836aSBrett Creeley 	u32 bmp_bytes;
10*f232836aSBrett Creeley 	struct pds_lm_sg_elem *sgl;
11*f232836aSBrett Creeley 	dma_addr_t sgl_addr;
12*f232836aSBrett Creeley 	u16 num_sge;
13*f232836aSBrett Creeley };
14*f232836aSBrett Creeley 
15*f232836aSBrett Creeley struct pds_vfio_dirty {
16*f232836aSBrett Creeley 	struct pds_vfio_bmp_info host_seq;
17*f232836aSBrett Creeley 	struct pds_vfio_bmp_info host_ack;
18*f232836aSBrett Creeley 	u64 region_size;
19*f232836aSBrett Creeley 	u64 region_start;
20*f232836aSBrett Creeley 	u64 region_page_size;
21*f232836aSBrett Creeley 	bool is_enabled;
22*f232836aSBrett Creeley };
23*f232836aSBrett Creeley 
24*f232836aSBrett Creeley struct pds_vfio_pci_device;
25*f232836aSBrett Creeley 
26*f232836aSBrett Creeley bool pds_vfio_dirty_is_enabled(struct pds_vfio_pci_device *pds_vfio);
27*f232836aSBrett Creeley void pds_vfio_dirty_set_enabled(struct pds_vfio_pci_device *pds_vfio);
28*f232836aSBrett Creeley void pds_vfio_dirty_set_disabled(struct pds_vfio_pci_device *pds_vfio);
29*f232836aSBrett Creeley void pds_vfio_dirty_disable(struct pds_vfio_pci_device *pds_vfio,
30*f232836aSBrett Creeley 			    bool send_cmd);
31*f232836aSBrett Creeley 
32*f232836aSBrett Creeley int pds_vfio_dma_logging_report(struct vfio_device *vdev, unsigned long iova,
33*f232836aSBrett Creeley 				unsigned long length,
34*f232836aSBrett Creeley 				struct iova_bitmap *dirty);
35*f232836aSBrett Creeley int pds_vfio_dma_logging_start(struct vfio_device *vdev,
36*f232836aSBrett Creeley 			       struct rb_root_cached *ranges, u32 nnodes,
37*f232836aSBrett Creeley 			       u64 *page_size);
38*f232836aSBrett Creeley int pds_vfio_dma_logging_stop(struct vfio_device *vdev);
39*f232836aSBrett Creeley #endif /* _DIRTY_H_ */
40