xref: /linux/drivers/vfio/pci/pds/lm.h (revision 79790b6818e96c58fe2bffee1b418c16e64e7b80)
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*457f7308SBrett 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