aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/qat/qat_api/common/compression/include/dc_session.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/qat/qat_api/common/compression/include/dc_session.h')
-rw-r--r--sys/dev/qat/qat_api/common/compression/include/dc_session.h278
1 files changed, 278 insertions, 0 deletions
diff --git a/sys/dev/qat/qat_api/common/compression/include/dc_session.h b/sys/dev/qat/qat_api/common/compression/include/dc_session.h
new file mode 100644
index 000000000000..5a4961fadd60
--- /dev/null
+++ b/sys/dev/qat/qat_api/common/compression/include/dc_session.h
@@ -0,0 +1,278 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/* Copyright(c) 2007-2022 Intel Corporation */
+/* $FreeBSD$ */
+/**
+ *****************************************************************************
+ * @file dc_session.h
+ *
+ * @ingroup Dc_DataCompression
+ *
+ * @description
+ * Definition of the Data Compression session parameters.
+ *
+ *****************************************************************************/
+#ifndef DC_SESSION_H
+#define DC_SESSION_H
+
+#include "cpa_dc_dp.h"
+#include "icp_qat_fw_comp.h"
+#include "sal_qat_cmn_msg.h"
+
+/* Maximum number of intermediate buffers SGLs for devices
+ * with a maximum of 6 compression slices */
+#define DC_QAT_MAX_NUM_INTER_BUFFERS_6COMP_SLICES (12)
+
+/* Maximum number of intermediate buffers SGLs for devices
+ * with a maximum of 10 max compression slices */
+#define DC_QAT_MAX_NUM_INTER_BUFFERS_10COMP_SLICES (20)
+
+/* Maximum number of intermediate buffers SGLs for devices
+ * with a maximum of 24 max compression slices and 32 MEs */
+#define DC_QAT_MAX_NUM_INTER_BUFFERS_24COMP_SLICES (64)
+
+/* Maximum size of the state registers 64 bytes */
+#define DC_QAT_STATE_REGISTERS_MAX_SIZE (64)
+
+/* Size of the history window.
+ * Base 2 logarithm of maximum window size minus 8 */
+#define DC_8K_WINDOW_SIZE (5)
+#define DC_16K_WINDOW_SIZE (6)
+#define DC_32K_WINDOW_SIZE (7)
+
+/* Context size */
+#define DC_DEFLATE_MAX_CONTEXT_SIZE (49152)
+#define DC_INFLATE_CONTEXT_SIZE (36864)
+
+#define DC_DEFLATE_EH_MAX_CONTEXT_SIZE (65536)
+#define DC_DEFLATE_EH_MIN_CONTEXT_SIZE (49152)
+#define DC_INFLATE_EH_CONTEXT_SIZE (34032)
+
+/* Retrieve the session descriptor pointer from the session context structure
+ * that the user allocates. The pointer to the internally realigned address
+ * is stored at the start of the session context that the user allocates */
+#define DC_SESSION_DESC_FROM_CTX_GET(pSession) \
+ (dc_session_desc_t *)(*(LAC_ARCH_UINT *)pSession)
+
+/* Maximum size for the compression part of the content descriptor */
+#define DC_QAT_COMP_CONTENT_DESC_SIZE sizeof(icp_qat_fw_comp_cd_hdr_t)
+
+/* Maximum size for the translator part of the content descriptor */
+#define DC_QAT_TRANS_CONTENT_DESC_SIZE \
+ (sizeof(icp_qat_fw_xlt_cd_hdr_t) + DC_QAT_MAX_TRANS_SETUP_BLK_SZ)
+
+/* Maximum size of the decompression content descriptor */
+#define DC_QAT_CONTENT_DESC_DECOMP_MAX_SIZE \
+ LAC_ALIGN_POW2_ROUNDUP(DC_QAT_COMP_CONTENT_DESC_SIZE, \
+ (1 << LAC_64BYTE_ALIGNMENT_SHIFT))
+
+/* Maximum size of the compression content descriptor */
+#define DC_QAT_CONTENT_DESC_COMP_MAX_SIZE \
+ LAC_ALIGN_POW2_ROUNDUP(DC_QAT_COMP_CONTENT_DESC_SIZE + \
+ DC_QAT_TRANS_CONTENT_DESC_SIZE, \
+ (1 << LAC_64BYTE_ALIGNMENT_SHIFT))
+
+/* Direction of the request */
+typedef enum dc_request_dir_e {
+ DC_COMPRESSION_REQUEST = 1,
+ DC_DECOMPRESSION_REQUEST
+} dc_request_dir_t;
+
+/* Type of the compression request */
+typedef enum dc_request_type_e {
+ DC_REQUEST_FIRST = 1,
+ DC_REQUEST_SUBSEQUENT
+} dc_request_type_t;
+
+typedef enum dc_block_type_e {
+ DC_CLEARTEXT_TYPE = 0,
+ DC_STATIC_TYPE,
+ DC_DYNAMIC_TYPE
+} dc_block_type_t;
+
+/* Internal data structure supporting end to end data integrity checks. */
+typedef struct dc_integrity_crc_fw_s {
+ Cpa32U crc32;
+ /* CRC32 checksum returned for compressed data */
+ Cpa32U adler32;
+ /* ADLER32 checksum returned for compressed data */
+ Cpa32U oCrc32Cpr;
+ /* CRC32 checksum returned for data output by compression accelerator */
+ Cpa32U iCrc32Cpr;
+ /* CRC32 checksum returned for input data to compression accelerator */
+ Cpa32U oCrc32Xlt;
+ /* CRC32 checksum returned for data output by translator accelerator */
+ Cpa32U iCrc32Xlt;
+ /* CRC32 checksum returned for input data to translator accelerator */
+ Cpa32U xorFlags;
+ /* Initialise transactor pCRC controls in state register */
+ Cpa32U crcPoly;
+ /* CRC32 polynomial used by hardware */
+ Cpa32U xorOut;
+ /* CRC32 from XOR stage (Input CRC is xor'ed with value in the state) */
+ Cpa32U deflateBlockType;
+ /* Bit 1 - Bit 0
+ * 0 0 -> RAW DATA + Deflate header.
+ * This will not produced any CRC check because
+ * the output will not come from the slices.
+ * It will be a simple copy from input to output
+ * buffers list.
+ * 0 1 -> Static deflate block type
+ * 1 0 -> Dynamic deflate block type
+ * 1 1 -> Invalid type */
+} dc_integrity_crc_fw_t;
+
+typedef struct dc_sw_checksums_s {
+ Cpa32U swCrcI;
+ Cpa32U swCrcO;
+} dc_sw_checksums_t;
+
+/* Session descriptor structure for compression */
+typedef struct dc_session_desc_s {
+ Cpa8U stateRegistersComp[DC_QAT_STATE_REGISTERS_MAX_SIZE];
+ /**< State registers for compression */
+ Cpa8U stateRegistersDecomp[DC_QAT_STATE_REGISTERS_MAX_SIZE];
+ /**< State registers for decompression */
+ icp_qat_fw_comp_req_t reqCacheComp;
+ /**< Cache as much as possible of the compression request in a pre-built
+ * request */
+ icp_qat_fw_comp_req_t reqCacheDecomp;
+ /**< Cache as much as possible of the decompression request in a
+ * pre-built
+ * request */
+ dc_request_type_t requestType;
+ /**< Type of the compression request. As stateful mode do not support
+ * more
+ * than one in-flight request there is no need to use spinlocks */
+ dc_request_type_t previousRequestType;
+ /**< Type of the previous compression request. Used in cases where there
+ * the
+ * stateful operation needs to be resubmitted */
+ CpaDcHuffType huffType;
+ /**< Huffman tree type */
+ CpaDcCompType compType;
+ /**< Compression type */
+ CpaDcChecksum checksumType;
+ /**< Type of checksum */
+ CpaDcAutoSelectBest autoSelectBestHuffmanTree;
+ /**< Indicates if the implementation selects the best Huffman encoding
+ */
+ CpaDcSessionDir sessDirection;
+ /**< Session direction */
+ CpaDcSessionState sessState;
+ /**< Session state */
+ Cpa32U deflateWindowSize;
+ /**< Window size */
+ CpaDcCompLvl compLevel;
+ /**< Compression level */
+ CpaDcCallbackFn pCompressionCb;
+ /**< Callback function defined for the traditional compression session
+ */
+ QatUtilsAtomic pendingStatelessCbCount;
+ /**< Keeps track of number of pending requests on stateless session */
+ QatUtilsAtomic pendingStatefulCbCount;
+ /**< Keeps track of number of pending requests on stateful session */
+ Cpa64U pendingDpStatelessCbCount;
+ /**< Keeps track of number of data plane pending requests on stateless
+ * session */
+ struct mtx sessionLock;
+ /**< Lock used to provide exclusive access for number of stateful
+ * in-flight
+ * requests update */
+ CpaBoolean isDcDp;
+ /**< Indicates if the data plane API is used */
+ Cpa32U minContextSize;
+ /**< Indicates the minimum size required to allocate the context buffer
+ */
+ CpaBufferList *pContextBuffer;
+ /**< Context buffer */
+ Cpa32U historyBuffSize;
+ /**< Size of the history buffer */
+ Cpa64U cumulativeConsumedBytes;
+ /**< Cumulative amount of consumed bytes. Used to build the footer in
+ * the
+ * stateful case */
+ Cpa32U previousChecksum;
+ /**< Save the previous value of the checksum. Used to process zero byte
+ * stateful compression or decompression requests */
+ CpaBoolean isSopForCompressionProcessed;
+ /**< Indicates whether a Compression Request is received in this session
+ */
+ CpaBoolean isSopForDecompressionProcessed;
+ /**< Indicates whether a Decompression Request is received in this
+ * session
+ */
+ /**< Data integrity table */
+ dc_integrity_crc_fw_t dataIntegrityCrcs;
+ /**< Physical address of Data integrity buffer */
+ CpaPhysicalAddr physDataIntegrityCrcs;
+ /* Seed checksums structure used to calculate software calculated
+ * checksums.
+ */
+ dc_sw_checksums_t seedSwCrc;
+ /* Driver calculated integrity software CRC */
+ dc_sw_checksums_t integritySwCrc;
+} dc_session_desc_t;
+
+/**
+ *****************************************************************************
+ * @ingroup Dc_DataCompression
+ * Initialise a compression session
+ *
+ * @description
+ * This function will initialise a compression session
+ *
+ * @param[in] dcInstance Instance handle derived from discovery
+ * functions
+ * @param[in,out] pSessionHandle Pointer to a session handle
+ * @param[in,out] pSessionData Pointer to a user instantiated structure
+ * containing session data
+ * @param[in] pContextBuffer Pointer to context buffer
+ *
+ * @param[in] callbackFn For synchronous operation this callback
+ * shall be a null pointer
+ *
+ * @retval CPA_STATUS_SUCCESS Function executed successfully
+ * @retval CPA_STATUS_FAIL Function failed
+ * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in
+ * @retval CPA_STATUS_RESOURCE Error related to system resources
+ *****************************************************************************/
+CpaStatus dcInitSession(CpaInstanceHandle dcInstance,
+ CpaDcSessionHandle pSessionHandle,
+ CpaDcSessionSetupData *pSessionData,
+ CpaBufferList *pContextBuffer,
+ CpaDcCallbackFn callbackFn);
+
+/**
+ *****************************************************************************
+ * @ingroup Dc_DataCompression
+ * Get the size of the memory required to hold the session information
+ *
+ * @description
+ * This function will get the size of the memory required to hold the
+ * session information
+ *
+ * @param[in] dcInstance Instance handle derived from discovery
+ * functions
+ * @param[in] pSessionData Pointer to a user instantiated structure
+ * containing session data
+ * @param[out] pSessionSize On return, this parameter will be the size
+ * of the memory that will be
+ * required by cpaDcInitSession() for session
+ * data.
+ * @param[out] pContextSize On return, this parameter will be the size
+ * of the memory that will be required
+ * for context data. Context data is
+ * save/restore data including history and
+ * any implementation specific data that is
+ * required for a save/restore operation.
+ *
+ * @retval CPA_STATUS_SUCCESS Function executed successfully
+ * @retval CPA_STATUS_FAIL Function failed
+ * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in
+ *****************************************************************************/
+CpaStatus dcGetSessionSize(CpaInstanceHandle dcInstance,
+ CpaDcSessionSetupData *pSessionData,
+ Cpa32U *pSessionSize,
+ Cpa32U *pContextSize);
+
+#endif /* DC_SESSION_H */