xref: /freebsd/sys/dev/qat/qat_api/freebsd_module.c (revision 71625ec9)
178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
378ee8d1cSJulian Grajkowski #include "adf_cfg.h"
478ee8d1cSJulian Grajkowski #include "cpa.h"
578ee8d1cSJulian Grajkowski #include "icp_accel_devices.h"
678ee8d1cSJulian Grajkowski #include "adf_common_drv.h"
778ee8d1cSJulian Grajkowski #include "icp_adf_debug.h"
878ee8d1cSJulian Grajkowski #include "icp_adf_init.h"
978ee8d1cSJulian Grajkowski #include "lac_sal_ctrl.h"
1078ee8d1cSJulian Grajkowski 
1178ee8d1cSJulian Grajkowski extern struct mtx *adfDevicesLock;
1278ee8d1cSJulian Grajkowski 
1378ee8d1cSJulian Grajkowski static int
adf_module_load(void)1478ee8d1cSJulian Grajkowski adf_module_load(void)
1578ee8d1cSJulian Grajkowski {
1678ee8d1cSJulian Grajkowski 	CpaStatus ret = CPA_STATUS_SUCCESS;
1778ee8d1cSJulian Grajkowski 
1878ee8d1cSJulian Grajkowski 	qatUtilsMutexInit(&adfDevicesLock);
1978ee8d1cSJulian Grajkowski 	ret = SalCtrl_AdfServicesRegister();
2078ee8d1cSJulian Grajkowski 	if (ret != CPA_STATUS_SUCCESS) {
2178ee8d1cSJulian Grajkowski 		qatUtilsMutexDestroy(&adfDevicesLock);
2278ee8d1cSJulian Grajkowski 		return EFAULT;
2378ee8d1cSJulian Grajkowski 	}
2478ee8d1cSJulian Grajkowski 
2578ee8d1cSJulian Grajkowski 	return 0;
2678ee8d1cSJulian Grajkowski }
2778ee8d1cSJulian Grajkowski 
2878ee8d1cSJulian Grajkowski static int
adf_module_unload(void)2978ee8d1cSJulian Grajkowski adf_module_unload(void)
3078ee8d1cSJulian Grajkowski {
3178ee8d1cSJulian Grajkowski 	CpaStatus ret = CPA_STATUS_SUCCESS;
3278ee8d1cSJulian Grajkowski 
3378ee8d1cSJulian Grajkowski 	ret = SalCtrl_AdfServicesUnregister();
3478ee8d1cSJulian Grajkowski 	if (ret != CPA_STATUS_SUCCESS) {
3578ee8d1cSJulian Grajkowski 		return EBUSY;
3678ee8d1cSJulian Grajkowski 	}
3778ee8d1cSJulian Grajkowski 	qatUtilsMutexDestroy(&adfDevicesLock);
3878ee8d1cSJulian Grajkowski 
3978ee8d1cSJulian Grajkowski 	return 0;
4078ee8d1cSJulian Grajkowski }
4178ee8d1cSJulian Grajkowski 
4278ee8d1cSJulian Grajkowski static int
adf_modevent(module_t mod,int type,void * arg)4378ee8d1cSJulian Grajkowski adf_modevent(module_t mod, int type, void *arg)
4478ee8d1cSJulian Grajkowski {
4578ee8d1cSJulian Grajkowski 	int error;
4678ee8d1cSJulian Grajkowski 
4778ee8d1cSJulian Grajkowski 	switch (type) {
4878ee8d1cSJulian Grajkowski 	case MOD_LOAD:
4978ee8d1cSJulian Grajkowski 		error = adf_module_load();
5078ee8d1cSJulian Grajkowski 		break;
5178ee8d1cSJulian Grajkowski 	case MOD_UNLOAD:
5278ee8d1cSJulian Grajkowski 		error = adf_module_unload();
5378ee8d1cSJulian Grajkowski 		break;
5478ee8d1cSJulian Grajkowski 	default:
5578ee8d1cSJulian Grajkowski 		error = EOPNOTSUPP;
5678ee8d1cSJulian Grajkowski 		break;
5778ee8d1cSJulian Grajkowski 	}
5878ee8d1cSJulian Grajkowski 
5978ee8d1cSJulian Grajkowski 	return (error);
6078ee8d1cSJulian Grajkowski }
6178ee8d1cSJulian Grajkowski 
6278ee8d1cSJulian Grajkowski static moduledata_t adf_mod = { "qat_api", adf_modevent, 0 };
6378ee8d1cSJulian Grajkowski 
6478ee8d1cSJulian Grajkowski DECLARE_MODULE(qat_api, adf_mod, SI_SUB_DRIVERS, SI_ORDER_SECOND);
6578ee8d1cSJulian Grajkowski MODULE_VERSION(qat_api, 1);
6678ee8d1cSJulian Grajkowski MODULE_DEPEND(qat_api, qat_common, 1, 1, 1);
6778ee8d1cSJulian Grajkowski MODULE_DEPEND(qat_api, linuxkpi, 1, 1, 1);
68