xref: /freebsd/sys/dev/qat/qat_api/common/include/lac_sal.h (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
378ee8d1cSJulian Grajkowski /**
478ee8d1cSJulian Grajkowski  *****************************************************************************
578ee8d1cSJulian Grajkowski  * @file lac_sal.h
678ee8d1cSJulian Grajkowski  *
778ee8d1cSJulian Grajkowski  * @defgroup SalCtrl Service Access Layer Controller
878ee8d1cSJulian Grajkowski  *
978ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
1078ee8d1cSJulian Grajkowski  *
1178ee8d1cSJulian Grajkowski  * @description
1278ee8d1cSJulian Grajkowski  *      These functions are the functions to be executed for each state
1378ee8d1cSJulian Grajkowski  *      of the state machine for each service.
1478ee8d1cSJulian Grajkowski  *
1578ee8d1cSJulian Grajkowski  *****************************************************************************/
1678ee8d1cSJulian Grajkowski 
1778ee8d1cSJulian Grajkowski #ifndef LAC_SAL_H
1878ee8d1cSJulian Grajkowski #define LAC_SAL_H
1978ee8d1cSJulian Grajkowski 
2078ee8d1cSJulian Grajkowski #include "cpa_cy_im.h"
2178ee8d1cSJulian Grajkowski 
2278ee8d1cSJulian Grajkowski /**
2378ee8d1cSJulian Grajkowski *******************************************************************************
2478ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
2578ee8d1cSJulian Grajkowski  * @description
2678ee8d1cSJulian Grajkowski  *      This function allocates memory for a specific instance type.
2778ee8d1cSJulian Grajkowski  *      Zeros this memory and sets the generic service section of
2878ee8d1cSJulian Grajkowski  *      the instance memory.
2978ee8d1cSJulian Grajkowski  *
3078ee8d1cSJulian Grajkowski  * @context
3178ee8d1cSJulian Grajkowski  *      This function is called from the generic services init.
3278ee8d1cSJulian Grajkowski  *
3378ee8d1cSJulian Grajkowski  * @assumptions
3478ee8d1cSJulian Grajkowski  *      None
3578ee8d1cSJulian Grajkowski  * @sideEffects
3678ee8d1cSJulian Grajkowski  *      None
3778ee8d1cSJulian Grajkowski  * @reentrant
3878ee8d1cSJulian Grajkowski  *      No
3978ee8d1cSJulian Grajkowski  * @threadSafe
4078ee8d1cSJulian Grajkowski  *      Yes
4178ee8d1cSJulian Grajkowski  *
4278ee8d1cSJulian Grajkowski  * @param[in]  service         The type of the service to be created
4378ee8d1cSJulian Grajkowski  *                             (e.g. CRYPTO)
4478ee8d1cSJulian Grajkowski  * @param[in]  instance_num    The logical instance number which will
4578ee8d1cSJulian Grajkowski  *                             run the service
4678ee8d1cSJulian Grajkowski  * @param[out] pObj            Pointer to specific service instance memory
4778ee8d1cSJulian Grajkowski  * @retVal CPA_STATUS_SUCCESS  Instance memory successfully allocated
4878ee8d1cSJulian Grajkowski  * @retVal CPA_STATUS_RESOURCE Instance memory not successfully allocated
4978ee8d1cSJulian Grajkowski  * @retVal CPA_STATUS_FAIL     Unsupported service type
5078ee8d1cSJulian Grajkowski  *
5178ee8d1cSJulian Grajkowski  *****************************************************************************/
5278ee8d1cSJulian Grajkowski CpaStatus SalCtrl_ServiceCreate(sal_service_type_t service,
5378ee8d1cSJulian Grajkowski 				Cpa32U instance_num,
5478ee8d1cSJulian Grajkowski 				sal_service_t **pObj);
5578ee8d1cSJulian Grajkowski 
56*a977168cSMichal Gulbicki /******************************************************************************
5778ee8d1cSJulian Grajkowski  * @ingroup SalCtl
5878ee8d1cSJulian Grajkowski  * @description
5978ee8d1cSJulian Grajkowski  *      This macro goes through the 'list' passed in as a parameter. For each
6078ee8d1cSJulian Grajkowski  *      element found in the list, it peforms a cast to the type of the element
6178ee8d1cSJulian Grajkowski  *      given by the 'type' parameter. Finally, it calls the function given by
6278ee8d1cSJulian Grajkowski  *      the 'function' parameter, passing itself and the device as parameters.
6378ee8d1cSJulian Grajkowski  *
6478ee8d1cSJulian Grajkowski  *      In case of error (i.e. 'function' does not return _SUCCESS or _RETRY)
6578ee8d1cSJulian Grajkowski  *      processing of the 'list' elements will stop and the status_ret will be
6678ee8d1cSJulian Grajkowski  *      updated.
6778ee8d1cSJulian Grajkowski  *
6878ee8d1cSJulian Grajkowski  *      In case of _RETRY status_ret will be updated but the 'list'
6978ee8d1cSJulian Grajkowski  *      will continue to be processed. _RETRY is only expected when
7078ee8d1cSJulian Grajkowski  *      'function' is stop.
7178ee8d1cSJulian Grajkowski  *
7278ee8d1cSJulian Grajkowski  * @context
7378ee8d1cSJulian Grajkowski  *      This macro is used by both the service and qat event handlers.
7478ee8d1cSJulian Grajkowski  *
7578ee8d1cSJulian Grajkowski  * @assumptions
7678ee8d1cSJulian Grajkowski  *      None
7778ee8d1cSJulian Grajkowski  * @sideEffects
7878ee8d1cSJulian Grajkowski  *      None
7978ee8d1cSJulian Grajkowski  *
8078ee8d1cSJulian Grajkowski  * @param[in]  list             The list of services or qats as a type of list_t
8178ee8d1cSJulian Grajkowski  * @param[in]  type             It identifies the type of the object inside the
8278ee8d1cSJulian Grajkowski  *                              list: service or qat
8378ee8d1cSJulian Grajkowski  * @param[in]  device           The ADF accelerator handle for the device
8478ee8d1cSJulian Grajkowski  * @param[in]  function         The function pointer to call
85b197d4b8SGordon Bergling  * @param[in/out] status_ret    If an error occurred (i.e. status returned from
8678ee8d1cSJulian Grajkowski  *                              function is not _SUCCESS) then status_ret is
8778ee8d1cSJulian Grajkowski  *                              overwritten with status returned from function.
8878ee8d1cSJulian Grajkowski  *
8978ee8d1cSJulian Grajkowski  *****************************************************************************/
9078ee8d1cSJulian Grajkowski #define SAL_FOR_EACH(list, type, device, function, status_ret)                 \
9178ee8d1cSJulian Grajkowski 	do {                                                                   \
9278ee8d1cSJulian Grajkowski 		sal_list_t *curr_element = list;                               \
9378ee8d1cSJulian Grajkowski 		CpaStatus status_temp = CPA_STATUS_SUCCESS;                    \
9478ee8d1cSJulian Grajkowski 		typeof(type) *process = NULL;                                  \
9578ee8d1cSJulian Grajkowski 		while (NULL != curr_element) {                                 \
9678ee8d1cSJulian Grajkowski 			process =                                              \
9778ee8d1cSJulian Grajkowski 			    (typeof(type) *)SalList_getObject(curr_element);   \
9878ee8d1cSJulian Grajkowski 			status_temp = process->function(device, process);      \
9978ee8d1cSJulian Grajkowski 			if ((CPA_STATUS_SUCCESS != status_temp) &&             \
10078ee8d1cSJulian Grajkowski 			    (CPA_STATUS_RETRY != status_temp)) {               \
10178ee8d1cSJulian Grajkowski 				status_ret = status_temp;                      \
10278ee8d1cSJulian Grajkowski 				break;                                         \
10378ee8d1cSJulian Grajkowski 			} else {                                               \
10478ee8d1cSJulian Grajkowski 				if (CPA_STATUS_RETRY == status_temp) {         \
10578ee8d1cSJulian Grajkowski 					status_ret = status_temp;              \
10678ee8d1cSJulian Grajkowski 				}                                              \
10778ee8d1cSJulian Grajkowski 			}                                                      \
10878ee8d1cSJulian Grajkowski 			curr_element = SalList_next(curr_element);             \
10978ee8d1cSJulian Grajkowski 		}                                                              \
11078ee8d1cSJulian Grajkowski 	} while (0)
11178ee8d1cSJulian Grajkowski 
11278ee8d1cSJulian Grajkowski /**
11378ee8d1cSJulian Grajkowski *******************************************************************************
11478ee8d1cSJulian Grajkowski  * @ingroup SalCtl
11578ee8d1cSJulian Grajkowski  * @description
11678ee8d1cSJulian Grajkowski  *      This macro goes through the 'list' passed in as a parameter. For each
11778ee8d1cSJulian Grajkowski  *      element found in the list, it peforms a cast to the type of the element
11878ee8d1cSJulian Grajkowski  *      given by the 'type' parameter. Finally, it checks the state of the
11978ee8d1cSJulian Grajkowski  *      element and if it is in state 'state_check' then it calls the
12078ee8d1cSJulian Grajkowski  *      function given by the 'function' parameter, passing itself
12178ee8d1cSJulian Grajkowski  *      and the device as parameters.
12278ee8d1cSJulian Grajkowski  *      If the element is not in 'state_check' it returns from the macro.
12378ee8d1cSJulian Grajkowski  *
12478ee8d1cSJulian Grajkowski  *      In case of error (i.e. 'function' does not return _SUCCESS)
12578ee8d1cSJulian Grajkowski  *      processing of the 'list' elements will continue.
12678ee8d1cSJulian Grajkowski  *
12778ee8d1cSJulian Grajkowski  * @context
12878ee8d1cSJulian Grajkowski  *      This macro is used by both the service and qat event handlers.
12978ee8d1cSJulian Grajkowski  *
13078ee8d1cSJulian Grajkowski  * @assumptions
13178ee8d1cSJulian Grajkowski  *      None
13278ee8d1cSJulian Grajkowski  * @sideEffects
13378ee8d1cSJulian Grajkowski  *      None
13478ee8d1cSJulian Grajkowski  *
13578ee8d1cSJulian Grajkowski  * @param[in]  list             The list of services or qats as a type of list_t
13678ee8d1cSJulian Grajkowski  * @param[in]  type             It identifies the type of the object
13778ee8d1cSJulian Grajkowski  *                              inside the list: service or qat
13878ee8d1cSJulian Grajkowski  * @param[in]  device           The ADF accelerator handle for the device
13978ee8d1cSJulian Grajkowski  * @param[in]  function         The function pointer to call
14078ee8d1cSJulian Grajkowski  * @param[in]  state_check      The state to check for
14178ee8d1cSJulian Grajkowski  *
14278ee8d1cSJulian Grajkowski  *****************************************************************************/
14378ee8d1cSJulian Grajkowski #define SAL_FOR_EACH_STATE(list, type, device, function, state_check)          \
14478ee8d1cSJulian Grajkowski 	do {                                                                   \
14578ee8d1cSJulian Grajkowski 		sal_list_t *curr_element = list;                               \
14678ee8d1cSJulian Grajkowski 		typeof(type) *process = NULL;                                  \
14778ee8d1cSJulian Grajkowski 		while (NULL != curr_element) {                                 \
14878ee8d1cSJulian Grajkowski 			process =                                              \
14978ee8d1cSJulian Grajkowski 			    (typeof(type) *)SalList_getObject(curr_element);   \
15078ee8d1cSJulian Grajkowski 			if (process->state == state_check) {                   \
15178ee8d1cSJulian Grajkowski 				process->function(device, process);            \
15278ee8d1cSJulian Grajkowski 			} else {                                               \
15378ee8d1cSJulian Grajkowski 				break;                                         \
15478ee8d1cSJulian Grajkowski 			}                                                      \
15578ee8d1cSJulian Grajkowski 			curr_element = SalList_next(curr_element);             \
15678ee8d1cSJulian Grajkowski 		}                                                              \
15778ee8d1cSJulian Grajkowski 	} while (0)
15878ee8d1cSJulian Grajkowski 
15978ee8d1cSJulian Grajkowski /*************************************************************************
16078ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
16178ee8d1cSJulian Grajkowski  * @description
16278ee8d1cSJulian Grajkowski  *      This function is used to initialize an instance of crypto service.
16378ee8d1cSJulian Grajkowski  *   It creates a crypto instance's memory pools. It calls ADF to create
16478ee8d1cSJulian Grajkowski  *   its required transport handles. It calls the sub crypto service init
16578ee8d1cSJulian Grajkowski  *   functions. Resets the stats.
16678ee8d1cSJulian Grajkowski  *
16778ee8d1cSJulian Grajkowski  * @context
16878ee8d1cSJulian Grajkowski  *    This function is called from the SalCtrl_ServiceEventInit function.
16978ee8d1cSJulian Grajkowski  *
17078ee8d1cSJulian Grajkowski  * @assumptions
17178ee8d1cSJulian Grajkowski  *      None
17278ee8d1cSJulian Grajkowski  * @sideEffects
17378ee8d1cSJulian Grajkowski  *      None
17478ee8d1cSJulian Grajkowski  * @reentrant
17578ee8d1cSJulian Grajkowski  *      No
17678ee8d1cSJulian Grajkowski  * @threadSafe
17778ee8d1cSJulian Grajkowski  *      No (ADF ensures that this function doesn't need to be thread safe)
17878ee8d1cSJulian Grajkowski  *
17978ee8d1cSJulian Grajkowski  * @param[in] device    An icp_accel_dev_t* type
18078ee8d1cSJulian Grajkowski  * @param[in] service   A crypto instance
18178ee8d1cSJulian Grajkowski  *
18278ee8d1cSJulian Grajkowski  *************************************************************************/
18378ee8d1cSJulian Grajkowski CpaStatus SalCtrl_CryptoInit(icp_accel_dev_t *device, sal_service_t *service);
18478ee8d1cSJulian Grajkowski 
18578ee8d1cSJulian Grajkowski /*************************************************************************
18678ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
18778ee8d1cSJulian Grajkowski  * @description
18878ee8d1cSJulian Grajkowski  *      This function is used to start an instance of crypto service.
18978ee8d1cSJulian Grajkowski  *  It sends the first messages to FW on its crypto instance transport
19078ee8d1cSJulian Grajkowski  *  handles. For asymmetric crypto it verifies the header on the downloaded
19178ee8d1cSJulian Grajkowski  *  MMP library.
19278ee8d1cSJulian Grajkowski  *
19378ee8d1cSJulian Grajkowski  * @context
19478ee8d1cSJulian Grajkowski  *    This function is called from the SalCtrl_ServiceEventStart function.
19578ee8d1cSJulian Grajkowski  *
19678ee8d1cSJulian Grajkowski  * @assumptions
19778ee8d1cSJulian Grajkowski  *      None
19878ee8d1cSJulian Grajkowski  * @sideEffects
19978ee8d1cSJulian Grajkowski  *      None
20078ee8d1cSJulian Grajkowski  * @reentrant
20178ee8d1cSJulian Grajkowski  *      No
20278ee8d1cSJulian Grajkowski  * @threadSafe
20378ee8d1cSJulian Grajkowski  *      No (ADF ensures that this function doesn't need to be thread safe)
20478ee8d1cSJulian Grajkowski  *
20578ee8d1cSJulian Grajkowski  * @param[in] device    An icp_accel_dev_t* type
20678ee8d1cSJulian Grajkowski  * @param[in] service   A crypto instance
20778ee8d1cSJulian Grajkowski  *
20878ee8d1cSJulian Grajkowski  *************************************************************************/
20978ee8d1cSJulian Grajkowski CpaStatus SalCtrl_CryptoStart(icp_accel_dev_t *device, sal_service_t *service);
21078ee8d1cSJulian Grajkowski 
21178ee8d1cSJulian Grajkowski /*************************************************************************
21278ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
21378ee8d1cSJulian Grajkowski  * @description
21478ee8d1cSJulian Grajkowski  *      This function is used to stop an instance of crypto service.
21578ee8d1cSJulian Grajkowski  *  It checks for inflight messages to the FW. If no messages are pending
21678ee8d1cSJulian Grajkowski  * it returns success. If messages are pending it returns retry.
21778ee8d1cSJulian Grajkowski  *
21878ee8d1cSJulian Grajkowski  * @context
21978ee8d1cSJulian Grajkowski  *    This function is called from the SalCtrl_ServiceEventStop function.
22078ee8d1cSJulian Grajkowski  *
22178ee8d1cSJulian Grajkowski  * @assumptions
22278ee8d1cSJulian Grajkowski  *      None
22378ee8d1cSJulian Grajkowski  * @sideEffects
22478ee8d1cSJulian Grajkowski  *      None
22578ee8d1cSJulian Grajkowski  * @reentrant
22678ee8d1cSJulian Grajkowski  *      No
22778ee8d1cSJulian Grajkowski  * @threadSafe
22878ee8d1cSJulian Grajkowski  *      No (ADF ensures that this function doesn't need to be thread safe)
22978ee8d1cSJulian Grajkowski  *
23078ee8d1cSJulian Grajkowski  * @param[in] device    An icp_accel_dev_t* type
23178ee8d1cSJulian Grajkowski  * @param[in] service   A crypto instance
23278ee8d1cSJulian Grajkowski  *
23378ee8d1cSJulian Grajkowski  *************************************************************************/
23478ee8d1cSJulian Grajkowski CpaStatus SalCtrl_CryptoStop(icp_accel_dev_t *device, sal_service_t *service);
23578ee8d1cSJulian Grajkowski 
23678ee8d1cSJulian Grajkowski /*************************************************************************
23778ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
23878ee8d1cSJulian Grajkowski  * @description
23978ee8d1cSJulian Grajkowski  *      This function is used to shutdown an instance of crypto service.
24078ee8d1cSJulian Grajkowski  *  It frees resources allocated at initialisation - e.g. frees the
24178ee8d1cSJulian Grajkowski  *  memory pools and ADF transport handles.
24278ee8d1cSJulian Grajkowski  *
24378ee8d1cSJulian Grajkowski  * @context
24478ee8d1cSJulian Grajkowski  *    This function is called from the SalCtrl_ServiceEventShutdown function.
24578ee8d1cSJulian Grajkowski  *
24678ee8d1cSJulian Grajkowski  * @assumptions
24778ee8d1cSJulian Grajkowski  *      None
24878ee8d1cSJulian Grajkowski  * @sideEffects
24978ee8d1cSJulian Grajkowski  *      None
25078ee8d1cSJulian Grajkowski  * @reentrant
25178ee8d1cSJulian Grajkowski  *      No
25278ee8d1cSJulian Grajkowski  * @threadSafe
25378ee8d1cSJulian Grajkowski  *      No (ADF ensures that this function doesn't need to be thread safe)
25478ee8d1cSJulian Grajkowski  *
25578ee8d1cSJulian Grajkowski  * @param[in] device    An icp_accel_dev_t* type
25678ee8d1cSJulian Grajkowski  * @param[in] service   A crypto instance
25778ee8d1cSJulian Grajkowski  *
25878ee8d1cSJulian Grajkowski  *************************************************************************/
25978ee8d1cSJulian Grajkowski CpaStatus SalCtrl_CryptoShutdown(icp_accel_dev_t *device,
26078ee8d1cSJulian Grajkowski 				 sal_service_t *service);
26178ee8d1cSJulian Grajkowski 
26278ee8d1cSJulian Grajkowski /*************************************************************************
26378ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
26478ee8d1cSJulian Grajkowski  * @description
26578ee8d1cSJulian Grajkowski  *      This function sets the capability info of crypto instances.
26678ee8d1cSJulian Grajkowski  *
26778ee8d1cSJulian Grajkowski  * @context
26878ee8d1cSJulian Grajkowski  *    This function is called from the cpaCyQueryCapabilities and
26978ee8d1cSJulian Grajkowski  *    LacSymSession_ParamCheck function.
27078ee8d1cSJulian Grajkowski  *
27178ee8d1cSJulian Grajkowski  * @assumptions
27278ee8d1cSJulian Grajkowski  *      None
27378ee8d1cSJulian Grajkowski  * @sideEffects
27478ee8d1cSJulian Grajkowski  *      None
27578ee8d1cSJulian Grajkowski  * @reentrant
27678ee8d1cSJulian Grajkowski  *      No
27778ee8d1cSJulian Grajkowski  * @threadSafe
27878ee8d1cSJulian Grajkowski  *      No (ADF ensures that this function doesn't need to be thread safe)
27978ee8d1cSJulian Grajkowski  *
28078ee8d1cSJulian Grajkowski  * @param[in] service            A sal_service_t* type
28178ee8d1cSJulian Grajkowski  * @param[in] cyCapabilityInfo   A CpaCyCapabilitiesInfo* type
28278ee8d1cSJulian Grajkowski  *
28378ee8d1cSJulian Grajkowski  *************************************************************************/
28478ee8d1cSJulian Grajkowski void SalCtrl_CyQueryCapabilities(sal_service_t *pGenericService,
28578ee8d1cSJulian Grajkowski 				 CpaCyCapabilitiesInfo *pCapInfo);
28678ee8d1cSJulian Grajkowski 
28778ee8d1cSJulian Grajkowski /*************************************************************************
28878ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
28978ee8d1cSJulian Grajkowski  * @description
29078ee8d1cSJulian Grajkowski  *      This function is used to initialize an instance of compression service.
29178ee8d1cSJulian Grajkowski  *   It creates a compression instance's memory pools. It calls ADF to create
29278ee8d1cSJulian Grajkowski  *   its required transport handles. It zeros an instances stats.
29378ee8d1cSJulian Grajkowski  *
29478ee8d1cSJulian Grajkowski  * @context
29578ee8d1cSJulian Grajkowski  *    This function is called from the SalCtrl_ServiceEventInit function.
29678ee8d1cSJulian Grajkowski  *
29778ee8d1cSJulian Grajkowski  * @assumptions
29878ee8d1cSJulian Grajkowski  *      None
29978ee8d1cSJulian Grajkowski  * @sideEffects
30078ee8d1cSJulian Grajkowski  *      None
30178ee8d1cSJulian Grajkowski  * @reentrant
30278ee8d1cSJulian Grajkowski  *      No
30378ee8d1cSJulian Grajkowski  * @threadSafe
30478ee8d1cSJulian Grajkowski  *      No (ADF ensures that this function doesn't need to be thread safe)
30578ee8d1cSJulian Grajkowski  *
30678ee8d1cSJulian Grajkowski  * @param[in] device    An icp_accel_dev_t* type
30778ee8d1cSJulian Grajkowski  * @param[in] service   A compression instance
30878ee8d1cSJulian Grajkowski  *
30978ee8d1cSJulian Grajkowski  *************************************************************************/
31078ee8d1cSJulian Grajkowski 
31178ee8d1cSJulian Grajkowski CpaStatus SalCtrl_CompressionInit(icp_accel_dev_t *device,
31278ee8d1cSJulian Grajkowski 				  sal_service_t *service);
31378ee8d1cSJulian Grajkowski 
31478ee8d1cSJulian Grajkowski /*************************************************************************
31578ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
31678ee8d1cSJulian Grajkowski  * @description
31778ee8d1cSJulian Grajkowski  *      This function is used to start an instance of compression service.
31878ee8d1cSJulian Grajkowski  *
31978ee8d1cSJulian Grajkowski  * @context
32078ee8d1cSJulian Grajkowski  *    This function is called from the SalCtrl_ServiceEventStart function.
32178ee8d1cSJulian Grajkowski  *
32278ee8d1cSJulian Grajkowski  * @assumptions
32378ee8d1cSJulian Grajkowski  *      None
32478ee8d1cSJulian Grajkowski  * @sideEffects
32578ee8d1cSJulian Grajkowski  *      None
32678ee8d1cSJulian Grajkowski  * @reentrant
32778ee8d1cSJulian Grajkowski  *      No
32878ee8d1cSJulian Grajkowski  * @threadSafe
32978ee8d1cSJulian Grajkowski  *      No (ADF ensures that this function doesn't need to be thread safe)
33078ee8d1cSJulian Grajkowski  *
33178ee8d1cSJulian Grajkowski  * @param[in] device    An icp_accel_dev_t* type
33278ee8d1cSJulian Grajkowski  * @param[in] service   A compression instance
33378ee8d1cSJulian Grajkowski  *
33478ee8d1cSJulian Grajkowski  *************************************************************************/
33578ee8d1cSJulian Grajkowski 
33678ee8d1cSJulian Grajkowski CpaStatus SalCtrl_CompressionStart(icp_accel_dev_t *device,
33778ee8d1cSJulian Grajkowski 				   sal_service_t *service);
33878ee8d1cSJulian Grajkowski 
33978ee8d1cSJulian Grajkowski /*************************************************************************
34078ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
34178ee8d1cSJulian Grajkowski  * @description
34278ee8d1cSJulian Grajkowski  *      This function is used to stop an instance of compression service.
34378ee8d1cSJulian Grajkowski  *  It checks for inflight messages to the FW. If no messages are pending
34478ee8d1cSJulian Grajkowski  * it returns success. If messages are pending it returns retry.
34578ee8d1cSJulian Grajkowski  *
34678ee8d1cSJulian Grajkowski  * @context
34778ee8d1cSJulian Grajkowski  *    This function is called from the SalCtrl_ServiceEventStop function.
34878ee8d1cSJulian Grajkowski  *
34978ee8d1cSJulian Grajkowski  * @assumptions
35078ee8d1cSJulian Grajkowski  *      None
35178ee8d1cSJulian Grajkowski  * @sideEffects
35278ee8d1cSJulian Grajkowski  *      None
35378ee8d1cSJulian Grajkowski  * @reentrant
35478ee8d1cSJulian Grajkowski  *      No
35578ee8d1cSJulian Grajkowski  * @threadSafe
35678ee8d1cSJulian Grajkowski  *      No (ADF ensures that this function doesn't need to be thread safe)
35778ee8d1cSJulian Grajkowski  *
35878ee8d1cSJulian Grajkowski  * @param[in] device    An icp_accel_dev_t* type
35978ee8d1cSJulian Grajkowski  * @param[in] service   A compression instance
36078ee8d1cSJulian Grajkowski  *
36178ee8d1cSJulian Grajkowski  *************************************************************************/
36278ee8d1cSJulian Grajkowski 
36378ee8d1cSJulian Grajkowski CpaStatus SalCtrl_CompressionStop(icp_accel_dev_t *device,
36478ee8d1cSJulian Grajkowski 				  sal_service_t *service);
36578ee8d1cSJulian Grajkowski 
36678ee8d1cSJulian Grajkowski /*************************************************************************
36778ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
36878ee8d1cSJulian Grajkowski  * @description
36978ee8d1cSJulian Grajkowski  *      This function is used to shutdown an instance of compression service.
37078ee8d1cSJulian Grajkowski  *  It frees resources allocated at initialisation - e.g. frees the
37178ee8d1cSJulian Grajkowski  *  memory pools and ADF transport handles.
37278ee8d1cSJulian Grajkowski  *
37378ee8d1cSJulian Grajkowski  * @context
37478ee8d1cSJulian Grajkowski  *    This function is called from the SalCtrl_ServiceEventShutdown function.
37578ee8d1cSJulian Grajkowski  *
37678ee8d1cSJulian Grajkowski  * @assumptions
37778ee8d1cSJulian Grajkowski  *      None
37878ee8d1cSJulian Grajkowski  * @sideEffects
37978ee8d1cSJulian Grajkowski  *      None
38078ee8d1cSJulian Grajkowski  * @reentrant
38178ee8d1cSJulian Grajkowski  *      No
38278ee8d1cSJulian Grajkowski  * @threadSafe
38378ee8d1cSJulian Grajkowski  *      No (ADF ensures that this function doesn't need to be thread safe)
38478ee8d1cSJulian Grajkowski  *
38578ee8d1cSJulian Grajkowski  * @param[in] device    An icp_accel_dev_t* type
38678ee8d1cSJulian Grajkowski  * @param[in] service   A compression instance
38778ee8d1cSJulian Grajkowski  *
38878ee8d1cSJulian Grajkowski  *************************************************************************/
38978ee8d1cSJulian Grajkowski 
39078ee8d1cSJulian Grajkowski CpaStatus SalCtrl_CompressionShutdown(icp_accel_dev_t *device,
39178ee8d1cSJulian Grajkowski 				      sal_service_t *service);
39278ee8d1cSJulian Grajkowski 
39378ee8d1cSJulian Grajkowski /*************************************************************************
39478ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
39578ee8d1cSJulian Grajkowski  * @description
39678ee8d1cSJulian Grajkowski  *    This function is used to get the number of services enabled
39778ee8d1cSJulian Grajkowski  *    from the config table.
39878ee8d1cSJulian Grajkowski  *
39978ee8d1cSJulian Grajkowski  * @context
40078ee8d1cSJulian Grajkowski  *    This function is called from the SalCtrl_QatInit
40178ee8d1cSJulian Grajkowski  *
40278ee8d1cSJulian Grajkowski  * @assumptions
40378ee8d1cSJulian Grajkowski  *      None
40478ee8d1cSJulian Grajkowski  * @sideEffects
40578ee8d1cSJulian Grajkowski  *      None
40678ee8d1cSJulian Grajkowski  * @reentrant
40778ee8d1cSJulian Grajkowski  *      No
40878ee8d1cSJulian Grajkowski  * @threadSafe
40978ee8d1cSJulian Grajkowski  *      No
41078ee8d1cSJulian Grajkowski  *
41178ee8d1cSJulian Grajkowski  * param[in] device            An icp_accel_dev_t* type
41278ee8d1cSJulian Grajkowski  * param[in] pEnabledServices  pointer to a variable used to store
41378ee8d1cSJulian Grajkowski  *                             the enabled services
41478ee8d1cSJulian Grajkowski  *
41578ee8d1cSJulian Grajkowski  *************************************************************************/
41678ee8d1cSJulian Grajkowski 
41778ee8d1cSJulian Grajkowski CpaStatus SalCtrl_GetEnabledServices(icp_accel_dev_t *device,
41878ee8d1cSJulian Grajkowski 				     Cpa32U *pEnabledServices);
41978ee8d1cSJulian Grajkowski 
42078ee8d1cSJulian Grajkowski /*************************************************************************
42178ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
42278ee8d1cSJulian Grajkowski  * @description
42378ee8d1cSJulian Grajkowski  *    This function is used to check if a service is enabled
42478ee8d1cSJulian Grajkowski  *
42578ee8d1cSJulian Grajkowski  * @context
42678ee8d1cSJulian Grajkowski  *    This function is called from the SalCtrl_QatInit
42778ee8d1cSJulian Grajkowski  *
42878ee8d1cSJulian Grajkowski  * @assumptions
42978ee8d1cSJulian Grajkowski  *      None
43078ee8d1cSJulian Grajkowski  * @sideEffects
43178ee8d1cSJulian Grajkowski  *      None
43278ee8d1cSJulian Grajkowski  * @reentrant
43378ee8d1cSJulian Grajkowski  *      No
43478ee8d1cSJulian Grajkowski  * @threadSafe
43578ee8d1cSJulian Grajkowski  *      Yes
43678ee8d1cSJulian Grajkowski  *
43778ee8d1cSJulian Grajkowski  * param[in] enabled_services
43878ee8d1cSJulian Grajkowski  * param[in] service
43978ee8d1cSJulian Grajkowski  *
44078ee8d1cSJulian Grajkowski  *************************************************************************/
44178ee8d1cSJulian Grajkowski 
44278ee8d1cSJulian Grajkowski CpaBoolean SalCtrl_IsServiceEnabled(Cpa32U enabled_services,
44378ee8d1cSJulian Grajkowski 				    sal_service_type_t service);
44478ee8d1cSJulian Grajkowski 
44578ee8d1cSJulian Grajkowski /*************************************************************************
44678ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
44778ee8d1cSJulian Grajkowski  * @description
44878ee8d1cSJulian Grajkowski  *    This function is used to check if a service is supported on the device
44978ee8d1cSJulian Grajkowski  *    The key difference between this and SalCtrl_GetSupportedServices() is
45078ee8d1cSJulian Grajkowski  *    that the latter treats it as an error if the service is unsupported.
45178ee8d1cSJulian Grajkowski  *
45278ee8d1cSJulian Grajkowski  * @context
45378ee8d1cSJulian Grajkowski  *      This can be called anywhere.
45478ee8d1cSJulian Grajkowski  *
45578ee8d1cSJulian Grajkowski  * @assumptions
45678ee8d1cSJulian Grajkowski  *      None
45778ee8d1cSJulian Grajkowski  * @sideEffects
45878ee8d1cSJulian Grajkowski  *      None
45978ee8d1cSJulian Grajkowski  * @reentrant
46078ee8d1cSJulian Grajkowski  *      No
46178ee8d1cSJulian Grajkowski  * @threadSafe
46278ee8d1cSJulian Grajkowski  *      Yes
46378ee8d1cSJulian Grajkowski  *
46478ee8d1cSJulian Grajkowski  * param[in] device
46578ee8d1cSJulian Grajkowski  * param[in] service    service or services to check
46678ee8d1cSJulian Grajkowski  *
46778ee8d1cSJulian Grajkowski  *************************************************************************/
46878ee8d1cSJulian Grajkowski CpaBoolean SalCtrl_IsServiceSupported(icp_accel_dev_t *device,
46978ee8d1cSJulian Grajkowski 				      sal_service_type_t service);
47078ee8d1cSJulian Grajkowski 
47178ee8d1cSJulian Grajkowski /*************************************************************************
47278ee8d1cSJulian Grajkowski  * @ingroup SalCtrl
47378ee8d1cSJulian Grajkowski  * @description
47478ee8d1cSJulian Grajkowski  *    This function is used to check whether enabled services has associated
47578ee8d1cSJulian Grajkowski  *    hardware capability support
47678ee8d1cSJulian Grajkowski  *
47778ee8d1cSJulian Grajkowski  * @context
47878ee8d1cSJulian Grajkowski  *      This functions is called from the SalCtrl_ServiceEventInit function.
47978ee8d1cSJulian Grajkowski  *
48078ee8d1cSJulian Grajkowski  * @assumptions
48178ee8d1cSJulian Grajkowski  *      None
48278ee8d1cSJulian Grajkowski  * @sideEffects
48378ee8d1cSJulian Grajkowski  *      None
48478ee8d1cSJulian Grajkowski  * @reentrant
48578ee8d1cSJulian Grajkowski  *      No
48678ee8d1cSJulian Grajkowski  * @threadSafe
48778ee8d1cSJulian Grajkowski  *      Yes
48878ee8d1cSJulian Grajkowski  *
48978ee8d1cSJulian Grajkowski  * param[in] device              A pointer to an icp_accel_dev_t
49078ee8d1cSJulian Grajkowski  * param[in] enabled_services    It is the bitmask for the enabled services
49178ee8d1cSJulian Grajkowski  *************************************************************************/
49278ee8d1cSJulian Grajkowski 
49378ee8d1cSJulian Grajkowski CpaStatus SalCtrl_GetSupportedServices(icp_accel_dev_t *device,
49478ee8d1cSJulian Grajkowski 				       Cpa32U enabled_services);
49578ee8d1cSJulian Grajkowski 
49678ee8d1cSJulian Grajkowski #endif
497