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


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

FreeBSD/Linux Kernel Cross Reference
sys/dev/qat/qat_api/common/compression/include/dc_session.h

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

    1 /* SPDX-License-Identifier: BSD-3-Clause */
    2 /* Copyright(c) 2007-2022 Intel Corporation */
    3 /* $FreeBSD$ */
    4 /**
    5  *****************************************************************************
    6  * @file dc_session.h
    7  *
    8  * @ingroup Dc_DataCompression
    9  *
   10  * @description
   11  *      Definition of the Data Compression session parameters.
   12  *
   13  *****************************************************************************/
   14 #ifndef DC_SESSION_H
   15 #define DC_SESSION_H
   16 
   17 #include "cpa_dc_dp.h"
   18 #include "icp_qat_fw_comp.h"
   19 #include "sal_qat_cmn_msg.h"
   20 #include "sal_types_compression.h"
   21 
   22 /* Maximum number of intermediate buffers SGLs for devices
   23  * with a maximum of 6 compression slices */
   24 #define DC_QAT_MAX_NUM_INTER_BUFFERS_6COMP_SLICES (12)
   25 
   26 /* Maximum number of intermediate buffers SGLs for devices
   27  * with a maximum of 10 max compression slices */
   28 #define DC_QAT_MAX_NUM_INTER_BUFFERS_10COMP_SLICES (20)
   29 
   30 /* Maximum number of intermediate buffers SGLs for devices
   31  * with a maximum of 24 max compression slices and 32 MEs */
   32 #define DC_QAT_MAX_NUM_INTER_BUFFERS_24COMP_SLICES (64)
   33 
   34 /* Maximum size of the state registers 64 bytes */
   35 #define DC_QAT_STATE_REGISTERS_MAX_SIZE (64)
   36 
   37 /* Size of the history window.
   38  * Base 2 logarithm of maximum window size minus 8 */
   39 #define DC_4K_WINDOW_SIZE (4)
   40 #define DC_8K_WINDOW_SIZE (5)
   41 #define DC_16K_WINDOW_SIZE (6)
   42 #define DC_32K_WINDOW_SIZE (7)
   43 
   44 /* Context size */
   45 #define DC_DEFLATE_MAX_CONTEXT_SIZE (49152)
   46 #define DC_INFLATE_CONTEXT_SIZE (36864)
   47 
   48 #define DC_DEFLATE_EH_MAX_CONTEXT_SIZE (65536)
   49 #define DC_DEFLATE_EH_MIN_CONTEXT_SIZE (49152)
   50 #define DC_INFLATE_EH_CONTEXT_SIZE (34032)
   51 
   52 /* Retrieve the session descriptor pointer from the session context structure
   53  * that the user allocates. The pointer to the internally realigned address
   54  * is stored at the start of the session context that the user allocates */
   55 #define DC_SESSION_DESC_FROM_CTX_GET(pSession)                                 \
   56         (dc_session_desc_t *)(*(LAC_ARCH_UINT *)pSession)
   57 
   58 /* Maximum size for the compression part of the content descriptor */
   59 #define DC_QAT_COMP_CONTENT_DESC_SIZE sizeof(icp_qat_fw_comp_cd_hdr_t)
   60 
   61 /* Maximum size for the translator part of the content descriptor */
   62 #define DC_QAT_TRANS_CONTENT_DESC_SIZE                                         \
   63         (sizeof(icp_qat_fw_xlt_cd_hdr_t) + DC_QAT_MAX_TRANS_SETUP_BLK_SZ)
   64 
   65 /* Maximum size of the decompression content descriptor */
   66 #define DC_QAT_CONTENT_DESC_DECOMP_MAX_SIZE                                    \
   67         LAC_ALIGN_POW2_ROUNDUP(DC_QAT_COMP_CONTENT_DESC_SIZE,                  \
   68                                (1 << LAC_64BYTE_ALIGNMENT_SHIFT))
   69 
   70 /* Maximum size of the compression content descriptor */
   71 #define DC_QAT_CONTENT_DESC_COMP_MAX_SIZE                                      \
   72         LAC_ALIGN_POW2_ROUNDUP(DC_QAT_COMP_CONTENT_DESC_SIZE +                 \
   73                                    DC_QAT_TRANS_CONTENT_DESC_SIZE,             \
   74                                (1 << LAC_64BYTE_ALIGNMENT_SHIFT))
   75 
   76 /* Direction of the request */
   77 typedef enum dc_request_dir_e {
   78         DC_COMPRESSION_REQUEST = 1,
   79         DC_DECOMPRESSION_REQUEST
   80 } dc_request_dir_t;
   81 
   82 /* Type of the compression request */
   83 typedef enum dc_request_type_e {
   84         DC_REQUEST_FIRST = 1,
   85         DC_REQUEST_SUBSEQUENT
   86 } dc_request_type_t;
   87 
   88 typedef enum dc_block_type_e {
   89         DC_CLEARTEXT_TYPE = 0,
   90         DC_STATIC_TYPE,
   91         DC_DYNAMIC_TYPE
   92 } dc_block_type_t;
   93 
   94 /* Internal data structure supporting end to end data integrity checks. */
   95 typedef struct dc_integrity_crc_fw_s {
   96         Cpa32U crc32;
   97         /* CRC32 checksum returned for compressed data */
   98         Cpa32U adler32;
   99         /* ADLER32 checksum returned for compressed data */
  100 
  101         union {
  102                 struct {
  103                         Cpa32U oCrc32Cpr;
  104                         /* CRC32 checksum returned for data output by
  105                          * compression accelerator */
  106                         Cpa32U iCrc32Cpr;
  107                         /* CRC32 checksum returned for input data to compression
  108                          * accelerator
  109                          */
  110                         Cpa32U oCrc32Xlt;
  111                         /* CRC32 checksum returned for data output by translator
  112                          * accelerator
  113                          */
  114                         Cpa32U iCrc32Xlt;
  115                         /* CRC32 checksum returned for input data to translator
  116                          * accelerator
  117                          */
  118                         Cpa32U xorFlags;
  119                         /* Initialise transactor pCRC controls in state register
  120                          */
  121                         Cpa32U crcPoly;
  122                         /* CRC32 polynomial used by hardware */
  123                         Cpa32U xorOut;
  124                         /* CRC32 from XOR stage (Input CRC is xor'ed with value
  125                          * in the state) */
  126                         Cpa32U deflateBlockType;
  127                         /* Bit 1 - Bit 0
  128                          *   0        0 -> RAW DATA + Deflate header.
  129                          *                 This will not produced any CRC check
  130                          *                 because the output will not come
  131                          *                 from the slices. It will be a simple
  132                          *                 copy from input to output buffer
  133                          * list. 0        1 -> Static deflate block type 1 0 ->
  134                          * Dynamic deflate block type 1        1 -> Invalid type
  135                          */
  136                 };
  137 
  138                 struct {
  139                         Cpa64U iCrc64Cpr;
  140                         /* CRC64 checksum returned for input data to compression
  141                          * accelerator
  142                          */
  143                         Cpa64U oCrc64Cpr;
  144                         /* CRC64 checksum returned for data output by
  145                          * compression accelerator */
  146                         Cpa64U iCrc64Xlt;
  147                         /* CRC64 checksum returned for input data to translator
  148                          * accelerator
  149                          */
  150                         Cpa64U oCrc64Xlt;
  151                         /* CRC64 checksum returned for data output by translator
  152                          * accelerator
  153                          */
  154                         Cpa64U crc64Poly;
  155                         /* CRC64 polynomial used by hardware */
  156                         Cpa64U xor64Out;
  157                         /* CRC64 from XOR stage (Input CRC is xor'ed with value
  158                          * in the state) */
  159                 };
  160         };
  161 } dc_integrity_crc_fw_t;
  162 
  163 typedef struct dc_sw_checksums_s {
  164         union {
  165                 struct {
  166                         Cpa32U swCrc32I;
  167                         Cpa32U swCrc32O;
  168                 };
  169 
  170                 struct {
  171                         Cpa64U swCrc64I;
  172                         Cpa64U swCrc64O;
  173                 };
  174         };
  175 } dc_sw_checksums_t;
  176 
  177 /* Session descriptor structure for compression */
  178 typedef struct dc_session_desc_s {
  179         Cpa8U stateRegistersComp[DC_QAT_STATE_REGISTERS_MAX_SIZE];
  180         /**< State registers for compression */
  181         Cpa8U stateRegistersDecomp[DC_QAT_STATE_REGISTERS_MAX_SIZE];
  182         /**< State registers for decompression */
  183         icp_qat_fw_comp_req_t reqCacheComp;
  184         /**< Cache as much as possible of the compression request in a pre-built
  185          * request */
  186         icp_qat_fw_comp_req_t reqCacheDecomp;
  187         /**< Cache as much as possible of the decompression request in a
  188          * pre-built
  189          * request */
  190         dc_request_type_t requestType;
  191         /**< Type of the compression request. As stateful mode do not support
  192          * more
  193          * than one in-flight request there is no need to use spinlocks */
  194         dc_request_type_t previousRequestType;
  195         /**< Type of the previous compression request. Used in cases where there
  196          * the
  197          * stateful operation needs to be resubmitted */
  198         CpaDcHuffType huffType;
  199         /**< Huffman tree type */
  200         CpaDcCompType compType;
  201         /**< Compression type */
  202         CpaDcChecksum checksumType;
  203         /**< Type of checksum */
  204         CpaDcAutoSelectBest autoSelectBestHuffmanTree;
  205         /**< Indicates if the implementation selects the best Huffman encoding
  206          */
  207         CpaDcSessionDir sessDirection;
  208         /**< Session direction */
  209         CpaDcSessionState sessState;
  210         /**< Session state */
  211         Cpa32U deflateWindowSize;
  212         /**< Window size */
  213         CpaDcCompLvl compLevel;
  214         /**< Compression level */
  215         CpaDcCallbackFn pCompressionCb;
  216         /**< Callback function defined for the traditional compression session
  217          */
  218         QatUtilsAtomic pendingStatelessCbCount;
  219         /**< Keeps track of number of pending requests on stateless session */
  220         QatUtilsAtomic pendingStatefulCbCount;
  221         /**< Keeps track of number of pending requests on stateful session */
  222         Cpa64U pendingDpStatelessCbCount;
  223         /**< Keeps track of number of data plane pending requests on stateless
  224          * session */
  225         struct mtx sessionLock;
  226         /**< Lock used to provide exclusive access for number of stateful
  227          * in-flight
  228          * requests update */
  229         CpaBoolean isDcDp;
  230         /**< Indicates if the data plane API is used */
  231         Cpa32U minContextSize;
  232         /**< Indicates the minimum size required to allocate the context buffer
  233          */
  234         CpaBufferList *pContextBuffer;
  235         /**< Context buffer */
  236         Cpa32U historyBuffSize;
  237         /**< Size of the history buffer */
  238         Cpa64U cumulativeConsumedBytes;
  239         /**< Cumulative amount of consumed bytes. Used to build the footer in
  240          * the
  241          * stateful case */
  242         Cpa32U previousChecksum;
  243         /**< Save the previous value of the checksum. Used to process zero byte
  244          * stateful compression or decompression requests */
  245         CpaBoolean isSopForCompressionProcessed;
  246         /**< Indicates whether a Compression Request is received in this session
  247          */
  248         CpaBoolean isSopForDecompressionProcessed;
  249         /**< Indicates whether a Decompression Request is received in this
  250          * session
  251          */
  252         /**< Data integrity table */
  253         dc_integrity_crc_fw_t dataIntegrityCrcs;
  254         /**< Physical address of Data integrity buffer */
  255         CpaPhysicalAddr physDataIntegrityCrcs;
  256         /* Seed checksums structure used to calculate software calculated
  257          * checksums.
  258          */
  259         dc_sw_checksums_t seedSwCrc;
  260         /* Driver calculated integrity software CRC */
  261         dc_sw_checksums_t integritySwCrc;
  262         /* Flag to disable or enable CnV Error Injection mechanism */
  263         CpaBoolean cnvErrorInjection;
  264 } dc_session_desc_t;
  265 
  266 /**
  267  *****************************************************************************
  268  * @ingroup Dc_DataCompression
  269  *      Initialise a compression session
  270  *
  271  * @description
  272  *      This function will initialise a compression session
  273  *
  274  * @param[in]       dcInstance       Instance handle derived from discovery
  275  *                                   functions
  276  * @param[in,out]   pSessionHandle   Pointer to a session handle
  277  * @param[in,out]   pSessionData     Pointer to a user instantiated structure
  278  *                                   containing session data
  279  * @param[in]       pContextBuffer   Pointer to context buffer
  280  *
  281  * @param[in]       callbackFn       For synchronous operation this callback
  282  *                                   shall be a null pointer
  283  *
  284  * @retval CPA_STATUS_SUCCESS        Function executed successfully
  285  * @retval CPA_STATUS_FAIL           Function failed
  286  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in
  287  * @retval CPA_STATUS_RESOURCE       Error related to system resources
  288  *****************************************************************************/
  289 CpaStatus dcInitSession(CpaInstanceHandle dcInstance,
  290                         CpaDcSessionHandle pSessionHandle,
  291                         CpaDcSessionSetupData *pSessionData,
  292                         CpaBufferList *pContextBuffer,
  293                         CpaDcCallbackFn callbackFn);
  294 
  295 /**
  296  *****************************************************************************
  297  * @ingroup Dc_DataCompression
  298  *      Get the size of the memory required to hold the session information
  299  *
  300  * @description
  301  *      This function will get the size of the memory required to hold the
  302  *      session information
  303  *
  304  * @param[in]       dcInstance       Instance handle derived from discovery
  305  *                                   functions
  306  * @param[in]       pSessionData     Pointer to a user instantiated structure
  307  *                                   containing session data
  308  * @param[out]      pSessionSize     On return, this parameter will be the size
  309  *                                   of the memory that will be
  310  *                                   required by cpaDcInitSession() for session
  311  *                                   data.
  312  * @param[out]      pContextSize     On return, this parameter will be the size
  313  *                                   of the memory that will be required
  314  *                                   for context data.  Context data is
  315  *                                   save/restore data including history and
  316  *                                   any implementation specific data that is
  317  *                                   required for a save/restore operation.
  318  *
  319  * @retval CPA_STATUS_SUCCESS        Function executed successfully
  320  * @retval CPA_STATUS_FAIL           Function failed
  321  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in
  322  *****************************************************************************/
  323 CpaStatus dcGetSessionSize(CpaInstanceHandle dcInstance,
  324                            CpaDcSessionSetupData *pSessionData,
  325                            Cpa32U *pSessionSize,
  326                            Cpa32U *pContextSize);
  327 
  328 /**
  329  *****************************************************************************
  330  * @ingroup Dc_DataCompression
  331  *      Set the cnvErrorInjection flag in session descriptor
  332  *
  333  * @description
  334  *      This function enables the CnVError injection for the session
  335  *      passed in. All Compression requests sent within the session
  336  *      are injected with CnV errors. This error injection is for the
  337  *      duration of the session. Resetting the session results in
  338  *      setting being cleared. CnV error injection does not apply to
  339  *      Data Plane API.
  340  *
  341  * @param[in]       dcInstance       Instance Handle
  342  * @param[in]       pSessionHandle   Pointer to a session handle
  343  *
  344  * @retval CPA_STATUS_SUCCESS        Function executed successfully
  345  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in
  346  * @retval CPA_STATUS_UNSUPPORTED    Unsupported feature
  347  *****************************************************************************/
  348 CpaStatus dcSetCnvError(CpaInstanceHandle dcInstance,
  349                         CpaDcSessionHandle pSessionHandle);
  350 
  351 /**
  352  *****************************************************************************
  353  * @ingroup Dc_DataCompression
  354  *      Check that pSessionData is valid
  355  *
  356  * @description
  357  *      Check that all the parameters defined in the pSessionData are valid
  358  *
  359  * @param[in]       pSessionData     Pointer to a user instantiated structure
  360  *                                   containing session data
  361  *
  362  * @retval CPA_STATUS_SUCCESS        Function executed successfully
  363  * @retval CPA_STATUS_FAIL           Function failed to find device
  364  * @retval CPA_STATUS_INVALID_PARAM  Invalid parameter passed in
  365  * @retval CPA_STATUS_UNSUPPORTED    Unsupported algorithm/feature
  366  *
  367  *****************************************************************************/
  368 CpaStatus dcCheckSessionData(const CpaDcSessionSetupData *pSessionData,
  369                              CpaInstanceHandle dcInstance);
  370 
  371 /**
  372  *****************************************************************************
  373  * @ingroup Dc_DataCompression
  374  *      Get the compression command id for the given session setup data.
  375  *
  376  * @description
  377  *      This function will get the compression command id based on parameters
  378  *      passed in the given session setup data.
  379  *
  380  * @param[in]   pService           Pointer to the service
  381  * @param[in]   pSessionData       Pointer to a user instantiated
  382  *                                 structure containing session data
  383  * @param[out]  pDcCmdId           Pointer to the command id
  384  *
  385  * @retval CPA_STATUS_SUCCESS      Function executed successfully
  386  * @retval CPA_STATUS_UNSUPPORTED  Unsupported algorithm/feature
  387  *
  388  *****************************************************************************/
  389 CpaStatus dcGetCompressCommandId(sal_compression_service_t *pService,
  390                                  CpaDcSessionSetupData *pSessionData,
  391                                  Cpa8U *pDcCmdId);
  392 
  393 /**
  394  *****************************************************************************
  395  * @ingroup Dc_DataCompression
  396  *      Get the decompression command id for the given session setup data.
  397  *
  398  * @description
  399  *      This function will get the decompression command id based on parameters
  400  *      passed in the given session setup data.
  401  *
  402  * @param[in]   pService           Pointer to the service
  403  * @param[in]   pSessionData       Pointer to a user instantiated
  404  *                                 structure containing session data
  405  * @param[out]  pDcCmdId           Pointer to the command id
  406  *
  407  * @retval CPA_STATUS_SUCCESS      Function executed successfully
  408  * @retval CPA_STATUS_UNSUPPORTED  Unsupported algorithm/feature
  409  *
  410  *****************************************************************************/
  411 CpaStatus dcGetDecompressCommandId(sal_compression_service_t *pService,
  412                                    CpaDcSessionSetupData *pSessionData,
  413                                    Cpa8U *pDcCmdId);
  414 
  415 /**
  416  *****************************************************************************
  417  * @ingroup Dc_DataCompression
  418  *      Populate the translator content descriptor
  419  *
  420  * @description
  421  *      This function will populate the translator content descriptor
  422  *
  423  * @param[out]  pMsg                     Pointer to the compression message
  424  * @param[in]   nextSlice                Next slice
  425  *
  426  *****************************************************************************/
  427 void dcTransContentDescPopulate(icp_qat_fw_comp_req_t *pMsg,
  428                                 icp_qat_fw_slice_t nextSlice);
  429 
  430 #endif /* DC_SESSION_H */

Cache object: e4267e0b0533fe93a8396773e36575f8


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


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