xref: /freebsd/sys/dev/qat/qat_api/freebsd_module.c (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
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