xref: /freebsd/sys/dev/qat/qat_api/include/cpa.h (revision 2542189532b3025577fa4e782904494f3587008b)
1*25421895SHareshx Sankar Raj /* SPDX-License-Identifier: BSD-3-Clause */
2*25421895SHareshx Sankar Raj /* Copyright(c) 2007-2025 Intel Corporation */
378ee8d1cSJulian Grajkowski 
478ee8d1cSJulian Grajkowski /*
578ee8d1cSJulian Grajkowski  *****************************************************************************
678ee8d1cSJulian Grajkowski  * Doxygen group definitions
778ee8d1cSJulian Grajkowski  ****************************************************************************/
878ee8d1cSJulian Grajkowski 
978ee8d1cSJulian Grajkowski /**
1078ee8d1cSJulian Grajkowski  *****************************************************************************
1178ee8d1cSJulian Grajkowski  * @file cpa.h
1278ee8d1cSJulian Grajkowski  *
1378ee8d1cSJulian Grajkowski  * @defgroup cpa CPA API
1478ee8d1cSJulian Grajkowski  *
1578ee8d1cSJulian Grajkowski  * @description
1678ee8d1cSJulian Grajkowski  *      This is the top level API definition for Intel(R) QuickAssist Technology.
1778ee8d1cSJulian Grajkowski  *		It contains structures, data types and definitions that are common
1878ee8d1cSJulian Grajkowski  *		across the interface.
1978ee8d1cSJulian Grajkowski  *
2078ee8d1cSJulian Grajkowski  *****************************************************************************/
2178ee8d1cSJulian Grajkowski 
2278ee8d1cSJulian Grajkowski /**
2378ee8d1cSJulian Grajkowski  *****************************************************************************
2478ee8d1cSJulian Grajkowski  * @defgroup cpa_BaseDataTypes Base Data Types
2578ee8d1cSJulian Grajkowski  * @file cpa.h
2678ee8d1cSJulian Grajkowski  *
2778ee8d1cSJulian Grajkowski  * @ingroup cpa
2878ee8d1cSJulian Grajkowski  *
2978ee8d1cSJulian Grajkowski  * @description
3078ee8d1cSJulian Grajkowski  *      The base data types for the Intel CPA API.
3178ee8d1cSJulian Grajkowski  *
3278ee8d1cSJulian Grajkowski  *****************************************************************************/
3378ee8d1cSJulian Grajkowski 
3478ee8d1cSJulian Grajkowski #ifndef CPA_H
3578ee8d1cSJulian Grajkowski #define CPA_H
3678ee8d1cSJulian Grajkowski 
3778ee8d1cSJulian Grajkowski #ifdef __cplusplus
3878ee8d1cSJulian Grajkowski extern "C" {
3978ee8d1cSJulian Grajkowski #endif
4078ee8d1cSJulian Grajkowski 
4178ee8d1cSJulian Grajkowski #include "cpa_types.h"
4278ee8d1cSJulian Grajkowski 
4378ee8d1cSJulian Grajkowski /**
4478ee8d1cSJulian Grajkowski  *****************************************************************************
4578ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
4678ee8d1cSJulian Grajkowski  *      Instance handle type.
4778ee8d1cSJulian Grajkowski  *
4878ee8d1cSJulian Grajkowski  * @description
4978ee8d1cSJulian Grajkowski  *      Handle used to uniquely identify an instance.
5078ee8d1cSJulian Grajkowski  *
5178ee8d1cSJulian Grajkowski  * @note
5278ee8d1cSJulian Grajkowski  *      Where only a single instantiation exists this field may be set to
5378ee8d1cSJulian Grajkowski  *      @ref CPA_INSTANCE_HANDLE_SINGLE.
5478ee8d1cSJulian Grajkowski  *
5578ee8d1cSJulian Grajkowski  *****************************************************************************/
5678ee8d1cSJulian Grajkowski typedef void * CpaInstanceHandle;
5778ee8d1cSJulian Grajkowski 
5878ee8d1cSJulian Grajkowski /**
5978ee8d1cSJulian Grajkowski  *****************************************************************************
6078ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
6178ee8d1cSJulian Grajkowski  *      Default instantiation handle value where there is only a single instance
6278ee8d1cSJulian Grajkowski  *
6378ee8d1cSJulian Grajkowski  * @description
6478ee8d1cSJulian Grajkowski  *      Used as an instance handle value where only one instance exists.
6578ee8d1cSJulian Grajkowski  *
6678ee8d1cSJulian Grajkowski  *****************************************************************************/
6778ee8d1cSJulian Grajkowski #define CPA_INSTANCE_HANDLE_SINGLE ((CpaInstanceHandle)0)
6878ee8d1cSJulian Grajkowski 
6978ee8d1cSJulian Grajkowski /**
7078ee8d1cSJulian Grajkowski  *****************************************************************************
7178ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
7278ee8d1cSJulian Grajkowski  *      Physical memory address.
7378ee8d1cSJulian Grajkowski  * @description
7478ee8d1cSJulian Grajkowski  *      Type for physical memory addresses.
7578ee8d1cSJulian Grajkowski  *****************************************************************************/
7678ee8d1cSJulian Grajkowski typedef Cpa64U CpaPhysicalAddr;
7778ee8d1cSJulian Grajkowski 
7878ee8d1cSJulian Grajkowski /**
7978ee8d1cSJulian Grajkowski  *****************************************************************************
8078ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
8178ee8d1cSJulian Grajkowski  *      Virtual to physical address conversion routine.
8278ee8d1cSJulian Grajkowski  *
8378ee8d1cSJulian Grajkowski  * @description
8478ee8d1cSJulian Grajkowski  *      This function is used to convert virtual addresses to physical
8578ee8d1cSJulian Grajkowski  *      addresses.
8678ee8d1cSJulian Grajkowski  *
8778ee8d1cSJulian Grajkowski  * @context
8878ee8d1cSJulian Grajkowski  *      The function shall not be called in an interrupt context.
8978ee8d1cSJulian Grajkowski  * @assumptions
9078ee8d1cSJulian Grajkowski  *      None
9178ee8d1cSJulian Grajkowski  * @sideEffects
9278ee8d1cSJulian Grajkowski  *      None
9378ee8d1cSJulian Grajkowski  * @blocking
9478ee8d1cSJulian Grajkowski  *      This function is synchronous and blocking.
9578ee8d1cSJulian Grajkowski  * @reentrant
9678ee8d1cSJulian Grajkowski  *      No
9778ee8d1cSJulian Grajkowski  * @threadSafe
9878ee8d1cSJulian Grajkowski  *      Yes
9978ee8d1cSJulian Grajkowski  *
10078ee8d1cSJulian Grajkowski  * @param[in] pVirtualAddr           Virtual address to be converted.
10178ee8d1cSJulian Grajkowski  *
10278ee8d1cSJulian Grajkowski  * @return
10378ee8d1cSJulian Grajkowski  * 		Returns the corresponding physical address.
10478ee8d1cSJulian Grajkowski  *      On error, the value NULL is returned.
10578ee8d1cSJulian Grajkowski  *
10678ee8d1cSJulian Grajkowski  * @post
10778ee8d1cSJulian Grajkowski  *      None
10878ee8d1cSJulian Grajkowski  * @see
10978ee8d1cSJulian Grajkowski  *      None
11078ee8d1cSJulian Grajkowski  *
11178ee8d1cSJulian Grajkowski  *****************************************************************************/
11278ee8d1cSJulian Grajkowski typedef CpaPhysicalAddr (*CpaVirtualToPhysical)(void * pVirtualAddr);
11378ee8d1cSJulian Grajkowski 
11478ee8d1cSJulian Grajkowski 
11578ee8d1cSJulian Grajkowski /**
11678ee8d1cSJulian Grajkowski  *****************************************************************************
11778ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
11878ee8d1cSJulian Grajkowski  *      Flat buffer structure containing a pointer and length member.
11978ee8d1cSJulian Grajkowski  *
12078ee8d1cSJulian Grajkowski  * @description
12178ee8d1cSJulian Grajkowski  *      A flat buffer structure. The data pointer, pData, is a virtual address.
12278ee8d1cSJulian Grajkowski  *      An API instance may require the actual data to be in contiguous
12378ee8d1cSJulian Grajkowski  *      physical memory as determined by @ref CpaInstanceInfo2.
12478ee8d1cSJulian Grajkowski  *
12578ee8d1cSJulian Grajkowski  *****************************************************************************/
12678ee8d1cSJulian Grajkowski typedef struct _CpaFlatBuffer {
12778ee8d1cSJulian Grajkowski     Cpa32U dataLenInBytes;
12878ee8d1cSJulian Grajkowski     /**< Data length specified in bytes.
12978ee8d1cSJulian Grajkowski      * When used as an input parameter to a function, the length specifies
13078ee8d1cSJulian Grajkowski      * the current length of the buffer.
13178ee8d1cSJulian Grajkowski      * When used as an output parameter to a function, the length passed in
13278ee8d1cSJulian Grajkowski      * specifies the maximum length of the buffer on return (i.e. the allocated
13378ee8d1cSJulian Grajkowski      * length).  The implementation will not write past this length.  On return,
13478ee8d1cSJulian Grajkowski      * the length is always unchanged. */
13578ee8d1cSJulian Grajkowski   Cpa8U *pData;
13678ee8d1cSJulian Grajkowski     /**< The data pointer is a virtual address, however the actual data pointed
13778ee8d1cSJulian Grajkowski      * to is required to be in contiguous physical memory unless the field
13878ee8d1cSJulian Grajkowski      requiresPhysicallyContiguousMemory in CpaInstanceInfo2 is false. */
13978ee8d1cSJulian Grajkowski } CpaFlatBuffer;
14078ee8d1cSJulian Grajkowski 
14178ee8d1cSJulian Grajkowski /**
14278ee8d1cSJulian Grajkowski  *****************************************************************************
14378ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
14478ee8d1cSJulian Grajkowski  *      Scatter/Gather buffer list containing an array of flat buffers.
14578ee8d1cSJulian Grajkowski  *
14678ee8d1cSJulian Grajkowski  * @description
14778ee8d1cSJulian Grajkowski  *      A scatter/gather buffer list structure.  This buffer structure is
14878ee8d1cSJulian Grajkowski  *      typically used to represent a region of memory which is not
14978ee8d1cSJulian Grajkowski  *      physically contiguous, by describing it as a collection of
15078ee8d1cSJulian Grajkowski  *      buffers, each of which is physically contiguous.
15178ee8d1cSJulian Grajkowski  *
15278ee8d1cSJulian Grajkowski  * @note
15378ee8d1cSJulian Grajkowski  *      The memory for the pPrivateMetaData member must be allocated
15478ee8d1cSJulian Grajkowski  *      by the client as physically contiguous memory.  When allocating
15578ee8d1cSJulian Grajkowski  *      memory for pPrivateMetaData, a call to the corresponding
15678ee8d1cSJulian Grajkowski  *      BufferListGetMetaSize function (e.g. cpaCyBufferListGetMetaSize)
15778ee8d1cSJulian Grajkowski  *      MUST be made to determine the size of the Meta Data Buffer.  The
15878ee8d1cSJulian Grajkowski  *      returned size (in bytes) may then be passed in a memory allocation
15978ee8d1cSJulian Grajkowski  *      routine to allocate the pPrivateMetaData memory.
16078ee8d1cSJulian Grajkowski  *****************************************************************************/
16178ee8d1cSJulian Grajkowski typedef struct _CpaBufferList {
16278ee8d1cSJulian Grajkowski     Cpa32U numBuffers;
16378ee8d1cSJulian Grajkowski     /**< Number of buffers in the list */
16478ee8d1cSJulian Grajkowski     CpaFlatBuffer *pBuffers;
16578ee8d1cSJulian Grajkowski     /**< Pointer to an unbounded array containing the number of CpaFlatBuffers
16678ee8d1cSJulian Grajkowski      * defined by numBuffers
16778ee8d1cSJulian Grajkowski      */
16878ee8d1cSJulian Grajkowski     void *pUserData;
16978ee8d1cSJulian Grajkowski     /**< This is an opaque field that is not read or modified internally. */
17078ee8d1cSJulian Grajkowski     void *pPrivateMetaData;
17178ee8d1cSJulian Grajkowski     /**< Private representation of this buffer list.  The memory for this
17278ee8d1cSJulian Grajkowski      * buffer needs to be allocated by the client as contiguous data.
17378ee8d1cSJulian Grajkowski      * The amount of memory required is returned with a call to
17478ee8d1cSJulian Grajkowski      * the corresponding BufferListGetMetaSize function. If that function
17578ee8d1cSJulian Grajkowski      * returns a size of zero then no memory needs to be allocated, and this
17678ee8d1cSJulian Grajkowski      * parameter can be NULL.
17778ee8d1cSJulian Grajkowski      */
17878ee8d1cSJulian Grajkowski } CpaBufferList;
17978ee8d1cSJulian Grajkowski 
18078ee8d1cSJulian Grajkowski /**
18178ee8d1cSJulian Grajkowski  *****************************************************************************
18278ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
18378ee8d1cSJulian Grajkowski  *      Flat buffer structure with physical address.
18478ee8d1cSJulian Grajkowski  *
18578ee8d1cSJulian Grajkowski  * @description
18678ee8d1cSJulian Grajkowski  *      Functions taking this structure do not need to do any virtual to
18778ee8d1cSJulian Grajkowski  *      physical address translation before writing the buffer to hardware.
18878ee8d1cSJulian Grajkowski  *****************************************************************************/
18978ee8d1cSJulian Grajkowski typedef struct _CpaPhysFlatBuffer {
19078ee8d1cSJulian Grajkowski     Cpa32U dataLenInBytes;
19178ee8d1cSJulian Grajkowski     /**< Data length specified in bytes.
19278ee8d1cSJulian Grajkowski      * When used as an input parameter to a function, the length specifies
19378ee8d1cSJulian Grajkowski      * the current length of the buffer.
19478ee8d1cSJulian Grajkowski      * When used as an output parameter to a function, the length passed in
19578ee8d1cSJulian Grajkowski      * specifies the maximum length of the buffer on return (i.e. the allocated
19678ee8d1cSJulian Grajkowski      * length).  The implementation will not write past this length.  On return,
19778ee8d1cSJulian Grajkowski      * the length is always unchanged.
19878ee8d1cSJulian Grajkowski      */
19978ee8d1cSJulian Grajkowski     Cpa32U reserved;
20078ee8d1cSJulian Grajkowski     /**< Reserved for alignment */
20178ee8d1cSJulian Grajkowski     CpaPhysicalAddr bufferPhysAddr;
20278ee8d1cSJulian Grajkowski     /**< The physical address at which the data resides.  The data pointed
20378ee8d1cSJulian Grajkowski      * to is required to be in contiguous physical memory.
20478ee8d1cSJulian Grajkowski      */
20578ee8d1cSJulian Grajkowski } CpaPhysFlatBuffer;
20678ee8d1cSJulian Grajkowski 
20778ee8d1cSJulian Grajkowski /**
20878ee8d1cSJulian Grajkowski  *****************************************************************************
20978ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
21078ee8d1cSJulian Grajkowski  *      Scatter/gather list containing an array of flat buffers with
21178ee8d1cSJulian Grajkowski  *      physical addresses.
21278ee8d1cSJulian Grajkowski  *
21378ee8d1cSJulian Grajkowski  * @description
21478ee8d1cSJulian Grajkowski  *      Similar to @ref CpaBufferList, this buffer structure is typically
21578ee8d1cSJulian Grajkowski  *      used to represent a region of memory which is not physically
21678ee8d1cSJulian Grajkowski  *      contiguous, by describing it as a collection of buffers, each of
21778ee8d1cSJulian Grajkowski  *      which is physically contiguous.  The difference is that, in this
21878ee8d1cSJulian Grajkowski  *      case, the individual "flat" buffers are represented using
21978ee8d1cSJulian Grajkowski  *      physical, rather than virtual, addresses.
22078ee8d1cSJulian Grajkowski  *****************************************************************************/
22178ee8d1cSJulian Grajkowski typedef struct _CpaPhysBufferList {
22278ee8d1cSJulian Grajkowski     Cpa64U reserved0;
22378ee8d1cSJulian Grajkowski     /**< Reserved for internal usage */
22478ee8d1cSJulian Grajkowski     Cpa32U numBuffers;
22578ee8d1cSJulian Grajkowski     /**< Number of buffers in the list */
22678ee8d1cSJulian Grajkowski     Cpa32U reserved1;
22778ee8d1cSJulian Grajkowski     /**< Reserved for alignment */
22878ee8d1cSJulian Grajkowski     CpaPhysFlatBuffer flatBuffers[];
22978ee8d1cSJulian Grajkowski     /**< Array of flat buffer structures, of size numBuffers */
23078ee8d1cSJulian Grajkowski } CpaPhysBufferList;
23178ee8d1cSJulian Grajkowski 
23278ee8d1cSJulian Grajkowski 
23378ee8d1cSJulian Grajkowski /**
23478ee8d1cSJulian Grajkowski  *****************************************************************************
23578ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
23678ee8d1cSJulian Grajkowski  *      Special value which can be taken by length fields on some of the
23778ee8d1cSJulian Grajkowski  *      "data plane" APIs to indicate that the buffer in question is of
23878ee8d1cSJulian Grajkowski  *      type CpaPhysBufferList, rather than simply an array of bytes.
23978ee8d1cSJulian Grajkowski  ****************************************************************************/
24078ee8d1cSJulian Grajkowski #define CPA_DP_BUFLIST ((Cpa32U)0xFFFFFFFF)
24178ee8d1cSJulian Grajkowski 
24278ee8d1cSJulian Grajkowski 
24378ee8d1cSJulian Grajkowski /**
24478ee8d1cSJulian Grajkowski  *****************************************************************************
24578ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
24678ee8d1cSJulian Grajkowski  *      API status value type definition
24778ee8d1cSJulian Grajkowski  *
24878ee8d1cSJulian Grajkowski  * @description
24978ee8d1cSJulian Grajkowski  *      This type definition is used for the return values used in all the
25078ee8d1cSJulian Grajkowski  *      API functions.  Common values are defined, for example see
25178ee8d1cSJulian Grajkowski  *      @ref CPA_STATUS_SUCCESS, @ref CPA_STATUS_FAIL, etc.
25278ee8d1cSJulian Grajkowski  *****************************************************************************/
25378ee8d1cSJulian Grajkowski typedef Cpa32S CpaStatus;
25478ee8d1cSJulian Grajkowski 
25578ee8d1cSJulian Grajkowski #define CPA_STATUS_SUCCESS (0)
25678ee8d1cSJulian Grajkowski /**<
25778ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
25878ee8d1cSJulian Grajkowski  *   Success status value. */
25978ee8d1cSJulian Grajkowski #define CPA_STATUS_FAIL (-1)
26078ee8d1cSJulian Grajkowski /**<
26178ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
26278ee8d1cSJulian Grajkowski  *   Fail status value. */
26378ee8d1cSJulian Grajkowski #define CPA_STATUS_RETRY (-2)
26478ee8d1cSJulian Grajkowski /**<
26578ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
26678ee8d1cSJulian Grajkowski  *  Retry status value. */
26778ee8d1cSJulian Grajkowski #define CPA_STATUS_RESOURCE (-3)
26878ee8d1cSJulian Grajkowski /**<
26978ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
27078ee8d1cSJulian Grajkowski  *  The resource that has been requested is unavailable. Refer
27178ee8d1cSJulian Grajkowski  *  to relevant sections of the API for specifics on what the suggested
27278ee8d1cSJulian Grajkowski  *  course of action is. */
27378ee8d1cSJulian Grajkowski #define CPA_STATUS_INVALID_PARAM (-4)
27478ee8d1cSJulian Grajkowski /**<
27578ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
27678ee8d1cSJulian Grajkowski  *  Invalid parameter has been passed in. */
27778ee8d1cSJulian Grajkowski #define CPA_STATUS_FATAL (-5)
27878ee8d1cSJulian Grajkowski /**<
27978ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
28078ee8d1cSJulian Grajkowski  *  A serious error has occurred. Recommended course of action
28178ee8d1cSJulian Grajkowski  *  is to shutdown and restart the component. */
28278ee8d1cSJulian Grajkowski #define CPA_STATUS_UNSUPPORTED (-6)
28378ee8d1cSJulian Grajkowski /**<
28478ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
28578ee8d1cSJulian Grajkowski  *  The function is not supported, at least not with the specific
28678ee8d1cSJulian Grajkowski  *  parameters supplied.  This may be because a particular
28778ee8d1cSJulian Grajkowski  *  capability is not supported by the current implementation. */
28878ee8d1cSJulian Grajkowski #define CPA_STATUS_RESTARTING (-7)
28978ee8d1cSJulian Grajkowski /**<
29078ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
29178ee8d1cSJulian Grajkowski  *  The API implementation is restarting. This may be reported if, for example,
29278ee8d1cSJulian Grajkowski  *  a hardware implementation is undergoing a reset. Recommended course of
29378ee8d1cSJulian Grajkowski  *  action is to retry the request. */
29478ee8d1cSJulian Grajkowski 
29578ee8d1cSJulian Grajkowski /**
29678ee8d1cSJulian Grajkowski  *****************************************************************************
29778ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
29878ee8d1cSJulian Grajkowski  *      API status string type definition
29978ee8d1cSJulian Grajkowski  * @description
30078ee8d1cSJulian Grajkowski  *      This type definition is used for the generic status text strings
30178ee8d1cSJulian Grajkowski  *      provided by cpaXxGetStatusText API functions.  Common values are
30278ee8d1cSJulian Grajkowski  *      defined, for example see @ref CPA_STATUS_STR_SUCCESS,
30378ee8d1cSJulian Grajkowski  *      @ref CPA_STATUS_FAIL, etc., as well as the maximum size
30478ee8d1cSJulian Grajkowski  *      @ref CPA_STATUS_MAX_STR_LENGTH_IN_BYTES.
30578ee8d1cSJulian Grajkowski  *****************************************************************************/
30678ee8d1cSJulian Grajkowski #define CPA_STATUS_MAX_STR_LENGTH_IN_BYTES (255)
30778ee8d1cSJulian Grajkowski /**<
30878ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
30978ee8d1cSJulian Grajkowski  *   Maximum length of the Overall Status String (including generic and specific
31078ee8d1cSJulian Grajkowski  *   strings returned by calls to cpaXxGetStatusText) */
31178ee8d1cSJulian Grajkowski 
31278ee8d1cSJulian Grajkowski #define CPA_STATUS_STR_SUCCESS       ("Operation was successful:")
31378ee8d1cSJulian Grajkowski /**<
31478ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
31578ee8d1cSJulian Grajkowski  *   Status string for @ref CPA_STATUS_SUCCESS. */
31678ee8d1cSJulian Grajkowski #define CPA_STATUS_STR_FAIL          ("General or unspecified error occurred:")
31778ee8d1cSJulian Grajkowski /**<
31878ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
31978ee8d1cSJulian Grajkowski  *   Status string for @ref CPA_STATUS_FAIL. */
32078ee8d1cSJulian Grajkowski #define CPA_STATUS_STR_RETRY         ("Recoverable error occurred:")
32178ee8d1cSJulian Grajkowski /**<
32278ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
32378ee8d1cSJulian Grajkowski  *   Status string for @ref CPA_STATUS_RETRY. */
32478ee8d1cSJulian Grajkowski #define CPA_STATUS_STR_RESOURCE      ("Required resource unavailable:")
32578ee8d1cSJulian Grajkowski /**<
32678ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
32778ee8d1cSJulian Grajkowski  *   Status string for @ref CPA_STATUS_RESOURCE. */
32878ee8d1cSJulian Grajkowski #define CPA_STATUS_STR_INVALID_PARAM ("Invalid parameter supplied:")
32978ee8d1cSJulian Grajkowski /**<
33078ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
33178ee8d1cSJulian Grajkowski  *   Status string for @ref CPA_STATUS_INVALID_PARAM. */
33278ee8d1cSJulian Grajkowski #define CPA_STATUS_STR_FATAL         ("Fatal error has occurred:")
33378ee8d1cSJulian Grajkowski /**<
33478ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
33578ee8d1cSJulian Grajkowski  *   Status string for @ref CPA_STATUS_FATAL. */
33678ee8d1cSJulian Grajkowski #define CPA_STATUS_STR_UNSUPPORTED   ("Operation not supported:")
33778ee8d1cSJulian Grajkowski /**<
33878ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
33978ee8d1cSJulian Grajkowski  *   Status string for @ref CPA_STATUS_UNSUPPORTED. */
34078ee8d1cSJulian Grajkowski 
34178ee8d1cSJulian Grajkowski /**
34278ee8d1cSJulian Grajkowski  *****************************************************************************
34378ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
34478ee8d1cSJulian Grajkowski  *      Instance Types
34578ee8d1cSJulian Grajkowski  *
34678ee8d1cSJulian Grajkowski  * @deprecated
34778ee8d1cSJulian Grajkowski  * 		As of v1.3 of the Crypto API, this enum has been deprecated,
34878ee8d1cSJulian Grajkowski  * 		replaced by @ref CpaAccelerationServiceType.
34978ee8d1cSJulian Grajkowski  *
35078ee8d1cSJulian Grajkowski  * @description
35178ee8d1cSJulian Grajkowski  *      Enumeration of the different instance types.
35278ee8d1cSJulian Grajkowski  *
35378ee8d1cSJulian Grajkowski  *****************************************************************************/
35478ee8d1cSJulian Grajkowski typedef enum _CpaInstanceType
35578ee8d1cSJulian Grajkowski {
35678ee8d1cSJulian Grajkowski     CPA_INSTANCE_TYPE_CRYPTO = 0,
35778ee8d1cSJulian Grajkowski     /**< Cryptographic instance type */
35878ee8d1cSJulian Grajkowski     CPA_INSTANCE_TYPE_DATA_COMPRESSION,
35978ee8d1cSJulian Grajkowski     /**< Data compression instance type */
36078ee8d1cSJulian Grajkowski     CPA_INSTANCE_TYPE_RAID,
36178ee8d1cSJulian Grajkowski     /**< RAID instance type */
36278ee8d1cSJulian Grajkowski     CPA_INSTANCE_TYPE_XML,
36378ee8d1cSJulian Grajkowski     /**< XML instance type */
36478ee8d1cSJulian Grajkowski     CPA_INSTANCE_TYPE_REGEX
36578ee8d1cSJulian Grajkowski     /**< Regular Expression instance type */
36678ee8d1cSJulian Grajkowski } CpaInstanceType CPA_DEPRECATED;
36778ee8d1cSJulian Grajkowski 
36878ee8d1cSJulian Grajkowski /**
36978ee8d1cSJulian Grajkowski  *****************************************************************************
37078ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
37178ee8d1cSJulian Grajkowski  *      Service Type
37278ee8d1cSJulian Grajkowski  * @description
37378ee8d1cSJulian Grajkowski  *      Enumeration of the different service types.
37478ee8d1cSJulian Grajkowski  *
37578ee8d1cSJulian Grajkowski  *****************************************************************************/
37678ee8d1cSJulian Grajkowski typedef enum _CpaAccelerationServiceType
37778ee8d1cSJulian Grajkowski {
37878ee8d1cSJulian Grajkowski     CPA_ACC_SVC_TYPE_CRYPTO = CPA_INSTANCE_TYPE_CRYPTO,
37978ee8d1cSJulian Grajkowski     /**< Cryptography */
38078ee8d1cSJulian Grajkowski     CPA_ACC_SVC_TYPE_DATA_COMPRESSION = CPA_INSTANCE_TYPE_DATA_COMPRESSION,
38178ee8d1cSJulian Grajkowski     /**< Data Compression */
38278ee8d1cSJulian Grajkowski     CPA_ACC_SVC_TYPE_PATTERN_MATCH = CPA_INSTANCE_TYPE_REGEX,
38378ee8d1cSJulian Grajkowski     /**< Pattern Match */
38478ee8d1cSJulian Grajkowski     CPA_ACC_SVC_TYPE_RAID = CPA_INSTANCE_TYPE_RAID,
38578ee8d1cSJulian Grajkowski     /**< RAID */
38678ee8d1cSJulian Grajkowski     CPA_ACC_SVC_TYPE_XML = CPA_INSTANCE_TYPE_XML,
38778ee8d1cSJulian Grajkowski     /**< XML */
388266b0663SKrzysztof Zdziarski     CPA_ACC_SVC_TYPE_VIDEO_ANALYTICS,
38978ee8d1cSJulian Grajkowski     /**< Video Analytics */
390266b0663SKrzysztof Zdziarski     CPA_ACC_SVC_TYPE_CRYPTO_ASYM,
391266b0663SKrzysztof Zdziarski     /**< Cryptography - Asymmetric service */
392266b0663SKrzysztof Zdziarski     CPA_ACC_SVC_TYPE_CRYPTO_SYM
393266b0663SKrzysztof Zdziarski     /**< Cryptography - Symmetric service */
39478ee8d1cSJulian Grajkowski } CpaAccelerationServiceType;
39578ee8d1cSJulian Grajkowski 
39678ee8d1cSJulian Grajkowski /**
39778ee8d1cSJulian Grajkowski  *****************************************************************************
39878ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
39978ee8d1cSJulian Grajkowski  *      Instance State
40078ee8d1cSJulian Grajkowski  *
40178ee8d1cSJulian Grajkowski  * @deprecated
40278ee8d1cSJulian Grajkowski  *      As of v1.3 of the Crypto API, this enum has been deprecated,
40378ee8d1cSJulian Grajkowski  *      replaced by @ref CpaOperationalState.
40478ee8d1cSJulian Grajkowski  *
40578ee8d1cSJulian Grajkowski  * @description
40678ee8d1cSJulian Grajkowski  *      Enumeration of the different instance states that are possible.
40778ee8d1cSJulian Grajkowski  *
40878ee8d1cSJulian Grajkowski  *****************************************************************************/
40978ee8d1cSJulian Grajkowski typedef enum _CpaInstanceState
41078ee8d1cSJulian Grajkowski {
41178ee8d1cSJulian Grajkowski     CPA_INSTANCE_STATE_INITIALISED = 0,
41278ee8d1cSJulian Grajkowski     /**< Instance is in the initialized state and ready for use. */
41378ee8d1cSJulian Grajkowski     CPA_INSTANCE_STATE_SHUTDOWN
41478ee8d1cSJulian Grajkowski     /**< Instance is in the shutdown state and not available for use. */
41578ee8d1cSJulian Grajkowski } CpaInstanceState CPA_DEPRECATED;
41678ee8d1cSJulian Grajkowski 
41778ee8d1cSJulian Grajkowski /**
41878ee8d1cSJulian Grajkowski  *****************************************************************************
41978ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
42078ee8d1cSJulian Grajkowski  *      Instance operational state
42178ee8d1cSJulian Grajkowski  * @description
42278ee8d1cSJulian Grajkowski  *      Enumeration of the different operational states that are possible.
42378ee8d1cSJulian Grajkowski  *
42478ee8d1cSJulian Grajkowski  *****************************************************************************/
42578ee8d1cSJulian Grajkowski typedef enum _CpaOperationalState
42678ee8d1cSJulian Grajkowski {
42778ee8d1cSJulian Grajkowski     CPA_OPER_STATE_DOWN= 0,
42878ee8d1cSJulian Grajkowski     /**< Instance is not available for use. May not yet be initialized,
42978ee8d1cSJulian Grajkowski      * or stopped. */
43078ee8d1cSJulian Grajkowski     CPA_OPER_STATE_UP
43178ee8d1cSJulian Grajkowski     /**< Instance is available for use. Has been initialized and started. */
43278ee8d1cSJulian Grajkowski } CpaOperationalState;
43378ee8d1cSJulian Grajkowski 
43478ee8d1cSJulian Grajkowski #define CPA_INSTANCE_MAX_NAME_SIZE_IN_BYTES 64
43578ee8d1cSJulian Grajkowski /**<
43678ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
43778ee8d1cSJulian Grajkowski  *  Maximum instance info name string length in bytes */
43878ee8d1cSJulian Grajkowski #define CPA_INSTANCE_MAX_ID_SIZE_IN_BYTES 128
43978ee8d1cSJulian Grajkowski /**<
44078ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
44178ee8d1cSJulian Grajkowski  *  Maximum instance info id string length in bytes */
44278ee8d1cSJulian Grajkowski #define CPA_INSTANCE_MAX_VERSION_SIZE_IN_BYTES 64
44378ee8d1cSJulian Grajkowski /**<
44478ee8d1cSJulian Grajkowski  *  @ingroup cpa_BaseDataTypes
44578ee8d1cSJulian Grajkowski  * Maximum instance info version string length in bytes */
44678ee8d1cSJulian Grajkowski 
44778ee8d1cSJulian Grajkowski /**
44878ee8d1cSJulian Grajkowski  *****************************************************************************
44978ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
45078ee8d1cSJulian Grajkowski  *      Instance Info Structure
45178ee8d1cSJulian Grajkowski  *
45278ee8d1cSJulian Grajkowski  * @deprecated
45378ee8d1cSJulian Grajkowski  * 		As of v1.3 of the Crypto API, this structure has been deprecated,
45478ee8d1cSJulian Grajkowski  * 		replaced by CpaInstanceInfo2.
45578ee8d1cSJulian Grajkowski  *
45678ee8d1cSJulian Grajkowski  * @description
45778ee8d1cSJulian Grajkowski  *      Structure that contains the information to describe the instance.
45878ee8d1cSJulian Grajkowski  *
45978ee8d1cSJulian Grajkowski  *****************************************************************************/
46078ee8d1cSJulian Grajkowski typedef struct _CpaInstanceInfo {
46178ee8d1cSJulian Grajkowski     enum _CpaInstanceType type;
46278ee8d1cSJulian Grajkowski     /**< Type definition for this instance. */
46378ee8d1cSJulian Grajkowski     enum _CpaInstanceState state;
46478ee8d1cSJulian Grajkowski     /**< Operational state of the instance. */
46578ee8d1cSJulian Grajkowski     Cpa8U name[CPA_INSTANCE_MAX_NAME_SIZE_IN_BYTES];
46678ee8d1cSJulian Grajkowski     /**< Simple text string identifier for the instance. */
46778ee8d1cSJulian Grajkowski     Cpa8U version[CPA_INSTANCE_MAX_VERSION_SIZE_IN_BYTES];
46878ee8d1cSJulian Grajkowski     /**< Version string. There may be multiple versions of the same type of
46978ee8d1cSJulian Grajkowski      * instance accessible through a particular library. */
47078ee8d1cSJulian Grajkowski } CpaInstanceInfo CPA_DEPRECATED;
47178ee8d1cSJulian Grajkowski 
47278ee8d1cSJulian Grajkowski /**
47378ee8d1cSJulian Grajkowski  *****************************************************************************
47478ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
47578ee8d1cSJulian Grajkowski  *      Physical Instance ID
47678ee8d1cSJulian Grajkowski  * @description
47778ee8d1cSJulian Grajkowski  *      Identifies the physical instance of an accelerator execution
47878ee8d1cSJulian Grajkowski  *      engine.
47978ee8d1cSJulian Grajkowski  *
48078ee8d1cSJulian Grajkowski  *      Accelerators grouped into "packages".  Each accelerator can in
48178ee8d1cSJulian Grajkowski  *      turn contain one or more execution engines.  Implementations of
48278ee8d1cSJulian Grajkowski  *      this API will define the packageId, acceleratorId,
48378ee8d1cSJulian Grajkowski  *      executionEngineId and busAddress as appropriate for the
48478ee8d1cSJulian Grajkowski  *      implementation.  For example, for hardware-based accelerators,
48578ee8d1cSJulian Grajkowski  *      the packageId might identify the chip, which might contain
48678ee8d1cSJulian Grajkowski  *      multiple accelerators, each of which might contain multiple
48778ee8d1cSJulian Grajkowski  *      execution engines. The combination of packageId, acceleratorId
48878ee8d1cSJulian Grajkowski  *      and executionEngineId uniquely identifies the instance.
48978ee8d1cSJulian Grajkowski  *
49078ee8d1cSJulian Grajkowski  *      Hardware based accelerators implementing this API may also provide
49178ee8d1cSJulian Grajkowski  *      information on the location of the accelerator in the busAddress
49278ee8d1cSJulian Grajkowski  *      field. This field will be defined as appropriate for the
49378ee8d1cSJulian Grajkowski  *      implementation. For example, for PCIe attached accelerators,
49478ee8d1cSJulian Grajkowski  *      the busAddress may contain the PCIe bus, device and function
49578ee8d1cSJulian Grajkowski  *      number of the accelerators.
49678ee8d1cSJulian Grajkowski  *
49778ee8d1cSJulian Grajkowski  *****************************************************************************/
49878ee8d1cSJulian Grajkowski typedef struct _CpaPhysicalInstanceId {
49978ee8d1cSJulian Grajkowski     Cpa16U packageId;
50078ee8d1cSJulian Grajkowski     /**< Identifies the package within which the accelerator is
50178ee8d1cSJulian Grajkowski      * contained. */
50278ee8d1cSJulian Grajkowski     Cpa16U acceleratorId;
50378ee8d1cSJulian Grajkowski     /**< Identifies the specific accelerator within the package. */
50478ee8d1cSJulian Grajkowski     Cpa16U executionEngineId;
50578ee8d1cSJulian Grajkowski     /**< Identifies the specific execution engine within the
50678ee8d1cSJulian Grajkowski      * accelerator. */
50778ee8d1cSJulian Grajkowski     Cpa16U busAddress;
50878ee8d1cSJulian Grajkowski     /**< Identifies the bus address associated with the accelerator
50978ee8d1cSJulian Grajkowski      * execution engine. */
51078ee8d1cSJulian Grajkowski     Cpa32U kptAcHandle;
51178ee8d1cSJulian Grajkowski     /**< Identifies the achandle of the accelerator. */
51278ee8d1cSJulian Grajkowski } CpaPhysicalInstanceId;
51378ee8d1cSJulian Grajkowski 
51478ee8d1cSJulian Grajkowski /**
51578ee8d1cSJulian Grajkowski  *****************************************************************************
51678ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
51778ee8d1cSJulian Grajkowski  *      Instance Info Structure, version 2
51878ee8d1cSJulian Grajkowski  * @description
51978ee8d1cSJulian Grajkowski  *      Structure that contains the information to describe the instance.
52078ee8d1cSJulian Grajkowski  *
52178ee8d1cSJulian Grajkowski  *****************************************************************************/
52278ee8d1cSJulian Grajkowski typedef struct _CpaInstanceInfo2 {
52378ee8d1cSJulian Grajkowski     CpaAccelerationServiceType accelerationServiceType;
52478ee8d1cSJulian Grajkowski     /**< Type of service provided by this instance. */
52578ee8d1cSJulian Grajkowski #define CPA_INST_VENDOR_NAME_SIZE CPA_INSTANCE_MAX_NAME_SIZE_IN_BYTES
52678ee8d1cSJulian Grajkowski     /**< Maximum length of the vendor name. */
52778ee8d1cSJulian Grajkowski     Cpa8U vendorName[CPA_INST_VENDOR_NAME_SIZE];
52878ee8d1cSJulian Grajkowski     /**< String identifying the vendor of the accelerator. */
52978ee8d1cSJulian Grajkowski 
53078ee8d1cSJulian Grajkowski #define CPA_INST_PART_NAME_SIZE CPA_INSTANCE_MAX_NAME_SIZE_IN_BYTES
53178ee8d1cSJulian Grajkowski     /**< Maximum length of the part name. */
53278ee8d1cSJulian Grajkowski     Cpa8U partName[CPA_INST_PART_NAME_SIZE];
53378ee8d1cSJulian Grajkowski     /**< String identifying the part (name and/or number). */
53478ee8d1cSJulian Grajkowski 
53578ee8d1cSJulian Grajkowski #define CPA_INST_SW_VERSION_SIZE CPA_INSTANCE_MAX_VERSION_SIZE_IN_BYTES
53678ee8d1cSJulian Grajkowski     /**< Maximum length of the software version string. */
53778ee8d1cSJulian Grajkowski     Cpa8U swVersion[CPA_INST_SW_VERSION_SIZE];
53878ee8d1cSJulian Grajkowski     /**< String identifying the version of the software associated with
53978ee8d1cSJulian Grajkowski      * the instance.  For hardware-based implementations of the API,
54078ee8d1cSJulian Grajkowski      * this should be the driver version.  For software-based
54178ee8d1cSJulian Grajkowski      * implementations of the API, this should be the version of the
54278ee8d1cSJulian Grajkowski      * library.
54378ee8d1cSJulian Grajkowski      *
54478ee8d1cSJulian Grajkowski      * Note that this should NOT be used to store the version of the
54578ee8d1cSJulian Grajkowski      * API, nor should it be used to report the hardware revision
54678ee8d1cSJulian Grajkowski      * (which can be captured as part of the @ref partName, if required). */
54778ee8d1cSJulian Grajkowski 
54878ee8d1cSJulian Grajkowski #define CPA_INST_NAME_SIZE CPA_INSTANCE_MAX_NAME_SIZE_IN_BYTES
54978ee8d1cSJulian Grajkowski     /**< Maximum length of the instance name. */
55078ee8d1cSJulian Grajkowski     Cpa8U instName[CPA_INST_NAME_SIZE];
55178ee8d1cSJulian Grajkowski     /**< String identifying the name of the instance. */
55278ee8d1cSJulian Grajkowski 
55378ee8d1cSJulian Grajkowski #define CPA_INST_ID_SIZE CPA_INSTANCE_MAX_ID_SIZE_IN_BYTES
55478ee8d1cSJulian Grajkowski     Cpa8U instID[CPA_INST_ID_SIZE];
55578ee8d1cSJulian Grajkowski     /**< String containing a unique identifier for the instance */
55678ee8d1cSJulian Grajkowski 
55778ee8d1cSJulian Grajkowski     CpaPhysicalInstanceId physInstId;
55878ee8d1cSJulian Grajkowski     /**< Identifies the "physical instance" of the accelerator. */
55978ee8d1cSJulian Grajkowski 
560266b0663SKrzysztof Zdziarski #define CPA_MAX_CORES 4096
56178ee8d1cSJulian Grajkowski     /**< Maximum number of cores to support in the coreAffinity bitmap. */
56278ee8d1cSJulian Grajkowski     CPA_BITMAP(coreAffinity, CPA_MAX_CORES);
56378ee8d1cSJulian Grajkowski     /**< A bitmap identifying the core or cores to which the instance
56478ee8d1cSJulian Grajkowski      * is affinitized in an SMP operating system.
56578ee8d1cSJulian Grajkowski      *
56678ee8d1cSJulian Grajkowski      * The term core here is used to mean a "logical" core - for example,
56778ee8d1cSJulian Grajkowski      * in a dual-processor, quad-core system with hyperthreading (two
56878ee8d1cSJulian Grajkowski      * threads per core), there would be 16 such cores (2 processors x
56978ee8d1cSJulian Grajkowski      * 4 cores/processor x 2 threads/core).  The numbering of these cores
57078ee8d1cSJulian Grajkowski      * and the corresponding bit positions is OS-specific.  Note that Linux
57178ee8d1cSJulian Grajkowski      * refers to this as "processor affinity" or "CPU affinity", and refers
57278ee8d1cSJulian Grajkowski      * to the bitmap as a "cpumask".
57378ee8d1cSJulian Grajkowski      *
57478ee8d1cSJulian Grajkowski      * The term "affinity" is used to mean that this is the core on which
57578ee8d1cSJulian Grajkowski      * the callback function will be invoked when using the asynchronous
57678ee8d1cSJulian Grajkowski      * mode of the API.  In a hardware-based implementation of the API,
57778ee8d1cSJulian Grajkowski      * this might be the core to which the interrupt is affinitized.
57878ee8d1cSJulian Grajkowski      * In a software-based implementation, this might be the core to which
57978ee8d1cSJulian Grajkowski      * the process running the algorithm is affinitized.  Where there is
58078ee8d1cSJulian Grajkowski      * no affinity, the bitmap can be set to all zeroes.
58178ee8d1cSJulian Grajkowski      *
58278ee8d1cSJulian Grajkowski      * This bitmap should be manipulated using the macros @ref
58378ee8d1cSJulian Grajkowski      * CPA_BITMAP_BIT_SET, @ref CPA_BITMAP_BIT_CLEAR and @ref
58478ee8d1cSJulian Grajkowski      * CPA_BITMAP_BIT_TEST. */
58578ee8d1cSJulian Grajkowski 
58678ee8d1cSJulian Grajkowski     Cpa32U nodeAffinity;
58778ee8d1cSJulian Grajkowski     /**< Identifies the processor complex, or node, to which the accelerator
58878ee8d1cSJulian Grajkowski      * is physically connected, to help identify locality in NUMA systems.
58978ee8d1cSJulian Grajkowski      *
59078ee8d1cSJulian Grajkowski      * The values taken by this attribute will typically be in the range
59178ee8d1cSJulian Grajkowski      * 0..n-1, where n is the number of nodes (processor complexes) in the
59278ee8d1cSJulian Grajkowski      * system.  For example, in a dual-processor configuration, n=2.  The
59378ee8d1cSJulian Grajkowski      * precise values and their interpretation are OS-specific. */
59478ee8d1cSJulian Grajkowski 
59578ee8d1cSJulian Grajkowski     CpaOperationalState operState;
59678ee8d1cSJulian Grajkowski     /**< Operational state of the instance. */
59778ee8d1cSJulian Grajkowski     CpaBoolean requiresPhysicallyContiguousMemory;
59878ee8d1cSJulian Grajkowski     /**< Specifies whether the data pointed to by flat buffers
59978ee8d1cSJulian Grajkowski      * (CpaFlatBuffer::pData) supplied to this instance must be in
60078ee8d1cSJulian Grajkowski      * physically contiguous memory. */
60178ee8d1cSJulian Grajkowski     CpaBoolean isPolled;
60278ee8d1cSJulian Grajkowski     /**< Specifies whether the instance must be polled, or is event driven.
60378ee8d1cSJulian Grajkowski      * For hardware accelerators, the alternative to polling would be
60478ee8d1cSJulian Grajkowski      * interrupts. */
60578ee8d1cSJulian Grajkowski     CpaBoolean isOffloaded;
60678ee8d1cSJulian Grajkowski     /**< Identifies whether the instance uses hardware offload, or is a
60778ee8d1cSJulian Grajkowski      * software-only implementation. */
60878ee8d1cSJulian Grajkowski } CpaInstanceInfo2;
60978ee8d1cSJulian Grajkowski 
61078ee8d1cSJulian Grajkowski /**
61178ee8d1cSJulian Grajkowski  *****************************************************************************
61278ee8d1cSJulian Grajkowski  * @ingroup cpa_BaseDataTypes
61378ee8d1cSJulian Grajkowski  *      Instance Events
61478ee8d1cSJulian Grajkowski  * @description
61578ee8d1cSJulian Grajkowski  *      Enumeration of the different events that will cause the registered
61678ee8d1cSJulian Grajkowski  *  Instance notification callback function to be invoked.
61778ee8d1cSJulian Grajkowski  *
61878ee8d1cSJulian Grajkowski  *****************************************************************************/
61978ee8d1cSJulian Grajkowski typedef enum _CpaInstanceEvent
62078ee8d1cSJulian Grajkowski {
62178ee8d1cSJulian Grajkowski     CPA_INSTANCE_EVENT_RESTARTING = 0,
62278ee8d1cSJulian Grajkowski     /**< Event type that triggers the registered instance notification callback
62378ee8d1cSJulian Grajkowski      * function when and instance is restarting. The reason why an instance is
62478ee8d1cSJulian Grajkowski      * restarting is implementation specific. For example a hardware
62578ee8d1cSJulian Grajkowski      * implementation may send this event if the hardware device is about to
62678ee8d1cSJulian Grajkowski      * be reset.
62778ee8d1cSJulian Grajkowski      */
62878ee8d1cSJulian Grajkowski     CPA_INSTANCE_EVENT_RESTARTED,
62978ee8d1cSJulian Grajkowski     /**< Event type that triggers the registered instance notification callback
63078ee8d1cSJulian Grajkowski      * function when and instance has restarted. The reason why an instance has
63178ee8d1cSJulian Grajkowski      * restarted is implementation specific. For example a hardware
63278ee8d1cSJulian Grajkowski      * implementation may send this event after the hardware device has
63378ee8d1cSJulian Grajkowski      * been reset.
63478ee8d1cSJulian Grajkowski      */
63578ee8d1cSJulian Grajkowski     CPA_INSTANCE_EVENT_FATAL_ERROR
63678ee8d1cSJulian Grajkowski     /**< Event type that triggers the registered instance notification callback
63778ee8d1cSJulian Grajkowski      * function when an error has been detected that requires the device
63878ee8d1cSJulian Grajkowski      * to be reset.
63978ee8d1cSJulian Grajkowski      * This event will be sent by all instances using the device, both on the
64078ee8d1cSJulian Grajkowski      * host and guests.
64178ee8d1cSJulian Grajkowski      */
64278ee8d1cSJulian Grajkowski } CpaInstanceEvent;
64378ee8d1cSJulian Grajkowski 
644266b0663SKrzysztof Zdziarski /*****************************************************************************/
645266b0663SKrzysztof Zdziarski /* CPA Instance Management Functions                                         */
646266b0663SKrzysztof Zdziarski /*****************************************************************************/
647266b0663SKrzysztof Zdziarski /**
648266b0663SKrzysztof Zdziarski  *****************************************************************************
649266b0663SKrzysztof Zdziarski  * @file cpa.h
650266b0663SKrzysztof Zdziarski  * @ingroup cpa
651266b0663SKrzysztof Zdziarski  *      Get the number of Acceleration Service instances that are supported by
652266b0663SKrzysztof Zdziarski  *      the API implementation.
653266b0663SKrzysztof Zdziarski  *
654266b0663SKrzysztof Zdziarski  * @description
655266b0663SKrzysztof Zdziarski  *     This function will get the number of instances that are supported
656266b0663SKrzysztof Zdziarski  *     for the required Acceleration Service by an implementation of the CPA
657266b0663SKrzysztof Zdziarski  *     API. This number is then used to determine the size of the array that
658266b0663SKrzysztof Zdziarski  *     must be passed to @ref cpaGetInstances().
659266b0663SKrzysztof Zdziarski  *
660266b0663SKrzysztof Zdziarski  * @context
661266b0663SKrzysztof Zdziarski  *      This function MUST NOT be called from an interrupt context as it MAY
662266b0663SKrzysztof Zdziarski  *      sleep.
663266b0663SKrzysztof Zdziarski  * @assumptions
664266b0663SKrzysztof Zdziarski  *      None
665266b0663SKrzysztof Zdziarski  * @sideEffects
666266b0663SKrzysztof Zdziarski  *      None
667266b0663SKrzysztof Zdziarski  * @blocking
668266b0663SKrzysztof Zdziarski  *      This function is synchronous and blocking.
669266b0663SKrzysztof Zdziarski  * @reentrant
670266b0663SKrzysztof Zdziarski  *      No
671266b0663SKrzysztof Zdziarski  * @threadSafe
672266b0663SKrzysztof Zdziarski  *      Yes
673266b0663SKrzysztof Zdziarski  *
674266b0663SKrzysztof Zdziarski  * @param[in]  accelerationServiceType    Acceleration Service required
675266b0663SKrzysztof Zdziarski  * @param[out] pNumInstances              Pointer to where the number of
676266b0663SKrzysztof Zdziarski  *                                        instances will be written.
677266b0663SKrzysztof Zdziarski  *
678266b0663SKrzysztof Zdziarski  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
679266b0663SKrzysztof Zdziarski  * @retval CPA_STATUS_FAIL           Function failed.
680266b0663SKrzysztof Zdziarski  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
681266b0663SKrzysztof Zdziarski  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
682266b0663SKrzysztof Zdziarski  *
683266b0663SKrzysztof Zdziarski  * @pre
684266b0663SKrzysztof Zdziarski  *      None
685266b0663SKrzysztof Zdziarski  * @post
686266b0663SKrzysztof Zdziarski  *      None
687266b0663SKrzysztof Zdziarski  * @note
688266b0663SKrzysztof Zdziarski  *      This function operates in a synchronous manner and no asynchronous
689266b0663SKrzysztof Zdziarski  *      callback will be generated
690266b0663SKrzysztof Zdziarski  *
691266b0663SKrzysztof Zdziarski  * @see
692266b0663SKrzysztof Zdziarski  *      cpaGetInstances
693266b0663SKrzysztof Zdziarski  *
694266b0663SKrzysztof Zdziarski  *****************************************************************************/
695266b0663SKrzysztof Zdziarski CpaStatus
696266b0663SKrzysztof Zdziarski cpaGetNumInstances(
697266b0663SKrzysztof Zdziarski         const CpaAccelerationServiceType accelerationServiceType,
698266b0663SKrzysztof Zdziarski         Cpa16U *pNumInstances);
699266b0663SKrzysztof Zdziarski 
700266b0663SKrzysztof Zdziarski /**
701266b0663SKrzysztof Zdziarski  *****************************************************************************
702266b0663SKrzysztof Zdziarski  * @file cpa.h
703266b0663SKrzysztof Zdziarski  * @ingroup cpa
704266b0663SKrzysztof Zdziarski  *      Get the handles to the required Acceleration Service instances that are
705266b0663SKrzysztof Zdziarski  *      supported by the API implementation.
706266b0663SKrzysztof Zdziarski  *
707266b0663SKrzysztof Zdziarski  * @description
708266b0663SKrzysztof Zdziarski  *      This function will return handles to the required Acceleration Service
709266b0663SKrzysztof Zdziarski  *      instances that are supported by an implementation of the CPA API. These
710266b0663SKrzysztof Zdziarski  *      instance handles can then be used as input parameters with other
711266b0663SKrzysztof Zdziarski  *      API functions.
712266b0663SKrzysztof Zdziarski  *
713266b0663SKrzysztof Zdziarski  *      This function will populate an array that has been allocated by the
714266b0663SKrzysztof Zdziarski  *      caller. The size of this array will have been determined by the
715266b0663SKrzysztof Zdziarski  *      cpaGetNumInstances() function.
716266b0663SKrzysztof Zdziarski  *
717266b0663SKrzysztof Zdziarski  * @context
718266b0663SKrzysztof Zdziarski  *      This function MUST NOT be called from an interrupt context as it MAY
719266b0663SKrzysztof Zdziarski  *      sleep.
720266b0663SKrzysztof Zdziarski  * @assumptions
721266b0663SKrzysztof Zdziarski  *      None
722266b0663SKrzysztof Zdziarski  * @sideEffects
723266b0663SKrzysztof Zdziarski  *      None
724266b0663SKrzysztof Zdziarski  * @blocking
725266b0663SKrzysztof Zdziarski  *      This function is synchronous and blocking.
726266b0663SKrzysztof Zdziarski  * @reentrant
727266b0663SKrzysztof Zdziarski  *      No
728266b0663SKrzysztof Zdziarski  * @threadSafe
729266b0663SKrzysztof Zdziarski  *      Yes
730266b0663SKrzysztof Zdziarski  *
731266b0663SKrzysztof Zdziarski  * @param[in]  accelerationServiceType   Acceleration Service requested
732266b0663SKrzysztof Zdziarski  * @param[in]  numInstances              Size of the array. If the value is
733266b0663SKrzysztof Zdziarski  *                                       greater than the number of instances
734266b0663SKrzysztof Zdziarski  *                                       supported, then an error (@ref
735266b0663SKrzysztof Zdziarski  *                                       CPA_STATUS_INVALID_PARAM) is returned.
736266b0663SKrzysztof Zdziarski  * @param[in,out] cpaInstances           Pointer to where the instance
737266b0663SKrzysztof Zdziarski  *                                       handles will be written.
738266b0663SKrzysztof Zdziarski  *
739266b0663SKrzysztof Zdziarski  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
740266b0663SKrzysztof Zdziarski  * @retval CPA_STATUS_FAIL           Function failed.
741266b0663SKrzysztof Zdziarski  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
742266b0663SKrzysztof Zdziarski  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
743266b0663SKrzysztof Zdziarski  *
744266b0663SKrzysztof Zdziarski  * @pre
745266b0663SKrzysztof Zdziarski  *      None
746266b0663SKrzysztof Zdziarski  * @post
747266b0663SKrzysztof Zdziarski  *      None
748266b0663SKrzysztof Zdziarski  * @note
749266b0663SKrzysztof Zdziarski  *      This function operates in a synchronous manner and no asynchronous
750266b0663SKrzysztof Zdziarski  *      callback will be generated
751266b0663SKrzysztof Zdziarski  *
752266b0663SKrzysztof Zdziarski  * @see
753266b0663SKrzysztof Zdziarski  *      cpaGetNumInstances
754266b0663SKrzysztof Zdziarski  *
755266b0663SKrzysztof Zdziarski  *****************************************************************************/
756266b0663SKrzysztof Zdziarski CpaStatus
757266b0663SKrzysztof Zdziarski cpaGetInstances(
758266b0663SKrzysztof Zdziarski         const CpaAccelerationServiceType accelerationServiceType,
759266b0663SKrzysztof Zdziarski         Cpa16U numInstances,
760266b0663SKrzysztof Zdziarski         CpaInstanceHandle *cpaInstances);
761266b0663SKrzysztof Zdziarski 
76278ee8d1cSJulian Grajkowski #ifdef __cplusplus
76378ee8d1cSJulian Grajkowski } /* close the extern "C" { */
76478ee8d1cSJulian Grajkowski #endif
76578ee8d1cSJulian Grajkowski 
76678ee8d1cSJulian Grajkowski #endif /* CPA_H */
767