aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/qat/qat_api/common/compression/include/dc_session.h
diff options
context:
space:
mode:
authorJulian Grajkowski <julianx.grajkowski@intel.com>2022-07-19 08:15:34 +0000
committerMark Johnston <markj@FreeBSD.org>2022-07-27 15:12:35 +0000
commit78ee8d1c4cdad7a56dbf50f1c8ade75531ce620c (patch)
tree4e96ef389636fdec894275b41201927d26d7677c /sys/dev/qat/qat_api/common/compression/include/dc_session.h
parentf4f56ff43dbd30930f4b018e39ba2b9abf84551f (diff)
downloadsrc-78ee8d1c4cdad7a56dbf50f1c8ade75531ce620c.tar.gz
src-78ee8d1c4cdad7a56dbf50f1c8ade75531ce620c.zip
qat: Import a new Intel (R) QAT driver
QAT in-tree driver ported from out-of-tree release available from 01.org. The driver exposes complete cryptography and data compression API in the kernel and integrates with Open Crypto Framework. Details of supported operations, devices and usage can be found in man and on 01.org. Patch co-authored by: Krzysztof Zdziarski <krzysztofx.zdziarski@intel.com> Patch co-authored by: Michal Jaraczewski <michalx.jaraczewski@intel.com> Patch co-authored by: Michal Gulbicki <michalx.gulbicki@intel.com> Patch co-authored by: Julian Grajkowski <julianx.grajkowski@intel.com> Patch co-authored by: Piotr Kasierski <piotrx.kasierski@intel.com> Patch co-authored by: Adam Czupryna <adamx.czupryna@intel.com> Patch co-authored by: Konrad Zelazny <konradx.zelazny@intel.com> Patch co-authored by: Katarzyna Rucinska <katarzynax.kargol@intel.com> Patch co-authored by: Lukasz Kolodzinski <lukaszx.kolodzinski@intel.com> Patch co-authored by: Zbigniew Jedlinski <zbigniewx.jedlinski@intel.com> Reviewed by: markj, jhb (OCF integration) Reviewed by: debdrup, pauamma (docs) Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D34632
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 */