1/****************************************************************************
2 *
3 *   BSD LICENSE
4 *
5 *   Copyright(c) 2007-2023 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_dc_chain.h
45 *
46 * @defgroup cpaDcChain Data Compression Chaining API
47 *
48 * @ingroup cpaDc
49 *
50 * @description
51 *      These functions specify the API for Data Compression Chaining operations.
52 *
53 * @remarks
54 *
55 *
56 *****************************************************************************/
57
58#ifndef CPA_DC_CHAIN_H
59#define CPA_DC_CHAIN_H
60
61#ifdef __cplusplus
62extern"C" {
63#endif
64
65#include "cpa_dc.h"
66#include "cpa_cy_sym.h"
67
68
69/**
70 *****************************************************************************
71 * @ingroup cpaDcChain
72 *      Supported operations for compression chaining
73 *
74 * @description
75 *      This enumeration lists the supported operations for compression chaining
76 *
77 *****************************************************************************/
78typedef enum _CpaDcChainOperations
79{
80    CPA_DC_CHAIN_COMPRESS_THEN_HASH,
81    /**< 2 operations for chaining:
82     * 1st operation is to perform compression on plain text
83     * 2nd operation is to perform hash on compressed text
84     **< 2 entries in CpaDcChainSessionSetupData array:
85     * 1st entry is for compression setup data
86     * 2nd entry is for hash setup data*/
87    CPA_DC_CHAIN_COMPRESS_THEN_ENCRYPT,
88    /**< 2 operations for chaining:
89     * 1st operation is to perform compression on plain text
90     * 2nd operation is to perform encryption on compressed text
91     **< 2 entries in CpaDcChainSessionSetupData array:
92     * 1st entry is for compression setup data
93     * 2nd entry is for encryption setup data*/
94    CPA_DC_CHAIN_COMPRESS_THEN_HASH_ENCRYPT,
95    /**< 2 operations for chaining:
96     * 1st operation is to perform compression on plain text
97     * 2nd operation is to perform hash on compressed text and
98     * encryption on compressed text
99     **< 2 entries in CpaDcChainSessionSetupData array:
100     * 1st entry is for compression setup data
101     * 2nd entry is for hash and encryption setup data*/
102    CPA_DC_CHAIN_COMPRESS_THEN_ENCRYPT_HASH,
103    /**< 2 operations for chaining:
104     * 1st operation is to perform compression on plain text
105     * 2nd operation is to perform encryption on compressed text and
106     * hash on compressed & encrypted text
107     **< 2 entries in CpaDcChainSessionSetupData array:
108     * 1st entry is for compression setup data
109     * 2nd entry is for encryption and hash setup data*/
110    CPA_DC_CHAIN_COMPRESS_THEN_AEAD,
111    /**< 2 operations for chaining:
112     * 1st operation is to perform compression on plain text
113     * 2nd operation is to perform AEAD encryption on compressed text
114     **< 2 entries in CpaDcChainSessionSetupData array:
115     * 1st entry is for compression setup data
116     * 2nd entry is for AEAD encryption setup data*/
117    CPA_DC_CHAIN_HASH_THEN_COMPRESS,
118    /**< 2 operations for chaining:
119     * 1st operation is to perform hash on plain text
120     * 2nd operation is to perform compression on plain text
121     **< 2 entries in CpaDcChainSessionSetupData array:
122     * 1st entry is for hash setup data
123     * 2nd entry is for compression setup data*/
124    CPA_DC_CHAIN_HASH_VERIFY_THEN_DECOMPRESS,
125    /**< 2 operations for chaining:
126     * 1st operation is to perform hash verify on compressed text
127     * 2nd operation is to perform decompression on compressed text
128     **< 2 entries in CpaDcChainSessionSetupData array:
129     * 1st entry is for hash setup data
130     * 2nd entry is for decompression setup data*/
131    CPA_DC_CHAIN_DECRYPT_THEN_DECOMPRESS,
132    /**< 2 operations for chaining:
133     * 1st operation is to perform decryption on compressed & encrypted text
134     * 2nd operation is to perform decompression on compressed text
135     **< 2 entries in CpaDcChainSessionSetupData array:
136     * 1st entry is for decryption setup data
137     * 2nd entry is for decompression setup data*/
138    CPA_DC_CHAIN_HASH_VERIFY_DECRYPT_THEN_DECOMPRESS,
139    /**< 2 operations for chaining:
140     * 1st operation is to perform hash verify on compressed & encrypted text
141     * and decryption on compressed & encrypted text
142     * 2nd operation is to perform decompression on compressed text
143     **< 2 entries in CpaDcChainSessionSetupData array:
144     * 1st entry is for hash and decryption setup data
145     * 2nd entry is for decompression setup data*/
146    CPA_DC_CHAIN_DECRYPT_HASH_VERIFY_THEN_DECOMPRESS,
147    /**< 2 operations for chaining:
148     * 1st operation is to perform decryption on compressed & encrypted text
149     * and hash verify on compressed text
150     * 2nd operation is to perform decompression on compressed text
151     **< 2 entries in CpaDcChainSessionSetupData array:
152     * 1st entry is for decryption and hash setup data
153     * 2nd entry is for decompression setup data*/
154    CPA_DC_CHAIN_AEAD_THEN_DECOMPRESS,
155    /**< 2 operations for chaining:
156     * 1st operation is to perform AEAD decryption on compressed & encrypted text
157     * 2nd operation is to perform decompression on compressed text
158     **< 2 entries in CpaDcChainSessionSetupData array:
159     * 1st entry is for AEAD decryption setup data
160     * 2nd entry is for decompression setup data*/
161    CPA_DC_CHAIN_DECOMPRESS_THEN_HASH_VERIFY,
162    /**< 2 operations for chaining:
163     * 1st operation is to perform decompression on compressed text
164     * 2nd operation is to perform hash verify on plain text
165     **< 2 entries in CpaDcChainSessionSetupData array:
166     * 1st entry is for decompression setup data
167     * 2nd entry is for hash setup data*/
168    CPA_DC_CHAIN_COMPRESS_THEN_AEAD_THEN_HASH,
169    /**< 3 operations for chaining:
170     * 1st operation is to perform compression on plain text
171     * 2nd operation is to perform AEAD encryption compressed text
172     * 3rd operation is to perfom hash on compressed & encrypted text
173     **< 3 entries in CpaDcChainSessionSetupData array:
174     * 1st entry is for compression setup data
175     * 2nd entry is for AEAD encryption setup data
176     * 3rd entry is for hash setup data*/
177} CpaDcChainOperations;
178
179/**
180 *****************************************************************************
181 * @ingroup cpaDcChain
182 *      Supported session types for data compression chaining.
183 *
184 * @description
185 *      This enumeration lists the supported session types
186 *      for data compression chaining.
187 *****************************************************************************/
188typedef enum _CpaDcChainSessionType
189{
190    CPA_DC_CHAIN_COMPRESS_DECOMPRESS,
191    /**< Indicate the session is for compression or decompression */
192    CPA_DC_CHAIN_SYMMETRIC_CRYPTO,
193    /**< Indicate the session is for symmetric crypto */
194} CpaDcChainSessionType;
195
196/**
197 *****************************************************************************
198 * @ingroup cpaDcChain
199 *      Chaining Session Setup Data.
200 * @description
201 *      This structure contains data relating to set up chaining sessions. The
202 *      client needs to complete the information in this structure in order to
203 *      setup chaining sessions.
204 *
205 ****************************************************************************/
206typedef struct _CpaDcChainSessionSetupData {
207    CpaDcChainSessionType sessType;
208    /**Indicate the type for this session */
209    union {
210        CpaDcSessionSetupData *pDcSetupData;
211        /**< Pointer to compression session setup data */
212        CpaCySymSessionSetupData *pCySetupData;
213        /**< Pointer to symmectric crypto session setup data */
214    };
215} CpaDcChainSessionSetupData;
216
217/**
218 *****************************************************************************
219 * @ingroup cpaDcChain
220 *      Compression chaining request input parameters.
221 * @description
222 *      This structure contains the request information to use with
223 *      compression chaining operations.
224 *
225 ****************************************************************************/
226typedef struct _CpaDcChainOpData {
227    CpaDcChainSessionType opType;
228    /**< Indicate the type for this operation */
229    union {
230        CpaDcOpData *pDcOp;
231        /**< Pointer to compression operation data */
232        CpaCySymOpData *pCySymOp;
233        /**< Pointer to symmectric crypto operation data */
234    };
235} CpaDcChainOpData;
236
237/**
238 *****************************************************************************
239 * @ingroup cpaDcChain
240 *      Chaining request results data
241 * @description
242 *      This structure contains the request results.
243 *
244 ****************************************************************************/
245typedef struct _CpaDcChainRqResults {
246    CpaDcReqStatus dcStatus;
247    /**< Additional status details from compression accelerator */
248    CpaStatus cyStatus;
249    /**< Additional status details from symmetric crypto accelerator */
250    CpaBoolean verifyResult;
251    /**<  This parameter is valid when the verifyDigest option is set in the
252     * CpaCySymSessionSetupData structure. A value of CPA_TRUE indicates
253     * that the compare succeeded. A value of CPA_FALSE indicates that the
254     * compare failed */
255    Cpa32U produced;
256    /**< Octets produced to the output buffer */
257    Cpa32U consumed;
258    /**< Octets consumed from the input buffer */
259    Cpa32U crc32;
260    /**< crc32 checksum produced by chaining operations */
261    Cpa32U adler32;
262    /**< adler32 checksum produced by chaining operations */
263}CpaDcChainRqResults;
264
265/**
266 *****************************************************************************
267 * @ingroup cpaDcChain
268 *      Get the size of the memory required to hold the chaining sessions
269 *      information.
270 *
271 * @description
272 *      The client of the Data Compression API is responsible for
273 *      allocating sufficient memory to hold chaining sessions information.
274 *      This function provides a way for determining the size of chaining
275 *      sessions.
276 *
277 * @context
278 *      No restrictions
279 * @assumptions
280 *      None
281 * @sideEffects
282 *      None
283 * @blocking
284 *      No
285 * @reentrant
286 *      No
287 * @threadSafe
288 *      Yes
289 *
290 * @param[in] dcInstance             Instance handle.
291 * @param[in] operation              The operation for chaining
292 * @param[in] numSessions            Number of sessions for the chaining
293 * @param[in] pSessionData           Pointer to an array of
294 *                                   CpaDcChainSessionSetupData structures.
295 *                                   There should be numSessions entries in
296 *                                   the array.
297 * @param[out] pSessionSize          On return, this parameter will be the size
298 *                                   of the memory that will be required by
299 *                                   cpaDcChainInitSession() for session data.
300 *
301 * @retval CPA_STATUS_SUCCESS        Function executed successfully.
302 * @retval CPA_STATUS_FAIL           Function failed.
303 * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
304 * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
305 *
306 * @pre
307 *      None
308 * @post
309 *      None
310 * @note
311 *      Only a synchronous version of this function is provided.
312 *
313 * @see
314 *      cpaDcChainInitSession()
315 *
316 *****************************************************************************/
317CpaStatus
318cpaDcChainGetSessionSize(CpaInstanceHandle dcInstance,
319        CpaDcChainOperations operation,
320        Cpa8U numSessions,
321        CpaDcChainSessionSetupData *pSessionData,
322        Cpa32U* pSessionSize);
323
324/**
325 *****************************************************************************
326 * @ingroup cpaDcChain
327 *      Initialize data compression chaining session
328 *
329 * @description
330 *      This function is used to initialize compression/decompression chaining
331 *      sessions.
332 *      This function returns a unique session handle each time this function
333 *      is invoked.
334 *      If the session has been configured with a callback function, then
335 *      the order of the callbacks are guaranteed to be in the same order the
336 *      compression or decompression requests were submitted for each session,
337 *      so long as a single thread of execution is used for job submission.
338 *
339 * @context
340 *      This is a synchronous function and it cannot sleep. It can be executed
341 *      in a context that does not permit sleeping.
342 * @assumptions
343 *      None
344 * @sideEffects
345 *      None
346 * @blocking
347 *      No
348 * @reentrant
349 *      No
350 * @threadSafe
351 *      Yes
352 *
353 * @param[in]     dcInstance        Instance handle derived from discovery
354 *                                  functions.
355 * @param[in,out] pSessionHandle    Pointer to a session handle.
356 * @param[in]     operation         The operations for chaining
357 * @param[in]     numSessions       Number of sessions for chaining
358 * @param[in,out] pSessionData      Pointer to an array of
359 *                                  CpaDcChainSessionSetupData structures.
360 *                                  There should be numSessions entries in
361 *                                  the array.
362 * @param[in]     callbackFn        For synchronous operation this callback
363 *                                  shall be a null pointer.
364 *
365 * @retval CPA_STATUS_SUCCESS        Function executed successfully.
366 * @retval CPA_STATUS_FAIL           Function failed.
367 * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
368 * @retval CPA_STATUS_RESOURCE       Error related to system resources.
369 * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
370 *                                   the request.
371 * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
372 *
373 * @pre
374 *      dcInstance has been started using cpaDcStartInstance.
375 * @post
376 *      None
377 * @note
378 *      Only a synchronous version of this function is provided.
379 *
380 *  pSessionData Setup Rules
381 *  -# Each element in CpaDcChainSessionSetupData structure array provides
382 *     (de)compression or a symmetric crypto session setup data.
383 *
384 *  -# The supported chaining operations are listed in CpaDcChainOperations.
385 *     This enum indicates the number of operations in a chain and the order
386 *     in which they are performed.
387 *
388 *  -# The order of entries in pSessionData[] should be consistent with the
389 *     CpaDcChainOperations perform order.
390 *     As an example, for CPA_DC_CHAIN_COMPRESS_THEN_ENCRYPT, pSessionData[0]
391 *     holds the compression setup data and pSessionData[1] holds the
392 *     encryption setup data..
393 *
394 *  -# The numSessions for each chaining operation are provided in
395 *     the comments of enum CpaDcChainOperations.
396 *
397 *  -# For a (de)compression session, the corresponding
398 *     pSessionData[]->sessType should be set to
399 *     CPA_DC_CHAIN_COMPRESS_DECOMPRESS and pSessionData[]->pDcSetupData
400 *     should point to a CpaDcSessionSetupData structure.
401 *
402 *  -# For a symmetric crypto session, the corresponding
403 *     pSessionData[]->sessType should be set to CPA_DC_CHAIN_SYMMETRIC_CRYPTO
404 *     and pSessionData[]->pCySetupData should point to a
405 *     CpaCySymSessionSetupData structure.
406 *
407 *  -# Combined compression sessions are not supported for chaining.
408 *
409 *  -# Stateful compression is not supported for chaining.
410 *
411 *  -# Both CRC32 and  Adler32 over the input data are supported for chaining.
412 *
413 * @see
414 *      None
415 *
416 *****************************************************************************/
417CpaStatus
418cpaDcChainInitSession(CpaInstanceHandle dcInstance,
419        CpaDcSessionHandle pSessionHandle,
420        CpaDcChainOperations operation,
421        Cpa8U numSessions,
422        CpaDcChainSessionSetupData *pSessionData,
423        CpaDcCallbackFn callbackFn);
424
425/**
426 *****************************************************************************
427 * @ingroup cpaDcChain
428 *       Reset a compression chaining session.
429 *
430 * @description
431 *      This function will reset a previously initialized session handle.
432 *      Reset will fail if outstanding calls still exist for the initialized
433 *      session handle.
434 *      The client needs to retry the reset function at a later time.
435 *
436 * @context
437 *      This is a synchronous function that cannot sleep. It can be
438 *      executed in a context that does not permit sleeping.
439 * @assumptions
440 *      None
441 * @sideEffects
442 *      None
443 * @blocking
444 *      No.
445 * @reentrant
446 *      No
447 * @threadSafe
448 *      Yes
449 *
450 * @param[in]      dcInstance      Instance handle.
451 * @param[in,out]  pSessionHandle  Session handle.
452 *
453 * @retval CPA_STATUS_SUCCESS        Function executed successfully.
454 * @retval CPA_STATUS_FAIL           Function failed.
455 * @retval CPA_STATUS_RETRY          Resubmit the request.
456 * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
457 * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
458 *
459 * @pre
460 *      The component has been initialized via cpaDcStartInstance function.
461 *      The session has been initialized via cpaDcChainInitSession function.
462 * @post
463 *      None
464 * @note
465 *      This is a synchronous function and has no completion callback
466 *      associated with it.
467 *
468 * @see
469 *      cpaDcChainInitSession()
470 *
471 *****************************************************************************/
472CpaStatus
473cpaDcChainResetSession(const CpaInstanceHandle dcInstance,
474        CpaDcSessionHandle pSessionHandle);
475
476
477/**
478 *****************************************************************************
479 * @ingroup cpaDcChain
480 *      Remove a compression chaining session.
481 *
482 * @description
483 *      This function will remove a previously initialized session handle
484 *      and the installed callback handler function. Removal will fail if
485 *      outstanding calls still exist for the initialized session handle.
486 *      The client needs to retry the remove function at a later time.
487 *      The memory for the session handle MUST not be freed until this call
488 *      has completed successfully.
489 *
490 * @context
491 *      This is a synchronous function that cannot sleep. It can be executed
492 *      in a context that does not permit sleeping.
493 * @assumptions
494 *      None
495 * @sideEffects
496 *      None
497 * @blocking
498 *      No.
499 * @reentrant
500 *      No
501 * @threadSafe
502 *      Yes
503 *
504 * @param[in]      dcInstance      Instance handle.
505 * @param[in,out]  pSessionHandle  Session handle.
506 *
507 * @retval CPA_STATUS_SUCCESS        Function executed successfully.
508 * @retval CPA_STATUS_FAIL           Function failed.
509 * @retval CPA_STATUS_RETRY          Resubmit the request.
510 * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
511 * @retval CPA_STATUS_RESOURCE       Error related to system resources.
512 * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
513 *                                   the request.
514 * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
515 *
516 * @pre
517 *      The component has been initialized via cpaDcStartInstance function.
518 * @post
519 *      None
520 * @note
521 *      This is a synchronous function and has no completion callback
522 *      associated with it.
523 *
524 * @see
525 *      cpaDcChainInitSession()
526 *
527 *****************************************************************************/
528CpaStatus
529cpaDcChainRemoveSession(const CpaInstanceHandle dcInstance,
530        CpaDcSessionHandle pSessionHandle);
531
532/**
533 *****************************************************************************
534 * @ingroup cpaDcChain
535 *      Submit a request to perform chaining operations.
536 *
537 * @description
538 *      This function is used to perform chaining operations over data from
539 *      the source buffer.
540 *
541 * @context
542 *      When called as an asynchronous function it cannot sleep. It can be
543 *      executed in a context that does not permit sleeping.
544 *      When called as a synchronous function it may sleep. It MUST NOT be
545 *      executed in a context that DOES NOT permit sleeping.
546 * @assumptions
547 *      None
548 * @sideEffects
549 *      None
550 * @blocking
551 *      Yes when configured to operate in synchronous mode.
552 * @reentrant
553 *      No
554 * @threadSafe
555 *      Yes
556 *
557 * @param[in]     dcInstance        Target service instance.
558 * @param[in,out] pSessionHandle    Session handle.
559 * @param[in]     pSrcBuff          Pointer to input data buffer.
560 * @param[out]    pDestBuff         Pointer to output data buffer.
561 * @param[in]     operation         Operation for the chaining request
562 * @param[in]     numOpDatas        The entries size CpaDcChainOpData array
563 * @param[in]     pChainOpData      Pointer to an array of CpaDcChainOpData
564 *                                  structures. There should be numOpDatas
565 *                                  entries in the array.
566 * @param[in,out] pResults          Pointer to CpaDcChainRqResults structure.
567 * @param[in]     callbackTag       User supplied value to help correlate
568 *                                  the callback with its associated request.
569 *
570 * @retval CPA_STATUS_SUCCESS       Function executed successfully.
571 * @retval CPA_STATUS_FAIL          Function failed.
572 * @retval CPA_STATUS_RETRY         Resubmit the request.
573 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
574 * @retval CPA_STATUS_RESOURCE      Error related to system resources.
575 * @retval CPA_DC_BAD_DATA          The input data was not properly formed.
576 * @retval CPA_STATUS_RESTARTING    API implementation is restarting. Resubmit
577 *                                  the request.
578 * @retval CPA_STATUS_UNSUPPORTED   Function is not supported.
579 *
580 * @pre
581 *     pSessionHandle has been setup using cpaDcChainInitSession()
582 * @post
583 *     pSessionHandle has session related state information
584 * @note
585 *     This function passes control to the compression service for chaining
586 *     processing, the supported chaining operations are described in
587 *     CpaDcChainOperations.
588 *
589 *  pChainOpData Setup Rules
590 *  -# Each element in CpaDcChainOpData structure array holds either a
591 *     (de)compression or a symmetric crypto operation data.
592 *
593 *  -# The order of entries in pChainOpData[] must be consistent with the
594 *     order of operations described for the chaining operation in
595 *     CpaDcChainOperations.
596 *     As an example, for CPA_DC_CHAIN_COMPRESS_THEN_ENCRYPT, pChainOpData[0]
597 *     must contain the compression operation data and pChainOpData[1] must
598 *     contain the encryption operation data.
599 *
600 *  -# The numOpDatas for each chaining operation are specified in the
601 *     comments for the operation in CpaDcChainOperations.
602 *
603 *  -# For a (de)compression operation, the corresponding
604 *     pChainOpData[]->opType should be set to
605 *     CPA_DC_CHAIN_COMPRESS_DECOMPRESS and pChainOpData[]->pDcOp should
606 *     point to a CpaDcOpData structure.
607 *
608 *  -# For a symmetric crypto operation,  the corresponding
609 *     pChainOpData[]->opType should be set to
610 *     CPA_DC_CHAIN_SYMMETRIC_CRYPTO and pChainOpData[]->pCySymOp should
611 *     point to a CpaCySymOpData structure.
612 *
613 *   -# Stateful compression is not supported for chaining.
614 *
615 *   -# Partial packet processing is not supported.
616 *
617 *   This function has identical buffer processing rules as
618 *   cpaDcCompressData().
619 *
620 *   This function has identical checksum processing rules as
621 *   cpaDcCompressData(), except:
622 *   -# pResults->crc32 is available to application if
623 *      CpaDcSessionSetupData->checksum is set to CPA_DC_CRC32
624 *
625 *   -# pResults->adler32 is available to application if
626 *      CpaDcSessionSetupData->checksum is set to CPA_DC_ADLER32
627 *
628 *   -# Both pResults->crc32 and pResults->adler32 are available if
629 *      CpaDcSessionSetupData->checksum is set to CPA_DC_CRC32_ADLER32
630 *
631 *  Synchronous or asynchronous operation of the API is determined by
632 *  the value of the callbackFn parameter passed to cpaDcChainInitSession()
633 *  when the sessionHandle was setup. If a non-NULL value was specified
634 *  then the supplied callback function will be invoked asynchronously
635 *  with the response of this request.
636 *
637 *  This function has identical response ordering rules as
638 *  cpaDcCompressData().
639 *
640 * @see
641 *      cpaDcCompressData
642 *
643 *****************************************************************************/
644CpaStatus
645cpaDcChainPerformOp(CpaInstanceHandle dcInstance,
646        CpaDcSessionHandle   pSessionHandle,
647        CpaBufferList        *pSrcBuff,
648        CpaBufferList        *pDestBuff,
649        CpaDcChainOperations operation,
650        Cpa8U                numOpDatas,
651        CpaDcChainOpData     *pChainOpData,
652        CpaDcChainRqResults  *pResults,
653        void                 *callbackTag );
654
655#ifdef __cplusplus
656} /* close the extern "C" { */
657#endif
658
659#endif /* CPA_DC_CHAIN_H */
660