| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* Copyright(c) 2023 Advanced Micro Devices, Inc. */ |
| |
| #ifndef _DIRTY_H_ |
| #define _DIRTY_H_ |
| |
| struct pds_vfio_region { |
| unsigned long *host_seq; |
| unsigned long *host_ack; |
| u64 bmp_bytes; |
| u64 size; |
| u64 start; |
| u64 page_size; |
| struct pds_lm_sg_elem *sgl; |
| dma_addr_t sgl_addr; |
| u32 dev_bmp_offset_start_byte; |
| u16 num_sge; |
| }; |
| |
| struct pds_vfio_dirty { |
| struct pds_vfio_region *regions; |
| u8 num_regions; |
| bool is_enabled; |
| }; |
| |
| struct pds_vfio_pci_device; |
| |
| bool pds_vfio_dirty_is_enabled(struct pds_vfio_pci_device *pds_vfio); |
| void pds_vfio_dirty_set_enabled(struct pds_vfio_pci_device *pds_vfio); |
| void pds_vfio_dirty_set_disabled(struct pds_vfio_pci_device *pds_vfio); |
| void pds_vfio_dirty_disable(struct pds_vfio_pci_device *pds_vfio, |
| bool send_cmd); |
| |
| int pds_vfio_dma_logging_report(struct vfio_device *vdev, unsigned long iova, |
| unsigned long length, |
| struct iova_bitmap *dirty); |
| int pds_vfio_dma_logging_start(struct vfio_device *vdev, |
| struct rb_root_cached *ranges, u32 nnodes, |
| u64 *page_size); |
| int pds_vfio_dma_logging_stop(struct vfio_device *vdev); |
| #endif /* _DIRTY_H_ */ |