The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/qat/qat_api/include/lac/cpa_cy_sym_dp.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /***************************************************************************
    2  *
    3  *   BSD LICENSE
    4  * 
    5  *   Copyright(c) 2007-2022 Intel Corporation. All rights reserved.
    6  *   All rights reserved.
    7  * 
    8  *   Redistribution and use in source and binary forms, with or without
    9  *   modification, are permitted provided that the following conditions
   10  *   are met:
   11  * 
   12  *     * Redistributions of source code must retain the above copyright
   13  *       notice, this list of conditions and the following disclaimer.
   14  *     * Redistributions in binary form must reproduce the above copyright
   15  *       notice, this list of conditions and the following disclaimer in
   16  *       the documentation and/or other materials provided with the
   17  *       distribution.
   18  *     * Neither the name of Intel Corporation nor the names of its
   19  *       contributors may be used to endorse or promote products derived
   20  *       from this software without specific prior written permission.
   21  * 
   22  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   23  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   24  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   25  *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   26  *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   27  *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   28  *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   29  *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   30  *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   31  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   32  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   33  * 
   34  *
   35  ***************************************************************************/
   36 
   37 /*
   38  *****************************************************************************
   39  * Doxygen group definitions
   40  ****************************************************************************/
   41 
   42 /**
   43  *****************************************************************************
   44  * @file cpa_cy_sym_dp.h
   45  *
   46  * @defgroup cpaCySymDp Symmetric cryptographic Data Plane API
   47  *
   48  * @ingroup cpaCySym
   49  *
   50  * @description
   51  *      These data structures and functions specify the Data Plane API
   52  *      for symmetric cipher, hash, and combined cipher and hash
   53  *      operations.
   54  *
   55  *      This API is recommended for data plane applications, in which the
   56  *      cost of offload - that is, the cycles consumed by the driver in
   57  *      sending requests to the hardware, and processing responses - needs
   58  *      to be minimized.  In particular, use of this API is recommended
   59  *      if the following constraints are acceptable to your application:
   60  *
   61  *      - Thread safety is not guaranteed.  Each software thread should
   62  *        have access to its own unique instance (CpaInstanceHandle) to
   63  *        avoid contention.
   64  *      - Polling is used, rather than interrupts (which are expensive).
   65  *        Implementations of this API will provide a function (not
   66  *        defined as part of this API) to read responses from the hardware
   67  *        response queue and dispatch callback functions, as specified on
   68  *        this API.
   69  *      - Buffers and buffer lists are passed using physical addresses,
   70  *        to avoid virtual to physical address translation costs.
   71  *      - For GCM and CCM modes of AES, when performing decryption and
   72  *        verification, if verification fails, then the message buffer
   73  *        will NOT be zeroed.  (This is a consequence of using physical
   74  *        addresses for the buffers.)
   75  *      - The ability to enqueue one or more requests without submitting
   76  *        them to the hardware allows for certain costs to be amortized
   77  *        across multiple requests.
   78  *      - Only asynchronous invocation is supported.
   79  *      - There is no support for partial packets.
   80  *      - Implementations may provide certain features as optional at
   81  *        build time, such as atomic counters.
   82  *      - The "default" instance (@ref CPA_INSTANCE_HANDLE_SINGLE) is not
   83  *        supported on this API.  The specific handle should be obtained
   84  *        using the instance discovery functions (@ref cpaCyGetNumInstances,
   85  *        @ref cpaCyGetInstances).
   86  *
   87  * @note Performance Trade-Offs
   88  *      Different implementations of this API may have different performance
   89  *      trade-offs; please refer to the documentation for your implementation
   90  *      for details.  However, the following concepts informed the definition
   91  *      of this API.
   92  *
   93  *      The API distinguishes between <i>enqueuing</i> a request and actually
   94  *      <i>submitting</i> that request to the cryptographic acceleration
   95  *      engine to be performed.  This allows multiple requests to be enqueued
   96  *      (either individually or in batch), and then for all enqueued requests
   97  *      to be submitted in a single operation.  The rationale is that in some
   98  *      (especially hardware-based) implementations, the submit operation
   99  *      is expensive; for example, it may incur an MMIO instruction.  The
  100  *      API allows this cost to be amortized over a number of requests.  The
  101  *      precise number of such requests can be tuned for optimal
  102  *      performance.
  103  *
  104  *      Specifically:
  105  *
  106  *      - The function @ref cpaCySymDpEnqueueOp allows one request to be
  107  *        enqueued, and optionally for that request (and all previously
  108  *        enqueued requests) to be submitted.
  109  *      - The function @ref cpaCySymDpEnqueueOpBatch allows multiple
  110  *        requests to be enqueued, and optionally for those requests (and all
  111  *        previously enqueued requests) to be submitted.
  112  *      - The function @ref cpaCySymDpPerformOpNow enqueues no requests, but
  113  *        submits all previously enqueued requests.
  114  *****************************************************************************/
  115 
  116 #ifndef CPA_CY_SYM_DP_H
  117 #define CPA_CY_SYM_DP_H
  118 
  119 #ifdef __cplusplus
  120 extern "C" {
  121 #endif
  122 
  123 #include "cpa_cy_common.h"
  124 #include "cpa_cy_sym.h"
  125 
  126 /**
  127  *****************************************************************************
  128  * @ingroup cpaCySymDp
  129  *      Cryptographic component symmetric session context handle for the
  130  *      data plane API.
  131  * @description
  132  *      Handle to a cryptographic data plane session context. The memory for
  133  *      this handle is allocated by the client. The size of the memory that
  134  *      the client needs to allocate is determined by a call to the @ref
  135  *      cpaCySymDpSessionCtxGetSize or @ref cpaCySymDpSessionCtxGetDynamicSize
  136  *      functions. The session context memory is initialized with a call to 
  137  *      the @ref cpaCySymInitSession function.
  138  *      This memory MUST not be freed until a call to @ref
  139  *      cpaCySymDpRemoveSession has completed successfully.
  140  *
  141  *****************************************************************************/
  142 typedef void * CpaCySymDpSessionCtx;
  143 
  144 /**
  145  *****************************************************************************
  146  * @ingroup cpaCySymDp
  147  *      Operation Data for cryptographic data plane API.
  148  *
  149  * @description
  150  *      This structure contains data relating to a request to perform
  151  *      symmetric cryptographic processing on one or more data buffers.
  152  *
  153  *      The physical memory to which this structure points needs to be
  154  *      at least 8-byte aligned.
  155  *
  156  *      All reserved fields SHOULD NOT be written or read by the
  157  *      calling code.
  158  *
  159  * @see
  160  *        cpaCySymDpEnqueueOp, cpaCySymDpEnqueueOpBatch
  161  ****************************************************************************/
  162 typedef struct _CpaCySymDpOpData {
  163     Cpa64U reserved0;
  164     /**< Reserved for internal usage. */
  165     Cpa32U cryptoStartSrcOffsetInBytes;
  166     /**< Starting point for cipher processing, specified as number of bytes
  167      * from start of data in the source buffer. The result of the cipher
  168      * operation will be written back into the buffer starting at this
  169      * location in the destination buffer.
  170      */
  171     Cpa32U messageLenToCipherInBytes;
  172     /**< The message length, in bytes, of the source buffer on which the
  173      * cryptographic operation will be computed. This must be a multiple of
  174      * the block size if a block cipher is being used. This is also the
  175      * same as the result length.
  176      *
  177      * @note In the case of CCM (@ref CPA_CY_SYM_HASH_AES_CCM), this value
  178      * should not include the length of the padding or the length of the
  179      * MAC; the driver will compute the actual number of bytes over which
  180      * the encryption will occur, which will include these values.
  181      *
  182      * @note For AES-GMAC (@ref CPA_CY_SYM_HASH_AES_GMAC), this field
  183      * should be set to 0.
  184      *
  185      * @note On some implementations, this length may be limited to a 16-bit
  186      * value (65535 bytes).
  187      */
  188     CpaPhysicalAddr iv;
  189     /**< Initialization Vector or Counter.  Specifically, this is the
  190      * physical address of one of the following:
  191      *
  192      * - For block ciphers in CBC mode, or for Kasumi in F8 mode, or for
  193      *   SNOW3G in UEA2 mode, this is the Initialization Vector (IV)
  194      *   value.
  195      * - For ARC4, this is reserved for internal usage.
  196      * - For block ciphers in CTR mode, this is the counter.
  197      * - For GCM mode, this is either the IV (if the length is 96 bits) or J0
  198      *   (for other sizes), where J0 is as defined by NIST SP800-38D.
  199      *   Regardless of the IV length, a full 16 bytes needs to be allocated.
  200      * - For CCM mode, the first byte is reserved, and the nonce should be
  201      *   written starting at &pIv[1] (to allow space for the implementation
  202      *   to write in the flags in the first byte).  Note that a full 16 bytes
  203      *   should be allocated, even though the ivLenInBytes field will have
  204      *   a value less than this.
  205      *   The macro @ref CPA_CY_SYM_CCM_SET_NONCE may be used here.
  206      */
  207     Cpa64U reserved1;
  208     /**< Reserved for internal usage. */
  209     Cpa32U hashStartSrcOffsetInBytes;
  210     /**< Starting point for hash processing, specified as number of bytes
  211      * from start of packet in source buffer.
  212      *
  213      * @note For CCM and GCM modes of operation, this value in this field
  214      * is ignored, and the field is reserved for internal usage.
  215      * The fields @ref additionalAuthData and @ref pAdditionalAuthData
  216      * should be set instead.
  217      *
  218      * @note For AES-GMAC (@ref CPA_CY_SYM_HASH_AES_GMAC) mode of
  219      * operation, this field specifies the start of the AAD data in
  220      * the source buffer.
  221      */
  222     Cpa32U messageLenToHashInBytes;
  223     /**< The message length, in bytes, of the source buffer that the hash
  224      * will be computed on.
  225      *
  226      * @note For CCM and GCM modes of operation, this value in this field
  227      * is ignored, and the field is reserved for internal usage.
  228      * The fields @ref additionalAuthData and @ref pAdditionalAuthData
  229      * should be set instead.
  230      *
  231      * @note For AES-GMAC (@ref CPA_CY_SYM_HASH_AES_GMAC) mode of
  232      * operation, this field specifies the length of the AAD data in the
  233      * source buffer.
  234      *
  235      * @note On some implementations, this length may be limited to a 16-bit
  236      * value (65535 bytes).
  237      */
  238     CpaPhysicalAddr additionalAuthData;
  239     /**< Physical address of the Additional Authenticated Data (AAD),
  240      * which is needed for authenticated cipher mechanisms (CCM and
  241      * GCM), and to the IV for  SNOW3G authentication (@ref
  242      * CPA_CY_SYM_HASH_SNOW3G_UIA2). For other authentication
  243      * mechanisms, this value is ignored, and the field is reserved for
  244      * internal usage.
  245      *
  246      * The length of the data pointed to by this field is set up for
  247      * the session in the @ref CpaCySymHashAuthModeSetupData structure
  248      * as part of the @ref cpaCySymDpInitSession function call.  This length
  249      * must not exceed 240 bytes.
  250 
  251      * If AAD is not used, this address must be set to zero.
  252      *
  253      * Specifically for CCM (@ref CPA_CY_SYM_HASH_AES_CCM) and GCM (@ref
  254      * CPA_CY_SYM_HASH_AES_GCM), the caller should be setup as described in
  255      * the same way as the corresponding field, pAdditionalAuthData, on the
  256      * "traditional" API (see the @ref CpaCySymOpData).
  257      *
  258      * @note For AES-GMAC (@ref CPA_CY_SYM_HASH_AES_GMAC) mode of
  259      * operation, this field is not used and should be set to 0. Instead
  260      * the AAD data should be placed in the source buffer.
  261      *
  262      */
  263     CpaPhysicalAddr digestResult;
  264     /**<  If the digestIsAppended member of the @ref CpaCySymSessionSetupData
  265      * structure is NOT set then this is the physical address of the location
  266      * where the digest result should be inserted (in the case of digest
  267      * generation) or where the purported digest exists (in the case of digest
  268      * verification).
  269      *
  270      * At session registration time, the client specified the digest result
  271      * length with the digestResultLenInBytes member of the @ref
  272      * CpaCySymHashSetupData structure. The client must allocate at least
  273      * digestResultLenInBytes of physically contiguous memory at this location.
  274      *
  275      * For digest generation, the digest result will overwrite any data
  276      * at this location.
  277      *
  278      * @note For GCM (@ref CPA_CY_SYM_HASH_AES_GCM), for "digest result"
  279      * read "authentication tag T".
  280      *
  281      * If the digestIsAppended member of the @ref CpaCySymSessionSetupData
  282      * structure is set then this value is ignored and the digest result
  283      * is understood to be in the destination buffer for digest generation,
  284      * and in the source buffer for digest verification. The location of the
  285      * digest result in this case is immediately following the region over
  286      * which the digest is computed.
  287      */
  288 
  289     CpaInstanceHandle instanceHandle;
  290     /**< Instance to which the request is to be enqueued.
  291      * @note A callback function must have been registered on the instance
  292      * using @ref cpaCySymDpRegCbFunc.
  293      */
  294     CpaCySymDpSessionCtx sessionCtx;
  295     /**< Session context specifying the cryptographic parameters for this
  296      * request.
  297      * @note The session must have been created using @ref
  298      * cpaCySymDpInitSession.
  299      */
  300     Cpa32U ivLenInBytes;
  301     /**< Length of valid IV data pointed to by the pIv parameter.
  302      *
  303      * - For block ciphers in CBC mode, or for Kasumi in F8 mode, or for
  304      *   SNOW3G in UEA2 mode, this is the length of the IV (which
  305      *   must be the same as the block length of the cipher).
  306      * - For block ciphers in CTR mode, this is the length of the counter
  307      *   (which must be the same as the block length of the cipher).
  308      * - For GCM mode, this is either 12 (for 96-bit IVs) or 16, in which
  309      *   case pIv points to J0.
  310      * - For CCM mode, this is the length of the nonce, which can be in the
  311      *   range 7 to 13 inclusive.
  312      */
  313     CpaPhysicalAddr srcBuffer;
  314     /**< Physical address of the source buffer on which to operate.
  315      * This is either:
  316      *
  317      * - The location of the data, of length srcBufferLen; or,
  318      * - If srcBufferLen has the special value @ref CPA_DP_BUFLIST, then
  319      *   srcBuffer contains the location where a @ref CpaPhysBufferList is
  320      *   stored.  In this case, the CpaPhysBufferList MUST be aligned
  321      *   on an 8-byte boundary.
  322      * - For optimum performance, the buffer should only contain the data 
  323      *   region that the cryptographic operation(s) must be performed on. 
  324      *   Any additional data in the source buffer may be copied to the 
  325      *   destination buffer and this copy may degrade performance.
  326      */
  327     Cpa32U  srcBufferLen;
  328     /**< Length of source buffer, or @ref CPA_DP_BUFLIST. */
  329     CpaPhysicalAddr dstBuffer;
  330     /**< Physical address of the destination buffer on which to operate.
  331      * This is either:
  332      *
  333      * - The location of the data, of length srcBufferLen; or,
  334      * - If srcBufferLen has the special value @ref CPA_DP_BUFLIST, then
  335      *   srcBuffer contains the location where a @ref CpaPhysBufferList is
  336      *   stored.  In this case, the CpaPhysBufferList MUST be aligned
  337      *   on an 8-byte boundary.
  338      *
  339      * For "in-place" operation, the dstBuffer may be identical to the
  340      * srcBuffer.
  341      */
  342     Cpa32U  dstBufferLen;
  343     /**< Length of destination buffer, or @ref CPA_DP_BUFLIST. */
  344 
  345     CpaPhysicalAddr thisPhys;
  346     /**< Physical address of this data structure */
  347 
  348     Cpa8U* pIv;
  349     /**< Pointer to (and therefore, the virtual address of) the IV field
  350      * above.
  351      * Needed here because the driver in some cases writes to this field,
  352      * in addition to sending it to the accelerator.
  353      */
  354     Cpa8U *pAdditionalAuthData;
  355     /**< Pointer to (and therefore, the virtual address of) the
  356      * additionalAuthData field above.
  357      * Needed here because the driver in some cases writes to this field,
  358      * in addition to sending it to the accelerator.
  359      */
  360     void* pCallbackTag;
  361     /**< Opaque data that will be returned to the client in the function
  362      * completion callback.
  363      *
  364      * This opaque data is not used by the implementation of the API,
  365      * but is simply returned as part of the asynchronous response.
  366      * It may be used to store information that might be useful when
  367      * processing the response later.
  368      */
  369 } CpaCySymDpOpData;
  370 
  371 /**
  372  *****************************************************************************
  373  * @ingroup cpaCySymDp
  374  *      Definition of callback function for cryptographic data plane API.
  375  *
  376  * @description
  377  *      This is the callback function prototype. The callback function is
  378  *      registered by the application using the @ref cpaCySymDpRegCbFunc
  379  *      function call, and called back on completion of asycnhronous
  380  *      requests made via calls to @ref cpaCySymDpEnqueueOp or @ref
  381  *      cpaCySymDpEnqueueOpBatch.
  382  *
  383  * @context
  384  *      This callback function can be executed in a context that DOES NOT
  385  *      permit sleeping to occur.
  386  * @assumptions
  387  *      None
  388  * @sideEffects
  389  *      None
  390  * @reentrant
  391  *      No
  392  * @threadSafe
  393  *      No
  394  *
  395  * @param[in] pOpData           Pointer to the CpaCySymDpOpData object which
  396  *                              was supplied as part of the original request.
  397  * @param[in] status            Status of the operation. Valid values are
  398  *                              CPA_STATUS_SUCCESS, CPA_STATUS_FAIL and
  399  *                              CPA_STATUS_UNSUPPORTED.
  400  * @param[in] verifyResult      This parameter is valid when the verifyDigest
  401  *                              option is set in the CpaCySymSessionSetupData
  402  *                              structure. A value of CPA_TRUE indicates that
  403  *                              the compare succeeded. A value of CPA_FALSE
  404  *                              indicates that the compare failed.
  405  *
  406  * @return
  407  *      None
  408  * @pre
  409  *      Component has been initialized.
  410  *      Callback has been registered with @ref cpaCySymDpRegCbFunc.
  411  * @post
  412  *      None
  413  * @note
  414  *      None
  415  * @see
  416  *      cpaCySymDpRegCbFunc
  417  *****************************************************************************/
  418 typedef void (*CpaCySymDpCbFunc)(CpaCySymDpOpData *pOpData,
  419         CpaStatus status,
  420         CpaBoolean verifyResult);
  421 
  422 
  423 /**
  424  *****************************************************************************
  425  * @ingroup cpaCySymDp
  426  *      Registration of the operation completion callback function.
  427  *
  428  * @description
  429  *      This function allows a completion callback function to be registered.
  430  *      The registered callback function is invoked on completion of
  431  *      asycnhronous requests made via calls to @ref cpaCySymDpEnqueueOp
  432  *      or @ref cpaCySymDpEnqueueOpBatch.
  433  *
  434  *      If a callback function was previously registered, it is overwritten.
  435  *
  436  * @context
  437  *      This is a synchronous function and it cannot sleep. It can be
  438  *      executed in a context that does not permit sleeping.
  439  * @assumptions
  440  *      None
  441  * @sideEffects
  442  *      None
  443  * @reentrant
  444  *      No
  445  * @threadSafe
  446  *      No
  447  *
  448  * @param[in] instanceHandle    Instance on which the callback function is to be
  449  *                                 registered.
  450  * @param[in] pSymNewCb         Callback function for this instance.
  451 
  452  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  453  * @retval CPA_STATUS_FAIL           Function failed.
  454  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
  455  *                                   the request.
  456  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  457  *
  458  * @pre
  459  *      Component has been initialized.
  460  * @post
  461  *      None
  462  * @note
  463  *      None
  464  * @see
  465  *      CpaCySymDpCbFunc
  466  *****************************************************************************/
  467 CpaStatus cpaCySymDpRegCbFunc(const CpaInstanceHandle instanceHandle,
  468         const CpaCySymDpCbFunc pSymNewCb);
  469 
  470 /**
  471  *****************************************************************************
  472  * @ingroup cpaCySymDp
  473  *      Gets the size required to store a session context for the data plane
  474  *      API.
  475  *
  476  * @description
  477  *      This function is used by the client to determine the size of the memory
  478  *      it must allocate in order to store the session context. This MUST be
  479  *      called before the client allocates the memory for the session context
  480  *      and before the client calls the @ref cpaCySymDpInitSession function.
  481  *
  482  *      For a given implementation of this API, it is safe to assume that
  483  *      cpaCySymDpSessionCtxGetSize() will always return the same size and that
  484  *      the size will not be different for different setup data parameters.
  485  *      However, it should be noted that the size may change:
  486  *        (1) between different implementations of the API (e.g. between software
  487  *            and hardware implementations or between different hardware
  488  *            implementations)
  489  *        (2) between different releases of the same API implementation.
  490  *
  491  *      The size returned by this function is the smallest size needed to 
  492  *      support all possible combinations of setup data parameters. Some
  493  *      setup data parameter combinations may fit within a smaller session 
  494  *      context size. The alternate cpaCySymDpSessionCtxGetDynamicSize() 
  495  *      function will return the smallest size needed to fit the
  496  *      provided setup data parameters.
  497  *
  498  * @context
  499  *      This is a synchronous function that cannot sleep. It can be
  500  *      executed in a context that does not permit sleeping.
  501  * @assumptions
  502  *      None
  503  * @sideEffects
  504  *      None
  505  * @blocking
  506  *      No
  507  * @reentrant
  508  *      No
  509  * @threadSafe
  510  *      Yes
  511  *
  512  * @param[in]  instanceHandle            Instance handle.
  513  * @param[in]  pSessionSetupData         Pointer to session setup data which
  514  *                                       contains parameters which are static
  515  *                                       for a given cryptographic session such
  516  *                                       as operation type, mechanisms, and keys
  517  *                                       for cipher and/or hash operations.
  518  * @param[out] pSessionCtxSizeInBytes    The amount of memory in bytes required
  519  *                                       to hold the Session Context.
  520  *
  521  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  522  * @retval CPA_STATUS_FAIL           Function failed.
  523  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  524  * @retval CPA_STATUS_RESOURCE       Error related to system resources.
  525  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  526  *
  527  * @pre
  528  *      The component has been initialized.
  529  * @post
  530  *      None
  531  * @note
  532  *      This is a synchronous function and has no completion callback
  533  *      associated with it.
  534  * @see
  535  *      CpaCySymSessionSetupData
  536  *      cpaCySymDpSessionCtxGetDynamicSize()
  537  *      cpaCySymDpInitSession()
  538  *****************************************************************************/
  539 CpaStatus
  540 cpaCySymDpSessionCtxGetSize(const CpaInstanceHandle instanceHandle,
  541         const CpaCySymSessionSetupData *pSessionSetupData,
  542         Cpa32U *pSessionCtxSizeInBytes);
  543 
  544 /**
  545  *****************************************************************************
  546  * @ingroup cpaCySymDp
  547  *      Gets the minimum size required to store a session context for the data 
  548  *      plane API.
  549  *
  550  * @description
  551  *      This function is used by the client to determine the smallest size of
  552  *      the memory it must allocate in order to store the session context. 
  553  *      This MUST be called before the client allocates the memory for the 
  554  *      session context and before the client calls the 
  555  *      @ref cpaCySymDpInitSession function.
  556  *
  557  *      This function is an alternate to cpaCySymDpSessionGetSize().
  558  *      cpaCySymDpSessionCtxGetSize() will return a fixed size which is the 
  559  *      minimum memory size needed to support all possible setup data parameter 
  560  *      combinations. cpaCySymDpSessionCtxGetDynamicSize() will return the 
  561  *      minimum memory size needed to support the specific session setup 
  562  *      data parmeters provided. This size may be different for different setup
  563  *      data parameters.
  564  *
  565  * @context
  566  *      This is a synchronous function that cannot sleep. It can be
  567  *      executed in a context that does not permit sleeping.
  568  * @assumptions
  569  *      None
  570  * @sideEffects
  571  *      None
  572  * @blocking
  573  *      No
  574  * @reentrant
  575  *      No
  576  * @threadSafe
  577  *      Yes
  578  *
  579  * @param[in]  instanceHandle            Instance handle.
  580  * @param[in]  pSessionSetupData         Pointer to session setup data which
  581  *                                       contains parameters which are static
  582  *                                       for a given cryptographic session such
  583  *                                       as operation type, mechanisms, and keys
  584  *                                       for cipher and/or hash operations.
  585  * @param[out] pSessionCtxSizeInBytes    The amount of memory in bytes required
  586  *                                       to hold the Session Context.
  587  *
  588  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  589  * @retval CPA_STATUS_FAIL           Function failed.
  590  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  591  * @retval CPA_STATUS_RESOURCE       Error related to system resources.
  592  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  593  *
  594  * @pre
  595  *      The component has been initialized.
  596  * @post
  597  *      None
  598  * @note
  599  *      This is a synchronous function and has no completion callback
  600  *      associated with it.
  601  * @see
  602  *      CpaCySymSessionSetupData
  603  *      cpaCySymDpSessionCtxGetSize()
  604  *      cpaCySymDpInitSession()
  605  *****************************************************************************/
  606 CpaStatus
  607 cpaCySymDpSessionCtxGetDynamicSize(const CpaInstanceHandle instanceHandle,
  608         const CpaCySymSessionSetupData *pSessionSetupData,
  609         Cpa32U *pSessionCtxSizeInBytes);
  610 
  611 /**
  612  *****************************************************************************
  613  * @ingroup cpaCySymDp
  614  *      Initialize a session for the symmetric cryptographic data plane API.
  615  *
  616  * @description
  617  *      This function is used by the client to initialize an asynchronous
  618  *      session context for symmetric cryptographic data plane operations.
  619  *      The returned session context is the handle to the session and needs to
  620  *      be passed when requesting cryptographic operations to be performed.
  621  *
  622  *      Only sessions created using this function may be used when
  623  *      invoking functions on this API
  624  *
  625  *      The session can be removed using @ref cpaCySymDpRemoveSession.
  626  *
  627  * @context
  628  *      This is a synchronous function and it cannot sleep. It can be
  629  *      executed in a context that does not permit sleeping.
  630  * @assumptions
  631  *      None
  632  * @sideEffects
  633  *      None
  634  * @blocking
  635  *      No
  636  * @reentrant
  637  *      No
  638  * @threadSafe
  639  *      No
  640  *
  641  * @param[in] instanceHandle        Instance to which the requests will be
  642  *                                  submitted.
  643  * @param[in]  pSessionSetupData    Pointer to session setup data which
  644  *                                     contains parameters that are static
  645  *                                     for a given cryptographic session such
  646  *                                     as operation type, algorithm, and keys
  647  *                                     for cipher and/or hash operations.
  648  * @param[out] sessionCtx           Pointer to the memory allocated by the
  649  *                                  client to store the session context. This
  650  *                                  memory must be physically contiguous, and
  651  *                                  its length (in bytes) must be at least as
  652  *                                  big as specified by a call to @ref
  653  *                                  cpaCySymDpSessionCtxGetSize.  This memory
  654  *                                  will be initialized with this function. This
  655  *                                  value needs to be passed to subsequent
  656  *                                  processing calls.
  657  *
  658  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  659  * @retval CPA_STATUS_FAIL           Function failed.
  660  * @retval CPA_STATUS_RETRY          Resubmit the request.
  661  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  662  * @retval CPA_STATUS_RESOURCE       Error related to system resources.
  663  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
  664  *                                   the request.
  665  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  666  *
  667  * @pre
  668  *      The component has been initialized.
  669  * @post
  670  *      None
  671  * @note
  672  *      This is a synchronous function and has no completion callback
  673  *      associated with it.
  674  * @see
  675  *      cpaCySymDpSessionCtxGetSize, cpaCySymDpRemoveSession
  676  *****************************************************************************/
  677 CpaStatus
  678 cpaCySymDpInitSession(CpaInstanceHandle instanceHandle,
  679         const CpaCySymSessionSetupData *pSessionSetupData,
  680         CpaCySymDpSessionCtx sessionCtx);
  681 
  682 /**
  683  *****************************************************************************
  684  * @ingroup cpaCySymDp
  685  *      Remove (delete) a symmetric cryptographic session for the data plane
  686  *      API.
  687  *
  688  * @description
  689  *      This function will remove a previously initialized session context
  690  *      and the installed callback handler function. Removal will fail if
  691  *      outstanding calls still exist for the initialized session handle.
  692  *      The client needs to retry the remove function at a later time.
  693  *      The memory for the session context MUST not be freed until this call
  694  *      has completed successfully.
  695  *
  696  * @context
  697  *      This is a synchronous function that cannot sleep. It can be
  698  *      executed in a context that does not permit sleeping.
  699  * @assumptions
  700  *      None
  701  * @sideEffects
  702  *      None
  703  * @blocking
  704  *      No
  705  * @reentrant
  706  *      No
  707  * @threadSafe
  708  *      No
  709  *
  710  * @param[in]      instanceHandle    Instance handle.
  711  * @param[in,out]  sessionCtx        Session context to be removed.
  712  *
  713  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  714  * @retval CPA_STATUS_FAIL           Function failed.
  715  * @retval CPA_STATUS_RETRY          Resubmit the request.
  716  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  717  * @retval CPA_STATUS_RESOURCE       Error related to system resources.
  718  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
  719  *                                   the request.
  720  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  721  *
  722  * @pre
  723  *      The component has been initialized.
  724  * @post
  725  *      None
  726  * @note
  727  *      Note that this is a synchronous function and has no completion callback
  728  *      associated with it.
  729  *
  730  * @see
  731  *      CpaCySymDpSessionCtx,
  732  *      cpaCySymDpInitSession()
  733  *
  734  *****************************************************************************/
  735 CpaStatus
  736 cpaCySymDpRemoveSession(const CpaInstanceHandle instanceHandle,
  737         CpaCySymDpSessionCtx sessionCtx);
  738 
  739 
  740 /**
  741  *****************************************************************************
  742  * @ingroup cpaCySymDp
  743  *         Enqueue a single symmetric cryptographic request.
  744  *
  745  * @description
  746  *      This function enqueues a single request to perform a cipher,
  747  *      hash or combined (cipher and hash) operation.  Optionally, the
  748  *      request is also submitted to the cryptographic engine to be
  749  *      performed.
  750  *
  751  *      See note about performance trade-offs on the @ref cpaCySymDp API.
  752  *
  753  *      The function is asynchronous; control is returned to the user once
  754  *      the request has been submitted.  On completion of the request, the
  755  *      application may poll for responses, which will cause a callback
  756  *      function (registered via @ref cpaCySymDpRegCbFunc) to be invoked.
  757  *      Callbacks within a session are guaranteed to be in the same order
  758  *      in which they were submitted.
  759  *
  760  *      The following restrictions apply to the pOpData parameter:
  761  *
  762  *      - The memory MUST be aligned on an 8-byte boundary.
  763  *      - The structure MUST reside in physically contiguous memory.
  764  *      - The reserved fields of the structure SHOULD NOT be written
  765  *        or read by the calling code.
  766  *
  767  * @context
  768  *      This function will not sleep, and hence can be executed in a context
  769  *      that does not permit sleeping.
  770  *
  771  * @sideEffects
  772  *      None
  773  * @blocking
  774  *      No
  775  * @reentrant
  776  *      No
  777  * @threadSafe
  778  *      No
  779  *
  780  * @param[in] pOpData           Pointer to a structure containing the
  781  *                              request parameters. The client code allocates
  782  *                              the memory for this structure. This component
  783  *                              takes ownership of the memory until it is
  784  *                              returned in the callback, which was registered
  785  *                              on the instance via @ref cpaCySymDpRegCbFunc.
  786  *                              See the above Description for restrictions
  787  *                              that apply to this parameter.
  788  * @param[in] performOpNow      Flag to specify whether the operation should be
  789  *                                 performed immediately (CPA_TRUE), or simply
  790  *                                 enqueued to be performed later (CPA_FALSE).
  791  *                                 In the latter case, the request is submitted
  792  *                                 to be performed either by calling this function
  793  *                                 again with this flag set to CPA_TRUE, or by
  794  *                                 invoking the function @ref
  795  *                                 cpaCySymDpPerformOpNow.
  796  *
  797  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  798  * @retval CPA_STATUS_FAIL           Function failed.
  799  * @retval CPA_STATUS_RETRY          Resubmit the request.
  800  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  801  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
  802  *                                   the request.
  803  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  804  *
  805  * @pre
  806  *      The session identified by pOpData->sessionCtx was setup using
  807  *      @ref cpaCySymDpInitSession.
  808  *      The instance identified by pOpData->instanceHandle has had a
  809  *      callback function registered via @ref cpaCySymDpRegCbFunc.
  810  *
  811  * @post
  812  *      None
  813  *
  814  * @note
  815  *      A callback of type @ref CpaCySymDpCbFunc is generated in response to
  816  *      this function call. Any errors generated during processing are
  817  *      reported as part of the callback status code.
  818  *
  819  * @see
  820  *      cpaCySymDpInitSession,
  821  *      cpaCySymDpPerformOpNow
  822  *****************************************************************************/
  823 CpaStatus
  824 cpaCySymDpEnqueueOp(CpaCySymDpOpData *pOpData,
  825         const CpaBoolean performOpNow);
  826 
  827 
  828 /**
  829  *****************************************************************************
  830  * @ingroup cpaCySymDp
  831  *         Enqueue multiple requests to the symmetric cryptographic data plane
  832  *      API.
  833  *
  834  * @description
  835  *      This function enqueues multiple requests to perform cipher, hash
  836  *      or combined (cipher and hash) operations.
  837 
  838  *      See note about performance trade-offs on the @ref cpaCySymDp API.
  839  *
  840  *      The function is asynchronous; control is returned to the user once
  841  *      the request has been submitted.  On completion of the request, the
  842  *      application may poll for responses, which will cause a callback
  843  *      function (registered via @ref cpaCySymDpRegCbFunc) to be invoked.
  844  *      Separate callbacks will be invoked for each request.
  845  *      Callbacks within a session are guaranteed to be in the same order
  846  *      in which they were submitted.
  847  *
  848  *      The following restrictions apply to each element of the pOpData
  849  *      array:
  850  *
  851  *      - The memory MUST be aligned on an 8-byte boundary.
  852  *      - The structure MUST reside in physically contiguous memory.
  853  *      - The reserved fields of the structure SHOULD NOT be
  854  *        written or read by the calling code.
  855  *
  856  * @context
  857  *      This function will not sleep, and hence can be executed in a context
  858  *      that does not permit sleeping.
  859  *
  860  * @assumptions
  861  *      Client MUST allocate the request parameters to 8 byte alignment.
  862  *      Reserved elements of the CpaCySymDpOpData structure MUST be 0.
  863  *      The CpaCySymDpOpData structure MUST reside in physically
  864  *      contiguous memory.
  865  *
  866  * @sideEffects
  867  *      None
  868  * @blocking
  869  *      No
  870  * @reentrant
  871  *      No
  872  * @threadSafe
  873  *      No
  874  *
  875  * @param[in] numberRequests    The number of requests in the array of
  876  *                              CpaCySymDpOpData structures.
  877  * @param[in] pOpData           An array of pointers to CpaCySymDpOpData
  878  *                              structures.  Each of the CpaCySymDpOpData
  879  *                              structure contains the request parameters for
  880  *                              that request. The client code allocates the
  881  *                              memory for this structure. This component takes
  882  *                              ownership of the memory until it is returned in
  883  *                              the callback, which was registered on the
  884  *                              instance via @ref cpaCySymDpRegCbFunc.
  885  *                              See the above Description for restrictions
  886  *                              that apply to this parameter.
  887  * @param[in] performOpNow      Flag to specify whether the operation should be
  888  *                                 performed immediately (CPA_TRUE), or simply
  889  *                                 enqueued to be performed later (CPA_FALSE).
  890  *                                 In the latter case, the request is submitted
  891  *                                 to be performed either by calling this function
  892  *                                 again with this flag set to CPA_TRUE, or by
  893  *                                 invoking the function @ref
  894  *                                 cpaCySymDpPerformOpNow.
  895  *
  896  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  897  * @retval CPA_STATUS_FAIL           Function failed.
  898  * @retval CPA_STATUS_RETRY          Resubmit the request.
  899  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  900  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
  901  *                                   the request.
  902  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  903  *
  904  * @pre
  905  *      The session identified by pOpData[i]->sessionCtx was setup using
  906  *      @ref cpaCySymDpInitSession.
  907  *      The instance identified by pOpData->instanceHandle[i] has had a
  908  *      callback function registered via @ref cpaCySymDpRegCbFunc.
  909  *
  910  * @post
  911  *      None
  912  *
  913  * @note
  914  *      Multiple callbacks of type @ref CpaCySymDpCbFunc are generated in
  915  *      response to this function call (one per request).  Any errors
  916  *      generated during processing are reported as part of the callback
  917  *      status code.
  918  *
  919  * @see
  920  *      cpaCySymDpInitSession,
  921  *      cpaCySymDpEnqueueOp
  922  *****************************************************************************/
  923 CpaStatus
  924 cpaCySymDpEnqueueOpBatch(const Cpa32U numberRequests,
  925         CpaCySymDpOpData *pOpData[],
  926         const CpaBoolean performOpNow);
  927 
  928 
  929 /**
  930  *****************************************************************************
  931  * @ingroup cpaCySymDp
  932  *         Submit any previously enqueued requests to be performed now on the
  933  *         symmetric cryptographic data plane API.
  934  *
  935  * @description
  936  *      If any requests/operations were enqueued via calls to @ref
  937  *      cpaCySymDpEnqueueOp and/or @ref cpaCySymDpEnqueueOpBatch, but with
  938  *      the flag performOpNow set to @ref CPA_FALSE, then these operations
  939  *      will now be submitted to the accelerator to be performed.
  940  *
  941  *      See note about performance trade-offs on the @ref cpaCySymDp API.
  942  *
  943  * @context
  944  *      Will not sleep. It can be executed in a context that does not
  945  *      permit sleeping.
  946  *
  947  * @sideEffects
  948  *      None
  949  * @blocking
  950  *      No
  951  * @reentrant
  952  *      No
  953  * @threadSafe
  954  *      No
  955  *
  956  * @param[in] instanceHandle        Instance to which the requests will be
  957  *                                     submitted.
  958  *
  959  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
  960  * @retval CPA_STATUS_FAIL           Function failed.
  961  * @retval CPA_STATUS_RETRY          Resubmit the request.
  962  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
  963  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
  964  *                                   the request.
  965  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
  966  *
  967  * @pre
  968  *      The component has been initialized.
  969  *      A cryptographic session has been previously setup using the
  970  *      @ref cpaCySymDpInitSession function call.
  971  *
  972  * @post
  973  *      None
  974  *
  975  * @see
  976  *      cpaCySymDpEnqueueOp, cpaCySymDpEnqueueOpBatch
  977  *****************************************************************************/
  978 CpaStatus
  979 cpaCySymDpPerformOpNow(CpaInstanceHandle instanceHandle);
  980 
  981 
  982 #ifdef __cplusplus
  983 } /* close the extern "C" { */
  984 #endif
  985 
  986 #endif /* CPA_CY_SYM_DP_H */

Cache object: c00af5853277094b5fa2855b6556b9e9


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.