1bb500dbeSBrett Creeley /* SPDX-License-Identifier: GPL-2.0 */ 2bb500dbeSBrett Creeley /* Copyright(c) 2023 Advanced Micro Devices, Inc. */ 3bb500dbeSBrett Creeley 4bb500dbeSBrett Creeley #ifndef _LM_H_ 5bb500dbeSBrett Creeley #define _LM_H_ 6bb500dbeSBrett Creeley 7bb500dbeSBrett Creeley #include <linux/fs.h> 8bb500dbeSBrett Creeley #include <linux/mutex.h> 9bb500dbeSBrett Creeley #include <linux/scatterlist.h> 10bb500dbeSBrett Creeley #include <linux/types.h> 11bb500dbeSBrett Creeley 12bb500dbeSBrett Creeley #include <linux/pds/pds_common.h> 13bb500dbeSBrett Creeley #include <linux/pds/pds_adminq.h> 14bb500dbeSBrett Creeley 15bb500dbeSBrett Creeley struct pds_vfio_lm_file { 16bb500dbeSBrett Creeley struct file *filep; 17bb500dbeSBrett Creeley struct mutex lock; /* protect live migration data file */ 18bb500dbeSBrett Creeley u64 size; /* Size with valid data */ 19bb500dbeSBrett Creeley u64 alloc_size; /* Total allocated size. Always >= len */ 20bb500dbeSBrett Creeley void *page_mem; /* memory allocated for pages */ 21bb500dbeSBrett Creeley struct page **pages; /* Backing pages for file */ 22bb500dbeSBrett Creeley unsigned long long npages; 23bb500dbeSBrett Creeley struct sg_table sg_table; /* SG table for backing pages */ 24bb500dbeSBrett Creeley struct pds_lm_sg_elem *sgl; /* DMA mapping */ 25bb500dbeSBrett Creeley dma_addr_t sgl_addr; 26bb500dbeSBrett Creeley u16 num_sge; 27bb500dbeSBrett Creeley struct scatterlist *last_offset_sg; /* Iterator */ 28bb500dbeSBrett Creeley unsigned int sg_last_entry; 29bb500dbeSBrett Creeley unsigned long last_offset; 30*66aa5d95SBrett Creeley bool disabled; 31bb500dbeSBrett Creeley }; 32bb500dbeSBrett Creeley 33bb500dbeSBrett Creeley struct pds_vfio_pci_device; 34bb500dbeSBrett Creeley 35bb500dbeSBrett Creeley struct file * 36bb500dbeSBrett Creeley pds_vfio_step_device_state_locked(struct pds_vfio_pci_device *pds_vfio, 37bb500dbeSBrett Creeley enum vfio_device_mig_state next); 38bb500dbeSBrett Creeley 39bb500dbeSBrett Creeley void pds_vfio_put_save_file(struct pds_vfio_pci_device *pds_vfio); 40bb500dbeSBrett Creeley void pds_vfio_put_restore_file(struct pds_vfio_pci_device *pds_vfio); 41bb500dbeSBrett Creeley 42bb500dbeSBrett Creeley #endif /* _LM_H_ */ 43