1/* SPDX-License-Identifier: GPL-2.0 */
2/* Copyright(c) 2023 Advanced Micro Devices, Inc. */
3
4#ifndef _VFIO_DEV_H_
5#define _VFIO_DEV_H_
6
7#include <linux/pci.h>
8#include <linux/vfio_pci_core.h>
9
10#include "dirty.h"
11#include "lm.h"
12
13struct pds_vfio_pci_device {
14	struct vfio_pci_core_device vfio_coredev;
15
16	struct pds_vfio_lm_file *save_file;
17	struct pds_vfio_lm_file *restore_file;
18	struct pds_vfio_dirty dirty;
19	struct mutex state_mutex; /* protect migration state */
20	enum vfio_device_mig_state state;
21	struct mutex reset_mutex; /* protect reset_done flow */
22	u8 deferred_reset;
23	enum vfio_device_mig_state deferred_reset_state;
24	struct notifier_block nb;
25
26	int vf_id;
27	u16 client_id;
28};
29
30void pds_vfio_state_mutex_unlock(struct pds_vfio_pci_device *pds_vfio);
31
32const struct vfio_device_ops *pds_vfio_ops_info(void);
33struct pds_vfio_pci_device *pds_vfio_pci_drvdata(struct pci_dev *pdev);
34void pds_vfio_reset(struct pds_vfio_pci_device *pds_vfio);
35
36struct pci_dev *pds_vfio_to_pci_dev(struct pds_vfio_pci_device *pds_vfio);
37struct device *pds_vfio_to_dev(struct pds_vfio_pci_device *pds_vfio);
38
39#endif /* _VFIO_DEV_H_ */
40