xref: /freebsd/sys/dev/qat/qat_api/include/dc/cpa_dc.h (revision 3a3af6b2a160bea72509a9d5ef84e25906b0478a)
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_dc.h
45  *
46  * @defgroup cpaDc Data Compression API
47  *
48  * @ingroup cpa
49  *
50  * @description
51  *      These functions specify the API for Data Compression operations.
52  *
53  * @remarks
54  *
55  *
56  *****************************************************************************/
57 
58 #ifndef CPA_DC_H
59 #define CPA_DC_H
60 
61 #ifdef __cplusplus
62 extern"C" {
63 #endif
64 
65 
66 #ifndef CPA_H
67 #include "cpa.h"
68 #endif
69 
70 /**
71  *****************************************************************************
72  * @ingroup cpaDc
73  *      CPA Dc Major Version Number
74  * @description
75  *      The CPA_DC API major version number. This number will be incremented
76  *      when significant churn to the API has occurred. The combination of the
77  *      major and minor number definitions represent the complete version number
78  *      for this interface.
79  *
80  *****************************************************************************/
81 #define CPA_DC_API_VERSION_NUM_MAJOR (2)
82 
83 /**
84  *****************************************************************************
85  * @ingroup cpaDc
86  *       CPA DC Minor Version Number
87  * @description
88  *      The CPA_DC API minor version number. This number will be incremented
89  *      when minor changes to the API has occurred. The combination of the major
90  *      and minor number definitions represent the complete version number for
91  *      this interface.
92  *
93  *****************************************************************************/
94 #define CPA_DC_API_VERSION_NUM_MINOR (2)
95 
96 /**
97  *****************************************************************************
98  * @ingroup cpaDc
99  *      Compression API session handle type
100  *
101  * @description
102  *      Handle used to uniquely identify a Compression API session handle. This
103  *      handle is established upon registration with the API using
104  *      cpaDcInitSession().
105  *
106  *
107  *
108  *****************************************************************************/
109 typedef void * CpaDcSessionHandle;
110 
111 
112 /**
113  *****************************************************************************
114  * @ingroup cpaDc
115  *      Supported file types
116  *
117  * @description
118  *      This enumerated lists identified file types.  Used to select Huffman
119  *      trees.
120  *      File types are associated with Precompiled Huffman Trees.
121  *
122  * @deprecated
123  *      As of v1.6 of the Compression API, this enum has been deprecated.
124  *
125  *****************************************************************************/
126 typedef enum _CpaDcFileType
127 {
128     CPA_DC_FT_ASCII,
129     /**< ASCII File Type */
130     CPA_DC_FT_CSS,
131     /**< Cascading Style Sheet File Type  */
132     CPA_DC_FT_HTML,
133     /**< HTML or XML (or similar) file type */
134     CPA_DC_FT_JAVA,
135     /**< File Java code or similar */
136     CPA_DC_FT_OTHER
137     /**< Other file types */
138 } CpaDcFileType;
139 /**
140  *****************************************************************************
141  * @ingroup cpaDc
142  *      Supported flush flags
143  *
144  * @description
145  *      This enumerated list identifies the types of flush that can be
146  *      specified for stateful and stateless cpaDcCompressData and
147  *      cpaDcDecompressData functions.
148  *
149  *****************************************************************************/
150 typedef enum _CpaDcFlush
151 {
152     CPA_DC_FLUSH_NONE = 0,
153     /**< No flush request. */
154     CPA_DC_FLUSH_FINAL,
155     /**< Indicates that the input buffer contains all of the data for
156     the compression session allowing any buffered data to be released.
157     For Deflate, BFINAL is set in the compression header.*/
158     CPA_DC_FLUSH_SYNC,
159     /**< Used for stateful deflate compression to indicate that all pending
160     output is flushed, byte aligned, to the output buffer. The session state
161     is not reset.*/
162     CPA_DC_FLUSH_FULL
163     /**< Used for deflate compression to indicate that all pending output is
164     flushed to the output buffer and the session state is reset.*/
165 } CpaDcFlush;
166 /**
167  *****************************************************************************
168  * @ingroup cpaDc
169  *      Supported Huffman Tree types
170  *
171  * @description
172  *      This enumeration lists support for Huffman Tree types.
173  *      Selecting Static Huffman trees generates compressed blocks with an RFC
174  *      1951 header specifying "compressed with fixed Huffman trees".
175  *
176  *      Selecting Full Dynamic Huffman trees generates compressed blocks with
177  *      an RFC 1951 header specifying "compressed with dynamic Huffman codes".
178  *      The headers are calculated on the data being compressed, requiring two
179  *      passes.
180  *
181  *      Selecting Precompiled Huffman Trees generates blocks with RFC 1951
182  *      dynamic headers.  The headers are pre-calculated and are specified by
183  *      the file type.
184  *
185  *****************************************************************************/
186 typedef enum _CpaDcHuffType
187 {
188     CPA_DC_HT_STATIC,
189     /**< Static Huffman Trees */
190     CPA_DC_HT_PRECOMP,
191     /**< Precompiled Huffman Trees  */
192     CPA_DC_HT_FULL_DYNAMIC
193     /**< Full Dynamic Huffman Trees */
194 } CpaDcHuffType;
195 
196 /**
197  *****************************************************************************
198  * @ingroup cpaDc
199  *      Supported compression types
200  *
201  * @description
202  *      This enumeration lists the supported data compression algorithms.
203  *      In combination with CpaDcChecksum it is used to decide on the file
204  *      header and footer format.
205  *
206  * @deprecated
207  *      As of v1.6 of the Compression API, CPA_DC_LZS, CPA_DC_ELZS and
208  *      CPA_DC_LZSS have been deprecated and should not be used.
209  *
210  *****************************************************************************/
211 typedef enum _CpaDcCompType
212 {
213     CPA_DC_LZS,
214     /**< LZS Compression */
215     CPA_DC_ELZS,
216     /**< Extended LZS Compression */
217     CPA_DC_LZSS,
218     /**< LZSS Compression */
219     CPA_DC_DEFLATE
220     /**< Deflate Compression */
221 } CpaDcCompType;
222 
223 /**
224  *****************************************************************************
225  * @ingroup cpaDc
226  *      Supported checksum algorithms
227  *
228  * @description
229  *      This enumeration lists the supported checksum algorithms
230  *      Used to decide on file header and footer specifics.
231  *
232  *****************************************************************************/
233 typedef enum _CpaDcChecksum
234 {
235     CPA_DC_NONE,
236     /**< No checksums required */
237     CPA_DC_CRC32,
238     /**<  application requires a CRC32 checksum */
239     CPA_DC_ADLER32
240     /**< Application requires Adler-32 checksum */
241 } CpaDcChecksum;
242 
243 
244 /**
245  *****************************************************************************
246  * @ingroup cpaDc
247  *      Supported session directions
248  *
249  * @description
250  *      This enumerated list identifies the direction of a session.
251  *      A session can be compress, decompress or both.
252  *
253  *****************************************************************************/
254 typedef enum _CpaDcSessionDir
255 {
256     CPA_DC_DIR_COMPRESS,
257     /**< Session will be used for compression */
258     CPA_DC_DIR_DECOMPRESS,
259     /**< Session will be used for decompression */
260     CPA_DC_DIR_COMBINED
261     /**< Session will be used for both compression and decompression */
262 } CpaDcSessionDir;
263 
264 /**
265  *****************************************************************************
266  * @ingroup cpaDc
267  *      Supported session state settings
268  *
269  * @description
270  *      This enumerated list identifies the stateful setting of a session.
271  *      A session can be either stateful or stateless.
272  *
273  *      Stateful sessions are limited to have only one in-flight message per
274  *      session. This means a compress or decompress request must be complete
275  *      before a new request can be started. This applies equally to sessions
276  *      that are uni-directional in nature and sessions that are combined
277  *      compress and decompress. Completion occurs when the synchronous function
278  *      returns, or when the asynchronous callback function has completed.
279  *
280  *****************************************************************************/
281 typedef enum _CpaDcSessionState
282 {
283     CPA_DC_STATEFUL,
284     /**< Session will be stateful, implying that state may need to be
285         saved in some situations */
286     CPA_DC_STATELESS
287     /**< Session will be stateless, implying no state will be stored*/
288 } CpaDcSessionState;
289 
290 /**
291  *****************************************************************************
292  * @ingroup cpaDc
293  *      Supported compression levels
294  *
295  * @description
296  *      This enumerated lists the supported compressed levels.
297  *      Lower values will result in less compressibility in less time.
298  *
299  *
300  *****************************************************************************/
301 typedef enum _CpaDcCompLvl
302 {
303     CPA_DC_L1 = 1,
304     /**< Compression level 1 */
305     CPA_DC_L2,
306     /**< Compression level 2 */
307     CPA_DC_L3,
308     /**< Compression level 3 */
309     CPA_DC_L4,
310     /**< Compression level 4 */
311     CPA_DC_L5,
312     /**< Compression level 5 */
313     CPA_DC_L6,
314     /**< Compression level 6 */
315     CPA_DC_L7,
316     /**< Compression level 7 */
317     CPA_DC_L8,
318     /**< Compression level 8 */
319     CPA_DC_L9
320     /**< Compression level 9 */
321 } CpaDcCompLvl;
322 
323 /**
324  *****************************************************************************
325  * @ingroup cpaDc
326  *      Supported additional details from accelerator
327  *
328  * @description
329  *      This enumeration lists the supported additional details from the
330  *      accelerator.  These may be useful in determining the best way to
331  *      recover from a failure.
332  *
333  *
334  *****************************************************************************/
335 typedef enum _CpaDcReqStatus
336 {
337     CPA_DC_OK = 0,
338     /**< No error detected by compression slice */
339     CPA_DC_INVALID_BLOCK_TYPE = -1,
340     /**< Invalid block type (type == 3) */
341     CPA_DC_BAD_STORED_BLOCK_LEN = -2,
342     /**< Stored block length did not match one's complement */
343     CPA_DC_TOO_MANY_CODES  = -3,
344     /**< Too many length or distance codes */
345     CPA_DC_INCOMPLETE_CODE_LENS = -4,
346     /**< Code length codes incomplete */
347     CPA_DC_REPEATED_LENS = -5,
348     /**< Repeated lengths with no first length */
349     CPA_DC_MORE_REPEAT = -6,
350     /**< Repeat more than specified lengths */
351     CPA_DC_BAD_LITLEN_CODES = -7,
352     /**< Invalid literal/length code lengths */
353     CPA_DC_BAD_DIST_CODES = -8,
354     /**< Invalid distance code lengths */
355     CPA_DC_INVALID_CODE = -9,
356     /**< Invalid literal/length or distance code in fixed or dynamic block */
357     CPA_DC_INVALID_DIST = -10,
358     /**< Distance is too far back in fixed or dynamic block */
359     CPA_DC_OVERFLOW = -11,
360     /**< Overflow detected.  This is an indication that output buffer has overflowed.
361      * For stateful sessions, this is a warning (the input can be adjusted and
362      * resubmitted).
363      * For stateless sessions this is an error condition */
364     CPA_DC_SOFTERR = -12,
365     /**< Other non-fatal detected */
366     CPA_DC_FATALERR = -13,
367     /**< Fatal error detected */
368     CPA_DC_MAX_RESUBITERR = -14,
369     /**< On an error being detected, the firmware attempted to correct and resubmitted the
370      * request, however, the maximum resubmit value was exceeded */
371     CPA_DC_INCOMPLETE_FILE_ERR = -15,
372     /**< The input file is incomplete.  Note this is an indication that the request was
373      * submitted with a CPA_DC_FLUSH_FINAL, however, a BFINAL bit was not found in the
374      * request */
375     CPA_DC_WDOG_TIMER_ERR = -16,
376    /**< The request was not completed as a watchdog timer hardware event occurred */
377     CPA_DC_EP_HARDWARE_ERR = -17,
378     /**< Request was not completed as an end point hardware error occurred (for
379      * example, a parity error) */
380     CPA_DC_VERIFY_ERROR = -18,
381     /**< Error detected during "compress and verify" operation */
382     CPA_DC_EMPTY_DYM_BLK = -19,
383     /**< Decompression request contained an empty dynamic stored block
384      * (not supported) */
385     CPA_DC_CRC_INTEG_ERR = -20,
386     /**< A data integrity CRC error was detected */
387 } CpaDcReqStatus;
388 
389 /**
390  *****************************************************************************
391  * @ingroup cpaDc
392  *      Supported modes for automatically selecting the best compression type.
393  *
394  * @description
395  *      This enumeration lists the supported modes for automatically selecting
396  *      the best Huffman encoding which would lead to the best compression
397  *      results.
398  *
399  *      The CPA_DC_ASB_UNCOMP_STATIC_DYNAMIC_WITH_NO_HDRS value is deprecated
400  *      and should not be used.
401  *
402  *****************************************************************************/
403 typedef enum _CpaDcAutoSelectBest
404 {
405     CPA_DC_ASB_DISABLED = 0,
406     /**< Auto select best mode is disabled */
407     CPA_DC_ASB_STATIC_DYNAMIC = 1,
408     /**< Auto select between static and dynamic compression */
409     CPA_DC_ASB_UNCOMP_STATIC_DYNAMIC_WITH_STORED_HDRS = 2,
410     /**< Auto select between uncompressed, static and dynamic compression,
411      * using stored block deflate headers if uncompressed is selected */
412     CPA_DC_ASB_UNCOMP_STATIC_DYNAMIC_WITH_NO_HDRS = 3
413     /**< Auto select between uncompressed, static and dynamic compression,
414      * using no deflate headers if uncompressed is selected */
415 } CpaDcAutoSelectBest;
416 
417 /**
418  *****************************************************************************
419  * @ingroup cpaDc
420  *      Supported modes for skipping regions of input or output buffers.
421  *
422  * @description
423  *      This enumeration lists the supported modes for skipping regions of
424  *      input or output buffers.
425  *
426  *****************************************************************************/
427 typedef enum _CpaDcSkipMode
428 {
429     CPA_DC_SKIP_DISABLED = 0,
430     /**< Skip mode is disabled */
431     CPA_DC_SKIP_AT_START = 1,
432     /**< Skip region is at the start of the buffer. */
433     CPA_DC_SKIP_AT_END = 2,
434     /**< Skip region is at the end of the buffer. */
435     CPA_DC_SKIP_STRIDE = 3
436     /**< Skip region occurs at regular intervals within the buffer.
437      CpaDcSkipData.strideLength specifies the number of bytes between each
438      skip region. */
439 } CpaDcSkipMode;
440 
441 /**
442  *****************************************************************************
443  * @ingroup cpaDc
444  *      Service specific return codes
445  *
446  * @description
447  *      Compression specific return codes
448  *
449  *
450  *****************************************************************************/
451 
452 #define CPA_DC_BAD_DATA     (-100)
453     /**<Input data in invalid */
454 
455 /**
456  *****************************************************************************
457  * @ingroup cpaDc
458  *      Definition of callback function invoked for asynchronous cpaDc
459  *      requests.
460  *
461  * @description
462  *      This is the prototype for the cpaDc compression callback functions.
463  *      The callback function is registered by the application using the
464  *      cpaDcInitSession() function call.
465  *
466  * @context
467  *      This callback function can be executed in a context that DOES NOT
468  *      permit sleeping to occur.
469  * @assumptions
470  *      None
471  * @sideEffects
472  *      None
473  * @reentrant
474  *      No
475  * @threadSafe
476  *      Yes
477  *
478  * @param callbackTag   User-supplied value to help identify request.
479  * @param status        Status of the operation. Valid values are
480  *                      CPA_STATUS_SUCCESS, CPA_STATUS_FAIL and
481  *                      CPA_STATUS_UNSUPPORTED.
482  *
483  * @retval
484  *      None
485  * @pre
486  *      Component has been initialized.
487  * @post
488  *      None
489  * @note
490  *      None
491  * @see
492  *      None
493  *
494  *****************************************************************************/
495 typedef void (*CpaDcCallbackFn)(
496     void *callbackTag,
497     CpaStatus status);
498 
499 
500 /**
501  *****************************************************************************
502  * @ingroup cpaDc
503  *      Implementation Capabilities Structure
504  * @description
505  *      This structure contains data relating to the capabilities of an
506  *      implementation. The capabilities include supported compression
507  *      algorithms, RFC 1951 options and whether the implementation supports
508  *      both stateful and stateless compress and decompress sessions.
509  *
510  ****************************************************************************/
511 typedef struct _CpaDcInstanceCapabilities  {
512         CpaBoolean  statefulLZSCompression;
513             /**<True if the Instance supports Stateful LZS compression */
514         CpaBoolean  statefulLZSDecompression;
515             /**<True if the Instance supports Stateful LZS decompression */
516         CpaBoolean  statelessLZSCompression;
517             /**<True if the Instance supports Stateless LZS compression */
518         CpaBoolean  statelessLZSDecompression;
519             /**<True if the Instance supports Stateless LZS decompression */
520         CpaBoolean  statefulLZSSCompression;
521             /**<True if the Instance supports Stateful LZSS compression */
522         CpaBoolean  statefulLZSSDecompression;
523             /**<True if the Instance supports Stateful LZSS decompression */
524         CpaBoolean  statelessLZSSCompression;
525             /**<True if the Instance supports Stateless LZSS compression */
526         CpaBoolean  statelessLZSSDecompression;
527             /**<True if the Instance supports Stateless LZSS decompression */
528         CpaBoolean  statefulELZSCompression;
529             /**<True if the Instance supports Stateful Extended LZS
530             compression */
531         CpaBoolean  statefulELZSDecompression;
532             /**<True if the Instance supports Stateful Extended LZS
533             decompression */
534         CpaBoolean  statelessELZSCompression;
535             /**<True if the Instance supports Stateless Extended LZS
536             compression */
537         CpaBoolean  statelessELZSDecompression;
538             /**<True if the Instance supports Stateless Extended LZS
539             decompression */
540         CpaBoolean  statefulDeflateCompression;
541             /**<True if the Instance supports Stateful Deflate compression */
542         CpaBoolean  statefulDeflateDecompression;
543             /**<True if the Instance supports Stateful Deflate
544             decompression */
545         CpaBoolean  statelessDeflateCompression;
546             /**<True if the Instance supports Stateless Deflate compression */
547         CpaBoolean  statelessDeflateDecompression;
548             /**<True if the Instance supports Stateless Deflate
549             decompression */
550         CpaBoolean  checksumCRC32;
551             /**<True if the Instance can calculate a CRC32 checksum over
552                 the uncompressed data*/
553         CpaBoolean  checksumAdler32;
554             /**<True if the Instance can calculate an Adler-32 checksum over
555                 the uncompressed data */
556         CpaBoolean  dynamicHuffman;
557             /**<True if the Instance supports dynamic Huffman trees in deflate
558                 blocks*/
559         CpaBoolean  dynamicHuffmanBufferReq;
560             /**<True if an Instance specific buffer is required to perform
561                 a dynamic Huffman tree deflate request */
562         CpaBoolean  precompiledHuffman;
563             /**<True if the Instance supports precompiled Huffman trees in
564                 deflate blocks*/
565         CpaBoolean  autoSelectBestHuffmanTree;
566             /**<True if the Instance has the ability to automatically select
567                 between different Huffman encoding schemes for better
568                 compression ratios */
569         Cpa8U       validWindowSizeMaskCompression;
570             /**<Bits set to '1' for each valid window size supported by
571                 the compression implementation */
572         Cpa8U       validWindowSizeMaskDecompression;
573             /**<Bits set to '1' for each valid window size supported by
574                 the decompression implementation */
575         Cpa32U      internalHuffmanMem;
576             /**<Number of bytes internally available to be used when
577                     constructing dynamic Huffman trees. */
578         CpaBoolean  endOfLastBlock;
579             /**< True if the Instance supports stopping at the end of the last
580              * block in a deflate stream during a decompression operation and
581              * reporting that the end of the last block has been reached as
582              * part of the CpaDcReqStatus data. */
583         CpaBoolean  reportParityError;
584             /**<True if the instance supports parity error reporting. */
585         CpaBoolean  batchAndPack;
586             /**< True if the instance supports 'batch and pack' compression */
587         CpaBoolean  compressAndVerify;
588             /**<True if the instance supports checking that compressed data,
589              * generated as part of a compression operation, can be
590              * successfully decompressed. */
591         CpaBoolean  compressAndVerifyStrict;
592             /**< True if compressAndVerify is 'strictly' enabled for the
593              * instance. If strictly enabled, compressAndVerify will be enabled
594              * by default for compression operations and cannot be disabled by
595              * setting opData.compressAndVerify=0 with cpaDcCompressData2().
596              * Compression operations with opData.compressAndVerify=0 will
597              * return a CPA_STATUS_INVALID_PARAM error status when in
598              * compressAndVerify strict mode.
599              */
600         CpaBoolean  compressAndVerifyAndRecover;
601             /**<True if the instance supports recovering from errors detected
602              * by compressAndVerify by generating a stored block in the
603              * compressed output data buffer. This stored block replaces any
604              * compressed content that resulted in a compressAndVerify error.
605              */
606         CpaBoolean integrityCrcs;
607             /**<True if the instance supports integrity CRC checking in the
608              * compression/decompression datapath. */
609 } CpaDcInstanceCapabilities;
610 
611 /**
612  *****************************************************************************
613  * @ingroup cpaDc
614  *      Session Setup Data.
615  * @description
616  *      This structure contains data relating to setting up a session. The
617  *      client needs to complete the information in this structure in order to
618  *      setup a session.
619  *
620  * @deprecated
621  *      As of v1.6 of the Compression API, the fileType and deflateWindowSize
622  *      fields in this structure have been deprecated and should not be used.
623  *
624  ****************************************************************************/
625 typedef struct _CpaDcSessionSetupData  {
626         CpaDcCompLvl compLevel;
627           /**<Compression Level from CpaDcCompLvl */
628         CpaDcCompType compType;
629           /**<Compression type from CpaDcCompType */
630         CpaDcHuffType huffType;
631           /**<Huffman type from CpaDcHuffType */
632         CpaDcAutoSelectBest autoSelectBestHuffmanTree;
633           /**<Indicates if and how the implementation should select the best
634            * Huffman encoding. */
635         CpaDcFileType fileType;
636           /**<File type for the purpose of determining Huffman Codes from
637            * CpaDcFileType.
638            * As of v1.6 of the Compression API, this field has been deprecated
639            * and should not be used.  */
640         CpaDcSessionDir sessDirection;
641          /**<Session direction indicating whether session is used for
642             compression, decompression or both */
643         CpaDcSessionState sessState;
644         /**<Session state indicating whether the session should be configured
645             as stateless or stateful */
646         Cpa32U deflateWindowSize;
647         /**<Base 2 logarithm of maximum window size minus 8 (a value of 7 for
648          * a 32K window size). Permitted values are 0 to 7. cpaDcDecompressData
649          * may return an error if an attempt is made to decompress a stream that
650          * has a larger window size.
651          * As of v1.6 of the Compression API, this field has been deprecated and
652          * should not be used. */
653         CpaDcChecksum checksum;
654         /**<Desired checksum required for the session */
655 } CpaDcSessionSetupData;
656 
657 /**
658  *****************************************************************************
659  * @ingroup cpaDc
660  *      Compression Statistics Data.
661  * @description
662  *      This structure contains data elements corresponding to statistics.
663  *      Statistics are collected on a per instance basis and include:
664  *      jobs submitted and completed for both compression and decompression.
665  *
666  ****************************************************************************/
667 typedef struct _CpaDcStats  {
668         Cpa64U numCompRequests;
669           /**< Number of successful compression requests */
670         Cpa64U numCompRequestsErrors;
671           /**< Number of compression requests that had errors and
672              could not be processed */
673         Cpa64U numCompCompleted;
674           /**< Compression requests completed */
675         Cpa64U numCompCompletedErrors;
676           /**< Compression requests not completed due to errors */
677         Cpa64U numCompCnvErrorsRecovered;
678           /**< Compression CNV errors that have been recovered */
679 
680         Cpa64U numDecompRequests;
681           /**< Number of successful decompression requests */
682         Cpa64U numDecompRequestsErrors;
683           /**< Number of decompression requests that had errors and
684              could not be processed */
685         Cpa64U numDecompCompleted;
686           /**< Decompression requests completed */
687         Cpa64U numDecompCompletedErrors;
688           /**< Decompression requests not completed due to errors */
689 
690 } CpaDcStats;
691 
692 /**
693  *****************************************************************************
694  * @ingroup cpaDc
695  *      Request results data
696  * @description
697  *      This structure contains the request results.
698  *
699  *      For stateful sessions the status, produced, consumed and
700  *      endOfLastBlock results are per request values while the checksum
701  *      value is cumulative across all requests on the session so far.
702  *      In this case the checksum value is not guaranteed to be correct
703  *      until the final compressed data has been processed.
704  *
705  *      For stateless sessions, an initial checksum value is passed into
706  *      the stateless operation. Once the stateless operation completes,
707  *      the checksum value will contain checksum produced by the operation.
708  *
709  ****************************************************************************/
710 typedef struct _CpaDcRqResults  {
711         CpaDcReqStatus status;
712           /**< Additional status details from accelerator */
713         Cpa32U produced;
714           /**< Octets produced by the operation */
715         Cpa32U consumed;
716           /**< Octets consumed by the operation */
717         Cpa32U checksum;
718           /**< Initial checksum passed into stateless operations.
719              Will also be updated to the checksum produced by the operation  */
720        CpaBoolean endOfLastBlock;
721           /**< Decompression operation has stopped at the end of the last
722            * block in a deflate stream. */
723 } CpaDcRqResults;
724 
725 /**
726  *****************************************************************************
727  * @ingroup cpaDc
728  *      Integrity CRC calculation details
729  * @description
730  *      This structure contains information about resulting integrity CRC
731  *      calculations performed for a single request.
732  *
733  ****************************************************************************/
734 typedef struct _CpaIntegrityCrc {
735         Cpa32U iCrc;   /**< CRC calculated on request's input  buffer */
736         Cpa32U oCrc;   /**< CRC calculated on request's output buffer */
737 } CpaIntegrityCrc;
738 
739 /**
740  *****************************************************************************
741  * @ingroup cpaDc
742  *      Collection of CRC related data
743  * @description
744  *      This structure contains data facilitating CRC calculations.
745  *      After successful request, this structure will contain
746  *      all resulting CRCs.
747  *      Integrity specific CRCs (when enabled/supported) are located in
748  *      'CpaIntegrityCrc integrityCrc' field.
749  * @note
750  *      this structure must be allocated in physical contiguous memory
751  *
752  ****************************************************************************/
753 typedef struct _CpaCrcData {
754         Cpa32U crc32;
755         /**< CRC32 calculated on the input buffer during compression
756          * requests and on the output buffer during decompression requests. */
757         Cpa32U adler32;
758         /**< ADLER32 calculated on the input buffer during compression
759          * requests and on the output buffer during decompression requests. */
760         CpaIntegrityCrc integrityCrc;
761           /**< Integrity CRCs */
762 } CpaCrcData;
763 
764 /**
765  *****************************************************************************
766  * @ingroup cpaDc
767  *      Skip Region Data.
768  * @description
769  *      This structure contains data relating to configuring skip region
770  *      behaviour. A skip region is a region of an input buffer that
771  *      should be omitted from processing or a region that should be inserted
772  *      into the output buffer.
773  *
774  ****************************************************************************/
775 typedef struct _CpaDcSkipData {
776         CpaDcSkipMode skipMode;
777         /**<Skip mode from CpaDcSkipMode for buffer processing */
778         Cpa32U skipLength;
779         /**<Number of bytes to skip when skip mode is enabled */
780         Cpa32U strideLength;
781         /**<Size of the stride between skip regions when skip mode is
782          * set to CPA_DC_SKIP_STRIDE. */
783         Cpa32U firstSkipOffset;
784         /**< Number of bytes to skip in a buffer before reading/writing the
785          * input/output data. */
786 } CpaDcSkipData;
787 
788 /**
789  *****************************************************************************
790  * @ingroup cpaDc
791  *      (De)Compression request input parameters.
792  * @description
793  *      This structure contains the request information for use with
794  *      compression operations.
795  *
796  ****************************************************************************/
797 typedef struct _CpaDcOpData  {
798         CpaDcFlush flushFlag;
799         /**< Indicates the type of flush to be performed. */
800         CpaBoolean compressAndVerify;
801         /**< If set to true, for compression operations, the implementation
802          * will verify that compressed data, generated by the compression
803          * operation, can be successfully decompressed.
804          * This behavior is only supported for stateless compression.
805          * This behavior is only supported on instances that support the
806          * compressAndVerify capability. */
807         CpaBoolean compressAndVerifyAndRecover;
808         /**< If set to true, for compression operations, the implementation
809          * will automatically recover from a compressAndVerify error.
810          * This behavior is only supported for stateless compression.
811          * This behavior is only supported on instances that support the
812          * compressAndVerifyAndRecover capability.
813          * The compressAndVerify field in CpaDcOpData MUST be set to CPA_TRUE
814          * if compressAndVerifyAndRecover is set to CPA_TRUE. */
815         CpaBoolean integrityCrcCheck;
816         /**< If set to true, the implementation will verify that data
817          * integrity is preserved through the processing pipeline.
818          * This behaviour supports stateless and stateful behavior for
819          * both static and dynamic Huffman encoding.
820          *
821          * Integrity CRC checking is not supported for decompression operations
822          * over data that contains multiple gzip headers. */
823         CpaBoolean verifyHwIntegrityCrcs;
824         /**< If set to true, software calculated CRCs will be compared
825          * against hardware generated integrity CRCs to ensure that data
826          * integrity is maintained when transferring data to and from the
827          * hardware accelerator. */
828         CpaDcSkipData inputSkipData;
829         /**< Optional skip regions in the input buffers */
830         CpaDcSkipData outputSkipData;
831         /**< Optional skip regions in the output buffers */
832         CpaCrcData *pCrcData;
833         /**< Pointer to CRCs for this operation, when integrity checks
834          * are enabled. */
835 } CpaDcOpData;
836 
837 /**
838  *****************************************************************************
839  * @ingroup cpaDc
840  *      Retrieve Instance Capabilities
841  *
842  * @description
843  *      This function is used to retrieve the capabilities matrix of
844  *      an instance.
845  *
846  * @context
847  *      This function shall not be called in an interrupt context.
848  * @assumptions
849  *      None
850  * @sideEffects
851  *      None
852  * @blocking
853  *      Yes
854  * @reentrant
855  *      No
856  * @threadSafe
857  *      Yes
858  *
859  * @param[in]       dcInstance      Instance handle derived from discovery
860  *                                  functions
861  * @param[in,out]   pInstanceCapabilities   Pointer to a capabilities struct
862  *
863  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
864  * @retval CPA_STATUS_FAIL           Function failed.
865  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
866  * @retval CPA_STATUS_RESOURCE       Error related to system resources.
867  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
868  *                                   the request.
869  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
870  *
871  * @pre
872  *      None
873  * @post
874  *      None
875  * @note
876  *      Only a synchronous version of this function is provided.
877  *
878  * @see
879  *      None
880  *
881  *****************************************************************************/
882 CpaStatus
883 cpaDcQueryCapabilities(  CpaInstanceHandle dcInstance,
884         CpaDcInstanceCapabilities *pInstanceCapabilities );
885 
886 /**
887  *****************************************************************************
888  * @ingroup cpaDc
889  *      Initialize compression decompression session
890  *
891  * @description
892  *      This function is used to initialize a compression/decompression
893  *      session.
894  *      This function specifies a BufferList for context data.
895  *      A single session can be used for both compression and decompression
896  *      requests.  Clients MAY register a callback
897  *      function for the compression service using this function.
898  *      This function returns a unique session handle each time this function
899  *      is invoked.
900  *      If the session has been configured with a callback function, then
901  *      the order of the callbacks are guaranteed to be in the same order the
902  *      compression or decompression requests were submitted for each session,
903  *      so long as a single thread of execution is used for job submission.
904  *
905  * @context
906  *      This is a synchronous function and it cannot sleep. It can be executed in
907  *      a context that does not permit sleeping.
908  * @assumptions
909  *      None
910  * @sideEffects
911  *      None
912  * @blocking
913  *      No
914  * @reentrant
915  *      No
916  * @threadSafe
917  *      Yes
918  *
919  * @param[in]       dcInstance      Instance handle derived from discovery
920  *                                  functions.
921  * @param[in,out]   pSessionHandle  Pointer to a session handle.
922  * @param[in,out]   pSessionData    Pointer to a user instantiated structure
923  *                                  containing session data.
924  * @param[in]       pContextBuffer  pointer to context buffer.  This is not
925  *                                  required for stateless operations.
926  *                                  The total size of the buffer list must
927  *                                  be equal to or larger than the specified
928  *                                  contextSize retrieved from the
929  *                                  cpaDcGetSessionSize() function.
930  * @param[in]        callbackFn     For synchronous operation this callback
931  *                                  shall be a null pointer.
932  *
933  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
934  * @retval CPA_STATUS_FAIL           Function failed.
935  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
936  * @retval CPA_STATUS_RESOURCE       Error related to system resources.
937  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
938  *                                   the request.
939  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
940  *
941  * @pre
942  *      dcInstance has been started using cpaDcStartInstance.
943  * @post
944  *      None
945  * @note
946  *      Only a synchronous version of this function is provided.
947  *
948  *      This initializes opaque data structures in the session handle. Data
949  *      compressed under this session will be compressed to the level
950  *      specified in the pSessionData structure. Lower compression level
951  *      numbers indicate a request for faster compression at the
952  *      expense of compression ratio.  Higher compression level numbers
953  *      indicate a request for higher compression ratios at the expense of
954  *      execution time.
955  *
956  *      The session is opaque to the user application and the session handle
957  *      contains job specific data.
958  *
959  *      The pointer to the ContextBuffer will be stored in session specific
960  *      data if required by the implementation.
961  *
962  *      It is not permitted to have multiple
963  *      outstanding asynchronous compression requests for stateful sessions.
964  *      It is possible to add
965  *      parallelization to compression by using multiple sessions.
966  *
967  *      The window size specified in the pSessionData must be match exactly
968  *      one of the supported window sizes specified in the capabilities
969  *      structure.  If a bi-directional session is being initialized, then
970  *      the window size must be valid for both compress and decompress.
971  *
972  * @see
973  *      None
974  *
975  *****************************************************************************/
976 CpaStatus
977 cpaDcInitSession( CpaInstanceHandle     dcInstance,
978         CpaDcSessionHandle              pSessionHandle,
979         CpaDcSessionSetupData           *pSessionData,
980         CpaBufferList                   *pContextBuffer,
981         CpaDcCallbackFn                 callbackFn );
982 
983 
984 /**
985  *****************************************************************************
986  * @ingroup cpaDc
987  *      Compression Session Reset Function.
988  *
989  * @description
990  *      This function will reset a previously initialized session handle
991  *      Reset will fail if outstanding calls still exist for the initialized
992  *      session handle.
993  *      The client needs to retry the reset function at a later time.
994  *
995  * @context
996  *      This is a synchronous function that cannot sleep. It can be
997  *      executed in a context that does not permit sleeping.
998  * @assumptions
999  *      None
1000  * @sideEffects
1001  *      None
1002  * @blocking
1003  *      No.
1004  * @reentrant
1005  *      No
1006  * @threadSafe
1007  *      Yes
1008  *
1009  * @param[in]      dcInstance      Instance handle.
1010  * @param[in,out]  pSessionHandle  Session handle.
1011  *
1012  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
1013  * @retval CPA_STATUS_FAIL           Function failed.
1014  * @retval CPA_STATUS_RETRY          Resubmit the request.
1015  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
1016  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1017  *
1018  * @pre
1019  *      The component has been initialized via cpaDcStartInstance function.
1020  *      The session has been initialized via cpaDcInitSession function.
1021  * @post
1022  *      None
1023  * @note
1024  *      This is a synchronous function and has no completion callback
1025  *      associated with it.
1026  *
1027  * @see
1028  *      cpaDcInitSession()
1029  *
1030  *****************************************************************************/
1031 CpaStatus
1032 cpaDcResetSession(const CpaInstanceHandle dcInstance,
1033         CpaDcSessionHandle pSessionHandle );
1034 
1035 
1036 /**
1037  *****************************************************************************
1038  * @ingroup cpaDc
1039  *      Compression Session Remove Function.
1040  *
1041  * @description
1042  *      This function will remove a previously initialized session handle
1043  *      and the installed callback handler function. Removal will fail if
1044  *      outstanding calls still exist for the initialized session handle.
1045  *      The client needs to retry the remove function at a later time.
1046  *      The memory for the session handle MUST not be freed until this call
1047  *      has completed successfully.
1048  *
1049  * @context
1050  *      This is a synchronous function that cannot sleep. It can be
1051  *      executed in a context that does not permit sleeping.
1052  * @assumptions
1053  *      None
1054  * @sideEffects
1055  *      None
1056  * @blocking
1057  *      No.
1058  * @reentrant
1059  *      No
1060  * @threadSafe
1061  *      Yes
1062  *
1063  * @param[in]      dcInstance      Instance handle.
1064  * @param[in,out]  pSessionHandle  Session handle.
1065  *
1066  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
1067  * @retval CPA_STATUS_FAIL           Function failed.
1068  * @retval CPA_STATUS_RETRY          Resubmit the request.
1069  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
1070  * @retval CPA_STATUS_RESOURCE       Error related to system resources.
1071  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
1072  *                                   the request.
1073  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1074  *
1075  * @pre
1076  *      The component has been initialized via cpaDcStartInstance function.
1077  * @post
1078  *      None
1079  * @note
1080  *      This is a synchronous function and has no completion callback
1081  *      associated with it.
1082  *
1083  * @see
1084  *      cpaDcInitSession()
1085  *
1086  *****************************************************************************/
1087 CpaStatus
1088 cpaDcRemoveSession(const CpaInstanceHandle dcInstance,
1089         CpaDcSessionHandle pSessionHandle );
1090 
1091 /**
1092  *****************************************************************************
1093  * @ingroup cpaDc
1094  *      Deflate Compression Bound API
1095  *
1096  * @description
1097  *      This function provides the maximum output buffer size for a Deflate
1098  *      compression operation in the "worst case" (non-compressible) scenario.
1099  *      It's primary purpose is for output buffer memory allocation.
1100  *
1101  * @context
1102  *      This is a synchronous function that will not sleep. It can be
1103  *      executed in a context that does not permit sleeping.
1104  * @assumptions
1105  *      None
1106  * @sideEffects
1107  *      None
1108  * @blocking
1109  *      No.
1110  * @reentrant
1111  *      No
1112  * @threadSafe
1113  *      Yes
1114  *
1115  * @param[in]      dcInstance      Instance handle.
1116  * @param[in]      huffType        CpaDcHuffType to be used with this operation.
1117  * @param[in]      inputSize       Input Buffer size.
1118  * @param[out]     outputSize      Maximum output buffer size.
1119  *
1120  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
1121  * @retval CPA_STATUS_FAIL           Function failed.
1122  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
1123  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1124  *
1125  * @pre
1126  *      The component has been initialized via cpaDcStartInstance function.
1127  * @post
1128  *      None
1129  * @note
1130  *      This is a synchronous function and has no completion callback
1131  *      associated with it.
1132  *
1133  * @see
1134  *      None
1135  *
1136  *****************************************************************************/
1137 CpaStatus
1138 cpaDcDeflateCompressBound(const CpaInstanceHandle dcInstance,
1139         CpaDcHuffType huffType,
1140         Cpa32U inputSize,
1141         Cpa32U *outputSize );
1142 
1143 /**
1144  *****************************************************************************
1145  * @ingroup cpaDc
1146  *      Submit a request to compress a buffer of data.
1147  *
1148  * @description
1149  *      This API consumes data from the input buffer and generates compressed
1150  *      data in the output buffer.
1151  *
1152  * @context
1153  *      When called as an asynchronous function it cannot sleep. It can be
1154  *      executed in a context that does not permit sleeping.
1155  *      When called as a synchronous function it may sleep. It MUST NOT be
1156  *      executed in a context that DOES NOT permit sleeping.
1157  * @assumptions
1158  *      None
1159  * @sideEffects
1160  *      None
1161  * @blocking
1162  *      Yes when configured to operate in synchronous mode.
1163  * @reentrant
1164  *      No
1165  * @threadSafe
1166  *      Yes
1167  *
1168  * @param[in]       dcInstance          Target service instance.
1169  * @param[in,out]   pSessionHandle      Session handle.
1170  * @param[in]       pSrcBuff            Pointer to data buffer for compression.
1171  * @param[in]       pDestBuff           Pointer to buffer space for data after
1172  *                                      compression.
1173  * @param[in,out]   pResults            Pointer to results structure
1174  * @param[in]       flushFlag           Indicates the type of flush to be
1175  *                                      performed.
1176  * @param[in]       callbackTag         User supplied value to help correlate
1177  *                                      the callback with its associated
1178  *                                      request.
1179  *
1180  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
1181  * @retval CPA_STATUS_FAIL          Function failed.
1182  * @retval CPA_STATUS_RETRY         Resubmit the request.
1183  * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
1184  * @retval CPA_STATUS_RESOURCE      Error related to system resources.
1185  * @retval CPA_DC_BAD_DATA          The input data was not properly formed.
1186  * @retval CPA_STATUS_RESTARTING    API implementation is restarting. Resubmit
1187  *                                  the request.
1188  * @retval CPA_STATUS_UNSUPPORTED   Function is not supported.
1189  *
1190  * @pre
1191  *      pSessionHandle has been setup using cpaDcInitSession()
1192  * @post
1193  *     pSessionHandle has session related state information
1194  * @note
1195  *     This function passes control to the compression service for processing
1196  *
1197  *  In synchronous mode the function returns the error status returned from the
1198  *      service. In asynchronous mode the status is returned by the callback
1199  *      function.
1200  *
1201  *  This function may be called repetitively with input until all of the
1202  *  input has been consumed by the compression service and all the output
1203  *      has been produced.
1204  *
1205  *  When this function returns, it may be that all of the available data
1206  *  in the input buffer has not been compressed.  This situation will
1207  *  occur when there is insufficient space in the output buffer.  The
1208  *  calling application should note the amount of data processed, and clear
1209  *  the output buffer and then submit the request again, with the input
1210  *  buffer pointer to the data that was not previously compressed.
1211  *
1212  *  Relationship between input buffers and results buffers.
1213  *  -# Implementations of this API must not modify the individual
1214  *     flat buffers of the input buffer list.
1215  *  -# The implementation communicates the amount of data
1216  *     consumed from the source buffer list via pResults->consumed arg.
1217  *  -# The implementation communicates the amount of data in the
1218  *     destination buffer list via pResults->produced arg.
1219  *
1220  *  Source Buffer Setup Rules
1221  *  -# The buffer list must have the correct number of flat buffers. This
1222  *         is specified by the numBuffers element of the CpaBufferList.
1223  *  -# Each flat buffer must have a pointer to contiguous memory that has
1224  *     been allocated by the calling application.  The
1225  *         number of octets to be compressed or decompressed must be stored
1226  *     in the dataLenInBytes element of the flat buffer.
1227  *  -# It is permissible to have one or more flat buffers with a zero length
1228  *     data store.  This function will process all flat buffers until the
1229  *     destination buffer is full or all source data has been processed.
1230  *     If a buffer has zero length, then no data will be processed from
1231  *     that buffer.
1232  *
1233  *  Source Buffer Processing Rules.
1234  *  -# The buffer list is processed in index order - SrcBuff->pBuffers[0]
1235  *     will be completely processed before SrcBuff->pBuffers[1] begins to
1236  *     be processed.
1237  *  -# The application must drain the destination buffers.
1238  *     If the source data was not completely consumed, the application
1239  *     must resubmit the request.
1240  *  -# On return, the pResults->consumed will indicate the number of bytes
1241  *     consumed from the input buffers.
1242  *
1243  *  Destination Buffer Setup Rules
1244  *  -# The destination buffer list must have storage for processed data.
1245  *     This implies at least one flat buffer must exist in the buffer list.
1246  *  -# For each flat buffer in the buffer list, the dataLenInBytes element
1247  *     must be set to the size of the buffer space.
1248  *  -# It is permissible to have one or more flat buffers with a zero length
1249  *         data store.
1250  *     If a buffer has zero length, then no data will be added to
1251  *     that buffer.
1252  *
1253  *  Destination Buffer Processing Rules.
1254  *  -# The buffer list is processed in index order - DestBuff->pBuffers[0]
1255  *     will be completely processed before DestBuff->pBuffers[1] begins to
1256  *     be processed.
1257  *  -# On return, the pResults->produced will indicate the number of bytes
1258  *     written to the output buffers.
1259  *  -# If processing has not been completed, the application must drain the
1260  *         destination buffers and resubmit the request. The application must
1261  *         reset the dataLenInBytes for each flat buffer in the destination
1262  *         buffer list.
1263  *
1264  *  Checksum rules.
1265  *      If a checksum is specified in the session setup data, then:
1266  *  -# For the first request for a particular data segment the checksum
1267  *     is initialised internally by the implementation.
1268  *  -# The checksum is maintained by the implementation between calls
1269  *         until the flushFlag is set to CPA_DC_FLUSH_FINAL indicating the
1270  *         end of a particular data segment.
1271  *      -# Intermediate checksum values are returned to the application,
1272  *         via the CpaDcRqResults structure, in response to each request.
1273  *         However these checksum values are not guaranteed to the valid
1274  *         until the call with flushFlag set to CPA_DC_FLUSH_FINAL
1275  *         completes successfully.
1276  *
1277  *  The application should set flushFlag to
1278  *      CPA_DC_FLUSH_FINAL to indicate processing a particular data segment
1279  *      is complete. It should be noted that this function may have to be
1280  *      called more than once to process data after the flushFlag parameter has
1281  *      been set to CPA_DC_FLUSH_FINAL if the destination buffer fills.  Refer
1282  *      to buffer processing rules.
1283  *
1284  *  For stateful operations, when the function is invoked with flushFlag
1285  *  set to CPA_DC_FLUSH_NONE or CPA_DC_FLUSH_SYNC, indicating more data
1286  *  is yet to come, the function may or may not retain data.  When the
1287  *  function is invoked with flushFlag set to CPA_DC_FLUSH_FULL or
1288  *  CPA_DC_FLUSH_FINAL, the function will process all buffered data.
1289  *
1290  *  For stateless operations, CPA_DC_FLUSH_FINAL will cause the BFINAL
1291  *  bit to be set for deflate compression. The initial checksum for the
1292  *  stateless operation should be set to 0. CPA_DC_FLUSH_NONE and
1293  *  CPA_DC_FLUSH_SYNC should not be used for stateless operations.
1294  *
1295  *  It is possible to maintain checksum and length information across
1296  *  cpaDcCompressData() calls with a stateless session without maintaining
1297  *  the full history state that is maintained by a stateful session. In this
1298  *  mode of operation, an initial checksum value of 0 is passed into the
1299  *  first cpaDcCompressData() call with the flush flag set to
1300  *  CPA_DC_FLUSH_FULL. On subsequent calls to cpaDcCompressData() for this
1301  *  session, the checksum passed to cpaDcCompressData should be set to the
1302  *  checksum value produced by the previous call to cpaDcCompressData().
1303  *  When the last block of input data is passed to cpaDcCompressData(), the
1304  *  flush flag should be set to CP_DC_FLUSH_FINAL. This will cause the BFINAL
1305  *  bit to be set in a deflate stream. It is the responsibility of the calling
1306  *  application to maintain overall lengths across the stateless requests
1307  *  and to pass the checksum produced by one request into the next request.
1308  *
1309  *  When an instance supports compressAndVerifyAndRecover, it is enabled by
1310  *  default when using cpaDcCompressData(). If this feature needs to be
1311  *  disabled, cpaDcCompressData2() must be used.
1312  *
1313  *  Synchronous or Asynchronous operation of the API is determined by
1314  *  the value of the callbackFn parameter passed to cpaDcInitSession()
1315  *  when the sessionHandle was setup. If a non-NULL value was specified
1316  *  then the supplied callback function will be invoked asynchronously
1317  *  with the response of this request.
1318  *
1319  *  Response ordering:
1320  *  For each session, the implementation must maintain the order of
1321  *  responses.  That is, if in asynchronous mode, the order of the callback
1322  *  functions must match the order of jobs submitted by this function.
1323  *  In a simple synchronous mode implementation, the practice of submitting
1324  *  a request and blocking on its completion ensure ordering is preserved.
1325  *
1326  *  This limitation does not apply if the application employs multiple
1327  *  threads to service a single session.
1328  *
1329  *  If this API is invoked asynchronous, the return code represents
1330  *  the success or not of asynchronously scheduling the request.
1331  *  The results of the operation, along with the amount of data consumed
1332  *  and produced become available when the callback function is invoked.
1333  *  As such, pResults->consumed and pResults->produced are available
1334  *  only when the operation is complete.
1335  *
1336  *  The application must not use either the source or destination buffers
1337  *  until the callback has completed.
1338  *
1339  * @see
1340  *      None
1341  *
1342  *****************************************************************************/
1343 CpaStatus
1344 cpaDcCompressData( CpaInstanceHandle dcInstance,
1345         CpaDcSessionHandle  pSessionHandle,
1346         CpaBufferList       *pSrcBuff,
1347         CpaBufferList       *pDestBuff,
1348         CpaDcRqResults      *pResults,
1349         CpaDcFlush          flushFlag,
1350         void                 *callbackTag );
1351 
1352 /**
1353  *****************************************************************************
1354  * @ingroup cpaDc
1355  *      Submit a request to compress a buffer of data.
1356  *
1357  * @description
1358  *      This API consumes data from the input buffer and generates compressed
1359  *      data in the output buffer. This API is very similar to
1360  *      cpaDcCompressData() except it provides a CpaDcOpData structure for
1361  *      passing additional input parameters not covered in cpaDcCompressData().
1362  *
1363  * @context
1364  *      When called as an asynchronous function it cannot sleep. It can be
1365  *      executed in a context that does not permit sleeping.
1366  *      When called as a synchronous function it may sleep. It MUST NOT be
1367  *      executed in a context that DOES NOT permit sleeping.
1368  * @assumptions
1369  *      None
1370  * @sideEffects
1371  *      None
1372  * @blocking
1373  *      Yes when configured to operate in synchronous mode.
1374  * @reentrant
1375  *      No
1376  * @threadSafe
1377  *      Yes
1378  *
1379  * @param[in]       dcInstance          Target service instance.
1380  * @param[in,out]   pSessionHandle      Session handle.
1381  * @param[in]       pSrcBuff            Pointer to data buffer for compression.
1382  * @param[in]       pDestBuff           Pointer to buffer space for data after
1383  *                                      compression.
1384  * @param[in]       pOpData             Additional input parameters.
1385  * @param[in,out]   pResults            Pointer to results structure
1386  * @param[in]       callbackTag         User supplied value to help correlate
1387  *                                      the callback with its associated
1388  *                                      request.
1389  *
1390  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
1391  * @retval CPA_STATUS_FAIL          Function failed.
1392  * @retval CPA_STATUS_RETRY         Resubmit the request.
1393  * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
1394  * @retval CPA_STATUS_RESOURCE      Error related to system resources.
1395  * @retval CPA_DC_BAD_DATA          The input data was not properly formed.
1396  * @retval CPA_STATUS_UNSUPPORTED   Function is not supported.
1397  * @retval CPA_STATUS_RESTARTING    API implementation is restarting. Resubmit
1398  *                                  the request.
1399  *
1400  * @pre
1401  *      pSessionHandle has been setup using cpaDcInitSession()
1402  * @post
1403  *     pSessionHandle has session related state information
1404  * @note
1405  *     This function passes control to the compression service for processing
1406  *
1407  * @see
1408  *      cpaDcCompressData()
1409  *
1410  *****************************************************************************/
1411 CpaStatus
1412 cpaDcCompressData2( CpaInstanceHandle dcInstance,
1413         CpaDcSessionHandle  pSessionHandle,
1414         CpaBufferList       *pSrcBuff,
1415         CpaBufferList       *pDestBuff,
1416         CpaDcOpData         *pOpData,
1417         CpaDcRqResults      *pResults,
1418         void                 *callbackTag );
1419 
1420 /**
1421  *****************************************************************************
1422  * @ingroup cpaDc
1423  *      Submit a request to decompress a buffer of data.
1424  *
1425  * @description
1426  *      This API consumes compressed data from the input buffer and generates
1427  *      uncompressed data in the output buffer.
1428  *
1429  * @context
1430  *      When called as an asynchronous function it cannot sleep. It can be
1431  *      executed in a context that does not permit sleeping.
1432  *      When called as a synchronous function it may sleep. It MUST NOT be
1433  *      executed in a context that DOES NOT permit sleeping.
1434  * @assumptions
1435  *      None
1436  * @sideEffects
1437  *      None
1438  * @blocking
1439  *      Yes when configured to operate in synchronous mode.
1440  * @reentrant
1441  *      No
1442  * @threadSafe
1443  *      Yes
1444  *
1445  * @param[in]       dcInstance          Target service instance.
1446  * @param[in,out]   pSessionHandle      Session handle.
1447  * @param[in]       pSrcBuff            Pointer to data buffer for compression.
1448  * @param[in]       pDestBuff           Pointer to buffer space for data
1449  *                                      after decompression.
1450  * @param[in,out]   pResults            Pointer to results structure
1451  * @param[in]       flushFlag           When set to CPA_DC_FLUSH_FINAL, indicates
1452  *                                      that the input buffer contains all of
1453  *                                      the data for the compression session,
1454  *                                      allowing the function to release
1455  *                                      history data.
1456  * @param[in]        callbackTag        User supplied value to help correlate
1457  *                                      the callback with its associated
1458  *                                      request.
1459  *
1460  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
1461  * @retval CPA_STATUS_FAIL          Function failed.
1462  * @retval CPA_STATUS_RETRY         Resubmit the request.
1463  * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
1464  * @retval CPA_STATUS_RESOURCE      Error related to system resources.
1465  * @retval CPA_DC_BAD_DATA          The input data was not properly formed.
1466  * @retval CPA_STATUS_RESTARTING    API implementation is restarting. Resubmit
1467  *                                  the request.
1468  * @retval CPA_STATUS_UNSUPPORTED   Function is not supported.
1469  *
1470  * @pre
1471  *      pSessionHandle has been setup using cpaDcInitSession()
1472  * @post
1473  *     pSessionHandle has session related state information
1474  * @note
1475  *      This function passes control to the compression service for
1476  *      decompression.  The function returns the status from the service.
1477  *
1478  *      This function may be called repetitively with input until all of the
1479  *      input has been provided and all the output has been consumed.
1480  *
1481  *      This function has identical buffer processing rules as
1482  *      cpaDcCompressData().
1483  *
1484  *      This function has identical checksum processing rules as
1485  *      cpaDcCompressData().
1486  *
1487  *      The application should set flushFlag to
1488  *      CPA_DC_FLUSH_FINAL to indicate processing a particular compressed
1489  *      data segment is complete. It should be noted that this function may
1490  *      have to be called more than once to process data after flushFlag
1491  *      has been set if the destination buffer fills.  Refer to
1492  *      buffer processing rules in cpaDcCompressData().
1493  *
1494  *      Synchronous or Asynchronous operation of the API is determined by
1495  *      the value of the callbackFn parameter passed to cpaDcInitSession()
1496  *      when the sessionHandle was setup. If a non-NULL value was specified
1497  *      then the supplied callback function will be invoked asynchronously
1498  *      with the response of this request, along with the callbackTag
1499  *      specified in the function.
1500  *
1501  *      The same response ordering constraints identified in the
1502  *      cpaDcCompressData API apply to this function.
1503  *
1504  * @see
1505  *      cpaDcCompressData()
1506  *
1507  *****************************************************************************/
1508 CpaStatus
1509 cpaDcDecompressData( CpaInstanceHandle dcInstance,
1510         CpaDcSessionHandle  pSessionHandle,
1511         CpaBufferList       *pSrcBuff,
1512         CpaBufferList       *pDestBuff,
1513         CpaDcRqResults      *pResults,
1514         CpaDcFlush          flushFlag,
1515         void                *callbackTag );
1516 
1517 
1518 /**
1519  *****************************************************************************
1520  * @ingroup cpaDc
1521  *      Submit a request to decompress a buffer of data.
1522  *
1523  * @description
1524  *      This API consumes compressed data from the input buffer and generates
1525  *      uncompressed data in the output buffer. This API is very similar to
1526  *      cpaDcDecompressData() except it provides a CpaDcOpData structure for
1527  *      passing additional input parameters not covered in cpaDcDecompressData().
1528  *
1529  * @context
1530  *      When called as an asynchronous function it cannot sleep. It can be
1531  *      executed in a context that does not permit sleeping.
1532  *      When called as a synchronous function it may sleep. It MUST NOT be
1533  *      executed in a context that DOES NOT permit sleeping.
1534  * @assumptions
1535  *      None
1536  * @sideEffects
1537  *      None
1538  * @blocking
1539  *      Yes when configured to operate in synchronous mode.
1540  * @reentrant
1541  *      No
1542  * @threadSafe
1543  *      Yes
1544  *
1545  * @param[in]       dcInstance          Target service instance.
1546  * @param[in,out]   pSessionHandle      Session handle.
1547  * @param[in]       pSrcBuff            Pointer to data buffer for compression.
1548  * @param[in]       pDestBuff           Pointer to buffer space for data
1549  *                                      after decompression.
1550  * @param[in]       pOpData             Additional input parameters.
1551  * @param[in,out]   pResults            Pointer to results structure
1552  * @param[in]        callbackTag        User supplied value to help correlate
1553  *                                      the callback with its associated
1554  *                                      request.
1555  *
1556  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
1557  * @retval CPA_STATUS_FAIL          Function failed.
1558  * @retval CPA_STATUS_RETRY         Resubmit the request.
1559  * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
1560  * @retval CPA_STATUS_RESOURCE      Error related to system resources.
1561  * @retval CPA_DC_BAD_DATA          The input data was not properly formed.
1562  * @retval CPA_STATUS_UNSUPPORTED   Function is not supported.
1563  * @retval CPA_STATUS_RESTARTING    API implementation is restarting. Resubmit
1564  *                                  the request.
1565  *
1566  * @pre
1567  *      pSessionHandle has been setup using cpaDcInitSession()
1568  * @post
1569  *     pSessionHandle has session related state information
1570  * @note
1571  *      This function passes control to the compression service for
1572  *      decompression.  The function returns the status from the service.
1573  *
1574  * @see
1575  *      cpaDcDecompressData()
1576  *      cpaDcCompressData2()
1577  *      cpaDcCompressData()
1578  *
1579  *****************************************************************************/
1580 CpaStatus
1581 cpaDcDecompressData2( CpaInstanceHandle dcInstance,
1582         CpaDcSessionHandle  pSessionHandle,
1583         CpaBufferList       *pSrcBuff,
1584         CpaBufferList       *pDestBuff,
1585         CpaDcOpData         *pOpData,
1586         CpaDcRqResults      *pResults,
1587         void                *callbackTag );
1588 
1589 /**
1590  *****************************************************************************
1591  * @ingroup cpaDc
1592  *      Generate compression header.
1593  *
1594  * @description
1595  *      This API generates the gzip or the zlib header and stores it in the
1596  *      output buffer.
1597  *
1598  * @context
1599  *      This function may be call from any context.
1600  * @assumptions
1601  *      None
1602  * @sideEffects
1603  *      None
1604  * @blocking
1605  *      No
1606  * @reentrant
1607  *      No
1608  * @threadSafe
1609  *      Yes
1610  *
1611  * @param[in,out] pSessionHandle    Session handle.
1612  * @param[in] pDestBuff             Pointer to data buffer where the
1613  *                                  compression header will go.
1614  * @param[out] count                Pointer to counter filled in with
1615  *                                  header size.
1616  *
1617  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
1618  * @retval CPA_STATUS_FAIL           Function failed.
1619  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
1620  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
1621  *                                   the request.
1622  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1623  *
1624  * @pre
1625  *      pSessionHandle has been setup using cpaDcInitSession()
1626  *
1627  * @note
1628  *      This function can output a 10 byte gzip header or 2 byte zlib header to
1629  *      the destination buffer. The session properties are used to determine
1630  *      the header type. To output a header the session must have been
1631  *      initialized with CpaDcCompType CPA_DC_DEFLATE for any other value no
1632  *      header is produced. To output a gzip header the session must have been
1633  *      initialized with CpaDcChecksum CPA_DC_CRC32. To output a zlib header
1634  *      the session must have been initialized with CpaDcChecksum CPA_DC_ADLER32.
1635  *      For CpaDcChecksum CPA_DC_NONE no header is output.
1636  *
1637  *      If the compression requires a gzip header, then this header requires
1638  *      at a minimum the following fields, defined in RFC1952:
1639  *          ID1: 0x1f
1640  *          ID2: 0x8b
1641  *          CM: Compression method = 8 for deflate
1642  *
1643  *      The zlib header is defined in RFC1950 and this function must implement
1644  *      as a minimum:
1645  *          CM: four bit compression method - 8 is deflate with window size to
1646  *              32k
1647  *          CINFO: four bit window size (see RFC1950 for details), 7 is 32k
1648  *              window
1649  *          FLG: defined as:
1650  *              -   Bits 0 - 4: check bits for CM, CINFO and FLG (see RFC1950)
1651  *              -   Bit 5:  FDICT 0 = default, 1 is preset dictionary
1652  *              -   Bits 6 - 7: FLEVEL, compression level (see RFC 1950)
1653  *
1654  *      The counter parameter will be set
1655  *      to the number of bytes added to the buffer. The pData will be
1656  *      not be changed.
1657  *
1658  * @see
1659  *      None
1660  *
1661  *****************************************************************************/
1662 CpaStatus
1663 cpaDcGenerateHeader( CpaDcSessionHandle pSessionHandle,
1664     CpaFlatBuffer *pDestBuff, Cpa32U *count );
1665 
1666 /**
1667  *****************************************************************************
1668  * @ingroup cpaDc
1669  *      Generate compression footer.
1670  *
1671  * @description
1672  *      This API generates the footer for gzip or zlib and stores it in the
1673  *      output buffer.
1674  * @context
1675  *      This function may be call from any context.
1676  * @assumptions
1677  *      None
1678  * @sideEffects
1679  *      All session variables are reset
1680  * @blocking
1681  *      No
1682  * @reentrant
1683  *      No
1684  * @threadSafe
1685  *      Yes
1686  *
1687  * @param[in,out] pSessionHandle    Session handle.
1688  * @param[in] pDestBuff             Pointer to data buffer where the
1689  *                                  compression footer will go.
1690  * @param[in,out] pResults          Pointer to results structure filled by
1691  *                                  CpaDcCompressData.  Updated with the
1692  *                                  results of this API call
1693  *
1694  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
1695  * @retval CPA_STATUS_FAIL           Function failed.
1696  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1697  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
1698  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
1699  *                                   the request.
1700  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1701  *
1702  * @pre
1703  *      pSessionHandle has been setup using cpaDcInitSession()
1704  *      pResults structure has been filled by CpaDcCompressData().
1705  *
1706  * @note
1707  *      Depending on the session variables, this function can add the
1708  *      alder32 footer to the zlib compressed data as defined in RFC1950.  If
1709  *      required, it can also add the gzip footer, which is the crc32 of the
1710  *      uncompressed data and the length of the uncompressed data.  This
1711  *      section is defined in RFC1952. The session variables used to determine
1712  *      the header type are CpaDcCompType and CpaDcChecksum, see cpaDcGenerateHeader
1713  *      for more details.
1714  *
1715  *      An artifact of invoking this function for writing the footer data is
1716  *      that all opaque session specific data is re-initialized.  If the
1717  *      compression level and file types are consistent, the upper level
1718  *      application can continue processing compression requests using the
1719  *      same session handle.
1720  *
1721  *      The produced element of the pResults structure will be incremented by the
1722  *      numbers bytes added to the buffer.  The pointer to the buffer
1723  *      will not be modified.
1724  *
1725  *      This function is not supported for stateless sessions.
1726  *
1727  * @see
1728  *      None
1729  *
1730  *****************************************************************************/
1731 CpaStatus
1732 cpaDcGenerateFooter( CpaDcSessionHandle pSessionHandle,
1733     CpaFlatBuffer *pDestBuff, CpaDcRqResults *pResults );
1734 
1735 
1736 /**
1737  *****************************************************************************
1738  * @ingroup cpaDc
1739  *      Retrieve statistics
1740  *
1741  * @description
1742  *      This API retrieves the current statistics for a compression instance.
1743  *
1744  * @context
1745  *      This function may be call from any context.
1746  * @assumptions
1747  *      None
1748  * @sideEffects
1749  *        None
1750  * @blocking
1751  *      Yes
1752  * @reentrant
1753  *      No
1754  * @threadSafe
1755  *      Yes
1756  *
1757  * @param[in]  dcInstance       Instance handle.
1758  * @param[out] pStatistics      Pointer to statistics structure.
1759  *
1760  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
1761  * @retval CPA_STATUS_FAIL           Function failed.
1762  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
1763  * @retval CPA_STATUS_RESTARTING     API implementation is restarting. Resubmit
1764  *                                   the request.
1765  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1766  *
1767  * @pre
1768  *      None
1769  * @post
1770  *     None
1771  *
1772  * @see
1773  *      None
1774  *
1775  *****************************************************************************/
1776 CpaStatus
1777 cpaDcGetStats( CpaInstanceHandle dcInstance,
1778       CpaDcStats *pStatistics );
1779 
1780 /*****************************************************************************/
1781 /* Instance Discovery Functions */
1782 
1783 /**
1784  *****************************************************************************
1785  * @ingroup cpaDc
1786  *      Get the number of device instances that are supported by the API
1787  *      implementation.
1788  *
1789  * @description
1790  *
1791  *     This function will get the number of device instances that are supported
1792  *     by an implementation of the compression API. This number is then used to
1793  *     determine the size of the array that must be passed to
1794  *     cpaDcGetInstances().
1795  *
1796  * @context
1797  *      This function MUST NOT be called from an interrupt context as it MAY
1798  *      sleep.
1799  * @assumptions
1800  *      None
1801  * @sideEffects
1802  *      None
1803  * @blocking
1804  *      This function is synchronous and blocking.
1805  * @reentrant
1806  *      No
1807  * @threadSafe
1808  *      Yes
1809  *
1810  * @param[out] pNumInstances        Pointer to where the number of
1811  *                                   instances will be written.
1812  *
1813  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
1814  * @retval CPA_STATUS_FAIL           Function failed.
1815  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
1816  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1817  *
1818  * @pre
1819  *      None
1820  * @post
1821  *      None
1822  * @note
1823  *      This function operates in a synchronous manner and no asynchronous
1824  *      callback will be generated
1825  *
1826  * @see
1827  *      cpaDcGetInstances
1828  *
1829  *****************************************************************************/
1830 CpaStatus
1831 cpaDcGetNumInstances(Cpa16U* pNumInstances);
1832 
1833 /**
1834  *****************************************************************************
1835  * @ingroup cpaDc
1836  *      Get the handles to the device instances that are supported by the
1837  *      API implementation.
1838  *
1839  * @description
1840  *
1841  *      This function will return handles to the device instances that are
1842  *      supported by an implementation of the compression API. These instance
1843  *      handles can then be used as input parameters with other compression API
1844  *      functions.
1845  *
1846  *      This function will populate an array that has been allocated by the
1847  *      caller. The size of this API is determined by the
1848  *      cpaDcGetNumInstances() function.
1849  *
1850  * @context
1851  *      This function MUST NOT be called from an interrupt context as it MAY
1852  *      sleep.
1853  * @assumptions
1854  *      None
1855  * @sideEffects
1856  *      None
1857  * @blocking
1858  *      This function is synchronous and blocking.
1859  * @reentrant
1860  *      No
1861  * @threadSafe
1862  *      Yes
1863  *
1864  * @param[in]  numInstances     Size of the array.
1865  * @param[out] dcInstances          Pointer to where the instance
1866  *                                   handles will be written.
1867  *
1868  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
1869  * @retval CPA_STATUS_FAIL           Function failed.
1870  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
1871  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1872  *
1873  * @pre
1874  *      None
1875  * @post
1876  *      None
1877  * @note
1878  *      This function operates in a synchronous manner and no asynchronous
1879  *      callback will be generated
1880  *
1881  * @see
1882  *      cpaDcGetInstances
1883  *
1884  *****************************************************************************/
1885 CpaStatus
1886 cpaDcGetInstances(Cpa16U numInstances,
1887                         CpaInstanceHandle* dcInstances);
1888 
1889 /**
1890  *****************************************************************************
1891  * @ingroup cpaDc
1892  *      Compression Component utility function to determine the number of
1893  *      intermediate buffers required by an implementation.
1894  *
1895  * @description
1896  *      This function will determine the number of intermediate buffer lists
1897  *      required by an implementation for a compression instance. These buffers
1898  *      should then be allocated and provided when calling @ref cpaDcStartInstance()
1899  *      to start a compression instance that will use dynamic compression.
1900  *
1901  * @context
1902  *      This function may sleep, and  MUST NOT be called in interrupt context.
1903  * @assumptions
1904  *      None
1905  * @sideEffects
1906  *      None
1907  * @blocking
1908  *      This function is synchronous and blocking.
1909  * @reentrant
1910  *      No
1911  * @threadSafe
1912  *      Yes
1913  * @param[in,out] instanceHandle        Handle to an instance of this API to be
1914  *                                      initialized.
1915  * @param[out]  pNumBuffers             When the function returns, this will
1916  *                                      specify the number of buffer lists that
1917  *                                      should be used as intermediate buffers
1918  *                                      when calling cpaDcStartInstance().
1919  *
1920  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
1921  * @retval CPA_STATUS_FAIL          Function failed. Suggested course of action
1922  *                                  is to shutdown and restart.
1923  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1924  *
1925  * @pre
1926  *      None
1927  * @post
1928  *      None
1929  * @note
1930  *      Note that this is a synchronous function and has no completion callback
1931  *      associated with it.
1932  *
1933  * @see
1934  *      cpaDcStartInstance()
1935  *
1936  *****************************************************************************/
1937 CpaStatus
1938 cpaDcGetNumIntermediateBuffers(CpaInstanceHandle instanceHandle,
1939         Cpa16U *pNumBuffers);
1940 
1941 /**
1942  *****************************************************************************
1943  * @ingroup cpaDc
1944  *      Compression Component Initialization and Start function.
1945  *
1946  * @description
1947  *      This function will initialize and start the compression component.
1948  *      It MUST be called before any other compress function is called. This
1949  *      function SHOULD be called only once (either for the very first time,
1950  *      or after an cpaDcStopInstance call which succeeded) per instance.
1951  *      Subsequent calls will have no effect.
1952  *
1953  *      If required by an implementation, this function can be provided with
1954  *      instance specific intermediate buffers.  The intent is to provide an
1955  *      instance specific location to store intermediate results during dynamic
1956  *      instance Huffman tree compression requests. The memory should be
1957  *      accessible by the compression engine. The buffers are to support
1958  *      deflate compression with dynamic Huffman Trees.  Each buffer list
1959  *      should be similar in size to twice the destination buffer size passed
1960  *      to the compress API. The number of intermediate buffer lists may vary
1961  *      between implementations and so @ref cpaDcGetNumIntermediateBuffers()
1962  *      should be called first to determine the number of intermediate
1963  *      buffers required by the implementation.
1964  *
1965  *      If not required, this parameter can be passed in as NULL.
1966  *
1967  * @context
1968  *      This function may sleep, and  MUST NOT be called in interrupt context.
1969  * @assumptions
1970  *      None
1971  * @sideEffects
1972  *      None
1973  * @blocking
1974  *      This function is synchronous and blocking.
1975  * @reentrant
1976  *      No
1977  * @threadSafe
1978  *      Yes
1979  * @param[in,out] instanceHandle        Handle to an instance of this API to be
1980  *                                      initialized.
1981  * @param[in]   numBuffers              Number of buffer lists represented by
1982  *                                      the pIntermediateBuffers parameter.
1983  *                                      Note: @ref cpaDcGetNumIntermediateBuffers()
1984  *                                      can be used to determine the number of
1985  *                                      intermediate buffers that an implementation
1986  *                                      requires.
1987  * @param[in]   pIntermediateBuffers    Optional pointer to Instance specific
1988  *                                      DRAM buffer.
1989  *
1990  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
1991  * @retval CPA_STATUS_FAIL          Function failed. Suggested course of action
1992  *                                  is to shutdown and restart.
1993  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
1994  *
1995  * @pre
1996  *      None
1997  * @post
1998  *      None
1999  * @note
2000  *      Note that this is a synchronous function and has no completion callback
2001  *      associated with it.
2002  *
2003  * @see
2004  *      cpaDcStopInstance()
2005  *      cpaDcGetNumIntermediateBuffers()
2006  *
2007  *****************************************************************************/
2008 CpaStatus
2009 cpaDcStartInstance(CpaInstanceHandle instanceHandle,
2010         Cpa16U numBuffers,
2011         CpaBufferList **pIntermediateBuffers);
2012 
2013 /**
2014  *****************************************************************************
2015  * @ingroup cpaDc
2016  *      Compress Component Stop function.
2017  *
2018  * @description
2019  *      This function will stop the Compression component and free
2020  *      all system resources associated with it. The client MUST ensure that
2021  *      all outstanding operations have completed before calling this function.
2022  *      The recommended approach to ensure this is to deregister all session or
2023  *      callback handles before calling this function. If outstanding
2024  *      operations still exist when this function is invoked, the callback
2025  *      function for each of those operations will NOT be invoked and the
2026  *      shutdown will continue.  If the component is to be restarted, then a
2027  *      call to cpaDcStartInstance is required.
2028  *
2029  * @context
2030  *      This function may sleep, and so MUST NOT be called in interrupt
2031  *      context.
2032  * @assumptions
2033  *      None
2034  * @sideEffects
2035  *      None
2036  * @blocking
2037  *      This function is synchronous and blocking.
2038  * @reentrant
2039  *      No
2040  * @threadSafe
2041  *      Yes
2042  * @param[in] instanceHandle        Handle to an instance of this API to be
2043  *                                  shutdown.
2044  *
2045  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
2046  * @retval CPA_STATUS_FAIL          Function failed. Suggested course of action
2047  *                                  is to ensure requests are not still being
2048  *                                  submitted and that all sessions are
2049  *                                  deregistered. If this does not help, then
2050  *                                  forcefully remove the component from the
2051  *                                  system.
2052  * @retval CPA_STATUS_UNSUPPORTED   Function is not supported.
2053  *
2054  * @pre
2055  *      The component has been initialized via cpaDcStartInstance
2056  * @post
2057  *      None
2058  * @note
2059  *      Note that this is a synchronous function and has no completion callback
2060  *      associated with it.
2061  *
2062  * @see
2063  *      cpaDcStartInstance()
2064  *
2065  *****************************************************************************/
2066 CpaStatus
2067 cpaDcStopInstance(CpaInstanceHandle instanceHandle);
2068 
2069 
2070 /**
2071  *****************************************************************************
2072  * @ingroup cpaDc
2073  *      Function to get information on a particular instance.
2074  *
2075  * @description
2076  *      This function will provide instance specific information through a
2077  *      @ref CpaInstanceInfo2 structure.
2078  *
2079  * @context
2080  *      This function will be executed in a context that requires that sleeping
2081  *      MUST NOT be permitted.
2082  * @assumptions
2083  *      None
2084  * @sideEffects
2085  *      None
2086  * @blocking
2087  *      Yes
2088  * @reentrant
2089  *      No
2090  * @threadSafe
2091  *      Yes
2092  *
2093  * @param[in]  instanceHandle       Handle to an instance of this API to be
2094  *                                  initialized.
2095  * @param[out] pInstanceInfo2       Pointer to the memory location allocated by
2096  *                                  the client into which the CpaInstanceInfo2
2097  *                                  structure will be written.
2098  *
2099  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
2100  * @retval CPA_STATUS_FAIL           Function failed.
2101  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
2102  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
2103  *
2104  * @pre
2105  *      The client has retrieved an instanceHandle from successive calls to
2106  *      @ref cpaDcGetNumInstances and @ref cpaDcGetInstances.
2107  * @post
2108  *      None
2109  * @note
2110  *      None
2111  * @see
2112  *      cpaDcGetNumInstances,
2113  *      cpaDcGetInstances,
2114  *      CpaInstanceInfo2
2115  *
2116  *****************************************************************************/
2117 CpaStatus
2118 cpaDcInstanceGetInfo2(const CpaInstanceHandle instanceHandle,
2119         CpaInstanceInfo2 * pInstanceInfo2);
2120 
2121 /*****************************************************************************/
2122 /* Instance Notification Functions                                           */
2123 /*****************************************************************************/
2124 /**
2125  *****************************************************************************
2126   * @ingroup cpaDc
2127  *      Callback function for instance notification support.
2128  *
2129  * @description
2130  *      This is the prototype for the instance notification callback function.
2131  *      The callback function is passed in as a parameter to the
2132  *      @ref cpaDcInstanceSetNotificationCb function.
2133  *
2134  * @context
2135  *      This function will be executed in a context that requires that sleeping
2136  *      MUST NOT be permitted.
2137  * @assumptions
2138  *      None
2139  * @sideEffects
2140  *      None
2141  * @blocking
2142  *      No
2143  * @reentrant
2144  *      No
2145  * @threadSafe
2146  *      Yes
2147  *
2148  * @param[in] instanceHandle   Instance handle.
2149  * @param[in] pCallbackTag     Opaque value provided by user while making
2150  *                             individual function calls.
2151  * @param[in] instanceEvent    The event that will trigger this function to
2152  *                             get invoked.
2153  *
2154  * @retval
2155  *      None
2156  * @pre
2157  *      Component has been initialized and the notification function has been
2158  *  set via the cpaDcInstanceSetNotificationCb function.
2159  * @post
2160  *      None
2161  * @note
2162  *      None
2163  * @see
2164  *      cpaDcInstanceSetNotificationCb(),
2165  *
2166  *****************************************************************************/
2167 typedef void (*CpaDcInstanceNotificationCbFunc)(
2168         const CpaInstanceHandle instanceHandle,
2169         void * pCallbackTag,
2170         const CpaInstanceEvent instanceEvent);
2171 
2172 /**
2173  *****************************************************************************
2174  * @ingroup cpaDc
2175  *      Subscribe for instance notifications.
2176  *
2177  * @description
2178  *      Clients of the CpaDc interface can subscribe for instance notifications
2179  *      by registering a @ref CpaDcInstanceNotificationCbFunc function.
2180  *
2181  * @context
2182  *      This function may be called from any context.
2183  * @assumptions
2184  *      None
2185  * @sideEffects
2186  *      None
2187  * @blocking
2188  *      No
2189  * @reentrant
2190  *      No
2191  * @threadSafe
2192  *      Yes
2193  *
2194  * @param[in] instanceHandle           Instance handle.
2195  * @param[in] pInstanceNotificationCb  Instance notification callback
2196  *                                     function pointer.
2197  * @param[in] pCallbackTag             Opaque value provided by user while
2198  *                                     making individual function calls.
2199  *
2200  * @retval CPA_STATUS_SUCCESS          Function executed successfully.
2201  * @retval CPA_STATUS_FAIL             Function failed.
2202  * @retval CPA_STATUS_INVALID_PARAM    Invalid parameter passed in.
2203  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
2204  *
2205  * @pre
2206  *      Instance has been initialized.
2207  * @post
2208  *      None
2209  * @note
2210  *      None
2211  * @see
2212  *      CpaDcInstanceNotificationCbFunc
2213  *
2214  *****************************************************************************/
2215 CpaStatus
2216 cpaDcInstanceSetNotificationCb(
2217         const CpaInstanceHandle instanceHandle,
2218         const CpaDcInstanceNotificationCbFunc pInstanceNotificationCb,
2219         void *pCallbackTag);
2220 
2221 
2222 /**
2223  *****************************************************************************
2224  * @ingroup cpaDc
2225  *      Get the size of the memory required to hold the session information.
2226  *
2227  * @description
2228  *
2229  *      The client of the Data Compression API is responsible for
2230  *      allocating sufficient memory to hold session information and the context
2231  *      data. This function provides a means for determining the size of the
2232  *      session information and the size of the context data.
2233  *
2234  * @context
2235  *      No restrictions
2236  * @assumptions
2237  *      None
2238  * @sideEffects
2239  *      None
2240  * @blocking
2241  *      No
2242  * @reentrant
2243  *      No
2244  * @threadSafe
2245  *      Yes
2246  *
2247  * @param[in] dcInstance            Instance handle.
2248  * @param[in] pSessionData          Pointer to a user instantiated structure
2249  *                                  containing session data.
2250  * @param[out] pSessionSize         On return, this parameter will be the size
2251  *                                  of the memory that will be
2252  *                                  required by cpaDcInitSession() for session
2253  *                                  data.
2254  * @param[out] pContextSize         On return, this parameter will be the size
2255  *                                  of the memory that will be required
2256  *                                  for context data.  Context data is
2257  *                                  save/restore data including history and
2258  *                                  any implementation specific data that is
2259  *                                  required for a save/restore operation.
2260  *
2261  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
2262  * @retval CPA_STATUS_FAIL           Function failed.
2263  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
2264  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
2265  *
2266  * @pre
2267  *      None
2268  * @post
2269  *      None
2270  * @note
2271  *      Only a synchronous version of this function is provided.
2272  *
2273  *      It is expected that context data is comprised of the history and
2274  *      any data stores that are specific to the history such as linked
2275  *      lists or hash tables.
2276  *      For stateless sessions the context size returned from this function
2277  *      will be zero. For stateful sessions the context size returned will
2278  *      depend on the session setup data.
2279  *
2280  *      Session data is expected to include interim checksum values, various
2281  *      counters and other session related data that needs to persist
2282  *      between invocations.
2283  *      For a given implementation of this API, it is safe to assume that
2284  *      cpaDcGetSessionSize() will always return the same session size and
2285  *      that the size will not be different for different setup data
2286  *      parameters. However, it should be noted that the size may change:
2287  *       (1) between different implementations of the API (e.g. between software
2288  *           and hardware implementations or between different hardware
2289  *           implementations)
2290  *       (2) between different releases of the same API implementation.
2291  *
2292  * @see
2293  *      cpaDcInitSession()
2294  *
2295  *****************************************************************************/
2296 CpaStatus
2297 cpaDcGetSessionSize(CpaInstanceHandle dcInstance,
2298         CpaDcSessionSetupData* pSessionData,
2299         Cpa32U* pSessionSize, Cpa32U* pContextSize );
2300 
2301 /**
2302  *****************************************************************************
2303  * @ingroup cpaDc
2304  *      Function to return the size of the memory which must be allocated for
2305  *      the pPrivateMetaData member of CpaBufferList.
2306  *
2307  * @description
2308  *      This function is used to obtain the size (in bytes) required to allocate
2309  *      a buffer descriptor for the pPrivateMetaData member in the
2310  *      CpaBufferList structure.
2311  *      Should the function return zero then no meta data is required for the
2312  *      buffer list.
2313  *
2314  * @context
2315  *      This function may be called from any context.
2316  * @assumptions
2317  *      None
2318  * @sideEffects
2319  *      None
2320  * @blocking
2321  *      No
2322  * @reentrant
2323  *      No
2324  * @threadSafe
2325  *      Yes
2326  *
2327  * @param[in]  instanceHandle      Handle to an instance of this API.
2328  * @param[in]  numBuffers          The number of pointers in the CpaBufferList.
2329  *                                 This is the maximum number of CpaFlatBuffers
2330  *                                 which may be contained in this CpaBufferList.
2331  * @param[out] pSizeInBytes        Pointer to the size in bytes of memory to be
2332  *                                 allocated when the client wishes to allocate
2333  *                                 a cpaFlatBuffer.
2334  *
2335  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
2336  * @retval CPA_STATUS_FAIL           Function failed.
2337  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
2338  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
2339  *
2340  * @pre
2341  *      None
2342  * @post
2343  *      None
2344  * @note
2345  *      None
2346  * @see
2347  *      cpaDcGetInstances()
2348  *
2349  *****************************************************************************/
2350 CpaStatus
2351 cpaDcBufferListGetMetaSize(const CpaInstanceHandle instanceHandle,
2352         Cpa32U numBuffers,
2353         Cpa32U *pSizeInBytes);
2354 
2355 
2356 /**
2357  *****************************************************************************
2358  * @ingroup cpaDc
2359  *      Function to return a string indicating the specific error that occurred
2360  *      within the system.
2361  *
2362  * @description
2363  *      When a function returns any error including CPA_STATUS_SUCCESS, the
2364  *      client can invoke this function to get a string which describes the
2365  *      general error condition, and if available additional information on
2366  *      the specific error.
2367  *      The Client MUST allocate CPA_STATUS_MAX_STR_LENGTH_IN_BYTES bytes for  the buffer
2368  *      string.
2369  *
2370  * @context
2371  *      This function may be called from any context.
2372  * @assumptions
2373  *      None
2374  * @sideEffects
2375  *      None
2376  * @blocking
2377  *      No
2378  * @reentrant
2379  *      No
2380  * @threadSafe
2381  *      Yes
2382  *
2383  * @param[in] dcInstance        Handle to an instance of this API.
2384  * @param[in] errStatus         The error condition that occurred.
2385  * @param[in,out] pStatusText   Pointer to the string buffer that will
2386  *                              be updated with the status text. The invoking
2387  *                              application MUST allocate this buffer to be
2388  *                              exactly CPA_STATUS_MAX_STR_LENGTH_IN_BYTES.
2389  *
2390  * @retval CPA_STATUS_SUCCESS       Function executed successfully.
2391  * @retval CPA_STATUS_FAIL          Function failed. Note, in this scenario
2392  *                                  it is INVALID to call this function a
2393  *                                  second time.
2394  * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
2395  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
2396  *
2397  * @pre
2398  *      None
2399  * @post
2400  *      None
2401  * @note
2402  *      None
2403  * @see
2404  *      CpaStatus
2405  *
2406  *****************************************************************************/
2407 
2408 CpaStatus
2409 cpaDcGetStatusText(const CpaInstanceHandle dcInstance,
2410                    const CpaStatus errStatus,
2411                    Cpa8S * pStatusText);
2412 
2413 
2414 /**
2415  *****************************************************************************
2416  * @ingroup cpaDc
2417  *      Set Address Translation function
2418  *
2419  * @description
2420  *      This function is used to set the virtual to physical address
2421  *      translation routine for the instance. The specified routine
2422  *      is used by the instance to perform any required translation of
2423  *      a virtual address to a physical address. If the application
2424  *      does not invoke this function, then the instance will use its
2425  *      default method, such as virt2phys, for address translation.
2426  *
2427  * @assumptions
2428  *      None
2429  * @sideEffects
2430  *      None
2431  * @blocking
2432  *      This function is synchronous and blocking.
2433  * @reentrant
2434  *      No
2435  * @threadSafe
2436  *      Yes
2437  *
2438  * @param[in] instanceHandle         Data Compression API instance handle.
2439  * @param[in] virtual2Physical       Routine that performs virtual to
2440  *                                    physical address translation.
2441  * @retval CPA_STATUS_SUCCESS        Function executed successfully.
2442  * @retval CPA_STATUS_FAIL           Function failed.
2443  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in.
2444  * @retval CPA_STATUS_UNSUPPORTED    Function is not supported.
2445  *
2446  * @pre
2447  *      None
2448  * @post
2449  *      None
2450  * @see
2451  *      None
2452  *
2453  *****************************************************************************/
2454 CpaStatus
2455 cpaDcSetAddressTranslation(const CpaInstanceHandle instanceHandle,
2456                            CpaVirtualToPhysical virtual2Physical);
2457 #ifdef __cplusplus
2458 } /* close the extern "C" { */
2459 #endif
2460 
2461 #endif /* CPA_DC_H */
2462