git: e745eee59c82 - main - qat: reimplement cpaCyGetXXXInstances as a wrapper
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 06 Jun 2025 13:57:08 UTC
The branch main has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=e745eee59c821c1d8ae7f5b25dfbdf0049b4787c
commit e745eee59c821c1d8ae7f5b25dfbdf0049b4787c
Author: Hareshx Sankar Raj <hareshx.sankar.raj@intel.com>
AuthorDate: 2025-05-01 05:53:54 +0000
Commit: Mark Johnston <markj@FreeBSD.org>
CommitDate: 2025-06-06 13:43:42 +0000
qat: reimplement cpaCyGetXXXInstances as a wrapper
Currently code from sal_instances.c and sal_crypto.c
for getting cy instances or number of instances is duplicated.
This commit replaces cpaCyGetXXXInstances implementation with
Lac_GetCyXXXInstancesByType invocation.
Reviewed by: markj, ziaee
MFC after: 2 weeks
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D50379
---
sys/dev/qat/qat_api/common/ctrl/sal_crypto.c | 205 ++-------------------
.../qat/qat_api/common/ctrl/sal_get_instances.c | 177 ++++++++++++++----
.../qat_api/common/include/lac_sal_types_crypto.h | 23 ++-
3 files changed, 182 insertions(+), 223 deletions(-)
diff --git a/sys/dev/qat/qat_api/common/ctrl/sal_crypto.c b/sys/dev/qat/qat_api/common/ctrl/sal_crypto.c
index e8a5ab1361e7..7bfc5ec3ba10 100644
--- a/sys/dev/qat/qat_api/common/ctrl/sal_crypto.c
+++ b/sys/dev/qat/qat_api/common/ctrl/sal_crypto.c
@@ -73,6 +73,15 @@
#define NUM_CRYPTO_ASYM_RX_RINGS 1
#define NUM_CRYPTO_NRBG_RX_RINGS 1
+CpaStatus Lac_GetCyInstancesByType(
+ const CpaAccelerationServiceType accelerationServiceType,
+ Cpa16U numInstances,
+ CpaInstanceHandle *pInstances);
+
+CpaStatus Lac_GetCyNumInstancesByType(
+ const CpaAccelerationServiceType accelerationServiceType,
+ Cpa16U *pNumInstances);
+
static CpaInstanceHandle
Lac_CryptoGetFirstHandle(void)
{
@@ -1068,84 +1077,8 @@ cpaCyInstanceSetNotificationCb(
CpaStatus
cpaCyGetNumInstances(Cpa16U *pNumInstances)
{
- CpaStatus status = CPA_STATUS_SUCCESS;
- CpaInstanceHandle cyInstanceHandle;
- CpaInstanceInfo2 info;
- icp_accel_dev_t **pAdfInsts = NULL;
- icp_accel_dev_t *dev_addr = NULL;
- sal_t *base_addr = NULL;
- sal_list_t *list_temp = NULL;
- Cpa16U num_accel_dev = 0;
- Cpa16U num_inst = 0;
- Cpa16U i = 0;
-
- LAC_CHECK_NULL_PARAM(pNumInstances);
-
- /* Get the number of accel_dev in the system */
- status = icp_amgr_getNumInstances(&num_accel_dev);
- LAC_CHECK_STATUS(status);
-
- /* Allocate memory to store addr of accel_devs */
- pAdfInsts =
- malloc(num_accel_dev * sizeof(icp_accel_dev_t *), M_QAT, M_WAITOK);
- num_accel_dev = 0;
- /* Get ADF to return all accel_devs that support either
- * symmetric or asymmetric crypto */
- status = icp_amgr_getAllAccelDevByCapabilities(
- (ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC |
- ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC),
- pAdfInsts,
- &num_accel_dev);
- if (CPA_STATUS_SUCCESS != status) {
- LAC_LOG_ERROR("No support for crypto\n");
- *pNumInstances = 0;
- free(pAdfInsts, M_QAT);
- return status;
- }
-
- for (i = 0; i < num_accel_dev; i++) {
- dev_addr = (icp_accel_dev_t *)pAdfInsts[i];
- if (NULL == dev_addr || NULL == dev_addr->pSalHandle) {
- continue;
- }
-
- base_addr = dev_addr->pSalHandle;
- list_temp = base_addr->crypto_services;
- while (NULL != list_temp) {
- cyInstanceHandle = SalList_getObject(list_temp);
- status = cpaCyInstanceGetInfo2(cyInstanceHandle, &info);
- if (CPA_STATUS_SUCCESS == status &&
- CPA_TRUE == info.isPolled) {
- num_inst++;
- }
- list_temp = SalList_next(list_temp);
- }
- list_temp = base_addr->asym_services;
- while (NULL != list_temp) {
- cyInstanceHandle = SalList_getObject(list_temp);
- status = cpaCyInstanceGetInfo2(cyInstanceHandle, &info);
- if (CPA_STATUS_SUCCESS == status &&
- CPA_TRUE == info.isPolled) {
- num_inst++;
- }
- list_temp = SalList_next(list_temp);
- }
- list_temp = base_addr->sym_services;
- while (NULL != list_temp) {
- cyInstanceHandle = SalList_getObject(list_temp);
- status = cpaCyInstanceGetInfo2(cyInstanceHandle, &info);
- if (CPA_STATUS_SUCCESS == status &&
- CPA_TRUE == info.isPolled) {
- num_inst++;
- }
- list_temp = SalList_next(list_temp);
- }
- }
- *pNumInstances = num_inst;
- free(pAdfInsts, M_QAT);
-
-
- return status;
+ return Lac_GetCyNumInstancesByType(CPA_ACC_SVC_TYPE_CRYPTO,
+ pNumInstances);
}
/**
@@ -1155,119 +1088,9 @@ cpaCyGetNumInstances(Cpa16U *pNumInstances)
CpaStatus
cpaCyGetInstances(Cpa16U numInstances, CpaInstanceHandle *pCyInstances)
{
- CpaStatus status = CPA_STATUS_SUCCESS;
- CpaInstanceHandle cyInstanceHandle;
- CpaInstanceInfo2 info;
- icp_accel_dev_t **pAdfInsts = NULL;
- icp_accel_dev_t *dev_addr = NULL;
- sal_t *base_addr = NULL;
- sal_list_t *list_temp = NULL;
- Cpa16U num_accel_dev = 0;
- Cpa16U num_allocated_instances = 0;
- Cpa16U index = 0;
- Cpa16U i = 0;
-
-
- LAC_CHECK_NULL_PARAM(pCyInstances);
- if (0 == numInstances) {
- LAC_INVALID_PARAM_LOG("NumInstances is 0");
- return CPA_STATUS_INVALID_PARAM;
- }
-
- /* Get the number of crypto instances */
- status = cpaCyGetNumInstances(&num_allocated_instances);
- if (CPA_STATUS_SUCCESS != status) {
- return status;
- }
-
- if (numInstances > num_allocated_instances) {
- QAT_UTILS_LOG("Only %d crypto instances available\n",
- num_allocated_instances);
- return CPA_STATUS_RESOURCE;
- }
-
- /* Get the number of accel devices in the system */
- status = icp_amgr_getNumInstances(&num_accel_dev);
- LAC_CHECK_STATUS(status);
-
- /* Allocate memory to store addr of accel_devs */
- pAdfInsts =
- malloc(num_accel_dev * sizeof(icp_accel_dev_t *), M_QAT, M_WAITOK);
-
- num_accel_dev = 0;
- /* Get ADF to return all accel_devs that support either
- * symmetric or asymmetric crypto */
- status = icp_amgr_getAllAccelDevByCapabilities(
- (ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC |
- ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC),
- pAdfInsts,
- &num_accel_dev);
- if (CPA_STATUS_SUCCESS != status) {
- LAC_LOG_ERROR("No support for crypto\n");
- free(pAdfInsts, M_QAT);
- return status;
- }
-
- for (i = 0; i < num_accel_dev; i++) {
- dev_addr = (icp_accel_dev_t *)pAdfInsts[i];
- /* Note dev_addr cannot be NULL here as numInstances = 0
- * is not valid and if dev_addr = NULL then index = 0 (which
- * is less than numInstances and status is set to _RESOURCE
- * above
- */
- base_addr = dev_addr->pSalHandle;
- if (NULL == base_addr) {
- continue;
- }
- list_temp = base_addr->crypto_services;
- while (NULL != list_temp) {
- if (index > (numInstances - 1)) {
- break;
- }
- cyInstanceHandle = SalList_getObject(list_temp);
- status = cpaCyInstanceGetInfo2(cyInstanceHandle, &info);
- list_temp = SalList_next(list_temp);
- if (CPA_STATUS_SUCCESS != status ||
- CPA_TRUE != info.isPolled) {
- continue;
- }
- pCyInstances[index] = cyInstanceHandle;
- index++;
- }
- list_temp = base_addr->asym_services;
- while (NULL != list_temp) {
- if (index > (numInstances - 1)) {
- break;
- }
- cyInstanceHandle = SalList_getObject(list_temp);
- status = cpaCyInstanceGetInfo2(cyInstanceHandle, &info);
- list_temp = SalList_next(list_temp);
- if (CPA_STATUS_SUCCESS != status ||
- CPA_TRUE != info.isPolled) {
- continue;
- }
- pCyInstances[index] = cyInstanceHandle;
- index++;
- }
- list_temp = base_addr->sym_services;
- while (NULL != list_temp) {
- if (index > (numInstances - 1)) {
- break;
- }
- cyInstanceHandle = SalList_getObject(list_temp);
- status = cpaCyInstanceGetInfo2(cyInstanceHandle, &info);
- list_temp = SalList_next(list_temp);
- if (CPA_STATUS_SUCCESS != status ||
- CPA_TRUE != info.isPolled) {
- continue;
- }
- pCyInstances[index] = cyInstanceHandle;
- index++;
- }
- }
- free(pAdfInsts, M_QAT);
-
- return status;
+ return Lac_GetCyInstancesByType(CPA_ACC_SVC_TYPE_CRYPTO,
+ numInstances,
+ pCyInstances);
}
/**
diff --git a/sys/dev/qat/qat_api/common/ctrl/sal_get_instances.c b/sys/dev/qat/qat_api/common/ctrl/sal_get_instances.c
index 27037e99d1ac..f68853dc43a8 100644
--- a/sys/dev/qat/qat_api/common/ctrl/sal_get_instances.c
+++ b/sys/dev/qat/qat_api/common/ctrl/sal_get_instances.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause */
-/* Copyright(c) 2007-2022 Intel Corporation */
+/* Copyright(c) 2007-2025 Intel Corporation */
/**
*****************************************************************************
@@ -10,7 +10,9 @@
* @ingroup SalCtrl
*
* @description
- * This file contains the main function to get SAL instances.
+ * This file contains generic functions to get instances of a specified
+ * service type. Note these are complementary to the already existing
+ * service-specific functions.
*
*****************************************************************************/
@@ -34,19 +36,22 @@
#include "lac_mem.h"
#include "lac_list.h"
#include "lac_sal_types.h"
+#include "lac_sal_types_crypto.h"
/**
******************************************************************************
* @ingroup SalCtrl
* @description
- * Get either sym or asym instance number
+ * Get the total number of either sym, asym or cy instances
*****************************************************************************/
-static CpaStatus
-Lac_GetSingleCyNumInstances(
+CpaStatus
+Lac_GetCyNumInstancesByType(
const CpaAccelerationServiceType accelerationServiceType,
Cpa16U *pNumInstances)
{
CpaStatus status = CPA_STATUS_SUCCESS;
+ CpaInstanceHandle instanceHandle;
+ CpaInstanceInfo2 info;
icp_accel_dev_t **pAdfInsts = NULL;
icp_accel_dev_t *dev_addr = NULL;
sal_t *base_addr = NULL;
@@ -71,6 +76,12 @@ Lac_GetSingleCyNumInstances(
service = "sym";
break;
+ case CPA_ACC_SVC_TYPE_CRYPTO:
+ accel_capability = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC |
+ ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC;
+ service = "cy";
+ break;
+
default:
QAT_UTILS_LOG("Invalid service type\n");
return CPA_STATUS_INVALID_PARAM;
@@ -106,14 +117,48 @@ Lac_GetSingleCyNumInstances(
}
base_addr = dev_addr->pSalHandle;
- if (CPA_ACC_SVC_TYPE_CRYPTO_ASYM == accelerationServiceType) {
+ if (CPA_ACC_SVC_TYPE_CRYPTO == accelerationServiceType) {
+ list_temp = base_addr->crypto_services;
+ while (NULL != list_temp) {
+ instanceHandle = SalList_getObject(list_temp);
+ status = cpaCyInstanceGetInfo2(instanceHandle,
+ &info);
+ if (CPA_STATUS_SUCCESS == status &&
+ CPA_TRUE == info.isPolled) {
+ num_inst++;
+ }
+ list_temp = SalList_next(list_temp);
+ }
+ }
+
+ if (CPA_ACC_SVC_TYPE_CRYPTO_ASYM == accelerationServiceType ||
+ CPA_ACC_SVC_TYPE_CRYPTO == accelerationServiceType) {
list_temp = base_addr->asym_services;
- } else {
- list_temp = base_addr->sym_services;
+ while (NULL != list_temp) {
+ instanceHandle = SalList_getObject(list_temp);
+ status = cpaCyInstanceGetInfo2(instanceHandle,
+ &info);
+ if (CPA_STATUS_SUCCESS == status &&
+ CPA_TRUE == info.isPolled) {
+ num_inst++;
+ }
+ list_temp = SalList_next(list_temp);
+ }
}
- while (NULL != list_temp) {
- num_inst++;
- list_temp = SalList_next(list_temp);
+
+ if (CPA_ACC_SVC_TYPE_CRYPTO_SYM == accelerationServiceType ||
+ CPA_ACC_SVC_TYPE_CRYPTO == accelerationServiceType) {
+ list_temp = base_addr->sym_services;
+ while (NULL != list_temp) {
+ instanceHandle = SalList_getObject(list_temp);
+ status = cpaCyInstanceGetInfo2(instanceHandle,
+ &info);
+ if (CPA_STATUS_SUCCESS == status &&
+ CPA_TRUE == info.isPolled) {
+ num_inst++;
+ }
+ list_temp = SalList_next(list_temp);
+ }
}
}
@@ -127,15 +172,17 @@ Lac_GetSingleCyNumInstances(
******************************************************************************
* @ingroup SalCtrl
* @description
- * Get either sym or asym instance
+ * Get either sym, asym or cy instance
*****************************************************************************/
-static CpaStatus
-Lac_GetSingleCyInstances(
+CpaStatus
+Lac_GetCyInstancesByType(
const CpaAccelerationServiceType accelerationServiceType,
Cpa16U numInstances,
CpaInstanceHandle *pInstances)
{
CpaStatus status = CPA_STATUS_SUCCESS;
+ CpaInstanceHandle instanceHandle = NULL;
+ CpaInstanceInfo2 info;
icp_accel_dev_t **pAdfInsts = NULL;
icp_accel_dev_t *dev_addr = NULL;
sal_t *base_addr = NULL;
@@ -163,14 +210,21 @@ Lac_GetSingleCyInstances(
accel_capability = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC;
service = "sym";
break;
+
+ case CPA_ACC_SVC_TYPE_CRYPTO:
+ accel_capability = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC |
+ ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC;
+ service = "cy";
+ break;
+
default:
QAT_UTILS_LOG("Invalid service type\n");
return CPA_STATUS_INVALID_PARAM;
}
/* Get the number of instances */
- status = cpaGetNumInstances(accelerationServiceType,
- &num_allocated_instances);
+ status = Lac_GetCyNumInstancesByType(accelerationServiceType,
+ &num_allocated_instances);
if (CPA_STATUS_SUCCESS != status) {
return status;
}
@@ -216,17 +270,63 @@ Lac_GetSingleCyInstances(
continue;
}
- if (CPA_ACC_SVC_TYPE_CRYPTO_ASYM == accelerationServiceType)
+ if (CPA_ACC_SVC_TYPE_CRYPTO == accelerationServiceType) {
+ list_temp = base_addr->crypto_services;
+ while (NULL != list_temp) {
+ if (index > (numInstances - 1))
+ break;
+
+ instanceHandle = SalList_getObject(list_temp);
+ status = cpaCyInstanceGetInfo2(instanceHandle,
+ &info);
+ list_temp = SalList_next(list_temp);
+ if (CPA_STATUS_SUCCESS != status ||
+ CPA_TRUE != info.isPolled) {
+ continue;
+ }
+ pInstances[index] = instanceHandle;
+ index++;
+ }
+ }
+
+ if (CPA_ACC_SVC_TYPE_CRYPTO_ASYM == accelerationServiceType ||
+ CPA_ACC_SVC_TYPE_CRYPTO == accelerationServiceType) {
list_temp = base_addr->asym_services;
- else
- list_temp = base_addr->sym_services;
- while (NULL != list_temp) {
- if (index > (numInstances - 1))
- break;
+ while (NULL != list_temp) {
+ if (index > (numInstances - 1))
+ break;
+
+ instanceHandle = SalList_getObject(list_temp);
+ status = cpaCyInstanceGetInfo2(instanceHandle,
+ &info);
+ list_temp = SalList_next(list_temp);
+ if (CPA_STATUS_SUCCESS != status ||
+ CPA_TRUE != info.isPolled) {
+ continue;
+ }
+ pInstances[index] = instanceHandle;
+ index++;
+ }
+ }
- pInstances[index] = SalList_getObject(list_temp);
- list_temp = SalList_next(list_temp);
- index++;
+ if (CPA_ACC_SVC_TYPE_CRYPTO_SYM == accelerationServiceType ||
+ CPA_ACC_SVC_TYPE_CRYPTO == accelerationServiceType) {
+ list_temp = base_addr->sym_services;
+ while (NULL != list_temp) {
+ if (index > (numInstances - 1))
+ break;
+
+ instanceHandle = SalList_getObject(list_temp);
+ status = cpaCyInstanceGetInfo2(instanceHandle,
+ &info);
+ list_temp = SalList_next(list_temp);
+ if (CPA_STATUS_SUCCESS != status ||
+ CPA_TRUE != info.isPolled) {
+ continue;
+ }
+ pInstances[index] = instanceHandle;
+ index++;
+ }
}
}
free(pAdfInsts, M_QAT);
@@ -242,16 +342,24 @@ CpaStatus
cpaGetNumInstances(const CpaAccelerationServiceType accelerationServiceType,
Cpa16U *pNumInstances)
{
+ LAC_CHECK_NULL_PARAM(pNumInstances);
+
switch (accelerationServiceType) {
case CPA_ACC_SVC_TYPE_CRYPTO_ASYM:
case CPA_ACC_SVC_TYPE_CRYPTO_SYM:
- return Lac_GetSingleCyNumInstances(accelerationServiceType,
- pNumInstances);
case CPA_ACC_SVC_TYPE_CRYPTO:
- return cpaCyGetNumInstances(pNumInstances);
+ return Lac_GetCyNumInstancesByType(accelerationServiceType,
+ pNumInstances);
+
case CPA_ACC_SVC_TYPE_DATA_COMPRESSION:
return cpaDcGetNumInstances(pNumInstances);
+ case CPA_ACC_SVC_TYPE_PATTERN_MATCH:
+ case CPA_ACC_SVC_TYPE_RAID:
+ case CPA_ACC_SVC_TYPE_XML:
+ QAT_UTILS_LOG("Unsupported service type\n");
+ return CPA_STATUS_UNSUPPORTED;
+
default:
QAT_UTILS_LOG("Invalid service type\n");
*pNumInstances = 0;
@@ -268,18 +376,25 @@ cpaGetInstances(const CpaAccelerationServiceType accelerationServiceType,
Cpa16U numInstances,
CpaInstanceHandle *pInstances)
{
+ LAC_CHECK_NULL_PARAM(pInstances);
+
switch (accelerationServiceType) {
case CPA_ACC_SVC_TYPE_CRYPTO_ASYM:
case CPA_ACC_SVC_TYPE_CRYPTO_SYM:
- return Lac_GetSingleCyInstances(accelerationServiceType,
+ case CPA_ACC_SVC_TYPE_CRYPTO:
+ return Lac_GetCyInstancesByType(accelerationServiceType,
numInstances,
pInstances);
- case CPA_ACC_SVC_TYPE_CRYPTO:
- return cpaCyGetInstances(numInstances, pInstances);
case CPA_ACC_SVC_TYPE_DATA_COMPRESSION:
return cpaDcGetInstances(numInstances, pInstances);
+ case CPA_ACC_SVC_TYPE_PATTERN_MATCH:
+ case CPA_ACC_SVC_TYPE_RAID:
+ case CPA_ACC_SVC_TYPE_XML:
+ QAT_UTILS_LOG("Unsupported service type\n");
+ return CPA_STATUS_UNSUPPORTED;
+
default:
QAT_UTILS_LOG("Invalid service type\n");
return CPA_STATUS_INVALID_PARAM;
diff --git a/sys/dev/qat/qat_api/common/include/lac_sal_types_crypto.h b/sys/dev/qat/qat_api/common/include/lac_sal_types_crypto.h
index c26603e4b582..952c174adfec 100644
--- a/sys/dev/qat/qat_api/common/include/lac_sal_types_crypto.h
+++ b/sys/dev/qat/qat_api/common/include/lac_sal_types_crypto.h
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause */
-/* Copyright(c) 2007-2022 Intel Corporation */
+/* Copyright(c) 2007-2025 Intel Corporation */
/**
***************************************************************************
@@ -187,4 +187,25 @@ typedef struct sal_crypto_service_s {
CpaInstanceHandle Lac_GetFirstHandle(sal_service_type_t svc_type);
+/**
+ ******************************************************************************
+ * @ingroup SalCtrl
+ * @description
+ * Get the total number of either sym, asym or cy instances
+ *****************************************************************************/
+CpaStatus Lac_GetCyNumInstancesByType(
+ const CpaAccelerationServiceType accelerationServiceType,
+ Cpa16U *pNumInstances);
+
+/**
+ ******************************************************************************
+ * @ingroup SalCtrl
+ * @description
+ * Get either sym, asym or cy instance
+ *****************************************************************************/
+CpaStatus Lac_GetCyInstancesByType(
+ const CpaAccelerationServiceType accelerationServiceType,
+ Cpa16U numInstances,
+ CpaInstanceHandle *pInstances);
+
#endif /*LAC_SAL_TYPES_CRYPTO_H_*/