178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
378ee8d1cSJulian Grajkowski /**
478ee8d1cSJulian Grajkowski  ***************************************************************************
578ee8d1cSJulian Grajkowski  * @file lac_sync.h
678ee8d1cSJulian Grajkowski  *
778ee8d1cSJulian Grajkowski  * @defgroup LacSync     LAC synchronous
878ee8d1cSJulian Grajkowski  *
978ee8d1cSJulian Grajkowski  * @ingroup LacCommon
1078ee8d1cSJulian Grajkowski  *
1178ee8d1cSJulian Grajkowski  * Function prototypes and defines for synchronous support
1278ee8d1cSJulian Grajkowski  *
1378ee8d1cSJulian Grajkowski  ***************************************************************************/
1478ee8d1cSJulian Grajkowski 
1578ee8d1cSJulian Grajkowski #ifndef LAC_SYNC_H
1678ee8d1cSJulian Grajkowski #define LAC_SYNC_H
1778ee8d1cSJulian Grajkowski 
1878ee8d1cSJulian Grajkowski #include "cpa.h"
1978ee8d1cSJulian Grajkowski #include "qat_utils.h"
2078ee8d1cSJulian Grajkowski #include "lac_mem.h"
2178ee8d1cSJulian Grajkowski 
2278ee8d1cSJulian Grajkowski /**
2378ee8d1cSJulian Grajkowski  *****************************************************************************
2478ee8d1cSJulian Grajkowski  * @ingroup LacSync
2578ee8d1cSJulian Grajkowski  *
2678ee8d1cSJulian Grajkowski  * @description
2778ee8d1cSJulian Grajkowski  *      LAC cookie for synchronous support
2878ee8d1cSJulian Grajkowski  *
2978ee8d1cSJulian Grajkowski  *****************************************************************************/
3078ee8d1cSJulian Grajkowski typedef struct lac_sync_op_data_s {
3178ee8d1cSJulian Grajkowski 	struct sema *sid;
3278ee8d1cSJulian Grajkowski 	/**< Semaphore to signal */
3378ee8d1cSJulian Grajkowski 	CpaStatus status;
3478ee8d1cSJulian Grajkowski 	/**< Output - Status of the QAT response */
3578ee8d1cSJulian Grajkowski 	CpaBoolean opResult;
3678ee8d1cSJulian Grajkowski 	/**< Output - Verification of the operation/protocol status */
3778ee8d1cSJulian Grajkowski 	CpaBoolean complete;
3878ee8d1cSJulian Grajkowski 	/**< Output - Operation is complete */
3978ee8d1cSJulian Grajkowski 	CpaBoolean canceled;
4078ee8d1cSJulian Grajkowski 	/**< Output - Operation canceled */
4178ee8d1cSJulian Grajkowski } lac_sync_op_data_t;
4278ee8d1cSJulian Grajkowski 
4378ee8d1cSJulian Grajkowski #define LAC_PKE_SYNC_CALLBACK_TIMEOUT (5000)
4478ee8d1cSJulian Grajkowski /**< @ingroup LacSync
4578ee8d1cSJulian Grajkowski  * Timeout waiting for an async callbacks in msecs.
4678ee8d1cSJulian Grajkowski  * This is derived from the max latency of a PKE request  + 1 sec
4778ee8d1cSJulian Grajkowski  */
4878ee8d1cSJulian Grajkowski 
4978ee8d1cSJulian Grajkowski #define LAC_SYM_DRBG_POLL_AND_WAIT_TIME_MS (10)
5078ee8d1cSJulian Grajkowski /**< @ingroup LacSyn
5178ee8d1cSJulian Grajkowski  * Default interval DRBG polling in msecs */
5278ee8d1cSJulian Grajkowski 
5378ee8d1cSJulian Grajkowski #define LAC_SYM_SYNC_CALLBACK_TIMEOUT (300)
5478ee8d1cSJulian Grajkowski /**< @ingroup LacSyn
5578ee8d1cSJulian Grajkowski  * Timeout for wait for symmetric response in msecs
5678ee8d1cSJulian Grajkowski */
5778ee8d1cSJulian Grajkowski 
5878ee8d1cSJulian Grajkowski #define LAC_INIT_MSG_CALLBACK_TIMEOUT (1922)
5978ee8d1cSJulian Grajkowski /**< @ingroup LacSyn
6078ee8d1cSJulian Grajkowski  * Timeout for wait for init messages response in msecs
6178ee8d1cSJulian Grajkowski */
6278ee8d1cSJulian Grajkowski 
63a977168cSMichal Gulbicki #define DC_SYNC_CALLBACK_TIMEOUT (2000)
6478ee8d1cSJulian Grajkowski /**< @ingroup LacSyn
6578ee8d1cSJulian Grajkowski  * Timeout for wait for compression response in msecs */
6678ee8d1cSJulian Grajkowski 
6778ee8d1cSJulian Grajkowski #define LAC_SYN_INITIAL_SEM_VALUE (0)
6878ee8d1cSJulian Grajkowski /**< @ingroup LacSyn
6978ee8d1cSJulian Grajkowski  * Initial value of the sync waiting semaphore */
7078ee8d1cSJulian Grajkowski 
7178ee8d1cSJulian Grajkowski /**
7278ee8d1cSJulian Grajkowski  *******************************************************************************
7378ee8d1cSJulian Grajkowski  * @ingroup LacSync
7478ee8d1cSJulian Grajkowski  *      This function allocates a sync op data cookie
7578ee8d1cSJulian Grajkowski  *      and creates and initialises the QAT Utils semaphore
7678ee8d1cSJulian Grajkowski  *
7778ee8d1cSJulian Grajkowski  * @param[in] ppSyncCallbackCookie  Pointer to synch op data
7878ee8d1cSJulian Grajkowski  *
7978ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_RESOURCE  Failed to allocate the memory for the cookie.
8078ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_SUCCESS   Success
8178ee8d1cSJulian Grajkowski  *
8278ee8d1cSJulian Grajkowski  ******************************************************************************/
8378ee8d1cSJulian Grajkowski static __inline CpaStatus
LacSync_CreateSyncCookie(lac_sync_op_data_t ** ppSyncCallbackCookie)8478ee8d1cSJulian Grajkowski LacSync_CreateSyncCookie(lac_sync_op_data_t **ppSyncCallbackCookie)
8578ee8d1cSJulian Grajkowski {
8678ee8d1cSJulian Grajkowski 	CpaStatus status = CPA_STATUS_SUCCESS;
8778ee8d1cSJulian Grajkowski 
8878ee8d1cSJulian Grajkowski 	*ppSyncCallbackCookie =
8978ee8d1cSJulian Grajkowski 	    malloc(sizeof(lac_sync_op_data_t), M_QAT, M_WAITOK);
9078ee8d1cSJulian Grajkowski 
9178ee8d1cSJulian Grajkowski 	if (CPA_STATUS_SUCCESS == status) {
9278ee8d1cSJulian Grajkowski 		status = LAC_INIT_SEMAPHORE((*ppSyncCallbackCookie)->sid,
9378ee8d1cSJulian Grajkowski 					    LAC_SYN_INITIAL_SEM_VALUE);
9478ee8d1cSJulian Grajkowski 		(*ppSyncCallbackCookie)->complete = CPA_FALSE;
9578ee8d1cSJulian Grajkowski 		(*ppSyncCallbackCookie)->canceled = CPA_FALSE;
9678ee8d1cSJulian Grajkowski 	}
9778ee8d1cSJulian Grajkowski 
9878ee8d1cSJulian Grajkowski 	if (CPA_STATUS_SUCCESS != status) {
9978ee8d1cSJulian Grajkowski 		LAC_OS_FREE(*ppSyncCallbackCookie);
10078ee8d1cSJulian Grajkowski 	}
10178ee8d1cSJulian Grajkowski 
10278ee8d1cSJulian Grajkowski 	return status;
10378ee8d1cSJulian Grajkowski }
10478ee8d1cSJulian Grajkowski 
10578ee8d1cSJulian Grajkowski /**
10678ee8d1cSJulian Grajkowski  *******************************************************************************
10778ee8d1cSJulian Grajkowski  * @ingroup LacSync
10878ee8d1cSJulian Grajkowski  *      This macro frees a sync op data cookie and destroys the QAT Utils
10978ee8d1cSJulian Grajkowski  *semaphore
11078ee8d1cSJulian Grajkowski  *
11178ee8d1cSJulian Grajkowski  * @param[in] ppSyncCallbackCookie      Pointer to sync op data
11278ee8d1cSJulian Grajkowski  *
11378ee8d1cSJulian Grajkowski  * @return void
11478ee8d1cSJulian Grajkowski  ******************************************************************************/
11578ee8d1cSJulian Grajkowski static __inline CpaStatus
LacSync_DestroySyncCookie(lac_sync_op_data_t ** ppSyncCallbackCookie)11678ee8d1cSJulian Grajkowski LacSync_DestroySyncCookie(lac_sync_op_data_t **ppSyncCallbackCookie)
11778ee8d1cSJulian Grajkowski {
11878ee8d1cSJulian Grajkowski 	CpaStatus status = CPA_STATUS_SUCCESS;
11978ee8d1cSJulian Grajkowski 
12078ee8d1cSJulian Grajkowski 	/*
12178ee8d1cSJulian Grajkowski 	 * If the operation has not completed, cancel it instead of destroying
12278ee8d1cSJulian Grajkowski 	 * the
12378ee8d1cSJulian Grajkowski 	 * cookie. Otherwise, the callback might panic. In this case, the cookie
12478ee8d1cSJulian Grajkowski 	 * will leak, but it's better than a panic.
12578ee8d1cSJulian Grajkowski 	 */
12678ee8d1cSJulian Grajkowski 	if (!(*ppSyncCallbackCookie)->complete) {
12778ee8d1cSJulian Grajkowski 		QAT_UTILS_LOG(
12878ee8d1cSJulian Grajkowski 		    "Attempting to destroy an incomplete sync cookie\n");
12978ee8d1cSJulian Grajkowski 		(*ppSyncCallbackCookie)->canceled = CPA_TRUE;
13078ee8d1cSJulian Grajkowski 		return CPA_STATUS_FAIL;
13178ee8d1cSJulian Grajkowski 	}
13278ee8d1cSJulian Grajkowski 
13378ee8d1cSJulian Grajkowski 	status = LAC_DESTROY_SEMAPHORE((*ppSyncCallbackCookie)->sid);
13478ee8d1cSJulian Grajkowski 	LAC_OS_FREE(*ppSyncCallbackCookie);
13578ee8d1cSJulian Grajkowski 	return status;
13678ee8d1cSJulian Grajkowski }
13778ee8d1cSJulian Grajkowski 
13878ee8d1cSJulian Grajkowski /**
13978ee8d1cSJulian Grajkowski  *****************************************************************************
14078ee8d1cSJulian Grajkowski  * @ingroup LacSync
14178ee8d1cSJulian Grajkowski  *      Function which will wait for a sync callback on a given cookie.
14278ee8d1cSJulian Grajkowski  *
14378ee8d1cSJulian Grajkowski  * @param[in] pSyncCallbackCookie       Pointer to sync op data
14478ee8d1cSJulian Grajkowski  * @param[in] timeOut                   Time to wait for callback (msec)
14578ee8d1cSJulian Grajkowski  * @param[out] pStatus                  Status returned by the callback
14678ee8d1cSJulian Grajkowski  * @param[out] pOpStatus                Operation status returned by callback.
14778ee8d1cSJulian Grajkowski  *
14878ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_SUCCESS   Success
14978ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_SUCCESS   Fail waiting for a callback
15078ee8d1cSJulian Grajkowski  *
15178ee8d1cSJulian Grajkowski  *****************************************************************************/
15278ee8d1cSJulian Grajkowski static __inline CpaStatus
LacSync_WaitForCallback(lac_sync_op_data_t * pSyncCallbackCookie,Cpa32S timeOut,CpaStatus * pStatus,CpaBoolean * pOpStatus)15378ee8d1cSJulian Grajkowski LacSync_WaitForCallback(lac_sync_op_data_t *pSyncCallbackCookie,
15478ee8d1cSJulian Grajkowski 			Cpa32S timeOut,
15578ee8d1cSJulian Grajkowski 			CpaStatus *pStatus,
15678ee8d1cSJulian Grajkowski 			CpaBoolean *pOpStatus)
15778ee8d1cSJulian Grajkowski {
15878ee8d1cSJulian Grajkowski 	CpaStatus status = CPA_STATUS_SUCCESS;
15978ee8d1cSJulian Grajkowski 
16078ee8d1cSJulian Grajkowski 	status = LAC_WAIT_SEMAPHORE(pSyncCallbackCookie->sid, timeOut);
16178ee8d1cSJulian Grajkowski 
16278ee8d1cSJulian Grajkowski 	if (CPA_STATUS_SUCCESS == status) {
16378ee8d1cSJulian Grajkowski 		*pStatus = pSyncCallbackCookie->status;
16478ee8d1cSJulian Grajkowski 		if (NULL != pOpStatus) {
16578ee8d1cSJulian Grajkowski 			*pOpStatus = pSyncCallbackCookie->opResult;
16678ee8d1cSJulian Grajkowski 		}
16778ee8d1cSJulian Grajkowski 		pSyncCallbackCookie->complete = CPA_TRUE;
16878ee8d1cSJulian Grajkowski 	}
16978ee8d1cSJulian Grajkowski 
17078ee8d1cSJulian Grajkowski 	return status;
17178ee8d1cSJulian Grajkowski }
17278ee8d1cSJulian Grajkowski 
17378ee8d1cSJulian Grajkowski /**
17478ee8d1cSJulian Grajkowski  *****************************************************************************
17578ee8d1cSJulian Grajkowski  * @ingroup LacSync
17678ee8d1cSJulian Grajkowski  *      Function which will check for a sync callback on a given cookie.
17778ee8d1cSJulian Grajkowski  *      Returns whether the callback has happened or not, no timeout.
17878ee8d1cSJulian Grajkowski  *
17978ee8d1cSJulian Grajkowski  * @param[in] pSyncCallbackCookie       Pointer to sync op data
18078ee8d1cSJulian Grajkowski  * @param[in] timeOut                   Time to wait for callback (msec)
18178ee8d1cSJulian Grajkowski  * @param[out] pStatus                  Status returned by the callback
18278ee8d1cSJulian Grajkowski  * @param[out] pOpStatus                Operation status returned by callback.
18378ee8d1cSJulian Grajkowski  *
18478ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_SUCCESS           Success
18578ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_FAIL              Fail waiting for a callback
18678ee8d1cSJulian Grajkowski  *
18778ee8d1cSJulian Grajkowski  *****************************************************************************/
18878ee8d1cSJulian Grajkowski static __inline CpaStatus
LacSync_CheckForCallback(lac_sync_op_data_t * pSyncCallbackCookie,CpaStatus * pStatus,CpaBoolean * pOpStatus)18978ee8d1cSJulian Grajkowski LacSync_CheckForCallback(lac_sync_op_data_t *pSyncCallbackCookie,
19078ee8d1cSJulian Grajkowski 			 CpaStatus *pStatus,
19178ee8d1cSJulian Grajkowski 			 CpaBoolean *pOpStatus)
19278ee8d1cSJulian Grajkowski {
19378ee8d1cSJulian Grajkowski 	CpaStatus status = CPA_STATUS_SUCCESS;
19478ee8d1cSJulian Grajkowski 
19578ee8d1cSJulian Grajkowski 	status = LAC_CHECK_SEMAPHORE(pSyncCallbackCookie->sid);
19678ee8d1cSJulian Grajkowski 
19778ee8d1cSJulian Grajkowski 	if (CPA_STATUS_SUCCESS == status) {
19878ee8d1cSJulian Grajkowski 		*pStatus = pSyncCallbackCookie->status;
19978ee8d1cSJulian Grajkowski 		if (NULL != pOpStatus) {
20078ee8d1cSJulian Grajkowski 			*pOpStatus = pSyncCallbackCookie->opResult;
20178ee8d1cSJulian Grajkowski 		}
20278ee8d1cSJulian Grajkowski 		pSyncCallbackCookie->complete = CPA_TRUE;
20378ee8d1cSJulian Grajkowski 	}
20478ee8d1cSJulian Grajkowski 
20578ee8d1cSJulian Grajkowski 	return status;
20678ee8d1cSJulian Grajkowski }
20778ee8d1cSJulian Grajkowski 
20878ee8d1cSJulian Grajkowski /**
20978ee8d1cSJulian Grajkowski  *****************************************************************************
21078ee8d1cSJulian Grajkowski  * @ingroup LacSync
21178ee8d1cSJulian Grajkowski  *      Function which will mark a sync cookie as complete.
21278ee8d1cSJulian Grajkowski  *      If it's known that the callback will not happen it's necessary
21378ee8d1cSJulian Grajkowski  *      to call this, else the cookie can't be destroyed.
21478ee8d1cSJulian Grajkowski  *
21578ee8d1cSJulian Grajkowski  * @param[in] pSyncCallbackCookie       Pointer to sync op data
21678ee8d1cSJulian Grajkowski  *
21778ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_SUCCESS           Success
21878ee8d1cSJulian Grajkowski  * @retval CPA_STATUS_FAIL              Failed to mark as complete
21978ee8d1cSJulian Grajkowski  *
22078ee8d1cSJulian Grajkowski  *****************************************************************************/
22178ee8d1cSJulian Grajkowski static __inline CpaStatus
LacSync_SetSyncCookieComplete(lac_sync_op_data_t * pSyncCallbackCookie)22278ee8d1cSJulian Grajkowski LacSync_SetSyncCookieComplete(lac_sync_op_data_t *pSyncCallbackCookie)
22378ee8d1cSJulian Grajkowski {
22478ee8d1cSJulian Grajkowski 	CpaStatus status = CPA_STATUS_FAIL;
22578ee8d1cSJulian Grajkowski 
22678ee8d1cSJulian Grajkowski 	if (NULL != pSyncCallbackCookie) {
22778ee8d1cSJulian Grajkowski 		pSyncCallbackCookie->complete = CPA_TRUE;
22878ee8d1cSJulian Grajkowski 		status = CPA_STATUS_SUCCESS;
22978ee8d1cSJulian Grajkowski 	}
23078ee8d1cSJulian Grajkowski 	return status;
23178ee8d1cSJulian Grajkowski }
23278ee8d1cSJulian Grajkowski /**
23378ee8d1cSJulian Grajkowski  *****************************************************************************
23478ee8d1cSJulian Grajkowski  * @ingroup LacSync
23578ee8d1cSJulian Grajkowski  *      Generic verify callback function.
23678ee8d1cSJulian Grajkowski  * @description
23778ee8d1cSJulian Grajkowski  *      This function is used when the API is called in synchronous mode.
23878ee8d1cSJulian Grajkowski  *      It's assumed the callbackTag holds a lac_sync_op_data_t type
23978ee8d1cSJulian Grajkowski  *      and when the callback is received, this callback shall set the
24078ee8d1cSJulian Grajkowski  *      status element of that cookie structure and kick the sid.
24178ee8d1cSJulian Grajkowski  *      This function may be used directly as a callback function.
24278ee8d1cSJulian Grajkowski  *
24378ee8d1cSJulian Grajkowski  * @param[in]  callbackTag       Callback Tag
24478ee8d1cSJulian Grajkowski  * @param[in]  status            Status of callback
24578ee8d1cSJulian Grajkowski  * @param[out] pOpdata           Pointer to the Op Data
24678ee8d1cSJulian Grajkowski  * @param[out] opResult          Boolean to indicate the result of the operation
24778ee8d1cSJulian Grajkowski  *
24878ee8d1cSJulian Grajkowski  * @return void
24978ee8d1cSJulian Grajkowski  *****************************************************************************/
25078ee8d1cSJulian Grajkowski void LacSync_GenVerifyCb(void *callbackTag,
25178ee8d1cSJulian Grajkowski 			 CpaStatus status,
25278ee8d1cSJulian Grajkowski 			 void *pOpdata,
25378ee8d1cSJulian Grajkowski 			 CpaBoolean opResult);
25478ee8d1cSJulian Grajkowski 
25578ee8d1cSJulian Grajkowski /**
25678ee8d1cSJulian Grajkowski  *****************************************************************************
25778ee8d1cSJulian Grajkowski  * @ingroup LacSync
25878ee8d1cSJulian Grajkowski  *      Generic flatbuffer callback function.
25978ee8d1cSJulian Grajkowski  * @description
26078ee8d1cSJulian Grajkowski  *      This function is used when the API is called in synchronous mode.
26178ee8d1cSJulian Grajkowski  *      It's assumed the callbackTag holds a lac_sync_op_data_t type
26278ee8d1cSJulian Grajkowski  *      and when the callback is received, this callback shall set the
26378ee8d1cSJulian Grajkowski  *      status element of that cookie structure and kick the sid.
26478ee8d1cSJulian Grajkowski  *      This function may be used directly as a callback function.
26578ee8d1cSJulian Grajkowski  *
26678ee8d1cSJulian Grajkowski  * @param[in]  callbackTag       Callback Tag
26778ee8d1cSJulian Grajkowski  * @param[in]  status            Status of callback
26878ee8d1cSJulian Grajkowski  * @param[in]  pOpdata           Pointer to the Op Data
26978ee8d1cSJulian Grajkowski  * @param[out] pOut              Pointer to the flat buffer
27078ee8d1cSJulian Grajkowski  *
27178ee8d1cSJulian Grajkowski  * @return void
27278ee8d1cSJulian Grajkowski  *****************************************************************************/
27378ee8d1cSJulian Grajkowski void LacSync_GenFlatBufCb(void *callbackTag,
27478ee8d1cSJulian Grajkowski 			  CpaStatus status,
27578ee8d1cSJulian Grajkowski 			  void *pOpdata,
27678ee8d1cSJulian Grajkowski 			  CpaFlatBuffer *pOut);
27778ee8d1cSJulian Grajkowski 
27878ee8d1cSJulian Grajkowski /**
27978ee8d1cSJulian Grajkowski  *****************************************************************************
28078ee8d1cSJulian Grajkowski  * @ingroup LacSync
28178ee8d1cSJulian Grajkowski  *      Generic flatbuffer verify callback function.
28278ee8d1cSJulian Grajkowski  * @description
28378ee8d1cSJulian Grajkowski  *      This function is used when the API is called in synchronous mode.
28478ee8d1cSJulian Grajkowski  *      It's assumed the callbackTag holds a lac_sync_op_data_t type
28578ee8d1cSJulian Grajkowski  *      and when the callback is received, this callback shall set the
28678ee8d1cSJulian Grajkowski  *      status and opResult element of that cookie structure and
28778ee8d1cSJulian Grajkowski  *      kick the sid.
28878ee8d1cSJulian Grajkowski  *      This function may be used directly as a callback function.
28978ee8d1cSJulian Grajkowski  *
29078ee8d1cSJulian Grajkowski  * @param[in]  callbackTag       Callback Tag
29178ee8d1cSJulian Grajkowski  * @param[in]  status            Status of callback
29278ee8d1cSJulian Grajkowski  * @param[in]  pOpdata           Pointer to the Op Data
29378ee8d1cSJulian Grajkowski  * @param[out] opResult          Boolean to indicate the result of the operation
29478ee8d1cSJulian Grajkowski  * @param[out] pOut              Pointer to the flat buffer
29578ee8d1cSJulian Grajkowski  *
29678ee8d1cSJulian Grajkowski  * @return void
29778ee8d1cSJulian Grajkowski  *****************************************************************************/
29878ee8d1cSJulian Grajkowski void LacSync_GenFlatBufVerifyCb(void *callbackTag,
29978ee8d1cSJulian Grajkowski 				CpaStatus status,
30078ee8d1cSJulian Grajkowski 				void *pOpdata,
30178ee8d1cSJulian Grajkowski 				CpaBoolean opResult,
30278ee8d1cSJulian Grajkowski 				CpaFlatBuffer *pOut);
30378ee8d1cSJulian Grajkowski 
30478ee8d1cSJulian Grajkowski /**
30578ee8d1cSJulian Grajkowski  *****************************************************************************
30678ee8d1cSJulian Grajkowski  * @ingroup LacSync
30778ee8d1cSJulian Grajkowski  *      Generic dual flatbuffer verify callback function.
30878ee8d1cSJulian Grajkowski  * @description
30978ee8d1cSJulian Grajkowski  *      This function is used when the API is called in synchronous mode.
31078ee8d1cSJulian Grajkowski  *      It's assumed the callbackTag holds a lac_sync_op_data_t type
31178ee8d1cSJulian Grajkowski  *      and when the callback is received, this callback shall set the
31278ee8d1cSJulian Grajkowski  *      status and opResult element of that cookie structure and
31378ee8d1cSJulian Grajkowski  *      kick the sid.
31478ee8d1cSJulian Grajkowski  *      This function may be used directly as a callback function.
31578ee8d1cSJulian Grajkowski  *
31678ee8d1cSJulian Grajkowski  * @param[in]  callbackTag       Callback Tag
31778ee8d1cSJulian Grajkowski  * @param[in]  status            Status of callback
31878ee8d1cSJulian Grajkowski  * @param[in]  pOpdata           Pointer to the Op Data
31978ee8d1cSJulian Grajkowski  * @param[out] opResult          Boolean to indicate the result of the operation
32078ee8d1cSJulian Grajkowski  * @param[out] pOut0             Pointer to the flat buffer
32178ee8d1cSJulian Grajkowski  * @param[out] pOut1             Pointer to the flat buffer
32278ee8d1cSJulian Grajkowski  *
32378ee8d1cSJulian Grajkowski  * @return void
32478ee8d1cSJulian Grajkowski  *****************************************************************************/
32578ee8d1cSJulian Grajkowski void LacSync_GenDualFlatBufVerifyCb(void *callbackTag,
32678ee8d1cSJulian Grajkowski 				    CpaStatus status,
32778ee8d1cSJulian Grajkowski 				    void *pOpdata,
32878ee8d1cSJulian Grajkowski 				    CpaBoolean opResult,
32978ee8d1cSJulian Grajkowski 				    CpaFlatBuffer *pOut0,
33078ee8d1cSJulian Grajkowski 				    CpaFlatBuffer *pOut1);
33178ee8d1cSJulian Grajkowski 
33278ee8d1cSJulian Grajkowski /**
33378ee8d1cSJulian Grajkowski  *****************************************************************************
33478ee8d1cSJulian Grajkowski  * @ingroup LacSync
33578ee8d1cSJulian Grajkowski  *      Generic wake up function.
33678ee8d1cSJulian Grajkowski  * @description
33778ee8d1cSJulian Grajkowski  *      This function is used when the API is called in synchronous
33878ee8d1cSJulian Grajkowski  *      mode.
33978ee8d1cSJulian Grajkowski  *      It's assumed the callbackTag holds a lac_sync_op_data_t type
34078ee8d1cSJulian Grajkowski  *      and when the callback is received, this callback shall set
34178ee8d1cSJulian Grajkowski  *      the status element of that cookie structure and kick the
34278ee8d1cSJulian Grajkowski  *      sid.
34378ee8d1cSJulian Grajkowski  *      This function maybe called from an async callback.
34478ee8d1cSJulian Grajkowski  *
34578ee8d1cSJulian Grajkowski  * @param[in] callbackTag       Callback Tag
34678ee8d1cSJulian Grajkowski  * @param[in] status            Status of callback
34778ee8d1cSJulian Grajkowski  *
34878ee8d1cSJulian Grajkowski  * @return void
34978ee8d1cSJulian Grajkowski  *****************************************************************************/
35078ee8d1cSJulian Grajkowski void LacSync_GenWakeupSyncCaller(void *callbackTag, CpaStatus status);
35178ee8d1cSJulian Grajkowski 
35278ee8d1cSJulian Grajkowski /**
35378ee8d1cSJulian Grajkowski  *****************************************************************************
35478ee8d1cSJulian Grajkowski  * @ingroup LacSync
35578ee8d1cSJulian Grajkowski  *      Generic wake up verify function.
35678ee8d1cSJulian Grajkowski  * @description
35778ee8d1cSJulian Grajkowski  *      This function is used when the API is called in synchronous
35878ee8d1cSJulian Grajkowski  *      mode.
35978ee8d1cSJulian Grajkowski  *      It's assumed the callbackTag holds a lac_sync_op_data_t type
36078ee8d1cSJulian Grajkowski  *      and when the callback is received, this callback shall set
36178ee8d1cSJulian Grajkowski  *      the status element and the opResult of that cookie structure
36278ee8d1cSJulian Grajkowski  *      and kick the sid.
36378ee8d1cSJulian Grajkowski  *      This function maybe called from an async callback.
36478ee8d1cSJulian Grajkowski  *
36578ee8d1cSJulian Grajkowski  * @param[in]  callbackTag       Callback Tag
36678ee8d1cSJulian Grajkowski  * @param[in]  status            Status of callback
36778ee8d1cSJulian Grajkowski  * @param[out] opResult          Boolean to indicate the result of the operation
36878ee8d1cSJulian Grajkowski  *
36978ee8d1cSJulian Grajkowski  * @return void
37078ee8d1cSJulian Grajkowski  *****************************************************************************/
37178ee8d1cSJulian Grajkowski void LacSync_GenVerifyWakeupSyncCaller(void *callbackTag,
37278ee8d1cSJulian Grajkowski 				       CpaStatus status,
37378ee8d1cSJulian Grajkowski 				       CpaBoolean opResult);
37478ee8d1cSJulian Grajkowski 
37578ee8d1cSJulian Grajkowski #endif /*LAC_SYNC_H*/
376