1*78ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
2*78ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
3*78ee8d1cSJulian Grajkowski #include "adf_cfg.h"
4*78ee8d1cSJulian Grajkowski #include "cpa.h"
5*78ee8d1cSJulian Grajkowski #include "icp_accel_devices.h"
6*78ee8d1cSJulian Grajkowski #include "adf_common_drv.h"
7*78ee8d1cSJulian Grajkowski #include "icp_adf_debug.h"
8*78ee8d1cSJulian Grajkowski #include "icp_adf_init.h"
9*78ee8d1cSJulian Grajkowski #include "lac_sal_ctrl.h"
10*78ee8d1cSJulian Grajkowski
11*78ee8d1cSJulian Grajkowski extern struct mtx *adfDevicesLock;
12*78ee8d1cSJulian Grajkowski
13*78ee8d1cSJulian Grajkowski static int
adf_module_load(void)14*78ee8d1cSJulian Grajkowski adf_module_load(void)
15*78ee8d1cSJulian Grajkowski {
16*78ee8d1cSJulian Grajkowski CpaStatus ret = CPA_STATUS_SUCCESS;
17*78ee8d1cSJulian Grajkowski
18*78ee8d1cSJulian Grajkowski qatUtilsMutexInit(&adfDevicesLock);
19*78ee8d1cSJulian Grajkowski ret = SalCtrl_AdfServicesRegister();
20*78ee8d1cSJulian Grajkowski if (ret != CPA_STATUS_SUCCESS) {
21*78ee8d1cSJulian Grajkowski qatUtilsMutexDestroy(&adfDevicesLock);
22*78ee8d1cSJulian Grajkowski return EFAULT;
23*78ee8d1cSJulian Grajkowski }
24*78ee8d1cSJulian Grajkowski
25*78ee8d1cSJulian Grajkowski return 0;
26*78ee8d1cSJulian Grajkowski }
27*78ee8d1cSJulian Grajkowski
28*78ee8d1cSJulian Grajkowski static int
adf_module_unload(void)29*78ee8d1cSJulian Grajkowski adf_module_unload(void)
30*78ee8d1cSJulian Grajkowski {
31*78ee8d1cSJulian Grajkowski CpaStatus ret = CPA_STATUS_SUCCESS;
32*78ee8d1cSJulian Grajkowski
33*78ee8d1cSJulian Grajkowski ret = SalCtrl_AdfServicesUnregister();
34*78ee8d1cSJulian Grajkowski if (ret != CPA_STATUS_SUCCESS) {
35*78ee8d1cSJulian Grajkowski return EBUSY;
36*78ee8d1cSJulian Grajkowski }
37*78ee8d1cSJulian Grajkowski qatUtilsMutexDestroy(&adfDevicesLock);
38*78ee8d1cSJulian Grajkowski
39*78ee8d1cSJulian Grajkowski return 0;
40*78ee8d1cSJulian Grajkowski }
41*78ee8d1cSJulian Grajkowski
42*78ee8d1cSJulian Grajkowski static int
adf_modevent(module_t mod,int type,void * arg)43*78ee8d1cSJulian Grajkowski adf_modevent(module_t mod, int type, void *arg)
44*78ee8d1cSJulian Grajkowski {
45*78ee8d1cSJulian Grajkowski int error;
46*78ee8d1cSJulian Grajkowski
47*78ee8d1cSJulian Grajkowski switch (type) {
48*78ee8d1cSJulian Grajkowski case MOD_LOAD:
49*78ee8d1cSJulian Grajkowski error = adf_module_load();
50*78ee8d1cSJulian Grajkowski break;
51*78ee8d1cSJulian Grajkowski case MOD_UNLOAD:
52*78ee8d1cSJulian Grajkowski error = adf_module_unload();
53*78ee8d1cSJulian Grajkowski break;
54*78ee8d1cSJulian Grajkowski default:
55*78ee8d1cSJulian Grajkowski error = EOPNOTSUPP;
56*78ee8d1cSJulian Grajkowski break;
57*78ee8d1cSJulian Grajkowski }
58*78ee8d1cSJulian Grajkowski
59*78ee8d1cSJulian Grajkowski return (error);
60*78ee8d1cSJulian Grajkowski }
61*78ee8d1cSJulian Grajkowski
62*78ee8d1cSJulian Grajkowski static moduledata_t adf_mod = { "qat_api", adf_modevent, 0 };
63*78ee8d1cSJulian Grajkowski
64*78ee8d1cSJulian Grajkowski DECLARE_MODULE(qat_api, adf_mod, SI_SUB_DRIVERS, SI_ORDER_SECOND);
65*78ee8d1cSJulian Grajkowski MODULE_VERSION(qat_api, 1);
66*78ee8d1cSJulian Grajkowski MODULE_DEPEND(qat_api, qat_common, 1, 1, 1);
67*78ee8d1cSJulian Grajkowski MODULE_DEPEND(qat_api, linuxkpi, 1, 1, 1);
68