178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
378ee8d1cSJulian Grajkowski /**
478ee8d1cSJulian Grajkowski *****************************************************************************
578ee8d1cSJulian Grajkowski * @file lac_common.h Common macros
678ee8d1cSJulian Grajkowski *
778ee8d1cSJulian Grajkowski * @defgroup Lac Look Aside Crypto LLD Doc
878ee8d1cSJulian Grajkowski *
978ee8d1cSJulian Grajkowski *****************************************************************************/
1078ee8d1cSJulian Grajkowski
1178ee8d1cSJulian Grajkowski /**
1278ee8d1cSJulian Grajkowski *****************************************************************************
1378ee8d1cSJulian Grajkowski * @defgroup LacCommon LAC Common
1478ee8d1cSJulian Grajkowski * Common code for Lac which includes init/shutdown, memory, logging and
1578ee8d1cSJulian Grajkowski * hooks.
1678ee8d1cSJulian Grajkowski *
1778ee8d1cSJulian Grajkowski * @ingroup Lac
1878ee8d1cSJulian Grajkowski *
1978ee8d1cSJulian Grajkowski *****************************************************************************/
2078ee8d1cSJulian Grajkowski
2178ee8d1cSJulian Grajkowski /***************************************************************************/
2278ee8d1cSJulian Grajkowski
2378ee8d1cSJulian Grajkowski #ifndef LAC_COMMON_H
2478ee8d1cSJulian Grajkowski #define LAC_COMMON_H
2578ee8d1cSJulian Grajkowski
2678ee8d1cSJulian Grajkowski /*
2778ee8d1cSJulian Grajkowski ******************************************************************************
2878ee8d1cSJulian Grajkowski * Include public/global header files
2978ee8d1cSJulian Grajkowski ******************************************************************************
3078ee8d1cSJulian Grajkowski */
3178ee8d1cSJulian Grajkowski
3278ee8d1cSJulian Grajkowski #include "cpa.h"
3378ee8d1cSJulian Grajkowski #include "qat_utils.h"
3478ee8d1cSJulian Grajkowski #include "cpa_cy_common.h"
3578ee8d1cSJulian Grajkowski #include "icp_adf_init.h"
3678ee8d1cSJulian Grajkowski
3778ee8d1cSJulian Grajkowski #define LAC_ARCH_UINT uintptr_t
3878ee8d1cSJulian Grajkowski #define LAC_ARCH_INT intptr_t
3978ee8d1cSJulian Grajkowski
4078ee8d1cSJulian Grajkowski /*
4178ee8d1cSJulian Grajkowski *****************************************************************************
4278ee8d1cSJulian Grajkowski * Max range values for some primitive param checking
4378ee8d1cSJulian Grajkowski *****************************************************************************
4478ee8d1cSJulian Grajkowski */
4578ee8d1cSJulian Grajkowski
4678ee8d1cSJulian Grajkowski /**< Maximum number of instances */
4778ee8d1cSJulian Grajkowski #define SAL_MAX_NUM_INSTANCES_PER_DEV 512
4878ee8d1cSJulian Grajkowski
4978ee8d1cSJulian Grajkowski #define SAL_DEFAULT_RING_SIZE 256
5078ee8d1cSJulian Grajkowski /**< Default ring size */
5178ee8d1cSJulian Grajkowski
5278ee8d1cSJulian Grajkowski #define SAL_64_CONCURR_REQUESTS 64
5378ee8d1cSJulian Grajkowski #define SAL_128_CONCURR_REQUESTS 128
5478ee8d1cSJulian Grajkowski #define SAL_256_CONCURR_REQUESTS 256
5578ee8d1cSJulian Grajkowski #define SAL_512_CONCURR_REQUESTS 512
5678ee8d1cSJulian Grajkowski #define SAL_1024_CONCURR_REQUESTS 1024
5778ee8d1cSJulian Grajkowski #define SAL_2048_CONCURR_REQUESTS 2048
5878ee8d1cSJulian Grajkowski #define SAL_4096_CONCURR_REQUESTS 4096
5978ee8d1cSJulian Grajkowski #define SAL_MAX_CONCURR_REQUESTS 65536
6078ee8d1cSJulian Grajkowski /**< Valid options for the num of concurrent requests per ring pair read
6178ee8d1cSJulian Grajkowski from the config file. These values are used to size the rings */
6278ee8d1cSJulian Grajkowski
6378ee8d1cSJulian Grajkowski #define SAL_BATCH_SUBMIT_FREE_SPACE 2
6478ee8d1cSJulian Grajkowski /**< For data plane batch submissions ADF leaves 2 spaces free on the ring */
6578ee8d1cSJulian Grajkowski
6678ee8d1cSJulian Grajkowski /*
6778ee8d1cSJulian Grajkowski ******************************************************************************
6878ee8d1cSJulian Grajkowski * Some common settings for QA API queries
6978ee8d1cSJulian Grajkowski ******************************************************************************
7078ee8d1cSJulian Grajkowski */
7178ee8d1cSJulian Grajkowski
7278ee8d1cSJulian Grajkowski #define SAL_INFO2_VENDOR_NAME "Intel(R)"
7378ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
7478ee8d1cSJulian Grajkowski * Name of vendor of this driver */
7578ee8d1cSJulian Grajkowski #define SAL_INFO2_PART_NAME "%s with Intel(R) QuickAssist Technology"
7678ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
7778ee8d1cSJulian Grajkowski */
7878ee8d1cSJulian Grajkowski
7978ee8d1cSJulian Grajkowski /*
8078ee8d1cSJulian Grajkowski ********************************************************************************
8178ee8d1cSJulian Grajkowski * User process name defines and functions
8278ee8d1cSJulian Grajkowski ********************************************************************************
8378ee8d1cSJulian Grajkowski */
8478ee8d1cSJulian Grajkowski
8578ee8d1cSJulian Grajkowski #define LAC_USER_PROCESS_NAME_MAX_LEN 32
8678ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
8778ee8d1cSJulian Grajkowski * Max length of user process name */
8878ee8d1cSJulian Grajkowski
8978ee8d1cSJulian Grajkowski #define LAC_KERNEL_PROCESS_NAME "KERNEL_QAT"
9078ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
9178ee8d1cSJulian Grajkowski * Default name for kernel process */
9278ee8d1cSJulian Grajkowski
9378ee8d1cSJulian Grajkowski /*
9478ee8d1cSJulian Grajkowski ********************************************************************************
9578ee8d1cSJulian Grajkowski * response mode indicator from Config file
9678ee8d1cSJulian Grajkowski ********************************************************************************
9778ee8d1cSJulian Grajkowski */
9878ee8d1cSJulian Grajkowski
9978ee8d1cSJulian Grajkowski #define SAL_RESP_POLL_CFG_FILE 1
10078ee8d1cSJulian Grajkowski #define SAL_RESP_EPOLL_CFG_FILE 2
10178ee8d1cSJulian Grajkowski
10278ee8d1cSJulian Grajkowski /*
10378ee8d1cSJulian Grajkowski * @ingroup LacCommon
10478ee8d1cSJulian Grajkowski * @description
10578ee8d1cSJulian Grajkowski * This function sets the process name
10678ee8d1cSJulian Grajkowski *
10778ee8d1cSJulian Grajkowski * @context
10878ee8d1cSJulian Grajkowski * This functions is called from module_init or from user space process
10978ee8d1cSJulian Grajkowski * initialization function
11078ee8d1cSJulian Grajkowski *
11178ee8d1cSJulian Grajkowski * @assumptions
11278ee8d1cSJulian Grajkowski * None
11378ee8d1cSJulian Grajkowski * @sideEffects
11478ee8d1cSJulian Grajkowski * None
11578ee8d1cSJulian Grajkowski * @reentrant
11678ee8d1cSJulian Grajkowski * No
11778ee8d1cSJulian Grajkowski * @threadSafe
11878ee8d1cSJulian Grajkowski * No
11978ee8d1cSJulian Grajkowski *
12078ee8d1cSJulian Grajkowski * param[in] processName Process name to be set
12178ee8d1cSJulian Grajkowski */
12278ee8d1cSJulian Grajkowski CpaStatus icpSetProcessName(const char *processName);
12378ee8d1cSJulian Grajkowski
12478ee8d1cSJulian Grajkowski /*
12578ee8d1cSJulian Grajkowski * @ingroup LacCommon
12678ee8d1cSJulian Grajkowski * @description
12778ee8d1cSJulian Grajkowski * This function gets the process name
12878ee8d1cSJulian Grajkowski *
12978ee8d1cSJulian Grajkowski * @context
13078ee8d1cSJulian Grajkowski * This functions is called from LAC context
13178ee8d1cSJulian Grajkowski *
13278ee8d1cSJulian Grajkowski * @assumptions
13378ee8d1cSJulian Grajkowski * None
13478ee8d1cSJulian Grajkowski * @sideEffects
13578ee8d1cSJulian Grajkowski * None
13678ee8d1cSJulian Grajkowski * @reentrant
13778ee8d1cSJulian Grajkowski * Yes
13878ee8d1cSJulian Grajkowski * @threadSafe
13978ee8d1cSJulian Grajkowski * Yes
14078ee8d1cSJulian Grajkowski *
14178ee8d1cSJulian Grajkowski */
14278ee8d1cSJulian Grajkowski char *icpGetProcessName(void);
14378ee8d1cSJulian Grajkowski
14478ee8d1cSJulian Grajkowski /* Sections of the config file */
14578ee8d1cSJulian Grajkowski #define LAC_CFG_SECTION_GENERAL "GENERAL"
14678ee8d1cSJulian Grajkowski #define LAC_CFG_SECTION_INTERNAL "INTERNAL"
14778ee8d1cSJulian Grajkowski
14878ee8d1cSJulian Grajkowski /*
14978ee8d1cSJulian Grajkowski ********************************************************************************
15078ee8d1cSJulian Grajkowski * Debug Macros and settings
15178ee8d1cSJulian Grajkowski ********************************************************************************
15278ee8d1cSJulian Grajkowski */
15378ee8d1cSJulian Grajkowski
15478ee8d1cSJulian Grajkowski #define SEPARATOR "+--------------------------------------------------+\n"
15578ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
15678ee8d1cSJulian Grajkowski * separator used for printing stats to standard output*/
15778ee8d1cSJulian Grajkowski
15878ee8d1cSJulian Grajkowski #define BORDER "|"
15978ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
16078ee8d1cSJulian Grajkowski * separator used for printing stats to standard output*/
16178ee8d1cSJulian Grajkowski
16278ee8d1cSJulian Grajkowski /**
16378ee8d1cSJulian Grajkowski *****************************************************************************
16478ee8d1cSJulian Grajkowski * @ingroup LacCommon
16578ee8d1cSJulian Grajkowski * Component state
16678ee8d1cSJulian Grajkowski *
16778ee8d1cSJulian Grajkowski * @description
16878ee8d1cSJulian Grajkowski * This enum is used to indicate the state that the component is in. Its
16978ee8d1cSJulian Grajkowski * purpose is to prevent components from being initialised or shutdown
17078ee8d1cSJulian Grajkowski * incorrectly.
17178ee8d1cSJulian Grajkowski *
17278ee8d1cSJulian Grajkowski *****************************************************************************/
17378ee8d1cSJulian Grajkowski typedef enum {
17478ee8d1cSJulian Grajkowski LAC_COMP_SHUT_DOWN = 0,
17578ee8d1cSJulian Grajkowski /**< Component in the Shut Down state */
17678ee8d1cSJulian Grajkowski LAC_COMP_SHUTTING_DOWN,
17778ee8d1cSJulian Grajkowski /**< Component in the Process of Shutting down */
17878ee8d1cSJulian Grajkowski LAC_COMP_INITIALISING,
17978ee8d1cSJulian Grajkowski /**< Component in the Process of being initialised */
18078ee8d1cSJulian Grajkowski LAC_COMP_INITIALISED,
18178ee8d1cSJulian Grajkowski /**< Component in the initialised state */
18278ee8d1cSJulian Grajkowski } lac_comp_state_t;
18378ee8d1cSJulian Grajkowski
18478ee8d1cSJulian Grajkowski /**
18578ee8d1cSJulian Grajkowski *******************************************************************************
18678ee8d1cSJulian Grajkowski * @ingroup LacCommon
18778ee8d1cSJulian Grajkowski * This macro checks if a parameter is NULL
18878ee8d1cSJulian Grajkowski *
18978ee8d1cSJulian Grajkowski * @param[in] param Parameter
19078ee8d1cSJulian Grajkowski *
19178ee8d1cSJulian Grajkowski * @return CPA_STATUS_INVALID_PARAM Parameter is NULL
19278ee8d1cSJulian Grajkowski * @return void Parameter is not NULL
19378ee8d1cSJulian Grajkowski ******************************************************************************/
19478ee8d1cSJulian Grajkowski #define LAC_CHECK_NULL_PARAM(param) \
19578ee8d1cSJulian Grajkowski do { \
19678ee8d1cSJulian Grajkowski if (NULL == (param)) { \
19778ee8d1cSJulian Grajkowski return CPA_STATUS_INVALID_PARAM; \
19878ee8d1cSJulian Grajkowski } \
19978ee8d1cSJulian Grajkowski } while (0)
20078ee8d1cSJulian Grajkowski
20178ee8d1cSJulian Grajkowski /**
20278ee8d1cSJulian Grajkowski *******************************************************************************
20378ee8d1cSJulian Grajkowski * @ingroup LacCommon
20478ee8d1cSJulian Grajkowski * This macro checks if a parameter is within a specified range
20578ee8d1cSJulian Grajkowski *
20678ee8d1cSJulian Grajkowski * @param[in] param Parameter
20778ee8d1cSJulian Grajkowski * @param[in] min Parameter must be greater than OR equal to
20878ee8d1cSJulian Grajkowski *min
20978ee8d1cSJulian Grajkowski * @param[in] max Parameter must be less than max
21078ee8d1cSJulian Grajkowski *
21178ee8d1cSJulian Grajkowski * @return CPA_STATUS_INVALID_PARAM Parameter is outside range
21278ee8d1cSJulian Grajkowski * @return void Parameter is within range
21378ee8d1cSJulian Grajkowski ******************************************************************************/
21478ee8d1cSJulian Grajkowski #define LAC_CHECK_PARAM_RANGE(param, min, max) \
21578ee8d1cSJulian Grajkowski do { \
21678ee8d1cSJulian Grajkowski if (((param) < (min)) || ((param) >= (max))) { \
21778ee8d1cSJulian Grajkowski return CPA_STATUS_INVALID_PARAM; \
21878ee8d1cSJulian Grajkowski } \
21978ee8d1cSJulian Grajkowski } while (0)
22078ee8d1cSJulian Grajkowski
22178ee8d1cSJulian Grajkowski /**
22278ee8d1cSJulian Grajkowski *******************************************************************************
22378ee8d1cSJulian Grajkowski * @ingroup LacCommon
22478ee8d1cSJulian Grajkowski * This checks if a param is 8 byte aligned.
22578ee8d1cSJulian Grajkowski *
22678ee8d1cSJulian Grajkowski ******************************************************************************/
22778ee8d1cSJulian Grajkowski #define LAC_CHECK_8_BYTE_ALIGNMENT(param) \
22878ee8d1cSJulian Grajkowski do { \
22978ee8d1cSJulian Grajkowski if ((Cpa64U)param % 8 != 0) { \
23078ee8d1cSJulian Grajkowski return CPA_STATUS_INVALID_PARAM; \
23178ee8d1cSJulian Grajkowski } \
23278ee8d1cSJulian Grajkowski } while (0)
23378ee8d1cSJulian Grajkowski
23478ee8d1cSJulian Grajkowski /**
23578ee8d1cSJulian Grajkowski *******************************************************************************
23678ee8d1cSJulian Grajkowski * @ingroup LacCommon
23778ee8d1cSJulian Grajkowski * This checks if a param is 64 byte aligned.
23878ee8d1cSJulian Grajkowski *
23978ee8d1cSJulian Grajkowski ******************************************************************************/
24078ee8d1cSJulian Grajkowski #define LAC_CHECK_64_BYTE_ALIGNMENT(param) \
24178ee8d1cSJulian Grajkowski do { \
24278ee8d1cSJulian Grajkowski if ((LAC_ARCH_UINT)param % 64 != 0) { \
24378ee8d1cSJulian Grajkowski return CPA_STATUS_INVALID_PARAM; \
24478ee8d1cSJulian Grajkowski } \
24578ee8d1cSJulian Grajkowski } while (0)
24678ee8d1cSJulian Grajkowski
24778ee8d1cSJulian Grajkowski /**
24878ee8d1cSJulian Grajkowski *******************************************************************************
24978ee8d1cSJulian Grajkowski * @ingroup LacCommon
25078ee8d1cSJulian Grajkowski * This macro returns the size of the buffer list structure given the
25178ee8d1cSJulian Grajkowski * number of elements in the buffer list - note: only the sizeof the
25278ee8d1cSJulian Grajkowski * buffer list structure is returned.
25378ee8d1cSJulian Grajkowski *
25478ee8d1cSJulian Grajkowski * @param[in] numBuffers The number of flatbuffers in a buffer list
25578ee8d1cSJulian Grajkowski *
25678ee8d1cSJulian Grajkowski * @return size of the buffer list structure
25778ee8d1cSJulian Grajkowski ******************************************************************************/
25878ee8d1cSJulian Grajkowski #define LAC_BUFFER_LIST_SIZE_GET(numBuffers) \
25978ee8d1cSJulian Grajkowski (sizeof(CpaBufferList) + (numBuffers * sizeof(CpaFlatBuffer)))
26078ee8d1cSJulian Grajkowski
26178ee8d1cSJulian Grajkowski /**
26278ee8d1cSJulian Grajkowski *******************************************************************************
26378ee8d1cSJulian Grajkowski * @ingroup LacCommon
26478ee8d1cSJulian Grajkowski * This macro checks that a flatbuffer is valid i.e. that it is not
26578ee8d1cSJulian Grajkowski * null and the data it points to is not null
26678ee8d1cSJulian Grajkowski *
26778ee8d1cSJulian Grajkowski * @param[in] pFlatBuffer Pointer to flatbuffer
26878ee8d1cSJulian Grajkowski *
26978ee8d1cSJulian Grajkowski * @return CPA_STATUS_INVALID_PARAM Invalid flatbuffer pointer
27078ee8d1cSJulian Grajkowski * @return void flatbuffer is ok
27178ee8d1cSJulian Grajkowski ******************************************************************************/
27278ee8d1cSJulian Grajkowski #define LAC_CHECK_FLAT_BUFFER(pFlatBuffer) \
27378ee8d1cSJulian Grajkowski do { \
27478ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM((pFlatBuffer)); \
27578ee8d1cSJulian Grajkowski LAC_CHECK_NULL_PARAM((pFlatBuffer)->pData); \
27678ee8d1cSJulian Grajkowski } while (0)
27778ee8d1cSJulian Grajkowski
27878ee8d1cSJulian Grajkowski /**
27978ee8d1cSJulian Grajkowski *******************************************************************************
28078ee8d1cSJulian Grajkowski * @ingroup LacCommon
28178ee8d1cSJulian Grajkowski * This macro verifies that the status is ok i.e. equal to CPA_STATUS_SUCCESS
28278ee8d1cSJulian Grajkowski *
28378ee8d1cSJulian Grajkowski * @param[in] status status we are checking
28478ee8d1cSJulian Grajkowski *
28578ee8d1cSJulian Grajkowski * @return void status is ok (CPA_STATUS_SUCCESS)
28678ee8d1cSJulian Grajkowski * @return status The value in the status parameter is an error one
28778ee8d1cSJulian Grajkowski *
28878ee8d1cSJulian Grajkowski ******************************************************************************/
28978ee8d1cSJulian Grajkowski #define LAC_CHECK_STATUS(status) \
29078ee8d1cSJulian Grajkowski do { \
29178ee8d1cSJulian Grajkowski if (CPA_STATUS_SUCCESS != (status)) { \
29278ee8d1cSJulian Grajkowski return status; \
29378ee8d1cSJulian Grajkowski } \
29478ee8d1cSJulian Grajkowski } while (0)
29578ee8d1cSJulian Grajkowski
29678ee8d1cSJulian Grajkowski /**
29778ee8d1cSJulian Grajkowski *******************************************************************************
29878ee8d1cSJulian Grajkowski * @ingroup LacCommon
29978ee8d1cSJulian Grajkowski * This macro verifies that the Instance Handle is valid.
30078ee8d1cSJulian Grajkowski *
30178ee8d1cSJulian Grajkowski * @param[in] instanceHandle Instance Handle
30278ee8d1cSJulian Grajkowski *
30378ee8d1cSJulian Grajkowski * @return CPA_STATUS_INVALID_PARAM Parameter is NULL
30478ee8d1cSJulian Grajkowski * @return void Parameter is not NULL
30578ee8d1cSJulian Grajkowski *
30678ee8d1cSJulian Grajkowski ******************************************************************************/
30778ee8d1cSJulian Grajkowski #define LAC_CHECK_INSTANCE_HANDLE(instanceHandle) \
30878ee8d1cSJulian Grajkowski do { \
30978ee8d1cSJulian Grajkowski if (NULL == (instanceHandle)) { \
31078ee8d1cSJulian Grajkowski return CPA_STATUS_INVALID_PARAM; \
31178ee8d1cSJulian Grajkowski } \
31278ee8d1cSJulian Grajkowski } while (0)
31378ee8d1cSJulian Grajkowski
31478ee8d1cSJulian Grajkowski /**
31578ee8d1cSJulian Grajkowski *******************************************************************************
31678ee8d1cSJulian Grajkowski * @ingroup LacCommon
31778ee8d1cSJulian Grajkowski * This macro copies a string from one location to another
31878ee8d1cSJulian Grajkowski *
31978ee8d1cSJulian Grajkowski * @param[out] pDestinationBuffer Pointer to destination buffer
32078ee8d1cSJulian Grajkowski * @param[in] pSource Pointer to source buffer
32178ee8d1cSJulian Grajkowski *
32278ee8d1cSJulian Grajkowski ******************************************************************************/
32378ee8d1cSJulian Grajkowski #define LAC_COPY_STRING(pDestinationBuffer, pSource) \
32478ee8d1cSJulian Grajkowski do { \
32578ee8d1cSJulian Grajkowski memcpy(pDestinationBuffer, pSource, (sizeof(pSource) - 1)); \
32678ee8d1cSJulian Grajkowski pDestinationBuffer[(sizeof(pSource) - 1)] = '\0'; \
32778ee8d1cSJulian Grajkowski } while (0)
32878ee8d1cSJulian Grajkowski
32978ee8d1cSJulian Grajkowski /**
33078ee8d1cSJulian Grajkowski *******************************************************************************
33178ee8d1cSJulian Grajkowski * @ingroup LacCommon
33278ee8d1cSJulian Grajkowski * This macro fills a memory zone with ZEROES
33378ee8d1cSJulian Grajkowski *
33478ee8d1cSJulian Grajkowski * @param[in] pBuffer Pointer to buffer
33578ee8d1cSJulian Grajkowski * @param[in] count Buffer length
33678ee8d1cSJulian Grajkowski *
33778ee8d1cSJulian Grajkowski * @return void
33878ee8d1cSJulian Grajkowski *
33978ee8d1cSJulian Grajkowski ******************************************************************************/
34078ee8d1cSJulian Grajkowski #define LAC_OS_BZERO(pBuffer, count) memset(pBuffer, 0, count);
34178ee8d1cSJulian Grajkowski
34278ee8d1cSJulian Grajkowski /**
34378ee8d1cSJulian Grajkowski *******************************************************************************
34478ee8d1cSJulian Grajkowski * @ingroup LacCommon
34578ee8d1cSJulian Grajkowski * This macro calculates the position of the given member in a struct
34678ee8d1cSJulian Grajkowski * Only for use on a struct where all members are of equal size to map
34778ee8d1cSJulian Grajkowski * the struct member position to an array index
34878ee8d1cSJulian Grajkowski *
34978ee8d1cSJulian Grajkowski * @param[in] structType the struct
35078ee8d1cSJulian Grajkowski * @param[in] member the member of the given struct
35178ee8d1cSJulian Grajkowski *
35278ee8d1cSJulian Grajkowski ******************************************************************************/
35378ee8d1cSJulian Grajkowski #define LAC_IDX_OF(structType, member) \
35478ee8d1cSJulian Grajkowski (offsetof(structType, member) / sizeof(((structType *)0)->member))
35578ee8d1cSJulian Grajkowski
35678ee8d1cSJulian Grajkowski /*
35778ee8d1cSJulian Grajkowski ********************************************************************************
35878ee8d1cSJulian Grajkowski * Alignment, Bid define and Bit Operation Macros
35978ee8d1cSJulian Grajkowski ********************************************************************************
36078ee8d1cSJulian Grajkowski */
36178ee8d1cSJulian Grajkowski
36278ee8d1cSJulian Grajkowski #define LAC_BIT31_SET 0x80000000 /**< bit 31 == 1 */
36378ee8d1cSJulian Grajkowski #define LAC_BIT7_SET 0x80 /**< bit 7 == 1 */
36478ee8d1cSJulian Grajkowski #define LAC_BIT6_SET 0x40 /**< bit 6 == 1 */
36578ee8d1cSJulian Grajkowski #define LAC_BIT5_SET 0x20 /**< bit 5 == 1 */
36678ee8d1cSJulian Grajkowski #define LAC_BIT4_SET 0x10 /**< bit 4 == 1 */
36778ee8d1cSJulian Grajkowski #define LAC_BIT3_SET 0x08 /**< bit 3 == 1 */
36878ee8d1cSJulian Grajkowski #define LAC_BIT2_SET 0x04 /**< bit 2 == 1 */
36978ee8d1cSJulian Grajkowski #define LAC_BIT1_SET 0x02 /**< bit 1 == 1 */
37078ee8d1cSJulian Grajkowski #define LAC_BIT0_SET 0x01 /**< bit 0 == 1 */
37178ee8d1cSJulian Grajkowski
37278ee8d1cSJulian Grajkowski #define LAC_NUM_BITS_IN_BYTE (8)
37378ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
37478ee8d1cSJulian Grajkowski * Number of bits in a byte */
37578ee8d1cSJulian Grajkowski
37678ee8d1cSJulian Grajkowski #define LAC_LONG_WORD_IN_BYTES (4)
37778ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
37878ee8d1cSJulian Grajkowski * Number of bytes in an IA word */
37978ee8d1cSJulian Grajkowski
38078ee8d1cSJulian Grajkowski #define LAC_QUAD_WORD_IN_BYTES (8)
38178ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
38278ee8d1cSJulian Grajkowski * Number of bytes in a QUAD word */
38378ee8d1cSJulian Grajkowski
38478ee8d1cSJulian Grajkowski #define LAC_QAT_MAX_MSG_SZ_LW (32)
38578ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
38678ee8d1cSJulian Grajkowski * Maximum size in Long Words for a QAT message */
38778ee8d1cSJulian Grajkowski
38878ee8d1cSJulian Grajkowski /**
38978ee8d1cSJulian Grajkowski *****************************************************************************
39078ee8d1cSJulian Grajkowski * @ingroup LacCommon
39178ee8d1cSJulian Grajkowski * Alignment shift requirements of a buffer.
39278ee8d1cSJulian Grajkowski *
39378ee8d1cSJulian Grajkowski * @description
39478ee8d1cSJulian Grajkowski * This enum is used to indicate the alignment shift of a buffer.
39578ee8d1cSJulian Grajkowski * All alignments are to power of 2
39678ee8d1cSJulian Grajkowski *
39778ee8d1cSJulian Grajkowski *****************************************************************************/
39878ee8d1cSJulian Grajkowski typedef enum lac_aligment_shift_s {
39978ee8d1cSJulian Grajkowski LAC_NO_ALIGNMENT_SHIFT = 0,
40078ee8d1cSJulian Grajkowski /**< No alignment shift (to a power of 2)*/
40178ee8d1cSJulian Grajkowski LAC_8BYTE_ALIGNMENT_SHIFT = 3,
40278ee8d1cSJulian Grajkowski /**< 8 byte alignment shift (to a power of 2)*/
40378ee8d1cSJulian Grajkowski LAC_16BYTE_ALIGNMENT_SHIFT = 4,
40478ee8d1cSJulian Grajkowski /**< 16 byte alignment shift (to a power of 2)*/
40578ee8d1cSJulian Grajkowski LAC_64BYTE_ALIGNMENT_SHIFT = 6,
40678ee8d1cSJulian Grajkowski /**< 64 byte alignment shift (to a power of 2)*/
40778ee8d1cSJulian Grajkowski LAC_4KBYTE_ALIGNMENT_SHIFT = 12,
40878ee8d1cSJulian Grajkowski /**< 4k byte alignment shift (to a power of 2)*/
40978ee8d1cSJulian Grajkowski } lac_aligment_shift_t;
41078ee8d1cSJulian Grajkowski
41178ee8d1cSJulian Grajkowski /**
41278ee8d1cSJulian Grajkowski *****************************************************************************
41378ee8d1cSJulian Grajkowski * @ingroup LacCommon
41478ee8d1cSJulian Grajkowski * Alignment of a buffer.
41578ee8d1cSJulian Grajkowski *
41678ee8d1cSJulian Grajkowski * @description
41778ee8d1cSJulian Grajkowski * This enum is used to indicate the alignment requirements of a buffer.
41878ee8d1cSJulian Grajkowski *
41978ee8d1cSJulian Grajkowski *****************************************************************************/
42078ee8d1cSJulian Grajkowski typedef enum lac_aligment_s {
42178ee8d1cSJulian Grajkowski LAC_NO_ALIGNMENT = 0,
42278ee8d1cSJulian Grajkowski /**< No alignment */
42378ee8d1cSJulian Grajkowski LAC_1BYTE_ALIGNMENT = 1,
42478ee8d1cSJulian Grajkowski /**< 1 byte alignment */
42578ee8d1cSJulian Grajkowski LAC_8BYTE_ALIGNMENT = 8,
42678ee8d1cSJulian Grajkowski /**< 8 byte alignment*/
42778ee8d1cSJulian Grajkowski LAC_64BYTE_ALIGNMENT = 64,
42878ee8d1cSJulian Grajkowski /**< 64 byte alignment*/
42978ee8d1cSJulian Grajkowski LAC_4KBYTE_ALIGNMENT = 4096,
43078ee8d1cSJulian Grajkowski /**< 4k byte alignment */
43178ee8d1cSJulian Grajkowski } lac_aligment_t;
43278ee8d1cSJulian Grajkowski
43378ee8d1cSJulian Grajkowski /**
43478ee8d1cSJulian Grajkowski *****************************************************************************
43578ee8d1cSJulian Grajkowski * @ingroup LacCommon
43678ee8d1cSJulian Grajkowski * Size of a buffer.
43778ee8d1cSJulian Grajkowski *
43878ee8d1cSJulian Grajkowski * @description
43978ee8d1cSJulian Grajkowski * This enum is used to indicate the required size.
44078ee8d1cSJulian Grajkowski * The buffer must be a multiple of the required size.
44178ee8d1cSJulian Grajkowski *
44278ee8d1cSJulian Grajkowski *****************************************************************************/
44378ee8d1cSJulian Grajkowski typedef enum lac_expected_size_s {
44478ee8d1cSJulian Grajkowski LAC_NO_LENGTH_REQUIREMENTS = 0,
44578ee8d1cSJulian Grajkowski /**< No requirement for size */
44678ee8d1cSJulian Grajkowski LAC_4KBYTE_MULTIPLE_REQUIRED = 4096,
44778ee8d1cSJulian Grajkowski /**< 4k multiple requirement for size */
44878ee8d1cSJulian Grajkowski } lac_expected_size_t;
44978ee8d1cSJulian Grajkowski
45078ee8d1cSJulian Grajkowski #define LAC_OPTIMAL_ALIGNMENT_SHIFT LAC_64BYTE_ALIGNMENT_SHIFT
45178ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
45278ee8d1cSJulian Grajkowski * optimal alignment to a power of 2 */
45378ee8d1cSJulian Grajkowski
45478ee8d1cSJulian Grajkowski #define LAC_SHIFT_8 (1 << LAC_8BYTE_ALIGNMENT_SHIFT)
45578ee8d1cSJulian Grajkowski /**< shift by 8 bits */
45678ee8d1cSJulian Grajkowski #define LAC_SHIFT_24 \
45778ee8d1cSJulian Grajkowski ((1 << LAC_8BYTE_ALIGNMENT_SHIFT) + (1 << LAC_16BYTE_ALIGNMENT_SHIFT))
45878ee8d1cSJulian Grajkowski /**< shift by 24 bits */
45978ee8d1cSJulian Grajkowski
46078ee8d1cSJulian Grajkowski #define LAC_MAX_16_BIT_VALUE ((1 << 16) - 1)
46178ee8d1cSJulian Grajkowski /**< @ingroup LacCommon
46278ee8d1cSJulian Grajkowski * maximum value a 16 bit type can hold */
46378ee8d1cSJulian Grajkowski
46478ee8d1cSJulian Grajkowski /**
46578ee8d1cSJulian Grajkowski *******************************************************************************
46678ee8d1cSJulian Grajkowski * @ingroup LacCommon
46778ee8d1cSJulian Grajkowski * This macro can be used to avoid an unused variable warning from the
46878ee8d1cSJulian Grajkowski * compiler
46978ee8d1cSJulian Grajkowski *
47078ee8d1cSJulian Grajkowski * @param[in] variable unused variable
47178ee8d1cSJulian Grajkowski *
47278ee8d1cSJulian Grajkowski ******************************************************************************/
47378ee8d1cSJulian Grajkowski #define LAC_UNUSED_VARIABLE(x) (void)(x)
47478ee8d1cSJulian Grajkowski
47578ee8d1cSJulian Grajkowski /**
47678ee8d1cSJulian Grajkowski *******************************************************************************
47778ee8d1cSJulian Grajkowski * @ingroup LacCommon
47878ee8d1cSJulian Grajkowski * This macro checks if an address is aligned to the specified power of 2
47978ee8d1cSJulian Grajkowski * Returns 0 if alignment is ok, or non-zero otherwise
48078ee8d1cSJulian Grajkowski *
48178ee8d1cSJulian Grajkowski * @param[in] address the address we are checking
48278ee8d1cSJulian Grajkowski *
48378ee8d1cSJulian Grajkowski * @param[in] alignment the byte alignment to check (specified as power of 2)
48478ee8d1cSJulian Grajkowski *
48578ee8d1cSJulian Grajkowski ******************************************************************************/
48678ee8d1cSJulian Grajkowski #define LAC_ADDRESS_ALIGNED(address, alignment) \
48778ee8d1cSJulian Grajkowski (!((LAC_ARCH_UINT)(address) & ((1 << (alignment)) - 1)))
48878ee8d1cSJulian Grajkowski
48978ee8d1cSJulian Grajkowski /**
49078ee8d1cSJulian Grajkowski *******************************************************************************
49178ee8d1cSJulian Grajkowski * @ingroup LacCommon
49278ee8d1cSJulian Grajkowski * This macro rounds up a number to a be a multiple of the alignment when
49378ee8d1cSJulian Grajkowski * the alignment is a power of 2.
49478ee8d1cSJulian Grajkowski *
49578ee8d1cSJulian Grajkowski * @param[in] num Number
49678ee8d1cSJulian Grajkowski * @param[in] align Alignment (must be a power of 2)
49778ee8d1cSJulian Grajkowski *
49878ee8d1cSJulian Grajkowski ******************************************************************************/
49978ee8d1cSJulian Grajkowski #define LAC_ALIGN_POW2_ROUNDUP(num, align) (((num) + (align)-1) & ~((align)-1))
50078ee8d1cSJulian Grajkowski
50178ee8d1cSJulian Grajkowski /**
50278ee8d1cSJulian Grajkowski *******************************************************************************
50378ee8d1cSJulian Grajkowski * @ingroup LacCommon
50478ee8d1cSJulian Grajkowski * This macro generates a bit mask to select a particular bit
50578ee8d1cSJulian Grajkowski *
50678ee8d1cSJulian Grajkowski * @param[in] bitPos Bit position to select
50778ee8d1cSJulian Grajkowski *
50878ee8d1cSJulian Grajkowski ******************************************************************************/
50978ee8d1cSJulian Grajkowski #define LAC_BIT(bitPos) (0x1 << (bitPos))
51078ee8d1cSJulian Grajkowski
51178ee8d1cSJulian Grajkowski /**
51278ee8d1cSJulian Grajkowski *******************************************************************************
51378ee8d1cSJulian Grajkowski * @ingroup LacCommon
51478ee8d1cSJulian Grajkowski * This macro converts a size in bits to the equivalent size in bytes,
51578ee8d1cSJulian Grajkowski * using a bit shift to divide by 8
51678ee8d1cSJulian Grajkowski *
51778ee8d1cSJulian Grajkowski * @param[in] x size in bits
51878ee8d1cSJulian Grajkowski *
51978ee8d1cSJulian Grajkowski ******************************************************************************/
52078ee8d1cSJulian Grajkowski #define LAC_BITS_TO_BYTES(x) ((x) >> 3)
52178ee8d1cSJulian Grajkowski
52278ee8d1cSJulian Grajkowski /**
52378ee8d1cSJulian Grajkowski *******************************************************************************
52478ee8d1cSJulian Grajkowski * @ingroup LacCommon
52578ee8d1cSJulian Grajkowski * This macro converts a size in bytes to the equivalent size in bits,
52678ee8d1cSJulian Grajkowski * using a bit shift to multiply by 8
52778ee8d1cSJulian Grajkowski *
52878ee8d1cSJulian Grajkowski * @param[in] x size in bytes
52978ee8d1cSJulian Grajkowski *
53078ee8d1cSJulian Grajkowski ******************************************************************************/
53178ee8d1cSJulian Grajkowski #define LAC_BYTES_TO_BITS(x) ((x) << 3)
53278ee8d1cSJulian Grajkowski
53378ee8d1cSJulian Grajkowski /**
53478ee8d1cSJulian Grajkowski *******************************************************************************
53578ee8d1cSJulian Grajkowski * @ingroup LacCommon
53678ee8d1cSJulian Grajkowski * This macro converts a size in bytes to the equivalent size in longwords,
53778ee8d1cSJulian Grajkowski * using a bit shift to divide by 4
53878ee8d1cSJulian Grajkowski *
53978ee8d1cSJulian Grajkowski * @param[in] x size in bytes
54078ee8d1cSJulian Grajkowski *
54178ee8d1cSJulian Grajkowski ******************************************************************************/
54278ee8d1cSJulian Grajkowski #define LAC_BYTES_TO_LONGWORDS(x) ((x) >> 2)
54378ee8d1cSJulian Grajkowski
54478ee8d1cSJulian Grajkowski /**
54578ee8d1cSJulian Grajkowski *******************************************************************************
54678ee8d1cSJulian Grajkowski * @ingroup LacCommon
54778ee8d1cSJulian Grajkowski * This macro converts a size in longwords to the equivalent size in bytes,
54878ee8d1cSJulian Grajkowski * using a bit shift to multiply by 4
54978ee8d1cSJulian Grajkowski *
55078ee8d1cSJulian Grajkowski * @param[in] x size in long words
55178ee8d1cSJulian Grajkowski *
55278ee8d1cSJulian Grajkowski ******************************************************************************/
55378ee8d1cSJulian Grajkowski #define LAC_LONGWORDS_TO_BYTES(x) ((x) << 2)
55478ee8d1cSJulian Grajkowski
55578ee8d1cSJulian Grajkowski /**
55678ee8d1cSJulian Grajkowski *******************************************************************************
55778ee8d1cSJulian Grajkowski * @ingroup LacCommon
55878ee8d1cSJulian Grajkowski * This macro converts a size in bytes to the equivalent size in quadwords,
55978ee8d1cSJulian Grajkowski * using a bit shift to divide by 8
56078ee8d1cSJulian Grajkowski *
56178ee8d1cSJulian Grajkowski * @param[in] x size in bytes
56278ee8d1cSJulian Grajkowski *
56378ee8d1cSJulian Grajkowski ******************************************************************************/
56478ee8d1cSJulian Grajkowski #define LAC_BYTES_TO_QUADWORDS(x) (((x) >> 3) + (((x) % 8) ? 1 : 0))
56578ee8d1cSJulian Grajkowski
56678ee8d1cSJulian Grajkowski /**
56778ee8d1cSJulian Grajkowski *******************************************************************************
56878ee8d1cSJulian Grajkowski * @ingroup LacCommon
56978ee8d1cSJulian Grajkowski * This macro converts a size in quadwords to the equivalent size in bytes,
57078ee8d1cSJulian Grajkowski * using a bit shift to multiply by 8
57178ee8d1cSJulian Grajkowski *
57278ee8d1cSJulian Grajkowski * @param[in] x size in quad words
57378ee8d1cSJulian Grajkowski *
57478ee8d1cSJulian Grajkowski ******************************************************************************/
57578ee8d1cSJulian Grajkowski #define LAC_QUADWORDS_TO_BYTES(x) ((x) << 3)
57678ee8d1cSJulian Grajkowski
57778ee8d1cSJulian Grajkowski
57878ee8d1cSJulian Grajkowski /******************************************************************************/
57978ee8d1cSJulian Grajkowski
58078ee8d1cSJulian Grajkowski /*
58178ee8d1cSJulian Grajkowski *******************************************************************************
58278ee8d1cSJulian Grajkowski * Mutex Macros
58378ee8d1cSJulian Grajkowski *******************************************************************************
58478ee8d1cSJulian Grajkowski */
58578ee8d1cSJulian Grajkowski
58678ee8d1cSJulian Grajkowski /**
58778ee8d1cSJulian Grajkowski *******************************************************************************
58878ee8d1cSJulian Grajkowski * @ingroup LacCommon
58978ee8d1cSJulian Grajkowski * This macro tries to acquire a mutex and returns the status
59078ee8d1cSJulian Grajkowski *
59178ee8d1cSJulian Grajkowski * @param[in] pLock Pointer to Lock
59278ee8d1cSJulian Grajkowski * @param[in] timeout Timeout
59378ee8d1cSJulian Grajkowski *
59478ee8d1cSJulian Grajkowski * @retval CPA_STATUS_SUCCESS Function executed successfully.
59578ee8d1cSJulian Grajkowski * @retval CPA_STATUS_RESOURCE Error with Mutex
59678ee8d1cSJulian Grajkowski ******************************************************************************/
59778ee8d1cSJulian Grajkowski #define LAC_LOCK_MUTEX(pLock, timeout) \
59878ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != qatUtilsMutexLock((pLock), (timeout))) ? \
59978ee8d1cSJulian Grajkowski CPA_STATUS_RESOURCE : \
60078ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
60178ee8d1cSJulian Grajkowski
60278ee8d1cSJulian Grajkowski /**
60378ee8d1cSJulian Grajkowski *******************************************************************************
60478ee8d1cSJulian Grajkowski * @ingroup LacCommon
60578ee8d1cSJulian Grajkowski * This macro unlocks a mutex and returns the status
60678ee8d1cSJulian Grajkowski *
60778ee8d1cSJulian Grajkowski * @param[in] pLock Pointer to Lock
60878ee8d1cSJulian Grajkowski *
60978ee8d1cSJulian Grajkowski * @retval CPA_STATUS_SUCCESS Function executed successfully.
61078ee8d1cSJulian Grajkowski * @retval CPA_STATUS_RESOURCE Error with Mutex
61178ee8d1cSJulian Grajkowski ******************************************************************************/
61278ee8d1cSJulian Grajkowski #define LAC_UNLOCK_MUTEX(pLock) \
61378ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != qatUtilsMutexUnlock((pLock))) ? \
61478ee8d1cSJulian Grajkowski CPA_STATUS_RESOURCE : \
61578ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
61678ee8d1cSJulian Grajkowski
61778ee8d1cSJulian Grajkowski /**
61878ee8d1cSJulian Grajkowski *******************************************************************************
61978ee8d1cSJulian Grajkowski * @ingroup LacCommon
62078ee8d1cSJulian Grajkowski * This macro initialises a mutex and returns the status
62178ee8d1cSJulian Grajkowski *
62278ee8d1cSJulian Grajkowski * @param[in] pLock Pointer to Lock
62378ee8d1cSJulian Grajkowski *
62478ee8d1cSJulian Grajkowski * @retval CPA_STATUS_SUCCESS Function executed successfully.
62578ee8d1cSJulian Grajkowski * @retval CPA_STATUS_RESOURCE Error with Mutex
62678ee8d1cSJulian Grajkowski ******************************************************************************/
62778ee8d1cSJulian Grajkowski #define LAC_INIT_MUTEX(pLock) \
62878ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != qatUtilsMutexInit((pLock))) ? \
62978ee8d1cSJulian Grajkowski CPA_STATUS_RESOURCE : \
63078ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
63178ee8d1cSJulian Grajkowski
63278ee8d1cSJulian Grajkowski /**
63378ee8d1cSJulian Grajkowski *******************************************************************************
63478ee8d1cSJulian Grajkowski * @ingroup LacCommon
63578ee8d1cSJulian Grajkowski * This macro destroys a mutex and returns the status
63678ee8d1cSJulian Grajkowski *
63778ee8d1cSJulian Grajkowski * @param[in] pLock Pointer to Lock
63878ee8d1cSJulian Grajkowski *
63978ee8d1cSJulian Grajkowski * @retval CPA_STATUS_SUCCESS Function executed successfully.
64078ee8d1cSJulian Grajkowski * @retval CPA_STATUS_RESOURCE Error with Mutex
64178ee8d1cSJulian Grajkowski ******************************************************************************/
64278ee8d1cSJulian Grajkowski #define LAC_DESTROY_MUTEX(pLock) \
64378ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != qatUtilsMutexDestroy((pLock))) ? \
64478ee8d1cSJulian Grajkowski CPA_STATUS_RESOURCE : \
64578ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
64678ee8d1cSJulian Grajkowski
64778ee8d1cSJulian Grajkowski /**
64878ee8d1cSJulian Grajkowski *******************************************************************************
64978ee8d1cSJulian Grajkowski * @ingroup LacCommon
65078ee8d1cSJulian Grajkowski * This macro calls a trylock on a mutex
65178ee8d1cSJulian Grajkowski *
65278ee8d1cSJulian Grajkowski * @param[in] pLock Pointer to Lock
65378ee8d1cSJulian Grajkowski *
65478ee8d1cSJulian Grajkowski * @retval CPA_STATUS_SUCCESS Function executed successfully.
65578ee8d1cSJulian Grajkowski * @retval CPA_STATUS_RESOURCE Error with Mutex
65678ee8d1cSJulian Grajkowski ******************************************************************************/
65778ee8d1cSJulian Grajkowski #define LAC_TRYLOCK_MUTEX(pLock) \
65878ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != \
65978ee8d1cSJulian Grajkowski qatUtilsMutexTryLock((pLock), QAT_UTILS_WAIT_NONE)) ? \
66078ee8d1cSJulian Grajkowski CPA_STATUS_RESOURCE : \
66178ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
66278ee8d1cSJulian Grajkowski
66378ee8d1cSJulian Grajkowski /*
66478ee8d1cSJulian Grajkowski *******************************************************************************
66578ee8d1cSJulian Grajkowski * Semaphore Macros
66678ee8d1cSJulian Grajkowski *******************************************************************************
66778ee8d1cSJulian Grajkowski */
66878ee8d1cSJulian Grajkowski
66978ee8d1cSJulian Grajkowski /**
67078ee8d1cSJulian Grajkowski *******************************************************************************
67178ee8d1cSJulian Grajkowski * @ingroup LacCommon
67278ee8d1cSJulian Grajkowski * This macro waits on a semaphore and returns the status
67378ee8d1cSJulian Grajkowski *
67478ee8d1cSJulian Grajkowski * @param[in] sid The semaphore
67578ee8d1cSJulian Grajkowski * @param[in] timeout Timeout
67678ee8d1cSJulian Grajkowski *
67778ee8d1cSJulian Grajkowski * @retval CPA_STATUS_SUCCESS Function executed successfully.
67878ee8d1cSJulian Grajkowski * @retval CPA_STATUS_RESOURCE Error with semaphore
67978ee8d1cSJulian Grajkowski ******************************************************************************/
68078ee8d1cSJulian Grajkowski #define LAC_WAIT_SEMAPHORE(sid, timeout) \
68178ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != qatUtilsSemaphoreWait(&sid, (timeout))) ? \
68278ee8d1cSJulian Grajkowski CPA_STATUS_RESOURCE : \
68378ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
68478ee8d1cSJulian Grajkowski
68578ee8d1cSJulian Grajkowski /**
68678ee8d1cSJulian Grajkowski *******************************************************************************
68778ee8d1cSJulian Grajkowski * @ingroup LacCommon
68878ee8d1cSJulian Grajkowski * This macro checks a semaphore and returns the status
68978ee8d1cSJulian Grajkowski *
69078ee8d1cSJulian Grajkowski * @param[in] sid The semaphore
69178ee8d1cSJulian Grajkowski *
69278ee8d1cSJulian Grajkowski * @retval CPA_STATUS_SUCCESS Function executed successfully.
69378ee8d1cSJulian Grajkowski * @retval CPA_STATUS_RESOURCE Error with semaphore
69478ee8d1cSJulian Grajkowski ******************************************************************************/
69578ee8d1cSJulian Grajkowski #define LAC_CHECK_SEMAPHORE(sid) \
69678ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != qatUtilsSemaphoreTryWait(&sid)) ? \
69778ee8d1cSJulian Grajkowski CPA_STATUS_RETRY : \
69878ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
69978ee8d1cSJulian Grajkowski
70078ee8d1cSJulian Grajkowski /**
70178ee8d1cSJulian Grajkowski *******************************************************************************
70278ee8d1cSJulian Grajkowski * @ingroup LacCommon
70378ee8d1cSJulian Grajkowski * This macro post a semaphore and returns the status
70478ee8d1cSJulian Grajkowski *
70578ee8d1cSJulian Grajkowski * @param[in] sid The semaphore
70678ee8d1cSJulian Grajkowski *
70778ee8d1cSJulian Grajkowski * @retval CPA_STATUS_SUCCESS Function executed successfully.
70878ee8d1cSJulian Grajkowski * @retval CPA_STATUS_RESOURCE Error with semaphore
70978ee8d1cSJulian Grajkowski ******************************************************************************/
71078ee8d1cSJulian Grajkowski #define LAC_POST_SEMAPHORE(sid) \
71178ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != qatUtilsSemaphorePost(&sid)) ? \
71278ee8d1cSJulian Grajkowski CPA_STATUS_RESOURCE : \
71378ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
71478ee8d1cSJulian Grajkowski /**
71578ee8d1cSJulian Grajkowski *******************************************************************************
71678ee8d1cSJulian Grajkowski * @ingroup LacCommon
71778ee8d1cSJulian Grajkowski * This macro initialises a semaphore and returns the status
71878ee8d1cSJulian Grajkowski *
71978ee8d1cSJulian Grajkowski * @param[in] sid The semaphore
72078ee8d1cSJulian Grajkowski * @param[in] semValue Initial semaphore value
72178ee8d1cSJulian Grajkowski *
72278ee8d1cSJulian Grajkowski * @retval CPA_STATUS_SUCCESS Function executed successfully.
72378ee8d1cSJulian Grajkowski * @retval CPA_STATUS_RESOURCE Error with semaphore
72478ee8d1cSJulian Grajkowski ******************************************************************************/
72578ee8d1cSJulian Grajkowski #define LAC_INIT_SEMAPHORE(sid, semValue) \
72678ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != qatUtilsSemaphoreInit(&sid, semValue)) ? \
72778ee8d1cSJulian Grajkowski CPA_STATUS_RESOURCE : \
72878ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
72978ee8d1cSJulian Grajkowski
73078ee8d1cSJulian Grajkowski /**
73178ee8d1cSJulian Grajkowski *******************************************************************************
73278ee8d1cSJulian Grajkowski * @ingroup LacCommon
73378ee8d1cSJulian Grajkowski * This macro destroys a semaphore and returns the status
73478ee8d1cSJulian Grajkowski *
73578ee8d1cSJulian Grajkowski * @param[in] sid The semaphore
73678ee8d1cSJulian Grajkowski *
73778ee8d1cSJulian Grajkowski * @retval CPA_STATUS_SUCCESS Function executed successfully.
73878ee8d1cSJulian Grajkowski * @retval CPA_STATUS_RESOURCE Error with semaphore
73978ee8d1cSJulian Grajkowski ******************************************************************************/
74078ee8d1cSJulian Grajkowski #define LAC_DESTROY_SEMAPHORE(sid) \
74178ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != qatUtilsSemaphoreDestroy(&sid)) ? \
74278ee8d1cSJulian Grajkowski CPA_STATUS_RESOURCE : \
74378ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
74478ee8d1cSJulian Grajkowski
74578ee8d1cSJulian Grajkowski /*
74678ee8d1cSJulian Grajkowski *******************************************************************************
74778ee8d1cSJulian Grajkowski * Spinlock Macros
74878ee8d1cSJulian Grajkowski *******************************************************************************
74978ee8d1cSJulian Grajkowski */
75078ee8d1cSJulian Grajkowski typedef struct mtx *lac_lock_t;
75178ee8d1cSJulian Grajkowski #define LAC_SPINLOCK_INIT(lock) \
75278ee8d1cSJulian Grajkowski ((CPA_STATUS_SUCCESS != qatUtilsLockInit(lock)) ? \
75378ee8d1cSJulian Grajkowski CPA_STATUS_RESOURCE : \
75478ee8d1cSJulian Grajkowski CPA_STATUS_SUCCESS)
75578ee8d1cSJulian Grajkowski #define LAC_SPINLOCK(lock) \
75678ee8d1cSJulian Grajkowski ({ \
75778ee8d1cSJulian Grajkowski (void)qatUtilsLock(lock); \
75878ee8d1cSJulian Grajkowski })
75978ee8d1cSJulian Grajkowski #define LAC_SPINUNLOCK(lock) \
76078ee8d1cSJulian Grajkowski ({ \
76178ee8d1cSJulian Grajkowski (void)qatUtilsUnlock(lock); \
76278ee8d1cSJulian Grajkowski })
76378ee8d1cSJulian Grajkowski #define LAC_SPINLOCK_DESTROY(lock) \
76478ee8d1cSJulian Grajkowski ({ \
76578ee8d1cSJulian Grajkowski (void)qatUtilsLockDestroy(lock); \
76678ee8d1cSJulian Grajkowski })
76778ee8d1cSJulian Grajkowski
76878ee8d1cSJulian Grajkowski #define LAC_CONST_PTR_CAST(castee) ((void *)(LAC_ARCH_UINT)(castee))
76978ee8d1cSJulian Grajkowski #define LAC_CONST_VOLATILE_PTR_CAST(castee) ((void *)(LAC_ARCH_UINT)(castee))
77078ee8d1cSJulian Grajkowski
77178ee8d1cSJulian Grajkowski /* Type of ring */
77278ee8d1cSJulian Grajkowski #define SAL_RING_TYPE_NONE 0
77378ee8d1cSJulian Grajkowski #define SAL_RING_TYPE_A_SYM_HI 1
77478ee8d1cSJulian Grajkowski #define SAL_RING_TYPE_A_SYM_LO 2
77578ee8d1cSJulian Grajkowski #define SAL_RING_TYPE_A_ASYM 3
77678ee8d1cSJulian Grajkowski #define SAL_RING_TYPE_B_SYM_HI 4
77778ee8d1cSJulian Grajkowski #define SAL_RING_TYPE_B_SYM_LO 5
77878ee8d1cSJulian Grajkowski #define SAL_RING_TYPE_B_ASYM 6
77978ee8d1cSJulian Grajkowski #define SAL_RING_TYPE_DC 7
78078ee8d1cSJulian Grajkowski #define SAL_RING_TYPE_ADMIN 8
78178ee8d1cSJulian Grajkowski #define SAL_RING_TYPE_TRNG 9
78278ee8d1cSJulian Grajkowski
78378ee8d1cSJulian Grajkowski /* Maps Ring Service to generic service type */
78478ee8d1cSJulian Grajkowski static inline icp_adf_ringInfoService_t
lac_getRingType(int type)78578ee8d1cSJulian Grajkowski lac_getRingType(int type)
78678ee8d1cSJulian Grajkowski {
78778ee8d1cSJulian Grajkowski switch (type) {
78878ee8d1cSJulian Grajkowski case SAL_RING_TYPE_NONE:
78978ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_0;
79078ee8d1cSJulian Grajkowski case SAL_RING_TYPE_A_SYM_HI:
79178ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_1;
79278ee8d1cSJulian Grajkowski case SAL_RING_TYPE_A_SYM_LO:
79378ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_2;
79478ee8d1cSJulian Grajkowski case SAL_RING_TYPE_A_ASYM:
79578ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_3;
79678ee8d1cSJulian Grajkowski case SAL_RING_TYPE_B_SYM_HI:
79778ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_4;
79878ee8d1cSJulian Grajkowski case SAL_RING_TYPE_B_SYM_LO:
79978ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_5;
80078ee8d1cSJulian Grajkowski case SAL_RING_TYPE_B_ASYM:
80178ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_6;
80278ee8d1cSJulian Grajkowski case SAL_RING_TYPE_DC:
80378ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_7;
80478ee8d1cSJulian Grajkowski case SAL_RING_TYPE_ADMIN:
80578ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_8;
80678ee8d1cSJulian Grajkowski case SAL_RING_TYPE_TRNG:
80778ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_9;
80878ee8d1cSJulian Grajkowski default:
80978ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_0;
81078ee8d1cSJulian Grajkowski }
81178ee8d1cSJulian Grajkowski return ICP_ADF_RING_SERVICE_0;
81278ee8d1cSJulian Grajkowski }
81378ee8d1cSJulian Grajkowski
81478ee8d1cSJulian Grajkowski /* Maps generic service type to Ring Service type */
81578ee8d1cSJulian Grajkowski static inline int
lac_getServiceType(icp_adf_ringInfoService_t type)81678ee8d1cSJulian Grajkowski lac_getServiceType(icp_adf_ringInfoService_t type)
81778ee8d1cSJulian Grajkowski {
81878ee8d1cSJulian Grajkowski switch (type) {
81978ee8d1cSJulian Grajkowski case ICP_ADF_RING_SERVICE_0:
82078ee8d1cSJulian Grajkowski return SAL_RING_TYPE_NONE;
82178ee8d1cSJulian Grajkowski case ICP_ADF_RING_SERVICE_1:
82278ee8d1cSJulian Grajkowski return SAL_RING_TYPE_A_SYM_HI;
82378ee8d1cSJulian Grajkowski case ICP_ADF_RING_SERVICE_2:
82478ee8d1cSJulian Grajkowski return SAL_RING_TYPE_A_SYM_LO;
82578ee8d1cSJulian Grajkowski case ICP_ADF_RING_SERVICE_3:
82678ee8d1cSJulian Grajkowski return SAL_RING_TYPE_A_ASYM;
82778ee8d1cSJulian Grajkowski case ICP_ADF_RING_SERVICE_4:
82878ee8d1cSJulian Grajkowski return SAL_RING_TYPE_B_SYM_HI;
82978ee8d1cSJulian Grajkowski case ICP_ADF_RING_SERVICE_5:
83078ee8d1cSJulian Grajkowski return SAL_RING_TYPE_B_SYM_LO;
83178ee8d1cSJulian Grajkowski case ICP_ADF_RING_SERVICE_6:
83278ee8d1cSJulian Grajkowski return SAL_RING_TYPE_B_ASYM;
83378ee8d1cSJulian Grajkowski case ICP_ADF_RING_SERVICE_7:
83478ee8d1cSJulian Grajkowski return SAL_RING_TYPE_DC;
83578ee8d1cSJulian Grajkowski case ICP_ADF_RING_SERVICE_8:
83678ee8d1cSJulian Grajkowski return SAL_RING_TYPE_ADMIN;
83778ee8d1cSJulian Grajkowski default:
83878ee8d1cSJulian Grajkowski return SAL_RING_TYPE_NONE;
83978ee8d1cSJulian Grajkowski }
84078ee8d1cSJulian Grajkowski return SAL_RING_TYPE_NONE;
84178ee8d1cSJulian Grajkowski }
84278ee8d1cSJulian Grajkowski
84378ee8d1cSJulian Grajkowski #endif /* LAC_COMMON_H */
844