162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright(c) 2023 Advanced Micro Devices, Inc. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef _VFIO_DEV_H_
562306a36Sopenharmony_ci#define _VFIO_DEV_H_
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <linux/pci.h>
862306a36Sopenharmony_ci#include <linux/vfio_pci_core.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include "dirty.h"
1162306a36Sopenharmony_ci#include "lm.h"
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cistruct pds_vfio_pci_device {
1462306a36Sopenharmony_ci	struct vfio_pci_core_device vfio_coredev;
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci	struct pds_vfio_lm_file *save_file;
1762306a36Sopenharmony_ci	struct pds_vfio_lm_file *restore_file;
1862306a36Sopenharmony_ci	struct pds_vfio_dirty dirty;
1962306a36Sopenharmony_ci	struct mutex state_mutex; /* protect migration state */
2062306a36Sopenharmony_ci	enum vfio_device_mig_state state;
2162306a36Sopenharmony_ci	struct mutex reset_mutex; /* protect reset_done flow */
2262306a36Sopenharmony_ci	u8 deferred_reset;
2362306a36Sopenharmony_ci	enum vfio_device_mig_state deferred_reset_state;
2462306a36Sopenharmony_ci	struct notifier_block nb;
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	int vf_id;
2762306a36Sopenharmony_ci	u16 client_id;
2862306a36Sopenharmony_ci};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_civoid pds_vfio_state_mutex_unlock(struct pds_vfio_pci_device *pds_vfio);
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciconst struct vfio_device_ops *pds_vfio_ops_info(void);
3362306a36Sopenharmony_cistruct pds_vfio_pci_device *pds_vfio_pci_drvdata(struct pci_dev *pdev);
3462306a36Sopenharmony_civoid pds_vfio_reset(struct pds_vfio_pci_device *pds_vfio);
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cistruct pci_dev *pds_vfio_to_pci_dev(struct pds_vfio_pci_device *pds_vfio);
3762306a36Sopenharmony_cistruct device *pds_vfio_to_dev(struct pds_vfio_pci_device *pds_vfio);
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci#endif /* _VFIO_DEV_H_ */
40