1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright(c) 2024 Intel Corporation */
3 #include <linux/dev_printk.h>
4 #include <linux/export.h>
6 #include <linux/types.h>
7 #include <linux/qat/qat_mig_dev.h>
8 #include "adf_accel_devices.h"
9 #include "adf_common_drv.h"
11 struct qat_mig_dev *qat_vfmig_create(struct pci_dev *pdev, int vf_id)
13 struct adf_accel_dev *accel_dev;
14 struct qat_migdev_ops *ops;
15 struct qat_mig_dev *mdev;
17 accel_dev = adf_devmgr_pci_to_accel_dev(pdev);
19 return ERR_PTR(-ENODEV);
21 ops = GET_VFMIG_OPS(accel_dev);
22 if (!ops || !ops->init || !ops->cleanup || !ops->reset || !ops->open ||
23 !ops->close || !ops->suspend || !ops->resume || !ops->save_state ||
24 !ops->load_state || !ops->save_setup || !ops->load_setup)
25 return ERR_PTR(-EINVAL);
27 mdev = kmalloc(sizeof(*mdev), GFP_KERNEL);
29 return ERR_PTR(-ENOMEM);
32 mdev->parent_accel_dev = accel_dev;
36 EXPORT_SYMBOL_GPL(qat_vfmig_create);
38 int qat_vfmig_init(struct qat_mig_dev *mdev)
40 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
42 return GET_VFMIG_OPS(accel_dev)->init(mdev);
44 EXPORT_SYMBOL_GPL(qat_vfmig_init);
46 void qat_vfmig_cleanup(struct qat_mig_dev *mdev)
48 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
50 return GET_VFMIG_OPS(accel_dev)->cleanup(mdev);
52 EXPORT_SYMBOL_GPL(qat_vfmig_cleanup);
54 void qat_vfmig_reset(struct qat_mig_dev *mdev)
56 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
58 return GET_VFMIG_OPS(accel_dev)->reset(mdev);
60 EXPORT_SYMBOL_GPL(qat_vfmig_reset);
62 int qat_vfmig_open(struct qat_mig_dev *mdev)
64 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
66 return GET_VFMIG_OPS(accel_dev)->open(mdev);
68 EXPORT_SYMBOL_GPL(qat_vfmig_open);
70 void qat_vfmig_close(struct qat_mig_dev *mdev)
72 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
74 GET_VFMIG_OPS(accel_dev)->close(mdev);
76 EXPORT_SYMBOL_GPL(qat_vfmig_close);
78 int qat_vfmig_suspend(struct qat_mig_dev *mdev)
80 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
82 return GET_VFMIG_OPS(accel_dev)->suspend(mdev);
84 EXPORT_SYMBOL_GPL(qat_vfmig_suspend);
86 int qat_vfmig_resume(struct qat_mig_dev *mdev)
88 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
90 return GET_VFMIG_OPS(accel_dev)->resume(mdev);
92 EXPORT_SYMBOL_GPL(qat_vfmig_resume);
94 int qat_vfmig_save_state(struct qat_mig_dev *mdev)
96 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
98 return GET_VFMIG_OPS(accel_dev)->save_state(mdev);
100 EXPORT_SYMBOL_GPL(qat_vfmig_save_state);
102 int qat_vfmig_save_setup(struct qat_mig_dev *mdev)
104 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
106 return GET_VFMIG_OPS(accel_dev)->save_setup(mdev);
108 EXPORT_SYMBOL_GPL(qat_vfmig_save_setup);
110 int qat_vfmig_load_state(struct qat_mig_dev *mdev)
112 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
114 return GET_VFMIG_OPS(accel_dev)->load_state(mdev);
116 EXPORT_SYMBOL_GPL(qat_vfmig_load_state);
118 int qat_vfmig_load_setup(struct qat_mig_dev *mdev, int size)
120 struct adf_accel_dev *accel_dev = mdev->parent_accel_dev;
122 return GET_VFMIG_OPS(accel_dev)->load_setup(mdev, size);
124 EXPORT_SYMBOL_GPL(qat_vfmig_load_setup);
126 void qat_vfmig_destroy(struct qat_mig_dev *mdev)
130 EXPORT_SYMBOL_GPL(qat_vfmig_destroy);