mirror of
https://github.com/opnsense/src.git
synced 2026-04-21 06:07:31 -04:00
176 lines
4.9 KiB
C
176 lines
4.9 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause */
|
|
/* Copyright(c) 2007-2022 Intel Corporation */
|
|
/**
|
|
*****************************************************************************
|
|
* @file sal_versions.c
|
|
*
|
|
* @ingroup SalVersions
|
|
*
|
|
* @description
|
|
* This file contains implementation of functions used to obtain version
|
|
* information
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#include "cpa.h"
|
|
#include "qat_utils.h"
|
|
|
|
#include "icp_accel_devices.h"
|
|
#include "icp_adf_accel_mgr.h"
|
|
#include "icp_adf_cfg.h"
|
|
|
|
#include "lac_common.h"
|
|
|
|
#include "icp_sal_versions.h"
|
|
|
|
#define ICP_SAL_VERSIONS_ALL_CAP_MASK 0xFFFFFFFF
|
|
/**< Mask used to get all devices from ADF */
|
|
|
|
/**
|
|
*******************************************************************************
|
|
* @ingroup SalVersions
|
|
* Fills in the version info structure
|
|
* @description
|
|
* This function obtains hardware and software information associated with
|
|
* a given device and fills in the version info structure
|
|
*
|
|
* @param[in] device Pointer to the device for which version information
|
|
* is to be obtained.
|
|
* @param[out] pVerInfo Pointer to a structure that will hold version
|
|
* information
|
|
*
|
|
* @context
|
|
* This function might sleep. It cannot be executed in a context that
|
|
* does not permit sleeping.
|
|
* @assumptions
|
|
* The system has been started
|
|
* @sideEffects
|
|
* None
|
|
* @blocking
|
|
* No
|
|
* @reentrant
|
|
* No
|
|
* @threadSafe
|
|
* Yes
|
|
*
|
|
* @return CPA_STATUS_SUCCESS Operation finished successfully
|
|
* @return CPA_STATUS_FAIL Operation failed
|
|
*
|
|
*****************************************************************************/
|
|
static CpaStatus
|
|
SalVersions_FillVersionInfo(icp_accel_dev_t *device,
|
|
icp_sal_dev_version_info_t *pVerInfo)
|
|
{
|
|
CpaStatus status = CPA_STATUS_SUCCESS;
|
|
char param_value[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
|
|
Cpa32S strSize = 0;
|
|
|
|
memset(pVerInfo, 0, sizeof(icp_sal_dev_version_info_t));
|
|
pVerInfo->devId = device->accelId;
|
|
|
|
status = icp_adf_cfgGetParamValue(device,
|
|
LAC_CFG_SECTION_GENERAL,
|
|
ICP_CFG_HW_REV_ID_KEY,
|
|
param_value);
|
|
LAC_CHECK_STATUS(status);
|
|
|
|
strSize = snprintf((char *)pVerInfo->hardwareVersion,
|
|
ICP_SAL_VERSIONS_HW_VERSION_SIZE,
|
|
"%s",
|
|
param_value);
|
|
LAC_CHECK_PARAM_RANGE(strSize, 1, ICP_SAL_VERSIONS_HW_VERSION_SIZE);
|
|
|
|
memset(param_value, 0, ADF_CFG_MAX_VAL_LEN_IN_BYTES);
|
|
status = icp_adf_cfgGetParamValue(device,
|
|
LAC_CFG_SECTION_GENERAL,
|
|
ICP_CFG_UOF_VER_KEY,
|
|
param_value);
|
|
LAC_CHECK_STATUS(status);
|
|
|
|
strSize = snprintf((char *)pVerInfo->firmwareVersion,
|
|
ICP_SAL_VERSIONS_FW_VERSION_SIZE,
|
|
"%s",
|
|
param_value);
|
|
LAC_CHECK_PARAM_RANGE(strSize, 1, ICP_SAL_VERSIONS_FW_VERSION_SIZE);
|
|
|
|
memset(param_value, 0, ADF_CFG_MAX_VAL_LEN_IN_BYTES);
|
|
status = icp_adf_cfgGetParamValue(device,
|
|
LAC_CFG_SECTION_GENERAL,
|
|
ICP_CFG_MMP_VER_KEY,
|
|
param_value);
|
|
LAC_CHECK_STATUS(status);
|
|
|
|
strSize = snprintf((char *)pVerInfo->mmpVersion,
|
|
ICP_SAL_VERSIONS_MMP_VERSION_SIZE,
|
|
"%s",
|
|
param_value);
|
|
LAC_CHECK_PARAM_RANGE(strSize, 1, ICP_SAL_VERSIONS_MMP_VERSION_SIZE);
|
|
|
|
snprintf((char *)pVerInfo->softwareVersion,
|
|
ICP_SAL_VERSIONS_SW_VERSION_SIZE,
|
|
"%d.%d.%d",
|
|
SAL_INFO2_DRIVER_SW_VERSION_MAJ_NUMBER,
|
|
SAL_INFO2_DRIVER_SW_VERSION_MIN_NUMBER,
|
|
SAL_INFO2_DRIVER_SW_VERSION_PATCH_NUMBER);
|
|
|
|
return status;
|
|
}
|
|
|
|
CpaStatus
|
|
icp_sal_getDevVersionInfo(Cpa32U devId, icp_sal_dev_version_info_t *pVerInfo)
|
|
{
|
|
CpaStatus status = CPA_STATUS_SUCCESS;
|
|
Cpa16U numInstances = 0;
|
|
icp_accel_dev_t **pAccel_dev = NULL;
|
|
Cpa16U num_accel_dev = 0, index = 0;
|
|
icp_accel_dev_t *pDevice = NULL;
|
|
|
|
LAC_CHECK_NULL_PARAM(pVerInfo);
|
|
|
|
status = icp_amgr_getNumInstances(&numInstances);
|
|
if (CPA_STATUS_SUCCESS != status) {
|
|
QAT_UTILS_LOG("Error while getting number of devices.\n");
|
|
return CPA_STATUS_FAIL;
|
|
}
|
|
|
|
if (devId >= ADF_MAX_DEVICES) {
|
|
QAT_UTILS_LOG("Invalid devId\n");
|
|
return CPA_STATUS_INVALID_PARAM;
|
|
}
|
|
|
|
pAccel_dev =
|
|
malloc(numInstances * sizeof(icp_accel_dev_t *), M_QAT, M_WAITOK);
|
|
|
|
/* Get ADF to return all accel_devs */
|
|
status =
|
|
icp_amgr_getAllAccelDevByCapabilities(ICP_SAL_VERSIONS_ALL_CAP_MASK,
|
|
pAccel_dev,
|
|
&num_accel_dev);
|
|
|
|
if (CPA_STATUS_SUCCESS == status) {
|
|
for (index = 0; index < num_accel_dev; index++) {
|
|
pDevice = (icp_accel_dev_t *)pAccel_dev[index];
|
|
|
|
if (pDevice->accelId == devId) {
|
|
status = SalVersions_FillVersionInfo(pDevice,
|
|
pVerInfo);
|
|
if (CPA_STATUS_SUCCESS != status) {
|
|
QAT_UTILS_LOG(
|
|
"Error while filling in version info.\n");
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (index == num_accel_dev) {
|
|
QAT_UTILS_LOG("Device %d not found or not started.\n",
|
|
devId);
|
|
status = CPA_STATUS_FAIL;
|
|
}
|
|
} else {
|
|
QAT_UTILS_LOG("Error while getting devices.\n");
|
|
}
|
|
|
|
free(pAccel_dev, M_QAT);
|
|
return status;
|
|
}
|