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