diff --git a/docs/.buildinfo b/docs/.buildinfo index 5bd439f..6c94c59 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: d20b8787726b6c6dedc703c40d32aa4c +config: 4df381740be1fe411c517b02449dfef9 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/404.html b/docs/404.html index f7d9795..f377eee 100644 --- a/docs/404.html +++ b/docs/404.html @@ -15,9 +15,7 @@ - - @@ -73,8 +71,8 @@
diff --git a/docs/API_PG/QAT_compressionAPI.html b/docs/API_PG/QAT_compressionAPI.html index 228a7fc..b180a9e 100644 --- a/docs/API_PG/QAT_compressionAPI.html +++ b/docs/API_PG/QAT_compressionAPI.html @@ -1,7 +1,7 @@ - + Intel® QAT Data Compression API — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -97,9 +95,9 @@
@@ -109,7 +107,7 @@
-

Intel® QAT Data Compression API

+

Intel® QAT Data Compression API

This section describes the sample code for the Intel® QuickAssist Technology Data Compression API, beginning with an API overview, and followed by descriptions of various scenarios to illustrate the usage of the API.

@@ -121,7 +119,7 @@ information on data integrity concepts, including the Compress-and-Verify feature.

-

Overview

+

Overview

The Intel® QuickAssist Technology Data Compression API can be categorized into three broad areas as follows:

-

Stateless Data Compression

+

Stateless Data Compression

This example demonstrates the usage of the asynchronous API, specifically using this API to perform a compression operation. It compresses a data buffer through a stateless session using the deflate compress algorithm with dynamic Huffman trees.

@@ -520,100 +518,100 @@

Stateless Data Compression
status = cpaDcQueryCapabilities(dcInstHandle, &cap);
-
-if (status != CPA_STATUS_SUCCESS) {
-    return status;
-}
-
-if (!cap.statelessDeflateCompression || !cap.statelessDeflateDecompression || !cap.checksumAdler32 || !cap.dynamicHuffman) {
-    PRINT_DBG("Error: Unsupported functionality\n");
-    return CPA_STATUS_FAIL;
-}
-
-if (cap.dynamicHuffmanBufferReq) {
-    status = cpaDcBufferListGetMetaSize(dcInstHandle, 1, &buffMetaSize);
-
-    if (CPA_STATUS_SUCCESS == status) {
-        status = cpaDcGetNumIntermediateBuffers(dcInstHandle, &numInterBuffLists);
-    }
-    if (CPA_STATUS_SUCCESS == status && 0 != numInterBuffLists) {
-        status = PHYS_CONTIG_ALLOC(&bufferInterArray, numInterBuffLists * sizeof(CpaBufferList *));
-    }
-    for (bufferNum = 0; bufferNum < numInterBuffLists; bufferNum++) {
-        if (CPA_STATUS_SUCCESS == status) {
-            status = PHYS_CONTIG_ALLOC(&bufferInterArray[bufferNum], sizeof(CpaBufferList));
-        }
-        if (CPA_STATUS_SUCCESS == status) {
-            status = PHYS_CONTIG_ALLOC(&bufferInterArray[bufferNum]->pPrivateMetaData, buffMetaSize);
-        }
-        if (CPA_STATUS_SUCCESS == status) {
-            status = PHYS_CONTIG_ALLOC(&bufferInterArray[bufferNum]->pBuffers, sizeof(CpaFlatBuffer));
-        }
-        if (CPA_STATUS_SUCCESS == status) {
-            /* Implementation requires an intermediate buffer approximately twice the size of the output buffer */
-            status = PHYS_CONTIG_ALLOC(&bufferInterArray[bufferNum]->pBuffers->pData, 2 * SAMPLE_MAX_BUFF);
-            bufferInterArray[bufferNum]->numBuffers = 1;
-            bufferInterArray[bufferNum]->pBuffers->dataLenInBytes = 2 * SAMPLE_MAX_BUFF;
-        }
-    } /* End numInterBuffLists */
-}
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Set the address translation function for the instance */
-    status = cpaDcSetAddressTranslation(dcInstHandle, sampleVirtToPhys);
-}
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Start DataCompression component */
-    PRINT_DBG("cpaDcStartInstance\n");
-    status = cpaDcStartInstance(dcInstHandle, numInterBuffLists, bufferInterArray);
-}
+
status = cpaDcQueryCapabilities(dcInstHandle, &cap);
+
+if (status != CPA_STATUS_SUCCESS) {
+    return status;
+}
+
+if (!cap.statelessDeflateCompression || !cap.statelessDeflateDecompression || !cap.checksumAdler32 || !cap.dynamicHuffman) {
+    PRINT_DBG("Error: Unsupported functionality\n");
+    return CPA_STATUS_FAIL;
+}
+
+if (cap.dynamicHuffmanBufferReq) {
+    status = cpaDcBufferListGetMetaSize(dcInstHandle, 1, &buffMetaSize);
+
+    if (CPA_STATUS_SUCCESS == status) {
+        status = cpaDcGetNumIntermediateBuffers(dcInstHandle, &numInterBuffLists);
+    }
+    if (CPA_STATUS_SUCCESS == status && 0 != numInterBuffLists) {
+        status = PHYS_CONTIG_ALLOC(&bufferInterArray, numInterBuffLists * sizeof(CpaBufferList *));
+    }
+    for (bufferNum = 0; bufferNum < numInterBuffLists; bufferNum++) {
+        if (CPA_STATUS_SUCCESS == status) {
+            status = PHYS_CONTIG_ALLOC(&bufferInterArray[bufferNum], sizeof(CpaBufferList));
+        }
+        if (CPA_STATUS_SUCCESS == status) {
+            status = PHYS_CONTIG_ALLOC(&bufferInterArray[bufferNum]->pPrivateMetaData, buffMetaSize);
+        }
+        if (CPA_STATUS_SUCCESS == status) {
+            status = PHYS_CONTIG_ALLOC(&bufferInterArray[bufferNum]->pBuffers, sizeof(CpaFlatBuffer));
+        }
+        if (CPA_STATUS_SUCCESS == status) {
+            /* Implementation requires an intermediate buffer approximately twice the size of the output buffer */
+            status = PHYS_CONTIG_ALLOC(&bufferInterArray[bufferNum]->pBuffers->pData, 2 * SAMPLE_MAX_BUFF);
+            bufferInterArray[bufferNum]->numBuffers = 1;
+            bufferInterArray[bufferNum]->pBuffers->dataLenInBytes = 2 * SAMPLE_MAX_BUFF;
+        }
+    } /* End numInterBuffLists */
+}
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Set the address translation function for the instance */
+    status = cpaDcSetAddressTranslation(dcInstHandle, sampleVirtToPhys);
+}
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Start DataCompression component */
+    PRINT_DBG("cpaDcStartInstance\n");
+    status = cpaDcStartInstance(dcInstHandle, numInterBuffLists, bufferInterArray);
+}
 

The create and initialize stateless session demonstrates the sequence of calls to be made to the API to create a session. To establish a session, describing the session must be done followed by determining how much session memory is required, and then invoke the session initialization function cpaDcInitSession. See below example.

-
sd.compLevel = CPA_DC_L4;
-sd.compType = CPA_DC_DEFLATE;
-sd.huffType = CPA_DC_HT_FULL_DYNAMIC;
+
sd.compLevel = CPA_DC_L4;
+sd.compType = CPA_DC_DEFLATE;
+sd.huffType = CPA_DC_HT_FULL_DYNAMIC;
 
 /* If the implementation supports it, the session will be configured
  * to select static Huffman encoding over dynamic Huffman as
- * the static encoding will provide better compressibility */
-if (cap.autoSelectBestHuffmanTree) {
-    sd.autoSelectBestHuffmanTree = CPA_TRUE;
-} else {
-    sd.autoSelectBestHuffmanTree = CPA_FALSE;
-}
-
-sd.sessDirection = CPA_DC_DIR_COMBINED;
-sd.sessState = CPA_DC_STATELESS;
+ * the static encoding will provide better compressibility */
+if (cap.autoSelectBestHuffmanTree) {
+    sd.autoSelectBestHuffmanTree = CPA_TRUE;
+} else {
+    sd.autoSelectBestHuffmanTree = CPA_FALSE;
+}
+
+sd.sessDirection = CPA_DC_DIR_COMBINED;
+sd.sessState = CPA_DC_STATELESS;
 #if (CPA_DC_API_VERSION_NUM_MAJOR == 1 && CPA_DC_API_VERSION_NUM_MINOR < 6)
-sd.deflateWindowSize = 7;
+sd.deflateWindowSize = 7;
 #endif
-sd.checksum = CPA_DC_ADLER32;
-
-/* Determine size of session context to allocate */
-PRINT_DBG("cpaDcGetSessionSize\n");
-status = cpaDcGetSessionSize(dcInstHandle, &sd, &sess_size, &ctx_size);
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Allocate session memory */
-    status = PHYS_CONTIG_ALLOC(&sessionHdl, sess_size);
-}
-
-/* Initialize the Stateless session */
-if (CPA_STATUS_SUCCESS == status) {
-    PRINT_DBG("cpaDcInitSession\n");
-    status = cpaDcInitSession(
-            dcInstHandle,
-            sessionHdl, /* Session memory */
-            &sd, /* Session setup data */
-            NULL, /* pContexBuffer not required for stateless operations */
-            dcCallback); /* Callback function */
-}
+sd.checksum = CPA_DC_ADLER32;
+
+/* Determine size of session context to allocate */
+PRINT_DBG("cpaDcGetSessionSize\n");
+status = cpaDcGetSessionSize(dcInstHandle, &sd, &sess_size, &ctx_size);
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Allocate session memory */
+    status = PHYS_CONTIG_ALLOC(&sessionHdl, sess_size);
+}
+
+/* Initialize the Stateless session */
+if (CPA_STATUS_SUCCESS == status) {
+    PRINT_DBG("cpaDcInitSession\n");
+    status = cpaDcInitSession(
+            dcInstHandle,
+            sessionHdl, /* Session memory */
+            &sd, /* Session setup data */
+            NULL, /* pContexBuffer not required for stateless operations */
+            dcCallback); /* Callback function */
+}
 

Source and destination buffers are allocated in a similar way to the stateful example @@ -622,12 +620,12 @@

Stateless Data Compression
sessionStatus = cpaDcRemoveSession(dcInstHandle, sessionHdl);
+
sessionStatus = cpaDcRemoveSession(dcInstHandle, sessionHdl);
 

-

Stateless Data Compression Using Multiple Compress Operations

+

Stateless Data Compression Using Multiple Compress Operations

This example demonstrates the use of the asynchronous API, specifically, using this API to perform a compression operation. It compresses a data buffer using multiple stateless compression API requests and maintains length and checksum information @@ -642,13 +640,13 @@

Stateless Data Compression Using Multiple Compress OperationsdcResults.checksum is set to 0 for CRC32 or set to 1 for Adler32 when invoking the first compress or decompress operation for a data set.

-
if (sd.checksum == CPA_DC_ADLER32) {
-    /* Initialize checksum to 1 for Adler32 */
-    dcResults.checksum = 1;
-} else {
-    /* Initialize checksum to 0 for CRC32 */
-    dcResults.checksum = 0;
-}
+
if (sd.checksum == CPA_DC_ADLER32) {
+    /* Initialize checksum to 1 for Adler32 */
+    dcResults.checksum = 1;
+} else {
+    /* Initialize checksum to 0 for CRC32 */
+    dcResults.checksum = 0;
+}
 
@@ -658,7 +656,7 @@

Stateless Data Compression Using Multiple Compress Operations -

Data Compression Data Plane API

+

Data Compression Data Plane API

This example demonstrates the usage of the data plane data compression API to perform a compression operation. It compresses a data buffer via a stateless session using the deflate compress algorithm with dynamic Huffman trees. This example is @@ -676,109 +674,109 @@

Stateless Data Compression Using Multiple Compress OperationsInstance Discovery).

The below example registers a callback function for the data compression instance.

-
status = cpaDcDpRegCbFunc(dcInstHandle, dcDpCallback);
+
status = cpaDcDpRegCbFunc(dcInstHandle, dcDpCallback);
 

Next, create and initialize a session a shown below.

-
if (CPA_STATUS_SUCCESS == status) {
-    sd.compLevel = CPA_DC_L4;
-    sd.compType = CPA_DC_DEFLATE;
-    sd.huffType = CPA_DC_HT_FULL_DYNAMIC;
+
if (CPA_STATUS_SUCCESS == status) {
+    sd.compLevel = CPA_DC_L4;
+    sd.compType = CPA_DC_DEFLATE;
+    sd.huffType = CPA_DC_HT_FULL_DYNAMIC;
 
     /* If the implementation supports it, the session will be configured
      * to select static Huffman encoding over dynamic Huffman as
-     * the static encoding will provide better compressibility */
-    if (cap.autoSelectBestHuffmanTree) {
-        sd.autoSelectBestHuffmanTree = CPA_TRUE;
-    } else {
-        sd.autoSelectBestHuffmanTree = CPA_FALSE;
-    }
-
-    sd.sessDirection = CPA_DC_DIR_COMBINED;
-    sd.sessState = CPA_DC_STATELESS;
+     * the static encoding will provide better compressibility */
+    if (cap.autoSelectBestHuffmanTree) {
+        sd.autoSelectBestHuffmanTree = CPA_TRUE;
+    } else {
+        sd.autoSelectBestHuffmanTree = CPA_FALSE;
+    }
+
+    sd.sessDirection = CPA_DC_DIR_COMBINED;
+    sd.sessState = CPA_DC_STATELESS;
     #if (CPA_DC_API_VERSION_NUM_MAJOR == 1 && CPA_DC_API_VERSION_NUM_MINOR < 6)
-    sd.deflateWindowSize = 7;
+    sd.deflateWindowSize = 7;
     #endif
-    sd.checksum = CPA_DC_CRC32;
-
-    /* Determine size of session context to allocate */
-    PRINT_DBG("cpaDcGetSessionSize\n");
-    status = cpaDcGetSessionSize(dcInstHandle, &sd, &sess_size, &ctx_size);
-}
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Allocate session memory */
-    status = PHYS_CONTIG_ALLOC(&sessionHdl, sess_size);
-}
-
-/* Initialize the Stateless session */
-if (CPA_STATUS_SUCCESS == status) {
-    PRINT_DBG("cpaDcDpInitSession\n");
-    status = cpaDcDpInitSession(
-            dcInstHandle,
-            sessionHdl, /* Session memory */
-            &sd); /* Session setup data */
-}
+    sd.checksum = CPA_DC_CRC32;
+
+    /* Determine size of session context to allocate */
+    PRINT_DBG("cpaDcGetSessionSize\n");
+    status = cpaDcGetSessionSize(dcInstHandle, &sd, &sess_size, &ctx_size);
+}
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Allocate session memory */
+    status = PHYS_CONTIG_ALLOC(&sessionHdl, sess_size);
+}
+
+/* Initialize the Stateless session */
+if (CPA_STATUS_SUCCESS == status) {
+    PRINT_DBG("cpaDcDpInitSession\n");
+    status = cpaDcDpInitSession(
+            dcInstHandle,
+            sessionHdl, /* Session memory */
+            &sd); /* Session setup data */
+}
 

In the following example, input and output data is stored in a scatter-gather list. The source and destination buffers are described using the CpaPhysBufferList structure. In this example the allocation (which needs to be 8-byte aligned) and setup of the source buffer is shown. The destination buffers can be allocated and set up in a similar way.

-
numBuffers = 2;
-
-/* Size of CpaPhysBufferList and array of CpaPhysFlatBuffers */
-bufferListMemSize = sizeof(CpaPhysBufferList) + (numBuffers * sizeof(CpaPhysFlatBuffer));
-
-/* Allocte 8-byte aligned source buffer List */
-status = PHYS_CONTIG_ALLOC_ALIGNED(&pBufferListSrc, bufferListMemSize, 8);
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Allocate first data buffer to hold half the data */
-    status = PHYS_CONTIG_ALLOC(&pSrcBuffer, (sizeof(sampleData)) / 2);
-}
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Allocate second data buffer to hold half the data */
-    status = PHYS_CONTIG_ALLOC(&pSrcBuffer2, (sizeof(sampleData)) / 2);
-}
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Copy source into buffer */
-    memcpy(pSrcBuffer, sampleData, sizeof(sampleData) / 2);
-    memcpy(pSrcBuffer2, &(sampleData[sizeof(sampleData) / 2]), sizeof(sampleData) / 2);
-    /* Build source bufferList */
-    pBufferListSrc->numBuffers = 2;
-    pBufferListSrc->flatBuffers[0].dataLenInBytes = sizeof(sampleData) / 2;
-    pBufferListSrc->flatBuffers[0].bufferPhysAddr = sampleVirtToPhys(pSrcBuffer);
-    pBufferListSrc->flatBuffers[1].dataLenInBytes = sizeof(sampleData) / 2;
-    pBufferListSrc->flatBuffers[1].bufferPhysAddr = sampleVirtToPhys(pSrcBuffer2);
-}
+
numBuffers = 2;
+
+/* Size of CpaPhysBufferList and array of CpaPhysFlatBuffers */
+bufferListMemSize = sizeof(CpaPhysBufferList) + (numBuffers * sizeof(CpaPhysFlatBuffer));
+
+/* Allocte 8-byte aligned source buffer List */
+status = PHYS_CONTIG_ALLOC_ALIGNED(&pBufferListSrc, bufferListMemSize, 8);
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Allocate first data buffer to hold half the data */
+    status = PHYS_CONTIG_ALLOC(&pSrcBuffer, (sizeof(sampleData)) / 2);
+}
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Allocate second data buffer to hold half the data */
+    status = PHYS_CONTIG_ALLOC(&pSrcBuffer2, (sizeof(sampleData)) / 2);
+}
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Copy source into buffer */
+    memcpy(pSrcBuffer, sampleData, sizeof(sampleData) / 2);
+    memcpy(pSrcBuffer2, &(sampleData[sizeof(sampleData) / 2]), sizeof(sampleData) / 2);
+    /* Build source bufferList */
+    pBufferListSrc->numBuffers = 2;
+    pBufferListSrc->flatBuffers[0].dataLenInBytes = sizeof(sampleData) / 2;
+    pBufferListSrc->flatBuffers[0].bufferPhysAddr = sampleVirtToPhys(pSrcBuffer);
+    pBufferListSrc->flatBuffers[1].dataLenInBytes = sizeof(sampleData) / 2;
+    pBufferListSrc->flatBuffers[1].bufferPhysAddr = sampleVirtToPhys(pSrcBuffer2);
+}
 

The operational data in this case is shown below.

/* Allocate memory for operational data. Note this needs to be
  * 8-byte aligned, contiguous, resident in DMA-accessible
- * memory */
-status = PHYS_CONTIG_ALLOC_ALIGNED(&pOpData, sizeof(CpaDcDpOpData), 8);
-
-if (CPA_STATUS_SUCCESS == status) {
-    pOpData->bufferLenToCompress = sizeof(sampleData);
-    pOpData->bufferLenForData = sizeof(sampleData);
-    pOpData->dcInstance = dcInstHandle;
-    pOpData->pSessionHandle = sessionHdl;
-    pOpData->srcBuffer = sampleVirtToPhys(pBufferListSrc);
-    pOpData->srcBufferLen = CPA_DP_BUFLIST;
-    pOpData->destBuffer = sampleVirtToPhys(pBufferListDst);
-    pOpData->destBufferLen = CPA_DP_BUFLIST;
-    pOpData->sessDirection = CPA_DC_DIR_COMPRESS;
-    pOpData->thisPhys = sampleVirtToPhys(pOpData);
-    pOpData->pCallbackTag = (void *)0;
-}
+ * memory */
+status = PHYS_CONTIG_ALLOC_ALIGNED(&pOpData, sizeof(CpaDcDpOpData), 8);
+
+if (CPA_STATUS_SUCCESS == status) {
+    pOpData->bufferLenToCompress = sizeof(sampleData);
+    pOpData->bufferLenForData = sizeof(sampleData);
+    pOpData->dcInstance = dcInstHandle;
+    pOpData->pSessionHandle = sessionHdl;
+    pOpData->srcBuffer = sampleVirtToPhys(pBufferListSrc);
+    pOpData->srcBufferLen = CPA_DP_BUFLIST;
+    pOpData->destBuffer = sampleVirtToPhys(pBufferListDst);
+    pOpData->destBufferLen = CPA_DP_BUFLIST;
+    pOpData->sessDirection = CPA_DC_DIR_COMPRESS;
+    pOpData->thisPhys = sampleVirtToPhys(pOpData);
+    pOpData->pCallbackTag = (void *)0;
+}
 

This request is then enqueued and submitted on the instance as shown below.

-
status = cpaDcDpEnqueueOp(pOpData, CPA_TRUE);
+
status = cpaDcDpEnqueueOp(pOpData, CPA_TRUE);
 

After possibly doing other work (e.g., enqueuing and submitting more requests), @@ -789,12 +787,12 @@

Stateless Data Compression Using Multiple Compress Operations
sessionStatus = cpaDcDpRemoveSession(dcInstHandle, sessionHdl);
+
sessionStatus = cpaDcDpRemoveSession(dcInstHandle, sessionHdl);
 

-

Chained Hash and Stateless Compression

+

Chained Hash and Stateless Compression

This example demonstrates the use of the asynchronous API, specifically, using the data compression chain API to perform chained hash and stateless compression operations. It performs a SHA-256 hash on the sample text and then compresses the @@ -803,104 +801,104 @@

Chained Hash and Stateless Compression/dc/chaining_sample.

The below example shows how to query and start a compression instance.

/* In this simplified version of instance discovery, we discover
- * exactly one instance of a data compression service */
-sampleDcGetInstance(&dcInstHandle);
-
-if (dcInstHandle == NULL) {
-    PRINT_ERR("Get instance failed\n");
-    return CPA_STATUS_FAIL;
-}
-
-/* Query Capabilities */
-PRINT_DBG("cpaDcQueryCapabilities\n");
-status = cpaDcQueryCapabilities(dcInstHandle, &cap);
-
-if (status != CPA_STATUS_SUCCESS) {
-    PRINT_ERR("Query capabilities failed\n");
-    return status;
-}
-
-if (CPA_FALSE == CPA_BITMAP_BIT_TEST(cap.dcChainCapInfo, CPA_DC_CHAIN_HASH_THEN_COMPRESS)) {
-    PRINT_ERR("Hash + compress chained operation is not supported on logical instance.\n");
-    PRINT_ERR("Please ensure StorageEnabled=1 in the device configuration file.\n");
-    return CPA_STATUS_FAIL;
-    }
-
-if (!cap.statelessDeflateCompression || !cap.checksumCRC32 || !cap.checksumAdler32) {
-    PRINT_ERR("Error: Unsupported functionality\n");
-    return CPA_STATUS_FAIL;
-}
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Set the address translation function for the instance */
-    status = cpaDcSetAddressTranslation(dcInstHandle, sampleVirtToPhys);
-}
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Start static data compression component */
-    PRINT_DBG("cpaDcStartInstance\n");
-    status = cpaDcStartInstance(dcInstHandle, 0, NULL);
-}
+ * exactly one instance of a data compression service */
+sampleDcGetInstance(&dcInstHandle);
+
+if (dcInstHandle == NULL) {
+    PRINT_ERR("Get instance failed\n");
+    return CPA_STATUS_FAIL;
+}
+
+/* Query Capabilities */
+PRINT_DBG("cpaDcQueryCapabilities\n");
+status = cpaDcQueryCapabilities(dcInstHandle, &cap);
+
+if (status != CPA_STATUS_SUCCESS) {
+    PRINT_ERR("Query capabilities failed\n");
+    return status;
+}
+
+if (CPA_FALSE == CPA_BITMAP_BIT_TEST(cap.dcChainCapInfo, CPA_DC_CHAIN_HASH_THEN_COMPRESS)) {
+    PRINT_ERR("Hash + compress chained operation is not supported on logical instance.\n");
+    PRINT_ERR("Please ensure StorageEnabled=1 in the device configuration file.\n");
+    return CPA_STATUS_FAIL;
+    }
+
+if (!cap.statelessDeflateCompression || !cap.checksumCRC32 || !cap.checksumAdler32) {
+    PRINT_ERR("Error: Unsupported functionality\n");
+    return CPA_STATUS_FAIL;
+}
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Set the address translation function for the instance */
+    status = cpaDcSetAddressTranslation(dcInstHandle, sampleVirtToPhys);
+}
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Start static data compression component */
+    PRINT_DBG("cpaDcStartInstance\n");
+    status = cpaDcStartInstance(dcInstHandle, 0, NULL);
+}
 

This example shows how to create and initialize the session.

-
if (CPA_STATUS_SUCCESS == status) {
+
if (CPA_STATUS_SUCCESS == status) {
     /* If the instance is polled start the polling thread. Note that
-     * how the polling is done is implementation-dependant */
-    sampleDcStartPolling(dcInstHandle);
+     * how the polling is done is implementation-dependant */
+    sampleDcStartPolling(dcInstHandle);
 
     /* We now populate the fields of the session operational data and
      * create the session. Note that the size required to store a session is
      * implementation-dependent, so we query the API first to determine
-     * how much memory to allocate, and then allocate that memory */
+     * how much memory to allocate, and then allocate that memory */
 
     // <snippet name="initSession">
 
-    /* Initialize compression session data */
-    dcSessionData.compLevel = CPA_DC_L1;
-    dcSessionData.compType = CPA_DC_DEFLATE;
-    dcSessionData.huffType = CPA_DC_HT_STATIC;
-    dcSessionData.autoSelectBestHuffmanTree = CPA_FALSE;
-    dcSessionData.sessDirection = CPA_DC_DIR_COMPRESS;
-    dcSessionData.sessState = CPA_DC_STATELESS;
-    dcSessionData.checksum = CPA_DC_CRC32;
-
-    /* Initialize crypto session data */
-    cySessionData.sessionPriority = CPA_CY_PRIORITY_NORMAL;
-
-    /* Hash operation on the source data */
-    cySessionData.symOperation = CPA_CY_SYM_OP_HASH;
-    cySessionData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA256;
-    cySessionData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_PLAIN;
-    cySessionData.hashSetupData.digestResultLenInBytes = GET_HASH_DIGEST_LENGTH(cySessionData.hashSetupData.hashAlgorithm);
-
-    /* Place the digest result in a buffer unrelated to srcBuffer */
-    cySessionData.digestIsAppended = CPA_FALSE;
-
-    /* Generate the digest */
-    cySessionData.verifyDigest = CPA_FALSE;
-
-    /* Initialize chaining session data - hash + compression chain operation */
-    chainSessionData[0].sessType = CPA_DC_CHAIN_SYMMETRIC_CRYPTO;
-    chainSessionData[0].pCySetupData = &cySessionData;
-    chainSessionData[1].sessType = CPA_DC_CHAIN_COMPRESS_DECOMPRESS;
-    chainSessionData[1].pDcSetupData = &dcSessionData;
-
-    /* Determine size of session context to allocate */
-    PRINT_DBG("cpaDcChainGetSessionSize\n");
-    status = cpaDcChainGetSessionSize(dcInstHandle, CPA_DC_CHAIN_HASH_THEN_COMPRESS, NUM_SESSIONS_TWO, chainSessionData, &sess_size);
-}
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Allocate session memory */
-    status = PHYS_CONTIG_ALLOC(&sessionHdl, sess_size);
-}
-
-/* Initialize the chaining session */
-if (CPA_STATUS_SUCCESS == status) {
-    PRINT_DBG("cpaDcChainInitSession\n");
-    status = cpaDcChainInitSession(dcInstHandle, sessionHdl, CPA_DC_CHAIN_HASH_THEN_COMPRESS, NUM_SESSIONS_TWO, chainSessionData, dcCallback);
-}
+    /* Initialize compression session data */
+    dcSessionData.compLevel = CPA_DC_L1;
+    dcSessionData.compType = CPA_DC_DEFLATE;
+    dcSessionData.huffType = CPA_DC_HT_STATIC;
+    dcSessionData.autoSelectBestHuffmanTree = CPA_FALSE;
+    dcSessionData.sessDirection = CPA_DC_DIR_COMPRESS;
+    dcSessionData.sessState = CPA_DC_STATELESS;
+    dcSessionData.checksum = CPA_DC_CRC32;
+
+    /* Initialize crypto session data */
+    cySessionData.sessionPriority = CPA_CY_PRIORITY_NORMAL;
+
+    /* Hash operation on the source data */
+    cySessionData.symOperation = CPA_CY_SYM_OP_HASH;
+    cySessionData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA256;
+    cySessionData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_PLAIN;
+    cySessionData.hashSetupData.digestResultLenInBytes = GET_HASH_DIGEST_LENGTH(cySessionData.hashSetupData.hashAlgorithm);
+
+    /* Place the digest result in a buffer unrelated to srcBuffer */
+    cySessionData.digestIsAppended = CPA_FALSE;
+
+    /* Generate the digest */
+    cySessionData.verifyDigest = CPA_FALSE;
+
+    /* Initialize chaining session data - hash + compression chain operation */
+    chainSessionData[0].sessType = CPA_DC_CHAIN_SYMMETRIC_CRYPTO;
+    chainSessionData[0].pCySetupData = &cySessionData;
+    chainSessionData[1].sessType = CPA_DC_CHAIN_COMPRESS_DECOMPRESS;
+    chainSessionData[1].pDcSetupData = &dcSessionData;
+
+    /* Determine size of session context to allocate */
+    PRINT_DBG("cpaDcChainGetSessionSize\n");
+    status = cpaDcChainGetSessionSize(dcInstHandle, CPA_DC_CHAIN_HASH_THEN_COMPRESS, NUM_SESSIONS_TWO, chainSessionData, &sess_size);
+}
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Allocate session memory */
+    status = PHYS_CONTIG_ALLOC(&sessionHdl, sess_size);
+}
+
+/* Initialize the chaining session */
+if (CPA_STATUS_SUCCESS == status) {
+    PRINT_DBG("cpaDcChainInitSession\n");
+    status = cpaDcChainInitSession(dcInstHandle, sessionHdl, CPA_DC_CHAIN_HASH_THEN_COMPRESS, NUM_SESSIONS_TWO, chainSessionData, dcCallback);
+}
 
@@ -909,50 +907,50 @@

Chained Hash and Stateless Compression
status = cpaDcBufferListGetMetaSize(dcInstHandle, numBuffers, &bufferMetaSize);
-
-if (CPA_STATUS_SUCCESS != status) {
-    PRINT_ERR("Error get meta size\n");
-    return CPA_STATUS_FAIL;
-}
-
-bufferSize = sampleDataSize;
-
-if (CPA_STATUS_SUCCESS == status) {
-    status = dcChainBuildBufferList(&pBufferListSrc, numBuffers, bufferSize, bufferMetaSize);
-}
-
-/* copy source data into buffer */
-if (CPA_STATUS_SUCCESS == status) {
-    pFlatBuffer = (CpaFlatBuffer *)(pBufferListSrc + 1);
-    memcpy(pFlatBuffer->pData, sampleData, bufferSize);
-}
-
-/* Allocate destination buffer the four times as source buffer */
-if (CPA_STATUS_SUCCESS == status) {
-    status = dcChainBuildBufferList(&pBufferListDst, numBuffers, 4 * bufferSize, bufferMetaSize);
-}
-
-/* Allocate digest result buffer to store hash value */
-if (CPA_STATUS_SUCCESS == status) {
-    status = PHYS_CONTIG_ALLOC(&pDigestBuffer, GET_HASH_DIGEST_LENGTH(hashAlg));
-}
+
status = cpaDcBufferListGetMetaSize(dcInstHandle, numBuffers, &bufferMetaSize);
+
+if (CPA_STATUS_SUCCESS != status) {
+    PRINT_ERR("Error get meta size\n");
+    return CPA_STATUS_FAIL;
+}
+
+bufferSize = sampleDataSize;
+
+if (CPA_STATUS_SUCCESS == status) {
+    status = dcChainBuildBufferList(&pBufferListSrc, numBuffers, bufferSize, bufferMetaSize);
+}
+
+/* copy source data into buffer */
+if (CPA_STATUS_SUCCESS == status) {
+    pFlatBuffer = (CpaFlatBuffer *)(pBufferListSrc + 1);
+    memcpy(pFlatBuffer->pData, sampleData, bufferSize);
+}
+
+/* Allocate destination buffer the four times as source buffer */
+if (CPA_STATUS_SUCCESS == status) {
+    status = dcChainBuildBufferList(&pBufferListDst, numBuffers, 4 * bufferSize, bufferMetaSize);
+}
+
+/* Allocate digest result buffer to store hash value */
+if (CPA_STATUS_SUCCESS == status) {
+    status = PHYS_CONTIG_ALLOC(&pDigestBuffer, GET_HASH_DIGEST_LENGTH(hashAlg));
+}
 

The following example sets up the operational data.

-
dcOpData.flushFlag = CPA_DC_FLUSH_FINAL;
-dcOpData.compressAndVerify = CPA_TRUE;
-dcOpData.compressAndVerifyAndRecover = CPA_TRUE;
-cySymOpData.packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
-cySymOpData.hashStartSrcOffsetInBytes = 0;
-cySymOpData.messageLenToHashInBytes = bufferSize;
-cySymOpData.pDigestResult = pDigestBuffer;
-
-/* Set chaining operation data */
-chainOpData[0].opType = CPA_DC_CHAIN_SYMMETRIC_CRYPTO;
-chainOpData[0].pCySymOp = &cySymOpData;
-chainOpData[1].opType = CPA_DC_CHAIN_COMPRESS_DECOMPRESS;
-chainOpData[1].pDcOp = &dcOpData;
+
dcOpData.flushFlag = CPA_DC_FLUSH_FINAL;
+dcOpData.compressAndVerify = CPA_TRUE;
+dcOpData.compressAndVerifyAndRecover = CPA_TRUE;
+cySymOpData.packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
+cySymOpData.hashStartSrcOffsetInBytes = 0;
+cySymOpData.messageLenToHashInBytes = bufferSize;
+cySymOpData.pDigestResult = pDigestBuffer;
+
+/* Set chaining operation data */
+chainOpData[0].opType = CPA_DC_CHAIN_SYMMETRIC_CRYPTO;
+chainOpData[0].pCySymOp = &cySymOpData;
+chainOpData[1].opType = CPA_DC_CHAIN_COMPRESS_DECOMPRESS;
+chainOpData[1].pDcOp = &dcOpData;
 

Hash and stateless dynamic compression are also supported. @@ -965,85 +963,85 @@

Chained Hash and Stateless Compression
/* Use software to calculate digest and verify digest */
-if (CPA_STATUS_SUCCESS == status) {
-    PHYS_CONTIG_ALLOC(&pSWDigestBuffer, GET_HASH_DIGEST_LENGTH(hashAlg));
-    status = calSWDigest(sampleData, bufferSize, pSWDigestBuffer, GET_HASH_DIGEST_LENGTH(hashAlg), hashAlg);
+
/* Use software to calculate digest and verify digest */
+if (CPA_STATUS_SUCCESS == status) {
+    PHYS_CONTIG_ALLOC(&pSWDigestBuffer, GET_HASH_DIGEST_LENGTH(hashAlg));
+    status = calSWDigest(sampleData, bufferSize, pSWDigestBuffer, GET_HASH_DIGEST_LENGTH(hashAlg), hashAlg);
 
-    if (CPA_STATUS_SUCCESS == status) {
-        if (memcmp(pDigestBuffer, pSWDigestBuffer, GET_HASH_DIGEST_LENGTH(hashAlg))) {
-            status = CPA_STATUS_FAIL;
-            PRINT_ERR("Digest buffer does not match expected output\n");
-        } else {
-            PRINT_DBG("Digest buffer matches expected output\n");
-        }
-    }
+    if (CPA_STATUS_SUCCESS == status) {
+        if (memcmp(pDigestBuffer, pSWDigestBuffer, GET_HASH_DIGEST_LENGTH(hashAlg))) {
+            status = CPA_STATUS_FAIL;
+            PRINT_ERR("Digest buffer does not match expected output\n");
+        } else {
+            PRINT_DBG("Digest buffer matches expected output\n");
+        }
+    }
 
-    PHYS_CONTIG_FREE(pSWDigestBuffer);
-}
+    PHYS_CONTIG_FREE(pSWDigestBuffer);
+}
 
-/* Use zlib to decompress and verify integrity */
+/* Use zlib to decompress and verify integrity */
 
 //<snippet name="software decompress">
 
-if (CPA_STATUS_SUCCESS == status) {
-    struct z_stream_s stream = {0};
-    Cpa8U *pDecompBuffer = NULL;
-    Cpa8U *pHWCompBuffer = NULL;
-    Cpa8U *pSWCompBuffer = NULL;
-    Cpa32U bufferLength = 0;
-    status = inflate_init(&stream);
-
-    if (CPA_STATUS_SUCCESS != status) {
-        PRINT("zlib stream initialize failed");
-    }
-
-    bufferLength = pBufferListSrc->numBuffers * pBufferListSrc->pBuffers->dataLenInBytes;
-
-    if (CPA_STATUS_SUCCESS == status) {
-        status = PHYS_CONTIG_ALLOC(&pDecompBuffer, bufferLength);
-    }
-
-    if (CPA_STATUS_SUCCESS == status) {
-        status = PHYS_CONTIG_ALLOC(&pHWCompBuffer, bufferLength);
-    }
-
-    if (CPA_STATUS_SUCCESS == status) {
-        status = PHYS_CONTIG_ALLOC(&pSWCompBuffer, bufferLength);
-    }
-
-    if (CPA_STATUS_SUCCESS == status) {
-        copyMultiFlatBufferToBuffer(pBufferListDst, pHWCompBuffer);
-    }
-
-    if (CPA_STATUS_SUCCESS == status) {
-        status = inflate_decompress(&stream, pHWCompBuffer, bufferLength, pDecompBuffer, bufferLength);
-
-        if (CPA_STATUS_SUCCESS != status) {
-            PRINT_ERR("Decompress data on zlib stream failed\n");
-        }
-    }
-
-    if (CPA_STATUS_SUCCESS == status) {
-        /* Compare with original Src buffer */
-        if (memcmp(pDecompBuffer, sampleData, bufferSize)) {
-            status = CPA_STATUS_FAIL;
-            PRINT_ERR("Decompression does not match source buffer\n");
-        } else {
-            PRINT_DBG("Decompression matches source buffer\n");
-        }
-    }
-
-    inflate_destroy(&stream);
-    PHYS_CONTIG_FREE(pSWCompBuffer);
-    PHYS_CONTIG_FREE(pHWCompBuffer);
-    PHYS_CONTIG_FREE(pDecompBuffer);
-}
+if (CPA_STATUS_SUCCESS == status) {
+    struct z_stream_s stream = {0};
+    Cpa8U *pDecompBuffer = NULL;
+    Cpa8U *pHWCompBuffer = NULL;
+    Cpa8U *pSWCompBuffer = NULL;
+    Cpa32U bufferLength = 0;
+    status = inflate_init(&stream);
+
+    if (CPA_STATUS_SUCCESS != status) {
+        PRINT("zlib stream initialize failed");
+    }
+
+    bufferLength = pBufferListSrc->numBuffers * pBufferListSrc->pBuffers->dataLenInBytes;
+
+    if (CPA_STATUS_SUCCESS == status) {
+        status = PHYS_CONTIG_ALLOC(&pDecompBuffer, bufferLength);
+    }
+
+    if (CPA_STATUS_SUCCESS == status) {
+        status = PHYS_CONTIG_ALLOC(&pHWCompBuffer, bufferLength);
+    }
+
+    if (CPA_STATUS_SUCCESS == status) {
+        status = PHYS_CONTIG_ALLOC(&pSWCompBuffer, bufferLength);
+    }
+
+    if (CPA_STATUS_SUCCESS == status) {
+        copyMultiFlatBufferToBuffer(pBufferListDst, pHWCompBuffer);
+    }
+
+    if (CPA_STATUS_SUCCESS == status) {
+        status = inflate_decompress(&stream, pHWCompBuffer, bufferLength, pDecompBuffer, bufferLength);
+
+        if (CPA_STATUS_SUCCESS != status) {
+            PRINT_ERR("Decompress data on zlib stream failed\n");
+        }
+    }
+
+    if (CPA_STATUS_SUCCESS == status) {
+        /* Compare with original Src buffer */
+        if (memcmp(pDecompBuffer, sampleData, bufferSize)) {
+            status = CPA_STATUS_FAIL;
+            PRINT_ERR("Decompression does not match source buffer\n");
+        } else {
+            PRINT_DBG("Decompression matches source buffer\n");
+        }
+    }
+
+    inflate_destroy(&stream);
+    PHYS_CONTIG_FREE(pSWCompBuffer);
+    PHYS_CONTIG_FREE(pHWCompBuffer);
+    PHYS_CONTIG_FREE(pDecompBuffer);
+}
 

Once all operations on this session have been completed, the session is torn down as shown below.

-
status = cpaDcChainRemoveSession(dcInstHandle, sessionHdl);
+
status = cpaDcChainRemoveSession(dcInstHandle, sessionHdl);
 

diff --git a/docs/API_PG/QAT_cryptoAPI.html b/docs/API_PG/QAT_cryptoAPI.html index 8a5fb7e..2042eb6 100644 --- a/docs/API_PG/QAT_cryptoAPI.html +++ b/docs/API_PG/QAT_cryptoAPI.html @@ -1,7 +1,7 @@ - + Intel® QAT Cryptographic API — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -118,9 +116,9 @@
@@ -130,12 +128,12 @@
-

Intel® QAT Cryptographic API

+

Intel® QAT Cryptographic API

This section describes the sample code for the Intel® QuickAssist Technology Cryptographic API, beginning with an API overview, and followed by descriptions of various scenarios to illustrate the usage of the API.

-

Overview

+

Overview

The Intel® QuickAssist Technology Cryptographic API can be categorized into the following broad areas:

    @@ -193,19 +191,19 @@

    Overview -

    Sessions

    +

    Sessions

    The symmetric API is the only API with the concept of sessions. The meaning of a session within the symmetric API is defined below.

-

Priority

+

Priority

The cryptographic symmetric API has support for priorities. Priority can be specified on a per-session basis. Two levels of priority are supported: high priority and normal priority. Implementations may use a strict priority order or a weighted round robinbased priority scheme.

-

Using the Symmetric Cryptography API

+

Using the Symmetric Cryptography API

This section contains examples of how to use the symmetric API. It describes general concepts and how to use the symmetric API to perform various types of cipher and hash.

@@ -227,7 +225,7 @@

Using the Symmetric Cryptography API -

General Concepts

+

General Concepts

This section describes the following concepts:

  • Session

  • @@ -235,7 +233,7 @@

    General Concepts -

    Session

    +

    Session

    In case of the symmetric API, a session is a handle that describes the cryptographic parameters to be applied to several buffers. This might be the buffers within a single file or all the packets associated with a particular Internet Protocol Security (IPSec) @@ -262,13 +260,13 @@

    Session -

    In-Place and Out-of-Place Support

    +

    In-Place and Out-of-Place Support

    An In-Place operation means that the destination buffer is the same as the source buffer. An Out-of-Place operation means that the destination buffer is different from the source buffer.

-

Partial Support

+

Partial Support

Most of the examples in this section operate on full packets, as indicated by the packetType of CPA_CY_SYM_PACKET_TYPE_FULL. The API also supports operating in partial mode, where, for example, state (e.g., cipher state) needs to be carried @@ -293,14 +291,14 @@

Partial Support -

Cipher

+

Cipher

This example demonstrates the usage of the symmetric API, specifically using this API to perform a cipher operation. It encrypts some sample text using the AES-256 algorithm in Cipher Block Chaining (CBC) mode.

These samples are located in quickassist/lookaside/access_layer/src/sample_code/functional/sym/cipher_sample.

The following subsections describe the main functions in this file.

-

symCallback

+

symCallback

A callback function must be supplied to use the API in asynchronous mode, and this function is called back (that is, invoked by the implementation of the API) when the asynchronous operation has completed. The context in which it is invoked depends on @@ -314,25 +312,25 @@

symCallback
static void symCallback(void *pCallbackTag,
-                        CpaStatus status,
-                        const CpaCySymOp operationType,
-                        void *pOpData,
-                        CpaBufferList *pDstBuffer,
-                        CpaBoolean verifyResult)
-{
-    PRINT_DBG("Callback called with status = %d.\n", status);
-
-    if (NULL != pCallbackTag) {
-        /* Indicate that the function has been called */
-        COMPLETE((struct COMPLETION_STRUCT *)pCallbackTag);
-    }
-}
+
static void symCallback(void *pCallbackTag,
+                        CpaStatus status,
+                        const CpaCySymOp operationType,
+                        void *pOpData,
+                        CpaBufferList *pDstBuffer,
+                        CpaBoolean verifyResult)
+{
+    PRINT_DBG("Callback called with status = %d.\n", status);
+
+    if (NULL != pCallbackTag) {
+        /* Indicate that the function has been called */
+        COMPLETE((struct COMPLETION_STRUCT *)pCallbackTag);
+    }
+}
 

-

cipherSample

+

cipherSample

This is the main entry point for the sample cipher code. It demonstrates the sequence of calls to be made to the API to create a session, perform one or more cipher operations, and then tear down the session.

@@ -346,40 +344,40 @@

symCallback
#ifdef DO_CRYPTO
-void sampleCyGetInstance(CpaInstanceHandle* pCyInstHandle)
-{
-    CpaInstanceHandle cyInstHandles[MAX_INSTANCES];
-    Cpa16U numInstances = 0;
-    CpaStatus status = CPA_STATUS_SUCCESS;
-
-    *pCyInstHandle = NULL;
-
-    status = cpaCyGetNumInstances(&numInstances);
-    if ((status == CPA_STATUS_SUCCESS) && (numInstances > 0))
-    {
-        status = cpaCyGetInstances(MAX_INSTANCES, cyInstHandles);
-        if (status == CPA_STATUS_SUCCESS)
-        {
-            *pCyInstHandle = cyInstHandles[0];
-        }
-    }
-    if (0 == numInstances)
-    {
-        PRINT_ERR("No instances found for 'SSL'\n");
-        PRINT_ERR("Please check your section names in the config file.\n");
-        PRINT_ERR("Also make sure to use config file version 2.\n");
-    }
-}
+void sampleCyGetInstance(CpaInstanceHandle* pCyInstHandle)
+{
+    CpaInstanceHandle cyInstHandles[MAX_INSTANCES];
+    Cpa16U numInstances = 0;
+    CpaStatus status = CPA_STATUS_SUCCESS;
+
+    *pCyInstHandle = NULL;
+
+    status = cpaCyGetNumInstances(&numInstances);
+    if ((status == CPA_STATUS_SUCCESS) && (numInstances > 0))
+    {
+        status = cpaCyGetInstances(MAX_INSTANCES, cyInstHandles);
+        if (status == CPA_STATUS_SUCCESS)
+        {
+            *pCyInstHandle = cyInstHandles[0];
+        }
+    }
+    if (0 == numInstances)
+    {
+        PRINT_ERR("No instances found for 'SSL'\n");
+        PRINT_ERR("Please check your section names in the config file.\n");
+        PRINT_ERR("Also make sure to use config file version 2.\n");
+    }
+}
 #endif
 

The below example sets the address translation function for the instance. This function will be used by the API to convert virtual addresses to physical addresses.

-
status = cpaCySetAddressTranslation(cyInstHandle, sampleVirtToPhys);
+
status = cpaCySetAddressTranslation(cyInstHandle, sampleVirtToPhys);
 

Start the crypto service running as shown below.

-
-
/* Populate the session setup structure for the operation required */
-sessionSetupData.sessionPriority = CPA_CY_PRIORITY_NORMAL;
-sessionSetupData.symOperation = CPA_CY_SYM_OP_CIPHER;
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
-sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
-
-/* Determine size of session context to allocate */
-PRINT_DBG("cpaCySymSessionCtxGetSize\n");
-status = cpaCySymSessionCtxGetSize(cyInstHandle, &sessionSetupData, &sessionCtxSize);
-
-if (CPA_STATUS_SUCCESS == status) {
-    /* Allocate session context */
-    status = PHYS_CONTIG_ALLOC(&sessionCtx, sessionCtxSize);
-}
-
-/* Initialize the Cipher session */
-if (CPA_STATUS_SUCCESS == status) {
-    PRINT_DBG("cpaCySymInitSession\n");
-    status = cpaCySymInitSession(
-        cyInstHandle,
-        symCallback, /* Callback function */
-        &sessionSetupData, /* Session setup data */
-        sessionCtx); /* Output of the function */
-}
+
/* Populate the session setup structure for the operation required */
+sessionSetupData.sessionPriority = CPA_CY_PRIORITY_NORMAL;
+sessionSetupData.symOperation = CPA_CY_SYM_OP_CIPHER;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
+sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
+
+/* Determine size of session context to allocate */
+PRINT_DBG("cpaCySymSessionCtxGetSize\n");
+status = cpaCySymSessionCtxGetSize(cyInstHandle, &sessionSetupData, &sessionCtxSize);
+
+if (CPA_STATUS_SUCCESS == status) {
+    /* Allocate session context */
+    status = PHYS_CONTIG_ALLOC(&sessionCtx, sessionCtxSize);
+}
+
+/* Initialize the Cipher session */
+if (CPA_STATUS_SUCCESS == status) {
+    PRINT_DBG("cpaCySymInitSession\n");
+    status = cpaCySymInitSession(
+        cyInstHandle,
+        symCallback, /* Callback function */
+        &sessionSetupData, /* Session setup data */
+        sessionCtx); /* Output of the function */
+}
 

The next step is to call the function cipherPerformOp, which actually performs the cipher operation. @@ -473,19 +471,19 @@

symCallback
status = cpaCyBufferListGetMetaSize(cyInstHandle, numBuffers, &bufferMetaSize);
-if (CPA_STATUS_SUCCESS == status) {
-    status = PHYS_CONTIG_ALLOC(&pBufferMeta, bufferMetaSize);
-}
-if (CPA_STATUS_SUCCESS == status) {
-    status = OS_MALLOC(&pBufferList, bufferListMemSize);
-}
-if (CPA_STATUS_SUCCESS == status) {
-    status = PHYS_CONTIG_ALLOC(&pSrcBuffer, bufferSize);
-}
-if (CPA_STATUS_SUCCESS == status) {
-    status = PHYS_CONTIG_ALLOC(&pIvBuffer, sizeof(sampleCipherIv));
-}
+
status = cpaCyBufferListGetMetaSize(cyInstHandle, numBuffers, &bufferMetaSize);
+if (CPA_STATUS_SUCCESS == status) {
+    status = PHYS_CONTIG_ALLOC(&pBufferMeta, bufferMetaSize);
+}
+if (CPA_STATUS_SUCCESS == status) {
+    status = OS_MALLOC(&pBufferList, bufferListMemSize);
+}
+if (CPA_STATUS_SUCCESS == status) {
+    status = PHYS_CONTIG_ALLOC(&pSrcBuffer, bufferSize);
+}
+if (CPA_STATUS_SUCCESS == status) {
+    status = PHYS_CONTIG_ALLOC(&pIvBuffer, sizeof(sampleCipherIv));
+}
 
@@ -493,12 +491,12 @@

symCallback
pOpData->sessionCtx = sessionCtx;
-pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
-pOpData->pIv = pIvBuffer;
-pOpData->ivLenInBytes = sizeof(sampleCipherIv);
-pOpData->cryptoStartSrcOffsetInBytes = 0;
-pOpData->messageLenToCipherInBytes = sizeof(sampleCipherSrc);
+
pOpData->sessionCtx = sessionCtx;
+pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
+pOpData->pIv = pIvBuffer;
+pOpData->ivLenInBytes = sizeof(sampleCipherIv);
+pOpData->cryptoStartSrcOffsetInBytes = 0;
+pOpData->messageLenToCipherInBytes = sizeof(sampleCipherSrc);
 
@@ -507,15 +505,15 @@

symCallback
COMPLETION_INIT(&complete);
+
COMPLETION_INIT(&complete);
 
-status = cpaCySymPerformOp(
-    cyInstHandle,
-    (void *)&complete, /* Data sent as is to the callback function*/
-    pOpData, /* Operational data struct */
-    pBufferList, /* Source buffer list */
-    pBufferList, /* Same src & dst for an in-place operation*/
-    NULL);
+status = cpaCySymPerformOp(
+    cyInstHandle,
+    (void *)&complete, /* Data sent as is to the callback function*/
+    pOpData, /* Operational data struct */
+    pBufferList, /* Source buffer list */
+    pBufferList, /* Same src & dst for an in-place operation*/
+    NULL);
 
@@ -526,10 +524,10 @@

symCallback
if (!COMPLETION_WAIT(&complete, TIMEOUT_MS)) {
-    PRINT_ERR("timeout or interruption in cpaCySymPerformOp\n");
-    status = CPA_STATUS_FAIL;
-}
+
if (!COMPLETION_WAIT(&complete, TIMEOUT_MS)) {
+    PRINT_ERR("timeout or interruption in cpaCySymPerformOp\n");
+    status = CPA_STATUS_FAIL;
+}
 
@@ -544,11 +542,11 @@

symCallbackcpaCySymSessionInUse. It is executed in the symSessionWaitForInflightReq call which polls for the in-flight requests.

-
symSessionWaitForInflightReq(sessionCtx)
+
symSessionWaitForInflightReq(sessionCtx)
 

Finally, clean up by freeing up memory, stopping the instance, etc. See below example.

-
sessionStatus = cpaCySymRemoveSession(cyInstHandle, sessionCtx);
+
sessionStatus = cpaCySymRemoveSession(cyInstHandle, sessionCtx);
 

Query statistics at this point, which can be useful for debugging. Some implementations may also make the @@ -569,7 +567,7 @@

symCallback -

Hash

+

Hash

This example demonstrates the usage of the symmetric API, specifically using this API to perform a hash operation. It performs a SHA-256 hash operation on some sample data.

@@ -580,30 +578,30 @@

Hash

When creating and initializing a session, some of the fields of the session initialization operational data structure are different from the cipher case, as shown below.

-
/* Populate symmetric session data structure for a plain hash operation */
-sessionSetupData.sessionPriority = CPA_CY_PRIORITY_NORMAL;
-sessionSetupData.symOperation = CPA_CY_SYM_OP_HASH;
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA256;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_PLAIN;
-sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
-/* Place the digest result in a buffer unrelated to srcBuffer */
-sessionSetupData.digestIsAppended = CPA_FALSE;
-/* Generate the digest */
-sessionSetupData.verifyDigest = CPA_FALSE;
+
/* Populate symmetric session data structure for a plain hash operation */
+sessionSetupData.sessionPriority = CPA_CY_PRIORITY_NORMAL;
+sessionSetupData.symOperation = CPA_CY_SYM_OP_HASH;
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA256;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_PLAIN;
+sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
+/* Place the digest result in a buffer unrelated to srcBuffer */
+sessionSetupData.digestIsAppended = CPA_FALSE;
+/* Generate the digest */
+sessionSetupData.verifyDigest = CPA_FALSE;
 

When calling the function to perform the hash operation, some of the fields of the operational data structure are again different from the cipher case, as shown below.

-

When creating and initializing a session, some of the fields of the session initialization operational data structure are different from the cipher case, as shown below.

-
/* Populate symmetric session data structure for a plain hash operation */
-sessionSetupData.sessionPriority = CPA_CY_PRIORITY_NORMAL;
-sessionSetupData.symOperation = CPA_CY_SYM_OP_HASH;
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA1;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_PLAIN;
-sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
-/* Place the digest result in a buffer unrelated to srcBuffer */
-sessionSetupData.digestIsAppended = CPA_FALSE;
-/* Generate the digest */
-sessionSetupData.verifyDigest = CPA_FALSE;
+
/* Populate symmetric session data structure for a plain hash operation */
+sessionSetupData.sessionPriority = CPA_CY_PRIORITY_NORMAL;
+sessionSetupData.symOperation = CPA_CY_SYM_OP_HASH;
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA1;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_PLAIN;
+sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
+/* Place the digest result in a buffer unrelated to srcBuffer */
+sessionSetupData.digestIsAppended = CPA_FALSE;
+/* Generate the digest */
+sessionSetupData.verifyDigest = CPA_FALSE;
 

Memory is allocated for the source buffer in a similar way to the cipher case.

@@ -632,51 +630,51 @@

HashCPA_CY_SYM_PACKET_TYPE_PARTIAL. When the end of the file is reached the API is called with packetType set to CPA_CY_SYM_PACKET_TYPE_PARTIAL_LAST. The digest is produced only on the last call to the API. See example below.

-
while (!feof(srcFile)) {
-    /* Read from file into src buffer */
-    pBufferList->pBuffers->dataLenInBytes = fread(pSrcBuffer, 1, SAMPLE_BUFF_SIZE, srcFile);
-
-    /* If we have reached the end of file set the last partial flag */
-    if (feof(srcFile)) {
-        pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_LAST_PARTIAL;
-    } else {
-        pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_PARTIAL;
-    }
-
-    pOpData->sessionCtx = sessionCtx;
-    pOpData->hashStartSrcOffsetInBytes = 0;
-    pOpData->messageLenToHashInBytes = pBufferList->pBuffers->dataLenInBytes;
-    pOpData->pDigestResult = pDigestBuffer;
-
-    PRINT_DBG("cpaCySymPerformOp\n");
-    /* Perform symmetric operation */
-    status = cpaCySymPerformOp(
-        cyInstHandle,
-        (void *)&complete, /* Data sent as is to the callback function */
-        pOpData, /* Operational data struct */
-        pBufferList, /* Source buffer list */
-        pBufferList, /* Same src & dst for an in-place operation */
-        NULL);
-
-    if (CPA_STATUS_SUCCESS != status) {
-        PRINT_ERR("cpaCySymPerformOp failed. (status = %d)\n", status);
-        break;
-    }
-
-    if (CPA_STATUS_SUCCESS == status) {
-        /* Wait until the completion of the operation */
-        if (!COMPLETION_WAIT((&complete), TIMEOUT_MS)) {
-            PRINT_ERR("timeout or interruption in cpaCySymPerformOp\n");
-            status = CPA_STATUS_FAIL;
-            break;
-        }
-    }
-}
+
while (!feof(srcFile)) {
+    /* Read from file into src buffer */
+    pBufferList->pBuffers->dataLenInBytes = fread(pSrcBuffer, 1, SAMPLE_BUFF_SIZE, srcFile);
+
+    /* If we have reached the end of file set the last partial flag */
+    if (feof(srcFile)) {
+        pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_LAST_PARTIAL;
+    } else {
+        pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_PARTIAL;
+    }
+
+    pOpData->sessionCtx = sessionCtx;
+    pOpData->hashStartSrcOffsetInBytes = 0;
+    pOpData->messageLenToHashInBytes = pBufferList->pBuffers->dataLenInBytes;
+    pOpData->pDigestResult = pDigestBuffer;
+
+    PRINT_DBG("cpaCySymPerformOp\n");
+    /* Perform symmetric operation */
+    status = cpaCySymPerformOp(
+        cyInstHandle,
+        (void *)&complete, /* Data sent as is to the callback function */
+        pOpData, /* Operational data struct */
+        pBufferList, /* Source buffer list */
+        pBufferList, /* Same src & dst for an in-place operation */
+        NULL);
+
+    if (CPA_STATUS_SUCCESS != status) {
+        PRINT_ERR("cpaCySymPerformOp failed. (status = %d)\n", status);
+        break;
+    }
+
+    if (CPA_STATUS_SUCCESS == status) {
+        /* Wait until the completion of the operation */
+        if (!COMPLETION_WAIT((&complete), TIMEOUT_MS)) {
+            PRINT_ERR("timeout or interruption in cpaCySymPerformOp\n");
+            status = CPA_STATUS_FAIL;
+            break;
+        }
+    }
+}
 
-

Chained Cipher and Hash

+

Chained Cipher and Hash

This example demonstrates the usage of the symmetric API, specifically using this API to perform a chained cipher and hash operation. It encrypts some sample text using the AES-256 algorithm in CBC mode, and then performs a SHA-256 Hashed Message @@ -689,38 +687,38 @@

Chained Cipher and Hash

When creating and initializing a session, some of the fields of the session initialization operational data structure are different, as shown below.

-
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
+
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
-sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
+sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA256;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
-sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleCipherKey;
-sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA256;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
+sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleCipherKey;
+sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleCipherKey);
 
-/* The resulting MAC is to be placed immediately after the ciphertext */
-sessionSetupData.digestIsAppended = CPA_TRUE;
-sessionSetupData.verifyDigest = CPA_FALSE;
+/* The resulting MAC is to be placed immediately after the ciphertext */
+sessionSetupData.digestIsAppended = CPA_TRUE;
+sessionSetupData.verifyDigest = CPA_FALSE;
 

When calling the function to perform the chained cipher and hash operation, some of the fields of the operational data structure are again different from the cipher case, as shown below.

/* Populate the structure containing the operational data that is
- * needed to run the algorithm */
-pOpData->sessionCtx = sessionCtx;
-pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
-pOpData->pIv = pIvBuffer;
-pOpData->ivLenInBytes = sizeof(sampleCipherIv);
-pOpData->cryptoStartSrcOffsetInBytes = 0;
-pOpData->hashStartSrcOffsetInBytes = 0;
-pOpData->messageLenToCipherInBytes = sizeof(sampleAlgChainingSrc);
-pOpData->messageLenToHashInBytes = sizeof(sampleAlgChainingSrc);
+ * needed to run the algorithm */
+pOpData->sessionCtx = sessionCtx;
+pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
+pOpData->pIv = pIvBuffer;
+pOpData->ivLenInBytes = sizeof(sampleCipherIv);
+pOpData->cryptoStartSrcOffsetInBytes = 0;
+pOpData->hashStartSrcOffsetInBytes = 0;
+pOpData->messageLenToCipherInBytes = sizeof(sampleAlgChainingSrc);
+pOpData->messageLenToHashInBytes = sizeof(sampleAlgChainingSrc);
 

Notice the digestIsAppended is set in the session; therefore, the MAC is placed @@ -728,7 +726,7 @@

Chained Cipher and Hash

-

Chained Cipher and Hash – IPSec Like Use Case

+

Chained Cipher and Hash – IPSec Like Use Case

This example demonstrates the usage of the symmetric API for IPSec-like use cases, as described in the below figures. For the outbound direction, this example uses the symmetric API to perform a chained cipher and hash operation. It encrypts some @@ -752,89 +750,89 @@

Chained Cipher and Hash – IPSec Like Use Case
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
+
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
-sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
+sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA1;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = ICV_LENGTH;
-sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleAuthKey;
-sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleAuthKey);
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA1;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = ICV_LENGTH;
+sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleAuthKey;
+sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleAuthKey);
 
 /* Even though ICV follows immediately after the region to hash
  * digestIsAppended is set to false in this case to workaround
- * errata number IXA00378322 */
-sessionSetupData.digestIsAppended = CPA_FALSE;
-/* Generate the ICV in outbound direction */
-sessionSetupData.verifyDigest = CPA_FALSE;
+ * errata number IXA00378322 */
+sessionSetupData.digestIsAppended = CPA_FALSE;
+/* Generate the ICV in outbound direction */
+sessionSetupData.verifyDigest = CPA_FALSE;
 

When calling the function to perform the chained cipher and hash operation, the fields of the operational data structure are shown below.

/* Populate the structure containing the operational data that is
- * needed to run the algorithm in outbound direction */
-pOpData->sessionCtx = sessionCtx;
-pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
-pOpData->pIv = pIvBuffer;
-pOpData->ivLenInBytes = sizeof(sampleCipherIv);
-pOpData->cryptoStartSrcOffsetInBytes = sizeof(sampleEspHdrData) + sizeof(sampleCipherIv);
-pOpData->messageLenToCipherInBytes = sizeof(samplePayload);
-pOpData->hashStartSrcOffsetInBytes = 0;
-pOpData->messageLenToHashInBytes = sizeof(sampleEspHdrData) + sizeof(sampleCipherIv) + sizeof(samplePayload);
+ * needed to run the algorithm in outbound direction */
+pOpData->sessionCtx = sessionCtx;
+pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
+pOpData->pIv = pIvBuffer;
+pOpData->ivLenInBytes = sizeof(sampleCipherIv);
+pOpData->cryptoStartSrcOffsetInBytes = sizeof(sampleEspHdrData) + sizeof(sampleCipherIv);
+pOpData->messageLenToCipherInBytes = sizeof(samplePayload);
+pOpData->hashStartSrcOffsetInBytes = 0;
+pOpData->messageLenToHashInBytes = sizeof(sampleEspHdrData) + sizeof(sampleCipherIv) + sizeof(samplePayload);
 /* Even though ICV follows immediately after the region to hash
  * digestIsAppended is set to false in this case to workaround
- * errata number IXA00378322 */
-pOpData->pDigestResult = pSrcBuffer + (sizeof(sampleEspHdrData) + sizeof(sampleCipherIv) + sizeof(samplePayload));
+ * errata number IXA00378322 */
+pOpData->pDigestResult = pSrcBuffer + (sizeof(sampleEspHdrData) + sizeof(sampleCipherIv) + sizeof(samplePayload));
 

In this example samplePayload is the packet data plus the Encapsulating Security Payload (ESP) trailer.

When creating and initializing a session in the inbound direction, the session initialization operational data structure is shown below.

-
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
+
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
-sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_DECRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
+sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_DECRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA1;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = ICV_LENGTH;
-sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleAuthKey;
-sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleAuthKey);
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA1;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = ICV_LENGTH;
+sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleAuthKey;
+sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleAuthKey);
 
-/* ICV follows immediately after the region to hash */
-sessionSetupData.digestIsAppended = CPA_TRUE;
-/* Verify the ICV in the inbound direction */
-sessionSetupData.verifyDigest = CPA_TRUE;
+/* ICV follows immediately after the region to hash */
+sessionSetupData.digestIsAppended = CPA_TRUE;
+/* Verify the ICV in the inbound direction */
+sessionSetupData.verifyDigest = CPA_TRUE;
 

When calling the function to perform the chained hash and cipher operation, the fields of the operational data structure are listed below.

/* Populate the structure containing the operational data that is
- * needed to run the algorithm in inbound direction */
-pOpData->sessionCtx = sessionCtx;
-pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
-pOpData->pIv = pIvBuffer;
-pOpData->ivLenInBytes = sizeof(sampleCipherIv);
-pOpData->cryptoStartSrcOffsetInBytes = sizeof(sampleEspHdrData) + sizeof(sampleCipherIv);
-pOpData->messageLenToCipherInBytes = bufferSize - (sizeof(sampleEspHdrData) + sizeof(sampleCipherIv) + ICV_LENGTH);
-pOpData->hashStartSrcOffsetInBytes = 0;
-pOpData->messageLenToHashInBytes = bufferSize - ICV_LENGTH;
+ * needed to run the algorithm in inbound direction */
+pOpData->sessionCtx = sessionCtx;
+pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
+pOpData->pIv = pIvBuffer;
+pOpData->ivLenInBytes = sizeof(sampleCipherIv);
+pOpData->cryptoStartSrcOffsetInBytes = sizeof(sampleEspHdrData) + sizeof(sampleCipherIv);
+pOpData->messageLenToCipherInBytes = bufferSize - (sizeof(sampleEspHdrData) + sizeof(sampleCipherIv) + ICV_LENGTH);
+pOpData->hashStartSrcOffsetInBytes = 0;
+pOpData->messageLenToHashInBytes = bufferSize - ICV_LENGTH;
 

In the example above, bufferSize is the size of the data input (header, iv, ciphertext, and ICV).

-

Chained Cipher and Hash – SSL Like Use Case

+

Chained Cipher and Hash – SSL Like Use Case

This example demonstrates the usage of the symmetric API for SSL-like use cases, as described in the below figures. For the outbound direction, this example employs the symmetric API to perform a chained hash and cipher operation. It performs a @@ -884,131 +882,131 @@

Chained Cipher and Hash – SSL Like Use Case
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
+
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
-sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
+sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA1;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = MAC_LENGTH;
-sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleAuthKey;
-sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleAuthKey);
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA1;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = MAC_LENGTH;
+sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleAuthKey;
+sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleAuthKey);
 
-/* MAC follows immediately after the region to hash */
-sessionSetupData.digestIsAppended = CPA_TRUE;
-/* Generate the MAC in outbound direction */
-sessionSetupData.verifyDigest = CPA_FALSE;
+/* MAC follows immediately after the region to hash */
+sessionSetupData.digestIsAppended = CPA_TRUE;
+/* Generate the MAC in outbound direction */
+sessionSetupData.verifyDigest = CPA_FALSE;
 

A buffer large enough to hold the plaintext, MAC and padding is required. The size of this buffer will be the one shown in the below example.

-
bufferSize = sizeof(samplePayload) + MAC_LENGTH;
+
bufferSize = sizeof(samplePayload) + MAC_LENGTH;
 
-/* bufferSize needs to be rounded up to a multiple of the AES block size */
-padLen = 16 - bufferSize % 16;
-bufferSize += padLen;
-/* padLen excludes pad_length field */
-padLen--;
+/* bufferSize needs to be rounded up to a multiple of the AES block size */
+padLen = 16 - bufferSize % 16;
+bufferSize += padLen;
+/* padLen excludes pad_length field */
+padLen--;
 

This buffer is filled with plaintext and padding leaving room for the chained API operation to add the MAC, as shown below.

-
memcpy(pSrcBuffer, samplePayload, sizeof(samplePayload));
-/* Leave space for MAC but insert padding data */
-for (i = 0; i <= padLen; i++) {
-  pSrcBuffer[(sizeof(samplePayload) + MAC_LENGTH + i)] = padLen;
-}
+
memcpy(pSrcBuffer, samplePayload, sizeof(samplePayload));
+/* Leave space for MAC but insert padding data */
+for (i = 0; i <= padLen; i++) {
+  pSrcBuffer[(sizeof(samplePayload) + MAC_LENGTH + i)] = padLen;
+}
 

The session sequence number, the header and the buffer with the plaintext are described using a CpaBufferList, as shown below.

-
pBufferList->pBuffers = pFlatBuffer;
-pBufferList->numBuffers = numBuffers;
-pBufferList->pPrivateMetaData = pBufferMeta;
+
pBufferList->pBuffers = pFlatBuffer;
+pBufferList->numBuffers = numBuffers;
+pBufferList->pPrivateMetaData = pBufferMeta;
 
-/* Seq number */
-pFlatBuffer->dataLenInBytes = SSL_CombinedHeadSize;
-pFlatBuffer->pData = pCombinedHeadBuffer;
-pFlatBuffer++;
-memcpy((char *)pCombinedHeadBuffer + SESSION_SEQ_START, &sessSeqNum, sizeof(sessSeqNum));
-memcpy((char *)pCombinedHeadBuffer + HDR_START, sampleHdrData, sizeof(sampleHdrData));
+/* Seq number */
+pFlatBuffer->dataLenInBytes = SSL_CombinedHeadSize;
+pFlatBuffer->pData = pCombinedHeadBuffer;
+pFlatBuffer++;
+memcpy((char *)pCombinedHeadBuffer + SESSION_SEQ_START, &sessSeqNum, sizeof(sessSeqNum));
+memcpy((char *)pCombinedHeadBuffer + HDR_START, sampleHdrData, sizeof(sampleHdrData));
 
-/* Data */
-pFlatBuffer->dataLenInBytes = bufferSize;
-pFlatBuffer->pData = pSrcBuffer;
+/* Data */
+pFlatBuffer->dataLenInBytes = bufferSize;
+pFlatBuffer->pData = pSrcBuffer;
 

When calling the function to perform the chained hash and cipher operation, the fields of the operational data structure are shown below.

-
pOpData->sessionCtx = sessionCtx;
-pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
-pOpData->pIv = pIvBuffer;
-pOpData->ivLenInBytes = sizeof(sampleCipherIv);
-pOpData->cryptoStartSrcOffsetInBytes = SSL_CombinedHeadSize;
-pOpData->messageLenToCipherInBytes = bufferSize;
-pOpData->hashStartSrcOffsetInBytes = SESSION_SEQ_START;
-pOpData->messageLenToHashInBytes = sizeof(sessSeqNum) + sizeof(sampleHdrData) + bufferSize - MAC_LENGTH - padLen;
+
pOpData->sessionCtx = sessionCtx;
+pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
+pOpData->pIv = pIvBuffer;
+pOpData->ivLenInBytes = sizeof(sampleCipherIv);
+pOpData->cryptoStartSrcOffsetInBytes = SSL_CombinedHeadSize;
+pOpData->messageLenToCipherInBytes = bufferSize;
+pOpData->hashStartSrcOffsetInBytes = SESSION_SEQ_START;
+pOpData->messageLenToHashInBytes = sizeof(sessSeqNum) + sizeof(sampleHdrData) + bufferSize - MAC_LENGTH - padLen;
 

When creating and initializing a session in the inbound direction, the session setup data structure is shown below.

-
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
+
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
-sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
+sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA1;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = MAC_LENGTH;
-sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleAuthKey;
-sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleAuthKey);
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA1;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = MAC_LENGTH;
+sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleAuthKey;
+sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleAuthKey);
 
-/* MAC follows immediately after the region to hash */
-sessionSetupData.digestIsAppended = CPA_TRUE;
-/* Generate the MAC in outbound direction */
-sessionSetupData.verifyDigest = CPA_FALSE;
+/* MAC follows immediately after the region to hash */
+sessionSetupData.digestIsAppended = CPA_TRUE;
+/* Generate the MAC in outbound direction */
+sessionSetupData.verifyDigest = CPA_FALSE;
 

In this case the length of the ciphertext is bufferSize to calculate the padLen the final block is decrypted. See example below.

-
Cpa8U resBuff[16];
+
Cpa8U resBuff[16];
 
 /* For decrypt direction need to decrypt the final block
- * to determine the messageLenToHashInBytes */
-status = sampleCodeAesCbcDecrypt(
-  sampleCipherKey,
-  sizeof(sampleCipherKey),
-  (pSrcBuffer + (bufferSize - 32)), /* IV */
-  (pSrcBuffer + (bufferSize - 16)), /* src */
-  resBuff); /* dest */
+ * to determine the messageLenToHashInBytes */
+status = sampleCodeAesCbcDecrypt(
+  sampleCipherKey,
+  sizeof(sampleCipherKey),
+  (pSrcBuffer + (bufferSize - 32)), /* IV */
+  (pSrcBuffer + (bufferSize - 16)), /* src */
+  resBuff); /* dest */
 
 /* padLen is the last byte decrypted incremented by one to
- * included the padLen block itself */
-padLen = resBuff[15] + 1;
+ * included the padLen block itself */
+padLen = resBuff[15] + 1;
 

When calling the function to perform the chained cipher and hash operation, the fields of the operational data structure are shown below.

-
pOpData->sessionCtx = sessionCtx;
-pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
-pOpData->pIv = pIvBuffer;
-pOpData->ivLenInBytes = sizeof(sampleCipherIv);
-pOpData->cryptoStartSrcOffsetInBytes = SSL_CombinedHeadSize;
-pOpData->messageLenToCipherInBytes = bufferSize;
-pOpData->hashStartSrcOffsetInBytes = SESSION_SEQ_START;
-pOpData->messageLenToHashInBytes = sizeof(sessSeqNum) + sizeof(sampleHdrData) + bufferSize - MAC_LENGTH - padLen;
+
pOpData->sessionCtx = sessionCtx;
+pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
+pOpData->pIv = pIvBuffer;
+pOpData->ivLenInBytes = sizeof(sampleCipherIv);
+pOpData->cryptoStartSrcOffsetInBytes = SSL_CombinedHeadSize;
+pOpData->messageLenToCipherInBytes = bufferSize;
+pOpData->hashStartSrcOffsetInBytes = SESSION_SEQ_START;
+pOpData->messageLenToHashInBytes = sizeof(sessSeqNum) + sizeof(sampleHdrData) + bufferSize - MAC_LENGTH - padLen;
 

-

Chained Cipher and Hash – CCM Use Case

+

Chained Cipher and Hash – CCM Use Case

This example demonstrates the usage of the symmetric API to perform a CCM operation as described in NIST publication SP800-38C (Recommendation for Block Cipher Modes of Operation: The CCM Mode for Authentication and Confidentiality). Refer @@ -1019,84 +1017,84 @@

Chained Cipher and Hash – CCM Use Case
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
+
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CCM;
-sessionSetupData.cipherSetupData.pCipherKey = sampleKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CCM;
+sessionSetupData.cipherSetupData.pCipherKey = sampleKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_AES_CCM;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_AES_CCM;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
 
 /* Notice for CCM authKey and authKeyLen are not required this
- * information is provided by the cipherKey in cipherSetupData */
-sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(sampleAssocData);
+ * information is provided by the cipherKey in cipherSetupData */
+sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(sampleAssocData);
 /* For CCM digestAppended and digestVerify are not required. In
  * the encrypt direction digestAppended is CPA_TRUE and
- * digestVerify is CPA_FALSE */
+ * digestVerify is CPA_FALSE */
 

For the decryption-verification process the session setup data is shown below.

-
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
+
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CCM;
-sessionSetupData.cipherSetupData.pCipherKey = sampleKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_DECRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CCM;
+sessionSetupData.cipherSetupData.pCipherKey = sampleKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_DECRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_AES_CCM;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
-sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(sampleAssocData);
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_AES_CCM;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
+sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(sampleAssocData);
 

The IV and AAD buffers are allocated as shown below.

/* Allocate memory to store IV. For CCM this is the counter block
  * ctr0 (size equal to AES block size). The implementation will
  * construct the ctr0 block given the nonce. Space for ctr0 must be
- * allocated here */
-status = PHYS_CONTIG_ALLOC(&pIvBuffer, AES_BLOCK_SIZE);
+ * allocated here */
+status = PHYS_CONTIG_ALLOC(&pIvBuffer, AES_BLOCK_SIZE);
 
-if (CPA_STATUS_SUCCESS == status) {
+if (CPA_STATUS_SUCCESS == status) {
   /* Allocate memory for AAD. For CCM this memory will hold the 16 byte
    * B0 block, the 2 bytes encoded length of associated data, the
    * assocaiated data itself and any padding to ensure total size is
-   * a multiple of the AES block size */
-  aadBuffSize = B0_BLOCK_SIZE + ALEN_ENCODING_SIZE + sizeof(sampleAssocData);
-  if (aadBuffSize % AES_BLOCK_SIZE) {
-    aadBuffSize += AES_BLOCK_SIZE - (aadBuffSize % AES_BLOCK_SIZE);
-  }
-  status = PHYS_CONTIG_ALLOC(&pAadBuffer, aadBuffSize);
-}
+   * a multiple of the AES block size */
+  aadBuffSize = B0_BLOCK_SIZE + ALEN_ENCODING_SIZE + sizeof(sampleAssocData);
+  if (aadBuffSize % AES_BLOCK_SIZE) {
+    aadBuffSize += AES_BLOCK_SIZE - (aadBuffSize % AES_BLOCK_SIZE);
+  }
+  status = PHYS_CONTIG_ALLOC(&pAadBuffer, aadBuffSize);
+}
 

The operational data needed to perform the generate-encrypt or decrypt-verify operation is shown below.

-
pOpData->sessionCtx = sessionCtx;
-pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
-pOpData->pIv = pIvBuffer;
+
pOpData->sessionCtx = sessionCtx;
+pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
+pOpData->pIv = pIvBuffer;
 /* Even though the iv buffer is 16 bytes the ivLenInBytes
  * is set to the length of the nonce. For CCM valid lengths
- * are in the range 7-13 */
-pOpData->ivLenInBytes = sizeof(sampleNonce);
-pOpData->cryptoStartSrcOffsetInBytes = 0;
-pOpData->messageLenToCipherInBytes = sizeof(samplePayload);
-/* Notice for CCM hash offset and length are not required */
-pOpData->pAdditionalAuthData = pAadBuffer;
+ * are in the range 7-13 */
+pOpData->ivLenInBytes = sizeof(sampleNonce);
+pOpData->cryptoStartSrcOffsetInBytes = 0;
+pOpData->messageLenToCipherInBytes = sizeof(samplePayload);
+/* Notice for CCM hash offset and length are not required */
+pOpData->pAdditionalAuthData = pAadBuffer;
 
 /* Populate pIv and pAdditionalAuthData buffers with
- * nonce and assoc data */
-CPA_CY_SYM_CCM_SET_NONCE(pOpData, sampleNonce, sizeof(sampleNonce));
-CPA_CY_SYM_CCM_SET_AAD(pOpData, sampleAssocData, sizeof(sampleAssocData));
+ * nonce and assoc data */
+CPA_CY_SYM_CCM_SET_NONCE(pOpData, sampleNonce, sizeof(sampleNonce));
+CPA_CY_SYM_CCM_SET_AAD(pOpData, sampleAssocData, sizeof(sampleAssocData));
 

-

Chained Cipher and Hash – GCM Use Case

+

Chained Cipher and Hash – GCM Use Case

This example demonstrates the usage of the symmetric API to perform a GCM operation as described in NIST publication SP800-38D (Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC). Refer @@ -1104,69 +1102,69 @@

Chained Cipher and Hash – GCM Use Case/sym/gcm_sample.

An example of the session setup data and operational data for GCM authenticated encryption and decryption is shown below.

-
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
+
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_GCM;
-sessionSetupData.cipherSetupData.pCipherKey = sampleKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_GCM;
+sessionSetupData.cipherSetupData.pCipherKey = sampleKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_AES_GCM;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = TAG_LENGTH;
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_AES_GCM;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = TAG_LENGTH;
 
 /* For GCM authKey and authKeyLen are not required this information
- * is provided by the cipherKey in cipherSetupData */
-sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(sampleAddAuthData);
-/* Tag follows immediately after the region to hash */
-sessionSetupData.digestIsAppended = CPA_TRUE;
+ * is provided by the cipherKey in cipherSetupData */
+sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(sampleAddAuthData);
+/* Tag follows immediately after the region to hash */
+sessionSetupData.digestIsAppended = CPA_TRUE;
 /* digestVerify is not required to be set. For GCM authenticated
- * encryption this value is understood to be CPA_FALSE */
+ * encryption this value is understood to be CPA_FALSE */
 

For authenticated encryption the session setup data is shown below.

-
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
+
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_GCM;
-sessionSetupData.cipherSetupData.pCipherKey = sampleKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_DECRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_GCM;
+sessionSetupData.cipherSetupData.pCipherKey = sampleKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_DECRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_AES_GCM;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = TAG_LENGTH;
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_AES_GCM;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = TAG_LENGTH;
 
 /* For GCM authKey and authKeyLen are not required this information
- * is provided by the cipherKey in cipherSetupData */
-sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(sampleAddAuthData);
-/* Tag follows immediately after the region to hash */
-sessionSetupData.digestIsAppended = CPA_TRUE;
+ * is provided by the cipherKey in cipherSetupData */
+sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(sampleAddAuthData);
+/* Tag follows immediately after the region to hash */
+sessionSetupData.digestIsAppended = CPA_TRUE;
 /* digestVerify is not required to be set. For GCM authenticated
- * decryption this value is understood to be CPA_TRUE */
+ * decryption this value is understood to be CPA_TRUE */
 

For authenticated decryption the session setup data is shown below.

-
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
+
sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_GCM;
-sessionSetupData.cipherSetupData.pCipherKey = sampleKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_DECRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_GCM;
+sessionSetupData.cipherSetupData.pCipherKey = sampleKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_DECRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_AES_GCM;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = TAG_LENGTH;
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_AES_GCM;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = TAG_LENGTH;
 
 /* For GCM authKey and authKeyLen are not required this information
- * is provided by the cipherKey in cipherSetupData */
-sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(sampleAddAuthData);
-/* Tag follows immediately after the region to hash */
-sessionSetupData.digestIsAppended = CPA_TRUE;
+ * is provided by the cipherKey in cipherSetupData */
+sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(sampleAddAuthData);
+/* Tag follows immediately after the region to hash */
+sessionSetupData.digestIsAppended = CPA_TRUE;
 /* digestVerify is not required to be set. For GCM authenticated
- * decryption this value is understood to be CPA_TRUE */
+ * decryption this value is understood to be CPA_TRUE */
 

The IV and AAD buffers are allocated as shown below.

@@ -1175,33 +1173,33 @@

Chained Cipher and Hash – GCM Use Case * implementation will construct the J0 block given the iv. * If iv is not 12 bytes then the user must construct the J0 * block and give this as the iv. In both cases space for J0 - * must be allocated. */ -status = PHYS_CONTIG_ALLOC(&pIvBuffer, AES_BLOCK_SIZE); + * must be allocated. */ +status = PHYS_CONTIG_ALLOC(&pIvBuffer, AES_BLOCK_SIZE); -if (CPA_STATUS_SUCCESS == status) { +if (CPA_STATUS_SUCCESS == status) { /* Allocate memory for AAD. For GCM this memory will hold the * additional authentication data and any padding to ensure total - * size is a multiple of the AES block size */ - aadBuffSize = sizeof(sampleAddAuthData); - if (aadBuffSize % AES_BLOCK_SIZE) { - aadBuffSize += AES_BLOCK_SIZE - (aadBuffSize % AES_BLOCK_SIZE); - } - status = PHYS_CONTIG_ALLOC(&pAadBuffer, aadBuffSize); -} + * size is a multiple of the AES block size */ + aadBuffSize = sizeof(sampleAddAuthData); + if (aadBuffSize % AES_BLOCK_SIZE) { + aadBuffSize += AES_BLOCK_SIZE - (aadBuffSize % AES_BLOCK_SIZE); + } + status = PHYS_CONTIG_ALLOC(&pAadBuffer, aadBuffSize); +}

The operational data needed to perform the encrypt or decrypt operation is shown below.

-
pOpData->sessionCtx = sessionCtx;
-pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
-pOpData->pIv = pIvBuffer;
+
pOpData->sessionCtx = sessionCtx;
+pOpData->packetType = CPA_CY_SYM_PACKET_TYPE_FULL;
+pOpData->pIv = pIvBuffer;
 /* In this example iv is 12 bytes. The implementation
- * will use the iv to generation the J0 block */
-memcpy(pIvBuffer, sampleIv, sizeof(sampleIv));
-pOpData->ivLenInBytes = sizeof(sampleIv);
-pOpData->cryptoStartSrcOffsetInBytes = 0;
-pOpData->messageLenToCipherInBytes = sizeof(samplePayload);
-/* For GCM hash offset and length are not required */
-pOpData->pAdditionalAuthData = pAadBuffer;
+ * will use the iv to generation the J0 block */
+memcpy(pIvBuffer, sampleIv, sizeof(sampleIv));
+pOpData->ivLenInBytes = sizeof(sampleIv);
+pOpData->cryptoStartSrcOffsetInBytes = 0;
+pOpData->messageLenToCipherInBytes = sizeof(samplePayload);
+/* For GCM hash offset and length are not required */
+pOpData->pAdditionalAuthData = pAadBuffer;
 
@@ -1212,7 +1210,7 @@

Chained Cipher and Hash – GCM Use Case -

Chained Cipher and Hash Using the Symmetric Data Plane API

+

Chained Cipher and Hash Using the Symmetric Data Plane API

This example demonstrates the usage of the data plane symmetric API to perform a chained cipher and hash operation. It encrypts some sample text using the AES-256 algorithm in CBC mode, and then performs an SHA-256 HMAC operation on the @@ -1246,105 +1244,105 @@

Chained Cipher and Hash – GCM Use Case
status = cpaCySymDpRegCbFunc(cyInstHandle, symDpCallback);
+
status = cpaCySymDpRegCbFunc(cyInstHandle, symDpCallback);
 

Create and initialize a session is shown below.

-
sessionSetupData.sessionPriority = CPA_CY_PRIORITY_HIGH;
-sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
+
sessionSetupData.sessionPriority = CPA_CY_PRIORITY_HIGH;
+sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
-sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
+sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA256;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
-sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleCipherKey;
-sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA256;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
+sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleCipherKey;
+sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleCipherKey);
 
 /* Even though MAC follows immediately after the region to hash
  * digestIsAppended is set to false in this case to workaround
- * errata number IXA00378322 */
-sessionSetupData.digestIsAppended = CPA_FALSE;
-sessionSetupData.verifyDigest = CPA_FALSE;
+ * errata number IXA00378322 */
+sessionSetupData.digestIsAppended = CPA_FALSE;
+sessionSetupData.verifyDigest = CPA_FALSE;
 
-/* Determine size of session context to allocate */
-PRINT_DBG("cpaCySymDpSessionCtxGetSize\n");
-status = cpaCySymDpSessionCtxGetSize(cyInstHandle, &sessionSetupData, &sessionCtxSize);
+/* Determine size of session context to allocate */
+PRINT_DBG("cpaCySymDpSessionCtxGetSize\n");
+status = cpaCySymDpSessionCtxGetSize(cyInstHandle, &sessionSetupData, &sessionCtxSize);
 
-if (CPA_STATUS_SUCCESS == status) {
-  /* Allocate session context */
-  status = PHYS_CONTIG_ALLOC(&sessionCtx, sessionCtxSize);
-}
+if (CPA_STATUS_SUCCESS == status) {
+  /* Allocate session context */
+  status = PHYS_CONTIG_ALLOC(&sessionCtx, sessionCtxSize);
+}
 
-if (CPA_STATUS_SUCCESS == status) {
-  /* Initialize the session */
-  PRINT_DBG("cpaCySymDpInitSession\n");
-  status = cpaCySymDpInitSession(cyInstHandle, &sessionSetupData, sessionCtx);
-}
+if (CPA_STATUS_SUCCESS == status) {
+  /* Initialize the session */
+  PRINT_DBG("cpaCySymDpInitSession\n");
+  status = cpaCySymDpInitSession(cyInstHandle, &sessionSetupData, sessionCtx);
+}
 
 #ifdef LAC_HW_PRECOMPUTES
-if (CPA_STATUS_SUCCESS == status) {
-  /* Poll for hw pre-compute responses */
-  do {
-    status = icp_sal_CyPollDpInstance(cyInstHandle, 0);
-  } while (CPA_STATUS_SUCCESS != status);
-}
+if (CPA_STATUS_SUCCESS == status) {
+  /* Poll for hw pre-compute responses */
+  do {
+    status = icp_sal_CyPollDpInstance(cyInstHandle, 0);
+  } while (CPA_STATUS_SUCCESS != status);
+}
 #endif
 

In this example, data is stored in flat buffers (as opposed to scatter-gather lists). The operational data in this case is shown below.

-
sessionSetupData.sessionPriority = CPA_CY_PRIORITY_HIGH;
-sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
+
sessionSetupData.sessionPriority = CPA_CY_PRIORITY_HIGH;
+sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH;
 
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
-sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_AES_CBC;
+sessionSetupData.cipherSetupData.pCipherKey = sampleCipherKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
 
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA256;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
-sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleCipherKey;
-sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleCipherKey);
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_SHA256;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
+sessionSetupData.hashSetupData.authModeSetupData.authKey = sampleCipherKey;
+sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = sizeof(sampleCipherKey);
 
 /* Even though MAC follows immediately after the region to hash
  * digestIsAppended is set to false in this case to workaround
- * errata number IXA00378322 */
-sessionSetupData.digestIsAppended = CPA_FALSE;
-sessionSetupData.verifyDigest = CPA_FALSE;
-
-/* Determine size of session context to allocate */
-PRINT_DBG("cpaCySymDpSessionCtxGetSize\n");
-status = cpaCySymDpSessionCtxGetSize(cyInstHandle, &sessionSetupData, &sessionCtxSize);
-
-if (CPA_STATUS_SUCCESS == status) {
-  /* Allocate session context */
-  status = PHYS_CONTIG_ALLOC(&sessionCtx, sessionCtxSize);
-}
-
-if (CPA_STATUS_SUCCESS == status) {
-  /* Initialize the session */
-  PRINT_DBG("cpaCySymDpInitSession\n");
-  status = cpaCySymDpInitSession(cyInstHandle, &sessionSetupData, sessionCtx);
-}
+ * errata number IXA00378322 */
+sessionSetupData.digestIsAppended = CPA_FALSE;
+sessionSetupData.verifyDigest = CPA_FALSE;
+
+/* Determine size of session context to allocate */
+PRINT_DBG("cpaCySymDpSessionCtxGetSize\n");
+status = cpaCySymDpSessionCtxGetSize(cyInstHandle, &sessionSetupData, &sessionCtxSize);
+
+if (CPA_STATUS_SUCCESS == status) {
+  /* Allocate session context */
+  status = PHYS_CONTIG_ALLOC(&sessionCtx, sessionCtxSize);
+}
+
+if (CPA_STATUS_SUCCESS == status) {
+  /* Initialize the session */
+  PRINT_DBG("cpaCySymDpInitSession\n");
+  status = cpaCySymDpInitSession(cyInstHandle, &sessionSetupData, sessionCtx);
+}
 #ifdef LAC_HW_PRECOMPUTES
-if (CPA_STATUS_SUCCESS == status) {
-  /* Poll for hw pre-compute responses */
-  do {
-    status = icp_sal_CyPollDpInstance(cyInstHandle, 0);
-  } while (CPA_STATUS_SUCCESS != status);
-}
+if (CPA_STATUS_SUCCESS == status) {
+  /* Poll for hw pre-compute responses */
+  do {
+    status = icp_sal_CyPollDpInstance(cyInstHandle, 0);
+  } while (CPA_STATUS_SUCCESS != status);
+}
 #endif
 

This request is then enqueued on the instance as shown below.

-
status = cpaCySymDpEnqueueOp(pOpData, CPA_FALSE);
+
status = cpaCySymDpEnqueueOp(pOpData, CPA_FALSE);
 

Other requests can now be enqueued before submitting all the requests to be @@ -1352,7 +1350,7 @@

Chained Cipher and Hash – GCM Use Case
status = cpaCySymDpPerformOpNow(cyInstHandle);
+
status = cpaCySymDpPerformOpNow(cyInstHandle);
 

An alternative to calling the cpaCySymDpPerformOpNow function is to set @@ -1366,14 +1364,14 @@

Chained Cipher and Hash – GCM Use Case
sessionStatus = cpaCySymDpRemoveSession(cyInstHandle, sessionCtx);
+
sessionStatus = cpaCySymDpRemoveSession(cyInstHandle, sessionCtx);
 

Since cryptographic API v2.2, before removing the symmetric session context, it is recommended to wait for the completion of any outstanding request using cpaCySymSessionInUse. It is executed in the symSessionWaitForInflightReq call, which polls for the in-flight requests.

-
symSessionWaitForInflightReq(sessionCtx)
+
symSessionWaitForInflightReq(sessionCtx)
 

Since Cryptographic API v2.2, two new functions have been implemented: @@ -1391,7 +1389,7 @@

Chained Cipher and Hash – GCM Use Case -

TLS Key and MGF Mask Generation

+

TLS Key and MGF Mask Generation

Note

Refer to Related Documents and References @@ -1424,11 +1422,11 @@

TLS Key and MGF Mask Generation -

Setting CpaCyKeyGenTlsOpData Structure Fields

+

Setting CpaCyKeyGenTlsOpData Structure Fields

The Transport Layer Security (TLS) Protocol Version 1.1 standard, RFC 4346 (refer to Related Documents and References), section 6.3 key_block is described as:

-
key_block = PRF(SecurityParameters.master_secret, "key expansion", SecurityParameters.server_random + SecurityParameters.client_random);
+
key_block = PRF(SecurityParameters.master_secret, "key expansion", SecurityParameters.server_random + SecurityParameters.client_random);
 

This maps to the cryptographic API’s CpaCyKeyGenTlsOpData as follows:

@@ -1445,7 +1443,7 @@

Setting CpaCyKeyGenTlsOpData Structure FieldsRelated Documents and References), Section 6.3 final_client_write_key is described as:

-
final_client_write_key = PRF(client_write_key, "client write key", client_random + server_random)[0..15]
+
final_client_write_key = PRF(client_write_key, "client write key", client_random + server_random)[0..15]
 

This maps to the cryptographic API’s CpaCyKeyGenTlsOpData as follows:

@@ -1461,7 +1459,7 @@

Setting CpaCyKeyGenTlsOpData Structure FieldsRelated Documents and References), Section 6.3 final_server_write_key is described as:

-
final_server_write_key = PRF(server_write_key, "server write key", client_random + server_random)[0..15]
+
final_server_write_key = PRF(server_write_key, "server write key", client_random + server_random)[0..15]
 

This maps to the cryptographic API’s CpaCyKeyGenTlsOpData as follows:

@@ -1477,7 +1475,7 @@

Setting CpaCyKeyGenTlsOpData Structure FieldsRelated Documents and References), Section 6.3 iv_block is described as:

-
iv_block = PRF("", "IV block", client_random + server_random)[0..15]
+
iv_block = PRF("", "IV block", client_random + server_random)[0..15]
 

This maps to the cryptographic API’s CpaCyKeyGenTlsOpData as follows:

@@ -1496,7 +1494,7 @@

Setting CpaCyKeyGenTlsOpData Structure Fields -

Session Update for Chained Cipher and Hash Operation

+

Session Update for Chained Cipher and Hash Operation

This example demonstrates the usage of the session update together with data plane symmetric API to perform a chained cipher and hash operation. It performs a KASUMI F9 hash operation on the sample text and then encrypts the sample text using @@ -1522,74 +1520,74 @@

Session Update for Chained Cipher and Hash Operation -
status = cpaCySymDpRegCbFunc(cyInstHandle, symDpCallback);
+
status = cpaCySymDpRegCbFunc(cyInstHandle, symDpCallback);
 
-

Create and Initialize a Session

-
sessionSetupData.sessionPriority = CPA_CY_PRIORITY_HIGH;
-sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
-sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
-
-sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_KASUMI_F8;
-sessionSetupData.cipherSetupData.pCipherKey = pCipherKey;
-sessionSetupData.cipherSetupData.cipherKeyLenInBytes = cipherKeyLen;
-sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
-
-sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_KASUMI_F9;
-sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
-sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
-
-sessionSetupData.hashSetupData.authModeSetupData.authKey = authKey;
-sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = authKeyLen;
-sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(additionalAuthData);
-sessionSetupData.digestIsAppended = CPA_TRUE;
-sessionSetupData.verifyDigest = CPA_FALSE;
-
-/* Determine size of session context to allocate */
-PRINT_DBG("cpaCySymDpSessionCtxGetSize\n");
-status = cpaCySymDpSessionCtxGetSize(cyInstHandle, &sessionSetupData, &sessionCtxSize);
-
-if (CPA_STATUS_SUCCESS == status)
-{
-  /* Allocate session context */
-  status = PHYS_CONTIG_ALLOC(sessionCtx, sessionCtxSize);
-}
-
-if (CPA_STATUS_SUCCESS == status)
-{
-  /* Initialize the session */
-  PRINT_DBG("cpaCySymDpInitSession\n");
-  status = cpaCySymDpInitSession(cyInstHandle, &sessionSetupData, *sessionCtx);
-}
+

Create and Initialize a Session

+
sessionSetupData.sessionPriority = CPA_CY_PRIORITY_HIGH;
+sessionSetupData.symOperation = CPA_CY_SYM_OP_ALGORITHM_CHAINING;
+sessionSetupData.algChainOrder = CPA_CY_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER;
+
+sessionSetupData.cipherSetupData.cipherAlgorithm = CPA_CY_SYM_CIPHER_KASUMI_F8;
+sessionSetupData.cipherSetupData.pCipherKey = pCipherKey;
+sessionSetupData.cipherSetupData.cipherKeyLenInBytes = cipherKeyLen;
+sessionSetupData.cipherSetupData.cipherDirection = CPA_CY_SYM_CIPHER_DIRECTION_ENCRYPT;
+
+sessionSetupData.hashSetupData.hashAlgorithm = CPA_CY_SYM_HASH_KASUMI_F9;
+sessionSetupData.hashSetupData.hashMode = CPA_CY_SYM_HASH_MODE_AUTH;
+sessionSetupData.hashSetupData.digestResultLenInBytes = DIGEST_LENGTH;
+
+sessionSetupData.hashSetupData.authModeSetupData.authKey = authKey;
+sessionSetupData.hashSetupData.authModeSetupData.authKeyLenInBytes = authKeyLen;
+sessionSetupData.hashSetupData.authModeSetupData.aadLenInBytes = sizeof(additionalAuthData);
+sessionSetupData.digestIsAppended = CPA_TRUE;
+sessionSetupData.verifyDigest = CPA_FALSE;
+
+/* Determine size of session context to allocate */
+PRINT_DBG("cpaCySymDpSessionCtxGetSize\n");
+status = cpaCySymDpSessionCtxGetSize(cyInstHandle, &sessionSetupData, &sessionCtxSize);
+
+if (CPA_STATUS_SUCCESS == status)
+{
+  /* Allocate session context */
+  status = PHYS_CONTIG_ALLOC(sessionCtx, sessionCtxSize);
+}
+
+if (CPA_STATUS_SUCCESS == status)
+{
+  /* Initialize the session */
+  PRINT_DBG("cpaCySymDpInitSession\n");
+  status = cpaCySymDpInitSession(cyInstHandle, &sessionSetupData, *sessionCtx);
+}
 

In this example, data is stored in flat buffers (as opposed to scatter-gather lists). The operational data in this case is the following:

-
pOpData->thisPhys = sampleVirtToPhys(pOpData);
-pOpData->instanceHandle = cyInstHandle;
-pOpData->sessionCtx = sessionCtx;
-pOpData->pCallbackTag = (void *)0;
-pOpData->cryptoStartSrcOffsetInBytes = 0;
-pOpData->messageLenToCipherInBytes = srcLen;
-pOpData->hashStartSrcOffsetInBytes = 0;
-pOpData->messageLenToHashInBytes = srcLen;
-pOpData->digestResult = sampleVirtToPhys(pSrcBuffer) + srcLen;
-pOpData->iv = sampleVirtToPhys(pIvBuffer);
-pOpData->pIv = pIvBuffer;
-pOpData->ivLenInBytes = ivLen;
-pOpData->additionalAuthData = sampleVirtToPhys(pAdditionalAuthData);
-pOpData->pAdditionalAuthData = pAdditionalAuthData;
-pOpData->srcBuffer = sampleVirtToPhys(pSrcBuffer);
-pOpData->srcBufferLen = bufferSize;
-pOpData->dstBuffer = sampleVirtToPhys(pDstBuffer);
-pOpData->dstBufferLen = bufferSize;
+
pOpData->thisPhys = sampleVirtToPhys(pOpData);
+pOpData->instanceHandle = cyInstHandle;
+pOpData->sessionCtx = sessionCtx;
+pOpData->pCallbackTag = (void *)0;
+pOpData->cryptoStartSrcOffsetInBytes = 0;
+pOpData->messageLenToCipherInBytes = srcLen;
+pOpData->hashStartSrcOffsetInBytes = 0;
+pOpData->messageLenToHashInBytes = srcLen;
+pOpData->digestResult = sampleVirtToPhys(pSrcBuffer) + srcLen;
+pOpData->iv = sampleVirtToPhys(pIvBuffer);
+pOpData->pIv = pIvBuffer;
+pOpData->ivLenInBytes = ivLen;
+pOpData->additionalAuthData = sampleVirtToPhys(pAdditionalAuthData);
+pOpData->pAdditionalAuthData = pAdditionalAuthData;
+pOpData->srcBuffer = sampleVirtToPhys(pSrcBuffer);
+pOpData->srcBufferLen = bufferSize;
+pOpData->dstBuffer = sampleVirtToPhys(pDstBuffer);
+pOpData->dstBufferLen = bufferSize;
 

This request is then enqueued on the instance as shown below.

-
status = cpaCySymDpEnqueueOp(pOpData, CPA_FALSE);
+
status = cpaCySymDpEnqueueOp(pOpData, CPA_FALSE);
 

Other requests can now be enqueued before submitting all the requests to be @@ -1597,7 +1595,7 @@

Create and Initialize a Session
status = cpaCySymDpPerformOpNow(cyInstHandle);
+
status = cpaCySymDpPerformOpNow(cyInstHandle);
 

An alternative to calling the cpaCySymDpPerformOpNow function is to set @@ -1612,12 +1610,12 @@

Create and Initialize a Session
sessionUpdateData.flags = CPA_CY_SYM_SESUPD_CIPHER_KEY;
-sessionUpdateData.flags |= CPA_CY_SYM_SESUPD_AUTH_KEY;
-sessionUpdateData.pCipherKey = pCipherKey;
-sessionUpdateData.authKey = authKey;
+
sessionUpdateData.flags = CPA_CY_SYM_SESUPD_CIPHER_KEY;
+sessionUpdateData.flags |= CPA_CY_SYM_SESUPD_AUTH_KEY;
+sessionUpdateData.pCipherKey = pCipherKey;
+sessionUpdateData.authKey = authKey;
 
-status = cpaCySymUpdateSession(sessionCtx, &sessionUpdateData);
+status = cpaCySymUpdateSession(sessionCtx, &sessionUpdateData);
 

With the keys changed, the chained cipher and hash operation is performed again, @@ -1627,7 +1625,7 @@

Create and Initialize a Session -

HKDF Use Case

+

HKDF Use Case

This section contains sample code that demonstrates the usage of the symmetric API, specifically using this API to perform hash-based message authentication code key derivation function (HKDF) operations. It performs HKDF Extract and Expand, and @@ -1637,27 +1635,27 @@

HKDF Use Case/quickassist/lookaside/access_layer/src/sample_code/functional/sym/hkdf_sample.

-

Instance Configuration and Memory Allocation

+

Instance Configuration and Memory Allocation

Cryptographic service instances are discovered and started in the same way and using the same API as the traditional symmetric use cases.

  1. If the instance is polled, start the polling thread. Polling is done in an implementation-dependent manner.

  2. Allocate memory for HKDF operation data:

    -
    pOpData = qaeMemAllocNUMA(sizeof(CpaCyKeyGenHKDFOpData), instanceInfo2.nodeAffinity, BYTE_ALIGNMENT_64);
    +
    pOpData = qaeMemAllocNUMA(sizeof(CpaCyKeyGenHKDFOpData), instanceInfo2.nodeAffinity, BYTE_ALIGNMENT_64);
     

    This structure must be allocated with USDM to be pinned in physical memory.

  3. Allocate memory for HKDF output data. Output data is CpaFlatBuffer type:

    -
    PHYS_CONTIG_ALLOC(&pHkdfData, hkdfDataSize);
    +
    PHYS_CONTIG_ALLOC(&pHkdfData, hkdfDataSize);
     
-

HKDF Extract Expand Operation

+

HKDF Extract Expand Operation

To perform an Extract Expand operation, go to the CpaCyKeyGenHKDFOpData structure, and set hkdfKeyOp to CPA_CY_HKDF_KEY_EXTRACT_EXPAND.

-
pOpData->hkdfKeyOp = CPA_CY_HKDF_KEY_EXTRACT_EXPAND;
+
pOpData->hkdfKeyOp = CPA_CY_HKDF_KEY_EXTRACT_EXPAND;
 
-pOpData->seedLen = sizeof(ikm);
-memcpy(pOpData->seed, ikm, pOpData->seedLen);
+pOpData->seedLen = sizeof(ikm);
+memcpy(pOpData->seed, ikm, pOpData->seedLen);
 
-pOpData->secretLen = sizeof(slt);
-memcpy(pOpData->secret, slt, pOpData->secretLen);
+pOpData->secretLen = sizeof(slt);
+memcpy(pOpData->secret, slt, pOpData->secretLen);
 
-pOpData->infoLen = sizeof(inf);
-memcpy(pOpData->info, inf, pOpData->infoLen);
+pOpData->infoLen = sizeof(inf);
+memcpy(pOpData->info, inf, pOpData->infoLen);
 
-

HKDF Extract Expand Label Operation

+

HKDF Extract Expand Label Operation

To perform an Extract, Expand Label operation:

  1. Go to the CpaCyKeyGenHKDFOpData structure and set hkdfKeyOp to @@ -1692,23 +1690,23 @@

    HKDF Extract Expand Label Operationlabel[0].sublabelFlag field to 0x00 to disable generating sublabels.

-
pOpData->hkdfKeyOp = CPA_CY_HKDF_KEY_EXTRACT_EXPAND_LABEL;
-pOpData->seedLen = sizeof(seed_label);
-memcpy(pOpData->seed, seed_label, sizeof(seed_label));
+
pOpData->hkdfKeyOp = CPA_CY_HKDF_KEY_EXTRACT_EXPAND_LABEL;
+pOpData->seedLen = sizeof(seed_label);
+memcpy(pOpData->seed, seed_label, sizeof(seed_label));
 
-pOpData->secretLen = sizeof(secret_label);
-memcpy(pOpData->secret, secret_label, sizeof(secret_label));
+pOpData->secretLen = sizeof(secret_label);
+memcpy(pOpData->secret, secret_label, sizeof(secret_label));
 
-pOpData->numLabels = 1;
-memcpy(pOpData->label[0].label, label, sizeof(label));
+pOpData->numLabels = 1;
+memcpy(pOpData->label[0].label, label, sizeof(label));
 
-pOpData->label[0].labelLen = sizeof(label);
-pOpData->label[0].sublabelFlag = 0x00;
+pOpData->label[0].labelLen = sizeof(label);
+pOpData->label[0].sublabelFlag = 0x00;
 
-

HKDF Extract Expand Label and Sublabels Operation

+

HKDF Extract Expand Label and Sublabels Operation

To perform an Extract, Expand Label and Sublabels operation:

  1. Go to the CpaCyKeyGenHKDFOpData structure and set hkdfKeyOp to @@ -1721,26 +1719,26 @@

    HKDF Extract Expand Label and Sublabels Operation

    Set the label[0].sublabelFlag and label[0].sublabelFlag field as shown below to generate Key and IV sublabels.

-
pOpData->hkdfKeyOp = CPA_CY_HKDF_KEY_EXTRACT_EXPAND_LABEL;
+
pOpData->hkdfKeyOp = CPA_CY_HKDF_KEY_EXTRACT_EXPAND_LABEL;
 
-pOpData->seedLen = sizeof(seed_label);
-memcpy(pOpData->seed, seed_label, sizeof(seed_label));
+pOpData->seedLen = sizeof(seed_label);
+memcpy(pOpData->seed, seed_label, sizeof(seed_label));
 
-pOpData->secretLen = sizeof(secret_label);
-memcpy(pOpData->secret, secret_label, sizeof(secret_label));
+pOpData->secretLen = sizeof(secret_label);
+memcpy(pOpData->secret, secret_label, sizeof(secret_label));
 
-pOpData->numLabels = 1;
-memcpy(pOpData->label[0].label, label, sizeof(label));
+pOpData->numLabels = 1;
+memcpy(pOpData->label[0].label, label, sizeof(label));
 
-pOpData->label[0].labelLen = sizeof(label);
-pOpData->label[0].sublabelFlag = CPA_CY_HKDF_SUBLABEL_KEY;
-pOpData->label[0].sublabelFlag |= CPA_CY_HKDF_SUBLABEL_IV;
+pOpData->label[0].labelLen = sizeof(label);
+pOpData->label[0].sublabelFlag = CPA_CY_HKDF_SUBLABEL_KEY;
+pOpData->label[0].sublabelFlag |= CPA_CY_HKDF_SUBLABEL_IV;
 

-

Perform HKDF Operation

+

Perform HKDF Operation

The crypto instance must be specified in the instanceHandle to execute the HKDF operation. When the operation is performed asynchronously, the callback function and callback tag should be set in the pKeyGenCb and pCallbackTag arguments. @@ -1748,18 +1746,18 @@

Perform HKDF OperationCpaFlatBuffer. All generated values are arranged one after the other in a single buffer. Depending on what operations are performed, the buffer length should be adjusted. See below example.

-
cpaCyKeyGenTls3(cyInstHandle, /* Instance handle */
-                hkdfSampleCallback, /* Callback function */
-                (void *)&complete, /* Callback tag */
-                pOpData, /* HKDF operational data */
-                CPA_CY_HKDF_TLS_AES_128_GCM_SHA256, /* HKDF cipher suite */
-                &hkdfOut); /* Output buffer */
+
cpaCyKeyGenTls3(cyInstHandle, /* Instance handle */
+                hkdfSampleCallback, /* Callback function */
+                (void *)&complete, /* Callback tag */
+                pOpData, /* HKDF operational data */
+                CPA_CY_HKDF_TLS_AES_128_GCM_SHA256, /* HKDF cipher suite */
+                &hkdfOut); /* Output buffer */
 

-

Using the Diffie-Hellman API

+

Using the Diffie-Hellman API

This example demonstrates the usage of the Diffie-Hellman API.

These samples are located in /asym/diffie_hellman_sample.

The following steps are carried out:

@@ -1777,41 +1775,41 @@

Using the Diffie-Hellman API
status = OS_MALLOC(&pCpaDhOpDataP1, sizeof(CpaCyDhPhase1KeyGenOpData));
+
status = OS_MALLOC(&pCpaDhOpDataP1, sizeof(CpaCyDhPhase1KeyGenOpData));
 
 /*
  * Allocate input buffers for phase 1 and copy data. Input to DH
  * phase 1 includes the prime (primeP), the base g (baseG) and
- * a random private value (privateValueX) */
-if (CPA_STATUS_SUCCESS == status) {
-  memset(pCpaDhOpDataP1, 0, sizeof(CpaCyDhPhase1KeyGenOpData));
+ * a random private value (privateValueX) */
+if (CPA_STATUS_SUCCESS == status) {
+  memset(pCpaDhOpDataP1, 0, sizeof(CpaCyDhPhase1KeyGenOpData));
 
-  pCpaDhOpDataP1->primeP.dataLenInBytes = sizeof(primeP_768);
-  status = PHYS_CONTIG_ALLOC(&pCpaDhOpDataP1->primeP.pData, sizeof(primeP_768));
+  pCpaDhOpDataP1->primeP.dataLenInBytes = sizeof(primeP_768);
+  status = PHYS_CONTIG_ALLOC(&pCpaDhOpDataP1->primeP.pData, sizeof(primeP_768));
 
-  if (NULL != pCpaDhOpDataP1->primeP.pData) {
-    memcpy(pCpaDhOpDataP1->primeP.pData, primeP_768,
-    sizeof(primeP_768));
-  }
-}
+  if (NULL != pCpaDhOpDataP1->primeP.pData) {
+    memcpy(pCpaDhOpDataP1->primeP.pData, primeP_768,
+    sizeof(primeP_768));
+  }
+}
 
-if (CPA_STATUS_SUCCESS == status) {
-  pCpaDhOpDataP1->baseG.dataLenInBytes = sizeof(baseG1);
-  status = PHYS_CONTIG_ALLOC(&pCpaDhOpDataP1->baseG.pData, sizeof(baseG1));
+if (CPA_STATUS_SUCCESS == status) {
+  pCpaDhOpDataP1->baseG.dataLenInBytes = sizeof(baseG1);
+  status = PHYS_CONTIG_ALLOC(&pCpaDhOpDataP1->baseG.pData, sizeof(baseG1));
 
-  if (NULL != pCpaDhOpDataP1->baseG.pData) {
-    memcpy(pCpaDhOpDataP1->baseG.pData, baseG1, sizeof(baseG1));
-  }
-}
+  if (NULL != pCpaDhOpDataP1->baseG.pData) {
+    memcpy(pCpaDhOpDataP1->baseG.pData, baseG1, sizeof(baseG1));
+  }
+}
 
-if (CPA_STATUS_SUCCESS == status) {
-  pCpaDhOpDataP1->privateValueX.dataLenInBytes = sizeof(privateValueX);
-  status = PHYS_CONTIG_ALLOC(&pCpaDhOpDataP1->privateValueX.pData, sizeof(privateValueX));
+if (CPA_STATUS_SUCCESS == status) {
+  pCpaDhOpDataP1->privateValueX.dataLenInBytes = sizeof(privateValueX);
+  status = PHYS_CONTIG_ALLOC(&pCpaDhOpDataP1->privateValueX.pData, sizeof(privateValueX));
 
-  if (NULL != pCpaDhOpDataP1->privateValueX.pData) {
-    memcpy(pCpaDhOpDataP1->privateValueX.pData, privateValueX, sizeof(privateValueX));
-  }
-}
+  if (NULL != pCpaDhOpDataP1->privateValueX.pData) {
+    memcpy(pCpaDhOpDataP1->privateValueX.pData, privateValueX, sizeof(privateValueX));
+  }
+}
 

Invoke the phase 1 operation as shown below, which performs the modular exponentiation such that @@ -1821,12 +1819,12 @@

Using the Diffie-Hellman APINULL pointer for the callback function.

-
status = cpaCyDhKeyGenPhase2Secret(
-    cyInstHandle,
-    (const CpaCyGenFlatBufCbFunc)asymCallback, /* CB function*/
-    pCallbackTagPh2, /* Pointer to the complete variable */
-    pCpaDhOpDataP2, /* Structure containing p, the public value & x */
-    pOctetStringSecretKey); /* Private key (output of the function) */
+
status = cpaCyDhKeyGenPhase2Secret(
+    cyInstHandle,
+    (const CpaCyGenFlatBufCbFunc)asymCallback, /* CB function*/
+    pCallbackTagPh2, /* Pointer to the complete variable */
+    pCpaDhOpDataP2, /* Structure containing p, the public value & x */
+    pOctetStringSecretKey); /* Private key (output of the function) */
 

In a real-world implementation of a key exchange protocol, the public value generated @@ -1835,17 +1833,17 @@

Using the Diffie-Hellman API
status = cpaCyDhKeyGenPhase2Secret(
-    cyInstHandle,
-    (const CpaCyGenFlatBufCbFunc)asymCallback, /* CB function */
-    pCallbackTagPh2, /* Pointer to the complete variable */
-    pCpaDhOpDataP2, /* Structure containing p, the public value & x*/
-    pOctetStringSecretKey); /* Private key (output of the function) */
+
status = cpaCyDhKeyGenPhase2Secret(
+    cyInstHandle,
+    (const CpaCyGenFlatBufCbFunc)asymCallback, /* CB function */
+    pCallbackTagPh2, /* Pointer to the complete variable */
+    pCpaDhOpDataP2, /* Structure containing p, the public value & x*/
+    pOctetStringSecretKey); /* Private key (output of the function) */
 

Finally, clean up by freeing up memory, stopping the instance, etc.

-

Prime Number Testing

+

Prime Number Testing

This example demonstrates the usage of the prime number testing API.

These samples are located in /asym/prime_sample.

The following steps are carried out:

@@ -1870,28 +1868,28 @@

Prime Number Testing -
pPrimeTestOpData->primeCandidate.pData = pPrime;
-pPrimeTestOpData->primeCandidate.dataLenInBytes = sizeof(samplePrimeP_768);
-pPrimeTestOpData->performGcdTest = CPA_TRUE;
-pPrimeTestOpData->performFermatTest = CPA_TRUE;
-pPrimeTestOpData->numMillerRabinRounds = NB_MR_ROUNDS;
-pPrimeTestOpData->millerRabinRandomInput.pData = pMR;
-pPrimeTestOpData->millerRabinRandomInput.dataLenInBytes = sizeof(MR);
-pPrimeTestOpData->performLucasTest = CPA_TRUE;
-
-status = cpaCyPrimeTest(
-    cyInstHandle,
-    (const CpaCyPrimeTestCbFunc)primeCallback, /* CB function */
-    (void *)&complete, /* Callback tag */
-    pPrimeTestOpData, /* Operation data */
-    &testPassed); /* Return value: true if the number is probably a prime, false if it is not a prime */
+
pPrimeTestOpData->primeCandidate.pData = pPrime;
+pPrimeTestOpData->primeCandidate.dataLenInBytes = sizeof(samplePrimeP_768);
+pPrimeTestOpData->performGcdTest = CPA_TRUE;
+pPrimeTestOpData->performFermatTest = CPA_TRUE;
+pPrimeTestOpData->numMillerRabinRounds = NB_MR_ROUNDS;
+pPrimeTestOpData->millerRabinRandomInput.pData = pMR;
+pPrimeTestOpData->millerRabinRandomInput.dataLenInBytes = sizeof(MR);
+pPrimeTestOpData->performLucasTest = CPA_TRUE;
+
+status = cpaCyPrimeTest(
+    cyInstHandle,
+    (const CpaCyPrimeTestCbFunc)primeCallback, /* CB function */
+    (void *)&complete, /* Callback tag */
+    pPrimeTestOpData, /* Operation data */
+    &testPassed); /* Return value: true if the number is probably a prime, false if it is not a prime */
 

Finally, statistics are queried and the service stopped.

-

Using the SM2 API

+

Using the SM2 API

This example demonstrates the usage of the SM2 API.

The following steps are carried out:

-
status = OS_MALLOC(&pCpaEcsm2SignOpData, sizeof(CpaCyEcsm2SignOpData));
-status = PHYS_CONTIG_ALLOC(&pCpaEcsm2SignOpData->k.pData, sizeof(k));
-status = PHYS_CONTIG_ALLOC(&pCpaEcsm2SignOpData->e.pData, sizeof(e));
-status = PHYS_CONTIG_ALLOC(&pCpaEcsm2SignOpData->d.pData, sizeof(d));
+
status = OS_MALLOC(&pCpaEcsm2SignOpData, sizeof(CpaCyEcsm2SignOpData));
+status = PHYS_CONTIG_ALLOC(&pCpaEcsm2SignOpData->k.pData, sizeof(k));
+status = PHYS_CONTIG_ALLOC(&pCpaEcsm2SignOpData->e.pData, sizeof(e));
+status = PHYS_CONTIG_ALLOC(&pCpaEcsm2SignOpData->d.pData, sizeof(d));
 
-status = PHYS_CONTIG_ALLOC(&pR->pData, GFP_SM2_SIZE_IN_BYTE);
-status = PHYS_CONTIG_ALLOC(&pS->pData, GFP_SM2_SIZE_IN_BYTE);
+status = PHYS_CONTIG_ALLOC(&pR->pData, GFP_SM2_SIZE_IN_BYTE);
+status = PHYS_CONTIG_ALLOC(&pS->pData, GFP_SM2_SIZE_IN_BYTE);
 
-status = cpaCyEcsm2Sign(
-    cyInstHandle,
-    (const CpaCyEcsm2SignCbFunc)asymSignCallback, /* CB function*/
-    pCallbackTag, /* Opaque user data */
-    pCpaEcsm2SignOpData, /* Structure containing k, d and e */
-    &signStatus, /* signStatus indicates if the result is valid */
-    pR, /* Signature r (function output) */
-    pS); /* Signature s (function output) */
+status = cpaCyEcsm2Sign(
+    cyInstHandle,
+    (const CpaCyEcsm2SignCbFunc)asymSignCallback, /* CB function*/
+    pCallbackTag, /* Opaque user data */
+    pCpaEcsm2SignOpData, /* Structure containing k, d and e */
+    &signStatus, /* signStatus indicates if the result is valid */
+    pR, /* Signature r (function output) */
+    pS); /* Signature s (function output) */
 

The function sampleEcsm2VerifyPerformOp provisions parts of the example @@ -1940,25 +1938,25 @@

SM2 Digital Signature Generation and Verification
  • Call the function cpaCyEcsm2Verify for signature verification operation.

  • -
    status = OS_MALLOC(&pCpaEcsm2VerifyOpData, sizeof(CpaCyEcsm2VerifyOpData));
    +
    status = OS_MALLOC(&pCpaEcsm2VerifyOpData, sizeof(CpaCyEcsm2VerifyOpData));
     
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2VerifyOpData->e.pData, sizeof(e));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2VerifyOpData->r.pData, sizeof(r));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2VerifyOpData->s.pData, sizeof(s));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2VerifyOpData->xP.pData, sizeof(xP));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2VerifyOpData->yP.pData, sizeof(yPA));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2VerifyOpData->e.pData, sizeof(e));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2VerifyOpData->r.pData, sizeof(r));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2VerifyOpData->s.pData, sizeof(s));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2VerifyOpData->xP.pData, sizeof(xP));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2VerifyOpData->yP.pData, sizeof(yPA));
     
    -status = cpaCyEcsm2Verify(
    -    cyInstHandle,
    -    (const CpaCyEcsm2VerifyCbFunc)asymVerifyCallback, /* CB function*/
    -    pCallbackTag, /* Opaque user data */
    -    pCpaEcsm2VerifyOpData, /* Verify request data*/
    -    &verifyStatus); /* Verify status */
    +status = cpaCyEcsm2Verify(
    +    cyInstHandle,
    +    (const CpaCyEcsm2VerifyCbFunc)asymVerifyCallback, /* CB function*/
    +    pCallbackTag, /* Opaque user data */
    +    pCpaEcsm2VerifyOpData, /* Verify request data*/
    +    &verifyStatus); /* Verify status */
     

    -

    SM2 Public Key Encryption

    +

    SM2 Public Key Encryption

    This operation is to encrypt a given message then decrypt the cipher and compare to the given message.

    The function sampleEcsm2EncPerformOp provisions parts of the example @@ -1970,23 +1968,23 @@

    SM2 Public Key Encryption[k]G y1, x coordinate of [k]Pb x2 and y coordinate of [k]Pb y2.

  • Call the function cpaCyEcsm2Encrypt for encryption operation.

  • -
    status = OS_MALLOC(&pCpaEcsm2EncOpData, sizeof(CpaCyEcsm2EncryptOpData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOpData->k.pData, sizeof(k));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOpData->xP.pData, sizeof(xP));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOpData->yP.pData, sizeof(yP));
    +
    status = OS_MALLOC(&pCpaEcsm2EncOpData, sizeof(CpaCyEcsm2EncryptOpData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOpData->k.pData, sizeof(k));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOpData->xP.pData, sizeof(xP));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOpData->yP.pData, sizeof(yP));
     
    -status = OS_MALLOC(&pCpaEcsm2EncOutputData, sizeof(CpaCyEcsm2EncryptOutputData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOutputData->x1.pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOutputData->y1.pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOutputData->x2.pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOutputData->y2.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = OS_MALLOC(&pCpaEcsm2EncOutputData, sizeof(CpaCyEcsm2EncryptOutputData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOutputData->x1.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOutputData->y1.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOutputData->x2.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2EncOutputData->y2.pData, GFP_SM2_SIZE_IN_BYTE);
     
    -status = cpaCyEcsm2Encrypt(
    -    cyInstHandle,
    -    (const CpaCyGenFlatBufCbFunc)asymEncCallback, /* CB function*/
    -    pCallbackTag, /* Opaque user data */
    -    pCpaEcsm2EncOpData, /* Encryption request data */
    -    pCpaEcsm2EncOutputData); /* Encryption response data */
    +status = cpaCyEcsm2Encrypt(
    +    cyInstHandle,
    +    (const CpaCyGenFlatBufCbFunc)asymEncCallback, /* CB function*/
    +    pCallbackTag, /* Opaque user data */
    +    pCpaEcsm2EncOpData, /* Encryption request data */
    +    pCpaEcsm2EncOutputData); /* Encryption response data */
     

    The function sampleEcsm2DecPerformOp provisions parts of the example @@ -1999,30 +1997,30 @@

    SM2 Public Key EncryptioncpaCyEcsm2Decrypt for decryption operation.

  • Call the function sm3 and hashCheck to check correctness of decryption.

  • -
    status = OS_MALLOC(&pCpaEcsm2DecOpData, sizeof(CpaCyEcsm2DecryptOpData));
    +
    status = OS_MALLOC(&pCpaEcsm2DecOpData, sizeof(CpaCyEcsm2DecryptOpData));
     
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2DecOpData->d.pData, sizeof(d));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2DecOpData->x1.pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2DecOpData->y1.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2DecOpData->d.pData, sizeof(d));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2DecOpData->x1.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2DecOpData->y1.pData, GFP_SM2_SIZE_IN_BYTE);
     
    -status = OS_MALLOC(&pCpaEcsm2DecOutputData, sizeof(CpaCyEcsm2DecryptOutputData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2DecOutputData->x2.pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2DecOutputData->y2.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = OS_MALLOC(&pCpaEcsm2DecOutputData, sizeof(CpaCyEcsm2DecryptOutputData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2DecOutputData->x2.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2DecOutputData->y2.pData, GFP_SM2_SIZE_IN_BYTE);
     
    -status = cpaCyEcsm2Decrypt(
    -    cyInstHandle,
    -    (const CpaCyGenFlatBufCbFunc)asymDecCallback, /* CB function*/
    -    pCallbackTag, /* Opaque user data */
    -    pCpaEcsm2DecOpData, /* Decryption request data */
    -    pCpaEcsm2DecOutputData); /* Decryption response data */
    +status = cpaCyEcsm2Decrypt(
    +    cyInstHandle,
    +    (const CpaCyGenFlatBufCbFunc)asymDecCallback, /* CB function*/
    +    pCallbackTag, /* Opaque user data */
    +    pCpaEcsm2DecOpData, /* Decryption request data */
    +    pCpaEcsm2DecOutputData); /* Decryption response data */
     
    -sm3(pDecOutputData, MESSAGE_LEN + 2 * GFP_SM2_SIZE_IN_BYTE, pHashBuffer);
    -hashCheck(pC3Buffer, pHashBuffer, &status);
    +sm3(pDecOutputData, MESSAGE_LEN + 2 * GFP_SM2_SIZE_IN_BYTE, pHashBuffer);
    +hashCheck(pC3Buffer, pHashBuffer, &status);
     

    -

    SM2 Key Exchange

    +

    SM2 Key Exchange

    This operation is to exchange key between the A side and B side, and check if the shared keys are the same.

    The function sampleEcsm2KeyExPerformOp provisions parts of the example @@ -2044,80 +2042,80 @@

    SM2 Key ExchangecpaCyEcsm2KeyExPhase2 for the A side and B side separately.

    -
    status = OS_MALLOC(&pCpaEcsm2KeyExPhase1AOpData, sizeof(CpaCyEcsm2KeyExPhase1OpData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1AOpData->r.pData, sizeof(rA));
    -
    -status = OS_MALLOC(&pCpaEcsm2KeyExPhase1BOpData, sizeof(CpaCyEcsm2KeyExPhase1OpData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1BOpData->r.pData, sizeof(rB));
    -
    -status = OS_MALLOC(&pCpaEcsm2KeyExPhase1AOutputData, sizeof(CpaCyEcsm2KeyExOutputData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1AOutputData->x.pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1AOutputData->y.pData, GFP_SM2_SIZE_IN_BYTE);
    -
    -status = OS_MALLOC(&pCpaEcsm2KeyExPhase1BOutputData, sizeof(CpaCyEcsm2KeyExOutputData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1BOutputData->x.pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1BOutputData->y.pData, GFP_SM2_SIZE_IN_BYTE);
    -
    -status = cpaCyEcsm2KeyExPhase1(
    -    cyInstHandle,
    -    (const CpaCyGenFlatBufCbFunc)
    -    asymKeyExPhase1Callback, /* CB function*/
    -    pCallbackTag, /* Opaque user data */
    -    pCpaEcsm2KeyExPhase1AOpData, /* Key exchange p1 request data */
    -    pCpaEcsm2KeyExPhase1AOutputData); /* Key exchange p1 response data */
    -
    -status = cpaCyEcsm2KeyExPhase1(
    -    cyInstHandle,
    -    (const CpaCyGenFlatBufCbFunc)
    -    asymKeyExPhase1Callback, /* CB function*/
    -    pCallbackTag, /* Opaque user data */
    -    pCpaEcsm2KeyExPhase1BOpData, /* Key exchange p1 request data */
    -    pCpaEcsm2KeyExPhase1BOutputData); /* Key exchange p1 request data */
    -
    -status = OS_MALLOC(&pCpaEcsm2KeyExPhase2AOpData, sizeof(CpaCyEcsm2KeyExPhase2OpData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->r.pData, sizeof(rA));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->d.pData, sizeof(dA));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->x1.pData, pCpaEcsm2KeyExPhase2AOpData->x1.dataLenInBytes);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->x2.pData, pCpaEcsm2KeyExPhase1BOutputData->x.dataLenInBytes);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->y2.pData, pCpaEcsm2KeyExPhase1BOutputData->y.dataLenInBytes);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->xP.pData, sizeof(xPB));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->yP.pData, sizeof(yPB));
    -
    -status = OS_MALLOC(&pCpaEcsm2KeyExPhase2BOpData, sizeof(CpaCyEcsm2KeyExPhase2OpData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->r.pData, sizeof(rB));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->d.pData, sizeof(dB));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->x1.pData, pCpaEcsm2KeyExPhase2BOpData->x1.dataLenInBytes);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->x2.pData, pCpaEcsm2KeyExPhase1AOutputData->x.dataLenInBytes);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->y2.pData, pCpaEcsm2KeyExPhase1AOutputData->y.dataLenInBytes);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->xP.pData, sizeof(xPA));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->yP.pData, sizeof(yPA));
    -
    -status = OS_MALLOC(&pCpaEcsm2KeyExPhase2AOutputData, sizeof(CpaCyEcsm2KeyExOutputData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOutputData->x.pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOutputData->y.pData, GFP_SM2_SIZE_IN_BYTE);
    -
    -status = OS_MALLOC(&pCpaEcsm2KeyExPhase2BOutputData, sizeof(CpaCyEcsm2KeyExOutputData));
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOutputData->x.pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOutputData->y.pData, GFP_SM2_SIZE_IN_BYTE);
    -
    -status = cpaCyEcsm2KeyExPhase2(
    -    cyInstHandle,
    -    (const CpaCyGenFlatBufCbFunc)asymKeyExPhase2Callback,
    -    pCallbackTag, /* Opaque user data; */
    -    pCpaEcsm2KeyExPhase2AOpData, /* Key exchange p2 request data, containing r,d,x1,x2,y2,xp,yp */
    -    pCpaEcsm2KeyExPhase2AOutputData); /* Key exchange p2 response data */
    -
    -status = cpaCyEcsm2KeyExPhase2(
    -    cyInstHandle,
    -    (const CpaCyGenFlatBufCbFunc)asymKeyExPhase2Callback,
    -    pCallbackTag, /* Opaque user data */
    -    pCpaEcsm2KeyExPhase2BOpData, /* Key exchange p2 request data containing r,d,x1,y1,x2,y2,xp,yp */
    -    pCpaEcsm2KeyExPhase2BOutputData); /* Key exchange p2 response data */
    +
    status = OS_MALLOC(&pCpaEcsm2KeyExPhase1AOpData, sizeof(CpaCyEcsm2KeyExPhase1OpData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1AOpData->r.pData, sizeof(rA));
    +
    +status = OS_MALLOC(&pCpaEcsm2KeyExPhase1BOpData, sizeof(CpaCyEcsm2KeyExPhase1OpData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1BOpData->r.pData, sizeof(rB));
    +
    +status = OS_MALLOC(&pCpaEcsm2KeyExPhase1AOutputData, sizeof(CpaCyEcsm2KeyExOutputData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1AOutputData->x.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1AOutputData->y.pData, GFP_SM2_SIZE_IN_BYTE);
    +
    +status = OS_MALLOC(&pCpaEcsm2KeyExPhase1BOutputData, sizeof(CpaCyEcsm2KeyExOutputData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1BOutputData->x.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase1BOutputData->y.pData, GFP_SM2_SIZE_IN_BYTE);
    +
    +status = cpaCyEcsm2KeyExPhase1(
    +    cyInstHandle,
    +    (const CpaCyGenFlatBufCbFunc)
    +    asymKeyExPhase1Callback, /* CB function*/
    +    pCallbackTag, /* Opaque user data */
    +    pCpaEcsm2KeyExPhase1AOpData, /* Key exchange p1 request data */
    +    pCpaEcsm2KeyExPhase1AOutputData); /* Key exchange p1 response data */
    +
    +status = cpaCyEcsm2KeyExPhase1(
    +    cyInstHandle,
    +    (const CpaCyGenFlatBufCbFunc)
    +    asymKeyExPhase1Callback, /* CB function*/
    +    pCallbackTag, /* Opaque user data */
    +    pCpaEcsm2KeyExPhase1BOpData, /* Key exchange p1 request data */
    +    pCpaEcsm2KeyExPhase1BOutputData); /* Key exchange p1 request data */
    +
    +status = OS_MALLOC(&pCpaEcsm2KeyExPhase2AOpData, sizeof(CpaCyEcsm2KeyExPhase2OpData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->r.pData, sizeof(rA));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->d.pData, sizeof(dA));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->x1.pData, pCpaEcsm2KeyExPhase2AOpData->x1.dataLenInBytes);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->x2.pData, pCpaEcsm2KeyExPhase1BOutputData->x.dataLenInBytes);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->y2.pData, pCpaEcsm2KeyExPhase1BOutputData->y.dataLenInBytes);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->xP.pData, sizeof(xPB));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOpData->yP.pData, sizeof(yPB));
    +
    +status = OS_MALLOC(&pCpaEcsm2KeyExPhase2BOpData, sizeof(CpaCyEcsm2KeyExPhase2OpData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->r.pData, sizeof(rB));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->d.pData, sizeof(dB));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->x1.pData, pCpaEcsm2KeyExPhase2BOpData->x1.dataLenInBytes);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->x2.pData, pCpaEcsm2KeyExPhase1AOutputData->x.dataLenInBytes);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->y2.pData, pCpaEcsm2KeyExPhase1AOutputData->y.dataLenInBytes);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->xP.pData, sizeof(xPA));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOpData->yP.pData, sizeof(yPA));
    +
    +status = OS_MALLOC(&pCpaEcsm2KeyExPhase2AOutputData, sizeof(CpaCyEcsm2KeyExOutputData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOutputData->x.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2AOutputData->y.pData, GFP_SM2_SIZE_IN_BYTE);
    +
    +status = OS_MALLOC(&pCpaEcsm2KeyExPhase2BOutputData, sizeof(CpaCyEcsm2KeyExOutputData));
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOutputData->x.pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pCpaEcsm2KeyExPhase2BOutputData->y.pData, GFP_SM2_SIZE_IN_BYTE);
    +
    +status = cpaCyEcsm2KeyExPhase2(
    +    cyInstHandle,
    +    (const CpaCyGenFlatBufCbFunc)asymKeyExPhase2Callback,
    +    pCallbackTag, /* Opaque user data; */
    +    pCpaEcsm2KeyExPhase2AOpData, /* Key exchange p2 request data, containing r,d,x1,x2,y2,xp,yp */
    +    pCpaEcsm2KeyExPhase2AOutputData); /* Key exchange p2 response data */
    +
    +status = cpaCyEcsm2KeyExPhase2(
    +    cyInstHandle,
    +    (const CpaCyGenFlatBufCbFunc)asymKeyExPhase2Callback,
    +    pCallbackTag, /* Opaque user data */
    +    pCpaEcsm2KeyExPhase2BOpData, /* Key exchange p2 request data containing r,d,x1,y1,x2,y2,xp,yp */
    +    pCpaEcsm2KeyExPhase2BOutputData); /* Key exchange p2 response data */
     

    -

    SM2 Elliptic Curve Point

    +

    SM2 Elliptic Curve Point

    This operation is to calculate a point on the curve according to a given random number and verify if the point (x,y) is on the curve or not.

    The function sampleEcsm2PointMultiply provisions parts of the example @@ -2131,25 +2129,25 @@

    SM2 Elliptic Curve PointpYk.

  • Call function cpaCyEcsm2PointMultiply for point multiply operation.

  • -
    status = OS_MALLOC(&opData, sizeof(CpaCyEcsm2PointMultiplyOpData));
    -status = PHYS_CONTIG_ALLOC(&opData->k.pData, sizeof(k));
    -status = PHYS_CONTIG_ALLOC(&opData->x.pData, sizeof(xP));
    -status = PHYS_CONTIG_ALLOC(&opData->y.pData, sizeof(yP));
    -
    -status = OS_MALLOC(&pXk, sizeof(CpaFlatBuffer));
    -status = OS_MALLOC(&pYk, sizeof(CpaFlatBuffer));
    -status = PHYS_CONTIG_ALLOC(&pXk->pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pYk->pData, GFP_SM2_SIZE_IN_BYTE);
    -
    -status = cpaCyEcsm2PointMultiply(
    -    cyInstHandle,
    -    (const CpaCyEcPointMultiplyCbFunc)
    -    asymPointMultCallback, /* CB function*/
    -    pCallbackTag, /* Opaque user data; */
    -    opData, /* Point multiplication request data */
    -    &multiplyStatus,
    -    pXk, /* Point multiplication response data */
    -    pYk); /* Point multiplication response data */
    +
    status = OS_MALLOC(&opData, sizeof(CpaCyEcsm2PointMultiplyOpData));
    +status = PHYS_CONTIG_ALLOC(&opData->k.pData, sizeof(k));
    +status = PHYS_CONTIG_ALLOC(&opData->x.pData, sizeof(xP));
    +status = PHYS_CONTIG_ALLOC(&opData->y.pData, sizeof(yP));
    +
    +status = OS_MALLOC(&pXk, sizeof(CpaFlatBuffer));
    +status = OS_MALLOC(&pYk, sizeof(CpaFlatBuffer));
    +status = PHYS_CONTIG_ALLOC(&pXk->pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pYk->pData, GFP_SM2_SIZE_IN_BYTE);
    +
    +status = cpaCyEcsm2PointMultiply(
    +    cyInstHandle,
    +    (const CpaCyEcPointMultiplyCbFunc)
    +    asymPointMultCallback, /* CB function*/
    +    pCallbackTag, /* Opaque user data; */
    +    opData, /* Point multiplication request data */
    +    &multiplyStatus,
    +    pXk, /* Point multiplication response data */
    +    pYk); /* Point multiplication response data */
     

    The function sampleEcsm2GeneratortMultiply provisions parts of the example @@ -2163,22 +2161,22 @@

    SM2 Elliptic Curve PointcpaCyEcsm2GeneratorMultiply for generator multiply operation.

    -
    status = OS_MALLOC(&opData, sizeof(CpaCyEcsm2GeneratorMultiplyOpData));
    -status = PHYS_CONTIG_ALLOC(&opData->k.pData, sizeof(k));
    +
    status = OS_MALLOC(&opData, sizeof(CpaCyEcsm2GeneratorMultiplyOpData));
    +status = PHYS_CONTIG_ALLOC(&opData->k.pData, sizeof(k));
     
    -status = OS_MALLOC(&pXk, sizeof(CpaFlatBuffer));
    -status = OS_MALLOC(&pYk, sizeof(CpaFlatBuffer));
    -status = PHYS_CONTIG_ALLOC(&pXk->pData, GFP_SM2_SIZE_IN_BYTE);
    -status = PHYS_CONTIG_ALLOC(&pYk->pData, GFP_SM2_SIZE_IN_BYTE);
    +status = OS_MALLOC(&pXk, sizeof(CpaFlatBuffer));
    +status = OS_MALLOC(&pYk, sizeof(CpaFlatBuffer));
    +status = PHYS_CONTIG_ALLOC(&pXk->pData, GFP_SM2_SIZE_IN_BYTE);
    +status = PHYS_CONTIG_ALLOC(&pYk->pData, GFP_SM2_SIZE_IN_BYTE);
     
    -status = cpaCyEcsm2GeneratorMultiply(
    -    cyInstHandle,
    -    (const CpaCyEcPointMultiplyCbFunc) asymGeneratorMultCallback, /* CB function*/
    -    pCallbackTag, /* Opaque user data; */
    -    opData, /* Generator multiplication request data */
    -    &multiplyStatus,
    -    pXk, /* Generator multiplication response data */
    -    pYk); /* Generator multiplication response data */
    +status = cpaCyEcsm2GeneratorMultiply(
    +    cyInstHandle,
    +    (const CpaCyEcPointMultiplyCbFunc) asymGeneratorMultCallback, /* CB function*/
    +    pCallbackTag, /* Opaque user data; */
    +    opData, /* Generator multiplication request data */
    +    &multiplyStatus,
    +    pXk, /* Generator multiplication response data */
    +    pYk); /* Generator multiplication response data */
     

    The function sampleEcsm2PointVerify provisions parts of the example implementation, @@ -2189,16 +2187,16 @@

    SM2 Elliptic Curve Pointy.

  • Call the function cpaCyEcsm2PointVerify for EC point verification.

  • -
    status = OS_MALLOC(&opData, sizeof(CpaCyEcsm2PointVerifyOpData));
    -status = PHYS_CONTIG_ALLOC(&opData->x.pData, sizeof(x));
    -status = PHYS_CONTIG_ALLOC(&opData->y.pData, sizeof(y));
    -
    -status = cpaCyEcsm2PointVerify(
    -    cyInstHandle,
    -    (const CpaCyEcPointVerifyCbFunc) asymPointVerifyCallback, /* CB function*/
    -    pCallbackTag, /* Opaque user data */
    -    opData, /* Point verify request data */
    -    &verifyStatus);
    +
    status = OS_MALLOC(&opData, sizeof(CpaCyEcsm2PointVerifyOpData));
    +status = PHYS_CONTIG_ALLOC(&opData->x.pData, sizeof(x));
    +status = PHYS_CONTIG_ALLOC(&opData->y.pData, sizeof(y));
    +
    +status = cpaCyEcsm2PointVerify(
    +    cyInstHandle,
    +    (const CpaCyEcPointVerifyCbFunc) asymPointVerifyCallback, /* CB function*/
    +    pCallbackTag, /* Opaque user data */
    +    opData, /* Point verify request data */
    +    &verifyStatus);
     

    Finally, statistics are queried and the service stopped.

    diff --git a/docs/API_PG/baseAPI.html b/docs/API_PG/baseAPI.html index 27f2238..cc36c57 100644 --- a/docs/API_PG/baseAPI.html +++ b/docs/API_PG/baseAPI.html @@ -1,7 +1,7 @@ - + Base API and API Conventions — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -96,9 +94,9 @@
    @@ -108,15 +106,15 @@
    -

    Base API and API Conventions

    +

    Base API and API Conventions

    This section describes aspects common to all Intel® QuickAssist Technology APIs, starting with the base API and followed by conventions.

    -

    Intel® QAT Base API

    +

    Intel® QAT Base API

    The base API is a top-level API definition for Intel® QuickAssist Technology. It contains structures, data types, and definitions that are common across the interface.

    -

    Data Buffer Models

    +

    Data Buffer Models

    Data buffers are passed across the API interface in one of the following formats:

    • Flat Buffers represent a single region of physically contiguous memory and are @@ -132,7 +130,7 @@

      Data Buffer Models -

      Flat Buffers

      +

      Flat Buffers

      Flat buffers are represented by the type CpaFlatBuffer, defined in the file cpa.h. It consists of two fields:

        @@ -152,7 +150,7 @@

        Data Buffer Models -

        Scatter-Gather Lists

        +

        Scatter-Gather Lists

        A scatter-gather list is defined by the type CpaBufferList, also defined in the file cpa.h. This buffer structure is typically used where more than one flat buffer can be provided to a particular API. @@ -195,9 +193,9 @@

        Data Buffer Models -

        Intel® QAT API Conventions

        +

        Intel® QAT API Conventions

        -

        Instance Discovery

        +

        Instance Discovery

        The Intel® QAT API supports multiple instances. An instance represents a “channel” to a specific hardware accelerator. Multiple instances can access the same hardware accelerator (that is, the relationship between @@ -211,29 +209,29 @@

        Intel® QAT API Conventionsdc instances available to the application is queried via the cpaDcGetNumInstances call. The application obtains the instance handle of the first instance.

        -
        void sampleDcGetInstance (CpaInstanceHandle *pDcInstHandle)
        -{
        -    CpaInstanceHandle dcInstHandles[MAX_INSTANCES];
        -    Cpa16U numInstances = 0;
        -    CpaStatus status = CPA_STATUS_SUCCESS;
        +
        void sampleDcGetInstance (CpaInstanceHandle *pDcInstHandle)
        +{
        +    CpaInstanceHandle dcInstHandles[MAX_INSTANCES];
        +    Cpa16U numInstances = 0;
        +    CpaStatus status = CPA_STATUS_SUCCESS;
         
        -    *pDcInstHandle = NULL;
        +    *pDcInstHandle = NULL;
         
        -    status = cpaDcGetNumInstances(&numInstances);
        +    status = cpaDcGetNumInstances(&numInstances);
         
        -    if ((status == CPA_STATUS_SUCCESS) && (numInstances > 0)) {
        -        status = cpaDcGetInstances(MAX_INSTANCES, dcInstHandles);
        -        if (status == CPA_STATUS_SUCCESS) {
        -            *pDcInstHandle = dcInstHandles[0];
        -        }
        -    }
        +    if ((status == CPA_STATUS_SUCCESS) && (numInstances > 0)) {
        +        status = cpaDcGetInstances(MAX_INSTANCES, dcInstHandles);
        +        if (status == CPA_STATUS_SUCCESS) {
        +            *pDcInstHandle = dcInstHandles[0];
        +        }
        +    }
         
        -    if (0 == numInstances) {
        -        PRINT_ERR("No instances found for 'SSL'\n");
        -        PRINT_ERR("Please check your section names in the config file.\n");
        -        PRINT_ERR("Also make sure to use config file version 2.\n");
        -    }
        -}
        +    if (0 == numInstances) {
        +        PRINT_ERR("No instances found for 'SSL'\n");
        +        PRINT_ERR("Please check your section names in the config file.\n");
        +        PRINT_ERR("Also make sure to use config file version 2.\n");
        +    }
        +}
         

        The next example shows the application querying the capabilities of the data @@ -242,29 +240,29 @@

        Intel® QAT API Conventions
        status = cpaDcQueryCapabilities(dcInstHandle, &cap);
        +
        status = cpaDcQueryCapabilities(dcInstHandle, &cap);
         
        -if (status != CPA_STATUS_SUCCESS) {
        -    return status;
        -}
        +if (status != CPA_STATUS_SUCCESS) {
        +    return status;
        +}
         
        -if (!cap.statelessDeflateCompression || !cap.statefulDeflateDecompression || !cap.checksumCRC32 || !cap.dynamicHuffman) {
        -    PRINT_ERR("Error: Unsupported functionality\n");
        -    return CPA_STATUS_FAIL;
        -}
        +if (!cap.statelessDeflateCompression || !cap.statefulDeflateDecompression || !cap.checksumCRC32 || !cap.dynamicHuffman) {
        +    PRINT_ERR("Error: Unsupported functionality\n");
        +    return CPA_STATUS_FAIL;
        +}
         
         /*
         * Set the address translation function for the instance
        -*/
        -status = cpaDcSetAddressTranslation(dcInstHandle, sampleVirtToPhys);
        +*/
        +status = cpaDcSetAddressTranslation(dcInstHandle, sampleVirtToPhys);
         
        -if (CPA_STATUS_SUCCESS == status) {
        +if (CPA_STATUS_SUCCESS == status) {
             /* Start DataCompression component
             * In this example we are performing static compression so
        -    * an intermediate buffer is not required */
        -    PRINT_DBG("cpaDcStartInstance\n");
        -    status = cpaDcStartInstance(dcInstHandle, 0, NULL);
        -}
        +    * an intermediate buffer is not required */
        +    PRINT_DBG("cpaDcStartInstance\n");
        +    status = cpaDcStartInstance(dcInstHandle, 0, NULL);
        +}
         

        In the example, the application requires stateless deflate compression with dynamic @@ -274,7 +272,7 @@

        Intel® QAT API Conventions -

        Modes of Operation

        +

        Modes of Operation

        The Intel® QAT API supports both synchronous and asynchronous modes of operation. For optimal performance, the application should be capable of submitting multiple outstanding requests to the acceleration engines. Submitting multiple outstanding @@ -284,7 +282,7 @@

        Modes of Operation -

        Asynchonous Operation

        +

        Asynchonous Operation

        To invoke the API asynchronously, the user supplies a callback function to the API, as shown in the below figure. Control returns to the client once the request has been sent to the hardware accelerator, and the callback is invoked when the engine completes the @@ -299,7 +297,7 @@

        Asynchonous Operation

        -

        Synchronous Operation

        +

        Synchronous Operation

        Synchronous operation is specified by supplying a NULL function pointer in the callback parameter of the perform API, as shown in the below figure. In this case, the function does not return until the operation is complete. The calling thread may spend on a @@ -315,7 +313,7 @@

        Synchronous Operation

        -

        Memory Allocation and Ownership

        +

        Memory Allocation and Ownership

        The convention is that all memory needed by an API implementation is allocated outside of that implementation. In other words, the APIs are defined such that the memory needed to execute operations is supplied by a client or platform control entity @@ -334,7 +332,7 @@

        Memory Allocation and Ownership -

        Data Plane APIs

        +

        Data Plane APIs

        The Intel® QAT APIs for symmetric cryptography and for data compression supports both traditional (cpa_cy_sym.h and cpa_dc.h) and data plane APIs (cpa_cy_sym_dp.h and cpa_dc_dp.h).

        diff --git a/docs/API_PG/index.html b/docs/API_PG/index.html index 2a0975a..984dbce 100644 --- a/docs/API_PG/index.html +++ b/docs/API_PG/index.html @@ -1,7 +1,7 @@ - + API Programmer’s Guide — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -83,8 +81,8 @@
          -
        • - +
        • »
        • +
        • API Programmer’s Guide
        @@ -94,7 +92,7 @@
        -

        API Programmer’s Guide

        +

        API Programmer’s Guide

        • Introduction
            diff --git a/docs/API_PG/introduction.html b/docs/API_PG/introduction.html index de93e1c..c3936f7 100644 --- a/docs/API_PG/introduction.html +++ b/docs/API_PG/introduction.html @@ -1,7 +1,7 @@ - + Introduction — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -89,9 +87,9 @@
            @@ -101,17 +99,17 @@
            -

            Introduction

            +

            Introduction

            This API Programmer’s Guide describes the sample code that demonstrates how to use the Intel® QuickAssist Technology (Intel® QAT) APIs.

            -

            Intended Audience

            +

            Intended Audience

            This document is intended to be used by software engineers who wish to develop application software that uses the Intel® QAT APIs to accelerate the supported workloads and/or services.

            -

            icp_sal_userStop

            +

            icp_sal_userStop

            Closes user space access to the Intel® QAT Endpoint; stops the services that were running and frees the allocated resources. After a successful call to this function, user space access to the Intel® QAT Endpoint from a calling process is not possible. This function should be called once when the process is finished using the Intel® QAT Endpoint and does not intend to use it again.

            @@ -199,7 +197,7 @@

            None

            Return Value

            The icp_sal_userStop function returns one of the following codes:

            - +
            diff --git a/docs/PG/apis_additional_versioninformationfunctions.html b/docs/PG/apis_additional_versioninformationfunctions.html index 2a2b611..15293a3 100644 --- a/docs/PG/apis_additional_versioninformationfunctions.html +++ b/docs/PG/apis_additional_versioninformationfunctions.html @@ -1,7 +1,7 @@ - + Version Information Function — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -107,11 +105,11 @@
            @@ -121,11 +119,11 @@
            -

            Version Information Function

            +

            Version Information Function

            A function that allows the retrieval of version information related to the software and hardware being used.

            The version information function definition is located in: $ICP_ROOT/quickassist/lookaside/access_layer/include/icp_sal_versions.h.

            -

            icp_sal_getDevVersionInfo

            +

            icp_sal_getDevVersionInfo

            Retrieves the hardware revision and information on the version of the software components being run on a given device.

            +
            @@ -150,7 +148,7 @@

            icp_sal_getDevVersionInfoicp_sal_getDevVersionInfo function returns one of the following codes:

            -

            +
            diff --git a/docs/PG/apis_index.html b/docs/PG/apis_index.html index 93cdea7..2ec32db 100644 --- a/docs/PG/apis_index.html +++ b/docs/PG/apis_index.html @@ -1,7 +1,7 @@ - + Supported APIs — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -92,9 +90,9 @@
            @@ -104,7 +102,7 @@
            -

            Supported APIs

            +

            Supported APIs

            The supported APIs are classified in two categories:

            ---- diff --git a/docs/PG/architecture.html b/docs/PG/architecture.html index cfce117..acebc97 100644 --- a/docs/PG/architecture.html +++ b/docs/PG/architecture.html @@ -1,7 +1,7 @@ - + Architecture — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -88,9 +86,9 @@
            @@ -100,7 +98,7 @@
            -

            Architecture

            +

            Architecture

            Because the hardware is accessed via the Intel® QAT APIs, it is not necessary to know all of the hardware and software architecture details, but some knowledge of the underlying hardware and software is helpful for performance optimization and debug purposes.

            A simplified view of the hardware/software stack is shown in the following figure.

            diff --git a/docs/PG/configuration_files_generalsection.html b/docs/PG/configuration_files_generalsection.html index b4ae0f9..21d2d85 100644 --- a/docs/PG/configuration_files_generalsection.html +++ b/docs/PG/configuration_files_generalsection.html @@ -1,7 +1,7 @@ - + General Section — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -104,10 +102,10 @@
            @@ -117,14 +115,14 @@
            -

            General Section

            +

            General Section

            The general section of the configuration file contains general parameters and statistics parameters.

            Note

            Default denotes the value in the configuration file when shipped or the value used if not specified in the configuration file.

            This table describes the other parameters that can be included in the General section.

            -
            Key Generation Cryptographic API Limitations

            Secure Sockets Layer (SSL) key generation op-data:

            Maximum secret length is 512 bytes

            +
            @@ -222,7 +220,7 @@
            General Section Parameters
            -

            ServicesEnabled

            +

            ServicesEnabled

            Additional details on the ServicesEnabled parameter:

            -

            Performance Considerations

            +

            Performance Considerations

            Important

            The following is applicable to QAT2.0 devices only.

            @@ -250,7 +248,7 @@

            Performance Considerations -

            ServicesProfile

            +

            ServicesProfile

            -

            General Default Configuration Parameters

            +

            General Default Configuration Parameters

            ------- @@ -368,7 +359,7 @@

            General Default Configuration Parameters -

            Concurrent Requests

            +

            Concurrent Requests

            Additional details on the concurrent request parameters:

            • This parameter is valid for all QAT devices.

            • @@ -379,7 +370,7 @@

              Concurrent Requests -

              Power Management Parameters

              +

              Power Management Parameters

              Important

              This parameter is valid for QAT2.0 devices.

              @@ -394,7 +385,7 @@

              Power Management ParametersPower Management section for additional details.

              -

              Shared Virtual Memory (SVM) Parameters

              +

              Shared Virtual Memory (SVM) Parameters

              Important

              This parameter is valid for QAT2.0 devices.

              @@ -402,7 +393,7 @@

              Power Management Parameters/etc/4xxx_devX.conf where X is the 0-based index of the device.)

              -

              SVMEnabled

              +

              SVMEnabled

              When this flag is set in the driver configuration, it indicates that the guest virtual address (GVA) to host physical address (HPA) translation will use IOMMU hardware based translation table instead of using the software based address translation. With SVMEnabled set, it is not required to submit buffers that are physically contiguous.

              @@ -414,7 +405,7 @@

              SVMEnabled -

              ATEnabled

              +

              ATEnabled

              When this flag is set in the driver configuration, the Address Translation Service (ATS) is enabled. IOMMU and QAT have the ability to handle page faults using Page Request Service (PRS) when using dynamic virtual memory allocated by systemcall such as malloc.

              diff --git a/docs/PG/configuration_files_index.html b/docs/PG/configuration_files_index.html index f29d90f..1a1e2b7 100644 --- a/docs/PG/configuration_files_index.html +++ b/docs/PG/configuration_files_index.html @@ -1,7 +1,7 @@ - + Configuration Files — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -97,9 +95,9 @@
              @@ -109,7 +107,7 @@
              -

              Configuration Files

              +

              Configuration Files

              This section describes the configuration file(s) that allows customization of runtime operation. The configuration file(s) must be tuned to meet the performance needs of the target application. There is a single configuration file for each Intel® QAT Endpoint in the system.

              diff --git a/docs/PG/configuration_files_logicalsection.html b/docs/PG/configuration_files_logicalsection.html index 960f2cb..cdc2ef9 100644 --- a/docs/PG/configuration_files_logicalsection.html +++ b/docs/PG/configuration_files_logicalsection.html @@ -1,7 +1,7 @@ - + Logical Instances Section — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -104,10 +102,10 @@
              @@ -117,7 +115,7 @@
              -

              Logical Instances Section

              +

              Logical Instances Section

              This section allows the configuration of logical instances in each address domain (kernel space and individual user space processes).

              The address domains are in the following format:

                @@ -136,14 +134,14 @@
              • The core to which the instance is affinitized (optional).

              -

              [KERNEL] Section

              +

              [KERNEL] Section

              In the [KERNEL] section of the configuration file, information about the number and type of kernel instances can be defined. This table describes the parameters that determine the number of kernel instances for each service.

              Note

              The maximum number of cryptographic and data compression instances supported per Intel® QAT Endpoint is 32. For exceptions refer to Increasing the Maximum Number of Processes/Instances.

              -

            General Default Configuration Parameters

            Service

            DEFAULT

            +
            @@ -177,7 +175,7 @@

            [KERNEL] Section -

            User Process [xxxxx] Sections

            +

            User Process [xxxxx] Sections

            There is one [xxxxx] section of the configuration file for each Intel® QAT Endpoint to be configured. In each [xxxxx] section of the configuration file, user space access to the Intel® QAT Endpoint can be configured. Parameters for each user process instance can also be defined. Common names for this section are [SSL] or [SHIM]

            @@ -186,7 +184,7 @@

            User Process [xxxxx] Sections +

            [KERNEL] Section Parameters
            @@ -239,13 +237,13 @@

            User Process [xxxxx] Sections -

            Cryptographic Logical Instance Parameters

            +

            Cryptographic Logical Instance Parameters

            The following table shows the parameters that can be set for cryptographic logical instances.

            Note

            Default denotes the value in the configuration file when shipped.

            -
            [User Process] Section Parameters
            +
            @@ -286,9 +284,9 @@

            Cryptographic Logical Instance Parameters -

            Data Compression Logical Instance Parameters

            +

            Data Compression Logical Instance Parameters

            This table shows the parameters in the configuration file that can be set for data compression logical instances.

            -
            Cryptographic Logical Instance Parameters
            +
            @@ -335,7 +333,7 @@

            Data Compression Logical Instance Parameters -

            Setting the Core Affinity Parameter for a Logical Instance

            +

            Setting the Core Affinity Parameter for a Logical Instance

            When instances are configured with IsPolled = 1 (Polling mode), the parameter CoreAffinity does not have any impact.

            Although not used, it is a valid parameter and applications can query the value using cpaCyInstanceGetInfo2 (see coreAffinity bitmask in CpaInstanceInfo2). For example, the sample code affinitizes the thread that uses an instance to the core indicated in CoreAffinity the config file for that instance.

            For instances configured in Interrupt Mode (IsPolled = 2 in user space (epoll) and IsPolled = 0 in kernel space), the value of CoreAffinity is used to affinitize the interrupt handler to that core.

            diff --git a/docs/PG/configuration_files_maxprocesscalculations.html b/docs/PG/configuration_files_maxprocesscalculations.html index 330cfc0..ddde3b5 100644 --- a/docs/PG/configuration_files_maxprocesscalculations.html +++ b/docs/PG/configuration_files_maxprocesscalculations.html @@ -1,7 +1,7 @@ - + Maximum Number of Process Calculations — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -100,10 +98,10 @@
            @@ -113,7 +111,7 @@
            -

            Maximum Number of Process Calculations

            +

            Maximum Number of Process Calculations

            The NumProcesses parameter is the number of user space processes per service within the [xxxx] section domain with access to this Intel® QAT Endpoint.

            The value to which this parameter can be set is determined by a number of factors including the number of cryptography instances and/or data compression instances in the process section along with ServicesEnabled and potentially ServicesProfile. The total number of processes, per service, @@ -123,7 +121,7 @@

            The maximum number of processes that can be supported is dependant upon the underlying hardware.

            -

            Increasing the Maximum Number of Processes/Instances

            +

            Increasing the Maximum Number of Processes/Instances

            Note

              @@ -141,12 +139,6 @@
            Data Compression Logical Instance Parameters
            ------ @@ -193,7 +185,7 @@
            Configuration Variations

            ServicesEnabled

            QAT 1.7x

            -

            Invalid Configurations

            +

            Invalid Configurations

            If maximum number of processes is exceeded, the acceleration software will fail to load. The error message will be similiar to:

            service qat_service restart qat_dev0
             
            @@ -214,7 +206,7 @@

            Invalid Configurations

            -

            Configuring Instances for Virtual Functions

            +

            Configuring Instances for Virtual Functions

            To configure the number of instances for a virtual function:

            1. Install the driver package on the host with SR-IOV enabled.

            2. @@ -235,10 +227,6 @@

              Configuring Instances for Virtual Functions Configuring Physical Functions and Virtual Functions - - - -

              Configured PF Service

              Available VF Services

              diff --git a/docs/PG/configuration_files_multipleendpoints.html b/docs/PG/configuration_files_multipleendpoints.html index 56ed35c..7e7f861 100644 --- a/docs/PG/configuration_files_multipleendpoints.html +++ b/docs/PG/configuration_files_multipleendpoints.html @@ -1,7 +1,7 @@ - + Configuring Multiple Intel® QuickAssist Technology Endpoints in a System — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -97,10 +95,10 @@
              @@ -110,7 +108,7 @@
              -

              Configuring Multiple Intel® QuickAssist Technology Endpoints in a System

              +

              Configuring Multiple Intel® QuickAssist Technology Endpoints in a System

              A platform may include more than one Intel® QAT Endpoint. Each device must have its own configuration file. When the acceleration software is installed, default configuration files are installed to the /etc folder. The format and structure of the configuration file is exactly the same for all devices.

              diff --git a/docs/PG/configuration_files_multipleprocesses.html b/docs/PG/configuration_files_multipleprocesses.html index 07b9148..1c598b1 100644 --- a/docs/PG/configuration_files_multipleprocesses.html +++ b/docs/PG/configuration_files_multipleprocesses.html @@ -1,7 +1,7 @@ - + Configuring Multiple Processes on a System with Multiple Intel® QAT Endpoints — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -97,10 +95,10 @@
              @@ -110,7 +108,7 @@
              -

              Configuring Multiple Processes on a System with Multiple Intel® QAT Endpoints

              +

              Configuring Multiple Processes on a System with Multiple Intel® QAT Endpoints

              As an example, consider a system with two Intel® QAT Endpoints where it is necessary to configure two user space sections. One section is identified as SSL and the other is identified as Internet Protocol Security (IPSec).

                @@ -119,83 +117,83 @@

              In this scenario, the user space section of the configuration file would look like the following for the first Intel® QAT Endpoint.

              -
              [SSL] #User space section name
              -NumProcesses=4 # There are 4 user space process with section name SSL with access to this device
              -LimitDevAccess=1 # These 4 SSL user space processes only use this device
              -NumCyInstances=1 # Each process has access to 1 Cy instance on this device
              -NumDcInstances=0 # Each process has access to 0 Dc instances on this device
              +
              [SSL] #User space section name
              +NumProcesses=4 # There are 4 user space process with section name SSL with access to this device
              +LimitDevAccess=1 # These 4 SSL user space processes only use this device
              +NumCyInstances=1 # Each process has access to 1 Cy instance on this device
              +NumDcInstances=0 # Each process has access to 0 Dc instances on this device
               
               # Crypto - User instance #0
              -Cy0Name = "SSL0"
              -Cy0IsPolled = 1
              -Cy0CoreAffinity = 0 # Core affinity not used for polled instance
              +Cy0Name = "SSL0"
              +Cy0IsPolled = 1
              +Cy0CoreAffinity = 0 # Core affinity not used for polled instance
               
              -[IPsec] #User space section name
              -NumProcesses=1 # There is 1 user space process with section name IPSec with access to this device
              -LimitDevAccess=0 # This IPSec user space process may have access to other devices
              -NumCyInstances=4 # The IPSec process has access to 4 Cy instances on this device
              -NumDcInstances=0 # The IPSec process has access to 0 Dc instances on this device
              +[IPsec] #User space section name
              +NumProcesses=1 # There is 1 user space process with section name IPSec with access to this device
              +LimitDevAccess=0 # This IPSec user space process may have access to other devices
              +NumCyInstances=4 # The IPSec process has access to 4 Cy instances on this device
              +NumDcInstances=0 # The IPSec process has access to 0 Dc instances on this device
               
               # Crypto - User instance #0
              -Cy0Name = "IPSec0"
              -Cy0IsPolled = 1
              -Cy0CoreAffinity = 0 # Core affinity not used for polled instance
              +Cy0Name = "IPSec0"
              +Cy0IsPolled = 1
              +Cy0CoreAffinity = 0 # Core affinity not used for polled instance
               # Crypto - User instance #1
               
              -Cy1Name = "IPSec1"
              -Cy1IsPolled = 1
              -Cy1CoreAffinity = 0 # Core affinity not used for polled instance
              +Cy1Name = "IPSec1"
              +Cy1IsPolled = 1
              +Cy1CoreAffinity = 0 # Core affinity not used for polled instance
               
               # Crypto - User instance #2
              -Cy2Name = "IPSec2"
              -Cy2IsPolled = 1
              -Cy2CoreAffinity = 0 # Core affinity not used for polled instance
              +Cy2Name = "IPSec2"
              +Cy2IsPolled = 1
              +Cy2CoreAffinity = 0 # Core affinity not used for polled instance
               
               # Crypto - User instance #3
              -Cy3Name = "IPSec3"
              -Cy3IsPolled = 1
              -Cy3CoreAffinity = 0 # Core affinity not used for polled instance
              +Cy3Name = "IPSec3"
              +Cy3IsPolled = 1
              +Cy3CoreAffinity = 0 # Core affinity not used for polled instance
               

              The second Intel® QAT Endpoint configuration looks like:

              -
              [SSL] #User space section name
              -NumProcesses=4 # There are 4 user space process with section name SSL with access to this device
              -LimitDevAccess=1 # These 4 SSL user space processes only use this device
              -NumCyInstances=1 # Each process has access to 1 Cy instance on this device
              -NumDcInstances=0 # Each process has access to 0 Dc instances on this device
              +
              [SSL] #User space section name
              +NumProcesses=4 # There are 4 user space process with section name SSL with access to this device
              +LimitDevAccess=1 # These 4 SSL user space processes only use this device
              +NumCyInstances=1 # Each process has access to 1 Cy instance on this device
              +NumDcInstances=0 # Each process has access to 0 Dc instances on this device
               
               # Crypto - User instance #0
              -Cy0Name = "SSL0"
              -Cy0IsPolled = 1
              -Cy0CoreAffinity = 0 # Core affinity not used for polled instance
              +Cy0Name = "SSL0"
              +Cy0IsPolled = 1
              +Cy0CoreAffinity = 0 # Core affinity not used for polled instance
               
              -[IPsec] #User space section name
              -NumProcesses=1 # There is 1 user space process with section name IPSec with access to this device
              -LimitDevAccess=0 # This IPSec user space process may have access to other devices
              -NumCyInstances=4 # The IPSec process has access to 4 Cy instances on this device
              -NumDcInstances=0 # The IPSec process has access to 0 Dc instances on this device
              +[IPsec] #User space section name
              +NumProcesses=1 # There is 1 user space process with section name IPSec with access to this device
              +LimitDevAccess=0 # This IPSec user space process may have access to other devices
              +NumCyInstances=4 # The IPSec process has access to 4 Cy instances on this device
              +NumDcInstances=0 # The IPSec process has access to 0 Dc instances on this device
               
               # Crypto - User instance #0
              -Cy0Name = "IPSec0"
              -Cy0IsPolled = 1
              -Cy0CoreAffinity = 0 # Core affinity not used for polled instance
              +Cy0Name = "IPSec0"
              +Cy0IsPolled = 1
              +Cy0CoreAffinity = 0 # Core affinity not used for polled instance
               
               # Crypto - User instance #1
              -Cy1Name = "IPSec1"
              -Cy1IsPolled = 1
              -Cy1CoreAffinity = 0 # Core affinity not used for polled instance
              +Cy1Name = "IPSec1"
              +Cy1IsPolled = 1
              +Cy1CoreAffinity = 0 # Core affinity not used for polled instance
               
               # Crypto - User instance #2
              -Cy2Name = "IPSec2"
              -Cy2IsPolled = 1
              -Cy2CoreAffinity = 0 # Core affinity not used for polled instance
              +Cy2Name = "IPSec2"
              +Cy2IsPolled = 1
              +Cy2CoreAffinity = 0 # Core affinity not used for polled instance
               
               # Crypto - User instance #3
              -Cy3Name = "IPSec3"
              -Cy3IsPolled = 1
              -Cy3CoreAffinity = 0 # Core affinity not used for polled instance
              +Cy3Name = "IPSec3"
              +Cy3IsPolled = 1
              +Cy3CoreAffinity = 0 # Core affinity not used for polled instance
               
              diff --git a/docs/PG/configuration_files_overview.html b/docs/PG/configuration_files_overview.html index c5d814f..e2feb7f 100644 --- a/docs/PG/configuration_files_overview.html +++ b/docs/PG/configuration_files_overview.html @@ -1,7 +1,7 @@ - + Configuration File Overview — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -97,10 +95,10 @@
              @@ -110,7 +108,7 @@
              -

              Configuration File Overview

              +

              Configuration File Overview

              There is a single configuration file for each Intel® QAT Endpoint and there may be multiple Intel® QAT Endpoints.

              Note

              diff --git a/docs/PG/configuration_files_samplefiles.html b/docs/PG/configuration_files_samplefiles.html index ff7c17b..002f424 100644 --- a/docs/PG/configuration_files_samplefiles.html +++ b/docs/PG/configuration_files_samplefiles.html @@ -1,7 +1,7 @@ - + Sample Configuration Files — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -97,10 +95,10 @@
              @@ -110,7 +108,7 @@
              -

              Sample Configuration Files

              +

              Sample Configuration Files

              Sample configuration files are available in quickassist/utilities/adf_ctl/conf_files. Depending on the product and configuration, one or more of these will be copied to /etc during the package installation.

              diff --git a/docs/PG/fused.html b/docs/PG/fused.html index 95edd98..d1a8242 100644 --- a/docs/PG/fused.html +++ b/docs/PG/fused.html @@ -1,7 +1,7 @@ - + Fused Operations — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -74,8 +72,8 @@
                -
              • - +
              • »
              • +
              • Fused Operations
              @@ -85,7 +83,7 @@
              -

              Fused Operations

              +

              Fused Operations

              diff --git a/docs/PG/index.html b/docs/PG/index.html index 515aabe..21f2c09 100644 --- a/docs/PG/index.html +++ b/docs/PG/index.html @@ -1,7 +1,7 @@ - + Programmer’s Guide — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -88,8 +86,8 @@
                -
              • - +
              • »
              • +
              • Programmer’s Guide
              @@ -99,7 +97,7 @@
              -

              Programmer’s Guide

              +

              Programmer’s Guide

              • About this Document
                  diff --git a/docs/PG/infrastructure_debugability.html b/docs/PG/infrastructure_debugability.html index d95bb45..c7c91d0 100644 --- a/docs/PG/infrastructure_debugability.html +++ b/docs/PG/infrastructure_debugability.html @@ -1,7 +1,7 @@ - + Debugability — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -104,10 +102,10 @@
                  @@ -117,14 +115,14 @@
                  -

                  Debugability

                  +

                  Debugability

                  -

                  Overview of Intel® QAT debugfs entries

                  +

                  Overview of Intel® QAT debugfs entries

                  Some useful debugging information for the driver and configuration is available via the Linux debugfs file system, with the entries /sys/kernel/debug/qat_* and /sys/kernel/debug/qae_mem_dbg/qae_mem_slabs .

                  -

                  Entries in /sys/kernel/debug/qat_*

                  +

                  Entries in /sys/kernel/debug/qat_*

                  This includes:

                  - +
                  @@ -178,19 +176,19 @@

                  Entries in /sys/kernel/debug/qat_* -

                  Memory driver queries ( qae_mem_slabs )

                  +

                  Memory driver queries ( qae_mem_slabs )

                  Debug features are also available by reading and writing the file /sys/kernel/debug/qae_mem_dbg/qae_mem_slabs . When reading the virtual/physical address, size and slab id together with the pid of the allocating process are shown. Writing a string to the file will start executing debug commands.

                  For example:

                  # cat /sys/kernel/debug/qae_mem_dbg/qae_mem_slabs
                  -Pid 78854, Slab Id 10550771712
                  -Virtual address 000000000b39412d, Physical Address 274e00000, Size 2097152
                  -Pid 78854, Slab Id 10309599232
                  -Virtual address 000000003670dd45, Physical Address 266800000, Size 2097152
                  +Pid 78854, Slab Id 10550771712
                  +Virtual address 000000000b39412d, Physical Address 274e00000, Size 2097152
                  +Pid 78854, Slab Id 10309599232
                  +Virtual address 000000003670dd45, Physical Address 266800000, Size 2097152
                   ...
                   

                  There are three commands supported, and the below table shows their output:

                  -
                  Intel® QuickAssist Technology /sys/kernel/debug Entries
                  +
                  @@ -216,7 +214,7 @@

                  Memory driver queries ( qae_mem_slabs )
                  # echo "t" > /sys/kernel/debug/qae_mem_dbg/qae_mem_slabs ; cat /sys/kernel/debug/qae_mem_dbg/qae_mem_slabs
                  -Total allocated NUMA memory: 142606336 bytes
                  +Total allocated NUMA memory: 142606336 bytes
                   

                  As above, the “d” and “c” commands will output their respective information.

                  diff --git a/docs/PG/infrastructure_device_telemetry.html b/docs/PG/infrastructure_device_telemetry.html index 9adf5b7..a206ff0 100644 --- a/docs/PG/infrastructure_device_telemetry.html +++ b/docs/PG/infrastructure_device_telemetry.html @@ -1,7 +1,7 @@ - + Telemetry — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -106,10 +104,10 @@
                  @@ -119,11 +117,11 @@
                  -

                  Telemetry

                  +

                  Telemetry

                  The telemetry feature is a tool to view the performance and utilization of an acceleration device. Telemetry data can be viewed on a per device and a per ring pair (also known as queue pair) basis.

                  -

                  Telemetry Usage

                  +

                  Telemetry Usage

                  The telemetry feature is configured and queried using sysfs files in the Linux filesystem.

                  The telemetry sysfs folder is located at /sys/devices/pciAAAA:BB/AAAA:BB:CC.D/telemetry where:

                  @@ -142,20 +140,16 @@

                  Telemetry Usage -

                  Telemetry Control

                  +

                  Telemetry Control

                  Device level telemetry is enabled by echoing 1 into the control file and disabled by echoing 0. Reading the control file will tell whether the feature is currently enabled or disabled.

                  Ring Pair level telemetry is enabled when device level telemetry is enabled. However the ring pairs need to be selected. Only 4 ring pairs can be shown at any given time. By echoing the number of the ring pair (0-63) into a rp_<X>_data file it can be selected. Where X is A,B,C or D.

                  -

                  Telemetry Commands

                  +

                  Telemetry Commands

                  Read/Write to /sys/kernel/debug/qae_mem_dbg/qae_mem_slabs
                  ---- @@ -180,18 +174,11 @@

                  Telemetry Commands -

                  Selecting Ring Pairs

                  +

                  Selecting Ring Pairs

                  This section provides guidance on the mapping of ring pairs to the VFs for the PF. There are 4 Ring Pairs per VF. The Ring Pairs for a PF looks like the following:

                  Telemetry Commands

                  Operation

                  Command

                  ------- @@ -305,13 +292,9 @@

                  Selecting Ring Pairs
                  -

                  Device Level Telemetry Values

                  +

                  Device Level Telemetry Values

                  Ring Pairs

                  VF

                  Ring Pairs

                  ---- @@ -376,13 +359,9 @@

                  Device Level Telemetry Values -

                  Ring Pair Level Telemetry Values

                  +

                  Ring Pair Level Telemetry Values

                  Device Level Telemetry Values

                  Value

                  Meaning

                  ---- @@ -424,7 +403,7 @@

                  Ring Pair Level Telemetry Values -

                  Monitoring Telemetry - Text Based

                  +

                  Monitoring Telemetry - Text Based

                  The following example Python script highlights how telemetry data can be monitored at the command line. The script first enables telemetry service for each QAT endpoint that supports telemetry and is in the up state. It then queries the telemetry data on a periodic basis collecting the data and formatting the display.

                  @@ -651,7 +630,7 @@

                  Ring Pair Level Telemetry Values -

                  Monitoring Telemetry Demo

                  +

                  Monitoring Telemetry Demo

                  Here is a demonstration of how to monitor telemetry while running the Intel® QAT sample code.

                  Ring Pair Level Telemetry Values

                  Value

                  Meaning

                  ---- @@ -180,13 +174,13 @@

                  Resetting a Failed Deviceicp_sal_reset_device() function starts an asynchronous reset sequence and returns immediately. The reset function should not be called again until the device has completed the reset to avoid a reset storm. The icp_sal_check_device(<device id>) function could be called in a loop to check if the device reset is still in progress.

                  If the application devices are all configured for automatic reset then the icp_sal_check_all_devices() function could be used; otherwise, the function should not be used because it does not return the identity of the failed device, which is a required parameter for the icp_sal_reset_device() function.

                  -

                  Function Signatures

                  +

                  Function Signatures

                  The details of the above functions, parameters, and return values can be found in Supported APIs > Additional APIs.

                  -

                  Incorporating Heartbeat into Intel® QAT Applications

                  +

                  Incorporating Heartbeat into Intel® QAT Applications

                  A typical Intel® QAT user application consists of two tasks:

                  • The first task is typically an application thread that initializes Intel® QAT instances and sessions, and then submits service requests for Intel® QAT crypto or compression.

                  • @@ -215,7 +209,7 @@

                    Incorporating Heartbeat into Intel® QAT ApplicationsSupported APIs > Additional APIs.

                  -

                  Restart Sequence

                  +

                  Restart Sequence

                  During the restart sequence, the user space library releases the memory used for rings and other data structures as part of the shutdown and reallocates them when the restart is completed. This is transparent to the user application, so it can continue to use the same logical instance after reset to submit Intel® QAT service requests. Any memory allocated by the user application for the Intel® QAT service is untouched during device reset.

                  A typical Heartbeat error use-case is as follows:

                    @@ -237,7 +231,7 @@

                    Restart Sequence -

                    Status of Packets in Flight (Crypto Applications Only)

                    +

                    Status of Packets in Flight (Crypto Applications Only)

                    When a device has fatal errors, the application ordinarily cannot determine whether or not inflight requests have been processed successfully.

                    The current Intel® QAT release includes a dummy response feature that creates mock responses to all requests submitted during a fatal error condition, so the application can detect them and, therefore, know which requests need to be resubmitted to the available devices or to the software.

                  -

                  Determining Device ID

                  +

                  Determining Device ID

                  The <device id> that is passed as a parameter to several Heartbeat API is the numeric suffix of the device name displayed by the following command. (device name: qat_dev0):

                  -

                  Testing Heartbeat

                  +

                  Testing Heartbeat

                  Two debug capabilities are available to assist the developers incorporating Heartbeat into their applications:

                  • Simulation of Heartbeat failure.

                  • System virtual files under /sys/kernel/debug/.

                  -

                  Simulated Heartbeat Failure Configuration

                  +

                  Simulated Heartbeat Failure Configuration

                  The Heartbeat feature is always enabled in the package. However, a debug capability that simulates device failure can be enabled during the configure step as follows:

                  ./configure --enable-icp-hb-fail-sim
                   
                  -

                  Simulating Heartbeat Failure

                  +

                  Simulating Heartbeat Failure

                  Simulating Heartbeat failure can be accomplished using two methods:

                  AutoResetOnError Values

                  AutoResetOnError Value

                  Action on Heartbeat Failure

                  ---- @@ -317,14 +307,14 @@

                  Simulating Heartbeat Failure
                  #!/bin/bash
                  -while : do
                  -   cat /sys/kernel/debug/<device>/heartbeat > /dev/null sleep 1
                  +while : do
                  +   cat /sys/kernel/debug/<device>/heartbeat > /dev/null sleep 1
                   done
                   
                  -

                  Heartbeat Polling Frequencies

                  +

                  Heartbeat Polling Frequencies

                  The application developer should decide on the following two Heartbeat polling frequencies:

                  • Device Heartbeat monitoring.

                  • @@ -345,7 +335,7 @@

                    Heartbeat Polling Frequencies -

                    Handling Device Failures in a Virtualized Environment

                    +

                    Handling Device Failures in a Virtualized Environment

                    The Heartbeat feature in the acceleration software can be used in a virtualized environment. Refer to the Using Intel® Virtualization Technology (Intel® VT) with Intel® QuickAssist Technology Application Note for more details on enabling SR-IOV and the creation of Virtual Functions (VFs) from a single Intel® QuickAssist Technology acceleration device to support acceleration for multiple Virtual Machines (VMs).

                    The following sequence describes a possible use case for using the Heartbeat feature in a virtualized environment.

                      @@ -366,7 +356,7 @@

                      Handling Device Failures in a Virtualized Environment

                  -

                  Incorporating Dummy Responses into an Intel® QAT Application

                  +

                  Incorporating Dummy Responses into an Intel® QAT Application

                  The dummy response feature has been incorporated in a scenario with the Intel® QAT engine and Nginx*. Figure below illustrates how it works. This can be used as a reference to so-called “software fallback.”

                  The Intel® QAT engine is a shim layer between OpenSSL* libcrypto* and Intel® QAT Library. The Intel® QAT Library will generate failover responses.

                  The Heartbeat Monitoring Daemon, a single process, is a daemon which is used to check the device status periodically and trigger the driver the reset the device when heartbeat failure happens. Its only activity is calling icp_sal_check_device() or icp_sal_check_all_devices() periodically.

                  diff --git a/docs/PG/infrastructure_index.html b/docs/PG/infrastructure_index.html index 18046c3..b4cf939 100644 --- a/docs/PG/infrastructure_index.html +++ b/docs/PG/infrastructure_index.html @@ -1,7 +1,7 @@ - + Infrastructure — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -101,9 +99,9 @@
                  @@ -113,7 +111,7 @@
                  -

                  Infrastructure

                  +

                  Infrastructure

                  The following sections describe the building blocks of the Intel® QAT Endpoints’ architecture.

                    diff --git a/docs/PG/infrastructure_load_balancing.html b/docs/PG/infrastructure_load_balancing.html index 9641729..fac08c4 100644 --- a/docs/PG/infrastructure_load_balancing.html +++ b/docs/PG/infrastructure_load_balancing.html @@ -1,7 +1,7 @@ - + Load Balancing — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -106,10 +104,10 @@
                    @@ -119,9 +117,9 @@
                    -

                    Load Balancing

                    +

                    Load Balancing

                    -

                    Per Endpoint

                    +

                    Per Endpoint

                    There are four arbiters, which by default are used for the different services (with one spare/unused).

                    Each partition:

                      @@ -137,7 +135,7 @@

                      Per Endpoint -

                      Across Endpoints

                      +

                      Across Endpoints

                      In a platform or CPU with multiple Intel® QAT devices, software is responsible for load sharing across devices/endpoints. Sapphire Rapids has up to four Intel® QAT devices/endpoints in a single CPU package (depending on SKU) @@ -148,7 +146,7 @@

                      Across Endpoints -

                      Load Sharing Criteria

                      +

                      Load Sharing Criteria

                      • Simple round-robin scheme recommended.

                      • May want to consider “locality” in a multi-socket (NUMA) platform.

                      • @@ -159,8 +157,8 @@

                        Load Sharing Criteria

                    -

                    Dimensions

                    -

                  Heartbeat System Virtual Files

                  File

                  Content

                  +

                  Dimensions

                  +
                  @@ -199,7 +197,7 @@

                  Load Sharing Criteria

                  Dimensions Gen 1 & Gen 2
                  - +
                  diff --git a/docs/PG/infrastructure_memory_management.html b/docs/PG/infrastructure_memory_management.html index 514f55c..5a45cf4 100644 --- a/docs/PG/infrastructure_memory_management.html +++ b/docs/PG/infrastructure_memory_management.html @@ -1,7 +1,7 @@ - + Memory Management — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -108,10 +106,10 @@
                  @@ -121,10 +119,10 @@
                  -

                  Memory Management

                  +

                  Memory Management

                  This section describes memory management requirements for submitting buffers to the QAT hardware.

                  -

                  Shared Virtual Memory

                  +

                  Shared Virtual Memory

                  Shared Virtual Memory (SVM) is a new feature in QAT 2.0 hardware. In QAT 1.x hardware, memory needs to be submitted to the hardware as pinned and physically contiguous memory. In QAT 2.0, SVM allows direct submission of an applications buffer, thus removing the memcpy cycle cost, cache thrashing, and memory bandwidth. @@ -136,7 +134,7 @@

                • Can tolerate page faults but Pinning (i.e. locked, guaranteed resident in physical memory) is recommended for performance.

                • -

                  SVM Kernel Requirements

                  +

                  SVM Kernel Requirements

                  In order to use SVM, ensure that kernel version v6.1 or higher is used. Alternatively verify the following kernel patches are applied.

                  • 81c95fbaebfa5990c3c786c8c3e87426a33106fe

                  • @@ -144,8 +142,8 @@

                  Verification can be done with the following steps:

                  -
                  git tag --contains 81c95fbaebfa5990c3c786c8c3e87426a33106fe
                  -git tag --contains e65a6897be5e4939d477c4969a05e12d90b08409
                  +
                  git tag --contains 81c95fbaebfa5990c3c786c8c3e87426a33106fe
                  +git tag --contains e65a6897be5e4939d477c4969a05e12d90b08409
                   
                  @@ -158,7 +156,7 @@
                  -

                  DMA-able Memory

                  +

                  DMA-able Memory

                  If SVM is not enabled, Memory passed to Intel® QuickAssist Technology hardware must be DMA’able.

                  • Physically contiguous (can also deal with Scatter Gather Lists).

                  • @@ -174,12 +172,12 @@

                    DMA-able Memory -

                    Memory Type Determination

                    +

                    Memory Type Determination

                    QAT 2.0 hardware offers the application to use virtual memory directly to sending the acceleration requests and saving the memory copy overhead. However, different SVM configurations will result in different memory types. The QAT package offers memory management library called User Space DMAable Memory(USDM) to help user space applications using the pinned memory.

                    -
                  Dimensions Gen 3 & Gen 4
                  +
                  @@ -211,14 +209,14 @@

                  Memory Type Determination -

                  Buffer Formats

                  +

                  Buffer Formats

                  Data buffers are passed across the API interface in one of the following formats:

                  • Flat Buffers represent a single region of physically contiguous memory.

                  • Scatter-Gather Lists (SGL) are essentially an array of flat buffers, for cases where the memory is not all physically contiguous.

                  -

                  Flat Buffers

                  +

                  Flat Buffers

                  Flat buffers are represented by the type CpaFlatBuffer, defined in the file cpa.h. It consists of two fields:

                  • Data pointer pData: points to the start address of the data or payload. The data pointer is a virtual address; however, the actual data pointed to is required to be in contiguous and DMAable physical memory. This buffer type is typically used when simple, unchained buffers are needed.

                  • @@ -233,7 +231,7 @@

                    Flat Buffers -

                    Scatter-Gather List (SGL) Buffers

                    +

                    Scatter-Gather List (SGL) Buffers

                    A scatter-gather list is defined by the type CpaBufferList, also defined in the file cpa.h. This buffer structure is typically used where more than one flat buffer can be provided to a particular API. The buffer list contains four fields, as follows:

                    @@ -260,7 +258,7 @@

                    Scatter-Gather List (SGL) Buffers -

                    Huge Pages

                    +

                    Huge Pages

                    The included User space DMAable Memory driver usdm_drv.ko supports 2MB pages. This allows direct access to main memory by devices other than the CPU and the actual supported maximum memory size in one individual allocation when huge pages is enabled is 2MB - 5KB. Where the 5KB is used for memory management for the memory driver. The use diff --git a/docs/PG/infrastructure_modes_of_operation.html b/docs/PG/infrastructure_modes_of_operation.html index 6157f70..dc09f55 100644 --- a/docs/PG/infrastructure_modes_of_operation.html +++ b/docs/PG/infrastructure_modes_of_operation.html @@ -1,7 +1,7 @@ - + Modes of Operation — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -104,10 +102,10 @@

                    @@ -117,11 +115,11 @@
                    -

                    Modes of Operation

                    +

                    Modes of Operation

                    -

                    Calling Semantics

                    +

                    Calling Semantics

                    -

                    Asynchronous (Polled)

                    +

                    Asynchronous (Polled)

                    Hardware “request/response” interface is inherently asynchronous (non-blocking).

                    • Calling function returns once request submitted.

                    • @@ -132,7 +130,7 @@

                      Asynchronous (Polled)

                    -

                    Asynchronous (Interrupts)

                    +

                    Asynchronous (Interrupts)

                    Hardware “request/response” interface is inherently asynchronous (non-blocking).

                    • Calling function returns once request submitted.

                    • @@ -143,7 +141,7 @@

                      Asynchronous (Interrupts) -

                      Synchronous

                      +

                      Synchronous

                      Software interface is traditionally synchronous (blocking).

                      • Calling function blocks until response available.

                      • @@ -154,8 +152,8 @@

                        Synchronous -

                        Pros And Cons

                        -

                  +

                  Pros And Cons

                  +
                  diff --git a/docs/PG/infrastructure_power_management.html b/docs/PG/infrastructure_power_management.html index 42eb22b..21b6b7f 100644 --- a/docs/PG/infrastructure_power_management.html +++ b/docs/PG/infrastructure_power_management.html @@ -1,7 +1,7 @@ - + Power Management — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -106,10 +104,10 @@
                  @@ -119,7 +117,7 @@
                  -

                  Power Management

                  +

                  Power Management

                  The goal of power management is to manage and save power consumed by the device in the following states:

                  • idle => whenever no request is sent, power state is minimum.

                  • @@ -127,11 +125,11 @@
                  • active => whenever there are requests to be handled, power state is max.

                  -

                  Configuration

                  +

                  Configuration

                  Power management configuration is included in the device configuration file (i.e. /etc/4xxx_devX.conf where X is the 0-based index of the device.)

                  Power management configurations parameters include:

                  -
                  Pros and cons of modes of operation
                  +
                  @@ -159,7 +157,7 @@

                  Configuration -

                  Usage

                  +

                  Usage

                  The information of power management status are exposed in debug sysfs file /sys/kernel/debug/qat_4xxx_AAAA:BB:CC.D/pm_status where:

                    @@ -175,7 +173,7 @@

                    Configuration -

                    Considerations

                    +

                    Considerations

                    While power management is an important feature in reducing power consumed, it can affect the internal components’ clocks of QAT devices, and that can affect example telemetry work. It also can impact latency numbers.

                    diff --git a/docs/PG/infrastructure_queue_pairs.html b/docs/PG/infrastructure_queue_pairs.html index baab5db..626eda6 100644 --- a/docs/PG/infrastructure_queue_pairs.html +++ b/docs/PG/infrastructure_queue_pairs.html @@ -1,7 +1,7 @@ - + Queues and Queue Pairs — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -105,10 +103,10 @@
                    @@ -118,7 +116,7 @@
                    -

                    Queues and Queue Pairs

                    +

                    Queues and Queue Pairs

                    Communication between CPU and Intel® QuickAssist Technology hardware is via hardware-assisted queues (aka rings):

                    • Queues are circular buffers.

                    • @@ -127,7 +125,7 @@
                    • Head and Tail pointers are in device CSRs (MMIO space).

                    -

                    Queues Pairs

                    +

                    Queues Pairs

                    • To send a request, software writes request descriptor to next available entry in the request queue, and updates the tail pointer.

                    • Device firmware reads request descriptor from request queue, updating the head pointer. It then processes the request, writes response descriptor onto response queue, and updates the tail pointer.

                    • @@ -138,7 +136,7 @@

                      Queues Pairs -

                      Queue Bundles

                      +

                      Queue Bundles

                      Queues are grouped into bundles of 8 queues (4 Queue Pairs (QPs)).

                      • When SR-IOV is enabled, each bundle shows up as a separate Virtual Function.

                      • diff --git a/docs/PG/infrastructure_ras.html b/docs/PG/infrastructure_ras.html index 7557f3d..5703992 100644 --- a/docs/PG/infrastructure_ras.html +++ b/docs/PG/infrastructure_ras.html @@ -1,7 +1,7 @@ - + Reliability, Availability, and Stability (RAS) — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -105,10 +103,10 @@
                        @@ -118,14 +116,14 @@
                        -

                        Reliability, Availability, and Stability (RAS)

                        +

                        Reliability, Availability, and Stability (RAS)

                        The RAS feature goal is to support the acceleration devices Reliability, Availability and Stability by handling the error interrupts initiated by the device.

                        Additionally the types of errors are counted and the counters made available via sysfs.

                        -

                        RAS Usage

                        +

                        RAS Usage

                        Following PCIe specifications, errors are categorized as follows:

                        -
                  Power Management Configuration
                  +
                  @@ -177,10 +175,10 @@

                  RAS Usage -

                  AER Errors

                  +

                  AER Errors

                  The Linux kernel implements an AER driver for each PCIe device to handle errors reported through the AER mechanism.

                  AER error counters for each device are exposed through sysfs files categorized as follows:

                  -
                  RAS Error Types
                  +
                  diff --git a/docs/PG/infrastructure_ratelimiting.html b/docs/PG/infrastructure_ratelimiting.html index 7ffb99b..8cd817a 100644 --- a/docs/PG/infrastructure_ratelimiting.html +++ b/docs/PG/infrastructure_ratelimiting.html @@ -1,7 +1,7 @@ - + Rate Limiting — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -106,10 +104,10 @@
                  @@ -119,7 +117,7 @@
                  -

                  Rate Limiting

                  +

                  Rate Limiting

                  Rate Limiting is implemented by monitoring the utilization of the device on a per-VF, per-service basis and comparing that to the SLA allocated to that VF and service. Resources are shared across guests and the resource utilization of each guest is measured relative to the capacity of the physical function.

                  The feature is supported only for SYM and ASYM services.

                  To enable the Rate Limiting feature:

                  @@ -129,7 +127,7 @@
                • Perform qat_service shutdown and qat_service start.

                • -

                  Service Level Agreement (SLA)

                  +

                  Service Level Agreement (SLA)

                  Service Level Agreement enforcement allocates a specified amount of capacity for a specified service to a specified VF: max SLA enforced = (number of VFs) X (number of services) where:

                  @@ -140,7 +138,7 @@

                  Service Level Agreement (SLA) -

                  SLA Units

                  +

                  SLA Units

                  SLA units are measured as follows:

                  • Symmetric Crypto – 1Mbps of throughput.

                  • @@ -148,17 +146,13 @@

                    SLA Units -

                    SLA Manager Application

                    +

                    SLA Manager Application

                    The sla_mgr tool is used to create, update, delete, list and get SLA capabilities. The SLA Manager executable is available in $ICP_ROOT/build/sla_mgr after the package is built and installed using ./configure; make install commands.

                    -

                    SLA Commands

                    +

                    SLA Commands

                  RAS AER Errors
                  ---- @@ -200,7 +194,7 @@

                  SLA Commands -

                  SLA Manager Application Demo

                  +

                  SLA Manager Application Demo

                  Here is a demonstration of using the sla_mgr tool to create, update, and delete SLAs. The device utilization script from the previous section is used to visualize the SLAs in action. The demo consists of the following steps:

                  diff --git a/docs/PG/infrastructure_reset.html b/docs/PG/infrastructure_reset.html index 310147c..d5cb7a4 100644 --- a/docs/PG/infrastructure_reset.html +++ b/docs/PG/infrastructure_reset.html @@ -1,7 +1,7 @@ - + Reset Operation — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -74,8 +72,8 @@
                    -
                  • - +
                  • »
                  • +
                  • Reset Operation
                  @@ -85,7 +83,7 @@
                  -

                  Reset Operation

                  +

                  Reset Operation

                  diff --git a/docs/PG/infrastructure_service_instances.html b/docs/PG/infrastructure_service_instances.html index f67ca6a..4ec5bed 100644 --- a/docs/PG/infrastructure_service_instances.html +++ b/docs/PG/infrastructure_service_instances.html @@ -1,7 +1,7 @@ - + Service Instances — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -104,10 +102,10 @@
                  @@ -117,7 +115,7 @@
                  -

                  Service Instances

                  +

                  Service Instances

                  At the Intel® QuickAssist Technology API, we abstract queue pairs using the concept of service instances.

                  • To use a service, an application must first get a handle to a service instance.

                  • @@ -138,7 +136,7 @@
                  -

                  Configurable Items (via config file)

                  +

                  Configurable Items (via config file)

                  • Queue depth (for each queue).

                  • Number of service instances per process for a given device (limited by available rings), for example:

                    diff --git a/docs/PG/infrastructure_user_queues.html b/docs/PG/infrastructure_user_queues.html index 61233b5..5cc5302 100644 --- a/docs/PG/infrastructure_user_queues.html +++ b/docs/PG/infrastructure_user_queues.html @@ -1,7 +1,7 @@ - + User Queues — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -74,8 +72,8 @@
                      -
                    • - +
                    • »
                    • +
                    • User Queues
                    @@ -85,9 +83,9 @@
                    -

                    User Queues

                    +

                    User Queues

                    -

                    Hardware View

                    +

                    Hardware View

                    User Queues layers on top of Queue Pairs:

                    • Presents a simple interface to IA to dispatch work to CPM and receive notification of completions.

                    • @@ -97,7 +95,7 @@

                      Hardware View -

                      ENQCMD(S) Instruction

                      +

                      ENQCMD(S) Instruction

                      • Allows software process to write commands to special device Queue Pair Registers.

                      • 64 Byte Write Command, with PASID (20-bits) and Device Specific Command Fields (60 Bytes) fields.

                      • @@ -109,7 +107,7 @@

                        ENQCMD(S) Instruction

                    -

                    Software View

                    +

                    Software View

                    QAT SW Library in User Space provides usage of ENQCMD instruction in User Space.

                    • Infrastructure requires 4KB User Space Page (Virtual QP Buffer) to Map to UQ HW.

                      @@ -127,7 +125,7 @@

                      Software View -

                      PASID Management

                      +

                      PASID Management

                      • IOMMU Kernel Driver dependencies to PASID allocation.

                      • Linux kernel dependencies to management of IA32_PASID MSR required for UQ.

                      • diff --git a/docs/PG/introduction.html b/docs/PG/introduction.html index c13d1d3..ea5121b 100644 --- a/docs/PG/introduction.html +++ b/docs/PG/introduction.html @@ -1,7 +1,7 @@ - + About this Document — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -91,9 +89,9 @@
                        @@ -103,7 +101,7 @@
                        -

                        About this Document

                        +

                        About this Document

                        This programmer’s guide provides information on the architecture of the software and usage guidelines.

                        Information on the use of Intel® QuickAssist Technology (Intel® QAT) APIs, which provide the interface to the acceleration services (cryptographic and data compression), is documented in the related Intel® QAT software library documentation referenced in @@ -123,7 +121,7 @@

                        For additional details on in-tree driver refer to https://github.com/intel/qatlib.

                        -

                        Conventions and Terminology

                        +

                        Conventions and Terminology

                        The following conventions are used in this manual:

                        • Code text - code examples, command line entries, Application Porgramming Interface (API) names, parameters, filenames, directory paths, and executables.

                        • @@ -133,10 +131,6 @@

                          Conventions and Terminology

                  ---- diff --git a/docs/PG/revision_history.html b/docs/PG/revision_history.html index fe97207..af57386 100644 --- a/docs/PG/revision_history.html +++ b/docs/PG/revision_history.html @@ -1,7 +1,7 @@ - + Revision History — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -88,9 +86,9 @@
                  @@ -100,8 +98,8 @@
                  -

                  Revision History

                  -
                  Rate Limiting SLA Commands

                  Operation

                  Command

                  Terminology

                  Term

                  Description

                  +

                  Revision History

                  +
                  diff --git a/docs/PG/security.html b/docs/PG/security.html index c79c6c8..21e9308 100644 --- a/docs/PG/security.html +++ b/docs/PG/security.html @@ -1,7 +1,7 @@ - + Secure Architecture Considerations — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -103,9 +101,9 @@
                  @@ -115,14 +113,14 @@
                  -

                  Secure Architecture Considerations

                  +

                  Secure Architecture Considerations

                  This section describes the potential threats identified as part of the secure architecture analysis of the Intel® Quick Assist Technology acceleration complex and the actions that can be taken to protect against these threats. This chapter concentrates on the acceleration complex. First, the terminology covering the main threat categories and mechanisms, attacker privilege and deployment models are presented. Then, some common mitigation actions that can be applied to many of these threat categories and mechanisms are discussed. Finally, more specific threat/attack vectors, including attacks against specific services of the PCH device are described.

                  -

                  Terminology

                  +

                  Terminology

                  Each of the potential threat/attack vectors discussed may be described in terms of the following:

                  -

                  Threat Categories

                  +

                  Threat Categories

                  System threats can be classified into the categories in the following table.

                  -
                  +
                  @@ -168,10 +166,10 @@

                  Threat Categories -

                  Attack Mechanism

                  +

                  Attack Mechanism

                  Attack Mechanisms and Examples

                  Some of the mechanisms by which an attacker can carry out an attack are listed in the following table.

                  -
                  Threat Categories
                  +
                  @@ -203,9 +201,9 @@

                  Attack Mechanism -

                  Attacker Privilege

                  +

                  Attacker Privilege

                  The following table describes the privileges that an attacker may have. The table describes the case of a non-virtualized system.

                  -
                  Attack Mechanism
                  +
                  @@ -233,14 +231,10 @@

                  Attacker Privilege -

                  Deployment Models

                  +

                  Deployment Models

                  Some of the possible deployment models are given in the following table.

                  Attacker Privilege
                  ---- @@ -265,7 +259,7 @@

                  Deployment Models -

                  Threat/Attack Vectors

                  +

                  Threat/Attack Vectors

                  A thorough analysis has been conducted by considering each of the threat categories, attack mechanisms, attacker privilege levels, and deployment models. As a result, the following threats have been identified. Also @@ -274,7 +268,7 @@

                  Threat/Attack Vectors
                  -

                  General Mitigation

                  +

                  General Mitigation

                  The following mitigation techniques are generic to different threats and attack vectors:

                  • Ensure that all software running on the platform that has access to Intel® Quick Assist Technology devices is within the trust boundary of the platform owner. This mitigation includes software running in virtual machines and containers.

                  • @@ -285,7 +279,7 @@

                    General Mitigation -

                    General Threats

                    +

                    General Threats

                    General threats include the following:

                    -

                    DMA

                    +

                    DMA

                    Threat: The PCH can perform Direct Memory Access (DMA, the copying of data) between defined memory locations. Once an attacker has sufficient privilege to invoke the Intel® QuickAssist @@ -329,7 +323,7 @@

                    General Threats -

                    Intentional Modification of IA Driver

                    +

                    Intentional Modification of IA Driver

                    Threat: An attacker can potentially modify the IA driver to behave maliciously. This may lead to a denial of service of Intel® Quick Assist Technology services.

                    @@ -343,7 +337,7 @@

                    General Threats -

                    Modification of the QAT Configuration File

                    +

                    Modification of the QAT Configuration File

                    Threat: The QAT configuration file is read at initialization time by the driver and specifies what instances of each service (cryptographic, data compression) should be created, and which rings each service @@ -360,7 +354,7 @@

                    General Threats -

                    Malicious Application Code

                    +

                    Malicious Application Code

                    Threat: An attacker who can gain access to the Intel® QuickAssist Technology API may be able to exploit the following features of the API:

                    @@ -379,7 +373,7 @@

                    General Threats -

                    Denial of Service

                    +

                    Denial of Service

                    Threat: An attacker may construct a service request that does not conform to the specification, resulting in low of service due to service timeouts, halting of Quick Assist service or undesired platform level @@ -408,10 +402,10 @@

                    General Threats -

                    Threats Specific to Cryptographic Service

                    +

                    Threats Specific to Cryptographic Service

                    Threats against the cryptographic service include:

                    -

                    Reading Cryptographic Keys

                    +

                    Reading Cryptographic Keys

                    Threat: Cryptographic keys are stored in DRAM. An attacker who can determine where these are stored could read the DRAM to get access to the keys or could write the DRAM to use keys known by the attacker, thereby compromising the confidentiality of data protected by these keys. Some cryptographic keys have long lives. The impact of an attacker obtaining the key may exist for the lifetime of the key itself.

                    Mitigation: DRAM is considered inside the cryptographic boundary (as defined by FIPS 140-2). The normal memory protection schemes provided by the Intel® architecture processor and memory controller, and by the operating system, prevent unauthorized access to these memory regions.

                    diff --git a/docs/PG/services_compression_api.html b/docs/PG/services_compression_api.html index e5ae22e..c7dd86f 100644 --- a/docs/PG/services_compression_api.html +++ b/docs/PG/services_compression_api.html @@ -1,7 +1,7 @@ - + Data Compression — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -113,10 +111,10 @@
                    @@ -126,9 +124,9 @@
                    -

                    Data Compression

                    +

                    Data Compression

                    -

                    Compresion Features

                    +

                    Compresion Features

                    • Deflate Compression Algorithm.

                    • LZ77 and Huffman Encoding.

                    • @@ -139,7 +137,7 @@

                      Compresion Features -

                      Compression Limitations

                      +

                      Compression Limitations

                      • Stateful compression is not supported.

                      • Stateful decompression is not supported on QAT2.0 hardware devices.

                      • @@ -147,14 +145,10 @@

                        Compression Limitations

                    -

                    Compression Session Setup

                    +

                    Compression Session Setup

                    The following table lists the properties that should be configured in the CpaDcSessionSetupData structure depending on the compression algorithm requested.

                  Deployment Models

                  Deployment Model

                  Examples

                  ---- @@ -203,15 +197,10 @@

                  Compression Session Setup -

                  Decompression Session Setup

                  +

                  Decompression Session Setup

                  The following table lists the properties that should be configured in the CpaDcSessionSetupData structure depending on the format of the payload to decompression.

                  Compression CpaDcSessionSetupData Properties

                  Property

                  Details

                  ----- @@ -242,7 +231,7 @@

                  Decompression Session Setup -

                  Deflate Decompression

                  +

                  Deflate Decompression

                  With deflate based format such as Gzip the application is required to skip the GZip header and present to Intel® QAT the first byte of the deflate block.

                  ../_images/deflate_decompression.png @@ -251,7 +240,7 @@

                  Deflate Decompression
                  -

                  LZ4 Decompresion

                  +

                  LZ4 Decompresion

                  When decompressing LZ4 frames, the application is required to parse the frame header to extract B.Checksum flag. This flag is used to set the configuration parameter lz4BlockChecksum in CpaDcSessionSetupData. When decompressing LZ4 frames, the application should not include the frame header nor the frame footer in the source buffer to be processed by Intel® QAT hardware.

                  ../_images/lz4_decompression.png @@ -262,11 +251,11 @@

                  LZ4 Decompresion -

                  LZ4 Decompression Limitations

                  +

                  LZ4 Decompression Limitations

                  When decompressing LZ4 data compressed without Intel® QAT hardware, it is important to ensure that the compressor limits the history buffer to 32KB. Data compressed using a history buffer larger than 32KB will result with a CPA_DC_INVALID_DIST (-10) error code.

                  -

                  Multi-frame decompression support

                  +

                  Multi-frame decompression support

                  Intel® QAT hardware can decompress a payload that includes multiple frames. This applies to both Gzip and LZ4 formats. The figure below shows how the application must behave to decompress LZ4 multi frame payloads.

                  ../_images/multi-frame_decompression.png @@ -274,13 +263,13 @@

                  Multi-frame decompression support -

                  Performance Considerations

                  +

                  Performance Considerations

                  To enable the application benefiting from the QAT2.0 HW maximal performance, it is recommended to populate all the DIMMs around the CPU sockets in use.

                  -

                  Flush Flags

                  +

                  Flush Flags

                  The table below shows the flush flags that should be used depending on the application’s use case. The application programming model should follow this table.

                  -

                  Decompression CpaDcSessionSetupData Properties

                  Property

                  Deflate

                  +
                  @@ -336,14 +325,10 @@

                  Flush Flags -

                  Checksums

                  +

                  Checksums

                  With the addition of LZ4 algorithm support on QAT2.0, the compression hardware accelerators are now capable to generate XXash32 checksums. QAT2.0 device is now supporting the following checksums:

                  Flush Flags
                  ---- @@ -367,11 +352,11 @@

                  Checksums -

                  LZ4s Compressed Data Block format

                  +

                  LZ4s Compressed Data Block format

                  LZ4s is a variant of LZ4 block format. LZ4s should be considered as an intermediate compressed block format. The LZ4s format is selected when the application sets the compType to CPA_DC_LZ4S in CpaDcSessionSetupData. The LZ4s block returned by the Intel® QAT hardware can be used by an external software post-processing to generate other compressed data formats.

                  The following table lists the differences between LZ4 and LZ4s block format. LZ4s block format uses the same high-level formatting as LZ4 block format with the following encoding changes:

                  -
                  Checksums

                  Checksum Type

                  Usage

                  +
                  @@ -427,7 +412,7 @@

                  LZ4s Compressed Data Block format -

                  LZ4 Compression Support

                  +

                  LZ4 Compression Support

                  With the QAT 2.0 API, the application can create LZ4 frames. This is achieved using APIs cpaDcGenerateHeader() and cpaDcGenerateFooter(). These APIs are also able to generate GZip and Zlib formats. More information is available in the API reference manual.

                  The cpaDcGenerateHeader() creates a 7 byte LZ4 frame header which includes:

                    @@ -453,7 +438,7 @@

                    LZ4 Compression Support
                    -

                    Compress-and-Verify

                    +

                    Compress-and-Verify

                    The Compress and Verify (CnV) feature checks and ensures data integrity in the compression operation of the Data Compression API. This feature introduces an independent capability to verify the compression transformation.

                    @@ -467,21 +452,21 @@

                    Compress-and-Verify -

                    Compress and Verify Error log in Sysfs

                    +

                    Compress and Verify Error log in Sysfs

                    The implementation of the Compress and Verify solution keeps a record of the CnV errors that have occurred since the driver was loaded. The error count is provided on a per Acceleration Engine basis.

                    The path to the CnV error log is: /sys/kernel/debug/qat_<qat_device>_<Bus>\:<device>.<function>/cnv_errors

                    Each Acceleration Engine keeps a count of the CnV errors. The CnV error counter is reset when the driver is loaded. The tool also reports the last error type that caused a CnV error.

                    -

                    Compress and Verify and Recover (CnVnR)

                    +

                    Compress and Verify and Recover (CnVnR)

                    The Compress and Verify and Recover (CnVnR) feature allows a compression error to be recovered in a seamless manner. It is supported in both the Traditional and in the Data Plane APIs.

                    The CnVnR feature is an enhancement of the Compress and Verify (CnV) solution. When a compress and verify error is detected, the Intel® QAT software will do a correction without returning a CnV error to the application.

                    When a recovery occurs, CpaDcRqResults.status will return CPA_DC_OK or CPA_DC_OVERFLOW and the destination buffer will hold valid deflate data.

                    The application can find out if CnVnR is supported by querying the instance capabilities via the cpaDcQueryCapabilities API. On completion, the compressAndVerifyAndRecover property of the CpaDcInstanceCapabilitie: ..\image:: ./s structure will be set to CPA_TRUE if the feature is supported.

                    -

                  Differences between LZ4 and LZ4s block format
                  +
                  @@ -546,7 +531,7 @@

                  Compress and Verify and Recover (CnVnR) -

                  Dynamic Compression

                  +

                  Dynamic Compression

                  Dynamic compression involves feeding the data produced by the compression hardware block to the translator hardware block.

                  ../_images/dynamic_compression_updated.png @@ -556,7 +541,7 @@

                  Dynamic CompressioncpaDcGetNumIntermediateBuffers() returns 0. As a good programming practise, the application should still call cpaDcGetNumIntermediateBuffers() and ensure that the number of intermediate buffers returned is 0.

                  -

                  Maximum Expansion with Auto Select Best Feature (ASB)

                  +

                  Maximum Expansion with Auto Select Best Feature (ASB)

                  Compressing some input data may lead to a lower-than-expected compression ratio. This is because the input data may not be very compressible. To achieve a maximum compression ratio, the acceleration unit provides an auto select best (ASB) feature.

                  With QAT1.X devices, the Intel® QuickAssist Technology hardware will first execute static compression followed by dynamic compression and then select the output that yields the best compression ratio.

                  @@ -564,10 +549,6 @@

                  Maximum Expansion with Auto Select Best Feature (ASB)Regardless of the ASB setting selected, dynamic compression will only be attempted if the session is configured for dynamic compression.

                  Compress and Verify and Recover (CnVnR) Behaviors
                  ---- @@ -600,7 +581,7 @@

                  Maximum Expansion with Auto Select Best Feature (ASB)
                  -

                  Maximum Compression Expansion

                  +

                  Maximum Compression Expansion

                  To facilitate the programming model of the application, Intel® added a new set of APIs that return the size of the destination according to the algorithm used.

                  These APIs are:

                    @@ -616,7 +597,7 @@

                    Maximum Expansion with Auto Select Best Feature (ASB)

                  -

                  No Session API

                  +

                  No Session API

                  The no session API is a simplification of the existing compression and decompression APIs that does not require the application to create/remove a session. Instead the parameters that would normally be set when creating a session are passed into the compress/decompress APIs via a CpaDcNsSetupData structure. The no session API is especially useful to simplify existing applications as sessions no longer need to be created/tracked/removed. The no session API can be thought of as a “one shot” API and is intended for use cases where all the data to be compressed or decompressed for the current job is being submitted as one request. In addition to the simpler protocol, the API has a smaller memory footprint.

                  The no session API consists of the following API calls:

                  @@ -634,15 +615,9 @@

                  No Session APIcpaDcNsGenerateHeader() and cpaDcNsGenerateFooter() functions are also very similar to the session based equivalents but take a CpaDcNsSetupData instead of a CpaDcSessionHandle. For cpaDcNsGenerateFooter() an additional parameter is required called count that contains the overall length of the uncompressed input data. For most cases this will be the consumed value from the single submission contained in the CpaDcRqResults structure but in cases where multiple submissions represent the overall file then it is the application’s responsibility to maintain the overall count of consumed bytes.

                  -

                  Compression Levels

                  +

                  Compression Levels

                  ASB Settings

                  Setting

                  Description

                  ------ @@ -703,13 +678,13 @@

                  Compression Levels -

                  Compression Status Codes

                  +

                  Compression Status Codes

                  The CpaDcRqResults structure should be checked for compression status codes in the CpaDcReqStatus data field. The mapping of the error codes to the enums is included in the quickassist/include/dc/cpa_dc.h file.

                  -

                  Intel® QuickAssist Technology Compression API Errors

                  +

                  Intel® QuickAssist Technology Compression API Errors

                  The Intel® QuickAssist Technology Compression APIs that send requests to the compression hardware can return the error codes shown in Compression API Errors.

                  @@ -734,8 +709,8 @@

                  Intel® QuickAssist Technology Compression API Errors -

                  Compression API Errors

                  -

                  Compression Levels

                  Level

                  lvl_enum

                  +

                  Compression API Errors

                  +
                  @@ -1157,10 +1132,10 @@

                  Intel® QuickAssist Technology Compression API Errors -

                  Overflows Errors

                  +

                  Overflows Errors

                  This table describes the behavior of the Intel® QAT compression service when an overflow occurs during a compression or decompression operation. It also describes the expected behavior of an application when an overflow occurs.

                  -
                  Compression API Errors
                  +
                  @@ -1225,12 +1200,12 @@

                  Intel® QuickAssist Technology Compression API Errors -

                  Traditional API Overflow Exception

                  +

                  Traditional API Overflow Exception

                  Stateless sessions support overflow as an exception for traditional API in the compression direction only. This means that the application can rely on the cpaDcRqResults.consumed to resubmit from where the overflow occurred. An overflow in the decompression direction must be treated as an error.

                  In this case, the application must resubmit the request with a larger buffer as described in the procedure for handling overflow errors. For stateful sessions, overflow is supported only in the decompression direction.

                  -

                  Data Plane API Overflow Error

                  +

                  Data Plane API Overflow Error

                  The Data Plane API considers overflow status as an error. If an overflow occurs with the data plane API, the driver will output the following error message to the user:

                  Unrecoverable error: stateless overflow. You may need to increase the size of your destination buffer

                  @@ -1238,7 +1213,7 @@

                  Data Plane API Overflow ErrorcpaDcRqResults.consumed, .produced and .checksum should be ignored. If length and checksum are required, they must be tracked in the application, because they are not maintained in the session.

                  -

                  Handling Overflow Errors

                  +

                  Handling Overflow Errors

                  Resubmit the request with the following data:

                  • Use the same source buffer.

                  • @@ -1247,13 +1222,13 @@

                    Handling Overflow Errors -

                    Compression Overflows in a Virtual Environment

                    +

                    Compression Overflows in a Virtual Environment

                    In a virtual environment, the guest does not download the firmware. Only the host downloads the firmware. As a consequence, if the guest runs a newer Intel® QAT driver than the host, the guest application might experience false CNV errors. The correct course of action would be to update the host with the latest Intel® QAT driver.

                  -

                  Avoiding Compression Overflow Exceptions

                  +

                  Avoiding Compression Overflow Exceptions

                  Overflow exceptions happen for 2 reasons:

                  1. The application allocated a destination buffer that was too small to receive the compressed data.

                  2. @@ -1264,11 +1239,11 @@

                    Avoiding Compression Overflow Exceptions -

                    Integrity Checksums

                    +

                    Integrity Checksums

                    Integrity checksums are an additional method for payload verification throughout the compression/decompression lifecycle. They may be used to verify corruption has not happened when sending data to and from the Intel® QuickAssist HW, or for example the integrity checksums may be stored by an application along with the compressed data and used to detect corruption in the future without needing to decompress the data.

                    They should not be confused with the Gzip/Zlib/LZ4 footer checksums of CRC32, Adler32 and Xxhash32 that are calculated over the uncompressed input data only.

                    Integrity checksums use an additional structure that is the application’s responsibility to allocate, maintain, and free. The structure is cpaCrcData and contains the following fields:

                    -
                  Overflows Errors
                  +
                  @@ -1329,16 +1304,16 @@

                  Integrity ChecksumscpaCrcData structure on the subsequent request without resetting the contents. For QAT 1.8 stateful decompression requests it is the application’s responsibility to allocate the cpaCrcData structure and keep it allocated for the lifetime of the session. Integrity checksums are not available on devices prior to QAT 1.8.

                  -

                  Verify HW Integrity CRC’s

                  +

                  Verify HW Integrity CRC’s

                  There is an additional feature to integrity checksums that can be enabled to automatically check that no corruption to data buffers has occured during transport to and from the Intel® QAT HW. This works by calculating integrity checksums across the source and destination buffers within the Intel® QAT API, and comparing the checksums with those generated within the Intel® QAT HW. Any discrepencies will result in a status of CPA_DC_INTEG_ERR being returned within the cpaDcRqResults structure. These additional checksums are calculated in SW using the CPU and have a cost in terms of performance. In order to enable the Verify HW Integrity CRC feature on a per request basis the verifyHwIntegrityCrcs field contained in the cpaDcOpdata structure needs to be set to CPA_TRUE. Additionally the integrityCrcCheck field must be enabled and a cpaCrcData structure allocated and a pointer to it must be assigned to the pCrcData field.

                  -

                  Data Compression Applications

                  +

                  Data Compression Applications

                  Data compression can be used as part of application delivery networks, data de-duplication, as well as in a number of crypto applications, for example, VPNs, IDS/IPS and so on.

                  -

                  Compression for Storage

                  +

                  Compression for Storage

                  In a time when the amount of online information is increasing dramatically, but budgets for storing that information remain static, compression technology is a powerful tool for improved information management, protection and access.

                  Compression appliances can transparently compress data such that clients can keep between two- and five-times more data online and @@ -1357,7 +1332,7 @@

                  Compression for Storage

                  -

                  Data Deduplication and WAN Acceleration

                  +

                  Data Deduplication and WAN Acceleration

                  Data Deduplication and WAN Acceleration are coarse-grain data compression techniques centered around the concept of single-instance storage. Identical blocks of data (either to be stored on disk or to be transferred across a WAN link) are only stored/moved once, and any further occurrences are replaced by a reference to the first instance.

                  diff --git a/docs/PG/services_cryptography_api.html b/docs/PG/services_cryptography_api.html index 2df5a15..6687874 100644 --- a/docs/PG/services_cryptography_api.html +++ b/docs/PG/services_cryptography_api.html @@ -1,7 +1,7 @@ - + Cryptographic Services — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -96,10 +94,10 @@
                  @@ -109,9 +107,9 @@
                  -

                  Cryptographic Services

                  +

                  Cryptographic Services

                  -

                  Introduction

                  +

                  Introduction

                  Intel® QuickAssist Technology (Intel® QAT) accelerates cryptographic workloads by offloading the data to hardware capable of optimizing those functions. This makes it easier for developers to integrate built-in cryptographic accelerators into network and security applications.

                  @@ -132,7 +130,7 @@

                  Introduction -

                  Supported Cipher Algorithms

                  +

                  Supported Cipher Algorithms

                  The following table provides details on supported cipher algorithms for each platform.

                  Note

                  @@ -143,12 +141,6 @@

                  Supported Cipher Algorithms

                  ------ @@ -266,7 +258,7 @@

                  Supported Cipher Algorithms -

                  Supported Hash/Authenticate Algorithms

                  +

                  Supported Hash/Authenticate Algorithms

                  The following table provides details on supported hash algorithms for each platform.

                  Note

                  @@ -277,12 +269,6 @@

                  Supported Hash/Authenticate Algorithms

                  ------ @@ -400,7 +386,7 @@

                  Supported Hash/Authenticate Algorithms -

                  Supported Public Key Algorithms

                  +

                  Supported Public Key Algorithms

                  The following table provides details on supported asymmetric algorithms for each platform.

                  Note

                  @@ -408,12 +394,6 @@

                  Supported Public Key Algorithms

                  ------ @@ -482,7 +462,7 @@

                  Supported Public Key Algorithms -

                  Cryptography Applications

                  +

                  Cryptography Applications

                  Cryptography applications supported by the platforms described in this manual include, but are not limited to:

                  -

                  IPsec and SSL VPNs

                  +

                  IPsec and SSL VPNs

                  Virtual Private Networks (VPNs) allow for private networks to be established over the public Internet by providing confidentiality, integrity and authentication using cryptography. VPN functionality can be provided by a standalone security gateway box at the boundary between the trusted and untrusted networks. It is also commonly combined with other networking and security functionality in a security appliance, or even in standard routers.

                  @@ -510,7 +490,7 @@

                  Cryptography Applications -

                  Encrypted Storage

                  +

                  Encrypted Storage

                  In recent years, cases of lost laptops containing sensitive information have made the headlines all too frequently. Full disk encryption has become a standard procedure for many corporate PCs. Safe-guarding critical data however is not just a necessity in the client space, it is also a necessity in the data center.

                  @@ -533,7 +513,7 @@

                  Cryptography Applications -

                  Web Proxy Appliances

                  +

                  Web Proxy Appliances

                  Historically, Web Proxy appliances have evolved to present a public or intermediary interface for clients seeking resources from other servers, providing services such as web page caching and load balancing. These appliances are located at the edge of the network, typically at network gateways. Due to their centralized presence in the network, Web Proxy appliances today diff --git a/docs/PG/services_index.html b/docs/PG/services_index.html index 0a8bbcb..5af9993 100644 --- a/docs/PG/services_index.html +++ b/docs/PG/services_index.html @@ -1,7 +1,7 @@ - + Services — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -92,9 +90,9 @@

                  @@ -104,7 +102,7 @@
                  -

                  Services

                  +

                  Services

                  Intel® QAT can accelerate the following services:

                  • Data compression/decompression.

                  • diff --git a/docs/PG/virtualization.html b/docs/PG/virtualization.html index 2575d16..80064da 100644 --- a/docs/PG/virtualization.html +++ b/docs/PG/virtualization.html @@ -1,7 +1,7 @@ - + Virtualization — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -95,9 +93,9 @@
                    @@ -107,9 +105,9 @@
                    -

                    Virtualization

                    +

                    Virtualization

                    -

                    Virtualization Deployment Model for Intel® QAT 2.0

                    +

                    Virtualization Deployment Model for Intel® QAT 2.0

                    Three different methods of virtualization are supported as shown in the below image.

                    Note

                    @@ -120,20 +118,20 @@

                    Virtualization Deployment Model for Intel® QAT 2.0 -

                    Physical Device Direct Assignment

                    +

                    Physical Device Direct Assignment

                    The hardware exposes one Physical Function (PF) per QAT Endpoint to the host. Number of QAT Endpoints per platform is included in the Dimensions.

                    One or more PFs may be passed to a single virtual machine.

                    There is no sharing of the PF.

                    -

                    Single Root IOV (SR-IOV)

                    +

                    Single Root IOV (SR-IOV)

                    When SR-IOV is enabled, the hardware exposes one Physical Function (PF) and n Virtual Functions(VFs) per QAT Endpoint to the host, where n is defined in Dimensions. Number of QAT Endpoints per platform is also included in the Dimensions.

                    One or more VFs can be passed through to different guests/VMs

                    For details on enabling SR-IOV refer to the Virtualization Deployment Guide.

                    -

                    Scalable IOV (S-IOV)

                    +

                    Scalable IOV (S-IOV)

                    Scalable I/O Virtualization enables flexible composition of Virtual Functions by software from native hardware interfaces. Rather than implementing a complete SR-IOV virtual function (VF) interface, an S-IOV device exposes light-weight Assignable Device Interfaces (ADIs) that are optimized for fast-path (data-path) operations from the guest.

                    @@ -149,7 +147,7 @@

                    Virtualization Deployment Model for Intel® QAT 2.0Virtualization Deployment Guide.

                    -

                    Reducing Number of VFs per Endpoint

                    +

                    Reducing Number of VFs per Endpoint

                    Note

                    Reducing number of VFs per endpoint is supported starting with QAT Gen 4.

                    diff --git a/docs/RN/In-Tree/in_tree_firmware_RN.html b/docs/RN/In-Tree/in_tree_firmware_RN.html index 4965780..65b50fc 100644 --- a/docs/RN/In-Tree/in_tree_firmware_RN.html +++ b/docs/RN/In-Tree/in_tree_firmware_RN.html @@ -1,7 +1,7 @@ - + Introduction — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -102,9 +100,9 @@
                    @@ -114,7 +112,7 @@
                    -

                    Introduction

                    +

                    Introduction

                    The term in-tree refers to the Intel® QAT kernel modules and firmware included in the Linux kernel tree, as opposed to our more common out-of-tree (OOT) driver and firmware, provided directly by Intel at Intel® QuickAssist Technology Driver for Linux* - HW Version 2.0.

                    @@ -124,7 +122,7 @@

                    Introduction -

                    Detecting Current Firmware

                    +

                    Detecting Current Firmware

                    Note

                    Your firmware may be in a compressed .xz filetype. Decompress first using the sudo xz --decompress compressed_file_filename.xz command.

                    @@ -148,8 +146,8 @@

                    Detecting Current Firmware -

                    QAT Firmware Available

                    -

                  Integrity Checksums Supported Cipher Algorithms

                  Algorithm

                  QAT 1.7x

                  Supported Hash/Authenticate Algorithms

                  Algorithm

                  QAT 1.7x

                  Supported Public Key Algorithms

                  Algorithm

                  QAT 1.7x

                  +

                  QAT Firmware Available

                  +
                  @@ -229,23 +227,18 @@

                  QAT Firmware Available
                  -

                  Download

                  +

                  Download

                  QAT in-tree firmware can be downloaded from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/.

                  -

                  QAT Kernel Driver Releases & Features

                  +

                  QAT Kernel Driver Releases & Features

                  Note

                  Some qatlib features require a recent kernel driver or firmware version.

                  QAT Firmware Available
                  ----- @@ -254,7 +247,7 @@

                  Download

                  - + @@ -273,7 +266,12 @@

                  Download

                  + + + + + @@ -289,10 +287,10 @@

                  Download -

                  Known Errata (Linux Firmware/Kernel Modules)

                  +

                  Known Errata (Linux Firmware/Kernel Modules)

                  -

                  QAT20-23946 [SVM/IOMMU] Request issue doesn’t appear in response

                  -
                  QAT Kernel Driver Releases & Features

                  Feature

                  Required Kernel Driver Version

                  Symmetric and asymmetric crypto

                  v5.11+

                  v5.15.3+

                  Any

                  Data Compression

                  DC Chaining (dcc)

                  Symmetric Crypto SM3 & SM4 and +Asymmetric Crypto SM2

                  v6.6+

                  Any

                  DC Chaining (dcc)

                  v6.7+

                  Pending*

                  +

                  QAT20-23946 [SVM/IOMMU] Request issue doesn’t appear in response

                  +
                  @@ -340,8 +338,8 @@

                  QAT20-23946 [SVM/IOMMU] Request issue doesn’t appear in response -

                  QAT20-24970 [Firmware] Potential false positive heartbeat failures

                  -

                  +

                  QAT20-24970 [Firmware] Potential false positive heartbeat failures

                  +
                  @@ -390,8 +388,8 @@

                  QAT20-24970 [Firmware] Potential false positive heartbeat failures -

                  QAT20-20272 [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs

                  -

                  +

                  QAT20-20272 [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs

                  +
                  @@ -440,8 +438,8 @@

                  QAT20-20272 [XCC/MCC] Spurious heartbeat failures may be observed on some SK

                  -

                  QAT20-18924 [MCC] MCC SKUs may consume more power than expected

                  - +

                  QAT20-18924 [MCC] MCC SKUs may consume more power than expected

                  +
                  @@ -485,8 +483,8 @@

                  QAT20-18924 [MCC] MCC SKUs may consume more power than expected -

                  QATE-45537 [Firmware] - Firmware authentication may fail if PCIe* errors occur or are injected

                  -

                  +

                  QATE-45537 [Firmware] - Firmware authentication may fail if PCIe* errors occur or are injected

                  +
                  @@ -528,11 +526,11 @@

                  QATE-45537 [Firmware] - Firmware authentication may fail if PCIe* errors occ
                  -

                  Resolved Errata

                  +

                  Resolved Errata

                  This section lists those errata related to firmware which were previously resolved.

                  -

                  QATE-8109 [Firmware] - Driver and firmware versions are not reported to user space

                  -

                  +

                  QATE-8109 [Firmware] - Driver and firmware versions are not reported to user space

                  +
                  @@ -571,8 +569,8 @@

                  QATE-8109 [Firmware] - Driver and firmware versions are not reported to user

                  -

                  QATE-4051 - Unable to activate driver using QAT1.7 devices in full passthrough mode

                  - +

                  QATE-4051 - Unable to activate driver using QAT1.7 devices in full passthrough mode

                  +
                  @@ -618,8 +616,8 @@

                  QATE-4051 - Unable to activate driver using QAT1.7 devices in full passthrou

                  -

                  QATE-77659 Unexpected behaviour may be triggered by certain SGL sub-buffer layouts on CLC devices

                  - +

                  QATE-77659 Unexpected behaviour may be triggered by certain SGL sub-buffer layouts on CLC devices

                  +
                  @@ -659,8 +657,8 @@

                  QATE-77659 Unexpected behaviour may be triggered by certain SGL sub-buffer l

                  -

                  QATE-39335 Compression instances do not work on Virtual Machine with Linux Host QAT driver without CnVnR support

                  - +

                  QATE-39335 Compression instances do not work on Virtual Machine with Linux Host QAT driver without CnVnR support

                  +
                  @@ -700,7 +698,7 @@

                  QATE-39335 Compression instances do not work on Virtual Machine with Linux H
                  -

                  License

                  +

                  License

                  Copyright (c) Intel Corporation.
                   
                   Redistribution.  Redistribution and use in binary form, without modification, are permitted provided that the following conditions are met:
                  diff --git a/docs/RN/In-Tree/index.html b/docs/RN/In-Tree/index.html
                  index 2e4a0c1..f54713e 100644
                  --- a/docs/RN/In-Tree/index.html
                  +++ b/docs/RN/In-Tree/index.html
                  @@ -1,7 +1,7 @@
                   
                   
                   
                  -  
                  +  
                   
                     
                     Release Notes - In-Tree — Intel® QuickAssist Technology  documentation
                  @@ -16,9 +16,7 @@
                           
                           
                           
                  -        
                           
                  -        
                           
                           
                       
                  @@ -84,8 +82,8 @@
                           
                    -
                  • - +
                  • »
                  • +
                  • Release Notes - In-Tree
                  @@ -95,7 +93,7 @@
                  -

                  Release Notes - In-Tree

                  +

                  Release Notes - In-Tree

                  • Introduction
                      diff --git a/docs/RN/In-Tree/revision_history.html b/docs/RN/In-Tree/revision_history.html index b99fd9d..d8d104e 100644 --- a/docs/RN/In-Tree/revision_history.html +++ b/docs/RN/In-Tree/revision_history.html @@ -1,7 +1,7 @@ - + Revision History — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -84,9 +82,9 @@
                      @@ -96,8 +94,8 @@
                      -

                      Revision History

                      -

                  +

                  Revision History

                  +
                  diff --git a/docs/RN/Linux/2.X/description.html b/docs/RN/Linux/2.X/description.html index bad951b..860754b 100644 --- a/docs/RN/Linux/2.X/description.html +++ b/docs/RN/Linux/2.X/description.html @@ -1,7 +1,7 @@ - + Description of Release — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -97,9 +95,9 @@
                  @@ -109,7 +107,7 @@
                  -

                  Description of Release

                  +

                  Description of Release

                  This document contains information on the accompanying Intel® QuickAssist Technology (Intel® QAT) Hardware Version 2.0 Driver for Linux*.

                  For instructions on loading and running the release software, refer to the Getting Started Guide listed @@ -120,7 +118,7 @@

                  These release notes may include known issues with third-party or reference platform components that affect the operation of the software.

                  -

                  Features

                  +

                  Features

                  • Sym/Asym Crypto.

                  • TLS1.3 elliptical curves Montgomery encryption (curve 25519 and curve 448).

                  • @@ -134,7 +132,7 @@
                  -

                  Limitations

                  +

                  Limitations

                  • Symmetric Crypto Sample applications do not run out of box without configuration file update. Refer to the Getting Started Guide for additional information.

                  • Stateful decompression is not supported.

                  • @@ -146,9 +144,9 @@

                    Limitations -

                    Supported Operating Systems and Platforms

                    +

                    Supported Operating Systems and Platforms

                    The software in this release has been validated with the following configurations.

                    -
                  +
                  @@ -172,7 +170,7 @@

                  Supported Operating Systems and Platforms -

                  Version Numbering Scheme

                  +

                  Version Numbering Scheme

                  The version numbering scheme is name.os.major.minor.maintenance-build, where:

                  • name is “QAT20”.

                  • @@ -183,10 +181,10 @@

                    Version Numbering Scheme -

                    Package Version

                    +

                    Package Version

                    The following table shows the OS-specific package versions for each platform supported in this release.

                    -
                  +
                  @@ -204,11 +202,11 @@

                  Package Version -

                  Licensing for Linux* Acceleration Software

                  +

                  Licensing for Linux* Acceleration Software

                  The acceleration software is provided under the licenses listed in the following table. When using or redistributing dual-licensed components, you may do so under either license.

                  -
                  +
                  @@ -273,9 +271,9 @@

                  Licensing for Linux* Acceleration Software -

                  SHA256 Checksum Information

                  +

                  SHA256 Checksum Information

                  The following table provides SHA256 checksum information.

                  -
                  +
                  @@ -294,14 +292,14 @@

                  SHA256 Checksum Information -

                  List of Files in Release

                  +

                  List of Files in Release

                  The Bill of Materials (BOM), sometimes referred to as the BOM, is included as a text file in the released software package. This text file is labeled a filelist and is located at the top directory level for each release.

                  -

                  Intel QAT API Updates

                  +

                  Intel QAT API Updates

                  The Intel QAT Application Program Interface (API) version number is different from the software package version number.

                  For details on any changes to the Intel QAT APIs, refer to the @@ -314,7 +312,7 @@

                  Intel QAT API Updates

                  -

                  Technical Support

                  +

                  Technical Support

                  Intel offers support for this software at the API level only, defined in the Programmer’s Guide and API reference manuals listed in the Related Documentation section.

                  For technical support, including answers to questions not addressed in this @@ -322,7 +320,7 @@

                  Technical SupportIntel Support.

                  -

                  Environmental Assumptions

                  +

                  Environmental Assumptions

                  The following assumptions are made about the deployment environment:

                  +

                  Related Documentation

                  +
                  diff --git a/docs/RN/Linux/2.X/index.html b/docs/RN/Linux/2.X/index.html index 49b7eac..52b207c 100644 --- a/docs/RN/Linux/2.X/index.html +++ b/docs/RN/Linux/2.X/index.html @@ -1,7 +1,7 @@ - + Release Notes - Linux* — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -81,8 +79,8 @@
                    -
                  • - +
                  • »
                  • +
                  • Release Notes - Linux*
                  @@ -92,7 +90,7 @@
                  -

                  Release Notes - Linux*

                  +

                  Release Notes - Linux*

                  • Description of Release
                      diff --git a/docs/RN/Linux/2.X/known_issues.html b/docs/RN/Linux/2.X/known_issues.html index f771515..2f5ea8d 100644 --- a/docs/RN/Linux/2.X/known_issues.html +++ b/docs/RN/Linux/2.X/known_issues.html @@ -1,7 +1,7 @@ - + Known Issues — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -74,8 +72,8 @@
                        -
                      • - +
                      • »
                      • +
                      • Known Issues
                      @@ -85,10 +83,10 @@
                      -

                      Known Issues

                      +

                      Known Issues

                      -

                      QATE20-8981 [Sample Code] sym_dp_update_sample Functional Sample Code application execution will fail

                      -
                  +

                  QATE20-8981 [Sample Code] sym_dp_update_sample Functional Sample Code application execution will fail

                  +
                  @@ -131,8 +129,8 @@

                  QATE20-8981 [Sample Code] sym_dp_update_sample Functional Sample Code applic

                  -

                  QATE20-9131 [DC] - Incorrect XXHASH32 can be generated when using error injection and buffer overflow occurs when using accumulated XXHASH32

                  - +

                  QATE20-9131 [DC] - Incorrect XXHASH32 can be generated when using error injection and buffer overflow occurs when using accumulated XXHASH32

                  +
                  @@ -171,8 +169,8 @@

                  QATE20-9131 [DC] - Incorrect XXHASH32 can be generated when using error inje

                  -

                  QATE20-9671 [DC] - Accumulated XXHash32 is not supported for LZ4 decompress operations

                  - +

                  QATE20-9671 [DC] - Accumulated XXHash32 is not supported for LZ4 decompress operations

                  +
                  @@ -210,8 +208,8 @@

                  QATE20-9671 [DC] - Accumulated XXHash32 is not supported for LZ4 decompress

                  -

                  QATE20-19310 [DC] Additional configuration required to enable 8K data decompression performance

                  - +

                  QATE20-19310 [DC] Additional configuration required to enable 8K data decompression performance

                  +
                  @@ -253,8 +251,8 @@

                  QATE20-19310 [DC] Additional configuration required to enable 8K data decomp

                  -

                  QAT20-21905 SVM/AT cannot be enabled when PRS is disabled

                  - +

                  QAT20-21905 SVM/AT cannot be enabled when PRS is disabled

                  +
                  @@ -307,8 +305,8 @@

                  QAT20-21905 SVM/AT cannot be enabled when PRS is disabled -

                  QATE20-21751 [VIRT] - Missing VFs on host when attaching to VMs

                  -

                  +

                  QATE20-21751 [VIRT] - Missing VFs on host when attaching to VMs

                  +
                  @@ -346,8 +344,8 @@

                  QATE20-21751 [VIRT] - Missing VFs on host when attaching to VMs -

                  QATE20-22999 [Sample Code] Functional sample applications will fail if service is not enabled on first QAT Endpoint

                  -

                  +

                  QATE20-22999 [Sample Code] Functional sample applications will fail if service is not enabled on first QAT Endpoint

                  +
                  @@ -395,8 +393,8 @@

                  QATE20-22999 [Sample Code] Functional sample applications will fail if servi

                  -

                  QAT20-18924 [MCC] MCC SKUs may consume more power than expected

                  - +

                  QAT20-18924 [MCC] MCC SKUs may consume more power than expected

                  +
                  @@ -433,8 +431,8 @@

                  QAT20-18924 [MCC] MCC SKUs may consume more power than expected -

                  QAT20-20272 [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs

                  -

                  +

                  QAT20-20272 [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs

                  +
                  @@ -472,8 +470,8 @@

                  QAT20-20272 [XCC/MCC] Spurious heartbeat failures may be observed on some SK

                  -

                  QAT20-24970 [Firmware] Potential false positive heartbeat failures

                  - +

                  QAT20-24970 [Firmware] Potential false positive heartbeat failures

                  +
                  @@ -515,8 +513,8 @@

                  QAT20-24970 [Firmware] Potential false positive heartbeat failures -

                  QAT20-23946 [SVM/IOMMU] Request issue doesn’t appear in response

                  -

                  +

                  QAT20-23946 [SVM/IOMMU] Request issue doesn’t appear in response

                  +
                  @@ -557,8 +555,8 @@

                  QAT20-23946 [SVM/IOMMU] Request issue doesn’t appear in response -

                  QAT20-28723 [SVM/IOMMU] Incorrect reporting slice timeout due to page request latency

                  -

                  +

                  QAT20-28723 [SVM/IOMMU] Incorrect reporting slice timeout due to page request latency

                  +
                  diff --git a/docs/RN/Linux/2.X/resolved_issues.html b/docs/RN/Linux/2.X/resolved_issues.html index fc10dae..840c10e 100644 --- a/docs/RN/Linux/2.X/resolved_issues.html +++ b/docs/RN/Linux/2.X/resolved_issues.html @@ -1,7 +1,7 @@ - + Resolved Issues — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -74,8 +72,8 @@
                    -
                  • - +
                  • »
                  • +
                  • Resolved Issues
                  @@ -85,10 +83,10 @@
                  -

                  Resolved Issues

                  +

                  Resolved Issues

                  -

                  QATE20-3331 [Sample Code] Functional Sample Code Compression applications execution will fail

                  -
                  +

                  QATE20-3331 [Sample Code] Functional Sample Code Compression applications execution will fail

                  +
                  @@ -140,8 +138,8 @@

                  QATE20-3331 [Sample Code] Functional Sample Code Compression applications ex

                  -

                  QATE20-9755 [SRIOV] RLT_ERRLOG may be reported under high concurrent loads

                  - +

                  QATE20-9755 [SRIOV] RLT_ERRLOG may be reported under high concurrent loads

                  +
                  @@ -186,8 +184,8 @@

                  QATE20-9755 [SRIOV] RLT_ERRLOG may be reported under high concurrent loads
                  -

                  QATE20-9669 [DC] - Deflate Dynamic Decompression not optimized for payloads of source length < 4K, destination length <= 16K

                  -

                  +

                  QATE20-9669 [DC] - Deflate Dynamic Decompression not optimized for payloads of source length < 4K, destination length <= 16K

                  +
                  @@ -225,8 +223,8 @@

                  QATE20-9669 [DC] - Deflate Dynamic Decompression not optimized for payloads

                  -

                  QATE20-9394 [SRIOV] Virtual Functions (VFs) are not automatically detached by hypervisor after Physical Function (PF) restart

                  - +

                  QATE20-9394 [SRIOV] Virtual Functions (VFs) are not automatically detached by hypervisor after Physical Function (PF) restart

                  +
                  @@ -265,8 +263,8 @@

                  QATE20-9394 [SRIOV] Virtual Functions (VFs) are not automatically detached b

                  -

                  QATE20-3860 [SR-IOV] Virtual Functions (VFs) require restart after changing Physical Function (PF) Service configuration

                  - +

                  QATE20-3860 [SR-IOV] Virtual Functions (VFs) require restart after changing Physical Function (PF) Service configuration

                  +
                  @@ -311,8 +309,8 @@

                  QATE20-3860 [SR-IOV] Virtual Functions (VFs) require restart after changing

                  -

                  QATE20-10981 [DC] EOLB incorrectly set during stateful decompression

                  - +

                  QATE20-10981 [DC] EOLB incorrectly set during stateful decompression

                  +
                  @@ -350,8 +348,8 @@

                  QATE20-10981 [DC] EOLB incorrectly set during stateful decompression
                  -

                  QAT20-10966 DC - Invalid checksum value returned with multi-Gzip payload

                  -

                  +

                  QAT20-10966 DC - Invalid checksum value returned with multi-Gzip payload

                  +
                  @@ -390,8 +388,8 @@

                  QAT20-10966 DC - Invalid checksum value returned with multi-Gzip payload
                  -

                  QATE20-9756 [DC] - autoSelectBestHuffmanTree flag parameter is not honored by acceleration library

                  -

                  +

                  QATE20-9756 [DC] - autoSelectBestHuffmanTree flag parameter is not honored by acceleration library

                  +
                  @@ -427,8 +425,8 @@

                  QATE20-9756 [DC] - autoSelectBestHuffmanTree flag parameter is not honored b

                  -

                  QATE20-11081 [DC] - API cpaDcResetSession() does not reset E2E internal structure

                  - +

                  QATE20-11081 [DC] - API cpaDcResetSession() does not reset E2E internal structure

                  +
                  @@ -466,8 +464,8 @@

                  QATE20-11081 [DC] - API cpaDcResetSession() does not reset E2E internal stru

                  -

                  QATE20-9501 [DC] - Overflow can occur when using output buffer sizes defined by the cpaDcCompressBound API with Dynamic Deflate compression operations under concurrent execution

                  - +

                  QATE20-9501 [DC] - Overflow can occur when using output buffer sizes defined by the cpaDcCompressBound API with Dynamic Deflate compression operations under concurrent execution

                  +
                  @@ -509,8 +507,8 @@

                  QATE20-9501 [DC] - Overflow can occur when using output buffer sizes defined

                  -

                  QATE20-9764 [DC] - XXHash32 Checksum is not correct on Overflow when Flush Final is set

                  - +

                  QATE20-9764 [DC] - XXHash32 Checksum is not correct on Overflow when Flush Final is set

                  +
                  @@ -545,8 +543,8 @@

                  QATE20-9764 [DC] - XXHash32 Checksum is not correct on Overflow when Flush F

                  -

                  QATE20-9078 [CY] Concurrent sym;asym services not supported by Performance Sample Code (cpa_sample_code)

                  - +

                  QATE20-9078 [CY] Concurrent sym;asym services not supported by Performance Sample Code (cpa_sample_code)

                  +
                  @@ -583,8 +581,8 @@

                  QATE20-9078 [CY] Concurrent sym;asym services not supported by Performance S

                  -

                  QATE20-10480 [DC] - LZ4 compression request may result in a timeout event (-16 CPA_DC_WDOG_TIMER_ERR)

                  - +

                  QATE20-10480 [DC] - LZ4 compression request may result in a timeout event (-16 CPA_DC_WDOG_TIMER_ERR)

                  +
                  @@ -619,8 +617,8 @@

                  QATE20-10480 [DC] - LZ4 compression request may result in a timeout event (-

                  -

                  QAT20-10606 [Configuration] - Device configurations files are not copied to /etc/ for physical devices on systems with > 2 sockets

                  - +

                  QAT20-10606 [Configuration] - Device configurations files are not copied to /etc/ for physical devices on systems with > 2 sockets

                  +
                  @@ -669,8 +667,8 @@

                  QAT20-10606 [Configuration] - Device configurations files are not copied to

                  -

                  QAT20-12942 [DC] - Overflow can occur when using output buffer sizes defined by the cpaDcCompressBound API with Dynamic Deflate compression operations under concurrent execution

                  - +

                  QAT20-12942 [DC] - Overflow can occur when using output buffer sizes defined by the cpaDcCompressBound API with Dynamic Deflate compression operations under concurrent execution

                  +
                  @@ -711,8 +709,8 @@

                  QAT20-12942 [DC] - Overflow can occur when using output buffer sizes defined

                  -

                  QAT20-11092 [SRIOV] Default number of VF devices is not available for 4S+ platform

                  - +

                  QAT20-11092 [SRIOV] Default number of VF devices is not available for 4S+ platform

                  +
                  @@ -752,8 +750,8 @@

                  QAT20-11092 [SRIOV] Default number of VF devices is not available for 4S+ pl

                  -

                  QATE20-9754 [DC] - Deflate Decompression Overflow may result in a timeout event (-16 CPA_DC_WDOG_TIMER_ERR)

                  - +

                  QATE20-9754 [DC] - Deflate Decompression Overflow may result in a timeout event (-16 CPA_DC_WDOG_TIMER_ERR)

                  +
                  @@ -791,8 +789,8 @@

                  QATE20-9754 [DC] - Deflate Decompression Overflow may result in a timeout ev

                  -

                  QAT20-23616 [Firmware] Shared Virtual Memory (SVM) and Address Translation (AT) disabled

                  - +

                  QAT20-23616 [Firmware] Shared Virtual Memory (SVM) and Address Translation (AT) disabled

                  +
                  diff --git a/docs/RN/Linux/2.X/revision_history.html b/docs/RN/Linux/2.X/revision_history.html index 4040d95..fc783e0 100644 --- a/docs/RN/Linux/2.X/revision_history.html +++ b/docs/RN/Linux/2.X/revision_history.html @@ -1,7 +1,7 @@ - + Revision History — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -81,9 +79,9 @@
                  @@ -93,8 +91,8 @@
                  -

                  Revision History

                  -
                  +

                  Revision History

                  +
                  diff --git a/docs/RN/Linux/2.X/updates.html b/docs/RN/Linux/2.X/updates.html index 73a67e4..8a903e5 100644 --- a/docs/RN/Linux/2.X/updates.html +++ b/docs/RN/Linux/2.X/updates.html @@ -1,7 +1,7 @@ - + Release Updates — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -119,9 +117,9 @@
                  @@ -131,12 +129,12 @@
                  -

                  Release Updates

                  +

                  Release Updates

                  -

                  Known Issues

                  +

                  Known Issues

                  -

                  QATE20-8981 [Sample Code] sym_dp_update_sample Functional Sample Code application execution will fail

                  -
                  +

                  QATE20-8981 [Sample Code] sym_dp_update_sample Functional Sample Code application execution will fail

                  +
                  @@ -179,8 +177,8 @@

                  QATE20-8981 [Sample Code] sym_dp_update_sample Functional Sample Code applic

                  -

                  QATE20-9131 [DC] - Incorrect XXHASH32 can be generated when using error injection and buffer overflow occurs when using accumulated XXHASH32

                  - +

                  QATE20-9131 [DC] - Incorrect XXHASH32 can be generated when using error injection and buffer overflow occurs when using accumulated XXHASH32

                  +
                  @@ -219,8 +217,8 @@

                  QATE20-9131 [DC] - Incorrect XXHASH32 can be generated when using error inje

                  -

                  QATE20-9671 [DC] - Accumulated XXHash32 is not supported for LZ4 decompress operations

                  - +

                  QATE20-9671 [DC] - Accumulated XXHash32 is not supported for LZ4 decompress operations

                  +
                  @@ -258,8 +256,8 @@

                  QATE20-9671 [DC] - Accumulated XXHash32 is not supported for LZ4 decompress

                  -

                  QATE20-19310 [DC] Additional configuration required to enable 8K data decompression performance

                  - +

                  QATE20-19310 [DC] Additional configuration required to enable 8K data decompression performance

                  +
                  @@ -301,8 +299,8 @@

                  QATE20-19310 [DC] Additional configuration required to enable 8K data decomp

                  -

                  QAT20-21905 SVM/AT cannot be enabled when PRS is disabled

                  - +

                  QAT20-21905 SVM/AT cannot be enabled when PRS is disabled

                  +
                  @@ -355,8 +353,8 @@

                  QAT20-21905 SVM/AT cannot be enabled when PRS is disabled -

                  QATE20-21751 [VIRT] - Missing VFs on host when attaching to VMs

                  -

                  +

                  QATE20-21751 [VIRT] - Missing VFs on host when attaching to VMs

                  +
                  @@ -394,8 +392,8 @@

                  QATE20-21751 [VIRT] - Missing VFs on host when attaching to VMs -

                  QATE20-22999 [Sample Code] Functional sample applications will fail if service is not enabled on first QAT Endpoint

                  -

                  +

                  QATE20-22999 [Sample Code] Functional sample applications will fail if service is not enabled on first QAT Endpoint

                  +
                  @@ -443,8 +441,8 @@

                  QATE20-22999 [Sample Code] Functional sample applications will fail if servi

                  -

                  QAT20-18924 [MCC] MCC SKUs may consume more power than expected

                  - +

                  QAT20-18924 [MCC] MCC SKUs may consume more power than expected

                  +
                  @@ -481,8 +479,8 @@

                  QAT20-18924 [MCC] MCC SKUs may consume more power than expected -

                  QAT20-20272 [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs

                  -

                  +

                  QAT20-20272 [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs

                  +
                  @@ -520,8 +518,8 @@

                  QAT20-20272 [XCC/MCC] Spurious heartbeat failures may be observed on some SK

                  -

                  QAT20-24970 [Firmware] Potential false positive heartbeat failures

                  - +

                  QAT20-24970 [Firmware] Potential false positive heartbeat failures

                  +
                  @@ -563,8 +561,8 @@

                  QAT20-24970 [Firmware] Potential false positive heartbeat failures -

                  QAT20-23946 [SVM/IOMMU] Request issue doesn’t appear in response

                  -

                  +

                  QAT20-23946 [SVM/IOMMU] Request issue doesn’t appear in response

                  +
                  @@ -605,8 +603,8 @@

                  QAT20-23946 [SVM/IOMMU] Request issue doesn’t appear in response -

                  QAT20-28723 [SVM/IOMMU] Incorrect reporting slice timeout due to page request latency

                  -

                  +

                  QAT20-28723 [SVM/IOMMU] Incorrect reporting slice timeout due to page request latency

                  +
                  @@ -649,10 +647,10 @@

                  QAT20-28723 [SVM/IOMMU] Incorrect reporting slice timeout due to page reques
                  -

                  Resolved Issues

                  +

                  Resolved Issues

                  -

                  QATE20-3331 [Sample Code] Functional Sample Code Compression applications execution will fail

                  -

                  +

                  QATE20-3331 [Sample Code] Functional Sample Code Compression applications execution will fail

                  +
                  @@ -704,8 +702,8 @@

                  QATE20-3331 [Sample Code] Functional Sample Code Compression applications ex

                  -

                  QATE20-9755 [SRIOV] RLT_ERRLOG may be reported under high concurrent loads

                  - +

                  QATE20-9755 [SRIOV] RLT_ERRLOG may be reported under high concurrent loads

                  +
                  @@ -750,8 +748,8 @@

                  QATE20-9755 [SRIOV] RLT_ERRLOG may be reported under high concurrent loads
                  -

                  QATE20-9669 [DC] - Deflate Dynamic Decompression not optimized for payloads of source length < 4K, destination length <= 16K

                  -

                  +

                  QATE20-9669 [DC] - Deflate Dynamic Decompression not optimized for payloads of source length < 4K, destination length <= 16K

                  +
                  @@ -789,8 +787,8 @@

                  QATE20-9669 [DC] - Deflate Dynamic Decompression not optimized for payloads

                  -

                  QATE20-9394 [SRIOV] Virtual Functions (VFs) are not automatically detached by hypervisor after Physical Function (PF) restart

                  - +

                  QATE20-9394 [SRIOV] Virtual Functions (VFs) are not automatically detached by hypervisor after Physical Function (PF) restart

                  +
                  @@ -829,8 +827,8 @@

                  QATE20-9394 [SRIOV] Virtual Functions (VFs) are not automatically detached b

                  -

                  QATE20-3860 [SR-IOV] Virtual Functions (VFs) require restart after changing Physical Function (PF) Service configuration

                  - +

                  QATE20-3860 [SR-IOV] Virtual Functions (VFs) require restart after changing Physical Function (PF) Service configuration

                  +
                  @@ -875,8 +873,8 @@

                  QATE20-3860 [SR-IOV] Virtual Functions (VFs) require restart after changing

                  -

                  QATE20-10981 [DC] EOLB incorrectly set during stateful decompression

                  - +

                  QATE20-10981 [DC] EOLB incorrectly set during stateful decompression

                  +
                  @@ -914,8 +912,8 @@

                  QATE20-10981 [DC] EOLB incorrectly set during stateful decompression
                  -

                  QAT20-10966 DC - Invalid checksum value returned with multi-Gzip payload

                  -

                  +

                  QAT20-10966 DC - Invalid checksum value returned with multi-Gzip payload

                  +
                  @@ -954,8 +952,8 @@

                  QAT20-10966 DC - Invalid checksum value returned with multi-Gzip payload
                  -

                  QATE20-9756 [DC] - autoSelectBestHuffmanTree flag parameter is not honored by acceleration library

                  -

                  +

                  QATE20-9756 [DC] - autoSelectBestHuffmanTree flag parameter is not honored by acceleration library

                  +
                  @@ -991,8 +989,8 @@

                  QATE20-9756 [DC] - autoSelectBestHuffmanTree flag parameter is not honored b

                  -

                  QATE20-11081 [DC] - API cpaDcResetSession() does not reset E2E internal structure

                  - +

                  QATE20-11081 [DC] - API cpaDcResetSession() does not reset E2E internal structure

                  +
                  @@ -1030,8 +1028,8 @@

                  QATE20-11081 [DC] - API cpaDcResetSession() does not reset E2E internal stru

                  -

                  QATE20-9501 [DC] - Overflow can occur when using output buffer sizes defined by the cpaDcCompressBound API with Dynamic Deflate compression operations under concurrent execution

                  - +

                  QATE20-9501 [DC] - Overflow can occur when using output buffer sizes defined by the cpaDcCompressBound API with Dynamic Deflate compression operations under concurrent execution

                  +
                  @@ -1073,8 +1071,8 @@

                  QATE20-9501 [DC] - Overflow can occur when using output buffer sizes defined

                  -

                  QATE20-9764 [DC] - XXHash32 Checksum is not correct on Overflow when Flush Final is set

                  - +

                  QATE20-9764 [DC] - XXHash32 Checksum is not correct on Overflow when Flush Final is set

                  +
                  @@ -1109,8 +1107,8 @@

                  QATE20-9764 [DC] - XXHash32 Checksum is not correct on Overflow when Flush F

                  -

                  QATE20-9078 [CY] Concurrent sym;asym services not supported by Performance Sample Code (cpa_sample_code)

                  - +

                  QATE20-9078 [CY] Concurrent sym;asym services not supported by Performance Sample Code (cpa_sample_code)

                  +
                  @@ -1147,8 +1145,8 @@

                  QATE20-9078 [CY] Concurrent sym;asym services not supported by Performance S

                  -

                  QATE20-10480 [DC] - LZ4 compression request may result in a timeout event (-16 CPA_DC_WDOG_TIMER_ERR)

                  - +

                  QATE20-10480 [DC] - LZ4 compression request may result in a timeout event (-16 CPA_DC_WDOG_TIMER_ERR)

                  +
                  @@ -1183,8 +1181,8 @@

                  QATE20-10480 [DC] - LZ4 compression request may result in a timeout event (-

                  -

                  QAT20-10606 [Configuration] - Device configurations files are not copied to /etc/ for physical devices on systems with > 2 sockets

                  - +

                  QAT20-10606 [Configuration] - Device configurations files are not copied to /etc/ for physical devices on systems with > 2 sockets

                  +
                  @@ -1233,8 +1231,8 @@

                  QAT20-10606 [Configuration] - Device configurations files are not copied to

                  -

                  QAT20-12942 [DC] - Overflow can occur when using output buffer sizes defined by the cpaDcCompressBound API with Dynamic Deflate compression operations under concurrent execution

                  - +

                  QAT20-12942 [DC] - Overflow can occur when using output buffer sizes defined by the cpaDcCompressBound API with Dynamic Deflate compression operations under concurrent execution

                  +
                  @@ -1275,8 +1273,8 @@

                  QAT20-12942 [DC] - Overflow can occur when using output buffer sizes defined

                  -

                  QAT20-11092 [SRIOV] Default number of VF devices is not available for 4S+ platform

                  - +

                  QAT20-11092 [SRIOV] Default number of VF devices is not available for 4S+ platform

                  +
                  @@ -1316,8 +1314,8 @@

                  QAT20-11092 [SRIOV] Default number of VF devices is not available for 4S+ pl

                  -

                  QATE20-9754 [DC] - Deflate Decompression Overflow may result in a timeout event (-16 CPA_DC_WDOG_TIMER_ERR)

                  - +

                  QATE20-9754 [DC] - Deflate Decompression Overflow may result in a timeout event (-16 CPA_DC_WDOG_TIMER_ERR)

                  +
                  @@ -1355,8 +1353,8 @@

                  QATE20-9754 [DC] - Deflate Decompression Overflow may result in a timeout ev

                  -

                  QAT20-23616 [Firmware] Shared Virtual Memory (SVM) and Address Translation (AT) disabled

                  - +

                  QAT20-23616 [Firmware] Shared Virtual Memory (SVM) and Address Translation (AT) disabled

                  +
                  diff --git a/docs/RN/VMware/2.X/description.html b/docs/RN/VMware/2.X/description.html index cc775ed..5343b52 100644 --- a/docs/RN/VMware/2.X/description.html +++ b/docs/RN/VMware/2.X/description.html @@ -1,7 +1,7 @@ - + Description of Release — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -91,9 +89,9 @@
                  @@ -103,7 +101,7 @@
                  -

                  Description of Release

                  +

                  Description of Release

                  This document contains information on the accompanying Intel® QuickAssist Technology (Intel® QAT) Hardware Version 2.0 Driver for VMware ESXi*.

                  This software enables single root I/O virtualization (SR-IOV) for the Intel QAT driver on VMware ESXi*. @@ -119,7 +117,7 @@

                  Description of ReleaseThese release notes may include known issues with third-party or reference platform components that affect the operation of the software.

                  -

                  Features

                  +

                  Features

                  • Sym/Asym Crypto

                  • TLS1.3 elliptical curves Montgomery encryption (curve 25519 and curve 448)

                  • @@ -134,7 +132,7 @@

                    Features -

                    Limitations

                    +

                    Limitations

                    • Symmetric services are not configured by default. Refer to the Device configuration section in README.txt for additional information.

                    • @@ -151,8 +149,8 @@

                      Limitations -

                      Package Information

                      -

                  +

                  Package Information

                  +
                  @@ -186,8 +184,8 @@

                  Package Information -

                  List of Files in Release

                  -

                  +

                  List of Files in Release

                  +
                  @@ -211,7 +209,7 @@

                  List of Files in Release -

                  Supported Guest Drivers

                  +

                  Supported Guest Drivers

                  The software in this release has been validated against the following guest drivers:

                    @@ -222,7 +220,7 @@

                    Supported Guest Drivers
                    -

                    Technical Support

                    +

                    Technical Support

                    Intel offers only support for this software at the Application Programming Interface (API) level, defined in the Programmer’s Guide and API reference manuals listed in the Related Documentation section.

                    @@ -233,7 +231,7 @@

                    Technical Support -

                    Environmental Assumptions

                    +

                    Environmental Assumptions

                    The following assumptions are made about the deployment environment:

                  +

                  Related Documentation

                  +
                  diff --git a/docs/RN/VMware/2.X/index.html b/docs/RN/VMware/2.X/index.html index b4e484b..57aa4d0 100644 --- a/docs/RN/VMware/2.X/index.html +++ b/docs/RN/VMware/2.X/index.html @@ -1,7 +1,7 @@ - + Release Notes - VMware* — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -81,8 +79,8 @@
                    -
                  • - +
                  • »
                  • +
                  • Release Notes - VMware*
                  @@ -92,7 +90,7 @@
                  -

                  Release Notes - VMware*

                  +

                  Release Notes - VMware*

                  • Description of Release
                      diff --git a/docs/RN/VMware/2.X/known_issues.html b/docs/RN/VMware/2.X/known_issues.html index 2461e9e..67c3096 100644 --- a/docs/RN/VMware/2.X/known_issues.html +++ b/docs/RN/VMware/2.X/known_issues.html @@ -1,7 +1,7 @@ - + Known Issues — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -74,8 +72,8 @@
                        -
                      • - +
                      • »
                      • +
                      • Known Issues
                      @@ -85,10 +83,10 @@
                      -

                      Known Issues

                      +

                      Known Issues

                      -

                      QAT20-23616 - [Firmware] Shared Virtual Memory (SVM) and Address Translation (AT) disabled

                      -
                  +

                  QAT20-23616 - [Firmware] Shared Virtual Memory (SVM) and Address Translation (AT) disabled

                  +
                  @@ -118,8 +116,8 @@

                  QAT20-23616 - [Firmware] Shared Virtual Memory (SVM) and Address Translation

                  -

                  QAT20-18924 - [MCC] MCC SKUs may consume more power than expected

                  - +

                  QAT20-18924 - [MCC] MCC SKUs may consume more power than expected

                  +
                  @@ -149,8 +147,8 @@

                  QAT20-18924 - [MCC] MCC SKUs may consume more power than expected -

                  QAT20-20272 - [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs

                  -

                  +

                  QAT20-20272 - [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs

                  +
                  @@ -181,8 +179,8 @@

                  QAT20-20272 - [XCC/MCC] Spurious heartbeat failures may be observed on some

                  -

                  VQQ-1542 - VM with enabled vIOMMU may crash with IOMMU fault

                  - +

                  VQQ-1542 - VM with enabled vIOMMU may crash with IOMMU fault

                  +
                  @@ -211,8 +209,8 @@

                  VQQ-1542 - VM with enabled vIOMMU may crash with IOMMU fault -

                  VQQ-1553 - Incompatibility between legacy 1.7 and 2.0 drivers

                  -

                  +

                  VQQ-1553 - Incompatibility between legacy 1.7 and 2.0 drivers

                  +
                  diff --git a/docs/RN/VMware/2.X/resolved_issues.html b/docs/RN/VMware/2.X/resolved_issues.html index 0ed18e5..a39f01e 100644 --- a/docs/RN/VMware/2.X/resolved_issues.html +++ b/docs/RN/VMware/2.X/resolved_issues.html @@ -1,7 +1,7 @@ - + Resolved Issues — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -74,8 +72,8 @@
                    -
                  • - +
                  • »
                  • +
                  • Resolved Issues
                  @@ -85,10 +83,10 @@
                  -

                  Resolved Issues

                  +

                  Resolved Issues

                  -

                  VQQ-1618 - Driver may accept incorrect service mask configuration and treat it as default configuration

                  -
                  +

                  VQQ-1618 - Driver may accept incorrect service mask configuration and treat it as default configuration

                  +
                  diff --git a/docs/RN/VMware/2.X/revision_history.html b/docs/RN/VMware/2.X/revision_history.html index c36d460..8464555 100644 --- a/docs/RN/VMware/2.X/revision_history.html +++ b/docs/RN/VMware/2.X/revision_history.html @@ -1,7 +1,7 @@ - + Revision History — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -81,9 +79,9 @@
                  @@ -93,8 +91,8 @@
                  -

                  Revision History

                  -
                  +

                  Revision History

                  +
                  diff --git a/docs/RN/VMware/2.X/updates.html b/docs/RN/VMware/2.X/updates.html index aa2eeee..e043225 100644 --- a/docs/RN/VMware/2.X/updates.html +++ b/docs/RN/VMware/2.X/updates.html @@ -1,7 +1,7 @@ - + Release Updates — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -95,9 +93,9 @@
                  @@ -107,12 +105,12 @@
                  -

                  Release Updates

                  +

                  Release Updates

                  -

                  Known Issues

                  +

                  Known Issues

                  -

                  QAT20-23616 - [Firmware] Shared Virtual Memory (SVM) and Address Translation (AT) disabled

                  -
                  +

                  QAT20-23616 - [Firmware] Shared Virtual Memory (SVM) and Address Translation (AT) disabled

                  +
                  @@ -142,8 +140,8 @@

                  QAT20-23616 - [Firmware] Shared Virtual Memory (SVM) and Address Translation

                  -

                  QAT20-18924 - [MCC] MCC SKUs may consume more power than expected

                  - +

                  QAT20-18924 - [MCC] MCC SKUs may consume more power than expected

                  +
                  @@ -173,8 +171,8 @@

                  QAT20-18924 - [MCC] MCC SKUs may consume more power than expected -

                  QAT20-20272 - [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs

                  -

                  +

                  QAT20-20272 - [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs

                  +
                  @@ -205,8 +203,8 @@

                  QAT20-20272 - [XCC/MCC] Spurious heartbeat failures may be observed on some

                  -

                  VQQ-1542 - VM with enabled vIOMMU may crash with IOMMU fault

                  - +

                  VQQ-1542 - VM with enabled vIOMMU may crash with IOMMU fault

                  +
                  @@ -235,8 +233,8 @@

                  VQQ-1542 - VM with enabled vIOMMU may crash with IOMMU fault -

                  VQQ-1553 - Incompatibility between legacy 1.7 and 2.0 drivers

                  -

                  +

                  VQQ-1553 - Incompatibility between legacy 1.7 and 2.0 drivers

                  +
                  @@ -265,10 +263,10 @@

                  VQQ-1553 - Incompatibility between legacy 1.7 and 2.0 drivers -

                  Resolved Issues

                  +

                  Resolved Issues

                  -

                  VQQ-1618 - Driver may accept incorrect service mask configuration and treat it as default configuration

                  -
                  +

                  VQQ-1618 - Driver may accept incorrect service mask configuration and treat it as default configuration

                  +
                  diff --git a/docs/RN/index.html b/docs/RN/index.html index bea33e1..c77215b 100644 --- a/docs/RN/index.html +++ b/docs/RN/index.html @@ -1,7 +1,7 @@ - + Release Notes — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -74,8 +72,8 @@
                    -
                  • - +
                  • »
                  • +
                  • Release Notes
                  @@ -85,7 +83,7 @@
                  -

                  Release Notes

                  +

                  Release Notes

                  • Release Notes - In-Tree
                      diff --git a/docs/VIRT/index.html b/docs/VIRT/index.html index 8f3200f..f12b427 100644 --- a/docs/VIRT/index.html +++ b/docs/VIRT/index.html @@ -1,7 +1,7 @@ - + Virtualization Deployment Guide — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -57,8 +55,9 @@
                    • Programmer’s Guide
                    • Virtualization Deployment Guide
                    • @@ -82,8 +81,8 @@
                        -
                      • - +
                      • »
                      • +
                      • Virtualization Deployment Guide
                      @@ -93,22 +92,23 @@
                      -

                      Virtualization Deployment Guide

                      +

                      Virtualization Deployment Guide

                      • Introduction
                      • -
                      • System Environment Preparation
                          +
                        • Installation Overview
                        • +
                        • Host System Environment Preparation
                        • -
                        • System Configuration
                            -
                          • Installing Intel QAT on the Host
                          • -
                          • Setting Up sIOV
                          • -
                          • Passing-through the VF/VQAT to the Guest
                          • -
                          • Installing Intel QAT on the Guest
                          • +
                          • Virtualization with OOT
                          • Revision History
                          • diff --git a/docs/VIRT/introduction.html b/docs/VIRT/introduction.html index 5bc7cb9..a6866fd 100644 --- a/docs/VIRT/introduction.html +++ b/docs/VIRT/introduction.html @@ -1,7 +1,7 @@ - + Introduction — Intel® QuickAssist Technology documentation @@ -16,15 +16,13 @@ - - - + @@ -57,8 +55,9 @@
                          • Programmer’s Guide
                          • Virtualization Deployment Guide
                          • @@ -82,9 +81,9 @@
                            @@ -94,11 +93,18 @@
                            -

                            Introduction

                            -

                            This document provides the details on using Intel® Virtualization Technology -(Intel® VT) with the Intel® QuickAssist Technology (Intel® QAT) Software -This includes SR-IOV and Intel Scalable IOV (sIOV).

                            -

                            Below are the basic steps to deploy virtualization with Intel QAT. The following sections describe the step-by-step instructions to perform all these actions.

                            +

                            Introduction

                            +

                            This document provides details on using Intel® Virtualization Technology +(Intel® VT) with the Intel® QuickAssist Technology (Intel® QAT).

                            +

                            This document also includes instructions for both SR-IOV and Intel Scalable IOV (sIOV).

                            +
                            +

                            Note

                            +

                            At this time sIOV is only supported with OOT QAT2.0 driver

                            +
                            +
                            +
                            +

                            Installation Overview

                            +

                            Below are the basic steps to deploy Intel QAT in a virtualized environment. The following sections describe the step-by-step instructions to perform all these actions.

                            1. Update the system BIOS.

                            2. Configure the Host Operating System (OS).

                            3. @@ -108,7 +114,8 @@

                            Important

                            -

                            These instructions are intended to be used with the out-of-tree acceleration driver.

                            +

                            These instructions are intended to be used with the out-of-tree acceleration driver. For details on setting up +virtualization with the in-tree driver (qatlib) please refer to Running in a Virtual Machine section of QATlib User’s Guide.

                            @@ -117,7 +124,7 @@

                            diff --git a/docs/VIRT/oot_installation.html b/docs/VIRT/oot_installation.html new file mode 100644 index 0000000..81e283d --- /dev/null +++ b/docs/VIRT/oot_installation.html @@ -0,0 +1,503 @@ + + + + + + + Virtualization with OOT — Intel® QuickAssist Technology documentation + + + + + + + + + + + + + + + + + + + + +
                            + + +
                            + +
                            +
                            +
                            + +
                            +
                            +
                            +
                            + +
                            +

                            Virtualization with OOT

                            +

                            This section describes the steps required to enable QAT in a virtualized environment using the OOT package. Details on setting up virtualization with +the in-tree stack are included in Running in a Virtual Machine section of QATlib User’s Guide.

                            +
                            +

                            Installing Intel QAT on the Host

                            +
                            +

                            Note

                            +

                            For complete installation instructions refer to the Getting Started Guide.

                            +
                            +

                            Assuming the Intel QAT package dependencies are met, the following steps can be performed to install the Intel QAT driver:

                            +
                              +
                            1. Obtain the official released Intel QAT package: Intel® QuickAssist Technology Driver for Linux* - HW Version 2.0

                            2. +
                            3. Configure the Intel QAT driver to enable the SR-IOV feature on the host using the following command:

                              +
                              +
                              ./configure --enable-icp-sriov=host
                              +
                              +
                              +
                              +

                              Note

                              +

                              This is required for both SR-IOV and sIOV.

                              +
                              +
                              +
                            4. +
                            5. Install the Intel QAT software using the following command:

                              +
                              +
                              sudo make -j install
                              +
                              +
                              +
                              +
                            6. +
                            7. Add your user to the qat group by running the below command, and re-login to make the change effective.

                              +
                              +
                              sudo usermod -a -G qat `whoami`
                              +sudo su -l $USER
                              +
                              +
                              +
                              +
                            8. +
                            9. Verify the Virtual Functions (VF) have been started using the following command:

                              +
                              +
                              service qat_service status
                              +
                              +
                              +
                              +

                              Note

                              +

                              For Intel QAT 2.0 devices, the Physical Function (PF) device ID is 4940 or 4942 and the Virtual Function (VF) device ID is 4941 or 4943.

                              +
                              +
                              +
                            10. +
                            +
                            +

                            Software Installation on the Host Demo

                            +

                            Here is a demonstration of how to install the Intel QAT software package on the host.

                            + + +
                            +

                            +
                            +
                            +
                            +
                            +

                            Setting Up sIOV

                            +
                            +

                            Note

                            +

                            If sIOV is required rather than SR-IOV, the PF configuration files under /etc/ need to be modified. Detailed steps are listed below.

                            +
                            +
                              +
                            1. Modify the PF configuration file to enable sIOV.

                              +
                              +
                              vim /etc/4xxx_dev0.conf
                              +
                              +
                              +

                              The configuration file for the sIOV section looks like the example below. By default, NumberAdis is set to 0 which disables sIOV. This value needs to be modified to a value within the range [1,64]. This needs to be done for each Intel QAT endpoint that sIOV is required.

                              +
                              +../_images/configure_sIOV.png +
                              +
                              +
                            2. +
                            3. Restart the Intel QAT driver to enable the new configuration by running the following command:

                              +
                              +
                              service qat_service restart
                              +
                              +
                              +
                              +

                              Important

                              +

                              Enabling sIOV and SR-IOV on a per device basis is mutually exclusive. By setting different values of NumberAdis in the device configuration file, you can enable sIOV on qat_dev0 and enable SR-IOV on other devices at same time.

                              +
                              +
                              +
                            4. +
                            5. Verify sIOV is enabled on the device using the vqat_ctl utility. Refer to the section Using the vqat_ctl utility for more details.

                            6. +
                            +
                            +

                            Using the vqat_ctl utility

                            +

                            The vqat_ctl utility returns the available sym, asym or dc ADI resources on the PFs. If sIOV is not enabled, available sym, asym or dc will return 0. For devices that have already enabled sIOV, you can create the required vdev/vqat devices.

                            +
                            +

                            Note

                            +
                              +
                            • In the example output below NumberAdis is set to 4 and ServicesEnabled is set to sym;dc in the /etc/4xxx_dev0.conf configuration file.

                            • +
                            • The vqat_ctl utility is located in the $ICP_ROOT/build folder where $ICP_ROOT is the directory where the Intel QAT package was extracted.

                            • +
                            +
                            +

                            The command to return the available ADI resources (sym, asym or dc) is the following:

                            +
                            +
                            ./build/vqat_ctl show
                            +
                            +
                            +
                            +../_images/vqat_ctl_show.png +
                            +
                            +

                            The -help parameter can be used to return usage instructions:

                            +
                            +
                            ./build/vqat_ctl -help
                            +
                            +
                            +
                            +../_images/vqat_ctl_help.png +
                            +
                            +

                            The following example will create 1 VQAT for sym and 1 VQAT for dc on the first Intel QAT endpoint.

                            +
                              +
                            1. Create sym VQAT:

                              +
                              +
                              ./build/vqat_ctl create 0000:6b:00.0 sym
                              +
                              +
                              +
                              +../_images/vqat_ctl_create_sym.png +
                              +
                              +
                            2. +
                            3. Create dc VQAT:

                              +
                              +
                              ./build/vqat_ctl create 0000:6b:00.0 dc
                              +
                              +
                              +
                              +../_images/vqat_ctl_create_dc.png +
                              +
                              +
                            4. +
                            5. Display the VQAT devices that were created:

                              +
                              +
                              ./build/vqat_ctl show
                              +
                              +
                              +
                              +../_images/vqat_ctl_show2.png +
                              +
                              +
                            6. +
                            +
                            +
                            +
                            +

                            Passing-through the VF/VQAT to the Guest

                            +
                            +

                            Note

                            +

                            When using libvirt, both sIOV VQATs or SR-IOV VFs are attached to a guest OS using a xml configuration file. However, +the addressing scheme of both differ because VQATs are identified using UUIDs, while VFs use PCIe BDF (Bus:Device.Function) numbering.

                            +
                            +
                            +

                            SR-IOV VF Configuration

                            +
                            +

                            Note

                            +

                            virt-manager GUI can be used to pass-through to the guest. The following steps utilize the libvirt command line utility to accomplish the same.

                            +
                            +
                              +
                            1. Create the VF device file needed.

                              +
                              +
                              vi VF1.xml
                              +
                              +
                              +

                              Contents of the file should look like the following. The BDF on the <address bus=...> line will need to be updated for each VF to be mapped:

                              +
                              +
                              <?xml version="1.0" encoding="UTF-8"?>
                              +<hostdev managed="yes" mode="subsystem" type="pci">
                              +    <source>
                              +    <address bus="0xe9" domain="0x0000" function="0x1" slot="0x00"/>
                              +    </source>
                              +</hostdev>
                              +
                              +
                              +
                              +
                              +

                              Note

                              +

                              Repeat this process for additional VFs (either in the same file or separate files).

                              +
                              +
                              +
                            2. +
                            3. Assign the VF to the guest Virtual Machine (VM).

                              +
                              +

                              The following command removes the VF from the host and attaches the VF to the guest named $VM_NAME:

                              +
                              +
                              virsh nodedev-dettach pci_0000_e9_00_1
                              +virsh attach-device {$VM_NAME} VF1.xml
                              +
                              +
                              +
                              +
                              +
                            4. +
                            5. Remove the VF from the guest VM.

                              +
                              +

                              The following commands can be used to remove the VF from the guest named $VM_NAME and re-attaches the VF to the host:

                              +
                              +
                              virsh detach-device {$VM_NAME} VF1.xml
                              +virsh nodedev-reattach pci_0000_e9_00_1
                              +
                              +
                              +
                              +
                              +
                            6. +
                            +
                            +
                            +

                            sIOV VQAT Configuration

                            +
                              +
                            1. Create the VQAT device file needed.

                              +
                              +
                              touch dev1.xml
                              +
                              +
                              +

                              The uuid used below is created by vqat_ctl. The command vqat_ctl show can be used to return the VQATs and their UUIDs. Contents of the file +should look like the following:

                              +
                              +
                              <?xml version="1.0" encoding="UTF-8"?>
                              +<hostdev mode='subsystem' type='mdev' model='vfio-pci'>
                              +    <source>
                              +    <address uuid='679fdae3-1930-4815-8896-220bfc5354b5'/>
                              +    </source>
                              +</hostdev>
                              +
                              +
                              +
                              +
                              +
                              +

                              Note

                              +
                                +
                              • The uuid in the file above can be seen with the vqat_ctl show command.

                              • +
                              • Repeat this step for each additional VQAT that needs to be mapped. This can be done in the same file or a separate files.

                              • +
                              +
                              +
                            2. +
                            3. Assign the VQAT to the guest Virtual Machine (VM).

                              +
                              +
                              +

                              Important

                              +

                              Currently, VQAT doesn’t support hot plug-in, so when the VM configuration file changes, the guest OS needs to be restarted.

                              +
                              +

                              The following commands attach the VQAT devices to the guest named $VM_NAME and restart the guest:

                              +
                              +
                              virsh attach-device {$VM_NAME} dev1.xml --config
                              +virsh shutdown {$VM_NAME}
                              +virsh start {$VM_NAME}
                              +
                              +
                              +
                              +
                              +
                            4. +
                            5. Remove the VQAT from the guest VM.

                              +
                              +

                              The following commands remove the specified VQAT device from the guest named $VM_NAME and restart the guest:

                              +
                              +
                              virsh detach-device {$VM_NAME} dev1.xml --config
                              +virsh shutdown {$VM_NAME}
                              +virsh start {$VM_NAME}
                              +
                              +
                              +
                              +
                              +
                            6. +
                            +
                            +
                            +
                            +

                            Installing Intel QAT on the Guest

                            +
                              +
                            1. Verify the Intel QAT devices are assigned.

                              +
                              +

                              If SRIOV is utilized:

                              +
                              +
                              lspci -vnd:4941
                              +
                              +
                              +
                              +

                              If sIOV is utilized:

                              +
                              +
                              +

                              Note

                              +

                              VQATs share the same device ID in guest. They can be distinguished with the subsystem ID SDevice.

                              +
                              +
                                +
                              • This command returns the symmetric VQAT devices:

                                +
                                +
                                lspci -v -d 8086:0da5 -vmm \| grep -E 'SDevice \| 0000'
                                +
                                +
                                +
                                +
                              • +
                              • This command returns the asymmetric VQAT devices:

                                +
                                +
                                lspci -v -d 8086:0da5 -vmm \| grep -E 'SDevice \| 0001'
                                +
                                +
                                +
                                +
                              • +
                              • This command returns the data compression VQAT devices:

                                +
                                +
                                lspci -v -d 8086:0da5 -vmm \| grep -E 'SDevice \| 0002'
                                +
                                +
                                +
                                +
                              • +
                              +
                              +
                              +
                            2. +
                            3. Obtain the official released Intel QAT package: Intel® QuickAssist Technology Driver for Linux* - HW Version 2.0

                            4. +
                            5. Configure the Intel QAT driver to enable the SR-IOV feature on the guest using the following command:

                              +
                              +
                              ./configure --enable-icp-sriov=guest
                              +
                              +
                              +
                              +

                              Note

                              +

                              This is required for both SR-IOV and sIOV.

                              +
                              +
                              +
                            6. +
                            7. Install the Intel QAT software and sample codes using the following commands:

                              +
                              +
                              sudo make -j install
                              +sudo make samples-install
                              +
                              +
                              +
                              +
                            8. +
                            9. Add your user to the qat group by running the below command, and re-login to make the change effective.

                              +
                              +
                              sudo usermod -a -G qat `whoami`
                              +sudo su -l $USER
                              +
                              +
                              +
                              +
                            10. +
                            11. Verify the Intel QAT software stack has been installed by running the performance sample code:

                              +
                              +
                              cpa_sample_code signOfLife=1 runTests=1|2|4|8|16|32
                              +
                              +
                              +
                              +

                              Note

                              +

                              Refer to Getting Started Guide for details on the runTests parameter.

                              +
                              +
                              +
                            12. +
                            +
                            +
                            + + +
                            +
                            +
                            + +
                            + +
                            +

                            © Copyright Intel Corporation.

                            +
                            + + + +
                            +
                            +
                            +
                            +
                            + + + + \ No newline at end of file diff --git a/docs/VIRT/revision_history.html b/docs/VIRT/revision_history.html index cf91650..f4348f0 100644 --- a/docs/VIRT/revision_history.html +++ b/docs/VIRT/revision_history.html @@ -1,7 +1,7 @@ - + Revision History — Intel® QuickAssist Technology documentation @@ -16,16 +16,14 @@ - - - + @@ -57,8 +55,9 @@
                          • Programmer’s Guide
                          • Virtualization Deployment Guide
                          • @@ -82,9 +81,9 @@
                            @@ -94,8 +93,8 @@
                            -

                            Revision History

                            -
                  +

                  Revision History

                  +
                  @@ -122,7 +121,7 @@
                  ---- @@ -198,12 +197,8 @@

                  Configuring the Host OS
                  -

                  Kernel Boot Parameters

                  +

                  Kernel Boot Parameters

                  SR-IOV

                  sIOV

                  ---- @@ -218,7 +213,7 @@

                  Configuring the Host OS
                  -

                  Install Virtualization Packages

                  +

                  Install Virtualization Packages

                  1. Install virtualization related packages using the following command:

                    @@ -247,7 +242,7 @@

                    Install Virtualization Packages -

                    System Environment Preparation Demo

                    +

                    System Environment Preparation Demo

                    Here is a demonstration of how to configure the system to enable virtualization.

                  or other required elements. + thead: [ 1, "

                  SR-IOV

                  sIOV

                  ", "
                  " ], + col: [ 2, "", "
                  " ], + tr: [ 2, "", "
                  " ], + td: [ 3, "", "
                  " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " - - @@ -73,8 +71,8 @@
                    -
                  • - +
                  • »
                  • +
                  • Index
                  diff --git a/docs/index.html b/docs/index.html index 487759d..4786857 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,7 +1,7 @@ - + Intel QuickAssist Technology Documentation - Hardware Version 2.0 — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -75,8 +73,8 @@
                    -
                  • - +
                  • »
                  • +
                  • Intel QuickAssist Technology Documentation - Hardware Version 2.0
                  @@ -86,7 +84,7 @@
                  -

                  Intel QuickAssist Technology Documentation - Hardware Version 2.0

                  +

                  Intel QuickAssist Technology Documentation - Hardware Version 2.0

                  • Legal Notices & Disclaimers
                  • diff --git a/docs/objects.inv b/docs/objects.inv index a0f63d2..1f89ab3 100644 Binary files a/docs/objects.inv and b/docs/objects.inv differ diff --git a/docs/qat_general/collateral_list.html b/docs/qat_general/collateral_list.html index 5fef28f..45a8653 100644 --- a/docs/qat_general/collateral_list.html +++ b/docs/qat_general/collateral_list.html @@ -1,7 +1,7 @@ - + Documentation & Resources — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -81,8 +79,8 @@
                      -
                    • - +
                    • »
                    • +
                    • Documentation & Resources
                    @@ -92,10 +90,10 @@
                    -

                    Documentation & Resources

                    +

                    Documentation & Resources

                    -

                    General Resources

                    - +

                    General Resources

                    +
                    @@ -108,8 +106,8 @@

                    General Resources -

                    Hardware Version 1.X (Customer Enabling Release)

                    -

                    +

                    Hardware Version 1.X (Customer Enabling Release)

                    +
                    @@ -134,7 +132,7 @@

                    Hardware Version 1.X (Customer Enabling Release) +

                    @@ -176,8 +174,8 @@

                    Hardware Version 1.X (Customer Enabling Release) -

                    Hardware Version 2.0

                    -

                    +

                    Hardware Version 2.0

                    +
                    @@ -196,7 +194,7 @@

                    Hardware Version 2.0

                    - +
                    @@ -226,8 +224,8 @@

                    Hardware Version 2.0
                    -

                    API Reference Manuals

                    -

                    +

                    API Reference Manuals

                    +
                    diff --git a/docs/qat_general/contact.html b/docs/qat_general/contact.html index 0858018..3aa5aa7 100644 --- a/docs/qat_general/contact.html +++ b/docs/qat_general/contact.html @@ -1,7 +1,7 @@ - + Contact & Support — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -80,8 +78,8 @@
                      -
                    • - +
                    • »
                    • +
                    • Contact & Support
                    @@ -91,15 +89,15 @@
                    -

                    Contact & Support

                    +

                    Contact & Support

                    -

                    Contact

                    +

                    Contact

                    The public repository hosting these build files is located at https://github.com/intel/quickassist.

                    For documentation updates, create a new GitHub “issue” here: https://github.com/intel/quickassist/issues. When creating an issue, be specific on the page, section, and (if any) subsection requiring clarification, including links if possible.

                    The built HTML files are generated elsewhere and only hosted on this repository, so there is no benefit to making a pull request.

                    -

                    Support

                    +

                    Support

                    Before requesting support, go through these common FAQ steps:

                    • Have I installed the latest version for my hardware?

                    • diff --git a/docs/qat_general/legal.html b/docs/qat_general/legal.html index 6f76894..31a08c2 100644 --- a/docs/qat_general/legal.html +++ b/docs/qat_general/legal.html @@ -1,7 +1,7 @@ - + Legal Notices & Disclaimers — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -76,8 +74,8 @@
                        -
                      • - +
                      • »
                      • +
                      • Legal Notices & Disclaimers
                      @@ -87,7 +85,7 @@
                    +
                  • Running in a Virtual Machine (VM)
                  • Intel® QuickAssist Technology (QAT) QATzip Library
                  • Intel® QuickAssist Technology(QAT) OpenSSL* Engine
                  • Revision History
                  • @@ -97,9 +96,9 @@
                    @@ -109,7 +108,7 @@
                    -

                    Configuration and Tuning

                    +

                    Configuration and Tuning

                    There are parameters which can be tweaked to optimize for an application’s workload which might work in two modes:

                    -

                    Managed Mode

                    +

                    Managed Mode

                    In Managed Mode, qatmgr manages the allocation of the Virtual Function (VF) resources to each process on process startup.

                    The following parameters can be set in /etc/sysconfig/qat.

                    -

                    Policy

                    -

                    Indicates how many VFs will be assigned to each process.

                    -
                    +

                    Policy

                    +

                    Indicates how many VFs will be assigned to each process. The maximum value allowed for POLICY is 256. +In practice this value must not exceed number of QAT PFs * 16.

                    +
                    @@ -149,10 +149,11 @@

                    Policy
                    -

                    Services Enabled

                    +

                    Services Enabled

                    Tells the kernel driver which services to enable on each Physical Function (PF). All VFs on -a PF enable the same services.

                    -

                    Policy Settings
                    +a PF enable the same services. There is a maximum of two services that can be enabled +on each PF.

                    +
                    @@ -222,7 +223,7 @@

                    Services Enabled -

                    Performance Considerations

                    +

                    Performance Considerations

                    Important

                    The following is applicable to QAT2.0 devices only.

                    @@ -241,7 +242,7 @@

                    Performance Considerations -

                    Example Configurations

                    +

                    Example Configurations

                    The following examples are based on a one-socket Intel® QAT 4xxx platform with 4 PFs, each PF having 16 VFs.

                    -

                    Flexibility

                    +

                    Flexibility

                    With the default configuration, neither the Policy or the Services Enabled parameter is set.

                    Each process will allocate one VF, from each PF, providing a total of four VFs.

                    This enables two sym;asym VFs, which provides four sym instances and four asym instances @@ -263,7 +264,7 @@

                    Flexibility -

                    Scalability and Flexibility

                    +

                    Scalability and Flexibility

                    To support a process that requires access to both sym;asym and dc services, the Policy parameter is set. The configuration file /etc/sysconfig/qat will look like:

                    @@ -277,7 +278,7 @@

                    Scalability and Flexibility -

                    Crypto-Only Scalability

                    +

                    Crypto-Only Scalability

                    To enable the sym;asym service, both the Policy and the Services Enabled parameters are set. The configuration file /etc/sysconfig/qat will look like:

                    @@ -292,7 +293,7 @@

                    Crypto-Only ScalabilityA system with N sockets will have 64 x N processes in total.

                    -

                    Symmetric-Only Scalability

                    +

                    Symmetric-Only Scalability

                    To enable the sym service, both the Policy and the Services Enabled parameters are set. The configuration file /etc/sysconfig/qat will look like:

                    @@ -306,7 +307,7 @@

                    Symmetric-Only Scalability -

                    Asymmetric-Only Scalability

                    +

                    Asymmetric-Only Scalability

                    To enable the asym service, both the Policy and the Services Enabled parameters are set. The configuration file /etc/sysconfig/qat will look like:

                    @@ -320,7 +321,7 @@

                    Asymmetric-Only Scalability -

                    Compression-Only Scalability

                    +

                    Compression-Only Scalability

                    To enable the dc service both the Policy and the Services Enabled parameter are set. The configuration file /etc/sysconfig/qat will look like:

                    @@ -335,7 +336,7 @@

                    Compression-Only Scalability -

                    Compression chaining scalability

                    +

                    Compression chaining scalability

                    To enable the dcc service both the Policy and the Services Enabled parameter are set. The configuration file /etc/sysconfig/qat will look like:

                    @@ -352,7 +353,7 @@

                    Compression chaining scalability -

                    Standalone Mode

                    +

                    Standalone Mode

                    In Standalone Mode, there is no qat service running.

                    This is the preferred way to run on containers where a subset of VFs are explicitly passed through and no qatmgr managed resource manager is needed.

                    @@ -372,44 +373,44 @@

                    Compression chaining scalability -

                    Display Current Configuration

                    +

                    Display Current Configuration

                    The script below can be used to view the PF/VF service configuration.

                    #!/bin/bash
                     
                    -printf "%-13s | %-5s | %-12s | %-12s | %-10s\n"  "VFIO GROUP" "NODE"   \
                    -"PF BDF" "VF BDF" "SERVICES"
                    -echo "--------------------------------------------------------------"
                    +printf "%-13s | %-5s | %-12s | %-12s | %-10s\n"  "VFIO GROUP" "NODE"   \
                    +"PF BDF" "VF BDF" "SERVICES"
                    +echo "--------------------------------------------------------------"
                     
                    -for vfio_group in /dev/vfio/*; do
                    -    if [ $vfio_group = "/dev/vfio/vfio" ]; then
                    -        continue
                    -    fi
                    +for vfio_group in /dev/vfio/*; do
                    +    if [ $vfio_group = "/dev/vfio/vfio" ]; then
                    +        continue
                    +    fi
                     
                    -    group=${vfio_group##*/}
                    -    # assume one bdf per iommu group
                    -    bdf=$(ls /sys/kernel/iommu_groups/$group/devices/)
                    -    vendor=$(cat /sys/kernel/iommu_groups/$group/devices/$bdf/vendor)
                    -    node=$(cat /sys/kernel/iommu_groups/$group/devices/$bdf/numa_node)
                    -    did=$(cat /sys/kernel/iommu_groups/$group/devices/$bdf/device)
                    +    group=${vfio_group##*/}
                    +    # assume one bdf per iommu group
                    +    bdf=$(ls /sys/kernel/iommu_groups/$group/devices/)
                    +    vendor=$(cat /sys/kernel/iommu_groups/$group/devices/$bdf/vendor)
                    +    node=$(cat /sys/kernel/iommu_groups/$group/devices/$bdf/numa_node)
                    +    did=$(cat /sys/kernel/iommu_groups/$group/devices/$bdf/device)
                     
                    -    if [ "$vendor" != "0x8086" ]; then
                    -        continue
                    -    fi
                    +    if [ "$vendor" != "0x8086" ]; then
                    +        continue
                    +    fi
                     
                    -    if [ "$did" != "0x4941" ] && [ "$did" != "0x4943" ]; then
                    -        continue
                    -    fi
                    +    if [ "$did" != "0x4941" ] && [ "$did" != "0x4943" ]; then
                    +        continue
                    +    fi
                     
                    -    regex='([a-z0-9]+):([a-z0-9]+):.*'
                    -    [[ $bdf =~ $regex ]]
                    -    pf_domain=${BASH_REMATCH[1]}
                    -    pf_bus=${BASH_REMATCH[2]}
                    -    pf_bdf="$pf_domain:$pf_bus:00.0"
                    +    regex='([a-z0-9]+):([a-z0-9]+):.*'
                    +    [[ $bdf =~ $regex ]]
                    +    pf_domain=${BASH_REMATCH[1]}
                    +    pf_bus=${BASH_REMATCH[2]}
                    +    pf_bdf="$pf_domain:$pf_bus:00.0"
                     
                    -    printf "%-15s %-7s %-14s %-14s %-10s\n"  "$vfio_group"  "$node"    \
                    -    "$pf_bdf"   "$bdf"                                                 \
                    -    "$(cat /sys/bus/pci/devices/$pf_bdf/qat/cfg_services)"
                    +    printf "%-15s %-7s %-14s %-14s %-10s\n"  "$vfio_group"  "$node"    \
                    +    "$pf_bdf"   "$bdf"                                                 \
                    +    "$(cat /sys/bus/pci/devices/$pf_bdf/qat/cfg_services)"
                     
                     done
                     
                    @@ -417,7 +418,7 @@

                    Display Current Configuration -

                    Custom Configuration

                    +

                    Custom Configuration

                    The configuration of services can also be set per PF.

                    Instructions are provided in the following link: https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-driver-qat.

                    @@ -435,7 +436,7 @@

                    Custom Configuration

                    Services Enabled Settings
                    @@ -444,6 +464,39 @@

                    Installing from RPM Packages +

                    Confirm Current Version

                    +
                      +
                    1. To confirm your current qatlib version, use one of the following:

                      +
                      $ sudo qatmgr -v
                      +
                      +
                      +

                      Example return:

                      +
                      qatmgr 23.11.0
                      +
                      +
                      +
                    2. +
                    3. Use the package versionfile:

                      +
                      $ cat /<qatlib_dir>/versionfile
                      +
                      +
                      +

                      Example return:

                      +
                      PACKAGE_TYPE=QAT_UPSTREAM_23.11.0
                      +
                      +PACKAGE_OS=L
                      +
                      +PACKAGE_VERSION_MAJOR_NUMBER=0
                      +
                      +PACKAGE_VERSION_MINOR_NUMBER=0
                      +
                      +PACKAGE_VERSION_PATCH_NUMBER=0
                      +
                      +PACKAGE_VERSION_BUILD_NUMBER=00002
                      +
                      +
                      +
                    4. +
                    + diff --git a/docs/qatlib/memlock.html b/docs/qatlib/memlock.html index 7138224..727fec6 100644 --- a/docs/qatlib/memlock.html +++ b/docs/qatlib/memlock.html @@ -1,7 +1,7 @@ - + <no title> — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -74,8 +72,8 @@
                      -
                    • - +
                    • »
                    • +
                    • <no title>
                    @@ -87,7 +85,7 @@

                    Note

                    -

                    The amount of memory deponds upon the needs of your application. For example, the cpa_sample_code requires a minimum of 500MB. +

                    The amount of memory depends upon the needs of your application. For example, the cpa_sample_code requires a minimum of 500MB. The following commands set the amount of locked memory to 500MB.

                    sudo cp /etc/security/limits.conf /etc/security/limits.conf.qatlib_bak
                    diff --git a/docs/qatlib/qatengine.html b/docs/qatlib/qatengine.html
                    index 9b72469..f21064b 100644
                    --- a/docs/qatlib/qatengine.html
                    +++ b/docs/qatlib/qatengine.html
                    @@ -1,7 +1,7 @@
                     
                     
                     
                    -  
                    +  
                     
                       
                       Intel® QuickAssist Technology(QAT) OpenSSL* Engine — Intel® QuickAssist Technology  documentation
                    @@ -16,9 +16,7 @@
                             
                             
                             
                    -        
                             
                    -        
                             
                             
                         
                    @@ -63,6 +61,7 @@
                     
                  • Installation
                  • Sample Code
                  • Configuration and Tuning
                  • +
                  • Running in a Virtual Machine (VM)
                  • Intel® QuickAssist Technology (QAT) QATzip Library
                  • Intel® QuickAssist Technology(QAT) OpenSSL* Engine
                    • Installation
                        @@ -101,9 +100,9 @@
                        @@ -113,9 +112,9 @@
                        -

                        Intel® QuickAssist Technology(QAT) OpenSSL* Engine

                        +

                        Intel® QuickAssist Technology(QAT) OpenSSL* Engine

                        -

                        Installation

                        +

                        Installation

                        The QAT_Engine can be installed by either:

                        • Installing from pre-built packages

                        • @@ -131,7 +130,7 @@

                          Installation -

                          Installing from Packages

                          +

                          Installing from Packages

                          1. Install the QAT_Engine library by running the below command:

                            sudo dnf -y install qatengine
                            @@ -148,7 +147,7 @@ 

                            Installing from Packages -

                            Installing from Sources

                            +

                            Installing from Sources

                            1. Install the package dependencies by running the below command:

                              sudo dnf install -y autoconf automake libtool cmake openssl-devel pkg-config nasm
                              @@ -228,7 +227,7 @@ 

                              Installing from Packages -

                              Configuration

                              +

                              Configuration

                              At least one QAT endpoint needs to have asymmetric/symmetric (asym;sym) services enabled to utilize QAT_Engine.

                              Refer to the following sections for details on configuring qatlib.

                                @@ -237,53 +236,53 @@

                                Configuration -

                                Verify QAT_Engine is enabled

                                +

                                Verify QAT_Engine is enabled

                                The following command can be used to verify QAT_Engine is functional and provide details on the configuration.

                                -
                                openssl engine -t -c -v qatengine
                                +
                                openssl engine -t -c -v qatengine
                                 

                                If QAT_Engine was setup with default configuration and just qat_hw path enabled, the output will look like:

                                -
                                  (qatengine) Reference implementation of QAT crypto engine(qat_hw) v1.0.0
                                -[RSA, AES-128-CBC-HMAC-SHA256, AES-256-CBC-HMAC-SHA256, ChaCha20-Poly1305, SHA3-256, SHA3-384, SHA3-512]
                                -    [ available ]
                                -    ENABLE_EXTERNAL_POLLING, POLL, SET_INSTANCE_FOR_THREAD,
                                -    GET_NUM_OP_RETRIES, SET_MAX_RETRY_COUNT, SET_INTERNAL_POLL_INTERVAL,
                                -    GET_EXTERNAL_POLLING_FD, ENABLE_EVENT_DRIVEN_POLLING_MODE,
                                -    GET_NUM_CRYPTO_INSTANCES, DISABLE_EVENT_DRIVEN_POLLING_MODE,
                                -    SET_EPOLL_TIMEOUT, SET_CRYPTO_SMALL_PACKET_OFFLOAD_THRESHOLD,
                                -    ENABLE_INLINE_POLLING, ENABLE_HEURISTIC_POLLING,
                                -    GET_NUM_REQUESTS_IN_FLIGHT, INIT_ENGINE, SET_CONFIGURATION_SECTION_NAME,
                                -    ENABLE_SW_FALLBACK, HEARTBEAT_POLL, DISABLE_QAT_OFFLOAD, HW_ALGO_BITMAP
                                +
                                  (qatengine) Reference implementation of QAT crypto engine(qat_hw) v1.0.0
                                +[RSA, AES-128-CBC-HMAC-SHA256, AES-256-CBC-HMAC-SHA256, ChaCha20-Poly1305, SHA3-256, SHA3-384, SHA3-512]
                                +    [ available ]
                                +    ENABLE_EXTERNAL_POLLING, POLL, SET_INSTANCE_FOR_THREAD,
                                +    GET_NUM_OP_RETRIES, SET_MAX_RETRY_COUNT, SET_INTERNAL_POLL_INTERVAL,
                                +    GET_EXTERNAL_POLLING_FD, ENABLE_EVENT_DRIVEN_POLLING_MODE,
                                +    GET_NUM_CRYPTO_INSTANCES, DISABLE_EVENT_DRIVEN_POLLING_MODE,
                                +    SET_EPOLL_TIMEOUT, SET_CRYPTO_SMALL_PACKET_OFFLOAD_THRESHOLD,
                                +    ENABLE_INLINE_POLLING, ENABLE_HEURISTIC_POLLING,
                                +    GET_NUM_REQUESTS_IN_FLIGHT, INIT_ENGINE, SET_CONFIGURATION_SECTION_NAME,
                                +    ENABLE_SW_FALLBACK, HEARTBEAT_POLL, DISABLE_QAT_OFFLOAD, HW_ALGO_BITMAP
                                 

                                If both qat_hw and qat_sw are enabled, the output will look like:

                                -
                                  (qatengine) Reference implementation of QAT crypto engine(qat_hw & qat_sw) v1.0.0
                                -[RSA, AES-128-CBC-HMAC-SHA256, AES-256-CBC-HMAC-SHA256, ChaCha20-Poly1305, SHA3-256, SHA3-384, SHA3-512]
                                -    [ available ]
                                -    ENABLE_EXTERNAL_POLLING, POLL, SET_INSTANCE_FOR_THREAD,
                                -    GET_NUM_OP_RETRIES, SET_MAX_RETRY_COUNT, SET_INTERNAL_POLL_INTERVAL,
                                -    GET_EXTERNAL_POLLING_FD, ENABLE_EVENT_DRIVEN_POLLING_MODE,
                                -    GET_NUM_CRYPTO_INSTANCES, DISABLE_EVENT_DRIVEN_POLLING_MODE,
                                -    SET_EPOLL_TIMEOUT, SET_CRYPTO_SMALL_PACKET_OFFLOAD_THRESHOLD,
                                -    ENABLE_INLINE_POLLING, ENABLE_HEURISTIC_POLLING,
                                -    GET_NUM_REQUESTS_IN_FLIGHT, INIT_ENGINE, SET_CONFIGURATION_SECTION_NAME,
                                -    ENABLE_SW_FALLBACK, HEARTBEAT_POLL, DISABLE_QAT_OFFLOAD, HW_ALGO_BITMAP,
                                -    SW_ALGO_BITMAP
                                +
                                  (qatengine) Reference implementation of QAT crypto engine(qat_hw & qat_sw) v1.0.0
                                +[RSA, AES-128-CBC-HMAC-SHA256, AES-256-CBC-HMAC-SHA256, ChaCha20-Poly1305, SHA3-256, SHA3-384, SHA3-512]
                                +    [ available ]
                                +    ENABLE_EXTERNAL_POLLING, POLL, SET_INSTANCE_FOR_THREAD,
                                +    GET_NUM_OP_RETRIES, SET_MAX_RETRY_COUNT, SET_INTERNAL_POLL_INTERVAL,
                                +    GET_EXTERNAL_POLLING_FD, ENABLE_EVENT_DRIVEN_POLLING_MODE,
                                +    GET_NUM_CRYPTO_INSTANCES, DISABLE_EVENT_DRIVEN_POLLING_MODE,
                                +    SET_EPOLL_TIMEOUT, SET_CRYPTO_SMALL_PACKET_OFFLOAD_THRESHOLD,
                                +    ENABLE_INLINE_POLLING, ENABLE_HEURISTIC_POLLING,
                                +    GET_NUM_REQUESTS_IN_FLIGHT, INIT_ENGINE, SET_CONFIGURATION_SECTION_NAME,
                                +    ENABLE_SW_FALLBACK, HEARTBEAT_POLL, DISABLE_QAT_OFFLOAD, HW_ALGO_BITMAP,
                                +    SW_ALGO_BITMAP
                                 

                                Important

                                If errors are reported that indicate multi-buffer libraries are missing, this can be addressed by adding /usr/lib to the LD_LIBRARY_PATH

                                -
                                export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
                                +
                                export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
                                 
                        -

                        Testing with OpenSSL Speed

                        +

                        Testing with OpenSSL Speed

                        The following OpenSSL Speed commands can be used to verify stack is functional.

                        -

                        qat_hw tests

                        +

                        qat_hw tests

                        In the tests below, OpenSSL speed is invoked three times.

                        • Asynchronous using QAT_Engine

                        • @@ -291,7 +290,7 @@

                          qat_hw tests -

                          RSA 2K

                          +

                          RSA 2K

                          openssl speed -engine qatengine -elapsed -async_jobs 72 rsa2048
                           openssl speed -engine qatengine -elapsed rsa2048
                          @@ -301,7 +300,7 @@ 

                          RSA 2K

                        -

                        ECDH Compute Key

                        +

                        ECDH Compute Key

                        openssl speed -engine qatengine -elapsed -async_jobs 36 ecdh
                         openssl speed -engine qatengine -elapsed ecdh
                        @@ -311,7 +310,7 @@ 

                        ECDH Compute Key -

                        Chained Cipher: aes-128-cbc-hmac-sha1

                        +

                        Chained Cipher: aes-128-cbc-hmac-sha1

                        openssl speed -engine qatengine -elapsed -async_jobs 128 -multi 2 -evp aes-128-cbc-hmac-sha1
                         openssl speed -engine qatengine -elapsed -multi 2 -evp aes-128-cbc-hmac-sha1
                        @@ -322,14 +321,14 @@ 

                        Chained Cipher: aes-128-cbc-hmac-sha1 -

                        qat_sw tests (Intel(R) Crypto Multi-buffer library)

                        +

                        qat_sw tests (Intel(R) Crypto Multi-buffer library)

                        In the tests below, OpenSSL speed is invoked two times.

                        • QAT_Engine using Crypto Multi-buffer library

                        • Default OpenSSL software

                        -

                        RSA2K

                        +

                        RSA2K

                        openssl speed -engine qatengine -elapsed -async_jobs 8 rsa2048
                         openssl speed -elapsed rsa2048
                        @@ -338,7 +337,7 @@ 

                        RSA2K

                        -

                        ECDH X25519

                        +

                        ECDH X25519

                        openssl speed -engine qatengine -elapsed -async_jobs 8 ecdhx25519
                         openssl speed -elapsed ecdhx25519
                        @@ -347,7 +346,7 @@ 

                        ECDH X25519 -

                        ECDH P-256

                        +

                        ECDH P-256

                        openssl speed -engine qatengine -elapsed -async_jobs 8 ecdhp256
                         openssl speed -elapsed ecdhp256
                        @@ -356,7 +355,7 @@ 

                        ECDH P-256 -

                        ECDSA P-256

                        +

                        ECDSA P-256

                        openssl speed -engine qatengine -elapsed -async_jobs 8 ecdsap256
                         openssl speed -elapsed  ecdsap256
                        @@ -365,7 +364,7 @@ 

                        ECDSA P-256 -

                        ECDH P-384

                        +

                        ECDH P-384

                        openssl speed -engine qatengine -elapsed -async_jobs 8 ecdhp384
                         openssl speed -elapsed ecdhp384
                        @@ -374,7 +373,7 @@ 

                        ECDH P-384 -

                        ECDSA P-384

                        +

                        ECDSA P-384

                        openssl speed -engine qatengine -elapsed -async_jobs 8 ecdsap384
                         openssl speed -elapsed ecdsap384
                        @@ -384,14 +383,14 @@ 

                        ECDSA P-384 -

                        qat_sw tests (Intel(R) Multi-Buffer Crypto for IPsec)

                        +

                        qat_sw tests (Intel(R) Multi-Buffer Crypto for IPsec)

                        In the tests below, OpenSSL speed is invoked two times.

                        • QAT_Engine using Multi-Buffer Crypto for IPsec

                        • Default OpenSSL software

                        -

                        AES-128-GCM

                        +

                        AES-128-GCM

                        openssl speed -engine qatengine -elapsed -evp aes-128-gcm
                         openssl speed -elapsed -evp aes-128-gcm
                        @@ -400,7 +399,7 @@ 

                        AES-128-GCM -

                        AES-192-GCM

                        +

                        AES-192-GCM

                        openssl speed -engine qatengine -elapsed -evp aes-192-gcm
                         openssl speed -elapsed -evp aes-192-gcm
                        @@ -409,7 +408,7 @@ 

                        AES-192-GCM -

                        AES-256-GCM

                        +

                        AES-256-GCM

                        openssl speed -engine qatengine -elapsed -evp aes-256-gcm
                         openssl speed -elapsed -evp aes-256-gcm
                        diff --git a/docs/qatlib/qatzip.html b/docs/qatlib/qatzip.html
                        index 4d4b009..33d4803 100644
                        --- a/docs/qatlib/qatzip.html
                        +++ b/docs/qatlib/qatzip.html
                        @@ -1,7 +1,7 @@
                         
                         
                         
                        -  
                        +  
                         
                           
                           Intel® QuickAssist Technology (QAT) QATzip Library — Intel® QuickAssist Technology  documentation
                        @@ -16,16 +16,14 @@
                                 
                                 
                                 
                        -        
                                 
                        -        
                                 
                                 
                             
                             
                             
                             
                        -     
                        +     
                         
                         
                          
                        @@ -63,6 +61,7 @@
                         
                      • Installation
                      • Sample Code
                      • Configuration and Tuning
                      • +
                      • Running in a Virtual Machine (VM)
                      • Intel® QuickAssist Technology (QAT) QATzip Library
                        • Installation
                          • Installing from Packages
                          • @@ -99,9 +98,9 @@
                            @@ -111,9 +110,9 @@
                            -

                            Intel® QuickAssist Technology (QAT) QATzip Library

                            +

                            Intel® QuickAssist Technology (QAT) QATzip Library

                            -

                            Installation

                            +

                            Installation

                            The QATzip library can be installed by either:

                            • Installing from pre-built packages

                            • @@ -129,7 +128,7 @@

                              Installation -

                              Installing from Packages

                              +

                              Installing from Packages

                              1. Install the QATzip library by running the below command:

                                sudo dnf -y install qatzip
                                @@ -167,12 +166,17 @@ 

                                Installing from Packages -

                                Installing from Sources

                                +

                                Installing from Sources

                                1. Install the package dependencies by running the below command:

                                  sudo dnf install -y autoconf automake libtool zlib-devel lz4-devel
                                   
                                  +

                                  For Debian-based distros like Ubuntu, use these names for the latter two packages:

                                  +

                                  ..code-block:: console

                                  +
                                  +

                                  sudo apt -y install zlib1g-dev liblz4-dev

                                  +
                                2. Obtain the QATzip source package by running the below commands:

                                  cd ~
                                  @@ -199,7 +203,7 @@ 

                                  Installing from Packages -

                                  Configuration

                                  +

                                  Configuration

                                  At least one QAT endpoint needs to have data compression (dc) services enabled to utilize QATzip.

                                  Refer to the following sections for details on configuring qatlib.

                                    @@ -208,13 +212,13 @@

                                    Configuration -

                                    Benchmarking

                                    +

                                    Benchmarking

                                    The QATzip package, when installed from source includes a test application that can be used for benchmarking.

                                    The application is placed in ~/QATzip/test/test directory.

                                    -

                                    Example test

                                    +

                                    Example test

                                    -
                                    taskset -c 1 ~/QATzip/test/test -m 4 -l 100 -t 1 -D comp -L 1 -B 0 -i ./silesia
                                    +
                                    taskset -c 1 ~/QATzip/test/test -m 4 -l 100 -t 1 -D comp -L 1 -B 0 -i ./silesia
                                     

                                    This test performs compression test at level 1 utilizing QAT to compress file silesia. Software fallback @@ -222,9 +226,9 @@

                                    Example test -

                                    Test Details

                                    +

                                    Test Details

                                    Usage:

                                    -
                                    Usage: ./test [options]
                                    +
                                    Usage: ./test [options]
                                     

                                    Required options:

                                    @@ -283,7 +287,7 @@

                                    Test Details - +

                                    diff --git a/docs/qatlib/requirements.html b/docs/qatlib/requirements.html index fc6df9e..ac7a714 100644 --- a/docs/qatlib/requirements.html +++ b/docs/qatlib/requirements.html @@ -1,7 +1,7 @@ - + System Requirements — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -79,6 +77,7 @@
                                  • Installation
                                  • Sample Code
                                  • Configuration and Tuning
                                  • +
                                  • Running in a Virtual Machine (VM)
                                  • Intel® QuickAssist Technology (QAT) QATzip Library
                                  • Intel® QuickAssist Technology(QAT) OpenSSL* Engine
                                  • Revision History
                                  • @@ -102,9 +101,9 @@
                                    @@ -114,7 +113,7 @@
                                    -

                                    System Requirements

                                    +

                                    System Requirements

                                    There are some prerequisites when using QATlib. When running on newer Linux distributions many of these are taken care of.

                                      @@ -127,13 +126,13 @@

                                    The following sections provide the details to verify all prerequisites listed above.

                                    -

                                    BIOS Configuration

                                    +

                                    BIOS Configuration

                                    To properly use the QATlib library, the Intel VT-d and SR-IOV parameters must be enabled in the platform BIOS. Consult your platform guide for details on enabling these parameters. If using an Intel Best Known Configuration (BKC) these parameters are usually enabled by default.

                                    The status of both parameters can be verified in the BIOS settings. Although the specific location depends on the BIOS vendor navigation menu, these parameters are usually found in the following locations:

                                    -
                  • Available Configuration Options
                    +
                    @@ -175,11 +174,11 @@

                    BIOS Configuration -

                    Kernel/Firmware Requirements

                    +

                    Kernel/Firmware Requirements

                    Refer to Kernel/Firmware Requirements for details on required kernel/firmware version.

                    -

                    Supported Devices

                    +

                    Supported Devices

                    Verify the platform contains a supported 4xxx Intel® Communications device by running the below command:

                    echo `(lspci -d 8086:4940 && lspci -d 8086:4941 && lspci -d 8086:4942 && lspci -d 8086:4943) | wc -l` supported devices found.
                    @@ -194,21 +193,30 @@ 

                    Supported Devices -

                    Firmware

                    +

                    Firmware

                    Note

                    This step is required when running on host system. It does not apply when running in a virtual machine as the firmware is loaded on the host.

                    Verify the supported firmware is available in the /lib/firmware directory by running the below commands:

                    -
                    ls /lib/firmware/qat_4xxx.bin
                    -ls /lib/firmware/qat_4xxx_mmp.bin
                    +
                    ls /lib/firmware/qat_4xxx.bin*
                    +ls /lib/firmware/qat_4xxx_mmp.bin*
                    +
                    +
                    +

                    The output will look like one of the following:

                    +
                    /lib/firmware/qat_4xxx.bin
                    +/lib/firmware/qat_4xxx_mmp.bin
                    +
                    +
                    +
                    /lib/firmware/qat_4xxx.bin.xz
                    +/lib/firmware/qat_4xxx_mmp.bin.xz
                     

                    Tip

                    -

                    If these files are not present, perform the following steps:

                    +

                    If the firmware images are not present, perform the following steps:

                    1. Download the firmware files.

                      @@ -232,10 +240,10 @@

                      Firmware -

                      Kernel Drivers

                      +

                      Kernel Drivers

                      Verify the appropriate kernel drivers are loaded in the host and/or the guest system(s).

                      -

                      Host System Kernel Drivers

                      +

                      Host System Kernel Drivers

                      When running on the host system, use the following command to verify the kernel drivers are present:

                      lsmod | grep qat
                      @@ -278,22 +286,15 @@ 

                      Host System Kernel Drivers4xxx kernel driver is bound to each Intel® QAT Physical Function (PF) by running the following command:

                      +

                      Lastly, verify the 4xxx kernel driver is bound to each Intel® QAT Physical Function (PF) by running one of the following commands, depending on your device id:

                      -
                      (lspci -vvv  -d 8086:4940 || lspci -vvv -d 8086:4942) | grep "Kernel driver"
                      +
                      echo `(lspci -vvv  -d 8086:4940 || lspci -vvv -d 8086:4942) | grep "Kernel driver"`
                       

                      You should see an output similar to the following:

                      -
                      Kernel driver in use: 4xxx
                      -Kernel driver in use: 4xxx
                      -Kernel driver in use: 4xxx
                      -Kernel driver in use: 4xxx
                      -Kernel driver in use: 4xxx
                      -Kernel driver in use: 4xxx
                      -Kernel driver in use: 4xxx
                      -Kernel driver in use: 4xxx
                      +
                      Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx Kernel driver in use: 4xxx
                       
                      @@ -305,7 +306,7 @@

                      Host System Kernel Drivers -

                      Guest System Kernel Drivers

                      +

                      Guest System Kernel Drivers

                      When running on the guest system, use the following command to verify the kernel drivers are present:

                      lsmod | grep vfio_pci
                      @@ -320,7 +321,7 @@ 

                      Guest System Kernel Driversvfio_pci kernel driver is bound to each Intel® QAT Virtual Function (VF) by running the following command:

                      -
                      (lspci -vvv  -d 8086:4941 || lspci -vvv -d 8086:4943) | grep "Kernel driver"
                      +
                      echo `(lspci -vvv  -d 8086:4941 || lspci -vvv -d 8086:4943) | grep "Kernel driver"
                       
                      @@ -336,7 +337,7 @@

                      Guest System Kernel Drivers -

                      Linux Boot Parameters

                      +

                      Linux Boot Parameters

                      The intel_iommu parameter must be enabled. Verify this setting is enabled by running the following command:

                      cat /proc/cmdline | grep intel_iommu=on
                      @@ -345,7 +346,7 @@ 

                      Linux Boot Parameters

                      If intel_iommu is not enabled, the following steps can be used to turn it on.

                      -

                      Instructions for Debian Based Distros

                      +

                      Instructions for Debian Based Distros

                      If using a Debian based distribution, run the following commands:

                        @@ -375,7 +376,7 @@

                        Instructions for Debian Based Distros -

                        Instructions for RHEL/CentOS/Fedora

                        +

                        Instructions for RHEL/CentOS/Fedora

                        If using RHEL, CentOS or Fedora, run the following commands:

                          diff --git a/docs/qatlib/revision_history.html b/docs/qatlib/revision_history.html index 95c5dff..f021e95 100644 --- a/docs/qatlib/revision_history.html +++ b/docs/qatlib/revision_history.html @@ -1,7 +1,7 @@ - + Revision History — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -63,6 +61,7 @@
                        1. Installation
                        2. Sample Code
                        3. Configuration and Tuning
                        4. +
                        5. Running in a Virtual Machine (VM)
                        6. Intel® QuickAssist Technology (QAT) QATzip Library
                        7. Intel® QuickAssist Technology(QAT) OpenSSL* Engine
                        8. Revision History
                        9. @@ -86,9 +85,9 @@
                          @@ -98,12 +97,12 @@
                          -

                          Revision History

                          +

                          Revision History

                          Note

                          This file shows the Revision History for our qatlib User’s Guide. For the Revision History of qatlib releases, see https://github.com/intel/qatlib/releases .

                          -

                    Intel VT-d and SR-IOV parameters location in BIOS
                    +
                    @@ -118,14 +117,24 @@ - + + + + + - + diff --git a/docs/qatlib/running_in_vm.html b/docs/qatlib/running_in_vm.html new file mode 100644 index 0000000..40c4869 --- /dev/null +++ b/docs/qatlib/running_in_vm.html @@ -0,0 +1,444 @@ + + + + + + + Running in a Virtual Machine (VM) — Intel® QuickAssist Technology documentation + + + + + + + + + + + + + + + + + + + + +
                    + + +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +

                    Running in a Virtual Machine (VM)

                    +

                    This document provides instructions for attaching QAT Virtual Function(s) to the guest VM. This allows us to run applications using qatlib on the Guest VM utilizing the QAT Hardware.

                    +
                    +

                    Important

                    +

                    These instructions assume the QAT in-tree driver is currently installed on the host system.

                    +
                    +
                    +

                    Virtual Machine Configuration

                    +

                    This section describes the configuration options for the virtual machine.

                    +
                    +

                    CPU Pinning (Optional)

                    +

                    This step is optional and is only needed when we wish to pin the cores used by a VM. In the example below we are pinning 8 cores used in the VM to cores 17-24.

                    +
                    +
                    <vcpu placement='static' cpuset='17-24'>8</vcpu>
                    +
                    +
                    +
                    +
                    +
                    +

                    Machine Type

                    +

                    The machine type needs to be set q35. In the example below, the machine type for RHEL 9.2 is pc-q35-rhel9.

                    +
                    +
                    <os>
                    +    <type arch='x86_64' machine='pc-q35-rhel9.2.0'>hvm</type>
                    +    <boot dev='hd'/>
                    +</os>
                    +
                    +
                    +
                    +
                    +
                    +

                    I/O APIC Driver

                    +

                    The I/O APIC driver needs to be set to qemu.

                    +
                    +
                    <features>
                    +    <acpi/>
                    +    <apic/>
                    +        <ioapic driver='qemu'/>
                    +</features>
                    +
                    +
                    +
                    +
                    +
                    +

                    QAT Virtual Function

                    +

                    When passing VFs to a guest, the BDFs on the guest should facilitate qatlib +recognizing whether VFs are from the same PF or not.

                    +

                    So the libvirt XML file should specify that VFs from the same host +(same domain + bus) are assigned to a common (domain + bus) on the guest, +which is different to the (domain + bus) used for VFs from other PFs.

                    +
                    +

                    Important

                    +

                    Sufficient VFs should be passed from the host to the guest to satisfy the +type of services and number of processes needed by the guest. See Configuration and Tuning section of QATlib User’s Guide for +more information on host configuration.

                    +
                    +
                    +

                    Important

                    +

                    If using the default kernel configuration, at least 2 VFs are needed per +process so that the process has both CY and DC instances. +Set either POLICY=0 or POLICY=2 (or 4, 6, …) in /etc/sysconfig/qat on +the guest and restart qatmgr.

                    +
                    +

                    To list the BSF info from the host, use the lspci command with a grep for the device ID of your VFs. Some SKUs may use 4941 as their device ID. For example, the 4943 device ID should give output similar to the below:

                    +
                    +
                    # lspci | grep -i 4943
                    +
                    +
                    +
                    +

                    Example output:

                    +
                    +
                    6b:00.1 Co-processor: Intel Corporation Device 4943 (rev 40)
                    +6b:00.2 Co-processor: Intel Corporation Device 4943 (rev 40)
                    +6b:00.3 Co-processor: Intel Corporation Device 4943 (rev 40)
                    +. . .
                    +70:00.1 Co-processor: Intel Corporation Device 4943 (rev 40)
                    +70:00.2 Co-processor: Intel Corporation Device 4943 (rev 40)
                    +70:00.3 Co-processor: Intel Corporation Device 4943 (rev 40)
                    +. . .
                    +f3:00.1 Co-processor: Intel Corporation Device 4943 (rev 40)
                    +f3:00.2 Co-processor: Intel Corporation Device 4943 (rev 40)
                    +f3:00.3 Co-processor: Intel Corporation Device 4943 (rev 40)
                    +. . .
                    +
                    +
                    +
                    +

                    In the following example we are passing two VFs from 0000:6b.0 and two VFs from 0000:70.0 +to the VM.

                    +
                    +
                    <hostdev mode='subsystem' type='pci' managed='yes'>
                    +    <source>
                    +        <address domain='0x0000' bus='0x6b' slot='0x00' function='0x1'/>
                    +    </source>
                    +    <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0' multifunction='on'/>
                    +</hostdev>
                    +<hostdev mode='subsystem' type='pci' managed='yes'>
                    +    <source>
                    +        <address domain='0x0000' bus='0x6b' slot='0x00' function='0x2'/>
                    +    </source>
                    +    <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x1'/>
                    +</hostdev>
                    +<hostdev mode='subsystem' type='pci' managed='yes'>
                    +    <source>
                    +        <address domain='0x0000' bus='0x70' slot='0x00' function='0x3'/>
                    +    </source>
                    +    <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0' multifunction='on'/>
                    +</hostdev>
                    +<hostdev mode='subsystem' type='pci' managed='yes'>
                    +    <source>
                    +        <address domain='0x0000' bus='0x70' slot='0x00' function='0x3'/>
                    +    </source>
                    +    <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x1'/>
                    +</hostdev>
                    +
                    +
                    +
                    +

                    Within the VM, the VFs would appear like the following:

                    +
                    +
                    lspci -d '8086:4941' | lspci -d '8086:4943'
                    +
                    +07:00.0 Co-processor: Intel Corporation Device 4941 (rev 40)
                    +07:00.1 Co-processor: Intel Corporation Device 4941 (rev 40)
                    +08:00.0 Co-processor: Intel Corporation Device 4941 (rev 40)
                    +08:00.1 Co-processor: Intel Corporation Device 4941 (rev 40)
                    +
                    +
                    +
                    +
                    +
                    +
                    +

                    Guest OS Linux Boot Parameters

                    +

                    The following kernel boot parameters must be included in the Guest OS.

                    +
                      +
                    • intel_iommu=on

                    • +
                    • aw-bits=48

                    • +
                    +

                    Confirm these parameters are set with the following commands:

                    +
                    cat /proc/cmdline | grep -E 'intel_iommu=on|aw-bits=48'
                    +
                    +
                    +

                    If these parameters are not enabled, the following steps can be used to turn them on.

                    +
                    +

                    Instructions for Debian Based Distros

                    +

                    If using a Debian based distribution, run the following commands:

                    +
                    +
                      +
                    1. Open the grub file.

                      +
                      +
                      sudo vi /etc/default/grub
                      +
                      +
                      +
                      +
                    2. +
                    3. Update the GRUB_CMDLINE_LINUX line by adding intel_iommu=on and aw-bits=48.

                    4. +
                    5. Load the changes done.

                      +
                      +
                      sudo grub2-mkconfig -o /etc/grub2-efi.cfg
                      +
                      +
                      +
                      +
                    6. +
                    +

                    For Ubuntu, you may need to use the “update-grub” command instead.

                    +
                      +
                    1. Reboot the system.

                      +
                      +
                      shutdown -r now
                      +
                      +
                      +
                      +
                    2. +
                    +
                    +
                    +
                    +

                    Instructions for RHEL/CentOS/Fedora

                    +

                    If using RHEL, CentOS or Fedora, run the following commands:

                    +
                    +
                      +
                    1. Update the kernel boot parameters.

                      +
                      +
                      sudo grubby --update-kernel=ALL --args="intel_iommu=on"
                      +sudo grubby --update-kernel=ALL --args="aw-bits=48"
                      +
                      +
                      +
                      +
                    2. +
                    3. Reboot the system.

                      +
                      +
                      sudo shutdown -r now
                      +
                      +
                      +
                      +
                    4. +
                    +
                    +
                    +
                    +
                    +

                    Guest System Kernel Drivers

                    +

                    When running on the guest system, use the following command to verify the kernel drivers are present:

                    +
                    +
                    lsmod | grep vfio_pci
                    +
                    +
                    +
                    +

                    If the kernel module is not found, install it using the following command:

                    +
                    +
                    sudo modprobe vfio_pci
                    +
                    +
                    +
                    +

                    In some situations, you may also need to modprobe the qat_4xxx module via sudo modprobe qat_4xxx.

                    +

                    Lastly, verify the vfio_pci kernel driver is bound to each Intel® QAT Virtual Function (VF) by running the following command:

                    +
                    +
                    echo `(lspci -vvv  -d 8086:4941 || lspci -vvv -d 8086:4943) | grep "Kernel driver"`
                    +
                    +
                    +
                    +

                    You should see an output similar to the following:

                    +
                    +
                    Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci Kernel driver in use: vfio-pci
                    +
                    +
                    +
                    +
                    +
                    +

                    Common Issues

                    +
                    +

                    Error observed when VM is started

                    +

                    If error similar to the following is reported when VM is started:

                    +
                    +
                    sudo virsh start <Guest_VM_NAME>
                    +
                    +error: Failed to start domain '<Guest_VM_NAME>'
                    +error: internal error: qemu unexpectedly closed the monitor: 2022-02-10T17:00:01.178436Z qemu-system-x86_64:
                    +-device vfio-pci,host=0000:75:00.1,id=hostdev4,bus=pci.15,addr=0x0: VFIO_MAP_DMA failed: Cannot allocate memory
                    +2022-02-10T17:00:01.210062Z qemu-system-x86_64: -device vfio-pci,host=0000:75:00.1,id=hostdev4,bus=pci.15,addr=0x0:
                    +vfio 0000:75:00.1: failed to setup container for group 488: memory listener initialization failed: Region pc.ram:
                    +vfio_dma_map(0x562127eb3bc0, 0x100000000, 0x80000000, 0x7ff60be00000) = -12 (Cannot allocate memory)
                    +
                    +
                    +
                    +

                    We can use dmesg to display additional error details.

                    +
                    +
                    dmesg | tail -50 will display the below error
                    +
                    +
                    +
                    +

                    If the output looks like the following:

                    +
                    +
                    [1210160.116507] vfio_pin_pages_remote: RLIMIT_MEMLOCK (20819607552) exceeded
                    +
                    +
                    +
                    +
                    +
                    Likely cause:

                    The hard and soft memory limit has exceeded the limit of 20331648 KB memory

                    +
                    +
                    +

                    Solution: Increase the memory hard_limit and soft_limit to a higher value

                    +
                    +
                    # shutdown the VM
                    +sudo virsh shutdown <Guest_VM_Name>
                    +# edit the guest VM xml file
                    +sudo virsh edit <Guest_VM_Name>
                    +
                    +
                    +
                    +
                    +
                    +

                    Error with cpa_sample_code

                    +

                    Error when running cpa sample application on the guest VM

                    +

                    If errors like the following are observed:

                    +
                    +
                    [56400.152502] DMAR: DRHD: handling fault status reg 3
                    +[56400.152513] DMAR: [DMA Read NO_PASID] Request device [70:00.1] fault addr 0x2995c000 [fault reason 0x79] SM: Read/Write permission error in second-level paging entry
                    +[56400.153297] DMAR: DRHD: handling fault status reg 3
                    +[56400.153308] DMAR: [DMA Read NO_PASID] Request device [70:00.1] fault addr 0x28987000 [fault reason 0x79] SM: Read/Write permission error in second-level paging entry
                    +[56400.212172] DMAR: DRHD: handling fault status reg 3
                    +[56400.212176] DMAR: [DMA Write NO_PASID] Request device [70:00.2] fault addr 0x28465000 [fault reason 0x79] SM: Read/Write permission error in second-level paging entry
                    +[56400.212228] DMAR: DRHD: handling fault status reg 2
                    +
                    +
                    +
                    +

                    Likely cause: Limit to maximum number of concurrent DMA mapping that a user is allowed to create has been reached

                    +

                    Solution: Increase/edit the dma_entry limit value in /etc/modprobe.d/vfio-iommu-type1.config

                    +
                    +
                    sudo vi /etc/modprobe.d/vfio-iommu-type1.config
                    +
                    +
                    +

                    Update the maximum value.

                    +
                    +
                    +
                    +
                    + + +
                    +
                    +
                    + +
                    + +
                    +

                    © Copyright Intel Corporation.

                    +
                    + + + +
                    +
                    +
                    +
                    +
                    + + + + \ No newline at end of file diff --git a/docs/qatlib/sample_code.html b/docs/qatlib/sample_code.html index 8b54597..f072d7d 100644 --- a/docs/qatlib/sample_code.html +++ b/docs/qatlib/sample_code.html @@ -1,7 +1,7 @@ - + Sample Code — Intel® QuickAssist Technology documentation @@ -16,9 +16,7 @@ - - @@ -76,6 +74,7 @@
                  • Configuration and Tuning
                  • +
                  • Running in a Virtual Machine (VM)
                  • Intel® QuickAssist Technology (QAT) QATzip Library
                  • Intel® QuickAssist Technology(QAT) OpenSSL* Engine
                  • Revision History
                  • @@ -99,9 +98,9 @@
                    @@ -111,10 +110,10 @@
                    -

                    Sample Code

                    -

                    Sample code is a great way to verify qatlib is installed and ready to use.

                    +

                    Sample Code

                    +

                    Sample code is a great way to verify qatlib is installed and ready to use. The application cpa_sample_code is nearly identical in the qatlib package to the out-of-tree (OOT) QAT Driver package.

                    -

                    Installing the Sample Code

                    +

                    Installing the Sample Code

                    Intel® QAT sample code can be installed by either:

                    -

                    Uninstalling the Sample Code

                    +

                    Uninstalling the Sample Code

                    When the sample code is no longer required, it can be removed using the following commands:

                    -

                    Uninstalling from Packages

                    +

                    Uninstalling from Packages

                    1. Uninstall qatlib-tests by running the below command:

                      sudo dnf remove qatlib-tests
                      @@ -181,7 +180,7 @@ 

                      Uninstalling from Packages -

                      Uninstalling from Sources

                      +

                      Uninstalling from Sources

                      Note

                      These steps assume the qatlib repository was copied in ~/qatlib.

                      diff --git a/docs/search.html b/docs/search.html index 72909a5..2bbe170 100644 --- a/docs/search.html +++ b/docs/search.html @@ -16,9 +16,7 @@ - - @@ -76,8 +74,8 @@
                        -
                      • - +
                      • »
                      • +
                      • Search
                      diff --git a/docs/searchindex.js b/docs/searchindex.js index c08e165..46b44b1 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["API_PG/QAT_compressionAPI", "API_PG/QAT_cryptoAPI", "API_PG/baseAPI", "API_PG/index", "API_PG/introduction", "API_PG/revision_history", "GSG/2.X/index", "GSG/2.X/installation", "GSG/2.X/introduction", "GSG/2.X/revision_history", "GSG/2.X/sampleapplications", "GSG/2.X/systemconfiguration", "Intro/introduction", "Intro/terminology", "PERF/application_tunning", "PERF/design_guidelines", "PERF/index", "PERF/introduction", "PERF/revision_history", "PG/acceleration_driver", "PG/apis_additional_apis_index", "PG/apis_additional_availabilityapis", "PG/apis_additional_cnvapis", "PG/apis_additional_congestionapis", "PG/apis_additional_dynamicfunctions", "PG/apis_additional_heartbeatapis", "PG/apis_additional_iommufunctions", "PG/apis_additional_pollingapis", "PG/apis_additional_pollingfunctions", "PG/apis_additional_resetfunctions", "PG/apis_additional_servicespecificapis", "PG/apis_additional_threadlessapis", "PG/apis_additional_userspacefunctions", "PG/apis_additional_versioninformationfunctions", "PG/apis_index", "PG/apis_qat_apis", "PG/architecture", "PG/configuration_files_generalsection", "PG/configuration_files_index", "PG/configuration_files_logicalsection", "PG/configuration_files_maxprocesscalculations", "PG/configuration_files_multipleendpoints", "PG/configuration_files_multipleprocesses", "PG/configuration_files_overview", "PG/configuration_files_samplefiles", "PG/fused", "PG/index", "PG/infrastructure_debugability", "PG/infrastructure_device_telemetry", "PG/infrastructure_heartbeat", "PG/infrastructure_index", "PG/infrastructure_load_balancing", "PG/infrastructure_memory_management", "PG/infrastructure_modes_of_operation", "PG/infrastructure_power_management", "PG/infrastructure_queue_pairs", "PG/infrastructure_ras", "PG/infrastructure_ratelimiting", "PG/infrastructure_reset", "PG/infrastructure_service_instances", "PG/infrastructure_user_queues", "PG/introduction", "PG/revision_history", "PG/security", "PG/services_compression_api", "PG/services_cryptography_api", "PG/services_index", "PG/virtualization", "RN/In-Tree/in_tree_firmware_RN", "RN/In-Tree/index", "RN/In-Tree/revision_history", "RN/Linux/2.X/description", "RN/Linux/2.X/index", "RN/Linux/2.X/known_issues", "RN/Linux/2.X/resolved_issues", "RN/Linux/2.X/revision_history", "RN/Linux/2.X/updates", "RN/VMware/2.X/description", "RN/VMware/2.X/index", "RN/VMware/2.X/known_issues", "RN/VMware/2.X/resolved_issues", "RN/VMware/2.X/revision_history", "RN/VMware/2.X/updates", "RN/index", "VIRT/index", "VIRT/introduction", "VIRT/revision_history", "VIRT/system_configuration", "VIRT/system_preparation", "index", "qat_general/collateral_list", "qat_general/contact", "qat_general/legal", "qatlib/configuration", "qatlib/description", "qatlib/index", "qatlib/install", "qatlib/memlock", "qatlib/qatengine", "qatlib/qatzip", "qatlib/requirements", "qatlib/revision_history", "qatlib/sample_code"], "filenames": ["API_PG/QAT_compressionAPI.rst", "API_PG/QAT_cryptoAPI.rst", "API_PG/baseAPI.rst", "API_PG/index.rst", "API_PG/introduction.rst", "API_PG/revision_history.rst", "GSG/2.X/index.rst", "GSG/2.X/installation.rst", "GSG/2.X/introduction.rst", "GSG/2.X/revision_history.rst", "GSG/2.X/sampleapplications.rst", "GSG/2.X/systemconfiguration.rst", "Intro/introduction.rst", "Intro/terminology.rst", "PERF/application_tunning.rst", "PERF/design_guidelines.rst", "PERF/index.rst", "PERF/introduction.rst", "PERF/revision_history.rst", "PG/acceleration_driver.rst", "PG/apis_additional_apis_index.rst", "PG/apis_additional_availabilityapis.rst", "PG/apis_additional_cnvapis.rst", "PG/apis_additional_congestionapis.rst", "PG/apis_additional_dynamicfunctions.rst", "PG/apis_additional_heartbeatapis.rst", "PG/apis_additional_iommufunctions.rst", "PG/apis_additional_pollingapis.rst", "PG/apis_additional_pollingfunctions.rst", "PG/apis_additional_resetfunctions.rst", "PG/apis_additional_servicespecificapis.rst", "PG/apis_additional_threadlessapis.rst", "PG/apis_additional_userspacefunctions.rst", "PG/apis_additional_versioninformationfunctions.rst", "PG/apis_index.rst", "PG/apis_qat_apis.rst", "PG/architecture.rst", "PG/configuration_files_generalsection.rst", "PG/configuration_files_index.rst", "PG/configuration_files_logicalsection.rst", "PG/configuration_files_maxprocesscalculations.rst", "PG/configuration_files_multipleendpoints.rst", "PG/configuration_files_multipleprocesses.rst", "PG/configuration_files_overview.rst", "PG/configuration_files_samplefiles.rst", "PG/fused.rst", "PG/index.rst", "PG/infrastructure_debugability.rst", "PG/infrastructure_device_telemetry.rst", "PG/infrastructure_heartbeat.rst", "PG/infrastructure_index.rst", "PG/infrastructure_load_balancing.rst", "PG/infrastructure_memory_management.rst", "PG/infrastructure_modes_of_operation.rst", "PG/infrastructure_power_management.rst", "PG/infrastructure_queue_pairs.rst", "PG/infrastructure_ras.rst", "PG/infrastructure_ratelimiting.rst", "PG/infrastructure_reset.rst", "PG/infrastructure_service_instances.rst", "PG/infrastructure_user_queues.rst", "PG/introduction.rst", "PG/revision_history.rst", "PG/security.rst", "PG/services_compression_api.rst", "PG/services_cryptography_api.rst", "PG/services_index.rst", "PG/virtualization.rst", "RN/In-Tree/in_tree_firmware_RN.rst", "RN/In-Tree/index.rst", "RN/In-Tree/revision_history.rst", "RN/Linux/2.X/description.rst", "RN/Linux/2.X/index.rst", "RN/Linux/2.X/known_issues.rst", "RN/Linux/2.X/resolved_issues.rst", "RN/Linux/2.X/revision_history.rst", "RN/Linux/2.X/updates.rst", "RN/VMware/2.X/description.rst", "RN/VMware/2.X/index.rst", "RN/VMware/2.X/known_issues.rst", "RN/VMware/2.X/resolved_issues.rst", "RN/VMware/2.X/revision_history.rst", "RN/VMware/2.X/updates.rst", "RN/index.rst", "VIRT/index.rst", "VIRT/introduction.rst", "VIRT/revision_history.rst", "VIRT/system_configuration.rst", "VIRT/system_preparation.rst", "index.rst", "qat_general/collateral_list.rst", "qat_general/contact.rst", "qat_general/legal.rst", "qatlib/configuration.rst", "qatlib/description.rst", "qatlib/index.rst", "qatlib/install.rst", "qatlib/memlock.rst", "qatlib/qatengine.rst", "qatlib/qatzip.rst", "qatlib/requirements.rst", "qatlib/revision_history.rst", "qatlib/sample_code.rst"], "titles": ["Intel\u00ae QAT Data Compression API", "Intel\u00ae QAT Cryptographic API", "Base API and API Conventions", "API Programmer\u2019s Guide", "Introduction", "Revision History", "Getting Started Guide", "Software Installation", "Introduction", "Revision History", "Sample Applications", "System Configuration", "Introduction", "Terminology", "Application Tuning", "Software Design Guidelines", "Performance Optimization Guide", "Introduction", "Revision History", "Acceleration Driver", "Additional APIs", "Check Device Availability APIs", "Compress and Verify (CnV) Related APIs", "Congestion Management APIs", "Dynamic Instance Allocation Functions", "Heartbeat APIs", "IOMMU Remapping Functions", "Device Polling APIs", "Polling Functions", "Reset Device Function", "Service Specific Polling APIs", "Thread-Less APIs", "User Space Access Configuration Functions", "Version Information Function", "Supported APIs", "Intel QuickAssist Technology APIs", "Architecture", "General Section", "Configuration Files", "Logical Instances Section", "Maximum Number of Process Calculations", "Configuring Multiple Intel\u00ae QuickAssist Technology Endpoints in a System", "Configuring Multiple Processes on a System with Multiple Intel\u00ae QAT Endpoints", "Configuration File Overview", "Sample Configuration Files", "Fused Operations", "Programmer\u2019s Guide", "Debugability", "Telemetry", "Heartbeat", "Infrastructure", "Load Balancing", "Memory Management", "Modes of Operation", "Power Management", "Queues and Queue Pairs", "Reliability, Availability, and Stability (RAS)", "Rate Limiting", "Reset Operation", "Service Instances", "User Queues", "About this Document", "Revision History", "Secure Architecture Considerations", "Data Compression", "Cryptographic Services", "Services", "Virtualization", "Introduction", "Release Notes - In-Tree", "Revision History", "Description of Release", "Release Notes - Linux*", "Known Issues", "Resolved Issues", "Revision History", "Release Updates", "Description of Release", "Release Notes - VMware*", "Known Issues", "Resolved Issues", "Revision History", "Release Updates", "Release Notes", "Virtualization Deployment Guide", "Introduction", "Revision History", "System Configuration", "System Environment Preparation", "Intel QuickAssist Technology Documentation - Hardware Version 2.0", "Documentation & Resources", "Contact & Support", "Legal Notices & Disclaimers", "Configuration and Tuning", "Description", "QATlib User\u2019s Guide", "Installation", "<no title>", "Intel\u00ae QuickAssist Technology(QAT) OpenSSL* Engine", "Intel\u00ae QuickAssist Technology (QAT) QATzip Library", "System Requirements", "Revision History", "Sample Code"], "terms": {"thi": [0, 1, 2, 3, 5, 6, 7, 10, 11, 13, 14, 15, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 35, 36, 37, 38, 39, 40, 42, 46, 47, 48, 49, 52, 56, 60, 63, 64, 65, 67, 68, 71, 73, 74, 76, 77, 79, 82, 85, 87, 88, 91, 93, 96, 98, 99, 100, 101, 102], "section": [0, 1, 2, 4, 5, 7, 10, 11, 12, 14, 15, 17, 19, 22, 24, 27, 32, 34, 35, 38, 40, 41, 42, 43, 46, 48, 50, 52, 57, 63, 64, 66, 68, 71, 74, 76, 77, 85, 87, 91, 96, 98, 99, 100, 101, 102], "describ": [0, 1, 2, 4, 7, 10, 11, 14, 17, 32, 35, 37, 38, 39, 40, 42, 49, 50, 52, 63, 64, 65, 80, 82, 85, 92, 94], "sampl": [0, 1, 4, 5, 6, 7, 38, 39, 43, 46, 48, 52, 71, 87, 94, 95, 96], "code": [0, 1, 4, 5, 6, 7, 8, 12, 15, 17, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 39, 46, 48, 49, 52, 61, 66, 68, 87, 92, 94, 95, 96, 98, 99], "quickassist": [0, 1, 2, 4, 7, 8, 10, 11, 12, 13, 15, 16, 19, 20, 23, 24, 26, 28, 30, 32, 33, 34, 36, 37, 38, 43, 44, 46, 48, 49, 51, 52, 55, 59, 61, 63, 65, 66, 68, 71, 73, 76, 77, 85, 87, 91, 93, 94, 95], "technologi": [0, 1, 2, 4, 7, 8, 10, 11, 12, 13, 15, 16, 19, 20, 34, 38, 46, 49, 51, 52, 55, 59, 61, 63, 65, 66, 68, 71, 77, 85, 87, 92, 94, 95], "begin": [0, 1, 14, 68], "an": [0, 1, 2, 7, 10, 11, 13, 14, 15, 17, 19, 21, 22, 26, 32, 33, 35, 37, 39, 41, 42, 43, 48, 52, 54, 55, 56, 59, 63, 64, 65, 67, 68, 71, 73, 74, 76, 77, 91, 93, 100], "follow": [0, 1, 2, 4, 7, 8, 10, 11, 12, 14, 15, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 41, 42, 48, 49, 50, 52, 54, 56, 57, 61, 63, 64, 65, 66, 67, 68, 71, 73, 74, 76, 77, 85, 87, 88, 93, 96, 97, 98, 99, 100, 102], "descript": [0, 1, 4, 5, 7, 8, 9, 10, 14, 17, 18, 19, 37, 39, 47, 54, 56, 61, 62, 64, 68, 70, 72, 73, 74, 75, 76, 78, 79, 80, 81, 82, 83, 86, 93, 95, 96, 101], "variou": [0, 1, 7, 10, 17, 19, 35, 51, 64, 65, 74, 76], "scenario": [0, 1, 35, 42, 49], "illustr": [0, 1, 14, 49], "usag": [0, 1, 2, 15, 28, 60, 61, 63, 64, 65, 87, 96, 99], "document": [0, 1, 2, 3, 5, 6, 7, 9, 11, 14, 15, 17, 18, 22, 27, 46, 62, 64, 68, 70, 72, 75, 78, 80, 81, 82, 85, 86, 91, 93, 98, 101, 102], "doe": [0, 1, 2, 7, 14, 15, 19, 32, 39, 41, 42, 49, 60, 63, 64, 65, 68, 73, 79, 82, 96, 100], "cover": [0, 12, 61, 63], "integr": [0, 1, 4, 7, 13, 15, 17, 35, 53, 65, 66], "concept": [0, 59, 64], "refer": [0, 1, 2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 17, 19, 32, 35, 37, 39, 40, 41, 47, 49, 52, 57, 61, 64, 65, 67, 68, 71, 73, 74, 76, 77, 79, 80, 82, 87, 96, 98, 99, 100], "relat": [0, 1, 2, 3, 20, 33, 40, 61, 68, 72, 74, 76, 78, 88], "programm": [0, 1, 4, 7, 10, 11, 14, 15, 17, 61, 64, 71, 74, 76, 77, 89, 90, 91], "": [0, 1, 2, 4, 7, 8, 10, 11, 12, 14, 15, 17, 19, 24, 37, 38, 41, 49, 51, 54, 55, 61, 62, 65, 68, 71, 74, 76, 77, 79, 80, 82, 89, 90, 91, 92, 93, 96, 98, 99, 100, 101], "guid": [0, 1, 2, 4, 7, 8, 10, 11, 12, 14, 15, 17, 52, 61, 67, 71, 74, 76, 77, 87, 89, 90, 91, 96, 100, 101, 102], "verifi": [0, 1, 5, 7, 10, 13, 20, 47, 48, 52, 57, 65, 66, 68, 73, 76, 87, 88, 95, 96, 99, 100, 102], "cnv": [0, 7, 13, 20, 64, 71, 77], "your": [0, 1, 2, 7, 11, 14, 35, 38, 39, 64, 68, 74, 76, 87, 92, 96, 97, 100], "product": [0, 4, 17, 44, 68, 90, 92], "import": [0, 35, 41, 48, 54, 63, 64, 67, 68], "inform": [0, 1, 2, 7, 10, 11, 15, 19, 20, 35, 36, 39, 40, 41, 47, 52, 54, 60, 61, 64, 65, 68, 78], "includ": [0, 1, 2, 7, 8, 10, 11, 12, 13, 15, 17, 19, 23, 24, 26, 28, 30, 32, 33, 34, 35, 37, 38, 40, 41, 43, 47, 49, 52, 54, 63, 64, 65, 66, 67, 68, 71, 77, 85, 91, 94, 96, 98, 99, 100, 101, 102], "featur": [0, 1, 2, 6, 7, 37, 47, 48, 49, 52, 54, 56, 57, 63, 66, 69, 70, 72, 73, 76, 78, 83, 87, 95, 96, 99], "The": [0, 1, 2, 4, 7, 8, 10, 11, 12, 13, 14, 15, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 47, 48, 49, 50, 52, 54, 56, 57, 61, 63, 64, 65, 67, 68, 71, 73, 74, 76, 77, 85, 87, 91, 92, 93, 94, 96, 97, 98, 99, 100, 102], "can": [0, 1, 2, 4, 7, 10, 11, 14, 15, 17, 19, 20, 22, 23, 24, 26, 29, 31, 32, 35, 36, 37, 39, 40, 41, 42, 47, 48, 49, 51, 52, 53, 54, 55, 56, 59, 60, 63, 64, 65, 66, 67, 68, 71, 77, 79, 82, 87, 88, 92, 93, 96, 98, 99, 100, 102], "categor": [0, 1, 56], "three": [0, 1, 7, 37, 47, 55, 67, 98], "broad": [0, 1, 13], "area": [0, 1, 13], "common": [0, 1, 2, 4, 12, 14, 39, 63, 64, 65, 68, 71, 91, 99], "function": [0, 1, 2, 4, 5, 6, 7, 8, 13, 14, 15, 19, 20, 21, 22, 23, 25, 27, 30, 31, 35, 38, 39, 41, 42, 53, 55, 57, 61, 63, 64, 65, 67, 68, 77, 79, 82, 87, 92, 93, 98, 100], "initi": [0, 9, 15, 18, 31, 32, 39, 54, 56, 62, 63, 64, 68, 70, 75, 79, 81, 82, 86], "shutdown": [0, 1, 7, 19, 40, 41, 49, 57, 74, 76, 87, 100], "servic": [0, 1, 2, 4, 7, 10, 12, 13, 15, 17, 20, 24, 26, 32, 35, 37, 39, 40, 41, 42, 43, 46, 48, 49, 50, 51, 55, 60, 61, 64, 67, 68, 77, 87, 92, 94, 96, 98, 99], "instanc": [0, 7, 10, 11, 15, 17, 20, 23, 27, 28, 30, 32, 35, 37, 38, 41, 42, 43, 46, 47, 49, 50, 52, 56, 60, 63, 64, 67, 69, 73, 76, 93], "manag": [0, 1, 11, 13, 19, 20, 41, 43, 46, 47, 49, 50, 63, 64, 65, 68, 71, 73, 76, 77, 79, 82, 87, 95, 96, 98, 99], "A": [0, 1, 2, 4, 7, 8, 10, 17, 19, 23, 24, 28, 33, 35, 36, 39, 41, 48, 49, 51, 52, 53, 63, 64, 68, 74, 76, 93, 96, 99], "given": [0, 1, 2, 7, 15, 23, 24, 25, 26, 28, 32, 33, 37, 40, 42, 47, 48, 49, 59, 63, 74, 76, 93], "implement": [0, 1, 2, 6, 15, 17, 19, 37, 49, 51, 53, 56, 57, 60, 64, 65, 67, 71, 74, 76, 96, 98], "present": [0, 1, 2, 7, 14, 15, 21, 36, 60, 63, 64, 65, 73, 76, 88, 100], "each": [0, 1, 2, 10, 11, 14, 15, 19, 23, 24, 27, 32, 35, 37, 38, 39, 40, 41, 42, 43, 48, 49, 51, 55, 56, 57, 59, 60, 63, 64, 65, 67, 71, 74, 76, 87, 93, 100], "repres": [0, 1, 2, 22, 52, 64, 68], "logic": [0, 1, 28, 30, 38, 43, 46, 49, 59, 63, 64], "virtual": [0, 1, 2, 4, 7, 8, 11, 12, 13, 15, 17, 19, 26, 35, 38, 46, 47, 55, 57, 60, 61, 63, 65, 69, 71, 73, 77, 85, 87, 89, 90, 93, 100], "devic": [0, 1, 4, 7, 8, 10, 13, 14, 16, 17, 20, 23, 24, 25, 26, 28, 30, 31, 32, 33, 35, 37, 39, 40, 41, 42, 43, 46, 47, 51, 52, 54, 55, 56, 57, 59, 60, 61, 63, 64, 65, 69, 71, 73, 77, 79, 80, 82, 85, 87, 88, 93, 94, 95, 96], "request": [0, 1, 2, 10, 13, 14, 16, 17, 19, 22, 23, 26, 28, 30, 35, 36, 43, 47, 48, 49, 51, 52, 53, 54, 55, 56, 63, 64, 69, 79, 82, 91, 92, 99], "order": [0, 1, 37, 52, 56, 64, 68, 93], "i": [0, 1, 2, 4, 7, 8, 10, 11, 12, 13, 14, 15, 17, 19, 21, 23, 24, 25, 26, 27, 28, 30, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 60, 61, 63, 64, 65, 67, 68, 71, 77, 79, 82, 87, 88, 91, 93, 95, 96, 99, 100, 102], "guarante": [0, 1, 7, 37, 52], "within": [0, 1, 2, 14, 15, 39, 40, 49, 51, 55, 63, 64, 87, 96, 98, 99, 102], "transform": [0, 7, 64], "decompress": [0, 2, 5, 7, 19, 22, 35, 37, 48, 66, 68, 71, 77], "These": [0, 1, 2, 10, 12, 15, 17, 22, 23, 24, 25, 26, 28, 30, 31, 35, 42, 64, 65, 71, 74, 76, 77, 85, 92, 96, 102], "ar": [0, 1, 2, 4, 7, 8, 10, 11, 12, 13, 14, 15, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 34, 35, 37, 39, 40, 41, 42, 43, 44, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 60, 61, 63, 64, 65, 66, 67, 69, 71, 73, 77, 79, 82, 85, 87, 88, 91, 92, 93, 94, 96, 98, 99, 100, 102], "defin": [0, 1, 2, 7, 19, 22, 24, 32, 35, 37, 39, 41, 48, 52, 63, 64, 65, 67, 71, 77, 88], "cpa_dc": [0, 2, 22, 64], "h": [0, 1, 2, 5, 7, 8, 19, 22, 23, 24, 26, 28, 30, 32, 33, 35, 52, 64, 99], "cpa_dc_dp": [0, 2, 35, 52], "base": [0, 1, 3, 4, 5, 7, 13, 14, 15, 32, 37, 39, 51, 54, 55, 57, 64, 65, 68, 92, 93], "which": [0, 1, 2, 7, 10, 12, 14, 15, 19, 33, 35, 38, 39, 40, 41, 42, 43, 49, 51, 52, 60, 61, 63, 64, 65, 67, 68, 73, 76, 79, 82, 87, 88, 92, 93, 96], "type": [0, 1, 2, 7, 10, 19, 22, 37, 39, 41, 48, 49, 55, 57, 64, 67, 73, 74, 76, 87, 93, 96], "across": [0, 1, 2, 14, 15, 41, 52, 57, 64, 73, 76], "all": [0, 1, 2, 4, 7, 10, 11, 14, 15, 19, 20, 23, 24, 25, 26, 28, 30, 32, 35, 36, 37, 38, 41, 47, 49, 51, 52, 57, 63, 64, 65, 67, 68, 71, 73, 74, 76, 77, 85, 88, 92, 93, 96, 99, 100, 102], "similar": [0, 1, 2, 7, 10, 11, 19, 40, 41, 48, 52, 63, 64, 88, 100], "symmetr": [0, 2, 3, 5, 7, 10, 13, 16, 17, 19, 23, 28, 30, 37, 40, 55, 57, 59, 65, 66, 68, 71, 73, 74, 76, 77, 87, 94, 98], "cryptographi": [0, 2, 3, 4, 7, 8, 13, 15, 19, 37, 40, 41, 43, 59, 61, 66, 94, 96], "ha": [0, 1, 2, 7, 10, 15, 19, 24, 27, 31, 35, 40, 42, 49, 51, 53, 63, 64, 65, 67, 71, 74, 76, 77, 87, 93, 100], "In": [0, 2, 7, 8, 10, 12, 13, 14, 15, 17, 22, 26, 35, 37, 39, 41, 42, 49, 51, 52, 56, 60, 61, 63, 64, 65, 67, 68, 73, 76, 83, 87, 89, 93, 98], "case": [0, 2, 5, 7, 10, 14, 15, 22, 23, 26, 35, 37, 39, 42, 49, 52, 56, 63, 64, 65, 67, 68, 73, 76, 96, 99], "object": [0, 7, 63, 71, 77], "paramet": [0, 1, 2, 7, 8, 11, 12, 15, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 40, 41, 43, 49, 52, 54, 60, 61, 63, 64, 87, 93, 95, 96, 99, 102], "appli": [0, 1, 7, 10, 11, 14, 15, 22, 28, 35, 40, 52, 63, 64, 68, 73, 76, 93, 99, 100], "sever": [0, 1, 2, 15, 35, 49, 64, 65, 102], "might": [0, 1, 35, 64, 68, 93], "submit": [0, 1, 2, 10, 13, 14, 15, 17, 23, 35, 36, 37, 49, 52, 53, 64, 68, 73, 74, 76, 91], "buffer": [0, 1, 5, 10, 14, 16, 19, 26, 35, 37, 55, 56, 60, 63, 64, 69, 99], "singl": [0, 1, 2, 4, 7, 8, 10, 13, 14, 15, 19, 22, 35, 37, 38, 39, 43, 46, 49, 51, 52, 53, 57, 60, 61, 63, 64, 77, 88, 93], "file": [0, 2, 4, 6, 14, 15, 19, 24, 28, 32, 37, 39, 40, 41, 42, 46, 47, 48, 52, 54, 56, 64, 67, 68, 72, 78, 87, 88, 91, 93, 96, 98, 99, 100, 101, 102], "associ": [0, 1, 13, 15, 28, 30, 39, 49, 73, 74, 76], "particular": [0, 1, 2, 15, 19, 22, 28, 49, 52, 65, 68, 74, 76, 100], "stream": [0, 1, 63, 64, 71, 73, 76, 96, 98, 99, 102], "flow": [0, 2, 36, 73, 74, 76], "level": [0, 1, 2, 7, 8, 11, 13, 15, 16, 17, 19, 41, 49, 63, 65, 66, 68, 71, 73, 76, 77, 96, 99], "lower": [0, 13, 15, 17, 64, 73, 74, 76, 79, 82, 93], "provid": [0, 1, 2, 7, 10, 15, 17, 19, 27, 32, 35, 37, 38, 48, 49, 52, 60, 61, 63, 64, 65, 68, 71, 77, 85, 93, 94, 98, 100], "faster": [0, 96], "cost": [0, 1, 2, 13, 14, 15, 17, 35, 52, 64, 65, 92], "ratio": [0, 64], "wherea": [0, 1], "higher": [0, 14, 15, 52, 68, 73, 76, 79, 82], "better": [0, 36], "perform": [0, 2, 6, 7, 11, 12, 13, 14, 17, 19, 22, 24, 35, 36, 38, 40, 48, 49, 52, 53, 57, 63, 65, 66, 71, 85, 87, 89, 90, 92, 94, 96, 99, 100, 101], "algorithm": [0, 1, 2, 4, 10, 13, 15, 64, 71, 73, 74, 76, 77, 96], "e": [0, 1, 7, 14, 19, 29, 37, 40, 41, 47, 49, 51, 52, 54, 59, 68, 73, 74, 76, 87, 88, 96, 99], "g": [0, 1, 7, 14, 19, 29, 40, 41, 47, 49, 51, 52, 59, 68, 73, 74, 76, 87, 96], "deflat": [0, 2, 65, 71, 77, 99], "what": [0, 1, 19, 26, 48, 63, 68], "huffman": [0, 2, 35, 64], "tree": [0, 7, 35, 61, 64, 68, 83, 85, 89, 98, 99], "static": [0, 1, 2, 5, 24, 35, 54, 63, 64, 99], "dynam": [0, 2, 5, 7, 13, 20, 35, 37, 52, 66, 71, 77, 99], "direct": [0, 1, 13, 15, 46, 52, 63, 64, 68, 71, 73, 74, 76, 77, 99, 100], "If": [0, 1, 2, 7, 10, 11, 15, 19, 24, 26, 33, 35, 36, 38, 39, 40, 41, 48, 49, 52, 63, 64, 68, 73, 74, 76, 87, 88, 93, 96, 98, 99, 100, 102], "set": [0, 2, 5, 7, 10, 11, 14, 15, 17, 26, 28, 30, 32, 33, 35, 37, 40, 43, 52, 57, 60, 63, 65, 68, 73, 84, 96, 97, 99, 100], "similarli": [0, 32], "combin": [0, 1, 47, 65, 68, 93], "also": [0, 1, 2, 7, 10, 13, 14, 15, 17, 19, 29, 35, 37, 39, 40, 41, 43, 47, 48, 49, 52, 54, 63, 64, 65, 67, 68, 71, 73, 76, 77, 80, 82, 93], "avail": [0, 1, 2, 4, 7, 13, 14, 15, 17, 19, 20, 24, 31, 37, 40, 42, 44, 46, 47, 49, 50, 51, 53, 55, 57, 59, 63, 64, 67, 69, 73, 79, 82, 87, 92, 93, 94, 98, 99, 100, 102], "both": [0, 1, 2, 14, 15, 17, 35, 36, 37, 39, 41, 42, 49, 64, 87, 88, 93, 98, 99, 100], "call": [0, 1, 2, 8, 14, 15, 19, 21, 22, 24, 28, 29, 30, 32, 33, 35, 36, 39, 41, 42, 49, 52, 63, 64, 65, 73, 74, 76, 93, 96], "same": [0, 1, 2, 7, 14, 15, 24, 40, 41, 49, 62, 64, 67, 74, 76, 79, 82, 87, 93, 96], "maintain": [0, 1, 7, 15, 64, 96], "histori": [0, 3, 6, 16, 46, 64, 69, 71, 72, 77, 78, 83, 84, 94, 95], "between": [0, 1, 2, 13, 14, 15, 17, 24, 36, 41, 49, 55, 60, 63, 65], "do": [0, 1, 7, 26, 41, 49, 53, 64, 69, 71, 93], "requir": [0, 1, 2, 5, 7, 10, 11, 14, 15, 19, 26, 33, 35, 37, 38, 40, 42, 48, 49, 56, 60, 63, 64, 65, 67, 68, 79, 82, 87, 91, 92, 93, 95, 96, 97, 98, 99, 101, 102], "from": [0, 1, 2, 7, 10, 11, 13, 14, 15, 17, 19, 24, 26, 28, 31, 32, 35, 37, 41, 47, 48, 49, 54, 55, 57, 63, 64, 65, 67, 68, 71, 73, 74, 76, 77, 79, 82, 87, 92, 93, 94, 95, 100], "previou": [0, 7, 15, 35, 47, 57, 64, 73, 76, 96], "restor": [0, 49, 56], "befor": [0, 1, 7, 10, 14, 23, 24, 26, 33, 35, 64, 68, 88, 91, 96], "when": [0, 1, 2, 7, 10, 14, 19, 23, 24, 26, 28, 31, 32, 37, 39, 40, 41, 42, 47, 48, 49, 52, 53, 55, 56, 60, 63, 64, 65, 67, 68, 71, 79, 82, 87, 91, 93, 96, 98, 99, 100, 102], "output": [0, 1, 7, 10, 13, 19, 35, 38, 40, 41, 47, 48, 49, 52, 57, 63, 64, 67, 68, 73, 87, 88, 96, 98, 100], "known": [0, 1, 16, 24, 35, 48, 63, 65, 69, 71, 72, 75, 77, 78, 83, 92, 100], "constrain": 0, "size": [0, 1, 2, 7, 10, 14, 15, 26, 35, 37, 47, 52, 55, 64, 68, 73, 93, 99], "overflow": [0, 35, 63, 66], "condit": [0, 35, 49, 63, 68, 74, 76, 79, 82], "about": [0, 5, 6, 39, 46, 62, 71, 77, 80, 82], "exce": [0, 64], "treat": [0, 64, 74, 76], "error": [0, 2, 7, 19, 22, 26, 33, 35, 37, 40, 41, 47, 48, 49, 63, 65, 66, 69, 71, 74, 77, 92, 96, 98], "applic": [0, 1, 2, 4, 6, 8, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24, 31, 35, 36, 37, 38, 39, 41, 46, 51, 52, 53, 56, 59, 61, 66, 68, 71, 77, 93, 96, 97, 99, 102], "keep": [0, 4, 8, 15, 49, 53, 61, 64, 68, 73, 76, 79, 82], "where": [0, 1, 2, 7, 10, 11, 14, 15, 24, 35, 37, 39, 42, 48, 52, 54, 56, 57, 63, 64, 67, 68, 71, 73, 74, 76, 79, 82, 87, 88, 93], "wa": [0, 10, 19, 22, 27, 28, 35, 41, 64, 87, 96, 98, 102], "regist": [0, 1, 13, 15, 19, 27, 37, 49, 60, 63], "input": [0, 1, 13, 19, 28, 30, 35, 38, 52, 57, 63, 64, 74, 76, 99], "rather": [0, 2, 15, 52, 63, 67, 74, 76, 87], "than": [0, 2, 7, 15, 24, 35, 36, 41, 49, 52, 64, 67, 69, 74, 87, 93, 96, 98], "except": [0, 10, 35, 39, 48, 71, 93], "client": [0, 1, 2, 52, 63, 64, 65, 73, 76], "resubmit": [0, 30, 35, 49, 64], "job": [0, 36, 53, 64], "its": [0, 1, 2, 7, 14, 15, 32, 35, 41, 56, 60, 63, 65, 68, 92], "entireti": 0, "larger": [0, 14, 15, 49, 64], "independ": [0, 7, 49, 64], "save": [0, 11, 15, 49, 52, 54], "possibl": [0, 7, 11, 14, 15, 24, 32, 37, 40, 49, 55, 63, 64, 67, 68, 73, 74, 76, 79, 82, 91, 93, 98, 101], "feed": [0, 64], "seed": [0, 1, 35, 64], "checksum": [0, 2, 35, 66, 68, 75, 77], "cpadccompressdata": [0, 64], "cpadcdecompressdata": [0, 64], "cpa_dc_flush_ful": [0, 64], "flush": [0, 66], "flag": [0, 1, 10, 35, 37, 66, 96], "user": [0, 1, 2, 6, 8, 12, 13, 14, 15, 17, 19, 20, 22, 24, 26, 27, 29, 31, 33, 35, 36, 40, 41, 42, 43, 49, 52, 59, 61, 63, 64, 65, 69, 71, 73, 74, 76, 77, 80, 82, 87, 89, 94, 96, 97, 101], "respons": [0, 1, 2, 7, 10, 13, 14, 15, 17, 19, 28, 30, 33, 35, 36, 47, 51, 53, 55, 64, 69], "lite": 0, "being": [0, 1, 7, 10, 15, 28, 33, 43, 52, 63, 64, 74, 76], "standard": [0, 1, 4, 7, 13, 15, 48, 64, 65, 94, 96], "mode": [0, 1, 4, 7, 11, 13, 14, 32, 35, 39, 40, 46, 50, 60, 64, 65, 69, 73, 76, 87, 95, 96, 98, 99], "gzip": [0, 4, 64, 99], "uncompress": [0, 35, 64], "execut": [0, 1, 2, 7, 8, 12, 17, 35, 47, 48, 49, 57, 61, 63, 64, 71, 77, 102], "therefor": [0, 1, 2, 35, 37, 42, 49, 93], "destin": [0, 1, 2, 5, 35, 63, 64, 68, 73], "mai": [0, 1, 2, 5, 7, 10, 11, 14, 15, 19, 35, 37, 38, 39, 40, 41, 42, 43, 49, 51, 52, 56, 62, 63, 64, 67, 69, 71, 75, 77, 88, 92, 96], "larg": [0, 1, 15, 19, 49, 63, 65, 68, 73, 74, 76], "enough": [0, 1, 14, 15, 23, 40, 68, 73, 74, 76], "hold": [0, 1, 2, 33, 52, 60, 64], "result": [0, 1, 7, 14, 15, 19, 35, 49, 52, 63, 64, 68, 73, 92, 100], "amount": [0, 1, 7, 10, 24, 52, 57, 64, 73, 76, 96, 97], "carri": [0, 1, 63], "depend": [0, 1, 2, 14, 15, 21, 35, 37, 39, 40, 43, 44, 48, 49, 51, 52, 54, 60, 64, 73, 76, 77, 79, 82, 87, 96, 98, 99, 100], "For": [0, 1, 2, 7, 10, 11, 14, 15, 19, 32, 35, 37, 39, 40, 41, 42, 43, 47, 49, 51, 52, 61, 64, 67, 68, 71, 73, 76, 77, 87, 88, 91, 93, 96, 97, 101], "onli": [0, 1, 2, 7, 14, 15, 22, 24, 28, 29, 32, 35, 37, 39, 40, 41, 42, 47, 48, 54, 57, 60, 63, 64, 68, 71, 73, 76, 77, 79, 82, 88, 91, 98, 99], "one": [0, 1, 2, 7, 10, 15, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 37, 39, 41, 42, 43, 44, 48, 49, 51, 52, 53, 59, 63, 64, 65, 67, 68, 73, 74, 76, 79, 82, 93, 96, 98, 99], "outstand": [0, 1, 2, 15, 53], "flight": [0, 1, 23, 65], "ani": [0, 1, 2, 14, 17, 21, 23, 24, 28, 31, 32, 39, 41, 48, 49, 54, 63, 64, 68, 71, 73, 76, 88, 91, 96, 100], "time": [0, 1, 7, 10, 11, 13, 14, 15, 17, 22, 24, 32, 35, 39, 48, 49, 55, 63, 64, 68, 73, 74, 76, 79, 82, 87, 96, 98, 99], "exampl": [0, 1, 2, 4, 5, 7, 8, 10, 12, 15, 17, 24, 32, 35, 37, 39, 40, 41, 42, 47, 48, 52, 54, 56, 59, 61, 63, 64, 67, 68, 71, 77, 87, 96, 97], "demonstr": [0, 1, 4, 7, 10, 48, 57, 87, 88], "synchron": [0, 1, 16, 35, 64, 98], "specif": [0, 1, 2, 4, 7, 11, 12, 13, 15, 19, 20, 25, 35, 39, 55, 56, 60, 64, 67, 68, 71, 91, 92, 100], "It": [0, 1, 2, 7, 10, 11, 14, 15, 17, 19, 22, 35, 36, 37, 48, 49, 52, 54, 55, 63, 64, 65, 74, 76, 79, 82, 93, 98, 99, 100], "via": [0, 1, 2, 7, 13, 14, 15, 17, 19, 36, 47, 49, 55, 56, 63, 64, 68, 91], "style": 0, "header": [0, 1, 7, 14, 35, 64, 98], "footer": [0, 64, 74, 76], "locat": [0, 1, 10, 23, 24, 26, 28, 30, 32, 33, 35, 42, 48, 49, 56, 63, 65, 71, 87, 91, 98], "dc": [0, 2, 4, 7, 8, 10, 13, 24, 28, 35, 37, 40, 41, 42, 48, 61, 64, 68, 87, 93, 96, 99], "stateful_sampl": 0, "v1": [0, 1, 4, 35, 98], "8": [0, 2, 10, 14, 35, 37, 41, 48, 51, 55, 64, 65, 68, 71, 74, 75, 76, 77, 87, 93, 96, 98], "later": [0, 17, 74, 76, 93], "releas": [0, 6, 7, 9, 12, 18, 49, 52, 61, 62, 65, 70, 73, 74, 75, 81, 86, 87, 89, 91, 94, 101], "howev": [0, 1, 2, 15, 24, 48, 49, 52, 63, 64, 65, 68, 74, 76, 87], "main": [0, 1, 15, 17, 49, 52, 63, 73, 76, 96], "entri": [0, 1, 8, 12, 15, 17, 26, 49, 52, 55, 61, 73, 76], "point": [0, 2, 14, 15, 35, 49, 52, 64, 65], "sequenc": [0, 1, 64], "made": [0, 1, 7, 14, 49, 56, 64, 65, 68, 71, 74, 76, 77], "creat": [0, 2, 4, 7, 10, 11, 15, 23, 24, 32, 39, 40, 42, 49, 57, 63, 64, 74, 76, 87, 91, 96], "more": [0, 1, 2, 7, 10, 11, 14, 15, 17, 19, 24, 35, 39, 41, 43, 44, 49, 51, 52, 59, 63, 64, 67, 69, 77, 87, 92, 96], "tear": [0, 1], "down": [0, 1, 19, 36, 48, 63, 74, 76], "At": [0, 17, 35, 49, 59, 64, 96, 98, 99], "been": [0, 1, 2, 7, 10, 14, 15, 19, 24, 31, 35, 42, 49, 63, 64, 65, 71, 74, 76, 77, 87, 100], "discov": [0, 1, 49], "start": [0, 1, 2, 8, 10, 12, 14, 15, 19, 24, 32, 40, 41, 47, 49, 52, 57, 64, 67, 68, 71, 73, 74, 76, 77, 79, 82, 87, 89, 90, 91, 96, 102], "capabl": [0, 2, 7, 15, 19, 49, 52, 57, 64, 65, 68, 88, 93], "have": [0, 1, 2, 7, 14, 15, 17, 35, 37, 39, 40, 41, 42, 49, 51, 52, 53, 56, 63, 64, 65, 68, 73, 74, 76, 79, 82, 87, 91, 93, 98, 99, 100], "queri": [0, 1, 2, 15, 19, 23, 36, 39, 41, 48, 57, 64, 68], "found": [0, 1, 2, 4, 41, 48, 49, 57, 64, 100], "suitabl": [0, 64], "determin": [0, 1, 15, 28, 32, 37, 39, 40, 41, 42, 63, 64, 67, 74, 76], "how": [0, 1, 4, 8, 10, 14, 15, 17, 22, 39, 48, 49, 64, 68, 87, 88, 93, 96], "much": [0, 1], "memori": [0, 7, 10, 13, 15, 17, 28, 35, 46, 49, 50, 55, 56, 60, 63, 64, 68, 71, 73, 77, 96, 97, 99], "invok": [0, 1, 2, 7, 15, 53, 63, 65, 98], "cpadcinitsess": 0, "see": [0, 1, 7, 14, 15, 19, 35, 37, 39, 40, 47, 68, 73, 74, 76, 88, 92, 93, 96, 99, 100, 101, 102], "below": [0, 1, 2, 7, 10, 11, 14, 15, 47, 48, 49, 63, 64, 67, 68, 85, 87, 88, 93, 96, 98, 99, 100, 102], "sd": 0, "complevel": [0, 64], "cpa_dc_l4": [0, 64], "comptyp": [0, 64], "cpa_dc_defl": 0, "hufftyp": [0, 64], "cpa_dc_ht_stat": 0, "sessdirect": [0, 64], "cpa_dc_dir_combin": [0, 64], "sessstat": [0, 64], "cpa_dc_stat": [0, 64], "cpa_dc_api_version_num_major": 0, "1": [0, 1, 2, 4, 7, 10, 14, 19, 22, 24, 26, 32, 35, 37, 39, 40, 41, 42, 48, 49, 52, 57, 59, 63, 64, 65, 67, 68, 71, 73, 74, 75, 76, 77, 81, 87, 93, 96, 98, 99, 100, 102], "cpa_dc_api_version_num_minor": 0, "6": [0, 1, 10, 19, 39, 41, 48, 49, 64, 67, 68, 71, 93, 99], "deflatewindows": 0, "7": [0, 1, 10, 19, 35, 41, 48, 64, 67, 69, 74, 76, 77, 93, 96, 98], "endif": [0, 1], "cpa_dc_crc32": 0, "context": [0, 1, 2, 14, 15, 17, 26, 41, 49, 52, 53], "alloc": [0, 14, 15, 20, 26, 32, 37, 39, 46, 47, 49, 52, 55, 57, 60, 63, 64, 74, 76, 93, 99], "print_dbg": [0, 1, 2], "cpadcgetsessions": 0, "n": [0, 1, 2, 11, 19, 32, 48, 51, 63, 67, 68, 74, 76, 93], "statu": [0, 1, 2, 7, 10, 13, 19, 25, 26, 41, 47, 48, 54, 65, 66, 67, 73, 74, 76, 87, 96, 100], "dcinsthandl": [0, 2], "sess_siz": 0, "ctx_size": 0, "cpa_status_success": [0, 1, 2, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "phys_contig_alloc": [0, 1], "sessionhdl": 0, "0": [0, 1, 2, 4, 7, 8, 10, 11, 12, 15, 19, 23, 24, 26, 27, 28, 32, 35, 37, 39, 40, 41, 42, 46, 47, 48, 49, 52, 54, 56, 57, 61, 63, 64, 65, 68, 71, 73, 74, 75, 76, 77, 87, 88, 93, 96, 98, 99, 100], "bufferlist": [0, 68], "cpadcbufferlistgetmetas": [0, 2, 52], "buffmetas": 0, "pbuffermeta": [0, 1], "os_malloc": [0, 1], "pbufferctx": 0, "bufferlistmems": [0, 1], "pctxbuf": 0, "pflatbuff": [0, 1], "cpaflatbuff": [0, 1, 2, 52], "pbuffer": [0, 1, 52], "numbuff": [0, 1], "pprivatemetadata": [0, 1], "dataleninbyt": [0, 1, 2, 52, 64], "pdata": [0, 1, 2, 52, 64], "d": [0, 1, 7, 17, 19, 47, 48, 51, 52, 54, 56, 73, 76, 87, 88, 99], "cinsthandl": 0, "setup": [0, 1, 7, 11, 66, 88, 98], "null": [0, 1, 2, 49, 64, 65, 96, 97], "callback": [0, 1, 2, 15, 27, 28, 30, 35, 36, 49, 53, 64], "sync": [0, 16], "sourc": [0, 1, 2, 5, 7, 35, 63, 64, 65, 68, 87, 95], "must": [0, 1, 2, 5, 7, 10, 11, 15, 22, 24, 26, 33, 35, 37, 38, 39, 41, 49, 51, 52, 56, 59, 63, 64, 68, 71, 96, 99, 100], "arrai": [0, 2, 52, 63], "flat": [0, 1, 15], "contigu": [0, 1, 2, 15, 19, 35, 37, 52], "carv": 0, "up": [0, 1, 7, 10, 11, 14, 19, 31, 33, 35, 41, 48, 49, 51, 52, 55, 63, 64, 65, 67, 74, 76, 84, 96], "reduc": [0, 1, 14, 15, 37, 46, 54, 57, 63, 64, 96], "number": [0, 2, 4, 5, 7, 10, 11, 14, 16, 19, 20, 22, 24, 28, 29, 30, 32, 33, 35, 37, 38, 39, 41, 43, 46, 47, 48, 49, 51, 52, 54, 55, 57, 59, 60, 63, 64, 65, 68, 77, 87, 90, 93, 96], "sizeof": [0, 1], "cpabufferlist": [0, 1, 2, 52, 64], "buffermetas": [0, 1], "pbuffermetasrc": 0, "pbufferlistsrc": 0, "psrcbuffer": [0, 1], "sample_buff_s": [0, 1], "pbuffermetadst": 0, "pbufferlistdst": 0, "pdstbuffer": [0, 1], "build": [0, 1, 7, 8, 10, 11, 14, 35, 48, 50, 57, 71, 87, 91, 96, 98, 99, 102], "open": [0, 7, 10, 19, 65, 68, 71, 77, 93, 100], "some": [0, 1, 2, 7, 14, 15, 19, 24, 35, 36, 37, 41, 47, 49, 52, 63, 64, 67, 69, 74, 93, 100], "To": [0, 1, 2, 7, 10, 11, 14, 15, 19, 26, 35, 40, 41, 48, 55, 57, 59, 63, 64, 68, 73, 76, 93, 96, 98, 100, 102], "produc": [0, 1, 7, 35, 64, 68, 74, 76], "first": [0, 1, 2, 5, 7, 10, 11, 12, 42, 48, 49, 52, 59, 63, 64, 68, 74, 87], "thing": [0, 53], "need": [0, 1, 2, 7, 10, 11, 13, 15, 17, 19, 24, 26, 32, 35, 37, 38, 40, 41, 48, 49, 52, 53, 56, 63, 64, 68, 73, 74, 76, 87, 88, 93, 96, 97, 98, 99], "gener": [0, 2, 4, 5, 7, 8, 10, 12, 13, 14, 15, 17, 19, 32, 36, 38, 43, 46, 49, 55, 61, 64, 68, 71, 77, 91, 96, 99], "write": [0, 1, 15, 48, 49, 55, 60, 63, 68, 73, 76, 77, 96], "rfc1952": 0, "cpadcgeneratehead": [0, 64], "hdr_sz": 0, "out": [0, 7, 11, 15, 19, 40, 48, 61, 63, 64, 68, 71, 73, 76, 85, 98, 99], "fwrite": 0, "dstfile": 0, "compliant": 0, "format": [0, 2, 4, 5, 32, 39, 41, 48, 57, 66, 99], "v4": [0, 4], "3": [0, 1, 4, 7, 10, 11, 14, 19, 26, 35, 41, 42, 48, 49, 52, 64, 65, 67, 68, 71, 74, 76, 77, 98, 99], "rfc": [0, 1, 4, 65], "1952": [0, 4], "altern": [0, 1, 15, 49, 52, 88, 91], "zlib": [0, 11, 64, 96, 99], "v3": [0, 4], "1950": [0, 4], "cpa_dc_adler32": 0, "loop": [0, 14, 15, 49, 99], "through": [0, 1, 2, 15, 19, 26, 48, 56, 64, 65, 67, 68, 71, 77, 84, 91, 93, 99], "read": [0, 1, 2, 26, 30, 31, 35, 37, 42, 48, 49, 52, 55, 71, 73, 74, 76, 77, 91], "while": [0, 1, 2, 13, 15, 17, 37, 48, 49, 53, 54, 64, 73, 76, 87, 93], "feof": [0, 1], "srcfile": [0, 1], "src": [0, 1, 4, 10, 71], "fread": [0, 1], "cpa_dc_flush_fin": [0, 64], "els": [0, 1], "cpa_dc_flush_sync": [0, 64], "list": [0, 1, 5, 6, 7, 10, 11, 12, 13, 16, 35, 48, 57, 61, 63, 64, 68, 72, 73, 76, 78, 87, 96, 100], "dcresult": 0, "structur": [0, 2, 4, 6, 10, 14, 23, 33, 35, 41, 49, 52, 64], "print_err": [0, 1, 2], "fail": [0, 1, 2, 7, 19, 26, 32, 33, 39, 40, 63, 69, 79, 82, 100], "break": [0, 1, 48], "we": [0, 1, 2, 24, 37, 48, 59, 88, 93, 96, 99, 102], "now": [0, 1, 19, 42, 63, 64, 65, 68, 100], "check": [0, 1, 2, 4, 7, 10, 15, 20, 25, 26, 39, 41, 49, 64, 67, 68, 71, 73, 76, 77, 88, 96], "cpa_dc_ok": [0, 64], "cpa_dc_overflow": [0, 64, 74, 76], "expect": [0, 14, 15, 37, 64, 69, 74, 93, 98], "cpa_status_fail": [0, 1, 2, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 49], "consum": [0, 1, 2, 7, 14, 15, 35, 48, 54, 60, 64, 69], "memcpi": [0, 1, 52, 99], "final": [0, 1, 2, 63, 73], "becaus": [0, 1, 15, 19, 32, 36, 49, 52, 63, 64, 68, 87], "cpadcgeneratefoot": [0, 5, 64], "increment": [0, 1, 49, 56, 64], "field": [0, 2, 15, 35, 49, 52, 60, 64, 74, 76], "cpadcrqresult": [0, 35, 64, 74, 76], "ad": [0, 1, 5, 7, 11, 62, 64, 65, 70, 88, 98, 100, 101], "so": [0, 1, 2, 7, 10, 15, 17, 19, 37, 49, 54, 63, 64, 65, 71, 77, 79, 82, 87, 91, 93, 96], "far": [0, 64], "alreadi": [0, 11, 14, 28, 87], "written": [0, 49, 68, 71], "As": [0, 1, 7, 14, 15, 24, 42, 47, 49, 63, 64, 73, 76, 91], "clear": [0, 48, 73, 76], "event": [0, 15, 19, 27, 31, 39, 49, 64, 68], "would": [0, 1, 7, 22, 35, 42, 63, 64], "too": [0, 2, 14, 15, 19, 35, 39, 64, 65, 68, 73, 76], "small": [0, 15, 63, 64, 65], "accept": [0, 1, 2, 64, 71], "return": [0, 1, 2, 7, 10, 15, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 41, 46, 48, 49, 53, 57, 64, 65, 73, 87], "invalid": [0, 19, 22, 23, 27, 30, 33, 35, 52, 64, 68, 73], "cannot": [0, 1, 7, 14, 15, 24, 39, 49, 63, 67, 68, 74], "ensur": [0, 1, 7, 11, 14, 15, 23, 48, 51, 52, 63, 64, 68, 73, 76], "append": [0, 48, 64], "consid": [0, 11, 15, 35, 38, 42, 49, 51, 63, 64, 71, 77], "last": [0, 1, 35, 64, 74, 76], "opdata": [0, 1, 23], "flushflag": [0, 64], "intermedi": [0, 2, 37, 64], "cpadcdecompressdata2": [0, 64], "byte": [0, 1, 2, 13, 14, 15, 17, 35, 47, 52, 60, 64, 68, 74, 76, 99], "contain": [0, 1, 2, 4, 8, 10, 11, 28, 32, 35, 37, 39, 43, 47, 52, 59, 63, 64, 65, 68, 71, 77, 92, 93, 96, 100], "crc": [0, 96], "32": [0, 1, 10, 24, 37, 39, 40, 48, 51, 63, 87, 93], "length": [0, 1, 2, 14, 35, 52, 63, 64, 68], "origin": [0, 5, 73, 76, 96], "endoflastblock": [0, 64, 74, 76], "tell": [0, 48, 93], "process": [0, 1, 2, 4, 7, 10, 11, 13, 14, 15, 17, 19, 22, 24, 28, 30, 31, 32, 35, 36, 38, 46, 47, 49, 52, 53, 55, 59, 60, 63, 64, 65, 68, 71, 73, 74, 76, 79, 82, 87, 88, 93], "block": [0, 1, 2, 4, 7, 8, 13, 15, 35, 36, 50, 53, 61, 66, 74, 76], "here": [0, 1, 7, 10, 11, 15, 17, 37, 40, 48, 52, 57, 87, 88, 91, 93, 94, 98, 99], "otherwis": [0, 7, 49, 63, 68], "cpa_tru": [0, 1, 15, 21, 35, 64], "onc": [0, 1, 2, 15, 19, 24, 32, 35, 53, 63, 64, 88, 96], "complet": [0, 1, 2, 7, 10, 11, 13, 14, 15, 17, 24, 36, 49, 60, 64, 67, 68, 73, 74, 76, 87, 96, 102], "torn": [0, 1], "shown": [0, 1, 2, 7, 26, 36, 40, 47, 48, 49, 64, 67, 92], "sessionstatu": [0, 1], "cpadcremovesess": [0, 64], "statist": [0, 1, 7, 35, 37, 43, 96], "debug": [0, 1, 7, 36, 46, 49, 50, 54, 64, 74, 76, 90, 96], "clean": [0, 1, 7, 96, 98, 99], "free": [0, 1, 24, 26, 32, 39, 49, 52, 64, 65, 68, 73, 76], "stop": [0, 1, 6, 19, 32, 40, 41, 64, 74, 76, 79, 82, 96], "etc": [0, 1, 7, 10, 11, 19, 37, 40, 41, 44, 49, 54, 63, 67, 87, 93, 96, 97, 100], "asynchron": [0, 1, 2, 16, 35, 49, 64, 71, 77, 98], "stateless_sampl": 0, "support": [0, 2, 4, 7, 8, 10, 12, 15, 17, 19, 20, 23, 24, 27, 32, 35, 37, 39, 40, 41, 46, 47, 48, 49, 52, 54, 56, 57, 61, 62, 67, 69, 72, 78, 79, 82, 87, 88, 89, 93, 95, 96, 98], "cpadcquerycap": [0, 2, 64], "cap": [0, 2, 57], "statelessdeflatecompress": [0, 2], "statelessdeflatedecompress": 0, "checksumadler32": 0, "dynamichuffman": [0, 2], "unsupport": [0, 2, 64], "dynamichuffmanbufferreq": 0, "cpadcgetnumintermediatebuff": [0, 64], "numinterbufflist": 0, "bufferinterarrai": 0, "buffernum": 0, "approxim": [0, 1], "twice": 0, "2": [0, 1, 2, 4, 7, 8, 10, 11, 12, 14, 19, 26, 35, 37, 39, 40, 41, 42, 46, 47, 48, 52, 55, 57, 59, 61, 63, 64, 65, 68, 71, 75, 77, 81, 87, 88, 93, 98, 99], "sample_max_buff": 0, "end": [0, 1, 11, 41, 49, 63, 64, 65], "address": [0, 1, 2, 11, 15, 17, 19, 26, 35, 37, 39, 47, 52, 55, 57, 59, 63, 67, 68, 71, 73, 77, 87, 88, 98], "translat": [0, 1, 2, 15, 17, 19, 26, 35, 37, 48, 52, 64, 68, 71, 73, 77], "cpadcsetaddresstransl": [0, 2, 19], "samplevirttophi": [0, 1, 2], "datacompress": [0, 2], "compon": [0, 2, 4, 8, 13, 19, 33, 52, 54, 61, 63, 71, 77, 92], "cpadcstartinst": [0, 2], "done": [0, 1, 2, 7, 49, 52, 63, 64, 87, 93, 96, 100], "cpa_dc_ht_full_dynam": [0, 64], "configur": [0, 6, 8, 13, 15, 19, 20, 24, 28, 31, 36, 39, 46, 47, 48, 52, 55, 57, 60, 64, 67, 68, 71, 77, 84, 85, 92, 95, 101, 102], "select": [0, 2, 15, 19, 23, 24, 35, 40, 66, 71, 77], "encod": [0, 1, 2, 64, 87], "over": [0, 1, 2, 14, 17, 64, 65], "autoselectbesthuffmantre": [0, 64], "cpa_fals": [0, 1, 21, 35, 64], "cpa_dc_stateless": 0, "pcontexbuff": 0, "dccallback": 0, "wai": [0, 1, 14, 35, 63, 64, 68, 93, 102], "abov": [0, 1, 24, 37, 47, 49, 64, 68, 87, 88, 93, 100], "without": [0, 1, 7, 14, 15, 19, 21, 23, 35, 41, 53, 57, 60, 64, 69, 71, 73, 76, 93, 98, 99], "overhead": [0, 15, 52], "full": [0, 1, 10, 11, 14, 15, 17, 35, 37, 57, 65, 69, 73, 76, 101], "stateless_multi_op_checksum_sampl": 0, "creation": [0, 49, 77], "regular": 0, "detail": [0, 1, 2, 7, 10, 11, 14, 15, 17, 19, 32, 34, 35, 36, 37, 38, 43, 47, 49, 52, 61, 64, 65, 66, 67, 68, 71, 74, 75, 76, 85, 87, 92, 98, 100], "kei": [0, 4, 5, 7, 8, 12, 13, 15, 17, 19, 48, 49, 55, 59, 61, 66, 71, 77], "note": [0, 1, 5, 8, 12, 35, 37, 39, 40, 49, 52, 61, 62, 64, 71, 77, 89, 90, 91, 93, 94, 96], "valu": [0, 1, 4, 11, 15, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 39, 40, 54, 57, 64, 65, 68, 73, 87, 93, 96], "crc32": [0, 2, 64, 74, 76], "adler32": [0, 64], "subsequ": [0, 1, 15, 41, 47, 63, 64], "simplifi": [0, 1, 36, 64], "basic": [0, 1, 13, 68, 77, 85], "optim": [0, 1, 2, 7, 12, 15, 17, 19, 20, 36, 38, 52, 53, 65, 67, 68, 89, 90, 93, 96], "get": [0, 1, 8, 11, 12, 14, 15, 24, 26, 42, 48, 49, 57, 59, 63, 68, 71, 73, 76, 77, 87, 89, 90, 91, 100, 102], "maximum": [0, 1, 14, 16, 24, 28, 30, 35, 38, 39, 46, 48, 52, 66, 77, 93, 99], "best": [0, 1, 2, 14, 16, 17, 37, 66, 71, 77, 93, 100], "dc_dp_sampl": [0, 74, 76], "cryptograph": [0, 2, 3, 4, 13, 14, 15, 17, 19, 24, 27, 28, 37, 46, 59, 61, 64, 66, 71, 77, 90], "discoveri": [0, 1, 35], "cpadcdpregcbfunc": 0, "dcdpcallback": 0, "next": [0, 1, 2, 14, 15, 35, 42, 52, 55, 64], "cpadcdpinitsess": 0, "store": [0, 1, 35, 48, 63, 64], "scatter": [0, 1, 5, 13, 15, 63], "gather": [0, 1, 5, 13, 15, 43, 63], "cpaphysbufferlist": [0, 2, 52], "align": [0, 2, 15, 35, 68], "cpaphysflatbuff": [0, 2, 52], "alloct": 0, "phys_contig_alloc_align": 0, "half": [0, 1, 2], "sampledata": 0, "second": [0, 1, 13, 17, 42, 48, 49, 57, 64, 74, 76], "psrcbuffer2": 0, "copi": [0, 1, 7, 16, 19, 44, 52, 63, 64, 102], "flatbuff": 0, "bufferphysaddr": [0, 2, 52], "resid": [0, 2, 19, 35, 52], "dma": [0, 13, 19, 26, 35, 68, 73, 76], "access": [0, 2, 7, 8, 11, 12, 13, 15, 17, 19, 20, 26, 35, 36, 39, 40, 42, 48, 52, 61, 63, 64, 65, 71, 77, 93, 94], "popdata": [0, 1], "cpadcdpopdata": [0, 2, 64], "bufferlentocompress": 0, "bufferlenfordata": 0, "dcinstanc": 0, "psessionhandl": 0, "srcbuffer": [0, 1], "srcbufferlen": [0, 1], "cpa_dp_buflist": 0, "destbuff": 0, "destbufferlen": 0, "cpa_dc_dir_compress": 0, "thisphi": [0, 1], "pcallbacktag": [0, 1, 27], "void": [0, 1, 2, 21, 25, 27, 31, 32, 49], "enqueu": [0, 1, 2, 35], "cpadcdpenqueueop": [0, 2, 15, 35, 64], "after": [0, 1, 2, 4, 7, 8, 10, 11, 15, 32, 41, 49, 54, 57, 64, 67, 68, 88, 96], "possibli": [0, 1], "other": [0, 1, 2, 7, 10, 12, 19, 20, 24, 37, 39, 42, 49, 52, 53, 63, 64, 65, 68, 71, 73, 76, 77, 87, 91, 92, 93], "work": [0, 1, 7, 10, 14, 24, 26, 39, 42, 49, 52, 54, 60, 64, 65, 69, 73, 76, 79, 82, 93], "poll": [0, 1, 2, 7, 13, 16, 17, 20, 35, 36, 39, 40, 42, 43, 55, 98, 99], "remov": [0, 1, 5, 7, 11, 26, 52, 57, 64, 73, 76, 79, 82, 87, 88, 96, 99, 102], "cpadcdpremovesess": 0, "sha": [0, 1, 5, 13, 65], "256": [0, 1, 5, 35, 37, 47, 52, 65], "text": [0, 1, 8, 12, 17, 61, 71, 101], "chaining_sampl": 0, "show": [0, 2, 19, 39, 47, 55, 64, 71, 87, 101], "version": [0, 1, 2, 5, 7, 8, 9, 12, 18, 20, 47, 52, 61, 62, 64, 67, 69, 70, 75, 77, 79, 81, 82, 86, 87, 88, 91, 96, 100, 101], "exactli": [0, 1, 41, 96], "sampledcgetinst": [0, 2], "cpa_bitmap_bit_test": 0, "dcchaincapinfo": 0, "cpa_dc_chain_hash_then_compress": 0, "pleas": [0, 1, 2, 12], "storageen": 0, "checksumcrc32": [0, 2], "thread": [0, 1, 2, 7, 10, 14, 15, 20, 35, 36, 39, 49, 53, 59, 60, 63, 74, 76, 93, 99], "sampledcstartpol": 0, "popul": [0, 1, 14, 42, 64], "snippet": 0, "name": [0, 1, 2, 7, 8, 10, 11, 12, 17, 32, 39, 41, 42, 43, 48, 49, 61, 63, 65, 67, 68, 71, 74, 76, 77, 87, 92, 96], "initsess": [0, 73, 76], "dcsessiondata": 0, "cpa_dc_l1": [0, 64], "crypto": [0, 1, 2, 7, 10, 13, 14, 16, 17, 35, 37, 39, 40, 42, 52, 55, 57, 59, 64, 65, 68, 71, 73, 74, 76, 77, 96, 102], "cysessiondata": 0, "sessionprior": [0, 1], "cpa_cy_priority_norm": [0, 1], "symoper": [0, 1], "cpa_cy_sym_op_hash": [0, 1], "hashsetupdata": [0, 1], "hashalgorithm": [0, 1], "cpa_cy_sym_hash_sha256": [0, 1], "hashmod": [0, 1], "cpa_cy_sym_hash_mode_plain": [0, 1], "digestresultleninbyt": [0, 1], "get_hash_digest_length": 0, "place": [0, 2, 15, 19, 35, 36, 57, 64, 65, 67, 99], "digest": [0, 1], "unrel": [0, 1], "digestisappend": [0, 1], "verifydigest": [0, 1], "chainsessiondata": 0, "sesstyp": 0, "cpa_dc_chain_symmetric_crypto": 0, "pcysetupdata": 0, "cpa_dc_chain_compress_decompress": 0, "pdcsetupdata": 0, "cpadcchaingetsessions": 0, "num_sessions_two": 0, "cpadcchaininitsess": 0, "should": [0, 1, 2, 7, 8, 14, 15, 19, 32, 35, 37, 39, 40, 47, 49, 52, 63, 64, 68, 71, 73, 74, 76, 77, 80, 82, 87, 88, 93, 96, 100], "alwai": [0, 1, 14, 35, 49, 64, 73, 76], "meta": 0, "buffers": [0, 1], "sampledatas": 0, "dcchainbuildbufferlist": 0, "four": [0, 2, 37, 40, 42, 51, 52, 93], "4": [0, 4, 5, 7, 10, 11, 14, 15, 19, 35, 37, 41, 42, 48, 55, 64, 67, 68, 71, 75, 77, 81, 87, 93, 99, 100], "pdigestbuff": [0, 1], "hashalg": 0, "dcopdata": 0, "compressandverifi": [0, 47, 64], "compressandverifyandrecov": [0, 64], "cysymopdata": 0, "packettyp": [0, 1], "cpa_cy_sym_packet_type_ful": [0, 1], "hashstartsrcoffsetinbyt": [0, 1], "messagelentohashinbyt": [0, 1], "pdigestresult": [0, 1], "chainopdata": 0, "optyp": 0, "pcysymop": 0, "pdcop": 0, "add": [0, 1, 7, 11, 14, 26, 47, 64, 65, 87, 88, 96], "limit": [0, 2, 7, 14, 15, 37, 39, 40, 42, 46, 50, 52, 59, 63, 65, 66, 67, 68, 72, 73, 76, 78, 88, 93, 95, 96, 97, 99], "softwar": [0, 1, 2, 4, 6, 8, 10, 11, 12, 13, 16, 19, 20, 33, 35, 36, 37, 38, 40, 41, 49, 51, 53, 55, 56, 59, 61, 63, 64, 67, 68, 74, 76, 77, 85, 92, 98, 99], "linux": [0, 1, 2, 7, 11, 13, 36, 39, 46, 47, 48, 56, 60, 65, 67, 69, 73, 74, 76, 77, 83, 87, 89, 90, 91, 93, 95, 96], "current": [0, 1, 13, 17, 19, 22, 23, 24, 48, 49, 61, 63, 64, 69, 71, 73, 74, 76, 77, 79, 82, 87, 92, 94, 95, 96, 98, 99, 100], "calcul": [0, 1, 35, 38, 39, 46, 64, 73, 74, 76], "pswdigestbuff": 0, "calswdigest": 0, "memcmp": 0, "match": [0, 2, 5, 15, 49, 64, 68, 74, 76, 80, 82], "phys_contig_fre": 0, "struct": [0, 1, 64], "z_stream_": 0, "cpa8u": [0, 1, 22], "pdecompbuff": 0, "phwcompbuff": 0, "pswcompbuff": 0, "cpa32u": [0, 1, 23, 24, 25, 28, 29, 30, 33, 49, 64], "bufferlength": 0, "inflate_init": 0, "print": [0, 10, 19, 48, 74, 76, 99], "copymultiflatbuffertobuff": 0, "inflate_decompress": 0, "compar": [0, 1, 15, 35, 57, 64], "inflate_destroi": 0, "cpadcchainremovesess": 0, "cpa_cy_common": 1, "cpa_cy_im": 1, "multipl": [1, 2, 3, 7, 14, 15, 19, 24, 32, 35, 37, 38, 39, 43, 46, 49, 51, 53, 60, 64, 68, 73, 74, 76, 77], "constitut": 1, "cpa_cy_sym": [1, 2], "messag": [1, 2, 4, 7, 10, 13, 17, 19, 28, 30, 36, 40, 48, 49, 64, 73, 74, 76, 79, 82, 88, 96, 99], "authent": [1, 4, 13, 48, 69, 94], "cpa_sy_sym_dp": 1, "recommend": [1, 2, 4, 7, 14, 17, 19, 35, 51, 52, 54, 63, 64, 68, 73, 76, 96], "offload": [1, 2, 10, 13, 14, 15, 17, 19, 35, 64, 65, 94], "cycl": [1, 2, 10, 13, 14, 15, 17, 48, 49, 52, 64, 65], "send": [1, 2, 19, 26, 35, 49, 52, 55, 63, 64], "hardwar": [1, 2, 7, 8, 10, 11, 12, 13, 14, 15, 17, 19, 20, 25, 26, 33, 35, 36, 37, 40, 49, 52, 53, 55, 59, 61, 63, 64, 65, 67, 68, 71, 73, 76, 77, 91, 92, 93, 94], "minim": [1, 2, 14, 15, 35, 49, 64, 68, 73, 76], "constraint": [1, 2, 15, 19, 28, 39, 74, 76], "cpa_cy_kei": 1, "secur": [1, 4, 7, 13, 35, 42, 46, 65, 71, 92, 94, 96, 97], "socket": [1, 4, 11, 13, 14, 35, 51, 64, 68, 73, 79, 82, 88, 93, 100], "layer": [1, 4, 13, 35, 36, 49, 51, 60, 65, 71], "transport": [1, 4, 13, 19, 35, 47, 64, 65], "asymmetr": [1, 2, 4, 7, 8, 10, 17, 23, 30, 35, 37, 40, 57, 59, 61, 65, 68, 74, 76, 87, 94, 98], "cpa_cy_rsa": 1, "rsa": [1, 4, 10, 13, 62, 65, 94], "cpa_cy_dsa": 1, "dsa": [1, 4, 10, 13], "cpa_cy_dh": 1, "cpa_cy_ec": 1, "cpa_cy_ecdsa": 1, "ec": [1, 4], "cpa_cy_ecdh": 1, "ecdh": [1, 4, 13, 17, 65], "cpa_cy_prim": 1, "cpa_cy_ln": 1, "math": [1, 19], "modular": [1, 65], "exponenti": [1, 65], "cpa_cy_ecsm2": [1, 5], "ecc": [1, 13, 56, 94], "random": [1, 4, 13, 71, 77, 99], "bit": [1, 4, 22, 47, 60, 63, 64, 73, 76], "rbg": [1, 4], "deprec": [1, 42, 64, 96], "handl": [1, 2, 7, 14, 15, 19, 23, 26, 27, 30, 35, 37, 41, 54, 56, 59, 68, 73, 74, 76], "cpu": [1, 13, 14, 15, 17, 49, 51, 52, 53, 55, 64, 65, 94, 96, 100], "cpa_cy_drbg": 1, "determinist": [1, 4, 93], "cpa_cy_nrbg": 1, "non": [1, 4, 6, 10, 13, 15, 17, 36, 52, 53, 63, 64, 68, 99], "mean": [1, 13, 17, 30, 48, 64, 99, 100], "specifi": [1, 2, 7, 10, 11, 19, 22, 24, 28, 32, 37, 39, 41, 43, 49, 52, 57, 59, 63, 64, 87], "per": [1, 11, 13, 15, 17, 19, 24, 28, 37, 39, 40, 42, 46, 48, 49, 52, 53, 55, 57, 59, 60, 63, 64, 68, 77, 87, 93], "basi": [1, 48, 57, 64, 87], "two": [1, 2, 11, 14, 15, 17, 19, 24, 34, 35, 37, 40, 42, 48, 49, 51, 52, 64, 65, 73, 76, 93, 98], "high": [1, 11, 13, 15, 17, 28, 35, 39, 41, 49, 63, 64, 65], "normal": [1, 63, 64, 71, 74, 76, 77], "strict": [1, 7, 68], "weight": [1, 67], "round": [1, 26, 35, 48, 51, 96], "robinbas": 1, "scheme": [1, 14, 51, 63, 77, 87], "step": [1, 7, 10, 15, 49, 52, 57, 63, 64, 85, 87, 91, 96, 100, 102], "packet": [1, 2, 10, 14, 15, 35, 37, 56, 63, 93], "internet": [1, 4, 13, 42, 65], "protocol": [1, 4, 13, 15, 42, 64, 65], "tunnel": 1, "decrypt": [1, 2, 14, 15, 65], "plain": [1, 100], "nest": [1, 64], "allow": [1, 2, 7, 8, 10, 12, 14, 15, 17, 19, 21, 22, 32, 33, 35, 38, 39, 40, 41, 43, 49, 52, 60, 61, 63, 64, 65, 67, 68, 73, 76, 77, 94], "truncat": 1, "hmac": [1, 4, 10, 13, 65], "galoi": [1, 4, 13], "counter": [1, 4, 7, 13, 35, 48, 49, 56, 64, 73, 74, 76, 79, 82], "addit": [1, 2, 4, 7, 10, 11, 15, 34, 35, 37, 39, 40, 41, 43, 46, 47, 49, 52, 61, 63, 64, 71, 74, 77, 87], "aad": [1, 4], "inner": 1, "outer": 1, "prefix": 1, "well": [1, 10, 11, 12, 14, 26, 38, 61, 64, 65], "differ": [1, 2, 14, 15, 43, 48, 51, 52, 63, 65, 67, 71, 87, 98], "most": [1, 2, 12, 15, 35, 53, 64, 65, 74, 76], "indic": [1, 10, 14, 15, 17, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 37, 39, 41, 47, 49, 64, 93, 98], "state": [1, 2, 3, 5, 10, 13, 14, 15, 17, 19, 35, 37, 41, 48, 49, 54, 64, 67, 68, 71, 73, 77, 79, 82], "forward": [1, 31, 49, 64, 77], "record": [1, 64, 65], "instead": [1, 2, 7, 10, 15, 35, 37, 52, 64, 65, 73, 76, 93, 96, 99], "restrict": [1, 2, 7, 28, 35, 64], "ae": [1, 2, 4, 5, 13, 65], "cbc": [1, 4, 8, 10, 13, 61, 65], "lookasid": [1, 4, 10, 13, 17, 23, 24, 26, 28, 30, 32, 33, 71], "access_lay": [1, 4, 10, 23, 24, 26, 28, 30, 32, 33, 71], "sample_cod": [1, 4, 10, 71], "sym": [1, 7, 10, 13, 37, 40, 48, 57, 59, 68, 71, 73, 77, 87, 93, 98], "cipher_sampl": 1, "subsect": [1, 91], "suppli": [1, 2, 15, 19, 35, 52], "back": [1, 2, 14, 17, 23, 24, 35, 49, 52, 60, 64, 73, 76, 80, 82], "could": [1, 2, 7, 15, 49, 52, 63, 64, 71, 74, 76, 79, 82, 100], "interrupt": [1, 2, 13, 16, 17, 19, 35, 37, 39, 43, 49, 54, 55, 56, 68, 73, 76], "handler": [1, 2, 39, 49], "bottom": [1, 2], "On": [1, 7, 15, 48, 64, 68], "sleep": [1, 2, 15, 48, 49], "sinc": [1, 15, 35, 49, 64, 96], "permit": [1, 19, 37, 68, 99], "whatev": [1, 96], "appropri": [1, 7, 11, 15, 23, 24, 64, 68, 88, 100], "continu": [1, 15, 24, 49, 64, 93], "variabl": [1, 2, 7, 10, 11, 14, 15, 48, 64, 93], "cpastatu": [1, 2, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "const": [1, 27, 32], "cpacysymop": 1, "operationtyp": 1, "cpaboolean": [1, 21, 64], "verifyresult": 1, "completion_struct": 1, "util": [1, 16, 19, 29, 37, 41, 43, 44, 48, 52, 53, 57, 63, 68, 71, 73, 74, 76, 93, 98, 99], "samplecygetinst": 1, "repeat": [1, 10, 64, 87], "conveni": [1, 8, 12, 17, 61], "ifdef": 1, "do_crypto": 1, "cpainstancehandl": [1, 2, 23, 24, 27, 28, 30, 35], "pcyinsthandl": 1, "cyinsthandl": 1, "max_inst": [1, 2], "cpa16u": [1, 2], "numinst": [1, 2], "cpacygetnuminst": [1, 35, 41], "cpacygetinst": [1, 35, 41], "No": [1, 2, 19, 35, 48, 65, 66, 68, 73, 74, 76, 79, 82, 88, 92, 96], "config": [1, 2, 7, 8, 11, 19, 39, 40, 87, 98, 100], "make": [1, 2, 7, 10, 11, 14, 15, 26, 40, 57, 65, 68, 73, 74, 76, 79, 82, 87, 91, 96, 98, 99, 102], "sure": [1, 2, 68, 73, 76], "convert": [1, 36], "physic": [1, 2, 4, 8, 11, 13, 14, 15, 19, 26, 35, 37, 46, 47, 49, 52, 57, 61, 63, 73, 87, 93, 100], "cpacysetaddresstransl": [1, 19], "run": [1, 2, 6, 10, 11, 15, 19, 32, 33, 48, 49, 57, 63, 64, 68, 71, 73, 74, 76, 77, 79, 82, 87, 88, 93, 95, 96, 98, 99, 100], "cpacystartinst": [1, 73, 76], "you": [1, 7, 10, 14, 15, 19, 47, 64, 68, 71, 73, 74, 76, 87, 88, 96, 100], "One": [1, 40, 42, 49, 57, 59, 65, 67, 93], "cpacysymsessionctxgets": [1, 73, 76], "instancehandle_in": 1, "cpacysymsessionsetupdata": 1, "psessionsetupdata": 1, "psessionctxsizeinbyt": 1, "pad": [1, 35], "cpacysymsessionctxgetdynamics": 1, "whether": [1, 7, 14, 35, 43, 48, 49, 64, 68], "meet": [1, 13, 17, 38, 74, 76], "certain": [1, 14, 65, 69, 74, 76], "criteria": 1, "authencrypt": 1, "either": [1, 7, 13, 15, 17, 36, 49, 54, 59, 64, 65, 71, 74, 76, 87, 96, 98, 99, 102], "arc4": [1, 65], "snow3g_uea2": 1, "aes_ccm": 1, "aes_gcm": 1, "snow3g_uia2": 1, "auth": [1, 48], "third": [1, 48, 71, 77], "exist": [1, 11, 19, 41, 42, 52, 63, 64, 65, 96, 98], "partialsnotrequir": 1, "prefer": [1, 15, 93, 96], "equival": [1, 64], "cpacysymdpsessionctxgetdynamics": 1, "sessionsetupdata": 1, "cpa_cy_sym_op_ciph": 1, "ciphersetupdata": 1, "cipheralgorithm": [1, 73, 76], "cpa_cy_sym_cipher_aes_cbc": 1, "pcipherkei": 1, "samplecipherkei": 1, "cipherkeyleninbyt": 1, "cipherdirect": 1, "cpa_cy_sym_cipher_direction_encrypt": 1, "sessionctxs": 1, "sessionctx": 1, "cpacysyminitsess": [1, 65], "cipherperformop": 1, "actual": [1, 2, 52, 68, 77], "turn": [1, 14, 100], "space": [1, 13, 15, 19, 20, 22, 23, 24, 26, 29, 31, 33, 35, 36, 39, 40, 41, 42, 47, 49, 52, 55, 59, 60, 63, 65, 67, 69, 71, 77, 88, 94], "metadata": [1, 2, 52], "find": [1, 48, 49, 64], "itself": [1, 10, 63, 64], "vector": [1, 46], "cpacybufferlistgetmetas": [1, 2, 52], "pbufferlist": 1, "pivbuff": 1, "samplecipheriv": 1, "piv": 1, "ivleninbyt": 1, "cryptostartsrcoffsetinbyt": 1, "messagelentocipherinbyt": 1, "sampleciphersrc": 1, "completion_init": 1, "cpacysymperformop": 1, "sent": [1, 2, 27, 35, 54], "dst": 1, "wait": [1, 7, 15, 48, 73, 76], "macro": 1, "system": [1, 2, 4, 6, 7, 8, 10, 13, 14, 15, 17, 19, 21, 24, 28, 32, 33, 37, 38, 39, 46, 47, 52, 54, 55, 61, 63, 65, 67, 68, 72, 73, 77, 79, 82, 84, 85, 93, 95, 96], "typic": [1, 2, 10, 19, 32, 35, 49, 52, 65, 93, 96], "real": [1, 14, 64], "world": [1, 68], "essenti": [1, 2, 11, 52], "re": [1, 7, 48, 64, 68, 74, 76, 87, 96], "inject": [1, 22, 69], "decapsul": 1, "stack": [1, 15, 17, 36, 65, 87, 98], "completion_wait": 1, "timeout_m": 1, "timeout": [1, 63], "reus": [1, 16, 64], "v2": [1, 71], "cpacysymsessioninus": 1, "symsessionwaitforinflightreq": 1, "cpacysymremovesess": 1, "mechan": [1, 2, 19, 23, 49, 56, 71, 77], "proc": [1, 49, 88, 100], "filesystem": [1, 11, 48], "new": [1, 15, 49, 52, 60, 64, 68, 73, 76, 87, 91], "cpacysymupdatesess": 1, "behavior": [1, 2, 7, 35], "chang": [1, 2, 7, 11, 15, 24, 40, 54, 63, 64, 67, 68, 71, 73, 77, 79, 82, 87, 96, 100], "try": [1, 19, 48, 100], "hash_sampl": 1, "veri": [1, 13, 15, 17, 64, 67], "highlight": [1, 15, 48], "digest_length": 1, "again": [1, 19, 32, 49, 96], "vectordata": 1, "hash_file_sampl": [1, 10], "cpa_cy_sym_hash_sha1": 1, "repeatedli": 1, "cpa_cy_sym_packet_type_parti": [1, 35], "reach": [1, 64], "cpa_cy_sym_packet_type_partial_last": 1, "cpa_cy_sym_packet_type_last_parti": 1, "until": [1, 2, 14, 15, 49, 53, 64, 74, 76, 79, 82], "ciphertext": 1, "mac": [1, 4, 13], "immedi": [1, 49], "alg_chaining_sampl": 1, "cpa_cy_sym_op_algorithm_chain": 1, "algchainord": 1, "cpa_cy_sym_alg_chain_order_cipher_then_hash": 1, "cpa_cy_sym_hash_mode_auth": 1, "authmodesetupdata": 1, "authkei": 1, "authkeyleninbyt": 1, "samplealgchainingsrc": 1, "notic": [1, 68, 89], "region": [1, 2, 15, 26, 52, 63, 71, 77], "ignor": [1, 7, 10, 32, 35, 64, 68, 73, 76, 79, 82, 93, 96], "figur": [1, 2, 36, 49, 64], "outbound": 1, "plaintext": 1, "advanc": [1, 4, 13, 17, 24, 64], "sha1": [1, 65], "icv": [1, 4], "inbound": 1, "Then": [1, 7, 10, 14, 32, 41, 63], "ipsec_sampl": 1, "icv_length": 1, "sampleauthkei": 1, "even": [1, 14, 35, 37, 56, 65, 68, 73, 76, 93], "though": [1, 35], "fals": [1, 7, 48, 49, 52, 64, 69, 74], "workaround": [1, 68, 73, 74, 76, 79, 82], "errata": [1, 69, 70, 83, 91, 92], "ixa00378322": 1, "sampleesphdrdata": 1, "samplepayload": 1, "plu": [1, 35], "encapsul": [1, 4, 13], "payload": [1, 2, 4, 13, 15, 36, 46, 48, 52, 60, 64, 68, 73], "esp": [1, 4, 13], "trailer": 1, "cpa_cy_sym_alg_chain_order_hash_then_ciph": 1, "cpa_cy_sym_cipher_direction_decrypt": 1, "iv": 1, "emploi": [1, 11, 14, 49], "hmac2": 1, "part": [1, 2, 15, 25, 36, 48, 49, 63, 64, 65], "Not": [1, 7, 15, 19, 20, 64, 96], "sslv3": 1, "6106": 1, "correctli": [1, 10, 11, 39, 64, 68, 73, 76, 96], "simpli": [1, 42], "minu": 1, "padlen": 1, "tlsv1": 1, "explicit": 1, "qa": [1, 10], "mac_length": 1, "16": [1, 10, 19, 24, 40, 48, 51, 64, 67, 71, 87, 88, 93, 99], "exclud": 1, "pad_length": 1, "fill": [1, 14, 15], "leav": 1, "room": 1, "insert": [1, 7, 36, 64], "seq": 1, "ssl_combinedheads": 1, "pcombinedheadbuff": 1, "char": [1, 26, 32], "session_seq_start": 1, "sessseqnum": 1, "hdr_start": 1, "samplehdrdata": 1, "resbuff": 1, "samplecodeaescbcdecrypt": 1, "dest": [1, 64], "15": [1, 48, 64, 71, 74, 76, 93], "nist": [1, 4], "sp800": [1, 4], "38c": [1, 4], "confidenti": [1, 4, 5, 63, 65], "ccm_sampl": [1, 73, 76], "cpa_cy_sym_cipher_aes_ccm": 1, "samplekei": 1, "cpa_cy_sym_hash_aes_ccm": 1, "authkeylen": 1, "cipherkei": 1, "aadleninbyt": 1, "sampleassocdata": 1, "digestappend": 1, "digestverifi": 1, "ctr0": 1, "equal": [1, 24, 49, 57, 74, 76], "construct": [1, 60, 63], "nonc": 1, "aes_block_s": 1, "b0": 1, "assocai": 1, "total": [1, 10, 40, 42, 47, 52, 93], "aadbuffs": 1, "b0_block_siz": 1, "alen_encoding_s": 1, "paadbuff": 1, "valid": [1, 7, 24, 28, 32, 37, 39, 40, 41, 49, 63, 64, 68, 71, 73, 74, 76, 77, 80, 82, 93], "rang": [1, 7, 28, 37, 39, 48, 64, 87], "13": [1, 19, 48, 64, 93, 96], "samplenonc": 1, "offset": [1, 14, 15, 64], "padditionalauthdata": 1, "assoc": 1, "cpa_cy_sym_ccm_set_nonc": 1, "cpa_cy_sym_ccm_set_aad": 1, "38d": [1, 4], "gmac": [1, 4, 65], "gcm_sampl": 1, "cpa_cy_sym_cipher_aes_gcm": 1, "cpa_cy_sym_hash_aes_gcm": 1, "tag_length": 1, "sampleaddauthdata": 1, "tag": [1, 52], "understood": 1, "j0": 1, "12": [1, 19, 48, 64, 93, 96, 99], "give": [1, 42], "sampleiv": 1, "commun": [1, 7, 17, 48, 49, 51, 55, 63, 68, 91, 100], "chipset": [1, 7, 17, 41, 51, 63, 68, 71], "8900": 1, "8920": 1, "seri": [1, 7, 17, 51, 64, 65, 68], "symdp_sampl": 1, "tradit": [1, 2, 16, 22, 35, 65, 71, 77], "cpacysymdpregcbfunc": 1, "symdpcallback": 1, "cpa_cy_priority_high": 1, "cpacysymdpsessionctxgets": [1, 73, 76], "cpacysymdpinitsess": [1, 73, 76], "lac_hw_precomput": 1, "hw": [1, 60, 68, 71, 73, 74, 76, 77, 79, 82, 87], "pre": [1, 39, 96, 98, 99, 102], "comput": [1, 13, 64, 65], "icp_sal_cypolldpinst": 1, "oppos": [1, 14, 35, 64, 68], "cpacysymdpenqueueop": [1, 2, 15, 35], "expens": [1, 2, 35, 53, 64], "term": [1, 2, 4, 8, 12, 13, 17, 51, 61, 63, 64, 65, 68], "amort": [1, 2, 35], "suffici": [1, 15, 52, 63, 74, 76], "thei": [1, 19, 49, 63, 64, 77, 79, 82, 87, 88], "cpacysymdpperformopnow": [1, 2, 35], "performopnow": [1, 15, 35], "cpacysymdpenqueueopbatch": [1, 2, 15], "compress": [1, 2, 3, 4, 5, 7, 8, 10, 13, 14, 15, 17, 19, 20, 24, 27, 28, 36, 37, 40, 43, 46, 47, 48, 49, 52, 55, 57, 59, 61, 63, 65, 66, 69, 71, 73, 77, 87, 90, 94, 96, 99, 102], "cpacysymdpremovesess": 1, "manual": [1, 2, 4, 7, 8, 10, 12, 13, 14, 15, 17, 19, 35, 49, 61, 64, 65, 71, 77], "prototyp": 1, "pass": [1, 2, 7, 14, 15, 19, 23, 27, 30, 33, 35, 39, 49, 52, 63, 64, 67, 68, 73, 76, 80, 82, 84, 85, 93], "pointer": [1, 2, 14, 23, 24, 26, 27, 33, 52, 55, 64], "option": [1, 2, 11, 14, 19, 37, 39, 43, 57, 64, 93, 98, 99], "4346": [1, 4], "backward": 1, "compat": [1, 7, 71, 77, 79, 82], "legaci": [1, 7, 96], "2246": [1, 4], "server": [1, 11, 63, 65, 77, 96], "map": [1, 10, 26, 37, 47, 48, 52, 60, 63, 64, 67, 87], "key_block": 1, "prf": 1, "securityparamet": 1, "master_secret": 1, "expans": [1, 35, 66], "server_random": 1, "client_random": 1, "materi": [1, 4, 8, 13, 61, 68, 71], "deriv": [1, 4, 65, 68], "tlsop": 1, "cpa_cy_key_tls_op_key_material_der": 1, "secret": [1, 11, 35], "master": 1, "userlabel": [1, 35], "final_client_write_kei": 1, "client_write_kei": 1, "cpa_cy_key_tls_op_user_defin": 1, "final_server_write_kei": 1, "server_write_kei": 1, "iv_block": 1, "durat": 1, "togeth": [1, 15, 17, 41, 47], "kasumi": [1, 35, 65, 73, 76], "f9": [1, 65], "f8": [1, 65, 73, 74, 76], "insid": [1, 60, 63, 71, 77, 79, 82], "update_sampl": 1, "cpa_cy_sym_cipher_kasumi_f8": 1, "cipherkeylen": 1, "cpa_cy_sym_hash_kasumi_f9": 1, "additionalauthdata": 1, "instancehandl": [1, 23, 27, 28, 30], "srclen": 1, "digestresult": 1, "ivlen": 1, "dstbuffer": 1, "dstbufferlen": 1, "sessionupdatedata": 1, "cpa_cy_sym_sesupd_cipher_kei": 1, "cpa_cy_sym_sesupd_auth_kei": 1, "With": [1, 10, 13, 14, 15, 24, 37, 49, 52, 64, 65, 93, 102], "just": [1, 14, 65, 98], "hkdf_sampl": 1, "manner": [1, 11, 64], "qaememallocnuma": 1, "cpacykeygenhkdfopdata": 1, "instanceinfo2": 1, "nodeaffin": 1, "byte_alignment_64": 1, "usdm": [1, 13, 52, 63], "pin": [1, 15, 52, 99], "phkdfdata": 1, "hkdfdatas": 1, "go": [1, 26, 91], "hkdfkeyop": 1, "cpa_cy_hkdf_key_extract_expand": 1, "seedlen": 1, "secretlen": 1, "infolen": 1, "info": 1, "tabl": [1, 19, 26, 37, 39, 40, 42, 47, 63, 64, 65, 70, 71, 101], "ikm": 1, "slt": 1, "inf": 1, "cpa_cy_hkdf_key_extract_expand_label": 1, "numlabel": 1, "labellen": 1, "sublabelflag": 1, "0x00": [1, 64, 87], "disabl": [1, 6, 7, 15, 37, 39, 48, 52, 54, 64, 67, 87, 96, 99], "seed_label": 1, "secret_label": 1, "cpa_cy_hkdf_sublabel_kei": 1, "cpa_cy_hkdf_sublabel_iv": 1, "pkeygencb": 1, "argument": [1, 7, 19, 88], "pkeygentlsopdata": 1, "cpacykeyhkdfciphersuit": 1, "chosen": [1, 15], "arrang": [1, 64], "adjust": 1, "cpacykeygentls3": 1, "hkdfsamplecallback": 1, "cpa_cy_hkdf_tls_aes_128_gcm_sha256": 1, "suit": [1, 15, 65], "hkdfout": 1, "asym": [1, 4, 7, 8, 10, 37, 40, 48, 57, 59, 61, 68, 71, 73, 77, 87, 93, 98], "diffie_hellman_sampl": 1, "sampledhperformop": 1, "dh": [1, 94], "phase": [1, 17], "primep": 1, "baseg": 1, "privatevaluex": 1, "pv": [1, 4, 75], "pcpadhopdatap1": 1, "cpacydhphase1keygenopdata": 1, "privat": [1, 13, 65], "memset": 1, "primep_768": 1, "baseg1": 1, "mod": 1, "henc": [1, 14, 15, 63], "cpacydhkeygenphase2secret": 1, "cpacygenflatbufcbfunc": 1, "asymcallback": 1, "cb": 1, "pcallbacktagph2": 1, "pcpadhopdatap2": 1, "p": [1, 7, 99], "x": [1, 10, 15, 37, 39, 40, 48, 51, 52, 54, 57, 64, 67, 79, 82, 93], "poctetstringsecretkei": 1, "share": [1, 7, 15, 17, 24, 57, 60, 64, 67, 71, 73, 77, 87], "anoth": [1, 15, 93], "parti": [1, 71, 77], "b": [1, 48, 60, 64, 99], "take": [1, 7, 10, 14, 28, 49, 63, 64, 67, 73, 76, 102], "earlier": [1, 49], "prime_sampl": 1, "primeperformop": 1, "candid": 1, "greatest": [1, 4], "divisor": [1, 4], "gcd": [1, 4], "fermat": 1, "miller": [1, 96], "rabin": [1, 96], "luca": 1, "pprimetestopdata": 1, "primecandid": 1, "pprime": 1, "sampleprimep_768": 1, "performgcdtest": 1, "performfermattest": 1, "nummillerrabinround": 1, "nb_mr_round": 1, "millerrabinrandominput": 1, "pmr": 1, "mr": 1, "performlucastest": 1, "cpacyprimetest": 1, "cpacyprimetestcbfunc": 1, "primecallback": 1, "testpass": 1, "true": [1, 48, 52, 54], "probabl": 1, "latter": [1, 64, 68], "proper": [1, 63], "involv": [1, 15, 17, 56, 64, 65, 74, 76], "sign": [1, 7, 13, 65], "r": [1, 7, 11, 48, 99, 100], "sampleecsm2signperformop": 1, "provis": [1, 24], "scalar": 1, "multipli": [1, 65], "k": [1, 68], "cpacyecsm2sign": 1, "pcpaecsm2signopdata": 1, "cpacyecsm2signopdata": 1, "pr": [1, 37], "gfp_sm2_size_in_byt": 1, "cpacyecsm2signcbfunc": 1, "asymsigncallback": 1, "opaqu": [1, 2, 27, 52], "signstatu": 1, "sampleecsm2verifyperformop": 1, "coordin": 1, "y": [1, 10, 11, 88, 96, 98, 99, 102], "cpacyecsm2verifi": 1, "pcpaecsm2verifyopdata": 1, "cpacyecsm2verifyopdata": 1, "xp": 1, "yp": 1, "ypa": 1, "cpacyecsm2verifycbfunc": 1, "asymverifycallback": 1, "verifystatu": 1, "sampleecsm2encperformop": 1, "x1": 1, "y1": 1, "pb": 1, "x2": 1, "y2": 1, "cpacyecsm2encrypt": 1, "pcpaecsm2encopdata": 1, "cpacyecsm2encryptopdata": 1, "pcpaecsm2encoutputdata": 1, "cpacyecsm2encryptoutputdata": 1, "asymenccallback": 1, "sampleecsm2decperformop": 1, "cpacyecsm2decrypt": 1, "sm3": [1, 65, 71, 77], "hashcheck": 1, "correct": [1, 7, 15, 35, 56, 64, 88], "pcpaecsm2decopdata": 1, "cpacyecsm2decryptopdata": 1, "pcpaecsm2decoutputdata": 1, "cpacyecsm2decryptoutputdata": 1, "asymdeccallback": 1, "pdecoutputdata": 1, "message_len": 1, "phashbuff": 1, "pc3buffer": 1, "side": [1, 2, 63, 73, 76], "sampleecsm2keyexperformop": 1, "separ": [1, 14, 15, 19, 38, 39, 41, 42, 48, 49, 55, 63, 87], "cpacyecsm2keyexphase1": 1, "cpacyecsm2keyexphase2": 1, "pcpaecsm2keyexphase1aopdata": 1, "cpacyecsm2keyexphase1opdata": 1, "ra": [1, 13, 46, 50, 71, 77], "pcpaecsm2keyexphase1bopdata": 1, "rb": 1, "pcpaecsm2keyexphase1aoutputdata": 1, "cpacyecsm2keyexoutputdata": 1, "pcpaecsm2keyexphase1boutputdata": 1, "asymkeyexphase1callback": 1, "p1": 1, "pcpaecsm2keyexphase2aopdata": 1, "cpacyecsm2keyexphase2opdata": 1, "da": 1, "xpb": 1, "ypb": 1, "pcpaecsm2keyexphase2bopdata": 1, "db": 1, "xpa": 1, "pcpaecsm2keyexphase2aoutputdata": 1, "pcpaecsm2keyexphase2boutputdata": 1, "asymkeyexphase2callback": 1, "p2": 1, "accord": [1, 7, 64], "sampleecsm2pointmultipli": 1, "date": [1, 5, 9, 18, 62, 68, 70, 75, 77, 81, 86, 92, 101], "pxk": 1, "pyk": 1, "cpacyecsm2pointmultipli": 1, "cpacyecsm2pointmultiplyopdata": 1, "cpacyecpointmultiplycbfunc": 1, "asympointmultcallback": 1, "multiplystatu": 1, "sampleecsm2generatortmultipli": 1, "cpacyecsm2generatormultipli": 1, "cpacyecsm2generatormultiplyopdata": 1, "asymgeneratormultcallback": 1, "sampleecsm2pointverifi": 1, "cpacyecsm2pointverifi": 1, "cpacyecsm2pointverifyopdata": 1, "cpacyecpointverifycbfunc": 1, "asympointverifycallback": 1, "aspect": [2, 4, 15, 65], "top": [2, 7, 8, 53, 60, 71, 96], "definit": [2, 23, 24, 26, 28, 30, 32, 33, 35], "interfac": [2, 4, 8, 12, 13, 17, 19, 52, 53, 60, 61, 65, 67, 71, 77], "cpa": [2, 19, 52], "consist": [2, 49, 52, 57, 63, 64], "dmaabl": [2, 15, 52], "us": [2, 3, 5, 7, 8, 10, 11, 16, 17, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 37, 38, 39, 40, 41, 42, 47, 48, 49, 51, 52, 53, 54, 55, 57, 59, 60, 61, 62, 63, 64, 65, 67, 69, 71, 77, 79, 82, 85, 88, 92, 93, 96, 98, 99, 100, 102], "simpl": [2, 51, 52, 60, 64], "unchain": [2, 52], "cpa_sym_dp": [2, 52], "layout": [2, 69], "unbound": [2, 52], "modifi": [2, 7, 14, 24, 52, 63, 73, 76, 87, 102], "intern": [2, 14, 15, 21, 32, 37, 42, 47, 49, 52, 54, 60, 64], "obtain": [2, 7, 8, 35, 41, 47, 52, 63, 87, 96, 98, 99], "There": [2, 10, 11, 12, 15, 20, 28, 30, 35, 38, 39, 41, 42, 43, 47, 48, 49, 51, 52, 63, 64, 67, 68, 73, 76, 93, 96, 100], "impact": [2, 14, 15, 24, 37, 39, 52, 54, 63, 64, 68, 73, 74, 76, 79, 82, 93], "graphic": [2, 8, 12, 13, 17, 61], "represent": [2, 19], "individu": [2, 11, 19, 37, 39, 52, 60, 63], "channel": [2, 14, 63, 91], "acceler": [2, 4, 6, 8, 12, 13, 14, 15, 17, 24, 26, 28, 31, 35, 36, 37, 40, 41, 42, 46, 47, 48, 49, 52, 53, 56, 61, 63, 65, 66, 67, 77, 85, 93, 94], "relationship": 2, "identifi": [2, 15, 39, 42, 47, 60, 63, 64, 67, 87, 92, 93], "achiev": [2, 14, 15, 64, 65], "invoc": [2, 15, 35, 49], "cpadcgetnuminst": [2, 35], "pdcinsthandl": 2, "cpadcgetinst": [2, 35], "ssl": [2, 4, 10, 13, 15, 32, 35, 37, 39, 41, 42], "veryf": 2, "expos": [2, 19, 22, 54, 55, 56, 60, 63, 64, 67, 71, 77, 94], "uniqu": [2, 32, 35, 39, 41, 67, 93], "matrix": 2, "statefuldeflatedecompress": 2, "stateless": [2, 3, 5, 37, 64, 74, 76], "engin": [2, 4, 10, 12, 13, 14, 15, 17, 19, 24, 37, 41, 47, 49, 51, 53, 64, 67, 68, 74, 76, 93, 95, 99], "latenc": [2, 10, 13, 14, 15, 17, 35, 36, 48, 54, 63], "multi": [2, 51, 53, 93], "develop": [2, 4, 11, 12, 13, 17, 49, 63, 64, 65, 92, 99], "architectur": [2, 13, 14, 17, 46, 50, 61, 71, 77], "control": [2, 13, 14, 15, 17, 46, 49, 60, 63, 65, 68, 71, 77], "schedul": [2, 29], "spend": 2, "semaphor": 2, "primit": 2, "upon": [2, 14, 36, 40, 96, 97], "unblock": 2, "resum": 2, "outsid": [2, 11, 20, 63], "word": 2, "platform": [2, 7, 8, 12, 13, 15, 16, 17, 35, 38, 40, 41, 47, 51, 61, 63, 64, 65, 67, 68, 72, 73, 77, 79, 82, 88, 93, 94, 100], "entiti": 2, "own": [2, 35, 36, 41, 56, 60, 63, 68, 71], "caller": 2, "calle": 2, "owner": [2, 63, 68], "de": [2, 15, 64, 65, 99], "longer": [2, 64, 73, 76, 102], "program": [2, 4, 7, 8, 13, 61, 64, 71, 77], "retain": 2, "still": [2, 19, 32, 42, 49, 64, 80, 82], "default": [2, 7, 11, 14, 19, 35, 38, 39, 41, 43, 49, 51, 52, 54, 55, 56, 63, 64, 68, 73, 77, 87, 93, 96, 98, 99, 100, 102], "deviat": [2, 92], "clearli": 2, "cpa_cy_sym_dp": [2, 35], "environ": [2, 7, 11, 14, 35, 55, 63, 71, 77, 84, 93, 96], "driver": [2, 7, 8, 10, 11, 12, 13, 14, 15, 17, 23, 24, 26, 31, 32, 35, 37, 39, 40, 41, 42, 46, 49, 52, 54, 56, 57, 60, 61, 64, 65, 69, 70, 71, 73, 74, 76, 78, 83, 85, 87, 90, 93, 95, 96], "purpos": [2, 7, 36, 63, 68], "increas": [2, 14, 15, 17, 39, 49, 64, 68, 73, 74, 76, 79, 82, 94, 96], "partial": [2, 7, 16, 35, 48], "safeti": [2, 15, 35], "dispatch": [2, 14, 15, 28, 30, 35, 60], "further": [2, 12, 17, 35, 64, 68], "avoid": [2, 16, 35, 37, 49, 52, 59, 63, 79, 82, 96], "cpacysymdpopdata": [2, 35], "least": [2, 14, 19, 21, 35, 93, 98, 99], "dmaaccess": 2, "ccm": [2, 4, 13, 65, 73, 76], "gcm": [2, 4, 13, 65], "verif": [2, 52, 64], "zero": [2, 11, 14, 15, 30, 49, 64], "distinguish": [2, 41, 87], "previous": [2, 7, 35, 60, 68], "cpadcdpenqueueopbatch": [2, 15, 64], "cpadcdpperformopnow": [2, 35], "trade": [2, 15, 17], "off": [2, 15, 17], "introduct": [3, 6, 16, 66, 69, 83, 84, 89], "intend": [3, 17, 23, 24, 26, 28, 30, 32, 64, 85, 92], "audienc": [3, 17], "terminologi": [3, 6, 16, 46, 89], "convent": [3, 4, 6, 16, 46], "intel": [3, 4, 5, 7, 8, 10, 11, 12, 13, 16, 19, 20, 26, 28, 32, 34, 36, 37, 38, 39, 40, 43, 46, 48, 50, 51, 52, 54, 55, 56, 59, 61, 63, 65, 66, 68, 72, 73, 74, 76, 77, 79, 82, 84, 85, 88, 91, 92, 93, 94, 95, 96, 101, 102], "qat": [3, 4, 6, 7, 8, 10, 12, 13, 16, 17, 19, 21, 26, 28, 31, 32, 36, 37, 38, 39, 40, 41, 43, 46, 48, 50, 51, 52, 54, 55, 56, 59, 60, 61, 64, 65, 66, 69, 70, 72, 74, 77, 79, 82, 83, 84, 85, 88, 91, 93, 94, 95, 96, 100, 102], "overview": [3, 5, 6, 16, 38, 46], "diffi": [3, 4, 10, 13, 17, 65, 94], "hellman": [3, 4, 10, 13, 17, 65, 94], "sm2": [3, 5, 65], "data": [3, 4, 5, 7, 8, 10, 13, 14, 16, 17, 19, 23, 24, 26, 27, 28, 30, 36, 37, 40, 41, 43, 46, 47, 48, 49, 52, 55, 59, 61, 63, 65, 66, 67, 68, 71, 74, 77, 87, 93, 94, 96, 99, 102], "oper": [3, 4, 6, 7, 8, 10, 13, 14, 16, 17, 22, 25, 26, 27, 29, 31, 32, 33, 35, 36, 38, 46, 48, 50, 52, 57, 61, 63, 64, 65, 67, 68, 72, 77, 85, 93, 96], "plane": [3, 5, 13, 16, 19, 23, 28, 49, 52], "chain": [3, 4, 5, 8, 10, 13, 37, 61, 68], "hash": [3, 4, 5, 10, 13, 37, 64, 93], "revis": [3, 4, 6, 16, 33, 46, 60, 69, 71, 72, 77, 78, 83, 84, 94, 95], "api": [4, 5, 7, 8, 10, 12, 13, 14, 16, 17, 19, 24, 26, 28, 29, 32, 36, 41, 42, 46, 49, 51, 52, 53, 59, 61, 63, 65, 66, 68, 72, 73, 77, 89, 93, 94, 96], "who": [4, 12, 63], "wish": [4, 12, 64], "workload": [4, 12, 15, 48, 54, 57, 64, 65, 74, 76, 79, 82, 93], "709199": [4, 90], "709201": [4, 90], "cipher": [4, 5, 8, 13, 14, 15, 37, 48, 61, 68], "autent": 4, "90": [4, 67], "tl": [4, 5, 13, 15, 35, 37, 65], "5246": 4, "6101": 4, "resourc": [4, 14, 15, 19, 32, 33, 37, 39, 57, 63, 65, 87, 89, 93], "page": [4, 26, 37, 48, 49, 60, 65, 68, 71, 74, 79, 82, 90, 91, 94, 99], "packag": [4, 6, 7, 10, 12, 15, 19, 20, 38, 40, 43, 44, 47, 49, 51, 52, 57, 61, 68, 75, 78, 84, 87, 90, 95], "instal": [4, 6, 8, 10, 19, 40, 41, 44, 57, 67, 74, 76, 77, 79, 82, 84, 85, 91, 95, 100], "sub": [4, 8, 59, 69], "directori": [4, 7, 8, 10, 11, 12, 17, 19, 35, 43, 49, 61, 63, 68, 71, 87, 96, 98, 99, 100], "encrypt": [4, 11, 13, 14, 15, 17, 36, 49, 57, 63, 64, 71, 73, 76, 77, 94], "bdf": [4, 8, 13, 48, 49, 54, 56, 61, 67, 73, 76, 87, 93], "bu": [4, 8, 13, 48, 49, 56, 57, 61, 63, 64, 67, 87, 93], "bom": [4, 8, 13, 61, 71], "bill": [4, 8, 13, 61, 71], "cpm": [4, 11, 60, 64, 68], "content": [4, 5, 35, 49, 59, 64, 87], "modul": [4, 7, 10, 13, 19, 37, 63, 65, 69, 73, 74, 76, 83, 93, 100], "cy": [4, 8, 13, 24, 28, 37, 40, 41, 42, 61], "drbg": [4, 7], "digit": [4, 13, 65, 94], "signatur": [4, 13, 27, 65, 73, 76, 94], "ellipt": [4, 13, 17, 65, 71, 77, 94], "curv": [4, 13, 17, 65, 71, 77, 94], "grub": [4, 8, 11, 13, 61, 88, 100], "grand": [4, 8, 13, 61], "unifi": [4, 8, 13, 61], "bootload": [4, 8, 13, 61], "hkdf": [4, 5, 37], "ipsec": [4, 13, 14, 32, 42, 63], "nrbg": 4, "o": [4, 7, 8, 11, 13, 26, 49, 61, 67, 68, 71, 73, 74, 76, 77, 84, 85, 87, 99, 100, 101], "pci": [4, 8, 13, 19, 56, 61, 63, 67, 74, 76, 77, 87, 93], "peripher": [4, 8, 13, 61, 65], "interconnect": [4, 8, 13, 61], "pf": [4, 8, 13, 26, 37, 40, 48, 49, 61, 62, 67, 68, 73, 87, 93, 100], "pcie": [4, 8, 15, 48, 51, 56, 61, 63, 69, 74, 76, 87], "pke": [4, 13, 17, 48, 49, 74, 76], "public": [4, 5, 8, 12, 13, 17, 19, 49, 55, 59, 61, 66, 67, 71, 77, 91], "rivest": [4, 13, 94], "shamir": [4, 13, 94], "adleman": [4, 13, 94], "sku": [4, 7, 8, 11, 39, 41, 51, 61, 69, 100], "stock": [4, 8, 61], "unit": [4, 8, 13, 52, 61, 63, 64, 99], "siov": [4, 8, 13, 47, 61, 71, 84, 85, 88], "scalabl": [4, 8, 13, 17, 41, 46, 47, 51, 61, 68, 71, 77, 85], "iov": [4, 8, 13, 26, 38, 39, 40, 46, 47, 49, 51, 55, 57, 61, 62, 71, 77, 85, 88], "sr": [4, 8, 13, 26, 38, 39, 40, 46, 49, 55, 57, 61, 62, 77, 85, 88], "root": [4, 6, 8, 10, 13, 38, 46, 57, 61, 63, 77, 88], "successor": 4, "vf": [4, 8, 13, 37, 39, 40, 46, 48, 49, 51, 57, 59, 61, 63, 68, 77, 84, 93, 100], "013": [5, 75], "migrat": 5, "rst": 5, "juli": [5, 70], "2023": [5, 9, 18, 62, 68, 70, 75, 77, 81, 86, 96, 101], "012": [5, 75], "decemb": 5, "2022": [5, 75], "011": [5, 75], "octob": [5, 75, 81], "2021": [5, 75], "010": [5, 75], "updat": [5, 7, 12, 15, 26, 40, 48, 49, 52, 55, 57, 60, 61, 64, 65, 70, 72, 73, 74, 75, 77, 78, 79, 81, 83, 84, 85, 87, 91, 92, 96, 100, 101], "mgf": [5, 13, 35, 37], "mask": [5, 13, 35], "june": [5, 62, 75, 101], "009": [5, 75], "april": [5, 18, 75, 86], "008": [5, 75], "newer": [5, 7, 64, 100], "3de": [5, 65], "md5": [5, 65], "cpacykeygentlsopsdata": 5, "2020": [5, 75], "007": [5, 75], "februari": [5, 9, 62, 75], "006": [5, 75], "march": 5, "2019": 5, "005": [5, 75], "2018": 5, "004": [5, 75], "session": [5, 16, 35, 49, 56, 66, 73, 74, 76, 99], "003": [5, 62, 75], "custom": [5, 7, 38, 49, 63, 71, 77, 91, 95, 96], "002": [5, 62, 70, 75, 81, 101], "septemb": [5, 75], "2017": 5, "001": [5, 9, 18, 62, 70, 75, 81, 86, 101], "442844": 5, "2014": 5, "bio": [6, 13, 56, 73, 76, 84, 85, 95], "endpoint": [6, 8, 12, 13, 19, 26, 28, 32, 35, 37, 38, 39, 40, 43, 46, 48, 50, 54, 56, 61, 65, 74, 87, 98, 99], "unpack": [6, 8, 35], "demo": [6, 84], "uninstal": [6, 95, 96, 99], "upstream": 7, "readm": [7, 8, 77, 96], "instruct": [7, 8, 10, 11, 12, 17, 61, 68, 71, 77, 85, 87, 93, 96, 98, 99, 102], "librari": [7, 8, 11, 12, 17, 19, 35, 36, 49, 52, 60, 61, 63, 64, 71, 94, 95, 96, 100, 102], "qatlib": [7, 61, 68, 70, 89, 94, 96, 98, 99, 100, 101, 102], "repositori": [7, 11, 91, 96, 98, 99, 102], "procedur": [7, 64, 65, 74, 76], "task": [7, 49, 96], "kernel": [7, 10, 11, 13, 15, 19, 26, 31, 35, 36, 37, 41, 49, 54, 56, 60, 63, 64, 65, 67, 69, 70, 71, 73, 74, 76, 83, 93, 95, 101], "them": [7, 24, 49, 100], "usr": [7, 10, 48, 68, 96, 98], "lib": [7, 10, 68, 96, 98, 100], "kern_vers": 7, "right": [7, 14], "lib64": 7, "adf_ctl": [7, 29, 43, 44, 48, 49, 71, 74, 76], "icp_root": [7, 10, 19, 23, 24, 26, 28, 30, 32, 33, 35, 57, 87], "sbin": [7, 96], "firmwar": [7, 11, 13, 14, 25, 36, 47, 49, 55, 63, 64, 65, 69, 71, 77, 83, 95], "load": [7, 15, 19, 37, 39, 40, 41, 46, 49, 50, 64, 65, 68, 71, 77, 79, 82, 96, 100], "qat_servic": [7, 10, 40, 41, 42, 49, 57, 67, 87], "bring": [7, 19], "futur": [7, 59, 61, 64, 65, 67, 68, 73, 76], "boot": [7, 11, 52, 68, 95], "init": [7, 19, 99], "chkconfig": 7, "come": 7, "form": [7, 35, 42, 68], "tarbal": 7, "assum": [7, 10, 52, 63, 87, 93, 102], "super": [7, 11], "privileg": [7, 11, 71, 77], "export": [7, 10, 98, 99], "mkdir": 7, "cd": [7, 10, 68, 96, 98, 99, 100, 102], "transfer": [7, 15, 35, 64], "command": [7, 8, 10, 11, 12, 13, 17, 19, 47, 49, 52, 60, 61, 67, 68, 87, 88, 96, 97, 98, 99, 100, 102], "tar": [7, 8, 77], "zxof": 7, "qat20": [7, 52, 69, 71, 77], "l": [7, 48, 71, 77, 87, 93, 96, 97, 99, 100], "gz": [7, 8, 77], "chmod": 7, "rwx": 7, "deploy": [7, 11, 46, 65, 71, 77, 89, 90], "script": [7, 10, 14, 19, 41, 48, 49, 57, 74, 76, 93, 96], "mani": [7, 14, 15, 22, 32, 39, 63, 64, 65, 93, 100], "interest": [7, 15, 24, 31], "wide": [7, 13, 41, 68], "host": [7, 26, 37, 40, 49, 52, 57, 64, 65, 67, 69, 84, 85, 91, 93], "guest": [7, 26, 37, 49, 51, 57, 64, 67, 68, 78, 79, 82, 84, 85], "proceed": 7, "prepar": [7, 84], "prerequisit": [7, 100], "welcom": 7, "displai": [7, 41, 47, 48, 49, 73, 76, 87, 95], "successful": 7, "look": [7, 40, 42, 48, 49, 64, 74, 76, 79, 82, 87, 93, 96, 98], "bsd": [7, 13, 71], "bin": [7, 48, 49, 68, 93, 100], "c": [7, 11, 13, 14, 17, 19, 47, 48, 68, 73, 76, 96, 98, 99], "sane": 7, "ye": [7, 37, 64, 65, 87, 96], "safe": [7, 10, 65], "gawk": 7, "makefil": [7, 8, 96], "depfil": 7, "use_hard_coded_prim": 7, "icp_arch_us": 7, "x86_64": [7, 71, 96], "icp_buildsystem_path": 7, "build_system": [7, 71], "icp_build_output": 7, "icp_env_dir": 7, "build_fil": 7, "env_fil": 7, "icp_tools_target": 7, "accelcomp": 7, "max_mr": [7, 96], "50": [7, 48, 52, 65, 71, 73, 75, 76, 77, 96], "kernel_source_root": 7, "18": [7, 48, 64, 68, 71, 73, 76], "193": 7, "el8": [7, 71], "icp_debug": 7, "qat_uio": 7, "icp_param_check": [7, 14], "icp_dc_dyn_not_support": 7, "disable_stat": 7, "drbg_poll_and_wait": 7, "icp_log_syslog": 7, "icp_nonblocking_partials_perform": 7, "icp_trac": 7, "icp_dc_onli": 7, "icp_dc_return_counters_on_error": [7, 35], "icp_disable_inlin": 7, "inlin": [7, 64], "ouput": 7, "yasm": [7, 11], "download": [7, 48, 64, 69, 98, 100], "http": [7, 11, 61, 68, 91, 93, 94, 96, 98, 99, 100, 101], "tortal": 7, "net": 7, "html": [7, 91], "wget": [7, 100], "latest": [7, 12, 64, 79, 82, 91, 96, 98, 99], "url": 7, "www": [7, 93], "project": [7, 17], "zxvf": 7, "shell": [7, 48], "help": [7, 14, 15, 35, 36, 52, 56, 64, 65, 77, 87, 96, 99], "safer": 7, "binari": [7, 63, 64, 68], "enabl": [7, 10, 11, 13, 14, 15, 17, 19, 26, 36, 37, 38, 39, 40, 43, 48, 49, 52, 54, 55, 56, 57, 63, 64, 65, 67, 68, 74, 77, 87, 88, 92, 95, 96, 99, 100], "unrecogn": [7, 96], "arg": [7, 88, 96, 100], "silent": [7, 96], "rule": [7, 96], "less": [7, 15, 20, 24, 35, 73, 76, 96], "verbos": [7, 96], "undo": [7, 96], "v": [7, 16, 64, 87, 96, 98, 99], "sometim": [7, 71, 96], "confus": [7, 64, 96], "casual": [7, 96], "track": [7, 49, 64, 73, 76, 79, 82, 96], "reject": [7, 64, 96], "slow": [7, 64, 96], "extractor": [7, 96], "speed": [7, 54, 95, 96], "icp": [7, 49, 68, 87, 96], "uio": [7, 10, 36, 63], "userspac": 7, "param": [7, 73, 74, 76, 96], "dyn": [7, 24], "stat": [7, 96], "collect": [7, 12, 48, 65, 96], "ht": 7, "log": [7, 10, 19, 47, 63, 65, 79, 82, 96], "syslog": [7, 96], "nonblock": 7, "sriov": [7, 87], "trace": [7, 96], "dure": [7, 10, 14, 17, 19, 22, 35, 39, 44, 49, 64, 71, 96], "config_arch_supports_optimized_inlin": 7, "hb": [7, 49], "sim": [7, 49], "heartbeat": [7, 20, 37, 46, 47, 50, 69], "failur": [7, 19, 23, 24, 25, 26, 27, 28, 29, 30, 31, 37, 56, 69], "simul": [7, 22, 25, 96], "coexist": 7, "lkcf": [7, 13, 19, 39], "registr": 7, "framework": [7, 13, 19, 36, 39, 49, 51, 65], "kpt": [7, 71, 77], "issu": [7, 14, 36, 41, 52, 60, 64, 69, 71, 72, 75, 77, 78, 91, 96, 98], "certif": 7, "introduc": [7, 12, 15, 64, 67], "bypass": 7, "termin": [7, 10, 35, 63], "window": [7, 10, 48, 77, 90], "switch": [7, 10, 13, 15, 49, 53], "superus": [7, 10], "password": [7, 10, 11, 63], "prompt": [7, 10], "su": [7, 10, 87, 96, 97], "enter": [7, 11, 88], "sudo": [7, 11, 68, 87, 96, 97, 98, 99, 100, 102], "j": [7, 87, 96, 98], "delet": [7, 57, 63], "permiss": [7, 19, 63, 68], "uefi": 7, "incorpor": 7, "mod_sign_cmd": 7, "prior": [7, 11, 22, 32, 64, 68, 96, 99, 102], "path": [7, 8, 10, 11, 12, 17, 19, 28, 48, 61, 64, 67, 74, 76, 93, 96, 98], "line": [7, 8, 10, 11, 12, 13, 17, 48, 61, 87, 100, 102], "sha256": [7, 65, 68, 77, 98], "priv": 7, "pub": [7, 68, 100], "der": 7, "group": [7, 13, 55, 63, 65, 87, 93, 96], "login": [7, 63, 87, 96], "effect": [7, 11, 54, 73, 76, 87, 96], "usermod": [7, 87, 96], "whoami": [7, 87, 96, 97], "readi": [7, 102], "lsmod": [7, 10, 100], "grep": [7, 10, 68, 87, 88, 100], "qat_4xxx": [7, 10, 68, 73, 76, 100], "45056": 7, "intel_qat": [7, 10, 100], "331776": 7, "usdm_drv": [7, 10, 52, 63], "20480": [7, 10], "mdev": [7, 87], "vfio_mdev": 7, "vfio": [7, 36, 63, 68, 87, 93], "36864": 7, "vfio_iommu_type1": 7, "irqbypass": [7, 10], "16384": [7, 10, 37, 100], "kvm": [7, 10, 13, 68, 88], "titl": [7, 8, 12, 17, 61, 68, 71, 73, 74, 76, 77, 79, 80, 82], "automat": [7, 37, 49, 64, 96], "4xxx_dev0": [7, 40, 87], "conf": [7, 10, 11, 19, 24, 37, 40, 49, 54, 63, 67, 87, 96, 97], "8925": [7, 51, 68], "8955": [7, 51, 68], "dh895xcc_dev0": 7, "c62x": [7, 24, 41, 51, 68], "xeon": [7, 17, 41, 51, 68, 77, 92], "processor": [7, 14, 17, 41, 51, 63, 68, 71, 77], "famili": [7, 17], "soc": [7, 13, 71], "c6xx_dev0": 7, "atom": [7, 17, 35, 51, 68, 92], "c3000": [7, 17, 51, 68], "c3xxx_dev0": 7, "d15xx_dev0": 7, "dev1": [7, 41, 42, 87], "dev2": 7, "restart": [7, 19, 24, 30, 40, 41, 56, 67, 68, 73, 87, 88], "were": [7, 32, 35, 68, 71, 77, 87, 96], "advers": 7, "udev": [7, 49], "qat_adf_ctl": 7, "0660": 7, "chgrp": 7, "local": [7, 10, 14, 51, 96, 98], "qat_dev_process": [7, 74, 76], "action": [7, 8, 12, 17, 19, 49, 57, 61, 63, 64, 85], "devpath": 7, "subsystem": [7, 13, 31, 65, 87], "dev": [7, 11, 49, 63, 74, 76, 93, 96, 97], "hugepag": 7, "0770": 7, "rmdir": 7, "attr": 7, "vendor": [7, 93, 100], "0x8086": [7, 93], "0x0435": 7, "0x0443": 7, "0x37c8": 7, "0x37c9": 7, "0x6f54": 7, "0x6f55": 7, "0x19e2": 7, "0x19e3": 7, "max": [7, 14, 23, 39, 48, 54, 55, 57, 60, 64, 99], "lock": [7, 52, 60, 63, 65, 96, 97], "usernam": [7, 11], "64": [7, 14, 15, 22, 35, 37, 39, 40, 51, 60, 64, 87, 93], "memlock": [7, 96, 97], "4096": [7, 37, 65], "exercis": 8, "porgram": [8, 12, 17, 61], "filenam": [8, 12, 17, 61, 63], "bold": [8, 12, 17, 61], "button": [8, 12, 17, 61], "ital": [8, 12, 17, 61], "acronym": [8, 17, 61], "filelist": [8, 71], "comment": [8, 63], "intelqat20": 8, "config_guess": 8, "sh": [8, 93, 96, 98, 99], "miss": [8, 48, 98], "licens": [8, 13, 69, 77, 83], "gpl": [8, 13, 71], "versionfil": 8, "softar": 8, "compil": [8, 35, 96, 99, 102], "untar": 10, "By": [10, 14, 16, 37, 40, 48, 63, 64, 87, 93], "desir": [10, 22, 67], "folder": [10, 41, 48, 87], "4xxx_dev": 10, "replac": [10, 11, 36, 64], "servicesen": [10, 40, 48, 57, 87, 93], "launch": 10, "cpa_sample_cod": [10, 87, 96, 97, 102], "environment": [10, 72, 78], "ld_library_path": [10, 98], "libqat_": 10, "attempt": [10, 35, 48, 56, 63, 64, 73, 74, 76], "61440": 10, "401408": 10, "vfio_pci_cor": 10, "idxd_mdev": 10, "qat_dev0": [10, 19, 29, 40, 41, 49, 67, 74, 76, 87], "4xxx": [10, 40, 41, 48, 67, 73, 74, 76, 77, 93, 100], "inst_id": [10, 19, 41, 49, 67, 74, 76], "node_id": [10, 41, 49, 67, 74, 76], "bsf": [10, 19, 41, 48, 49, 67, 74, 76], "0000": [10, 40, 41, 48, 56, 67, 74, 76, 87, 96], "6b": [10, 40, 41, 48, 54, 56, 67, 74, 76, 87], "00": [10, 19, 40, 41, 48, 49, 54, 56, 67, 73, 74, 76, 87, 93, 96], "accel": [10, 19, 41, 49, 67, 74, 76], "9": [10, 19, 35, 41, 48, 64, 67, 68, 71, 74, 76, 93, 96, 98, 99, 102], "qat_dev1": [10, 19, 41, 67], "70": [10, 41, 67, 74, 76], "qat_dev2": [10, 41, 67], "75": [10, 19, 41, 57, 67, 73, 76], "qat_dev3": [10, 41, 67], "7a": [10, 41, 67], "qat_dev4": [10, 41, 67], "e8": [10, 41, 67, 96], "qat_dev5": [10, 41, 67], "5": [10, 19, 37, 41, 48, 52, 64, 67, 68, 71, 74, 76, 77, 79, 82, 88, 93, 99, 100], "ed": [10, 41, 67, 96], "qat_dev6": [10, 41, 67], "f2": [10, 41, 67, 96], "qat_dev7": [10, 41, 67, 74, 76], "f7": [10, 41, 67, 96], "cynumbuff": 10, "w": [10, 77], "iter": 10, "20": [10, 48, 60, 64], "cysymloop": 10, "5000": 10, "cyasymloop": 10, "runtest": [10, 87], "ecdsa": [10, 65], "63": [10, 48], "128": [10, 35, 37, 40, 51], "runstat": 10, "shorter": 10, "subset": [10, 40, 93], "getlat": 10, "measur": [10, 57, 73, 76, 79, 82], "numbercyinst": [10, 24, 39, 40], "numberdcinst": [10, 24, 39], "latency_cod": 10, "getoffloadcost": 10, "averag": [10, 14, 15, 48], "spent": [10, 15], "includelz4": 10, "lz4": [10, 66, 71, 77, 99], "smaller": [10, 64, 96], "count": [10, 23, 48, 56, 64, 99], "quick": [10, 63], "signific": [10, 15], "pwd": [10, 99], "aes256": 10, "sha512": [10, 65], "submiss": [10, 13, 14, 17, 52, 64], "512": [10, 35, 37, 54, 65, 74, 76, 98], "pattern": 10, "warn": 10, "observ": [10, 57, 64, 69, 74], "calcswdigest": 10, "design": [10, 13, 14, 16, 17, 37, 53, 63, 92, 93], "fashion": 10, "reboot": [11, 54, 67, 68, 88, 96, 100], "systemctl": [11, 96], "navig": [11, 100], "correspond": [11, 15, 37, 42, 52, 59, 60, 63, 64, 77], "edkii": [11, 100], "menu": [11, 100], "iio": [11, 73, 76, 88, 100], "ioat": 11, "sck": 11, "few": 11, "item": [11, 39, 49, 71], "distribut": [11, 13, 24, 68, 71, 96, 98, 99, 100, 102], "rhel": [11, 13, 68, 96, 98, 99, 102], "cento": [11, 71, 96, 98, 99, 102], "fedora": [11, 96, 98, 99, 102], "corpor": [11, 41, 65, 68, 92], "network": [11, 13, 15, 63, 64, 65], "proxi": 11, "proxy_serv": 11, "portnum": 11, "contact": [11, 68, 89], "administr": [11, 37, 63, 71, 77], "proxy_usernam": 11, "proxy_password": 11, "ubuntu": 11, "debian": 11, "edit": [11, 88], "nano": 11, "acquir": 11, "web": 11, "ip": [11, 13, 64, 91], "port": [11, 63], "exit": [11, 48], "powertool": 11, "plugin": [11, 65], "core": [11, 15, 42, 43, 59, 63], "upgrad": [11, 96, 100], "groupinstal": 11, "tool": [11, 48, 57, 63, 64, 68], "systemd": [11, 96], "devel": [11, 96, 98, 99], "pciutil": 11, "libudev": [11, 36], "readlin": 11, "libxml2": 11, "boost": 11, "elfutil": 11, "libelf": 11, "python3": [11, 48], "libnl3": 11, "unam": [11, 100], "gcc": [11, 96], "openssl": [11, 13, 49, 51, 65, 71, 95, 96], "libsystemd": 11, "libreadline6": 11, "pkg": [11, 98], "libboost": 11, "libnl": 11, "zlib1g": 11, "libssl": 11, "topic": [11, 12], "scope": 11, "exhaust": 11, "critic": [11, 15, 65], "polici": [11, 73, 76, 96], "selinux": 11, "activ": [11, 21, 39, 49, 54, 69, 73, 76, 79, 82, 92, 96], "firewal": [11, 65], "prevent": [11, 13, 14, 35, 63, 71, 77], "escal": 11, "recoveri": [11, 35, 56, 64, 73, 76], "unnecessari": 11, "patch": [11, 52], "monitor": [11, 57, 63, 64], "remot": [11, 14], "disk": [11, 63, 64, 65, 71, 77], "mlock": 11, "swap": [11, 15], "sensit": [11, 65], "ram": 11, "along": [12, 37, 40, 64, 96], "adf": [13, 19, 33], "aead": 13, "asic": 13, "circuit": 13, "bmsm": 13, "market": 13, "berkelei": [13, 71], "bt": 13, "transceiv": 13, "station": 13, "cli": 13, "csr": [13, 55], "cnvnr": [13, 69, 71, 77], "recov": [13, 49, 56], "cpk": 13, "columbia": 13, "park": 13, "did": [13, 64, 93], "id": [13, 19, 24, 25, 33, 47, 64, 87, 88], "dpdk": 13, "kit": 13, "dram": [13, 35, 55, 63, 71, 73, 76, 77], "dtl": [13, 65], "datagram": [13, 65], "evp": [13, 65, 98], "envelop": 13, "flr": [13, 68], "reset": [13, 19, 20, 27, 37, 48, 54, 56, 60, 64, 68, 73, 79, 82], "fw": [13, 68, 71, 73, 74, 76, 79, 82], "gige": 13, "gigabit": 13, "ethernet": 13, "gui": [13, 87], "hlp": 13, "highland": 13, "ia": [13, 17, 60, 68, 73, 74, 76], "intrus": 13, "detect": [13, 19, 49, 64, 69], "ieee": [13, 65], "institut": 13, "electr": 13, "electron": 13, "ik": 13, "exchang": [13, 36, 65], "speedstep": [13, 14, 17], "power": [13, 14, 17, 24, 35, 46, 47, 50, 64, 69, 71, 77, 99], "conserv": [13, 17], "mobil": [13, 17], "vt": [13, 49, 52, 68, 73, 76, 85, 88], "ioctl": [13, 19, 36, 40, 49], "iommu": [13, 15, 20, 37, 52, 60, 63, 69, 88, 93], "machin": [13, 26, 49, 63, 67, 69, 73, 74, 76, 77, 87, 100], "lac": [13, 17, 35], "msi": [13, 15, 17, 73, 76], "signal": [13, 15, 17, 63], "numa": [13, 17, 47, 51, 52], "uniform": [13, 17, 52], "drive": [13, 15, 17], "op": [13, 35, 57, 68], "pch": [13, 17, 35, 63, 65], "hub": [13, 17], "pmd": 13, "reliabl": [13, 35, 46, 50, 64, 68, 73, 76], "rdk": 13, "red": 13, "hat": 13, "enterpris": [13, 65], "sal": [13, 74, 76], "sata": 13, "serial": [13, 15], "attach": [13, 14, 68, 80, 82, 87], "sgl": [13, 15, 69], "chip": [13, 37], "sol": 13, "Of": 13, "life": 13, "spi": 13, "ssc": [13, 65], "storag": [13, 71, 77], "class": [13, 65], "tcg": [13, 65], "trust": [13, 63, 65, 71, 77], "throughput": [13, 14, 15, 17, 37, 57, 64, 65, 74, 76, 93], "usual": [13, 14, 17, 88, 100], "express": [13, 17, 40, 63, 68], "tpm": [13, 65], "udp": 13, "abl": [13, 63, 64, 68], "vm": [13, 26, 49, 67, 68, 74, 77, 87], "vpn": [13, 64], "wan": [13, 65], "chapter": [14, 15, 63], "techniqu": [14, 63, 64], "hyper": 14, "bottleneck": [14, 16], "node": [14, 93], "advantag": [14, 24, 65], "dimm": [14, 64], "around": [14, 64], "64b": 14, "unalign": [14, 68], "boundari": [14, 15, 63, 65, 71, 77], "mitig": [14, 52, 73, 76], "assumpt": [14, 72, 78], "diagram": 14, "dual": [14, 71], "fetch": [14, 15, 23], "maxim": [14, 16, 35, 37, 64, 93], "footprint": [14, 64], "vice": 14, "versa": 14, "due": [14, 15, 35, 63, 64, 65, 68, 74, 79, 82, 100], "partit": [14, 51], "unus": [14, 51], "frequenc": [14, 15, 47, 73, 76, 79, 82], "rate": [14, 15, 37, 46, 48, 50, 63, 65], "unless": [14, 24, 96], "whichev": 14, "method": [14, 16, 19, 49, 64, 67, 88], "low": [14, 15, 63, 64, 68, 73, 76], "gradual": 14, "drop": 14, "rel": [14, 57], "stabl": 14, "vari": [14, 37, 39, 57, 64, 92], "varianc": 14, "ring": [14, 15, 17, 23, 28, 30, 35, 36, 37, 40, 49, 55, 59, 63], "gen": [14, 15, 17, 41, 67, 68], "decid": [14, 49], "frame": [14, 74, 76], "burst": 14, "tun": 14, "async": [14, 16], "period": [14, 15, 48, 49, 99], "aggress": 14, "constantli": 14, "busi": [14, 15, 19, 23, 68], "eventu": 14, "catch": 14, "behaviour": [14, 64, 69], "directli": [14, 19, 52, 68, 77, 88, 96], "lead": [14, 15, 63, 64, 68, 73, 76, 79, 82], "inflight": [14, 15, 49, 99], "don": [14, 40, 99], "t": [14, 40, 47, 48, 56, 69, 79, 82, 87, 93, 98, 99], "approach": [14, 15, 17], "comfort": 14, "queue": [14, 35, 36, 46, 48, 50, 51, 59], "concurr": [14, 16, 43], "focus": 15, "decis": 15, "fit": [15, 68], "discuss": [15, 49, 63], "focu": 15, "incur": 15, "exact": [15, 77], "varieti": 15, "factor": [15, 40, 92], "tend": [15, 53], "properti": [15, 92], "characterist": 15, "explain": 15, "bank": [15, 28, 40], "steer": 15, "coreaffin": [15, 39], "coalesc": [15, 43], "presenc": [15, 65], "timer": [15, 19, 37, 49, 64, 74, 76], "expir": [15, 19], "arriv": [15, 63], "tune": [15, 16, 17, 38, 95], "choic": [15, 17], "short": 15, "becom": [15, 35, 49, 65, 73, 76, 79, 82], "overal": [15, 64], "long": [15, 63, 65], "reduct": 15, "caus": [15, 49, 56, 63, 64, 68, 73, 74, 76, 79, 82, 92], "stall": 15, "notifi": [15, 49, 64, 80, 82], "epol": [15, 39], "delai": [15, 37, 54, 73, 76, 79, 82], "deliveri": [15, 64, 65], "insignific": 15, "propag": 15, "fulli": [15, 68, 73, 76, 79, 82], "fine": 15, "wast": [15, 49], "routin": 15, "model": [15, 43, 46, 64, 65, 71, 77, 87], "often": [15, 96], "simplest": 15, "character": [15, 92], "receiv": [15, 35, 37, 49, 60, 64, 74, 76, 93], "transmit": [15, 36, 37], "easili": [15, 32, 49], "traffic": [15, 63, 65, 74, 76, 79, 82], "steadi": 15, "bursti": 15, "consider": [15, 46, 66, 101], "interv": [15, 49, 68, 73, 76], "idl": [15, 37, 53, 54, 73, 76, 79, 82], "versu": 15, "flavor": 15, "aim": 15, "bare": [15, 55], "bone": 15, "perspect": [15, 35], "significantli": [15, 64, 94], "fewer": 15, "aris": [15, 35, 68], "element": 15, "degrad": [15, 37, 64, 93], "minimum": [15, 26, 54, 96, 97, 99], "effici": [15, 60, 64, 94], "mainli": 15, "bandwidth": [15, 48, 52, 57, 63], "summari": 15, "highest": [15, 65, 73, 76], "depth": [15, 59], "retriev": [15, 17, 23, 24, 28, 30, 33], "cyxnumconcurrentsymrequest": 15, "cyxnumconcurrentasymrequest": 15, "dcxnumconcurrentrequest": 15, "balanc": [15, 46, 50, 65], "reflect": [15, 92], "peak": 15, "fragment": 15, "finish": [15, 32, 33, 39], "neg": 15, "situat": [15, 68, 73, 76], "inher": [15, 53], "rc4": 15, "everi": [15, 64, 68, 73, 76, 79, 82, 99], "assign": [15, 17, 22, 24, 42, 46, 64, 73, 76, 87, 93], "want": [15, 24, 26, 51, 88], "dispos": 15, "deiniti": 15, "occupi": 15, "affin": [15, 42], "capac": [15, 57], "embed": 15, "64byte": 15, "malloc": [15, 26, 37, 52, 99], "interact": 15, "chanc": 15, "tri": [15, 31], "resolv": [15, 56, 69, 72, 73, 77, 78, 79, 83], "underutil": 15, "guidelin": [16, 17, 61, 63], "bkm": 16, "svm": [16, 17, 69, 71, 77, 99], "ATS": [16, 17, 37], "accordingli": [17, 36], "divid": 17, "architect": 17, "c620": 17, "1500": [17, 68, 73, 76], "2100": 17, "4th": [17, 41, 51, 68, 77], "brief": 17, "assist": [17, 36, 49, 55, 63], "ctl": 19, "view": [19, 36, 48, 93], "c6xx": [19, 41], "06": [19, 26, 41], "10": [19, 41, 48, 52, 64, 68, 74, 76, 77, 93], "83": [19, 67, 73, 76], "qat_dev": [19, 48], "qualifi": 19, "unload": 19, "contrast": [19, 24], "against": [19, 63, 74, 76, 77], "4xxx_dev1": 19, "user_4xxx_dev1": 19, "user_c4xxx_dev1": 19, "consequ": [19, 28, 64], "success": [19, 22, 25, 26, 27, 28, 29, 31, 32, 64], "unspecifi": 19, "occur": [19, 22, 35, 64, 69, 71, 79, 82], "consol": 19, "var": 19, "cpa_status_retri": [19, 28, 30, 35, 49], "recover": [19, 64], "relev": [19, 68], "suggest": [19, 64], "cours": [19, 64], "cpa_status_resourc": [19, 33], "unavail": [19, 96], "cpa_status_invalid_param": [19, 23, 27, 30, 33, 35], "cpa_status_fat": 19, "fatal": [19, 37, 49, 56, 64, 71, 74, 76, 77], "seriou": 19, "shut": 19, "cpa_status_unsupport": [19, 27, 65], "cpa_status_restart": [19, 30, 49], "report": [19, 35, 49, 56, 64, 69, 98], "undergo": 19, "eperm": 19, "enoent": 19, "eintr": 19, "eio": 19, "ebadf": 19, "bad": 19, "descriptor": [19, 36, 48, 55, 60, 64], "eagain": 19, "11": [19, 48, 64, 68, 74, 76, 88], "enomem": 19, "eacc": 19, "deni": [19, 63], "connect": [19, 31, 63, 65], "efault": 19, "14": [19, 48, 64, 93], "ebusi": 19, "eexist": 19, "17": [19, 48, 64, 68, 96], "enodev": 19, "19": [19, 48, 64, 68, 100], "Such": 19, "einval": 19, "22": [19, 48], "enotti": 19, "25": [19, 48, 57], "enospc": 19, "28": [19, 48], "left": 19, "erang": 19, "34": [19, 48, 96, 98, 99, 102], "enosi": 19, "38": [19, 48], "el3hlt": 19, "46": [19, 48], "halt": [19, 63], "etim": 19, "62": [19, 48], "ebadmsg": 19, "74": 19, "eoverflow": 19, "eopnotsupp": 19, "95": [19, 64, 77], "einprogress": 19, "115": 19, "progress": [19, 49], "serv": 20, "remap": 20, "congest": 20, "establish": [21, 65], "libadf": 21, "icp_sal_userstart": [21, 33, 39, 42], "syntax": [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33], "none": [21, 25, 27, 31, 32, 48, 64, 68], "lifetim": [22, 63, 64], "cpa64u": [22, 26], "cpa8": 22, "dcerror": 22, "cpadcreqstatu": [22, 35, 64], "enum": [22, 27, 64], "unsign": 22, "integ": 22, "cpa_dc_verify_error": [22, 73, 76], "numerror": 22, "pressur": 23, "icp_sal_congestion_mgmt": 23, "qat2": [23, 24, 37, 64, 65, 74, 76, 77, 93], "maxinflightrequest": 23, "numinflightrequest": 23, "successfulli": [23, 24, 28, 30, 32, 33, 49, 68], "runtim": [24, 38, 74, 76], "demand": 24, "disadvantag": [24, 65], "frequent": [24, 49, 63, 65], "know": [24, 36, 49, 64], "among": 24, "problem": [24, 33, 74, 76, 79, 82], "pool": 24, "remaind": 24, "sai": 24, "eight": [24, 40, 42, 93], "thereaft": [24, 63], "icp_sal_us": [24, 32], "pnumcyinst": 24, "pnudcinst": 24, "pnumdcinst": 24, "numcyinst": [24, 42], "pcyinstanc": 24, "numdcinst": [24, 42], "pdcinstanc": 24, "freed": [24, 64], "devpkgid": 24, "accelid": [24, 25, 28, 29, 49], "accelerator_numb": 24, "icp_sal_iommu": 26, "page_s": 26, "size_t": 26, "phaddr": 26, "iova": 26, "transact": [26, 48, 56, 73, 76], "legitim": [26, 63], "drhd": 26, "fault": [26, 37, 52, 68, 71, 73, 76], "reg": 26, "dmar": [26, 73, 76, 88], "02": [26, 75], "01": [26, 49, 96], "addr": [26, 73, 76], "reason": [26, 64, 73, 76], "pte": 26, "int": [26, 48], "size_of_data": 26, "buff": 26, "buff_phys_addr": 26, "virt_to_phi": 26, "domain": [26, 39, 40, 41, 48, 54, 56, 57, 63, 71, 74, 76, 87], "noth": 26, "notif": [27, 49, 60], "cpacyinstancenotificationcbfunc": 27, "pinstancenotificationcb": 27, "typedef": 27, "cpainstanceev": 27, "instanceev": 27, "_cpainstanceev": 27, "cpa_instance_event_restart": [27, 49], "cpa_instance_event_fatal_error": 27, "cpadcinstancenotificationcbfunc": 27, "icp_sal_pol": [28, 30], "response_quota": [28, 30], "bank_numb": 28, "31": [28, 48, 64], "conjunct": [28, 73, 76], "cyxispol": [28, 39], "dcxispol": [28, 39], "prioriti": [28, 35], "quota": 30, "spawn": 31, "pend": [31, 68], "icp_dev": 31, "d_csr": 31, "brought": [31, 74, 76], "processnam": 32, "icp_sal_userstartmultiprocess": [32, 42], "limitdevaccess": [32, 39, 42], "psectionnam": 32, "m": [32, 42, 68, 73, 76, 99, 100], "numprocess": [32, 39, 40, 42], "mxn": 32, "close": 32, "icp_sal_vers": 33, "devid": 33, "icp_sal_dev_version_info_t": 33, "pverinfo": 33, "classifi": [34, 63], "categori": 34, "major": [35, 71], "realiz": [35, 73, 76], "improv": [35, 64], "mmio": [35, 37, 55, 60, 63], "test": [35, 65, 71, 74, 76, 92, 93, 95, 102], "conduct": [35, 63], "tunabl": 35, "queu": 35, "like": [35, 42, 48, 49, 63, 64, 68, 87, 93, 96, 98], "cpa_instance_handle_singl": 35, "gb": 35, "136": 35, "generatedkeyleninbyt": 35, "248": 35, "255": 35, "maskleninbyt": 35, "65528": 35, "snow": [35, 65], "3g": [35, 65], "cpacysympackettyp": 35, "optimum": 35, "cpadcfiletyp": 35, "cpadcsessionsetupdata": [35, 74, 76], "semi": 35, "ceil": 35, "9xtotal_input_byt": 35, "cpa_dc_asb_uncomp_static_dynamic_with_stored_hdr": [35, 64], "cpa_dc_asb_uncomp_static_dynamic_with_no_hdr": [35, 64], "total_input_byt": 35, "65535": 35, "x5": 35, "skid": 35, "55": [35, 48], "ill": 35, "soft": 35, "enumer": 35, "accur": [35, 96], "roll": [35, 71, 77], "good": [35, 64, 68], "special": [35, 60, 68, 88], "necessari": [36, 41, 42, 64, 68, 73, 76], "knowledg": 36, "underli": [36, 37, 40], "broken": 36, "tx": [36, 37, 60], "aka": [36, 55], "pars": [36, 64, 80, 82], "chose": 36, "offer": [36, 52, 64, 65, 68, 71, 77], "denot": [37, 39], "ship": [37, 39], "delimit": 37, "cynumconcurrentsymrequest": 37, "1024": [37, 62, 65], "2048": [37, 65], "8192": [37, 65], "32768": [37, 52], "65536": 37, "cynumconcurrentasymrequest": 37, "dcnumconcurrentrequest": 37, "dcintermediatebuffersizeinkb": 37, "kb": [37, 77], "heartbeattim": [37, 49], "1000": 37, "200": 37, "autoresetonerror": 37, "pmidleinterruptdelai": [37, 54], "pmidlesupport": [37, 54], "cluster": [37, 93], "split": [37, 43, 48, 93, 99], "dedic": [37, 60, 93], "child": [37, 93], "qat1": [37, 64, 69], "7x": [37, 40, 65], "realloc": [37, 49], "roughli": 37, "custom1": 37, "keygen": 37, "profil": [37, 40, 65, 74, 76], "rx": [37, 60], "numconcurrentrequest": 37, "never": 37, "io": 37, "4xxx_devx": [37, 54], "index": [37, 54, 60, 64, 92], "millisecond": [37, 54, 99], "gva": 37, "hpa": 37, "abil": [37, 63], "systemcal": 37, "target": [38, 39, 48, 54, 56], "implic": [38, 68, 73, 74, 76, 79, 80, 82], "modif": [38, 68, 73, 76], "ascii": [39, 47], "string": [39, 47, 48, 64, 68], "icp_sal_userstop": 39, "affinit": [39, 43], "shim": [39, 40, 49], "caution": 39, "cyxnam": 39, "ipsec0": [39, 42], "ssl0": [39, 40, 42], "charact": 39, "cyxcoreaffin": 39, "dcxname": 39, "ipcomp0": 39, "kernel_qat": 39, "dcxcoreaffin": 39, "ispol": 39, "although": [39, 100], "cpacyinstancegetinfo2": [39, 41], "bitmask": 39, "cpainstanceinfo2": 39, "xxxx": [40, 57], "potenti": [40, 63, 64, 69], "servicesprofil": 40, "care": [40, 100], "serviceen": 40, "exceed": [40, 64, 77], "similiar": 40, "And": 40, "dmesg": [40, 73, 74, 76, 88], "116378": 40, "383041": 40, "shim_dev0_int_32": 40, "391976": 40, "398881": 40, "406484": 40, "lspci": [41, 87, 88, 100], "nn": 41, "egrep": 41, "8086": [41, 87, 88, 100], "37c8": 41, "19e2": 41, "0435": 41, "6f54": 41, "4940": [41, 87, 88, 100], "4942": [41, 87, 100], "co": [41, 98], "0b40": 41, "rev": 41, "40": [41, 48, 75], "88": [41, 67], "03": [41, 68], "8a": 41, "8c": 41, "85": [41, 67], "87": [41, 67], "cy0nam": [41, 42], "dev0": [41, 42], "belong": 41, "cy0ispol": 42, "cy0coreaffin": 42, "cy1nam": 42, "ipsec1": 42, "cy1ispol": 42, "cy1coreaffin": 42, "cy2nam": 42, "ipsec2": 42, "cy2ispol": 42, "cy2coreaffin": 42, "cy3nam": 42, "ipsec3": 42, "cy3ispol": 42, "cy3coreaffin": 42, "label": [42, 71], "ssl_dev0_int_0": 42, "ssl_dev0_int_1": 42, "ssl_dev0_int_2": 42, "ssl_dev0_int_3": 42, "ipsec_int_0": 42, "ssl_dev1_int_0": 42, "ssl_dev1_int_1": 42, "ssl_dev1_int_2": 42, "ssl_dev1_int_3": 42, "appear": [42, 69, 79, 82], "nine": 42, "sl_dev0_int_1": 42, "ssl_dev": 42, "_int": 42, "ipsec_int_": 42, "conf_fil": [43, 44], "infrastructur": [46, 60], "pair": [46, 49, 50, 51, 59, 60, 64], "telemetri": [46, 50, 54, 71, 73, 76, 77, 79, 82], "stabil": [46, 50], "threat": 46, "attack": 46, "link": [47, 56, 64, 91, 93], "cnv_error": [47, 64], "sysf": [47, 48, 54, 56, 68, 93], "dev_cfg": 47, "fw_counter": 47, "heartbeat_fail": [47, 49], "heartbeat_s": [47, 49], "pm_statu": [47, 54], "vqat": [47, 84], "slab": 47, "pid": [47, 96], "cat": [47, 48, 49, 54, 56, 88, 93, 100], "78854": 47, "10550771712": 47, "000000000b39412d": 47, "274e00000": 47, "2097152": 47, "10309599232": 47, "000000003670dd45": 47, "266800000": 47, "hex": 47, "echo": [47, 48, 67, 93, 96, 97, 100], "142606336": 47, "respect": 47, "sy": [48, 49, 54, 56, 64, 67, 93], "pciaaaa": [48, 56], "bb": [48, 54, 56], "aaaa": [48, 54, 56], "cc": [48, 54, 56], "outlin": [48, 64], "device_data": 48, "rp_": 48, "_data": 48, "num": [48, 99], "guidanc": 48, "21": 48, "23": [48, 70, 71, 101], "24": 48, "26": [48, 96], "27": 48, "29": 48, "30": 48, "33": 48, "35": 48, "36": [48, 98], "37": 48, "39": 48, "41": 48, "42": 48, "43": 48, "44": 48, "45": 48, "47": [48, 49], "48": [48, 49], "49": 48, "51": 48, "52": 48, "53": 48, "54": 48, "56": 48, "57": 48, "58": 48, "59": 48, "60": [48, 60], "61": 48, "column": 48, "fourth": 48, "sample_cnt": 48, "pci_trans_cnt": 48, "max_rd_lat": 48, "nanosecond": 48, "rd_lat_acc_avg": 48, "max_lat": 48, "put": 48, "lat_acc_avg": 48, "bw_in": 48, "mbp": 48, "bw_out": 48, "at_page_req_lat_acc_avg": 48, "at_trans_lat_acc_avg": 48, "at_max_tlb_us": 48, "utlb": 48, "util_cpr": 48, "slice": [48, 63, 96], "percentag": 48, "util_dcpr": 48, "util_xlt": 48, "util_cph": 48, "util_ath": 48, "util_uc": 48, "uc": 48, "util_pk": 48, "rp_num": 48, "at_glob_devtlb_hit": 48, "devtlb": 48, "hit": 48, "at_glob_devtlb_miss": 48, "tl_at_payld_devtlb_hit": 48, "tl_at_payld_devtlb_miss": 48, "python": 48, "curs": 48, "subprocess": 48, "set_path": 48, "def": 48, "enabletelemetri": 48, "sp": 48, "popen": 48, "stdout": 48, "pipe": 48, "stderr": 48, "universal_newlin": 48, "rc": 48, "tupl": 48, "err": [48, 74, 76], "output_adf": 48, "original_arrai": 48, "output_telem": 48, "sort": [48, 64], "lambda": 48, "telemetry_support": 48, "adf_statu": 48, "len": [48, 64], "elif": 48, "telemeteri": 48, "search": [48, 64, 91], "quit": 48, "control_file_nam": 48, "str": 48, "check_output": 48, "pbar": 48, "refresh_count": 48, "addstr": 48, "comp": [48, 99], "decomp": [48, 99], "tlatenc": 48, "util_cpr0": 48, "util_dcpr0": 48, "decompression0": 48, "util_dcpr1": 48, "decompression1": 48, "util_dcpr2": 48, "decompression2": 48, "util_pke0": 48, "pke0": 48, "util_pke1": 48, "pke1": 48, "util_pke2": 48, "pke2": 48, "util_pke3": 48, "pke3": 48, "util_pke4": 48, "pke4": 48, "util_pke5": 48, "pke5": 48, "util_cph0": 48, "cph0": 48, "util_cph1": 48, "cph1": 48, "util_cph2": 48, "cph2": 48, "util_cph3": 48, "cph3": 48, "util_ath0": 48, "ath0": 48, "util_ath1": 48, "ath1": 48, "util_ath2": 48, "ath2": 48, "util_ath3": 48, "ath3": 48, "util_ucs0": 48, "ucs0": 48, "util_ucs1": 48, "ucs1": 48, "decompress_util": 48, "pke_util": 48, "cph_util": 48, "ath_util": 48, "usc_util": 48, "t0": 48, "t00": 48, "refresh": 48, "keyboardinterrupt": 48, "__name__": 48, "__main__": 48, "wrapper": 48, "under": [49, 68, 71, 79, 82, 87, 88], "circumst": 49, "unrespons": 49, "suspend": 49, "stagnant": 49, "hang": [49, 63], "startup": [49, 93], "icp_sal_check_devic": 49, "icp_sal_check_all_devic": 49, "impli": [49, 64, 68], "hung": 49, "satisfi": [49, 64], "hypervisor": [49, 68], "icp_sal_reset_devic": 49, "storm": 49, "ident": [49, 64, 93], "icp_sal_poll_device_ev": 49, "cpacyinstancesetnotificationcb": 49, "cpadcinstancesetnotificationcb": 49, "transpar": [49, 64], "untouch": 49, "trigger": [49, 64, 65, 69, 73, 76], "ordinarili": 49, "mock": 49, "icp_sal_cypollinst": 49, "encount": [49, 64, 74, 76, 96], "numer": 49, "suffix": 49, "c3xxx": 49, "ioctl_get_num_devic": 49, "ioctl_status_accel_dev": 49, "device_id": 49, "perform_query_dev": 49, "cpp": 49, "accomplish": [49, 87], "icp_sal_heartbeat_simulate_failur": 49, "heartbeat_sim_fail": 49, "qat_": [49, 64], "_": [49, 64], "your_device_bdf": 49, "NOT": [49, 68], "becam": 49, "background": 49, "bash": [49, 93], "downtim": 49, "infrequ": 49, "gen4": [49, 59], "constant": 49, "200m": 49, "unconfigur": 49, "gen2": [49, 59], "500m": 49, "300": 49, "300m": 49, "occurr": [49, 64], "fraction": 49, "isload": 49, "pfto": 49, "cleanup": 49, "nginx": 49, "fallback": [49, 99], "libcrypto": [49, 65, 71], "failov": 49, "daemon": 49, "happen": [49, 64, 73, 74, 76], "Its": [49, 63, 94], "ok": 49, "remain": [49, 53, 64, 74, 76], "respond": [49, 79, 82], "goe": 49, "posit": [49, 64, 69], "arbit": 51, "spare": 51, "arbitr": 51, "bundl": [51, 59], "pick": 51, "robin": 51, "fair": 51, "sapphir": 51, "rapid": 51, "card": 51, "p5000": 51, "ic": 51, "lake": 51, "adi": [51, 55, 67, 87], "thu": [52, 94], "cach": [52, 65], "thrash": 52, "deal": [52, 65], "toler": 52, "v6": [52, 68, 93], "81c95fbaebfa5990c3c786c8c3e87426a33106f": 52, "e65a6897be5e4939d477c4969a05e12d90b08409": 52, "git": [52, 68, 96, 98, 99, 100], "23616": 52, "intel_iommu": [52, 88, 100], "sm_on": [52, 88], "svmenabl": 52, "aten": 52, "zalloc": 52, "mmap": 52, "userdata": 52, "pmetadata": 52, "ko": 52, "2mb": 52, "5kb": 52, "benefit": [52, 64, 91], "modprob": [52, 100], "32mb": 52, "max_mem_numa": 52, "max_huge_pag": 52, "max_huge_pages_per_process": 52, "erron": 52, "insmod": 52, "driven": 53, "tradition": 53, "await": 53, "eas": [53, 65], "difficult": 53, "easier": [53, 65], "harder": [53, 64], "goal": [54, 56], "whenev": 54, "qat_4xxx_aaaa": 54, "qat_4xxx_0000": 54, "affect": [54, 60, 64, 68, 71, 73, 74, 76, 77], "clock": [54, 68, 73, 76, 79, 82], "sens": 54, "circular": 55, "head": [55, 60], "tail": [55, 60], "onto": 55, "qp": [55, 60], "metal": 55, "addition": [56, 64], "ras_correct": 56, "uncorrect": [56, 71, 77], "intervent": 56, "resend": 56, "ras_uncorrect": 56, "unabl": [56, 69, 73, 76], "ras_fat": 56, "ras_x": 56, "initialis": 56, "aer_dev_correct": 56, "retri": 56, "aer_dev_uncorrect": 56, "aer_dev_fat": 56, "aer_dev_x": 56, "enforc": 57, "1mbp": 57, "sla_mgr": 57, "built": [57, 65, 91, 96, 98, 99, 102], "vf_addr": 57, "rate_in_sla_unit": 57, "pf_addr": 57, "sla_id": 57, "delete_al": 57, "xx": 57, "megabit": 57, "visual": 57, "abstract": [59, 93], "uq": 60, "had": 60, "mutual": [60, 87], "exclus": [60, 68, 87], "4kb": 60, "sw": [60, 64, 68, 73, 74, 76, 99], "ia32_pasid": 60, "msr": 60, "v5": [60, 67, 68], "explicitli": [60, 93], "qat_qp_pasid": 60, "enq": 60, "referenc": 61, "github": [61, 91, 94, 96, 98, 99, 101], "com": [61, 68, 91, 94, 96, 98, 99, 101], "opt": [62, 65, 73, 76], "simultan": [62, 67], "analysi": 63, "complex": 63, "taken": [63, 100], "protect": [63, 64, 65, 71, 77], "concentr": 63, "natur": [63, 64], "exposur": 63, "overwrit": 63, "temporarili": 63, "imped": 63, "excess": [63, 65], "silicon": [63, 74, 76], "therebi": [63, 64, 65], "contriv": 63, "craft": 63, "exploit": 63, "vulner": 63, "bug": 63, "lack": 63, "compromis": 63, "malwar": 63, "defect": [63, 92], "unintent": 63, "probe": 63, "tamper": 63, "proof": 63, "enclosur": 63, "faradai": 63, "cage": 63, "strong": [63, 65], "unprivileg": 63, "almost": 63, "arbitrari": 63, "untrust": [63, 65, 71, 77], "applianc": [63, 64], "center": [63, 64, 65], "thorough": 63, "practic": 63, "those": [63, 64, 65, 68], "review": 63, "complianc": 63, "fuzz": 63, "electromagnet": 63, "radiat": 63, "dictionari": [63, 64], "account": [63, 64, 91], "forc": [63, 96, 100], "risk": [63, 64, 71], "simplic": 63, "grant": [63, 68], "ask": 63, "behav": [63, 64], "writabl": [63, 71, 77], "writeabl": 63, "someth": [63, 96], "c6xxx_dev0": 63, "readabl": 63, "gain": 63, "beyond": 63, "incorrectli": 63, "incorrect": [63, 74], "noisi": 63, "neighbor": 63, "conform": 63, "undesir": 63, "misus": 63, "monopol": 63, "ipcomp": 63, "extra": [63, 64], "du": 63, "agreement": 63, "sla": 63, "live": [63, 64], "fip": 63, "140": 63, "unauthor": [63, 71, 77], "lz77": 64, "crc64": 64, "batch": 64, "pack": 64, "bnp": 64, "cpadccomplvl": 64, "cpadccomptyp": 64, "cpadcautoselectbest": 64, "cpadcsessiondir": 64, "cpadcsessionst": 64, "cpadccompwindows": 64, "windows": 64, "cpadcchecksum": 64, "cpadchufftyp": 64, "cpadccomplz4blockmaxs": 64, "lz4blockmaxs": 64, "lz4blockchecksum": 64, "lz4blockindepend": 64, "accumulatexxhash": 64, "cpadccompminmatch": 64, "minmatch": 64, "cpadcnscompressdata": 64, "cpadcnssetupdata": 64, "skip": 64, "extract": [64, 87], "nor": [64, 68, 93], "compressor": 64, "32kb": 64, "cpa_dc_invalid_dist": 64, "bfinal": 64, "xxash32": 64, "xxhash32": [64, 71, 77], "cpadcresetxxhashst": 64, "variant": 64, "cpa_dc_lz4": 64, "extern": 64, "post": 64, "liter": 64, "min": 64, "token": 64, "anywher": 64, "shall": [64, 68, 73, 76], "magic": 64, "0x184d2204": 64, "xxh32": 64, "marker": 64, "cpadccompressdata2": 64, "solut": [64, 65, 71, 94], "qat_devic": 64, "seamless": 64, "enhanc": 64, "cpadcinstancecapabiliti": 64, "imag": [64, 67, 71, 77], "cpadcnsdecompressdata": 64, "65": 64, "535": 64, "decompressor": 64, "decod": 64, "cleartext": 64, "datauncompress": 64, "cpadcstat": 64, "numcompcnverrorsrecov": 64, "agnost": 64, "took": 64, "cpadcgetstat": 64, "cpa_dc_asb_dis": 64, "practis": 64, "yield": [64, 74, 76], "choos": 64, "regardless": 64, "cpa_dc_asb_en": 64, "cpa_dc_asb_static_dynam": 64, "facilit": [64, 65], "cpadcdeflatecompressbound": 64, "cpadclz4compressbound": 64, "cpadclz4scompressbound": 64, "outputs": 64, "compressbound": 64, "simplif": 64, "especi": [64, 67, 91], "thought": 64, "shot": 64, "simpler": 64, "cpadcnsgeneratehead": 64, "cpadcnsgeneratefoot": 64, "cpadcsessionhandl": 64, "cpadccallbackfn": 64, "cpadcopdata": 64, "cpa_dc_flush_non": 64, "lvl_enum": 64, "ilz77": 64, "hw_l1": 64, "depth_1": 64, "cpa_dc_l2": 64, "depth_4": 64, "cpa_dc_l3": 64, "depth_8": 64, "depth_16": 64, "cpa_dc_l5": 64, "cpa_dc_l6": 64, "hw_l6": 64, "cpa_dc_l7": 64, "cpa_dc_l8": 64, "cpa_dc_l9": 64, "hw_l9": 64, "cpa_dc_l10": 64, "Will": 64, "cpa_dc_l11": 64, "cpa_dc_l12": 64, "cpa_dc_invalid_block_typ": 64, "discard": 64, "abort": 64, "cpa_dc_bad_stored_block_len": 64, "complement": 64, "cpa_dc_too_many_cod": 64, "distanc": 64, "cpa_dc_incomplete_code_len": 64, "incomplet": 64, "cpa_dc_repeated_len": 64, "cpa_dc_more_repeat": 64, "cpa_dc_bad_litlen_cod": 64, "cpa_dc_bad_dist_cod": 64, "cpa_dc_invalid_cod": 64, "fix": [64, 73, 76], "cpa_dc_softerr": 64, "cpa_dc_fatalerr": 64, "cpa_dc_max_resubmiterr": 64, "cpa_dc_incomplete_file_err": 64, "cpa_dc_wdog_timer_err": 64, "watchdog": [64, 73, 74, 76], "pariti": 64, "cpa_dc_ep_hardwar": 64, "cpa_dc_verify_err": 64, "cpa_dc_empty_dym_blk": 64, "empti": 64, "cpa_dc_crc_integ_err": 64, "93": 64, "cpa_dc_lz4_max_block_size_exceed": 64, "cpa_dc_lz4_block_overflow_err": 64, "98": 64, "cpa_dc_lz4_token_is_zero_err": 64, "100": [64, 67, 99], "cpa_dc_lz4_distance_out_of_range_err": 64, "cpa_dc_ep_hardware_err": 64, "rest": [64, 65], "NO": [64, 68], "reli": 64, "unrecover": [64, 74, 76], "bigger": 64, "experi": 64, "greater": [64, 67, 74, 76], "explan": 64, "throughout": 64, "lifecycl": 64, "corrupt": [64, 68, 73, 74, 76, 79, 82], "cpacrcdata": 64, "cpu32u": 64, "cpaintegritycrc": 64, "integritycrc": [64, 96], "32bit": 64, "cpaintegritycrc64b": 64, "integritycrc64b": 64, "pcrcdata": 64, "integritycrccheck": 64, "discrep": 64, "cpa_dc_integ_err": 64, "verifyhwintegritycrc": 64, "duplic": 64, "onlin": [64, 90], "dramat": 64, "budget": 64, "five": 64, "reap": 64, "shrink": 64, "primari": 64, "backup": [64, 92], "archiv": 64, "snapshot": 64, "replica": 64, "newest": 64, "capit": 64, "cool": 64, "growth": 64, "organ": 64, "offsit": 64, "media": [64, 71, 77], "tape": [64, 65], "intens": [64, 65], "why": 64, "adopt": 64, "mainstream": 64, "popular": 64, "todai": [64, 65], "coars": 64, "grain": 64, "move": 64, "obvious": 64, "collabor": 64, "replic": 64, "email": 64, "stage": 64, "strategi": 64, "granular": 64, "chunk": 64, "identif": 64, "comparison": 64, "hybrid": 64, "bloom": 64, "filter": 64, "improb": 64, "cha": 65, "sm4": [65, 71, 77], "wireless": [65, 73, 76], "shake": 65, "xcbc": 65, "prime": [65, 96], "ecb": 65, "ctr": 65, "xt": 65, "snow3g": 65, "uea2": 65, "zuc": 65, "eea3": 65, "chacha": 65, "sha224": 65, "sha384": 65, "sha3": [65, 98], "224": 65, "384": 65, "cbc_mac": 65, "cmac": 65, "uia2": 65, "eia3": 65, "poli": 65, "3072": 65, "x25519": 65, "x448": 65, "standalon": [65, 95, 96, 98, 99], "gatewai": 65, "box": [65, 71], "commonli": 65, "router": 65, "negoti": 65, "scatterlist": 65, "nativ": [65, 67, 71], "netkei": 65, "openvpn": 65, "recent": [65, 68], "year": 65, "lost": 65, "laptop": 65, "headlin": 65, "pc": [65, 71, 75], "guard": 65, "necess": 65, "gbp": 65, "theft": 65, "govern": 65, "regul": 65, "industri": 65, "medic": 65, "financi": 65, "attract": 65, "proposit": 65, "complimentari": 65, "1619": 65, "ideal": 65, "prescrib": 65, "enrol": 65, "extens": 65, "author": 65, "histor": 65, "evolv": 65, "intermediari": 65, "seek": 65, "edg": [65, 68], "central": 65, "revers": [65, 68], "l4": 65, "l7": 65, "promin": 65, "cloud": 65, "compres": 66, "auto": [66, 71, 77], "asb": [66, 71, 77], "dimens": 67, "flexibl": 67, "composit": 67, "light": 67, "fast": [67, 96], "pasid": [67, 73, 76, 88], "effort": 67, "underwai": 67, "reenabl": 67, "sriov_numvf": 67, "persist": [67, 71, 77, 96], "rememb": 67, "examin": 67, "qat_dev8": [67, 74, 76], "4xxxvf": 67, "80": 67, "qat_dev9": [67, 74, 76], "81": 67, "qat_dev10": 67, "82": 67, "qat_dev11": 67, "qat_dev12": 67, "84": 67, "qat_dev13": 67, "qat_dev14": 67, "86": 67, "qat_dev15": [67, 74, 76], "qat_dev16": 67, "qat_dev17": 67, "89": 67, "qat_dev18": 67, "qat_dev19": 67, "91": 67, "4xxxvf_dev": 67, "4xxxvf_dev81": 67, "our": [68, 101], "oot": 68, "xz": 68, "filetyp": 68, "compressed_file_filenam": 68, "qat_dir": 68, "qat_895xcc": 68, "qat_c3xxx": 68, "qat_c62x": 68, "distro": 68, "1993": 68, "licenc": 68, "qat_firmwar": 68, "0bd9f7cae3cf72b12a63359a725ccbb76ddbd6831372695a9162144329800dd0": 68, "43b1028941c0f5e44cd6c220f74d2becc6b3113d023c190e9a9012a56e8778f9": 68, "07": 68, "qat_4xxx_mmp": [68, 100], "df9d88b8b453a228076ddd2eb1332045eca654854b3e1bf6cce0edac24854c7c": 68, "3bd7958f092eed553f3ae7a4543409d4ac34c0057e8fe609b6dabedd4f5a0077": 68, "04": 68, "qat_895xcc_mmp": 68, "4b7bd5930690accaf9dac6301ab7d91ea24bc1398c943ad7aa14c7a8118b63db": 68, "99a1e70b24facc6e7834d7a72cbc82d113796af0d70af94f66f224fbc27c5340": 68, "qat_c3xxx_mmp": 68, "2869d2306c60dff528bb68c4b55c3c5aab96e43c6fcd858540235eb283118de9": 68, "89bd32da6761afb28f8d801289c6ada2d02d3ddfd0de6626111e710b8276871a": 68, "qat_c62x_mmp": 68, "52bfda93819413807c7be56baf69f0b5f07a4be067ce9c69e61bf78bb395d1da": 68, "org": [68, 93, 100], "scm": [68, 100], "401xx": 68, "cpm2": [68, 73, 76], "0b": 68, "dcc": [68, 93], "suse": 68, "consult": [68, 100], "AT": [68, 71], "properli": [68, 73, 76, 100], "pagefault": [68, 73, 76, 79, 82], "resolut": [68, 73, 74, 76, 79, 80, 82], "512mb": [68, 73, 76], "big": [68, 73, 76], "perman": [68, 73, 76, 79, 82], "gate": [68, 73, 76, 79, 82], "inevit": [68, 73, 76, 79, 82], "consumpt": [68, 73, 76, 79, 82], "trap": 68, "appendix": 68, "330689": 68, "talk": 68, "compos": 68, "freebsd": [68, 90], "copyright": 68, "redistribut": [68, 71], "met": [68, 87, 88], "reproduc": 68, "disclaim": [68, 89], "neither": [68, 93], "supplier": 68, "endors": 68, "promot": 68, "decompil": 68, "disassembli": 68, "patent": 68, "royalti": 68, "hereaft": 68, "sell": 68, "sole": 68, "extent": 68, "alon": 68, "approv": 68, "opensourc": 68, "se": 68, "hereund": 68, "BY": 68, "THE": 68, "holder": 68, "AND": 68, "contributor": 68, "AS": 68, "OR": 68, "warranti": 68, "BUT": 68, "TO": 68, "OF": 68, "merchant": 68, "FOR": 68, "IN": 68, "BE": 68, "liabl": 68, "indirect": 68, "incident": 68, "exemplari": 68, "consequenti": 68, "damag": 68, "procur": 68, "substitut": 68, "loss": 68, "profit": 68, "ON": 68, "theori": 68, "liabil": 68, "contract": 68, "tort": 68, "neglig": 68, "IF": 68, "advis": 68, "SUCH": 68, "23946": 69, "doesn": [69, 87], "24970": 69, "20272": 69, "xcc": 69, "mcc": 69, "spuriou": 69, "18924": 69, "qate": 69, "45537": 69, "8109": 69, "4051": 69, "passthrough": [69, 77], "77659": 69, "unexpect": [69, 74, 76], "clc": 69, "39335": 69, "08": [70, 96, 101], "sept": [70, 101], "accompani": [71, 77], "tls1": [71, 77], "montgomeri": [71, 77], "25519": [71, 77], "448": [71, 77], "e2": [71, 77], "extend": [71, 77], "dpm": [71, 77], "anti": 71, "rollback": 71, "arb": 71, "spr": [71, 96], "bkc": [71, 100], "archer": 71, "citi": 71, "e4": 71, "e5": 71, "redhat": 71, "372": 71, "minor": 71, "mainten": 71, "00003": 71, "qat_direct": 71, "osal": 71, "user_spac": 71, "gnu": 71, "older": 71, "dmabl": 71, "libusdm_drv": 71, "calgari": 71, "corpu": 71, "canterburi": 71, "41b45f936dc870299a00dffeeb1818774de1a3791d8fbb4365a5074a22f20017": 71, "answer": [71, 77], "question": [71, 77], "visit": [71, 77], "forum": [71, 77, 91], "faq": [71, 77, 91], "632506": [71, 77, 90], "632507": [71, 77, 90], "vmware": [71, 77, 79, 82, 83, 89, 90], "766469": [71, 77, 90], "743912": [71, 77, 90], "330684": [71, 77], "330685": [71, 77], "330686": [71, 77], "technic": [72, 78], "dp": [73, 76], "app": [73, 76], "symdpupdatesampl": [73, 76], "lacsymsession_paramcheck": [73, 76], "adf_4xxx_hw_data": [73, 76], "dc_me_active_thd_mask": [73, 76], "0x03": [73, 76], "0x01": [73, 76], "recompil": [73, 76], "singular": [73, 76], "mayb": [73, 76], "ffffffff": [73, 76], "7fb0c81c0000": [73, 76], "113": [73, 76], "sm": [73, 76], "illeg": [73, 76], "ones": [73, 76], "algchainsampl": [73, 76], "wrong": [73, 76], "cpacystopinst": [73, 76], "inaccur": [73, 76, 79, 82], "overload": [73, 76], "accommod": [74, 76], "dccompression_processcallback": [74, 76], "dc_stateless_multi_op_sampl": [74, 76], "dccheckdestinationdata": [74, 76], "dc_stateless_sampl": [74, 76], "compperformop": [74, 76], "at_globa": [74, 76], "l0_par_st": [74, 76], "00000000": [74, 76], "at_global1_par_st": [74, 76], "at_par_st": [74, 76], "00000001": [74, 76], "uerrssmshad": [74, 76], "xxxvf": [74, 76], "0x1": [74, 76, 87], "8k": 74, "metric": [74, 76], "pci_0000_6b_00_1": [74, 76], "qemu": [74, 76, 88], "wherebi": [74, 76], "reconfigur": [74, 76], "adf_uio_proxi": [74, 76], "icp_adf_userprocesstostart": [74, 76], "comm": [74, 76], "dc_integrity_crc_fw_t": [74, 76], "refin": [74, 76], "accumul": 74, "xxhash": [74, 76], "ceas": [74, 76], "0001": [74, 76, 87], "usabl": [74, 76], "salctrl_adfservicesstartedcheck": [74, 76], "ctrl": [74, 76], "do_userstart": [74, 76], "cpa_dc_wdog_timer_": [74, 76], "015": 75, "014": 75, "januari": [75, 81], "novemb": 75, "august": 75, "beta": 75, "alpha": 75, "esxi": [77, 79, 82], "txt": 77, "collater": 77, "ratelimit": 77, "esx": 77, "articl": 77, "0_ext_rel_bin_2": 77, "15843807": 77, "09": 77, "3i": 77, "009bb448aa161bb3fd4e94f0556296f2b268471947f3a9a5d1a158ad68ac26a5": 77, "qat_2": 77, "1oem": 77, "700": 77, "15843807_22556595": 77, "zip": 77, "suspect": 77, "triag": 77, "vcenter": 77, "usecas": [79, 82], "reporit": [79, 82], "couldn": [79, 82], "namespac": [79, 82], "conflict": [79, 82], "interpret": [80, 82], "proce": [80, 82, 98], "fall": [80, 82], "deploi": 85, "offici": [87, 88], "4941": [87, 100], "4943": [87, 100], "vim": 87, "numberadi": 87, "vdev": 87, "libvirt": [87, 88], "xml": 87, "uuid": 87, "virt": 87, "vi": [87, 100], "vf1": 87, "utf": 87, "hostdev": 87, "0xe9": 87, "0x0000": 87, "slot": 87, "vm_name": 87, "virsh": 87, "nodedev": 87, "dettach": 87, "pci_0000_e9_00_1": 87, "detach": 87, "reattach": 87, "touch": 87, "679fdae3": 87, "1930": 87, "4815": 87, "8896": 87, "220bfc5354b5": 87, "seen": 87, "hot": 87, "plug": 87, "vnd": [87, 88], "sdevic": 87, "0da5": 87, "vmm": 87, "0002": 87, "signoflif": 87, "miscellan": [88, 100], "cmdline": [88, 100], "grubbi": [88, 100], "cfg": [88, 100], "mkconfig": [88, 100], "dnf": [88, 96, 98, 99, 102], "legal": 89, "19734": 90, "19732": 90, "19733": 90, "19735": 90, "710059": 90, "710057": 90, "710071": 90, "768798": 90, "710074": 90, "710060": 90, "709209": 90, "709210": 90, "709495": 90, "765501": 90, "765502": 90, "758459": 90, "709196": 90, "clarif": 91, "elsewher": 91, "pull": 91, "my": 91, "gone": 91, "premier": 91, "ticket": 91, "premiersupport": 91, "checkout": [91, 98], "learn": 92, "site": 92, "publicli": 92, "absolut": 92, "publish": 92, "commerci": 92, "trademark": 92, "logo": 92, "mark": 92, "subsidiari": 92, "brand": 92, "claim": 92, "tweak": 93, "qatmgr": [93, 96], "sysconfig": 93, "unset": 93, "odd": 93, "pf0": 93, "pf2": 93, "pf1": 93, "pf3": 93, "unopen": 93, "qat_init": [93, 96], "bind": 93, "qat_polici": 93, "printf": 93, "vfio_group": 93, "fi": 93, "iommu_group": 93, "numa_nod": 93, "0x4941": 93, "0x4943": 93, "regex": 93, "z0": 93, "pf_domain": 93, "bash_rematch": 93, "pf_bu": 93, "pf_bdf": 93, "cfg_servic": 93, "doc": 93, "abi": 93, "lossless": 94, "rpm": 95, "qatzip": [95, 102], "benchmark": 95, "qat_engin": 95, "depond": [96, 97], "500mb": [96, 97], "cp": [96, 97, 100], "qatlib_bak": [96, 97], "500000": [96, 97], "tee": [96, 97], "automak": [96, 98, 99], "autoconf": [96, 98, 99], "libtool": [96, 98, 99], "nasm": [96, 98], "enablerepo": 96, "crb": 96, "subscript": 96, "repo": 96, "codereadi": 96, "builder": 96, "assembl": 96, "ever": 96, "distclean": 96, "clone": [96, 98, 99], "home": 96, "autogen": [96, 98, 99], "preset": 96, "sat": 96, "05": 96, "pdt": 96, "ago": 96, "1266135": 96, "1643873": 96, "0m": 96, "832": 96, "cgroup": 96, "quanta": 96, "1264066": 96, "icp_any_flag": 96, "icp_any_path": 96, "icp_any_nam": 96, "qatengin": 98, "cmake": 98, "ipp": 98, "ippcp_2021": 98, "ippcp": 98, "crypto_mb": 98, "bbuild": 98, "dcmake_install_prefix": 98, "mb": 98, "noldconfig": 98, "ln": 98, "chacha20": 98, "poly1305": 98, "enable_external_pol": 98, "set_instance_for_thread": 98, "get_num_op_retri": 98, "set_max_retry_count": 98, "set_internal_poll_interv": 98, "get_external_polling_fd": 98, "enable_event_driven_polling_mod": 98, "get_num_crypto_inst": 98, "disable_event_driven_polling_mod": 98, "set_epoll_timeout": 98, "set_crypto_small_packet_offload_threshold": 98, "enable_inline_pol": 98, "enable_heuristic_pol": 98, "get_num_requests_in_flight": 98, "init_engin": 98, "set_configuration_section_nam": 98, "enable_sw_fallback": 98, "heartbeat_pol": 98, "disable_qat_offload": 98, "hw_algo_bitmap": 98, "sw_algo_bitmap": 98, "elaps": 98, "async_job": 98, "72": 98, "rsa2048": 98, "ecdhx25519": 98, "ecdhp256": 98, "ecdsap256": 98, "ecdhp384": 98, "ecdsap384": 98, "qz_root": 99, "taskset": 99, "silesia": 99, "testmod": 99, "inputfil": 99, "thread_count": 99, "fork": 99, "comp_algorithm": 99, "swback": 99, "hw_buff_sz": 99, "64k": 99, "block_siz": 99, "piec": 99, "qzcompress": 99, "qzdecompress": 99, "4k": 99, "1m": 99, "f": 99, "orig": 99, "comp_lvl": 99, "data_fmt": 99, "gzipext": 99, "deflate_4b": 99, "huffmantyp": 99, "req_cnt_thrshold": 99, "thread_sleep": 99, "perf": 99, "qzmalloc": 99, "compress_buf_typ": 99, "huge": 99, "2m": 99, "bound": 100, "wc": 100, "rm": 100, "initramf": 100, "dracut": 100, "172032": 100, "config_crypto_dev_qat": 100, "config_crypto_dev_qat_dh895xcc": 100, "config_crypto_dev_qat_c3xxx": 100, "config_crypto_dev_qat_c62x": 100, "config_crypto_dev_qat_4xxx": 100, "config_crypto_dev_qat_dh895xccvf": 100, "config_crypto_dev_qat_c3xxxvf": 100, "config_crypto_dev_qat_c62xvf": 100, "lastli": 100, "vvv": 100, "vfio_pci": 100, "grub_cmdline_linux": 100, "grub2": 100, "efi": 100, "great": 102, "minut": 102, "asymetr": 102}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"intel": [0, 1, 2, 14, 15, 17, 35, 41, 42, 47, 49, 64, 67, 71, 87, 89, 98, 99, 100], "qat": [0, 1, 2, 11, 14, 15, 35, 42, 47, 49, 63, 67, 68, 71, 73, 76, 87, 98, 99], "data": [0, 1, 2, 15, 35, 39, 64, 73, 76], "compress": [0, 22, 35, 39, 64, 68, 74, 76, 93], "api": [0, 1, 2, 3, 15, 20, 21, 22, 23, 25, 27, 30, 31, 34, 35, 64, 71, 74, 76, 90], "overview": [0, 1, 7, 17, 35, 43, 47], "session": [0, 1, 15, 64], "state": [0, 74, 76], "establish": 0, "stateless": 0, "us": [0, 1, 4, 12, 14, 15, 35, 68, 73, 74, 76, 87], "multipl": [0, 41, 42], "oper": [0, 1, 2, 11, 15, 19, 45, 49, 53, 58, 71, 73, 74, 76], "plane": [0, 1, 2, 15, 35, 64], "chain": [0, 1, 93, 98], "hash": [0, 1, 65], "cryptograph": [1, 35, 39, 63, 65], "prioriti": 1, "symmetr": [1, 15, 93], "cryptographi": [1, 65], "gener": [1, 35, 37, 63, 73, 76, 90], "concept": 1, "In": [1, 69], "place": 1, "out": 1, "support": [1, 34, 64, 65, 68, 71, 73, 74, 76, 77, 91, 100], "partial": [1, 15], "cipher": [1, 65, 98], "symcallback": 1, "ciphersampl": 1, "file": [1, 7, 8, 10, 11, 38, 43, 44, 49, 59, 63, 71, 74, 76, 77], "ipsec": [1, 65, 98], "like": 1, "case": 1, "ssl": [1, 65], "ccm": 1, "gcm": [1, 98], "tl": 1, "kei": [1, 35, 63, 65, 98], "mgf": 1, "mask": [1, 80, 82], "set": [1, 39, 64, 74, 76, 87, 88, 93], "cpacykeygentlsopdata": 1, "structur": [1, 8, 74, 76], "field": 1, "updat": [1, 11, 71, 76, 82, 88], "creat": 1, "initi": [1, 49], "hkdf": 1, "instanc": [1, 2, 14, 24, 39, 40, 59, 68], "configur": [1, 7, 10, 11, 14, 32, 37, 38, 40, 41, 42, 43, 44, 49, 54, 59, 63, 73, 74, 76, 80, 82, 87, 88, 93, 96, 98, 99, 100], "memori": [1, 2, 14, 19, 37, 47, 52, 74, 76, 79, 82], "alloc": [1, 2, 19, 24], "extract": 1, "expand": 1, "label": 1, "sublabel": 1, "perform": [1, 10, 15, 16, 37, 64, 73, 74, 76, 93], "diffi": 1, "hellman": 1, "prime": 1, "number": [1, 15, 40, 67, 71, 74, 76], "test": [1, 10, 49, 98, 99], "sm2": 1, "digit": 1, "signatur": [1, 49], "verif": 1, "public": [1, 65], "encrypt": [1, 65], "exchang": 1, "ellipt": 1, "curv": 1, "point": 1, "base": [2, 11, 48, 100], "convent": [2, 8, 12, 17, 61], "buffer": [2, 15, 52, 68, 73, 74, 76, 98], "model": [2, 63, 67], "flat": [2, 52], "scatter": [2, 52], "gather": [2, 52], "list": [2, 8, 15, 52, 71, 77], "discoveri": 2, "mode": [2, 15, 53, 68, 93], "asynchon": 2, "synchron": [2, 15, 53], "ownership": 2, "programm": [3, 46], "": [3, 46, 60, 64, 67, 95], "guid": [3, 6, 16, 46, 84, 95], "introduct": [4, 8, 12, 17, 65, 68, 85], "intend": [4, 12], "audienc": [4, 12], "relat": [4, 22, 71, 77], "document": [4, 8, 12, 61, 71, 77, 89, 90], "refer": [4, 90], "thi": [4, 8, 12, 61], "terminologi": [4, 8, 12, 13, 17, 61, 63], "revis": [5, 9, 18, 62, 70, 75, 81, 86, 101], "histori": [5, 9, 18, 62, 70, 75, 81, 86, 101], "get": 6, "start": [6, 7], "softwar": [7, 15, 17, 60, 71, 87], "instal": [7, 11, 87, 88, 96, 98, 99, 102], "unpack": 7, "acceler": [7, 10, 19, 64, 71, 74, 76], "depend": [7, 11], "option": [7, 96], "compil": [7, 10], "flag": [7, 64, 74, 76], "demo": [7, 10, 48, 57, 87, 88], "uninstal": [7, 102], "stop": 7, "run": [7, 102], "applic": [7, 10, 14, 19, 49, 57, 63, 64, 65, 73, 74, 76], "non": 7, "root": [7, 67], "user": [7, 10, 32, 39, 60, 68, 95], "about": [8, 61], "featur": [8, 64, 68, 71, 77, 94], "implement": 8, "releas": [8, 68, 69, 71, 72, 76, 77, 78, 82, 83, 90], "packag": [8, 11, 71, 77, 88, 96, 98, 99, 102], "sampl": [10, 44, 73, 74, 76, 102], "code": [10, 19, 63, 64, 73, 74, 76, 102], "default": [10, 37, 74, 76, 80, 82], "load": [10, 51, 74, 76], "paramet": [10, 14, 37, 39, 74, 76, 88, 100], "signoflif": 10, "space": [10, 32, 68], "result": [10, 74, 76], "function": [10, 24, 26, 28, 29, 32, 33, 40, 49, 73, 74, 76], "execut": [10, 73, 74, 76], "system": [11, 41, 42, 49, 71, 74, 76, 87, 88, 100], "bio": [11, 14, 88, 100], "disabl": [11, 14, 73, 74, 76, 79, 82], "endpoint": [11, 41, 42, 51, 67, 73, 76], "dnf": 11, "apt": 11, "rpm": [11, 96], "deb": 11, "secur": [11, 63], "consider": [11, 37, 54, 63, 64, 93], "tune": [14, 93], "platform": [14, 71, 74, 76], "level": [14, 48, 57, 64], "optim": [14, 16, 74, 76], "core": [14, 39], "select": [14, 48, 64], "payload": [14, 19, 74, 76], "align": 14, "numa": 14, "awar": 14, "quickassist": [14, 17, 35, 41, 47, 64, 89, 98, 99], "technologi": [14, 17, 35, 41, 47, 64, 89, 98, 99], "servic": [14, 19, 30, 57, 59, 63, 65, 66, 73, 74, 76, 80, 82, 93], "Not": 14, "check": [14, 21], "adjust": 14, "poll": [14, 15, 27, 28, 30, 49, 53], "interv": 14, "enqueu": 14, "dequeu": 14, "multi": [14, 64, 74, 76, 98], "under": [14, 74, 76], "stress": 14, "condit": 14, "design": 15, "guidelin": 15, "v": 15, "interrupt": [15, 53], "recommend": 15, "tradit": [15, 64], "batch": 15, "submiss": 15, "request": [15, 37, 68, 73, 74, 76], "sync": 15, "asynchron": [15, 53], "async": 15, "maximum": [15, 40, 64], "concurr": [15, 37, 74, 76], "crypto": [15, 49, 93, 98], "reus": 15, "maxim": 15, "devic": [15, 19, 21, 27, 29, 48, 49, 67, 68, 74, 76, 100], "util": [15, 87], "best": [15, 64], "known": [15, 68, 73, 76, 79, 82], "method": 15, "bkm": 15, "avoid": [15, 64], "bottleneck": 15, "copi": [15, 74, 76], "By": 15, "svm": [15, 37, 52, 68, 73, 74, 76, 79, 82], "ATS": 15, "page": [15, 52, 73, 76], "fault": [15, 79, 82], "when": [15, 35, 73, 74, 76], "driver": [19, 47, 63, 68, 77, 79, 80, 82, 100], "control": [19, 48], "qat_servic": 19, "usag": [19, 26, 35, 48, 54, 56], "adf_ctl": 19, "exampl": [19, 93, 99], "return": [19, 74, 76], "linux": [19, 68, 71, 72, 100], "addit": [20, 73, 76], "avail": [21, 56, 68, 74, 76, 96], "icp_sal_userisqatavail": 21, "verifi": [22, 64, 98], "cnv": 22, "icp_sal_get_dc_error": 22, "icp_sal_dc_simulate_error": 22, "congest": 23, "manag": [23, 37, 52, 54, 57, 60, 93], "icp_sal_symgetinflightrequest": 23, "icp_sal_asymgetinflightrequest": 23, "icp_sal_dp_symgetinflightrequest": 23, "dynam": [24, 64, 74, 76], "icp_sal_usercygetavailablenumdyninst": 24, "icp_sal_userdcgetavailablenumdyninst": 24, "icp_sal_usercyinstancesalloc": 24, "icp_sal_userdcinstancesalloc": 24, "icp_sal_usercyfreeinst": 24, "icp_sal_userdcfreeinst": 24, "icp_sal_usercygetavailablenumdyninstancesbydevpkg": 24, "icp_sal_userdcgetavailablenumdyninstancesbydevpkg": 24, "icp_sal_usercyinstancesallocbydevpkg": 24, "icp_sal_userdcinstancesallocbydevpkg": 24, "icp_sal_usercygetavailablenumdyninstancesbypkgaccel": 24, "icp_sal_usercyinstancesallocbypkgaccel": 24, "heartbeat": [25, 49, 68, 73, 76, 79, 82], "icp_sal_check_devic": 25, "icp_sal_check_all_devic": 25, "icp_sal_heartbeat_simulate_failur": 25, "iommu": [26, 68, 73, 76, 79, 82], "remap": 26, "icp_sal_iommu_get_remap_s": 26, "icp_sal_iommu_map": 26, "icp_sal_iommu_unmap": 26, "icp_sal_poll_device_ev": [27, 31], "cpacyinstancesetnotificationcb": 27, "cpadcinstancesetnotificationcb": 27, "icp_sal_pollbank": 28, "icp_sal_pollallbank": 28, "icp_sal_cypollinst": 28, "icp_sal_dcpollinst": 28, "icp_sal_cypolldpinst": 28, "icp_sal_dcpolldpinst": 28, "reset": [29, 49, 58, 74, 76], "icp_sal_reset_devic": 29, "specif": [30, 63], "icp_sal_cypollsymr": 30, "icp_sal_cypollasymr": 30, "thread": 31, "less": 31, "icp_sal_find_new_devic": 31, "access": 32, "icp_sal_userstart": 32, "icp_sal_userstop": 32, "version": [33, 68, 71, 89, 90], "inform": [33, 71, 77], "icp_sal_getdevversioninfo": 33, "descript": [35, 71, 77, 94], "ia": [35, 63], "cycl": 35, "count": 35, "reduct": 35, "constraint": 35, "limit": [35, 57, 64, 71, 77, 94], "architectur": [36, 63], "section": [37, 39], "servicesen": 37, "servicesprofil": 37, "power": [37, 54, 68, 73, 76, 79, 82], "share": [37, 51, 52, 74, 76, 79, 82], "virtual": [37, 40, 49, 52, 64, 67, 68, 74, 76, 79, 82, 84, 88], "svmenabl": 37, "aten": 37, "logic": 39, "kernel": [39, 47, 52, 68, 88, 100], "process": [39, 40, 42], "xxxxx": 39, "affin": 39, "calcul": 40, "increas": 40, "variat": 40, "invalid": [40, 74, 76], "physic": [40, 67, 74, 76], "fuse": 45, "debug": 47, "debugf": 47, "entri": 47, "todo": [47, 88], "sy": 47, "qat_": 47, "queri": 47, "qae_mem_slab": 47, "read": [47, 63], "write": 47, "qae_mem_dbg": 47, "telemetri": 48, "command": [48, 57], "ring": 48, "pair": [48, 55], "valu": [48, 49, 74, 76], "monitor": [48, 49], "text": 48, "fail": [49, 68, 73, 74, 76], "autoresetonerror": 49, "incorpor": 49, "restart": [49, 74, 76], "sequenc": 49, "statu": [49, 64], "packet": 49, "flight": 49, "onli": [49, 93], "determin": [49, 52], "id": 49, "simul": 49, "failur": [49, 68, 73, 76, 79, 82], "frequenc": 49, "handl": [49, 64], "environ": [49, 64, 88], "dummi": 49, "respons": [49, 68, 73, 76], "an": 49, "infrastructur": 50, "balanc": 51, "per": [51, 67], "across": 51, "criteria": 51, "dimens": 51, "gen": 51, "1": [51, 79, 82, 90], "2": [51, 67, 74, 76, 79, 82, 89, 90], "3": 51, "4": [51, 74, 76], "requir": [52, 73, 74, 76, 88, 100], "dma": [52, 63], "abl": 52, "type": [52, 56], "format": [52, 64], "sgl": [52, 68], "huge": 52, "call": 53, "semant": 53, "pro": 53, "And": 53, "con": 53, "queue": [55, 60], "bundl": 55, "reliabl": 56, "stabil": 56, "ra": 56, "error": [56, 64, 68, 73, 76], "aer": 56, "rate": 57, "agreement": 57, "sla": 57, "unit": 57, "item": 59, "via": 59, "config": 59, "hardwar": [60, 89, 90], "view": 60, "enqcmd": 60, "instruct": [60, 100], "pasid": 60, "threat": 63, "categori": 63, "attack": 63, "mechan": 63, "privileg": 63, "deploy": [63, 67, 84], "vector": 63, "mitig": 63, "intent": 63, "modif": 63, "malici": 63, "denial": 63, "compres": 64, "setup": 64, "cpadcsessionsetupdata": 64, "properti": 64, "decompress": [64, 73, 74, 76], "deflat": [64, 74, 76], "lz4": [64, 73, 74, 76], "decompres": 64, "frame": 64, "flush": [64, 74, 76], "checksum": [64, 71, 74, 76], "block": 64, "differ": 64, "between": [64, 79, 82], "log": 64, "sysf": 64, "recov": 64, "cnvnr": [64, 68], "behavior": 64, "expans": 64, "auto": 64, "asb": 64, "No": 64, "overflow": [64, 73, 74, 76], "except": 64, "integr": 64, "hw": 64, "crc": 64, "storag": [64, 65], "dedupl": 64, "wan": 64, "algorithm": 65, "authent": [65, 68], "vpn": 65, "web": 65, "proxi": 65, "applianc": 65, "0": [67, 79, 82, 89, 90], "direct": 67, "assign": 67, "singl": 67, "iov": [67, 74, 76, 87, 100], "sr": [67, 74, 76, 87, 100], "scalabl": [67, 93], "reduc": 67, "vf": [67, 73, 74, 76, 87], "detect": 68, "current": [68, 93], "firmwar": [68, 73, 74, 76, 79, 82, 100], "download": 68, "errata": 68, "modul": 68, "qat20": [68, 73, 74, 76, 79, 82], "23946": [68, 73, 76], "issu": [68, 73, 74, 76, 79, 80, 82], "doesn": [68, 73, 76], "t": [68, 73, 76], "appear": [68, 73, 76], "24970": [68, 73, 76], "potenti": [68, 73, 76], "fals": [68, 73, 76], "posit": [68, 73, 76], "20272": [68, 73, 76, 79, 82], "xcc": [68, 73, 76, 79, 82], "mcc": [68, 73, 76, 79, 82], "spuriou": [68, 73, 76, 79, 82], "mai": [68, 73, 74, 76, 79, 80, 82], "observ": [68, 73, 76, 79, 82], "some": [68, 73, 76, 79, 82], "sku": [68, 73, 76, 79, 82], "18924": [68, 73, 76, 79, 82], "consum": [68, 73, 76, 79, 82], "more": [68, 73, 76, 79, 82], "than": [68, 73, 76, 79, 82], "expect": [68, 73, 76, 79, 82], "qate": 68, "45537": 68, "pcie": 68, "occur": [68, 73, 74, 76], "ar": [68, 74, 76], "inject": [68, 73, 76], "resolv": [68, 74, 76, 80, 82], "8109": 68, "report": [68, 73, 74, 76], "4051": 68, "unabl": 68, "activ": 68, "qat1": 68, "7": [68, 79, 82], "full": 68, "passthrough": 68, "77659": 68, "unexpect": 68, "behaviour": 68, "trigger": 68, "certain": 68, "sub": 68, "layout": 68, "clc": 68, "39335": 68, "do": 68, "work": 68, "machin": 68, "host": [68, 73, 76, 87, 88, 100], "without": 68, "licens": [68, 71], "note": [69, 72, 78, 83], "tree": 69, "scheme": 71, "sha256": 71, "technic": [71, 77], "environment": [71, 77], "assumpt": [71, 77], "qate20": [73, 74, 76], "8981": [73, 76], "sym_dp_update_sampl": [73, 76], "9131": [73, 76], "dc": [73, 74, 76], "incorrect": [73, 76, 80, 82], "xxhash32": [73, 74, 76], "can": [73, 74, 76], "accumul": [73, 76], "9671": [73, 76], "i": [73, 74, 76, 98], "19310": [73, 76], "enabl": [73, 76, 79, 82, 90, 93, 98], "8k": [73, 76], "21905": [73, 76], "AT": [73, 74, 76, 79, 82], "cannot": [73, 76], "pr": [73, 76], "21751": [73, 76], "virt": [73, 76], "miss": [73, 76], "attach": [73, 76], "vm": [73, 76, 79, 82], "22999": [73, 76], "first": [73, 76], "28723": [73, 76], "slice": [73, 76], "timeout": [73, 74, 76], "due": [73, 76], "latenc": [73, 76], "3331": [74, 76], "9755": [74, 76], "sriov": [74, 76], "rlt_errlog": [74, 76], "high": [74, 76], "9669": [74, 76], "sourc": [74, 76, 96, 98, 99, 102], "length": [74, 76], "4k": [74, 76], "destin": [74, 76], "16k": [74, 76], "9394": [74, 76], "automat": [74, 76], "detach": [74, 76], "hypervisor": [74, 76], "after": [74, 76], "pf": [74, 76], "3860": [74, 76], "chang": [74, 76], "10981": [74, 76], "eolb": [74, 76], "incorrectli": [74, 76], "dure": [74, 76], "10966": [74, 76], "gzip": [74, 76], "9756": [74, 76], "autoselectbesthuffmantre": [74, 76], "honor": [74, 76], "librari": [74, 76, 98, 99], "11081": [74, 76], "cpadcresetsess": [74, 76], "doe": [74, 76], "e2": [74, 76], "intern": [74, 76], "9501": [74, 76], "output": [74, 76], "size": [74, 76], "defin": [74, 76], "cpadccompressbound": [74, 76], "9764": [74, 76], "correct": [74, 76], "final": [74, 76], "9078": [74, 76], "cy": [74, 76], "sym": [74, 76], "asym": [74, 76], "cpa_sample_cod": [74, 76], "10480": [74, 76], "event": [74, 76], "16": [74, 76], "cpa_dc_wdog_timer_err": [74, 76], "10606": [74, 76], "etc": [74, 76], "socket": [74, 76], "12942": [74, 76], "11092": [74, 76], "9754": [74, 76], "23616": [74, 76, 79, 82], "address": [74, 76, 79, 82], "translat": [74, 76, 79, 82], "guest": [77, 87, 100], "vmware": 78, "vqq": [79, 80, 82], "1542": [79, 82], "viommu": [79, 82], "crash": [79, 82], "1553": [79, 82], "incompat": [79, 82], "legaci": [79, 82], "1618": [80, 82], "accept": [80, 82], "treat": [80, 82], "up": 87, "siov": 87, "vqat_ctl": 87, "pass": 87, "through": 87, "vqat": 87, "prepar": 88, "o": 88, "boot": [88, 100], "resourc": 90, "x": 90, "custom": [90, 93], "manual": 90, "contact": 91, "legal": 92, "notic": 92, "disclaim": 92, "polici": 93, "flexibl": 93, "asymmetr": 93, "standalon": 93, "displai": 93, "qatlib": 95, "from": [96, 98, 99, 102], "openssl": 98, "engin": 98, "qat_engin": 98, "speed": 98, "qat_hw": 98, "rsa": 98, "2k": 98, "ecdh": 98, "comput": 98, "ae": 98, "128": 98, "cbc": 98, "hmac": 98, "sha1": 98, "qat_sw": 98, "r": 98, "rsa2k": 98, "x25519": 98, "p": 98, "256": 98, "ecdsa": 98, "384": 98, "192": 98, "qatzip": 99, "benchmark": 99, "detail": 99, "vt": 100, "d": 100, "locat": 100, "debian": 100, "distro": 100, "rhel": 100, "cento": 100, "fedora": 100}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.todo": 2, "sphinx": 57}, "alltitles": {"Intel\u00ae QAT Data Compression API": [[0, "intel-qat-data-compression-api"]], "Overview": [[0, "overview"], [1, "overview"]], "Sessions": [[0, "sessions"], [1, "sessions"]], "Stateful Data Compression": [[0, "stateful-data-compression"]], "Session Establishment": [[0, "session-establishment"]], "Stateless Data Compression": [[0, "stateless-data-compression"]], "Stateless Data Compression Using Multiple Compress Operations": [[0, "stateless-data-compression-using-multiple-compress-operations"]], "Data Compression Data Plane API": [[0, "data-compression-data-plane-api"]], "Chained Hash and Stateless Compression": [[0, "chained-hash-and-stateless-compression"]], "Intel\u00ae QAT Cryptographic API": [[1, "intel-qat-cryptographic-api"]], "Priority": [[1, "priority"]], "Using the Symmetric Cryptography API": [[1, "using-the-symmetric-cryptography-api"]], "General Concepts": [[1, "general-concepts"]], "Session": [[1, "session"]], "In-Place and Out-of-Place Support": [[1, "in-place-and-out-of-place-support"]], "Partial Support": [[1, "partial-support"]], "Cipher": [[1, "cipher"]], "symCallback": [[1, "symcallback"]], "cipherSample": [[1, "ciphersample"]], "Hash": [[1, "hash"]], "Hash a File": [[1, "hash-a-file"]], "Chained Cipher and Hash": [[1, "chained-cipher-and-hash"]], "Chained Cipher and Hash \u2013 IPSec Like Use Case": [[1, "chained-cipher-and-hash-ipsec-like-use-case"]], "Chained Cipher and Hash \u2013 SSL Like Use Case": [[1, "chained-cipher-and-hash-ssl-like-use-case"]], "Chained Cipher and Hash \u2013 CCM Use Case": [[1, "chained-cipher-and-hash-ccm-use-case"]], "Chained Cipher and Hash \u2013 GCM Use Case": [[1, "chained-cipher-and-hash-gcm-use-case"]], "Chained Cipher and Hash Using the Symmetric Data Plane API": [[1, "chained-cipher-and-hash-using-the-symmetric-data-plane-api"]], "TLS Key and MGF Mask Generation": [[1, "tls-key-and-mgf-mask-generation"]], "Setting CpaCyKeyGenTlsOpData Structure Fields": [[1, "setting-cpacykeygentlsopdata-structure-fields"]], "Session Update for Chained Cipher and Hash Operation": [[1, "session-update-for-chained-cipher-and-hash-operation"]], "Create and Initialize a Session": [[1, "create-and-initialize-a-session"]], "HKDF Use Case": [[1, "hkdf-use-case"]], "Instance Configuration and Memory Allocation": [[1, "instance-configuration-and-memory-allocation"]], "HKDF Extract Expand Operation": [[1, "hkdf-extract-expand-operation"]], "HKDF Extract Expand Label Operation": [[1, "hkdf-extract-expand-label-operation"]], "HKDF Extract Expand Label and Sublabels Operation": [[1, "hkdf-extract-expand-label-and-sublabels-operation"]], "Perform HKDF Operation": [[1, "perform-hkdf-operation"]], "Using the Diffie-Hellman API": [[1, "using-the-diffie-hellman-api"]], "Prime Number Testing": [[1, "prime-number-testing"]], "Using the SM2 API": [[1, "using-the-sm2-api"]], "SM2 Digital Signature Generation and Verification": [[1, "sm2-digital-signature-generation-and-verification"]], "SM2 Public Key Encryption": [[1, "sm2-public-key-encryption"]], "SM2 Key Exchange": [[1, "sm2-key-exchange"]], "SM2 Elliptic Curve Point": [[1, "sm2-elliptic-curve-point"]], "Base API and API Conventions": [[2, "base-api-and-api-conventions"]], "Intel\u00ae QAT Base API": [[2, "intel-qat-base-api"]], "Data Buffer Models": [[2, "data-buffer-models"]], "Flat Buffers": [[2, "flat-buffers"], [52, "flat-buffers"]], "Scatter-Gather Lists": [[2, "scatter-gather-lists"]], "Intel\u00ae QAT API Conventions": [[2, "intel-qat-api-conventions"]], "Instance Discovery": [[2, "instance-discovery"]], "Modes of Operation": [[2, "modes-of-operation"], [53, "modes-of-operation"]], "Asynchonous Operation": [[2, "asynchonous-operation"]], "Synchronous Operation": [[2, "synchronous-operation"]], "Memory Allocation and Ownership": [[2, "memory-allocation-and-ownership"]], "Data Plane APIs": [[2, "data-plane-apis"]], "API Programmer\u2019s Guide": [[3, "api-programmer-s-guide"]], "Introduction": [[4, "introduction"], [8, "introduction"], [12, "introduction"], [17, "introduction"], [65, "introduction"], [68, "introduction"], [85, "introduction"]], "Intended Audience": [[4, "intended-audience"], [12, "intended-audience"]], "Related Documents and References": [[4, "related-documents-and-references"]], "Using This Document": [[4, "using-this-document"], [12, "using-this-document"]], "Terminology": [[4, "terminology"], [8, "id1"], [13, "terminology"], [17, "id1"], [61, "id1"], [63, "terminology"]], "Revision History": [[5, "revision-history"], [9, "revision-history"], [18, "revision-history"], [62, "revision-history"], [70, "revision-history"], [75, "revision-history"], [81, "revision-history"], [86, "revision-history"], [101, "revision-history"]], "Getting Started Guide": [[6, "getting-started-guide"]], "Software Installation": [[7, "software-installation"]], "Installation Overview": [[7, "installation-overview"]], "Unpacking the Software": [[7, "unpacking-the-software"]], "Configure Acceleration Software": [[7, "configure-acceleration-software"]], "Dependencies": [[7, "dependencies"]], "Configuration Options": [[7, "configuration-options"], [96, "configuration-options"]], "Compile Flag Options": [[7, "id1"]], "Install Acceleration Software": [[7, "install-acceleration-software"]], "Software Installation Demo": [[7, "software-installation-demo"]], "Uninstall Acceleration Software": [[7, "uninstall-acceleration-software"]], "Starting/Stopping the Acceleration Software": [[7, "starting-stopping-the-acceleration-software"]], "Configuration Files": [[7, "configuration-files"], [38, "configuration-files"]], "Running Applications as Non-Root User": [[7, "running-applications-as-non-root-user"]], "About This Document": [[8, "about-this-document"]], "Conventions and Terminology": [[8, "conventions-and-terminology"], [12, "conventions-and-terminology"], [17, "conventions-and-terminology"], [61, "conventions-and-terminology"]], "Features Implemented": [[8, "features-implemented"]], "List of Files in Release": [[8, "list-of-files-in-release"], [71, "list-of-files-in-release"], [77, "list-of-files-in-release"]], "Package Release Structure": [[8, "package-release-structure"], [8, "id2"]], "Sample Applications": [[10, "sample-applications"]], "Performance Sample Code": [[10, "performance-sample-code"]], "Compiling the Performance Sample Code": [[10, "compiling-the-performance-sample-code"]], "Default Configuration Files": [[10, "default-configuration-files"]], "Default Configuration Demo": [[10, "default-configuration-demo"]], "Loading the Sample Code Application": [[10, "loading-the-sample-code-application"]], "Sample Code Parameters": [[10, "sample-code-parameters"], [10, "id1"]], "signOfLife Test Parameter": [[10, "signoflife-test-parameter"]], "User Space": [[10, "user-space"]], "Test Results": [[10, "test-results"]], "Performance Sample Code Demo": [[10, "performance-sample-code-demo"]], "Functional Sample Applications": [[10, "functional-sample-applications"]], "Compiling the Acceleration Functional Sample Code": [[10, "compiling-the-acceleration-functional-sample-code"]], "Executing the Acceleration Functional Sample Code in User Space": [[10, "executing-the-acceleration-functional-sample-code-in-user-space"]], "System Configuration": [[11, "system-configuration"], [87, "system-configuration"]], "Configuring BIOS": [[11, "configuring-bios"]], "Disabling QAT Endpoints": [[11, "disabling-qat-endpoints"]], "Configuring Operating System": [[11, "configuring-operating-system"]], "Updating dnf Configuration Files": [[11, "updating-dnf-configuration-files"]], "Updating apt Configuration Files": [[11, "updating-apt-configuration-files"]], "Installing Package Dependencies": [[11, "installing-package-dependencies"]], "RPM-based package dependencies": [[11, "rpm-based-package-dependencies"]], "DEB-based package dependencies": [[11, "deb-based-package-dependencies"]], "System Security Considerations": [[11, "system-security-considerations"]], "Application Tuning": [[14, "application-tuning"]], "Platform-Level Optimizations": [[14, "platform-level-optimizations"]], "BIOS Configuration": [[14, "bios-configuration"], [100, "bios-configuration"]], "Core Selection": [[14, "core-selection"]], "Memory Configuration": [[14, "memory-configuration"]], "Payload Alignment": [[14, "payload-alignment"]], "NUMA Awareness": [[14, "numa-awareness"]], "Intel QuickAssist Technology Optimization": [[14, "intel-quickassist-technology-optimization"]], "Disable Services Not Used": [[14, "disable-services-not-used"]], "Disable Parameter Checking": [[14, "disable-parameter-checking"]], "Adjusting the Polling Interval": [[14, "adjusting-the-polling-interval"]], "Application enqueue/dequeue tuning in Intel QAT multi-instances under stress condition": [[14, "application-enqueue-dequeue-tuning-in-intel-qat-multi-instances-under-stress-condition"]], "Software Design Guidelines": [[15, "software-design-guidelines"]], "Polling vs Interrupts": [[15, "polling-vs-interrupts"]], "Interrupt Mode": [[15, "interrupt-mode"]], "Polling Mode": [[15, "polling-mode"]], "Recommendations": [[15, "recommendations"]], "Data Plane API vs Traditional API": [[15, "data-plane-api-vs-traditional-api"]], "Batch Submission of Requests Using the Data Plane API": [[15, "batch-submission-of-requests-using-the-data-plane-api"]], "Synchronous (sync) vs Asynchronous (async)": [[15, "synchronous-sync-vs-asynchronous-async"]], "Buffer Lists": [[15, "buffer-lists"]], "Maximum Number of Concurrent Requests": [[15, "maximum-number-of-concurrent-requests"]], "Symmetric Crypto Partial Operations": [[15, "symmetric-crypto-partial-operations"]], "Reusing Sessions": [[15, "reusing-sessions"]], "Maximizing Intel QAT Device Utilization": [[15, "maximizing-intel-qat-device-utilization"]], "Best Known Method (BKM) for Avoiding Performance Bottlenecks": [[15, "best-known-method-bkm-for-avoiding-performance-bottlenecks"]], "Avoid Data Copies By Using SVM & ATS": [[15, "avoid-data-copies-by-using-svm-ats"]], "Avoid Page Faults When Using SVM": [[15, "avoid-page-faults-when-using-svm"]], "Performance Optimization Guide": [[16, "performance-optimization-guide"]], "Intel QuickAssist Technology Software Overview": [[17, "intel-quickassist-technology-software-overview"]], "Acceleration Driver": [[19, "acceleration-driver"]], "Controlling the Driver": [[19, "controlling-the-driver"]], "qat_service": [[19, "qat-service"]], "qat_service Usage": [[19, "qat-service-usage"]], "adf_ctl": [[19, "adf-ctl"]], "adf_ctl Usage": [[19, "adf-ctl-usage"]], "Examples": [[19, "examples"]], "Application Payload Memory Allocation": [[19, "application-payload-memory-allocation"]], "Services": [[19, "services"], [66, "services"]], "Acceleration Driver Services": [[19, "id1"]], "Return Codes": [[19, "return-codes"], [19, "id2"]], "Linux* Device Driver Operations Return Codes": [[19, "linux-device-driver-operations-return-codes"], [19, "id3"]], "Additional APIs": [[20, "additional-apis"]], "Check Device Availability APIs": [[21, "check-device-availability-apis"]], "icp_sal_userIsQatAvailable": [[21, "icp-sal-userisqatavailable"]], "Compress and Verify (CnV) Related APIs": [[22, "compress-and-verify-cnv-related-apis"]], "icp_sal_get_dc_error": [[22, "icp-sal-get-dc-error"]], "icp_sal_dc_simulate_error": [[22, "icp-sal-dc-simulate-error"]], "Congestion Management APIs": [[23, "congestion-management-apis"]], "icp_sal_SymGetInflightRequests": [[23, "icp-sal-symgetinflightrequests"]], "icp_sal_AsymGetInflightRequests": [[23, "icp-sal-asymgetinflightrequests"]], "icp_sal_dp_SymGetInflightRequests": [[23, "icp-sal-dp-symgetinflightrequests"]], "Dynamic Instance Allocation Functions": [[24, "dynamic-instance-allocation-functions"]], "icp_sal_userCyGetAvailableNumDynInstances": [[24, "icp-sal-usercygetavailablenumdyninstances"]], "icp_sal_userDcGetAvailableNumDynInstances": [[24, "icp-sal-userdcgetavailablenumdyninstances"]], "icp_sal_userCyInstancesAlloc": [[24, "icp-sal-usercyinstancesalloc"]], "icp_sal_userDcInstancesAlloc": [[24, "icp-sal-userdcinstancesalloc"]], "icp_sal_userCyFreeInstances": [[24, "icp-sal-usercyfreeinstances"]], "icp_sal_userDcFreeInstances": [[24, "icp-sal-userdcfreeinstances"]], "icp_sal_userCyGetAvailableNumDynInstancesByDevPkg": [[24, "icp-sal-usercygetavailablenumdyninstancesbydevpkg"]], "icp_sal_userDcGetAvailableNumDynInstancesByDevPkg": [[24, "icp-sal-userdcgetavailablenumdyninstancesbydevpkg"]], "icp_sal_userCyInstancesAllocByDevPkg": [[24, "icp-sal-usercyinstancesallocbydevpkg"]], "icp_sal_userDcInstancesAllocByDevPkg": [[24, "icp-sal-userdcinstancesallocbydevpkg"]], "icp_sal_userCyGetAvailableNumDynInstancesByPkgAccel": [[24, "icp-sal-usercygetavailablenumdyninstancesbypkgaccel"]], "icp_sal_userCyInstancesAllocByPkgAccel": [[24, "icp-sal-usercyinstancesallocbypkgaccel"]], "Heartbeat APIs": [[25, "heartbeat-apis"]], "icp_sal_check_device": [[25, "icp-sal-check-device"]], "icp_sal_check_all_devices": [[25, "icp-sal-check-all-devices"]], "icp_sal_heartbeat_simulate_failure": [[25, "icp-sal-heartbeat-simulate-failure"]], "IOMMU Remapping Functions": [[26, "iommu-remapping-functions"]], "icp_sal_iommu_get_remap_size": [[26, "icp-sal-iommu-get-remap-size"]], "icp_sal_iommu_map": [[26, "icp-sal-iommu-map"]], "icp_sal_iommu_unmap": [[26, "icp-sal-iommu-unmap"]], "IOMMU Remapping Function Usage": [[26, "iommu-remapping-function-usage"]], "Device Polling APIs": [[27, "device-polling-apis"]], "icp_sal_poll_device_events": [[27, "icp-sal-poll-device-events"], [31, "icp-sal-poll-device-events"]], "cpaCyInstanceSetNotificationCb": [[27, "cpacyinstancesetnotificationcb"]], "cpaDcInstanceSetNotificationCb": [[27, "cpadcinstancesetnotificationcb"]], "Polling Functions": [[28, "polling-functions"]], "icp_sal_pollBank": [[28, "icp-sal-pollbank"]], "icp_sal_pollAllBanks": [[28, "icp-sal-pollallbanks"]], "icp_sal_CyPollInstance": [[28, "icp-sal-cypollinstance"]], "icp_sal_DcPollInstance": [[28, "icp-sal-dcpollinstance"]], "icp_sal_CyPollDpInstance": [[28, "icp-sal-cypolldpinstance"]], "icp_sal_DcPollDpInstance": [[28, "icp-sal-dcpolldpinstance"]], "Reset Device Function": [[29, "reset-device-function"]], "icp_sal_reset_device": [[29, "icp-sal-reset-device"]], "Service Specific Polling APIs": [[30, "service-specific-polling-apis"]], "icp_sal_CyPollSymRing": [[30, "icp-sal-cypollsymring"]], "icp_sal_CyPollAsymRing": [[30, "icp-sal-cypollasymring"]], "Thread-Less APIs": [[31, "thread-less-apis"]], "icp_sal_find_new_devices": [[31, "icp-sal-find-new-devices"]], "User Space Access Configuration Functions": [[32, "user-space-access-configuration-functions"]], "icp_sal_userStart": [[32, "icp-sal-userstart"]], "icp_sal_userStop": [[32, "icp-sal-userstop"]], "Version Information Function": [[33, "version-information-function"]], "icp_sal_getDevVersionInfo": [[33, "icp-sal-getdevversioninfo"]], "Supported APIs": [[34, "supported-apis"]], "Intel QuickAssist Technology APIs": [[35, "intel-quickassist-technology-apis"]], "Cryptographic and Data Compression API Descriptions": [[35, "cryptographic-and-data-compression-api-descriptions"]], "Data Plane APIs Overview": [[35, "data-plane-apis-overview"]], "IA Cycle Count Reduction When Using Data Plane APIs": [[35, "ia-cycle-count-reduction-when-using-data-plane-apis"]], "Usage Constraints on the Data Plane APIs": [[35, "usage-constraints-on-the-data-plane-apis"]], "Intel\u00ae QAT API Limitations": [[35, "intel-qat-api-limitations"]], "Key Generation Cryptographic API Limitations": [[35, "id1"]], "Architecture": [[36, "architecture"]], "General Section": [[37, "general-section"]], "General Section Parameters": [[37, "id1"]], "ServicesEnabled": [[37, "servicesenabled"]], "Performance Considerations": [[37, "performance-considerations"], [64, "performance-considerations"], [93, "performance-considerations"]], "ServicesProfile": [[37, "servicesprofile"]], "General Default Configuration Parameters": [[37, "general-default-configuration-parameters"], [37, "id2"]], "Concurrent Requests": [[37, "concurrent-requests"]], "Power Management Parameters": [[37, "power-management-parameters"]], "Shared Virtual Memory (SVM) Parameters": [[37, "shared-virtual-memory-svm-parameters"]], "SVMEnabled": [[37, "svmenabled"]], "ATEnabled": [[37, "atenabled"]], "Logical Instances Section": [[39, "logical-instances-section"]], "[KERNEL] Section": [[39, "kernel-section"]], "[KERNEL] Section Parameters": [[39, "id1"]], "User Process [xxxxx] Sections": [[39, "user-process-xxxxx-sections"]], "[User Process] Section Parameters": [[39, "id2"]], "Cryptographic Logical Instance Parameters": [[39, "cryptographic-logical-instance-parameters"], [39, "id3"]], "Data Compression Logical Instance Parameters": [[39, "data-compression-logical-instance-parameters"], [39, "id4"]], "Setting the Core Affinity Parameter for a Logical Instance": [[39, "setting-the-core-affinity-parameter-for-a-logical-instance"]], "Maximum Number of Process Calculations": [[40, "maximum-number-of-process-calculations"]], "Increasing the Maximum Number of Processes/Instances": [[40, "increasing-the-maximum-number-of-processes-instances"]], "Configuration Variations": [[40, "id1"]], "Invalid Configurations": [[40, "invalid-configurations"]], "Configuring Instances for Virtual Functions": [[40, "configuring-instances-for-virtual-functions"]], "Configuring Physical Functions and Virtual Functions": [[40, "id2"]], "Configuring Multiple Intel\u00ae QuickAssist Technology Endpoints in a System": [[41, "configuring-multiple-intel-quickassist-technology-endpoints-in-a-system"]], "Configuring Multiple Processes on a System with Multiple Intel\u00ae QAT Endpoints": [[42, "configuring-multiple-processes-on-a-system-with-multiple-intel-qat-endpoints"]], "Configuration File Overview": [[43, "configuration-file-overview"]], "Sample Configuration Files": [[44, "sample-configuration-files"]], "Fused Operations": [[45, "fused-operations"]], "Programmer\u2019s Guide": [[46, "programmer-s-guide"]], "Debugability": [[47, "debugability"]], "Overview of Intel\u00ae QAT debugfs entries": [[47, "overview-of-intel-qat-debugfs-entries"]], "Todo": [[47, "id1"], [88, "id1"]], "Entries in /sys/kernel/debug/qat_*": [[47, "entries-in-sys-kernel-debug-qat"]], "Intel\u00ae QuickAssist Technology /sys/kernel/debug Entries": [[47, "id2"]], "Memory driver queries ( qae_mem_slabs )": [[47, "memory-driver-queries-qae-mem-slabs"]], "Read/Write to /sys/kernel/debug/qae_mem_dbg/qae_mem_slabs": [[47, "id3"]], "Telemetry": [[48, "telemetry"]], "Telemetry Usage": [[48, "telemetry-usage"]], "Telemetry Control": [[48, "telemetry-control"]], "Telemetry Commands": [[48, "telemetry-commands"], [48, "id1"]], "Selecting Ring Pairs": [[48, "selecting-ring-pairs"]], "Ring Pairs": [[48, "id2"]], "Device Level Telemetry Values": [[48, "device-level-telemetry-values"], [48, "id3"]], "Ring Pair Level Telemetry Values": [[48, "ring-pair-level-telemetry-values"], [48, "id4"]], "Monitoring Telemetry - Text Based": [[48, "monitoring-telemetry-text-based"]], "Monitoring Telemetry Demo": [[48, "monitoring-telemetry-demo"]], "Heartbeat": [[49, "heartbeat"]], "Heartbeat Operation": [[49, "heartbeat-operation"]], "Initialization": [[49, "initialization"]], "Heartbeat Monitoring": [[49, "heartbeat-monitoring"]], "Resetting a Failed Device": [[49, "resetting-a-failed-device"]], "AutoResetOnError Values": [[49, "id2"]], "Function Signatures": [[49, "function-signatures"]], "Incorporating Heartbeat into Intel\u00ae QAT Applications": [[49, "incorporating-heartbeat-into-intel-qat-applications"]], "Restart Sequence": [[49, "restart-sequence"]], "Status of Packets in Flight (Crypto Applications Only)": [[49, "status-of-packets-in-flight-crypto-applications-only"]], "Determining Device ID": [[49, "determining-device-id"]], "Testing Heartbeat": [[49, "testing-heartbeat"]], "Simulated Heartbeat Failure Configuration": [[49, "simulated-heartbeat-failure-configuration"]], "Simulating Heartbeat Failure": [[49, "simulating-heartbeat-failure"]], "System Virtual Files": [[49, "system-virtual-files"]], "Heartbeat System Virtual Files": [[49, "id3"]], "Heartbeat Polling Frequencies": [[49, "heartbeat-polling-frequencies"]], "Handling Device Failures in a Virtualized Environment": [[49, "handling-device-failures-in-a-virtualized-environment"]], "Incorporating Dummy Responses into an Intel\u00ae QAT Application": [[49, "incorporating-dummy-responses-into-an-intel-qat-application"]], "Infrastructure": [[50, "infrastructure"]], "Load Balancing": [[51, "load-balancing"]], "Per Endpoint": [[51, "per-endpoint"]], "Across Endpoints": [[51, "across-endpoints"]], "Load Sharing Criteria": [[51, "load-sharing-criteria"]], "Dimensions": [[51, "dimensions"]], "Dimensions Gen 1 & Gen 2": [[51, "id1"]], "Dimensions Gen 3 & Gen 4": [[51, "id2"]], "Memory Management": [[52, "memory-management"]], "Shared Virtual Memory": [[52, "shared-virtual-memory"]], "SVM Kernel Requirements": [[52, "svm-kernel-requirements"]], "DMA-able Memory": [[52, "dma-able-memory"]], "Memory Type Determination": [[52, "memory-type-determination"]], "Buffer Formats": [[52, "buffer-formats"]], "Scatter-Gather List (SGL) Buffers": [[52, "scatter-gather-list-sgl-buffers"]], "Huge Pages": [[52, "huge-pages"]], "Calling Semantics": [[53, "calling-semantics"]], "Asynchronous (Polled)": [[53, "asynchronous-polled"]], "Asynchronous (Interrupts)": [[53, "asynchronous-interrupts"]], "Synchronous": [[53, "synchronous"]], "Pros And Cons": [[53, "pros-and-cons"]], "Pros and cons of modes of operation": [[53, "id1"]], "Power Management": [[54, "power-management"]], "Configuration": [[54, "configuration"], [98, "configuration"], [99, "configuration"]], "Power Management Configuration": [[54, "id1"]], "Usage": [[54, "usage"]], "Considerations": [[54, "considerations"]], "Queues and Queue Pairs": [[55, "queues-and-queue-pairs"]], "Queues Pairs": [[55, "queues-pairs"]], "Queue Bundles": [[55, "queue-bundles"]], "Reliability, Availability, and Stability (RAS)": [[56, "reliability-availability-and-stability-ras"]], "RAS Usage": [[56, "ras-usage"]], "RAS Error Types": [[56, "id1"]], "AER Errors": [[56, "aer-errors"]], "RAS AER Errors": [[56, "id2"]], "Rate Limiting": [[57, "rate-limiting"]], "Service Level Agreement (SLA)": [[57, "service-level-agreement-sla"]], "SLA Units": [[57, "sla-units"]], "SLA Manager Application": [[57, "sla-manager-application"]], "SLA Commands": [[57, "sla-commands"]], "Rate Limiting SLA Commands": [[57, "id1"]], "SLA Manager Application Demo": [[57, "sla-manager-application-demo"]], "Reset Operation": [[58, "reset-operation"]], "Service Instances": [[59, "service-instances"]], "Configurable Items (via config file)": [[59, "configurable-items-via-config-file"]], "User Queues": [[60, "user-queues"]], "Hardware View": [[60, "hardware-view"]], "ENQCMD(S) Instruction": [[60, "enqcmd-s-instruction"]], "Software View": [[60, "software-view"]], "PASID Management": [[60, "pasid-management"]], "About this Document": [[61, "about-this-document"]], "Secure Architecture Considerations": [[63, "secure-architecture-considerations"]], "Threat Categories": [[63, "threat-categories"], [63, "id1"]], "Attack Mechanism": [[63, "attack-mechanism"], [63, "id2"]], "Attacker Privilege": [[63, "attacker-privilege"], [63, "id3"]], "Deployment Models": [[63, "deployment-models"], [63, "id4"]], "Threat/Attack Vectors": [[63, "threat-attack-vectors"]], "General Mitigation": [[63, "general-mitigation"]], "General Threats": [[63, "general-threats"]], "DMA": [[63, "dma"]], "Intentional Modification of IA Driver": [[63, "intentional-modification-of-ia-driver"]], "Modification of the QAT Configuration File": [[63, "modification-of-the-qat-configuration-file"]], "Malicious Application Code": [[63, "malicious-application-code"]], "Denial of Service": [[63, "denial-of-service"]], "Threats Specific to Cryptographic Service": [[63, "threats-specific-to-cryptographic-service"]], "Reading Cryptographic Keys": [[63, "reading-cryptographic-keys"]], "Data Compression": [[64, "data-compression"]], "Compresion Features": [[64, "compresion-features"]], "Compression Limitations": [[64, "compression-limitations"]], "Compression Session Setup": [[64, "compression-session-setup"]], "Compression CpaDcSessionSetupData Properties": [[64, "id2"]], "Decompression Session Setup": [[64, "decompression-session-setup"]], "Decompression CpaDcSessionSetupData Properties": [[64, "id3"]], "Deflate Decompression": [[64, "deflate-decompression"]], "LZ4 Decompresion": [[64, "lz4-decompresion"]], "LZ4 Decompression Limitations": [[64, "lz4-decompression-limitations"]], "Multi-frame decompression support": [[64, "multi-frame-decompression-support"]], "Flush Flags": [[64, "flush-flags"], [64, "id4"]], "Checksums": [[64, "checksums"], [64, "id5"]], "LZ4s Compressed Data Block format": [[64, "lz4s-compressed-data-block-format"]], "Differences between LZ4 and LZ4s block format": [[64, "id6"]], "LZ4 Compression Support": [[64, "lz4-compression-support"]], "Compress-and-Verify": [[64, "compress-and-verify"]], "Compress and Verify Error log in Sysfs": [[64, "compress-and-verify-error-log-in-sysfs"]], "Compress and Verify and Recover (CnVnR)": [[64, "compress-and-verify-and-recover-cnvnr"]], "Compress and Verify and Recover (CnVnR) Behaviors": [[64, "id7"]], "Dynamic Compression": [[64, "dynamic-compression"]], "Maximum Expansion with Auto Select Best Feature (ASB)": [[64, "maximum-expansion-with-auto-select-best-feature-asb"]], "ASB Settings": [[64, "id8"]], "Maximum Compression Expansion": [[64, "maximum-compression-expansion"]], "No Session API": [[64, "no-session-api"]], "Compression Levels": [[64, "compression-levels"], [64, "id9"]], "Compression Status Codes": [[64, "compression-status-codes"]], "Intel\u00ae QuickAssist Technology Compression API Errors": [[64, "intel-quickassist-technology-compression-api-errors"]], "Compression API Errors": [[64, "compression-api-errors"], [64, "id10"]], "Overflows Errors": [[64, "overflows-errors"], [64, "id11"]], "Traditional API Overflow Exception": [[64, "traditional-api-overflow-exception"]], "Data Plane API Overflow Error": [[64, "data-plane-api-overflow-error"]], "Handling Overflow Errors": [[64, "handling-overflow-errors"]], "Compression Overflows in a Virtual Environment": [[64, "compression-overflows-in-a-virtual-environment"]], "Avoiding Compression Overflow Exceptions": [[64, "avoiding-compression-overflow-exceptions"]], "Integrity Checksums": [[64, "integrity-checksums"], [64, "id12"]], "Verify HW Integrity CRC\u2019s": [[64, "verify-hw-integrity-crc-s"]], "Data Compression Applications": [[64, "data-compression-applications"]], "Compression for Storage": [[64, "compression-for-storage"]], "Data Deduplication and WAN Acceleration": [[64, "data-deduplication-and-wan-acceleration"]], "Cryptographic Services": [[65, "cryptographic-services"]], "Supported Cipher Algorithms": [[65, "supported-cipher-algorithms"], [65, "id4"]], "Supported Hash/Authenticate Algorithms": [[65, "supported-hash-authenticate-algorithms"], [65, "id5"]], "Supported Public Key Algorithms": [[65, "supported-public-key-algorithms"], [65, "id6"]], "Cryptography Applications": [[65, "cryptography-applications"]], "IPsec and SSL VPNs": [[65, "ipsec-and-ssl-vpns"]], "Encrypted Storage": [[65, "encrypted-storage"]], "Web Proxy Appliances": [[65, "web-proxy-appliances"]], "Virtualization": [[67, "virtualization"]], "Virtualization Deployment Model for Intel\u00ae QAT 2.0": [[67, "virtualization-deployment-model-for-intel-qat-2-0"]], "Physical Device Direct Assignment": [[67, "physical-device-direct-assignment"]], "Single Root IOV (SR-IOV)": [[67, "single-root-iov-sr-iov"]], "Scalable IOV (S-IOV)": [[67, "scalable-iov-s-iov"]], "Reducing Number of VFs per Endpoint": [[67, "reducing-number-of-vfs-per-endpoint"]], "Detecting Current Firmware": [[68, "detecting-current-firmware"]], "QAT Firmware Available": [[68, "qat-firmware-available"], [68, "id3"]], "Download": [[68, "download"]], "QAT Kernel Driver Releases & Features": [[68, "qat-kernel-driver-releases-features"], [68, "id4"]], "Known Errata (Linux Firmware/Kernel Modules)": [[68, "known-errata-linux-firmware-kernel-modules"]], "QAT20-23946 [SVM/IOMMU] Request issue doesn\u2019t appear in response": [[68, "qat20-23946-svm-iommu-request-issue-doesn-t-appear-in-response"], [73, "qat20-23946-svm-iommu-request-issue-doesn-t-appear-in-response"], [76, "qat20-23946-svm-iommu-request-issue-doesn-t-appear-in-response"]], "QAT20-24970 [Firmware] Potential false positive heartbeat failures": [[68, "qat20-24970-firmware-potential-false-positive-heartbeat-failures"], [73, "qat20-24970-firmware-potential-false-positive-heartbeat-failures"], [76, "qat20-24970-firmware-potential-false-positive-heartbeat-failures"]], "QAT20-20272 [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs": [[68, "qat20-20272-xcc-mcc-spurious-heartbeat-failures-may-be-observed-on-some-skus"], [73, "qat20-20272-xcc-mcc-spurious-heartbeat-failures-may-be-observed-on-some-skus"], [76, "qat20-20272-xcc-mcc-spurious-heartbeat-failures-may-be-observed-on-some-skus"]], "QAT20-18924 [MCC] MCC SKUs may consume more power than expected": [[68, "qat20-18924-mcc-mcc-skus-may-consume-more-power-than-expected"], [73, "qat20-18924-mcc-mcc-skus-may-consume-more-power-than-expected"], [76, "qat20-18924-mcc-mcc-skus-may-consume-more-power-than-expected"]], "QATE-45537 [Firmware] - Firmware authentication may fail if PCIe* errors occur or are injected": [[68, "qate-45537-firmware-firmware-authentication-may-fail-if-pcie-errors-occur-or-are-injected"]], "Resolved Errata": [[68, "resolved-errata"]], "QATE-8109 [Firmware] - Driver and firmware versions are not reported to user space": [[68, "qate-8109-firmware-driver-and-firmware-versions-are-not-reported-to-user-space"]], "QATE-4051 - Unable to activate driver using QAT1.7 devices in full passthrough mode": [[68, "qate-4051-unable-to-activate-driver-using-qat1-7-devices-in-full-passthrough-mode"]], "QATE-77659 Unexpected behaviour may be triggered by certain SGL sub-buffer layouts on CLC devices": [[68, "qate-77659-unexpected-behaviour-may-be-triggered-by-certain-sgl-sub-buffer-layouts-on-clc-devices"]], "QATE-39335 Compression instances do not work on Virtual Machine with Linux Host QAT driver without CnVnR support": [[68, "qate-39335-compression-instances-do-not-work-on-virtual-machine-with-linux-host-qat-driver-without-cnvnr-support"]], "License": [[68, "license"]], "Release Notes - In-Tree": [[69, "release-notes-in-tree"]], "Description of Release": [[71, "description-of-release"], [77, "description-of-release"]], "Features": [[71, "features"], [77, "features"]], "Limitations": [[71, "limitations"], [77, "limitations"]], "Supported Operating Systems and Platforms": [[71, "supported-operating-systems-and-platforms"]], "Version Numbering Scheme": [[71, "version-numbering-scheme"]], "Package Version": [[71, "package-version"]], "Licensing for Linux* Acceleration Software": [[71, "licensing-for-linux-acceleration-software"]], "SHA256 Checksum Information": [[71, "sha256-checksum-information"]], "Intel QAT API Updates": [[71, "intel-qat-api-updates"]], "Technical Support": [[71, "technical-support"], [77, "technical-support"]], "Environmental Assumptions": [[71, "environmental-assumptions"], [77, "environmental-assumptions"]], "Related Documentation": [[71, "related-documentation"], [77, "related-documentation"]], "Release Notes - Linux*": [[72, "release-notes-linux"]], "Known Issues": [[73, "known-issues"], [76, "known-issues"], [79, "known-issues"], [82, "known-issues"]], "QATE20-8981 [Sample Code] sym_dp_update_sample Functional Sample Code application execution will fail": [[73, "qate20-8981-sample-code-sym-dp-update-sample-functional-sample-code-application-execution-will-fail"], [76, "qate20-8981-sample-code-sym-dp-update-sample-functional-sample-code-application-execution-will-fail"]], "QATE20-9131 [DC] - Incorrect XXHASH32 can be generated when using error injection and buffer overflow occurs when using accumulated XXHASH32": [[73, "qate20-9131-dc-incorrect-xxhash32-can-be-generated-when-using-error-injection-and-buffer-overflow-occurs-when-using-accumulated-xxhash32"], [76, "qate20-9131-dc-incorrect-xxhash32-can-be-generated-when-using-error-injection-and-buffer-overflow-occurs-when-using-accumulated-xxhash32"]], "QATE20-9671 [DC] - Accumulated XXHash32 is not supported for LZ4 decompress operations": [[73, "qate20-9671-dc-accumulated-xxhash32-is-not-supported-for-lz4-decompress-operations"], [76, "qate20-9671-dc-accumulated-xxhash32-is-not-supported-for-lz4-decompress-operations"]], "QATE20-19310 [DC] Additional configuration required to enable 8K data decompression performance": [[73, "qate20-19310-dc-additional-configuration-required-to-enable-8k-data-decompression-performance"], [76, "qate20-19310-dc-additional-configuration-required-to-enable-8k-data-decompression-performance"]], "QAT20-21905 SVM/AT cannot be enabled when PRS is disabled": [[73, "qat20-21905-svm-at-cannot-be-enabled-when-prs-is-disabled"], [76, "qat20-21905-svm-at-cannot-be-enabled-when-prs-is-disabled"]], "QATE20-21751 [VIRT] - Missing VFs on host when attaching to VMs": [[73, "qate20-21751-virt-missing-vfs-on-host-when-attaching-to-vms"], [76, "qate20-21751-virt-missing-vfs-on-host-when-attaching-to-vms"]], "QATE20-22999 [Sample Code] Functional sample applications will fail if service is not enabled on first QAT Endpoint": [[73, "qate20-22999-sample-code-functional-sample-applications-will-fail-if-service-is-not-enabled-on-first-qat-endpoint"], [76, "qate20-22999-sample-code-functional-sample-applications-will-fail-if-service-is-not-enabled-on-first-qat-endpoint"]], "QAT20-28723 [SVM/IOMMU] Incorrect reporting slice timeout due to page request latency": [[73, "qat20-28723-svm-iommu-incorrect-reporting-slice-timeout-due-to-page-request-latency"], [76, "qat20-28723-svm-iommu-incorrect-reporting-slice-timeout-due-to-page-request-latency"]], "Resolved Issues": [[74, "resolved-issues"], [76, "resolved-issues"], [80, "resolved-issues"], [82, "resolved-issues"]], "QATE20-3331 [Sample Code] Functional Sample Code Compression applications execution will fail": [[74, "qate20-3331-sample-code-functional-sample-code-compression-applications-execution-will-fail"], [76, "qate20-3331-sample-code-functional-sample-code-compression-applications-execution-will-fail"]], "QATE20-9755 [SRIOV] RLT_ERRLOG may be reported under high concurrent loads": [[74, "qate20-9755-sriov-rlt-errlog-may-be-reported-under-high-concurrent-loads"], [76, "qate20-9755-sriov-rlt-errlog-may-be-reported-under-high-concurrent-loads"]], "QATE20-9669 [DC] - Deflate Dynamic Decompression not optimized for payloads of source length < 4K, destination length <= 16K": [[74, "qate20-9669-dc-deflate-dynamic-decompression-not-optimized-for-payloads-of-source-length-4k-destination-length-16k"], [76, "qate20-9669-dc-deflate-dynamic-decompression-not-optimized-for-payloads-of-source-length-4k-destination-length-16k"]], "QATE20-9394 [SRIOV] Virtual Functions (VFs) are not automatically detached by hypervisor after Physical Function (PF) restart": [[74, "qate20-9394-sriov-virtual-functions-vfs-are-not-automatically-detached-by-hypervisor-after-physical-function-pf-restart"], [76, "qate20-9394-sriov-virtual-functions-vfs-are-not-automatically-detached-by-hypervisor-after-physical-function-pf-restart"]], "QATE20-3860 [SR-IOV] Virtual Functions (VFs) require restart after changing Physical Function (PF) Service configuration": [[74, "qate20-3860-sr-iov-virtual-functions-vfs-require-restart-after-changing-physical-function-pf-service-configuration"], [76, "qate20-3860-sr-iov-virtual-functions-vfs-require-restart-after-changing-physical-function-pf-service-configuration"]], "QATE20-10981 [DC] EOLB incorrectly set during stateful decompression": [[74, "qate20-10981-dc-eolb-incorrectly-set-during-stateful-decompression"], [76, "qate20-10981-dc-eolb-incorrectly-set-during-stateful-decompression"]], "QAT20-10966 DC - Invalid checksum value returned with multi-Gzip payload": [[74, "qat20-10966-dc-invalid-checksum-value-returned-with-multi-gzip-payload"], [76, "qat20-10966-dc-invalid-checksum-value-returned-with-multi-gzip-payload"]], "QATE20-9756 [DC] - autoSelectBestHuffmanTree flag parameter is not honored by acceleration library": [[74, "qate20-9756-dc-autoselectbesthuffmantree-flag-parameter-is-not-honored-by-acceleration-library"], [76, "qate20-9756-dc-autoselectbesthuffmantree-flag-parameter-is-not-honored-by-acceleration-library"]], "QATE20-11081 [DC] - API cpaDcResetSession() does not reset E2E internal structure": [[74, "qate20-11081-dc-api-cpadcresetsession-does-not-reset-e2e-internal-structure"], [76, "qate20-11081-dc-api-cpadcresetsession-does-not-reset-e2e-internal-structure"]], "QATE20-9501 [DC] - Overflow can occur when using output buffer sizes defined by the cpaDcCompressBound API with Dynamic Deflate compression operations under concurrent execution": [[74, "qate20-9501-dc-overflow-can-occur-when-using-output-buffer-sizes-defined-by-the-cpadccompressbound-api-with-dynamic-deflate-compression-operations-under-concurrent-execution"], [76, "qate20-9501-dc-overflow-can-occur-when-using-output-buffer-sizes-defined-by-the-cpadccompressbound-api-with-dynamic-deflate-compression-operations-under-concurrent-execution"]], "QATE20-9764 [DC] - XXHash32 Checksum is not correct on Overflow when Flush Final is set": [[74, "qate20-9764-dc-xxhash32-checksum-is-not-correct-on-overflow-when-flush-final-is-set"], [76, "qate20-9764-dc-xxhash32-checksum-is-not-correct-on-overflow-when-flush-final-is-set"]], "QATE20-9078 [CY] Concurrent sym;asym services not supported by Performance Sample Code (cpa_sample_code)": [[74, "qate20-9078-cy-concurrent-sym-asym-services-not-supported-by-performance-sample-code-cpa-sample-code"], [76, "qate20-9078-cy-concurrent-sym-asym-services-not-supported-by-performance-sample-code-cpa-sample-code"]], "QATE20-10480 [DC] - LZ4 compression request may result in a timeout event (-16 CPA_DC_WDOG_TIMER_ERR)": [[74, "qate20-10480-dc-lz4-compression-request-may-result-in-a-timeout-event-16-cpa-dc-wdog-timer-err"], [76, "qate20-10480-dc-lz4-compression-request-may-result-in-a-timeout-event-16-cpa-dc-wdog-timer-err"]], "QAT20-10606 [Configuration] - Device configurations files are not copied to /etc/ for physical devices on systems with > 2 sockets": [[74, "qat20-10606-configuration-device-configurations-files-are-not-copied-to-etc-for-physical-devices-on-systems-with-2-sockets"], [76, "qat20-10606-configuration-device-configurations-files-are-not-copied-to-etc-for-physical-devices-on-systems-with-2-sockets"]], "QAT20-12942 [DC] - Overflow can occur when using output buffer sizes defined by the cpaDcCompressBound API with Dynamic Deflate compression operations under concurrent execution": [[74, "qat20-12942-dc-overflow-can-occur-when-using-output-buffer-sizes-defined-by-the-cpadccompressbound-api-with-dynamic-deflate-compression-operations-under-concurrent-execution"], [76, "qat20-12942-dc-overflow-can-occur-when-using-output-buffer-sizes-defined-by-the-cpadccompressbound-api-with-dynamic-deflate-compression-operations-under-concurrent-execution"]], "QAT20-11092 [SRIOV] Default number of VF devices is not available for 4S+ platform": [[74, "qat20-11092-sriov-default-number-of-vf-devices-is-not-available-for-4s-platform"], [76, "qat20-11092-sriov-default-number-of-vf-devices-is-not-available-for-4s-platform"]], "QATE20-9754 [DC] - Deflate Decompression Overflow may result in a timeout event (-16 CPA_DC_WDOG_TIMER_ERR)": [[74, "qate20-9754-dc-deflate-decompression-overflow-may-result-in-a-timeout-event-16-cpa-dc-wdog-timer-err"], [76, "qate20-9754-dc-deflate-decompression-overflow-may-result-in-a-timeout-event-16-cpa-dc-wdog-timer-err"]], "QAT20-23616 [Firmware] Shared Virtual Memory (SVM) and Address Translation (AT) disabled": [[74, "qat20-23616-firmware-shared-virtual-memory-svm-and-address-translation-at-disabled"], [76, "qat20-23616-firmware-shared-virtual-memory-svm-and-address-translation-at-disabled"]], "Release Updates": [[76, "release-updates"], [82, "release-updates"]], "Package Information": [[77, "package-information"]], "Supported Guest Drivers": [[77, "supported-guest-drivers"]], "Release Notes - VMware*": [[78, "release-notes-vmware"]], "QAT20-23616 - [Firmware] Shared Virtual Memory (SVM) and Address Translation (AT) disabled": [[79, "qat20-23616-firmware-shared-virtual-memory-svm-and-address-translation-at-disabled"], [82, "qat20-23616-firmware-shared-virtual-memory-svm-and-address-translation-at-disabled"]], "QAT20-18924 - [MCC] MCC SKUs may consume more power than expected": [[79, "qat20-18924-mcc-mcc-skus-may-consume-more-power-than-expected"], [82, "qat20-18924-mcc-mcc-skus-may-consume-more-power-than-expected"]], "QAT20-20272 - [XCC/MCC] Spurious heartbeat failures may be observed on some SKUs": [[79, "qat20-20272-xcc-mcc-spurious-heartbeat-failures-may-be-observed-on-some-skus"], [82, "qat20-20272-xcc-mcc-spurious-heartbeat-failures-may-be-observed-on-some-skus"]], "VQQ-1542 - VM with enabled vIOMMU may crash with IOMMU fault": [[79, "vqq-1542-vm-with-enabled-viommu-may-crash-with-iommu-fault"], [82, "vqq-1542-vm-with-enabled-viommu-may-crash-with-iommu-fault"]], "VQQ-1553 - Incompatibility between legacy 1.7 and 2.0 drivers": [[79, "vqq-1553-incompatibility-between-legacy-1-7-and-2-0-drivers"], [82, "vqq-1553-incompatibility-between-legacy-1-7-and-2-0-drivers"]], "VQQ-1618 - Driver may accept incorrect service mask configuration and treat it as default configuration": [[80, "vqq-1618-driver-may-accept-incorrect-service-mask-configuration-and-treat-it-as-default-configuration"], [82, "vqq-1618-driver-may-accept-incorrect-service-mask-configuration-and-treat-it-as-default-configuration"]], "Release Notes": [[83, "release-notes"]], "Virtualization Deployment Guide": [[84, "virtualization-deployment-guide"]], "Installing Intel QAT on the Host": [[87, "installing-intel-qat-on-the-host"]], "Software Installation on the Host Demo": [[87, "software-installation-on-the-host-demo"]], "Setting Up sIOV": [[87, "setting-up-siov"]], "Using the vqat_ctl utility": [[87, "using-the-vqat-ctl-utility"]], "Passing-through the VF/VQAT to the Guest": [[87, "passing-through-the-vf-vqat-to-the-guest"]], "SR-IOV VF Configuration": [[87, "sr-iov-vf-configuration"]], "sIOV VQAT Configuration": [[87, "siov-vqat-configuration"]], "Installing Intel QAT on the Guest": [[87, "installing-intel-qat-on-the-guest"]], "System Environment Preparation": [[88, "system-environment-preparation"]], "Updating the BIOS Settings": [[88, "updating-the-bios-settings"]], "Configuring the Host OS": [[88, "configuring-the-host-os"]], "Kernel Requirements": [[88, "kernel-requirements"]], "Kernel Boot Parameters": [[88, "kernel-boot-parameters"]], "Install Virtualization Packages": [[88, "install-virtualization-packages"]], "System Environment Preparation Demo": [[88, "system-environment-preparation-demo"]], "Intel QuickAssist Technology Documentation - Hardware Version 2.0": [[89, "intel-quickassist-technology-documentation-hardware-version-2-0"]], "Documentation & Resources": [[90, "documentation-resources"]], "General Resources": [[90, "general-resources"]], "Hardware Version 1.X (Customer Enabling Release)": [[90, "hardware-version-1-x-customer-enabling-release"]], "Hardware Version 2.0": [[90, "hardware-version-2-0"]], "API Reference Manuals": [[90, "api-reference-manuals"]], "Contact & Support": [[91, "contact-support"]], "Contact": [[91, "contact"]], "Support": [[91, "support"]], "Legal Notices & Disclaimers": [[92, "legal-notices-disclaimers"]], "Configuration and Tuning": [[93, "configuration-and-tuning"]], "Managed Mode": [[93, "managed-mode"]], "Policy": [[93, "policy"]], "Policy Settings": [[93, "id1"]], "Services Enabled": [[93, "services-enabled"]], "Services Enabled Settings": [[93, "id2"]], "Example Configurations": [[93, "example-configurations"]], "Flexibility": [[93, "flexibility"]], "Scalability and Flexibility": [[93, "scalability-and-flexibility"]], "Crypto-Only Scalability": [[93, "crypto-only-scalability"]], "Symmetric-Only Scalability": [[93, "symmetric-only-scalability"]], "Asymmetric-Only Scalability": [[93, "asymmetric-only-scalability"]], "Compression-Only Scalability": [[93, "compression-only-scalability"]], "Compression chaining scalability": [[93, "compression-chaining-scalability"]], "Standalone Mode": [[93, "standalone-mode"]], "Display Current Configuration": [[93, "display-current-configuration"]], "Custom Configuration": [[93, "custom-configuration"]], "Description": [[94, "description"]], "Features & Limitation": [[94, "features-limitation"]], "QATlib User\u2019s Guide": [[95, "qatlib-user-s-guide"]], "Installation": [[96, "installation"], [98, "installation"], [99, "installation"]], "Installing from RPM Packages": [[96, "installing-from-rpm-packages"]], "Installing from Sources": [[96, "installing-from-sources"], [98, "installing-from-sources"], [99, "installing-from-sources"], [102, "installing-from-sources"]], "Available Configuration Options": [[96, "id1"]], "Intel\u00ae QuickAssist Technology(QAT) OpenSSL* Engine": [[98, "intel-quickassist-technology-qat-openssl-engine"]], "Installing from Packages": [[98, "installing-from-packages"], [99, "installing-from-packages"], [102, "installing-from-packages"]], "Verify QAT_Engine is enabled": [[98, "verify-qat-engine-is-enabled"]], "Testing with OpenSSL Speed": [[98, "testing-with-openssl-speed"]], "qat_hw tests": [[98, "qat-hw-tests"]], "RSA 2K": [[98, "rsa-2k"]], "ECDH Compute Key": [[98, "ecdh-compute-key"]], "Chained Cipher: aes-128-cbc-hmac-sha1": [[98, "chained-cipher-aes-128-cbc-hmac-sha1"]], "qat_sw tests (Intel(R) Crypto Multi-buffer library)": [[98, "qat-sw-tests-intel-r-crypto-multi-buffer-library"]], "RSA2K": [[98, "rsa2k"]], "ECDH X25519": [[98, "ecdh-x25519"]], "ECDH P-256": [[98, "ecdh-p-256"]], "ECDSA P-256": [[98, "ecdsa-p-256"]], "ECDH P-384": [[98, "ecdh-p-384"]], "ECDSA P-384": [[98, "ecdsa-p-384"]], "qat_sw tests (Intel(R) Multi-Buffer Crypto for IPsec)": [[98, "qat-sw-tests-intel-r-multi-buffer-crypto-for-ipsec"]], "AES-128-GCM": [[98, "aes-128-gcm"]], "AES-192-GCM": [[98, "aes-192-gcm"]], "AES-256-GCM": [[98, "aes-256-gcm"]], "Intel\u00ae QuickAssist Technology (QAT) QATzip Library": [[99, "intel-quickassist-technology-qat-qatzip-library"]], "Benchmarking": [[99, "benchmarking"]], "Example test": [[99, "example-test"]], "Test Details": [[99, "test-details"]], "System Requirements": [[100, "system-requirements"]], "Intel VT-d and SR-IOV parameters location in BIOS": [[100, "id1"]], "Kernel/Firmware Requirements": [[100, "kernel-firmware-requirements"]], "Supported Devices": [[100, "supported-devices"]], "Firmware": [[100, "firmware"]], "Kernel Drivers": [[100, "kernel-drivers"]], "Host System Kernel Drivers": [[100, "host-system-kernel-drivers"]], "Guest System Kernel Drivers": [[100, "guest-system-kernel-drivers"]], "Linux Boot Parameters": [[100, "linux-boot-parameters"]], "Instructions for Debian Based Distros": [[100, "instructions-for-debian-based-distros"]], "Instructions for RHEL/CentOS/Fedora": [[100, "instructions-for-rhel-centos-fedora"]], "Sample Code": [[102, "sample-code"]], "Installing the Sample Code": [[102, "installing-the-sample-code"]], "Running the Sample Code": [[102, "running-the-sample-code"]], "Uninstalling the Sample Code": [[102, "uninstalling-the-sample-code"]], "Uninstalling from Packages": [[102, "uninstalling-from-packages"]], "Uninstalling from Sources": [[102, "uninstalling-from-sources"]]}, "indexentries": {"adf": [[13, "term-ADF"]], "aead": [[13, "term-AEAD"]], "aes": [[13, "term-AES"]], "api": [[13, "term-API"]], "asic": [[13, "term-ASIC"]], "bdf": [[13, "term-BDF"]], "bios": [[13, "term-BIOS"]], "bmsm": [[13, "term-BMSM"]], "bom": [[13, "term-BOM"]], "bsd": [[13, "term-BSD"]], "bts": [[13, "term-BTS"]], "c-states": [[13, "term-C-States"]], "cbc": [[13, "term-CBC"]], "ccm": [[13, "term-CCM"]], "cli": [[13, "term-CLI"]], "cpk": [[13, "term-CPK"]], "csr": [[13, "term-CSR"]], "cy": [[13, "term-CY"]], "cnv": [[13, "term-CnV"]], "cnvnr": [[13, "term-CnVnR"]], "dc": [[13, "term-DC"]], "did": [[13, "term-DID"]], "dma": [[13, "term-DMA"]], "dpdk": [[13, "term-DPDK"]], "dram": [[13, "term-DRAM"]], "dsa": [[13, "term-DSA"]], "dtls": [[13, "term-DTLS"]], "ecc": [[13, "term-ECC"]], "ecdh": [[13, "term-ECDH"]], "esp": [[13, "term-ESP"]], "evp": [[13, "term-EVP"]], "flr": [[13, "term-FLR"]], "fw": [[13, "term-FW"]], "gcm": [[13, "term-GCM"]], "gpl": [[13, "term-GPL"]], "grub": [[13, "term-GRUB"]], "gui": [[13, "term-GUI"]], "gige": [[13, "term-GigE"]], "hlp": [[13, "term-HLP"]], "hmac": [[13, "term-HMAC"]], "ia": [[13, "term-IA"]], "ids/ips": [[13, "term-IDS-IPS"]], "ieee": [[13, "term-IEEE"]], "ike": [[13, "term-IKE"]], "ioctl": [[13, "term-IOCTL"]], "iommu": [[13, "term-IOMMU"]], "ipsec": [[13, "term-IPSec"]], "intel\u00ae qat": [[13, "term-Intel-QAT"]], "intel\u00ae speedstep\u00ae technology": [[13, "term-Intel-SpeedStep-Technology"]], "intel\u00ae vt": [[13, "term-Intel-VT"]], "kvm": [[13, "term-KVM"]], "lac": [[13, "term-LAC"]], "lkcf": [[13, "term-LKCF"]], "latency": [[13, "term-Latency"]], "mgf": [[13, "term-MGF"]], "msi": [[13, "term-MSI"]], "numa": [[13, "term-NUMA"]], "op data": [[13, "term-OP-Data"]], "os": [[13, "term-OS"]], "offload cost": [[13, "term-Offload-Cost"]], "pch": [[13, "term-PCH"]], "pci": [[13, "term-PCI"]], "pf": [[13, "term-PF"]], "pke": [[13, "term-PKE"]], "pmd": [[13, "term-PMD"]], "ras": [[13, "term-RAS"]], "rdk": [[13, "term-RDK"]], "rhel*": [[13, "term-RHEL"]], "rsa": [[13, "term-RSA"]], "sal": [[13, "term-SAL"]], "sata": [[13, "term-SATA"]], "sgl": [[13, "term-SGL"]], "sha": [[13, "term-SHA"]], "sol": [[13, "term-SOL"]], "spi": [[13, "term-SPI"]], "sr-iov": [[13, "term-SR-IOV"]], "ssc": [[13, "term-SSC"]], "ssl": [[13, "term-SSL"]], "sym": [[13, "term-SYM"]], "soc": [[13, "term-SoC"]], "tcg": [[13, "term-TCG"]], "tls": [[13, "term-TLS"]], "tpm": [[13, "term-TPM"]], "throughput": [[13, "term-Throughput"]], "udp": [[13, "term-UDP"]], "usdm": [[13, "term-USDM"]], "vf": [[13, "term-VF"]], "vm": [[13, "term-VM"]], "vpn": [[13, "term-VPN"]], "wan": [[13, "term-WAN"]], "siov": [[13, "term-sIOV"]]}}) \ No newline at end of file +Search.setIndex({docnames:["API_PG/QAT_compressionAPI","API_PG/QAT_cryptoAPI","API_PG/baseAPI","API_PG/index","API_PG/introduction","API_PG/revision_history","GSG/2.X/index","GSG/2.X/installation","GSG/2.X/introduction","GSG/2.X/revision_history","GSG/2.X/sampleapplications","GSG/2.X/systemconfiguration","Intro/introduction","Intro/terminology","PERF/application_tunning","PERF/design_guidelines","PERF/index","PERF/introduction","PERF/revision_history","PG/acceleration_driver","PG/apis_additional_apis_index","PG/apis_additional_availabilityapis","PG/apis_additional_cnvapis","PG/apis_additional_congestionapis","PG/apis_additional_dynamicfunctions","PG/apis_additional_heartbeatapis","PG/apis_additional_iommufunctions","PG/apis_additional_pollingapis","PG/apis_additional_pollingfunctions","PG/apis_additional_resetfunctions","PG/apis_additional_servicespecificapis","PG/apis_additional_threadlessapis","PG/apis_additional_userspacefunctions","PG/apis_additional_versioninformationfunctions","PG/apis_index","PG/apis_qat_apis","PG/architecture","PG/configuration_files_generalsection","PG/configuration_files_index","PG/configuration_files_logicalsection","PG/configuration_files_maxprocesscalculations","PG/configuration_files_multipleendpoints","PG/configuration_files_multipleprocesses","PG/configuration_files_overview","PG/configuration_files_samplefiles","PG/fused","PG/index","PG/infrastructure_debugability","PG/infrastructure_device_telemetry","PG/infrastructure_heartbeat","PG/infrastructure_index","PG/infrastructure_load_balancing","PG/infrastructure_memory_management","PG/infrastructure_modes_of_operation","PG/infrastructure_power_management","PG/infrastructure_queue_pairs","PG/infrastructure_ras","PG/infrastructure_ratelimiting","PG/infrastructure_reset","PG/infrastructure_service_instances","PG/infrastructure_user_queues","PG/introduction","PG/revision_history","PG/security","PG/services_compression_api","PG/services_cryptography_api","PG/services_index","PG/virtualization","RN/In-Tree/in_tree_firmware_RN","RN/In-Tree/index","RN/In-Tree/revision_history","RN/Linux/2.X/description","RN/Linux/2.X/index","RN/Linux/2.X/known_issues","RN/Linux/2.X/resolved_issues","RN/Linux/2.X/revision_history","RN/Linux/2.X/updates","RN/VMware/2.X/description","RN/VMware/2.X/index","RN/VMware/2.X/known_issues","RN/VMware/2.X/resolved_issues","RN/VMware/2.X/revision_history","RN/VMware/2.X/updates","RN/index","VIRT/index","VIRT/introduction","VIRT/oot_installation","VIRT/revision_history","VIRT/system_preparation","index","qat_general/collateral_list","qat_general/contact","qat_general/legal","qatlib/configuration","qatlib/description","qatlib/index","qatlib/install","qatlib/memlock","qatlib/qatengine","qatlib/qatzip","qatlib/requirements","qatlib/revision_history","qatlib/running_in_vm","qatlib/sample_code"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.todo":2,sphinx:56},filenames:["API_PG/QAT_compressionAPI.rst","API_PG/QAT_cryptoAPI.rst","API_PG/baseAPI.rst","API_PG/index.rst","API_PG/introduction.rst","API_PG/revision_history.rst","GSG/2.X/index.rst","GSG/2.X/installation.rst","GSG/2.X/introduction.rst","GSG/2.X/revision_history.rst","GSG/2.X/sampleapplications.rst","GSG/2.X/systemconfiguration.rst","Intro/introduction.rst","Intro/terminology.rst","PERF/application_tunning.rst","PERF/design_guidelines.rst","PERF/index.rst","PERF/introduction.rst","PERF/revision_history.rst","PG/acceleration_driver.rst","PG/apis_additional_apis_index.rst","PG/apis_additional_availabilityapis.rst","PG/apis_additional_cnvapis.rst","PG/apis_additional_congestionapis.rst","PG/apis_additional_dynamicfunctions.rst","PG/apis_additional_heartbeatapis.rst","PG/apis_additional_iommufunctions.rst","PG/apis_additional_pollingapis.rst","PG/apis_additional_pollingfunctions.rst","PG/apis_additional_resetfunctions.rst","PG/apis_additional_servicespecificapis.rst","PG/apis_additional_threadlessapis.rst","PG/apis_additional_userspacefunctions.rst","PG/apis_additional_versioninformationfunctions.rst","PG/apis_index.rst","PG/apis_qat_apis.rst","PG/architecture.rst","PG/configuration_files_generalsection.rst","PG/configuration_files_index.rst","PG/configuration_files_logicalsection.rst","PG/configuration_files_maxprocesscalculations.rst","PG/configuration_files_multipleendpoints.rst","PG/configuration_files_multipleprocesses.rst","PG/configuration_files_overview.rst","PG/configuration_files_samplefiles.rst","PG/fused.rst","PG/index.rst","PG/infrastructure_debugability.rst","PG/infrastructure_device_telemetry.rst","PG/infrastructure_heartbeat.rst","PG/infrastructure_index.rst","PG/infrastructure_load_balancing.rst","PG/infrastructure_memory_management.rst","PG/infrastructure_modes_of_operation.rst","PG/infrastructure_power_management.rst","PG/infrastructure_queue_pairs.rst","PG/infrastructure_ras.rst","PG/infrastructure_ratelimiting.rst","PG/infrastructure_reset.rst","PG/infrastructure_service_instances.rst","PG/infrastructure_user_queues.rst","PG/introduction.rst","PG/revision_history.rst","PG/security.rst","PG/services_compression_api.rst","PG/services_cryptography_api.rst","PG/services_index.rst","PG/virtualization.rst","RN/In-Tree/in_tree_firmware_RN.rst","RN/In-Tree/index.rst","RN/In-Tree/revision_history.rst","RN/Linux/2.X/description.rst","RN/Linux/2.X/index.rst","RN/Linux/2.X/known_issues.rst","RN/Linux/2.X/resolved_issues.rst","RN/Linux/2.X/revision_history.rst","RN/Linux/2.X/updates.rst","RN/VMware/2.X/description.rst","RN/VMware/2.X/index.rst","RN/VMware/2.X/known_issues.rst","RN/VMware/2.X/resolved_issues.rst","RN/VMware/2.X/revision_history.rst","RN/VMware/2.X/updates.rst","RN/index.rst","VIRT/index.rst","VIRT/introduction.rst","VIRT/oot_installation.rst","VIRT/revision_history.rst","VIRT/system_preparation.rst","index.rst","qat_general/collateral_list.rst","qat_general/contact.rst","qat_general/legal.rst","qatlib/configuration.rst","qatlib/description.rst","qatlib/index.rst","qatlib/install.rst","qatlib/memlock.rst","qatlib/qatengine.rst","qatlib/qatzip.rst","qatlib/requirements.rst","qatlib/revision_history.rst","qatlib/running_in_vm.rst","qatlib/sample_code.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,1,2,4,7,8,10,11,12,15,19,23,24,26,27,28,32,35,37,39,40,41,42,46,47,48,49,52,54,56,57,61,63,64,65,68,71,73,74,75,76,77,85,86,88,93,96,98,99,100,102],"00":[10,19,40,41,48,49,54,56,67,73,74,76,86,93,96,102],"0000":[10,40,41,48,56,67,74,76,86,96,102],"00000000":[74,76],"000000000b39412d":47,"000000003670dd45":47,"00000001":[74,76],"00002":96,"00003":71,"0001":[74,76,86],"0002":86,"001":[5,9,18,62,70,75,81,87,101],"002":[5,62,70,75,81,101],"003":[5,62,75,101],"004":[5,75],"005":[5,75],"006":[5,75],"007":[5,75],"008":[5,75],"009":[5,75],"009bb448aa161bb3fd4e94f0556296f2b268471947f3a9a5d1a158ad68ac26a5":77,"01":[26,49,96,102],"010":[5,75],"011":[5,75],"012":[5,75],"013":[5,75],"014":75,"015":75,"02":[26,75,102],"03":[41,68],"04":68,"0435":41,"05":96,"06":[19,26,41],"0660":7,"07":[68,102],"0770":7,"08":[70,96,101,102],"09":77,"0_ext_rel_bin_2":77,"0b":68,"0b40":41,"0bd9f7cae3cf72b12a63359a725ccbb76ddbd6831372695a9162144329800dd0":68,"0da5":86,"0m":96,"0x0":102,"0x00":[1,64,86,102],"0x0000":[86,102],"0x01":[73,76],"0x03":[73,76],"0x0435":7,"0x0443":7,"0x07":102,"0x08":102,"0x1":[74,76,86,102],"0x100000000":102,"0x184d2204":64,"0x19e2":7,"0x19e3":7,"0x2":102,"0x28465000":102,"0x28987000":102,"0x2995c000":102,"0x3":102,"0x37c8":7,"0x37c9":7,"0x4941":93,"0x4943":93,"0x562127eb3bc0":102,"0x6b":102,"0x6f54":7,"0x6f55":7,"0x70":102,"0x79":102,"0x7ff60be00000":102,"0x80000000":102,"0x8086":[7,93],"0xe9":86,"1":[0,1,2,4,7,10,14,19,22,24,26,32,35,37,39,40,41,42,48,49,52,57,59,63,64,65,67,68,71,73,74,75,76,77,81,86,93,96,98,99,100,102,103],"10":[19,41,48,52,64,68,74,76,77,93],"100":[64,67,99],"1000":37,"1024":[37,62,65],"10309599232":47,"10550771712":47,"10t17":102,"11":[19,48,64,68,74,76,88,96,101],"113":[73,76],"115":19,"116378":40,"116507":102,"12":[1,19,48,64,93,96,99,102],"1210160":102,"1264066":96,"1266135":96,"128":[10,35,37,40,51],"13":[1,19,48,64,93,96],"136":35,"14":[19,48,64,93],"140":63,"142606336":47,"15":[1,48,64,68,71,74,76,93,102],"1500":[17,68,73,76],"152502":102,"152513":102,"153297":102,"153308":102,"15843807":77,"15843807_22556595":77,"16":[1,10,19,24,40,48,51,64,67,71,86,88,93,99],"1619":65,"16384":[7,10,37,100],"1643873":96,"17":[19,48,64,68,96,102],"172032":100,"178436z":102,"18":[7,48,64,68,71,73,76],"18924":69,"19":[19,48,64,68,100],"193":7,"1930":86,"1950":[0,4],"1952":[0,4],"19732":90,"19733":90,"19734":90,"19735":90,"1993":68,"19e2":41,"1m":99,"1mbp":57,"1oem":77,"2":[0,1,2,4,7,8,10,11,12,14,19,26,35,37,39,40,41,42,46,47,48,52,55,57,59,61,63,64,65,68,71,75,77,81,86,88,93,98,99,102],"20":[10,48,60,64],"200":37,"200m":49,"2014":5,"2017":5,"2018":5,"2019":5,"2020":[5,75],"2021":[5,75],"2022":[5,75,102],"2023":[5,9,18,62,68,70,75,77,81,87,96,101],"20272":69,"20331648":102,"2048":[37,65],"20480":[7,10],"20819607552":102,"2097152":47,"21":48,"2100":17,"210062z":102,"212172":102,"212176":102,"212228":102,"22":[19,48],"220bfc5354b5":86,"224":65,"2246":[1,4],"23":[48,70,71,96,101],"23616":52,"23946":69,"24":[48,102],"248":35,"24970":69,"25":[19,48,57],"255":35,"25519":[71,77],"256":[0,1,5,35,37,47,52,65,93],"26":[48,96],"266800000":47,"27":48,"274e00000":47,"28":[19,48],"2869d2306c60dff528bb68c4b55c3c5aab96e43c6fcd858540235eb283118de9":68,"29":48,"2m":99,"2mb":52,"3":[0,1,4,7,10,11,14,19,26,35,41,42,48,49,52,64,65,67,68,71,74,76,77,98,99,102],"30":48,"300":49,"300m":49,"3072":65,"31":[28,48,64],"32":[0,1,10,24,37,39,40,48,51,63,86,93],"32768":[37,52],"32bit":64,"32kb":64,"32mb":52,"33":48,"330684":[71,77],"330685":[71,77],"330686":[71,77],"330689":68,"331776":7,"34":[19,48,96,98,99,103],"35":48,"36":[48,98],"36864":7,"37":48,"372":71,"37c8":41,"38":[19,48],"383041":40,"384":65,"38c":[1,4],"38d":[1,4],"39":48,"391976":40,"39335":69,"398881":40,"3bd7958f092eed553f3ae7a4543409d4ac34c0057e8fe609b6dabedd4f5a0077":68,"3de":[5,65],"3g":[35,65],"3i":77,"4":[0,4,5,7,10,11,14,15,19,35,37,41,42,48,55,64,67,68,71,77,81,86,93,99,100,102],"40":[41,48,75,102],"401408":10,"401xx":68,"4051":69,"406484":40,"4096":[7,37,65],"41":48,"41b45f936dc870299a00dffeeb1818774de1a3791d8fbb4365a5074a22f20017":71,"42":48,"43":48,"4346":[1,4],"43b1028941c0f5e44cd6c220f74d2becc6b3113d023c190e9a9012a56e8778f9":68,"44":48,"442844":5,"448":[71,77],"45":48,"45056":7,"45537":69,"46":[19,48],"47":[48,49],"48":[48,49,102],"4815":86,"488":102,"49":48,"4940":[41,86,88,100],"4941":[86,100,102],"4942":[41,86,100],"4943":[86,100,102],"4b7bd5930690accaf9dac6301ab7d91ea24bc1398c943ad7aa14c7a8118b63db":68,"4k":99,"4kb":60,"4s":75,"4th":[17,41,51,68,77],"4xxx":[10,40,41,48,67,73,74,76,77,93,100],"4xxx_dev":10,"4xxx_dev0":[7,40,86],"4xxx_dev1":19,"4xxx_devx":[37,54],"4xxxvf":67,"4xxxvf_dev":67,"4xxxvf_dev81":67,"5":[10,19,37,41,48,52,64,67,68,71,74,76,77,79,82,88,99,100],"50":[7,48,52,65,71,73,75,76,77,96,102],"5000":10,"500000":[96,97],"500m":49,"500mb":[96,97],"51":48,"512":[10,35,37,54,65,74,76,98],"512mb":[68,73,76],"52":48,"5246":4,"52bfda93819413807c7be56baf69f0b5f07a4be067ce9c69e61bf78bb395d1da":68,"53":48,"535":64,"54":48,"55":[35,48],"56":48,"56400":102,"57":48,"58":48,"59":48,"5kb":52,"5s":93,"6":[0,1,10,19,39,41,48,49,64,67,68,71,93,99,102],"60":[48,60],"61":48,"6101":4,"6106":1,"61440":10,"62":[19,48],"63":[10,48],"632506":[71,77,90],"632507":[71,77,90],"64":[7,14,15,22,35,37,39,40,51,60,64,86,93],"64b":14,"64byte":15,"64k":99,"65":64,"65528":35,"65535":35,"65536":37,"679fdae3":86,"6b":[10,40,41,48,54,56,67,74,76,86,102],"6f54":41,"7":[0,1,10,19,35,41,48,64,67,69,74,76,77,96,98],"70":[10,41,67,74,76,102],"700":77,"709196":90,"709199":[4,90],"709201":[4,90],"709209":90,"709210":90,"709495":90,"710057":90,"710059":90,"710060":90,"710071":90,"710074":90,"72":98,"74":19,"743912":[71,77,90],"75":[10,19,41,57,67,73,76,102],"758459":90,"765501":90,"765502":90,"766469":[71,77,90],"768798":90,"77659":69,"78854":47,"7a":[10,41,67],"7fb0c81c0000":[73,76],"7s":93,"7x":[37,40,65],"8":[0,2,10,14,35,37,41,48,51,55,64,65,68,71,74,76,77,86,93,96,98,102],"80":67,"8086":[41,86,88,100,102],"81":67,"8109":69,"8192":[37,65],"81c95fbaebfa5990c3c786c8c3e87426a33106f":52,"82":67,"83":[19,67,73,76],"832":96,"84":67,"85":[41,67],"86":67,"87":[41,67],"88":[41,67],"8896":86,"89":67,"8900":1,"8920":1,"8925":[7,51,68],"8955":[7,51,68],"89bd32da6761afb28f8d801289c6ada2d02d3ddfd0de6626111e710b8276871a":68,"8a":41,"8c":41,"8k":74,"8s":[75,96],"9":[10,19,35,41,48,64,67,68,71,74,76,93,96,98,99,102,103],"90":[4,67],"91":67,"93":64,"95":[19,64,77],"98":64,"99a1e70b24facc6e7834d7a72cbc82d113796af0d70af94f66f224fbc27c5340":68,"9xtotal_input_byt":35,"abstract":[59,93],"break":[0,1,48],"byte":[0,1,2,13,14,15,17,35,47,52,60,64,68,74,76,99],"case":[0,2,5,7,10,14,15,22,23,26,35,37,39,42,49,52,56,63,64,65,67,68,73,76,96,99],"catch":14,"char":[1,26,32],"class":[13,65],"const":[1,27,32],"default":[2,7,11,14,19,35,38,39,41,43,49,51,52,54,55,56,63,64,68,73,77,86,93,96,98,99,100,102,103],"do":[0,1,7,26,41,49,53,64,69,71,93],"enum":[22,27,64],"export":[7,10,96,98,99],"final":[0,1,2,63,73],"function":[0,1,2,4,5,6,7,8,13,14,15,19,20,21,22,23,25,27,30,31,35,38,39,41,42,53,55,57,61,63,64,65,67,68,77,79,82,86,92,93,98,100],"import":[0,35,41,48,54,63,64,67,68],"int":[26,48],"long":[15,63,65],"new":[1,15,49,52,60,64,68,73,76,86,91],"null":[0,1,2,49,64,65,96,97],"public":[4,5,8,12,13,17,19,49,55,59,61,66,67,71,77,91],"return":[0,1,2,7,10,15,21,22,23,24,25,26,27,28,29,30,31,32,33,35,36,41,46,48,49,53,57,64,65,73,86,96],"short":15,"static":[0,1,2,5,24,35,54,63,64,99,102],"super":[7,11],"switch":[7,10,13,15,49,53],"true":[1,48,52,54],"try":[1,19,48,100],"var":19,"void":[0,1,2,21,25,27,31,32,49],"while":[0,1,2,13,15,17,37,48,49,53,54,64,73,76,86,93],A:[0,1,2,4,7,8,10,17,19,23,24,28,33,35,36,39,41,48,49,51,52,53,63,64,68,74,76,93,96,99],AND:68,AS:68,AT:[68,71],ATS:[16,17,37],And:40,As:[0,1,7,14,15,24,42,47,49,63,64,73,76,91],At:[0,17,35,49,59,64,85,96,98,99],BE:68,BUT:68,BY:68,By:[10,14,16,37,40,48,63,64,86,93,96],FOR:68,For:[0,1,2,7,10,11,14,15,19,32,35,37,39,40,41,42,43,47,49,51,52,61,64,67,68,71,73,76,77,85,86,88,91,93,96,97,99,101,102],IF:68,IN:68,IS:68,If:[0,1,2,7,10,11,15,19,24,26,33,35,36,38,39,40,41,48,49,52,63,64,68,73,74,76,86,88,93,96,98,99,100,102,103],In:[0,2,7,8,10,12,13,14,15,17,22,26,35,37,39,41,42,49,51,52,56,60,61,63,64,65,67,68,73,76,83,86,89,93,98,102],It:[0,1,2,7,10,11,14,15,17,19,22,35,36,37,48,49,52,54,55,63,64,65,74,76,79,82,93,98,99,100],Its:[49,63,94],NO:[64,68],NOT:[49,68],No:[1,2,19,35,48,65,66,68,73,74,76,79,82,88,92,96],Not:[1,7,15,19,20,64,96],OF:68,ON:68,OR:68,Of:13,On:[1,7,15,48,64,68,96],One:[1,40,42,49,57,59,65,67,93],SUCH:68,Such:19,THE:68,TO:68,The:[0,1,2,4,7,8,10,11,12,13,14,15,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,47,48,49,50,52,54,56,57,61,63,64,65,67,68,71,73,74,76,77,85,86,91,92,93,94,96,97,98,99,100,102,103],Then:[1,7,10,14,32,41,63],There:[2,10,11,12,15,20,28,30,35,38,39,41,42,43,47,48,49,51,52,63,64,67,68,73,76,93,96,100],These:[0,1,2,10,12,15,17,22,23,24,25,26,28,30,31,35,42,64,65,71,74,76,77,85,88,92,96,102,103],To:[0,1,2,7,10,11,14,15,19,26,35,40,41,48,55,57,59,63,64,68,73,76,93,96,98,100,102,103],Will:64,With:[1,10,13,14,15,24,37,49,52,64,65,93,103],_:[49,64],__main__:48,__name__:48,_cpainstanceev:27,_data:48,_int:42,aaaa:[48,54,56],aad:[1,4],aadbuffs:1,aadleninbyt:1,abi:93,abil:[37,63],abl:[13,63,64,68],abort:64,about:[0,5,6,39,46,62,71,77,80,82],abov:[0,1,24,37,47,49,64,68,86,88,93,100],absolut:92,accel:[10,19,41,49,67,74,76],accelcomp:7,acceler:[2,4,6,8,12,13,14,15,17,24,26,28,31,35,36,37,40,41,42,46,47,48,49,52,53,56,61,63,65,66,67,77,85,93,94],accelerator_numb:24,accelid:[24,25,28,29,49],accept:[0,1,2,64,71],access:[0,2,7,8,11,12,13,15,17,19,20,26,35,36,39,40,42,48,52,61,63,64,65,71,77,93,94],access_lay:[1,4,10,23,24,26,28,30,32,33,71],accommod:[74,76],accompani:[71,77],accomplish:[49,86],accord:[1,7,64],accordingli:[17,36],account:[63,64,91],accumul:74,accumulatexxhash:64,accur:[35,96],achiev:[2,14,15,64,65],acpi:102,acquir:11,acronym:[8,17,61],across:[0,1,2,14,15,41,52,57,64,73,76],action:[7,8,12,17,19,49,57,61,63,64,85],activ:[11,21,39,49,54,69,73,76,79,82,92,96],actual:[1,2,52,68,77],ad:[0,1,5,7,11,62,64,65,70,88,98,100,101,102],add:[0,1,7,11,14,26,47,64,65,86,88,96],addit:[1,2,4,7,10,11,15,34,35,37,39,40,41,43,46,47,49,52,61,63,64,71,74,77,86,102],addition:[56,64],additionalauthdata:1,addr:[26,73,76,102],address:[0,1,2,11,15,17,19,26,35,37,39,47,52,55,57,59,63,67,68,71,73,77,86,88,98,102],addstr:48,adf:[13,19,33],adf_4xxx_hw_data:[73,76],adf_ctl:[7,29,43,44,48,49,71,74,76],adf_statu:48,adf_uio_proxi:[74,76],adi:[51,55,67,86],adjust:1,adleman:[4,13,94],adler32:[0,64],administr:[11,37,63,71,77],adopt:64,advanc:[1,4,13,17,24,64],advantag:[14,24,65],advers:7,advis:68,ae:[1,2,4,5,13,65],aead:13,aer_dev_correct:56,aer_dev_fat:56,aer_dev_uncorrect:56,aer_dev_x:56,aes256:10,aes_block_s:1,aes_ccm:1,aes_gcm:1,affect:[54,60,64,68,71,73,74,76,77],affin:[15,42],affinit:[39,43],after:[0,1,2,4,7,8,10,11,15,32,41,49,54,57,64,67,68,88,96],again:[1,19,32,49,96],against:[19,63,74,76,77],aggress:14,agnost:64,ago:96,agreement:63,aim:15,aka:[36,55],alen_encoding_s:1,alg_chaining_sampl:1,algchainord:1,algchainsampl:[73,76],algorithm:[0,1,2,4,10,13,15,64,71,73,74,76,77,96],align:[0,2,15,35,68],all:[0,1,2,4,7,10,11,14,15,19,20,23,24,25,26,28,30,32,35,36,37,38,41,47,49,51,52,57,63,64,65,67,68,71,73,74,76,77,85,88,92,93,96,99,100,102,103],alloc:[0,14,15,20,26,32,37,39,46,47,49,52,55,57,60,63,64,74,76,93,99,102],alloct:0,allow:[1,2,7,8,10,12,14,15,17,19,21,22,32,33,35,38,39,40,41,43,49,52,60,61,63,64,65,67,68,73,76,77,93,94,102],almost:63,alon:68,along:[12,37,40,64,96],alpha:75,alreadi:[0,11,14,28,86],also:[0,1,2,7,10,13,14,15,17,19,29,35,37,39,40,41,43,47,48,49,52,54,63,64,65,67,68,71,73,76,77,80,82,85,93,102],altern:[0,1,15,49,52,88,91],although:[39,100],alwai:[0,1,14,35,49,64,73,76],among:24,amort:[1,2,35],amount:[0,1,7,10,24,52,57,64,73,76,96,97],an:[0,1,2,7,10,11,13,14,15,17,19,21,22,26,32,33,35,37,39,41,42,43,48,52,54,55,56,59,63,64,65,67,68,71,73,74,76,77,91,93,100,102],analysi:63,ani:[0,1,2,14,17,21,23,24,28,31,32,39,41,48,49,54,63,64,68,71,73,76,88,91,96,100],anoth:[1,15,93],answer:[71,77],anti:71,anywher:64,api:[4,5,7,8,10,12,13,14,16,17,19,24,26,28,29,32,36,41,42,46,49,51,52,53,59,61,63,65,66,68,72,73,77,89,93,94,96,101],app:[73,76],appear:[42,69,79,82,102],append:[0,48,64],appendix:68,appli:[0,1,7,10,11,14,15,22,28,35,40,52,63,64,68,73,76,93,99,100],applianc:[63,64],applic:[0,1,2,4,6,8,11,12,13,15,16,17,21,22,23,24,31,35,36,37,38,39,41,46,51,52,53,56,59,61,66,68,71,77,93,96,97,99,102,103],approach:[14,15,17],appropri:[1,7,11,15,23,24,64,68,88,100],approv:68,approxim:[0,1],april:[5,18,75,87],apt:[96,99],ar:[0,1,2,4,7,8,10,11,12,13,14,15,17,19,20,21,22,23,24,25,26,27,28,30,32,34,35,37,39,40,41,42,43,44,47,48,49,51,52,53,54,55,56,57,60,61,63,64,65,66,67,69,71,73,77,79,82,85,86,88,91,92,93,94,96,98,99,100,102,103],arb:71,arbit:51,arbitr:51,arbitrari:63,arc4:[1,65],arch:102,archer:71,architect:17,architectur:[2,13,14,17,46,50,61,71,77],archiv:64,area:[0,1,13],arg:[7,88,96,100,102],argument:[1,7,19,88],aris:[15,35,68],around:[14,64],arrai:[0,2,52,63],arrang:[1,64],arriv:[15,63],articl:77,asb:[66,71,77],ascii:[39,47],asic:13,ask:63,aspect:[2,4,15,65],assembl:96,assign:[15,17,22,24,42,46,64,73,76,86,93,102],assist:[17,36,49,55,63],assoc:1,assocai:1,associ:[0,1,13,15,28,30,39,49,73,74,76],assum:[7,10,52,63,86,93,102,103],assumpt:[14,72,78],asym:[1,4,7,8,10,37,40,48,57,59,61,68,71,73,77,86,93,98],asymcallback:1,asymdeccallback:1,asymenccallback:1,asymetr:103,asymgeneratormultcallback:1,asymkeyexphase1callback:1,asymkeyexphase2callback:1,asymmetr:[1,2,4,7,8,10,17,23,30,35,37,40,57,59,61,65,68,74,76,86,94,98,101],asympointmultcallback:1,asympointverifycallback:1,asymsigncallback:1,asymverifycallback:1,async:[14,16],async_job:98,asynchron:[0,1,2,16,35,49,64,71,77,98],at_glob_devtlb_hit:48,at_glob_devtlb_miss:48,at_globa:[74,76],at_global1_par_st:[74,76],at_max_tlb_us:48,at_page_req_lat_acc_avg:48,at_par_st:[74,76],at_trans_lat_acc_avg:48,aten:52,ath0:48,ath1:48,ath2:48,ath3:48,ath_util:48,atom:[7,17,35,51,68,92],attach:[13,14,68,80,82,86,102],attack:46,attempt:[10,35,48,56,63,64,73,74,76],attr:7,attract:65,audienc:[3,17],august:75,autent:4,auth:[1,48],authencrypt:1,authent:[1,4,13,48,69,94],authkei:1,authkeylen:1,authkeyleninbyt:1,authmodesetupdata:1,author:65,auto:[66,71,77],autoconf:[96,98,99],autogen:[96,98,99],automak:[96,98,99],automat:[7,37,49,64,96],autoresetonerror:37,autoselectbesthuffmantre:[0,64],avail:[0,1,2,4,7,13,14,15,17,19,20,24,31,37,40,42,44,46,47,49,50,51,53,55,57,59,63,64,67,69,73,79,82,86,92,93,94,98,99,100,103],averag:[10,14,15,48],avoid:[2,16,35,37,49,52,59,63,79,82,96],aw:102,await:53,b0:1,b0_block_siz:1,b:[1,48,60,64,99],back:[1,2,14,17,23,24,35,49,52,60,64,73,76,80,82],background:49,backup:[64,92],backward:1,bad:19,balanc:[15,46,50,65],bandwidth:[15,48,52,57,63],bank:[15,28,40],bank_numb:28,bare:[15,55],base:[0,1,3,4,5,7,13,14,15,32,37,39,51,54,55,57,64,65,68,92,93,96,99],baseg1:1,baseg:1,bash:[49,93],bash_rematch:93,basi:[1,48,57,64,86],basic:[0,1,13,68,77,85],batch:64,bb:[48,54,56],bbuild:98,bdf:[4,8,13,48,49,54,56,61,67,73,76,86,93,102],becam:49,becaus:[0,1,15,19,32,36,49,52,63,64,68,86],becom:[15,35,49,65,73,76,79,82],been:[0,1,2,7,10,14,15,19,24,31,35,42,49,63,64,65,71,74,76,77,86,100,102],befor:[0,1,7,10,14,23,24,26,33,35,64,68,88,91,96],begin:[0,1,14,68],behav:[63,64],behavior:[1,2,7,35],behaviour:[14,64,69],being:[0,1,7,10,15,28,33,43,52,63,64,74,76],belong:41,below:[0,1,2,7,10,11,14,15,47,48,49,63,64,67,68,85,86,88,93,96,98,99,100,102,103],benchmark:95,benefit:[52,64,91],berkelei:[13,71],best:[0,1,2,14,16,17,37,66,71,77,93,100],beta:75,better:[0,36],between:[0,1,2,13,14,15,17,24,36,41,49,55,60,63,65],beyond:63,bfinal:64,big:[68,73,76],bigger:64,bill:[4,8,13,61,71],bin:[7,48,49,68,93,100],binari:[7,63,64,68],bind:93,bio:[6,13,56,73,76,84,85,95],bit:[1,4,22,47,60,63,64,73,76,102],bitmask:39,bkc:[71,100],bkm:16,block:[0,1,2,4,7,8,13,15,35,36,50,53,61,66,74,76,99],block_siz:99,bloom:64,bmsm:13,bnp:64,bold:[8,12,17,61],bom:[4,8,13,61,71],bone:15,boost:11,boot:[7,11,52,68,95],bootload:[4,8,13,61],both:[0,1,2,14,15,17,35,36,37,39,41,42,49,64,85,86,88,93,98,99,100,102],bottleneck:[14,16],bottom:[1,2],bound:[100,102],boundari:[14,15,63,65,71,77],box:[65,71],brand:92,brief:17,bring:[7,19],broad:[0,1,13],broken:36,brought:[31,74,76],bsd:[7,13,71],bsf:[10,19,41,48,49,67,74,76,102],bt:13,bu:[4,8,13,48,49,56,57,61,63,64,67,86,93,102],budget:64,buff:26,buff_phys_addr:26,buffer:[0,1,5,10,14,16,19,26,35,37,55,56,60,63,64,69,99],bufferinterarrai:0,bufferlenfordata:0,bufferlength:0,bufferlentocompress:0,bufferlist:[0,68],bufferlistmems:[0,1],buffermetas:[0,1],buffernum:0,bufferphysaddr:[0,2,52],buffers:[0,1],buffmetas:0,bug:[63,101],build:[0,1,7,8,10,11,14,35,48,50,57,71,86,91,96,98,99,103],build_fil:7,build_system:[7,71],builder:96,built:[57,65,91,96,98,99,103],bundl:[51,59],burst:14,bursti:15,busi:[14,15,19,23,68],button:[8,12,17,61],bw_in:48,bw_out:48,bypass:7,byte_alignment_64:1,c3000:[7,17,51,68],c3xxx:49,c3xxx_dev0:7,c620:17,c62x:[7,24,41,51,68],c6xx:[19,41],c6xx_dev0:7,c6xxx_dev0:63,c:[7,11,13,14,17,19,47,48,68,73,76,96,98,99],cach:[52,65],cage:63,calcswdigest:10,calcul:[0,1,35,38,39,46,64,73,74,76],calgari:71,call:[0,1,2,8,14,15,19,21,22,24,28,29,30,32,33,35,36,39,41,42,49,52,63,64,65,73,74,76,93,96],callback:[0,1,2,15,27,28,30,35,36,49,53,64],calle:2,caller:2,calswdigest:0,can:[0,1,2,4,7,10,11,14,15,17,19,20,22,23,24,26,29,31,32,35,36,37,39,40,41,42,47,48,49,51,52,53,54,55,56,59,60,63,64,65,66,67,68,71,77,79,82,86,88,92,93,96,98,99,100,102,103],candid:1,cannot:[0,1,7,14,15,24,39,49,63,67,68,74,102],canterburi:71,cap:[0,2,57],capabl:[0,2,7,15,19,49,52,57,64,65,68,88,93],capac:[15,57],capit:64,card:51,care:[40,100],carri:[0,1,63],carv:0,casual:[7,96],cat:[47,48,49,54,56,88,93,96,100,102],categor:[0,1,56],categori:34,caus:[15,49,56,63,64,68,73,74,76,79,82,92,102],caution:39,cb:1,cbc:[1,4,8,10,13,61,65],cbc_mac:65,cc:[48,54,56],ccm:[2,4,13,65,73,76],ccm_sampl:[1,73,76],cd:[7,10,68,96,98,99,100,103],ceas:[74,76],ceil:35,center:[63,64,65],cento:[11,71,96,98,99,103],central:65,certain:[1,14,65,69,74,76],certif:7,cfg:[88,100,102],cfg_servic:93,cgroup:96,cha:65,chacha20:98,chacha:65,chain:[3,4,5,8,10,13,37,61,68],chaining_sampl:0,chainopdata:0,chainsessiondata:0,chanc:15,chang:[1,2,7,11,15,24,40,54,63,64,67,68,71,73,77,79,82,86,96,100,102],channel:[2,14,63,91],chapter:[14,15,63],charact:39,character:[15,92],characterist:15,check:[0,1,2,4,7,10,15,20,25,26,39,41,49,64,67,68,71,73,76,77,88,96],check_output:48,checkout:[91,98],checksum:[0,2,35,66,68,75,77],checksumadler32:0,checksumcrc32:[0,2],chgrp:7,child:[37,93],chip:[13,37],chipset:[1,7,17,41,51,63,68,71],chkconfig:7,chmod:7,choic:[15,17],choos:64,chose:36,chosen:[1,15],chunk:64,cinsthandl:0,cipher:[4,5,8,13,14,15,37,48,61,68],cipher_sampl:1,cipheralgorithm:[1,73,76],cipherdirect:1,cipherkei:1,cipherkeylen:1,cipherkeyleninbyt:1,cipherperformop:1,ciphersetupdata:1,ciphertext:1,circuit:13,circular:55,circumst:49,citi:71,claim:92,clarif:91,classifi:[34,63],clc:69,clean:[0,1,7,96,98,99],cleanup:49,clear:[0,48,73,76],clearli:2,cleartext:64,cli:13,client:[0,1,2,52,63,64,65,73,76],client_random:1,client_write_kei:1,clock:[54,68,73,76,79,82],clone:[96,98,99],close:[32,102],cloud:65,cluster:[37,93],cmac:65,cmake:98,cmdline:[88,100,102],cnv:[0,7,13,20,64,71,77],cnv_error:[47,64],cnvnr:[13,69,71,77],co:[41,98,102],coalesc:[15,43],coars:64,code:[0,1,4,5,6,7,8,12,15,17,21,22,23,24,25,26,27,28,29,30,31,32,33,35,39,46,48,49,52,61,66,68,86,92,94,95,96,98,99],codereadi:96,coexist:7,collabor:64,collater:77,collect:[7,12,48,65,96],columbia:13,column:48,com:[61,68,91,94,96,98,99,101],combin:[0,1,47,65,68,93],come:7,comfort:14,comm:[74,76],command:[7,8,10,11,12,13,17,19,47,49,52,60,61,67,68,86,88,96,97,98,99,100,102,103],comment:[8,63],commerci:92,common:[0,1,2,4,12,14,39,63,64,65,68,71,91,95,99],commonli:65,commun:[1,7,17,48,49,51,55,63,68,91,100],comp:[48,99],comp_algorithm:99,comp_lvl:99,compar:[0,1,15,35,57,64],comparison:64,compat:[1,7,71,77,79,82],compil:[8,35,96,99,103],complement:64,complet:[0,1,2,7,10,11,13,14,15,17,24,36,49,60,64,67,68,73,74,76,86,96,103],completion_init:1,completion_struct:1,completion_wait:1,complevel:[0,64],complex:63,complianc:63,compliant:0,complimentari:65,compon:[0,2,4,8,13,19,33,52,54,61,63,71,77,92],compos:68,composit:67,compperformop:[74,76],compres:66,compress:[1,2,3,4,5,7,8,10,13,14,15,17,19,20,24,27,28,36,37,40,43,46,47,48,49,52,55,57,59,61,63,65,66,69,71,73,77,86,90,94,96,99,103],compress_buf_typ:99,compressandverifi:[0,47,64],compressandverifyandrecov:[0,64],compressbound:[64,101],compressed_file_filenam:68,compressor:64,compromis:63,comptyp:[0,64],comput:[1,13,64,65],concentr:63,concept:[0,59,64],concurr:[14,16,43,102],condit:[0,35,49,63,68,74,76,79,82],conduct:[35,63],conf:[7,10,11,19,24,37,40,49,54,63,67,86,96,97],conf_fil:[43,44],confidenti:[1,4,5,63,65],config:[1,2,7,8,11,19,39,40,86,98,100,102],config_arch_supports_optimized_inlin:7,config_crypto_dev_qat:100,config_crypto_dev_qat_4xxx:100,config_crypto_dev_qat_c3xxx:100,config_crypto_dev_qat_c3xxxvf:100,config_crypto_dev_qat_c62x:100,config_crypto_dev_qat_c62xvf:100,config_crypto_dev_qat_dh895xcc:100,config_crypto_dev_qat_dh895xccvf:100,config_guess:8,configur:[0,6,8,13,15,19,20,24,28,31,36,39,46,47,48,52,55,57,60,64,67,68,71,77,84,85,92,95,101,103],confirm:102,conflict:[79,82],conform:63,confus:[7,64,96],congest:20,conjunct:[28,73,76],connect:[19,31,63,65],consequ:[19,28,64],consequenti:68,conserv:[13,17],consid:[0,11,15,35,38,42,49,51,63,64,71,77],consider:[15,46,66,101],consist:[2,49,52,57,63,64],consol:[19,99],constant:49,constantli:14,constitut:1,constrain:0,constraint:[1,2,15,19,28,39,74,76],construct:[1,60,63],consult:[68,100],consum:[0,1,2,7,14,15,35,48,54,60,64,69],consumpt:[68,73,76,79,82],contact:[11,68,89],contain:[0,1,2,4,8,10,11,28,32,35,37,39,43,47,52,59,63,64,65,68,71,77,92,93,96,100,102],content:[4,5,35,49,59,64,86],context:[0,1,2,14,15,17,26,41,49,52,53],contigu:[0,1,2,15,19,35,37,52],continu:[1,15,24,49,64,93],contract:68,contrast:[19,24],contributor:68,contriv:63,control:[2,13,14,15,17,46,49,60,63,65,68,71,77],control_file_nam:48,conveni:[1,8,12,17,61],convent:[3,4,6,16,46],convert:[1,36],cool:64,coordin:1,copi:[0,1,7,16,19,44,52,63,64,103],copymultiflatbuffertobuff:0,copyright:68,core:[11,15,42,43,59,63,102],coreaffin:[15,39],corpor:[11,41,65,68,92,102],corpu:71,correct:[1,7,15,35,56,64,88],correctli:[1,10,11,39,64,68,73,76,96],correspond:[11,15,37,42,52,59,60,63,64,77],corrupt:[64,68,73,74,76,79,82],cost:[0,1,2,13,14,15,17,35,52,64,65,92],could:[1,2,7,15,49,52,63,64,71,74,76,79,82,100],couldn:[79,82],count:[10,23,48,56,64,99],counter:[1,4,7,13,35,48,49,56,64,73,74,76,79,82],cours:[19,64],cover:[0,12,61,63],cp:[96,97,100],cpa16u:[1,2],cpa32u:[0,1,23,24,25,28,29,30,33,49,64],cpa64u:[22,26],cpa8:22,cpa8u:[0,1,22],cpa:[2,19,52,102],cpa_bitmap_bit_test:0,cpa_cy_common:1,cpa_cy_dh:1,cpa_cy_drbg:1,cpa_cy_dsa:1,cpa_cy_ec:1,cpa_cy_ecdh:1,cpa_cy_ecdsa:1,cpa_cy_ecsm2:[1,5],cpa_cy_hkdf_key_extract_expand:1,cpa_cy_hkdf_key_extract_expand_label:1,cpa_cy_hkdf_sublabel_iv:1,cpa_cy_hkdf_sublabel_kei:1,cpa_cy_hkdf_tls_aes_128_gcm_sha256:1,cpa_cy_im:1,cpa_cy_kei:1,cpa_cy_key_tls_op_key_material_der:1,cpa_cy_key_tls_op_user_defin:1,cpa_cy_ln:1,cpa_cy_nrbg:1,cpa_cy_prim:1,cpa_cy_priority_high:1,cpa_cy_priority_norm:[0,1],cpa_cy_rsa:1,cpa_cy_sym:[1,2],cpa_cy_sym_alg_chain_order_cipher_then_hash:1,cpa_cy_sym_alg_chain_order_hash_then_ciph:1,cpa_cy_sym_ccm_set_aad:1,cpa_cy_sym_ccm_set_nonc:1,cpa_cy_sym_cipher_aes_cbc:1,cpa_cy_sym_cipher_aes_ccm:1,cpa_cy_sym_cipher_aes_gcm:1,cpa_cy_sym_cipher_direction_decrypt:1,cpa_cy_sym_cipher_direction_encrypt:1,cpa_cy_sym_cipher_kasumi_f8:1,cpa_cy_sym_dp:[2,35],cpa_cy_sym_hash_aes_ccm:1,cpa_cy_sym_hash_aes_gcm:1,cpa_cy_sym_hash_kasumi_f9:1,cpa_cy_sym_hash_mode_auth:1,cpa_cy_sym_hash_mode_plain:[0,1],cpa_cy_sym_hash_sha1:1,cpa_cy_sym_hash_sha256:[0,1],cpa_cy_sym_op_algorithm_chain:1,cpa_cy_sym_op_ciph:1,cpa_cy_sym_op_hash:[0,1],cpa_cy_sym_packet_type_ful:[0,1],cpa_cy_sym_packet_type_last_parti:1,cpa_cy_sym_packet_type_parti:[1,35],cpa_cy_sym_packet_type_partial_last:1,cpa_cy_sym_sesupd_auth_kei:1,cpa_cy_sym_sesupd_cipher_kei:1,cpa_dc:[0,2,22,64],cpa_dc_adler32:0,cpa_dc_api_version_num_major:0,cpa_dc_api_version_num_minor:0,cpa_dc_asb_dis:64,cpa_dc_asb_en:64,cpa_dc_asb_static_dynam:64,cpa_dc_asb_uncomp_static_dynamic_with_no_hdr:[35,64],cpa_dc_asb_uncomp_static_dynamic_with_stored_hdr:[35,64],cpa_dc_bad_dist_cod:64,cpa_dc_bad_litlen_cod:64,cpa_dc_bad_stored_block_len:64,cpa_dc_chain_compress_decompress:0,cpa_dc_chain_hash_then_compress:0,cpa_dc_chain_symmetric_crypto:0,cpa_dc_crc32:0,cpa_dc_crc_integ_err:64,cpa_dc_defl:0,cpa_dc_dir_combin:[0,64],cpa_dc_dir_compress:0,cpa_dc_dp:[0,2,35,52],cpa_dc_empty_dym_blk:64,cpa_dc_ep_hardwar:64,cpa_dc_ep_hardware_err:64,cpa_dc_fatalerr:64,cpa_dc_flush_fin:[0,64],cpa_dc_flush_ful:[0,64],cpa_dc_flush_non:64,cpa_dc_flush_sync:[0,64],cpa_dc_ht_full_dynam:[0,64],cpa_dc_ht_stat:0,cpa_dc_incomplete_code_len:64,cpa_dc_incomplete_file_err:64,cpa_dc_integ_err:64,cpa_dc_invalid_block_typ:64,cpa_dc_invalid_cod:64,cpa_dc_invalid_dist:64,cpa_dc_l10:64,cpa_dc_l11:64,cpa_dc_l12:64,cpa_dc_l1:[0,64],cpa_dc_l2:64,cpa_dc_l3:64,cpa_dc_l4:[0,64],cpa_dc_l5:64,cpa_dc_l6:64,cpa_dc_l7:64,cpa_dc_l8:64,cpa_dc_l9:64,cpa_dc_lz4:64,cpa_dc_lz4_block_overflow_err:64,cpa_dc_lz4_distance_out_of_range_err:64,cpa_dc_lz4_max_block_size_exceed:64,cpa_dc_lz4_token_is_zero_err:64,cpa_dc_max_resubmiterr:64,cpa_dc_more_repeat:64,cpa_dc_ok:[0,64],cpa_dc_overflow:[0,64,74,76],cpa_dc_repeated_len:64,cpa_dc_softerr:64,cpa_dc_stat:[0,64],cpa_dc_stateless:0,cpa_dc_too_many_cod:64,cpa_dc_verify_err:64,cpa_dc_verify_error:[22,73,76],cpa_dc_wdog_timer_:[74,76],cpa_dc_wdog_timer_err:64,cpa_dp_buflist:0,cpa_fals:[0,1,21,35,64],cpa_instance_event_fatal_error:27,cpa_instance_event_restart:[27,49],cpa_instance_handle_singl:35,cpa_sample_cod:[10,86,96,97,103],cpa_status_fail:[0,1,2,19,22,23,24,25,26,27,28,29,30,31,32,33,49],cpa_status_fat:19,cpa_status_invalid_param:[19,23,27,30,33,35],cpa_status_resourc:[19,33],cpa_status_restart:[19,30,49],cpa_status_retri:[19,28,30,35,49],cpa_status_success:[0,1,2,19,22,23,24,25,26,27,28,29,30,31,32,33],cpa_status_unsupport:[19,27,65],cpa_sy_sym_dp:1,cpa_sym_dp:[2,52],cpa_tru:[0,1,15,21,35,64],cpaboolean:[1,21,64],cpabufferlist:[0,1,2,52,64],cpacrcdata:64,cpacybufferlistgetmetas:[1,2,52],cpacydhkeygenphase2secret:1,cpacydhphase1keygenopdata:1,cpacyecpointmultiplycbfunc:1,cpacyecpointverifycbfunc:1,cpacyecsm2decrypt:1,cpacyecsm2decryptopdata:1,cpacyecsm2decryptoutputdata:1,cpacyecsm2encrypt:1,cpacyecsm2encryptopdata:1,cpacyecsm2encryptoutputdata:1,cpacyecsm2generatormultipli:1,cpacyecsm2generatormultiplyopdata:1,cpacyecsm2keyexoutputdata:1,cpacyecsm2keyexphase1:1,cpacyecsm2keyexphase1opdata:1,cpacyecsm2keyexphase2:1,cpacyecsm2keyexphase2opdata:1,cpacyecsm2pointmultipli:1,cpacyecsm2pointmultiplyopdata:1,cpacyecsm2pointverifi:1,cpacyecsm2pointverifyopdata:1,cpacyecsm2sign:1,cpacyecsm2signcbfunc:1,cpacyecsm2signopdata:1,cpacyecsm2verifi:1,cpacyecsm2verifycbfunc:1,cpacyecsm2verifyopdata:1,cpacygenflatbufcbfunc:1,cpacygetinst:[1,35,41],cpacygetnuminst:[1,35,41],cpacyinstancegetinfo2:[39,41],cpacyinstancenotificationcbfunc:27,cpacyinstancesetnotificationcb:49,cpacykeygenhkdfopdata:1,cpacykeygentls3:1,cpacykeygentlsopsdata:5,cpacykeyhkdfciphersuit:1,cpacyprimetest:1,cpacyprimetestcbfunc:1,cpacysetaddresstransl:[1,19],cpacystartinst:[1,73,76],cpacystopinst:[73,76],cpacysymdpenqueueop:[1,2,15,35],cpacysymdpenqueueopbatch:[1,2,15],cpacysymdpinitsess:[1,73,76],cpacysymdpopdata:[2,35],cpacysymdpperformopnow:[1,2,35],cpacysymdpregcbfunc:1,cpacysymdpremovesess:1,cpacysymdpsessionctxgetdynamics:1,cpacysymdpsessionctxgets:[1,73,76],cpacysyminitsess:[1,65],cpacysymop:1,cpacysympackettyp:35,cpacysymperformop:1,cpacysymremovesess:1,cpacysymsessionctxgetdynamics:1,cpacysymsessionctxgets:[1,73,76],cpacysymsessioninus:1,cpacysymsessionsetupdata:1,cpacysymupdatesess:1,cpadcautoselectbest:64,cpadcbufferlistgetmetas:[0,2,52],cpadccallbackfn:64,cpadcchaingetsessions:0,cpadcchaininitsess:0,cpadcchainremovesess:0,cpadcchecksum:64,cpadccomplvl:64,cpadccomplz4blockmaxs:64,cpadccompminmatch:64,cpadccompressdata2:64,cpadccompressdata:[0,64],cpadccomptyp:64,cpadccompwindows:64,cpadcdecompressdata2:[0,64],cpadcdecompressdata:[0,64],cpadcdeflatecompressbound:64,cpadcdpenqueueop:[0,2,15,35,64],cpadcdpenqueueopbatch:[2,15,64],cpadcdpinitsess:0,cpadcdpopdata:[0,2,64],cpadcdpperformopnow:[2,35],cpadcdpregcbfunc:0,cpadcdpremovesess:0,cpadcfiletyp:35,cpadcgeneratefoot:[0,5,64],cpadcgeneratehead:[0,64],cpadcgetinst:[2,35],cpadcgetnuminst:[2,35],cpadcgetnumintermediatebuff:[0,64],cpadcgetsessions:0,cpadcgetstat:64,cpadchufftyp:64,cpadcinitsess:0,cpadcinstancecapabiliti:64,cpadcinstancenotificationcbfunc:27,cpadcinstancesetnotificationcb:49,cpadclz4compressbound:64,cpadclz4scompressbound:64,cpadcnscompressdata:64,cpadcnsdecompressdata:64,cpadcnsgeneratefoot:64,cpadcnsgeneratehead:64,cpadcnssetupdata:64,cpadcopdata:64,cpadcquerycap:[0,2,64],cpadcremovesess:[0,64],cpadcreqstatu:[22,35,64],cpadcresetxxhashst:64,cpadcrqresult:[0,35,64,74,76],cpadcsessiondir:64,cpadcsessionhandl:64,cpadcsessionsetupdata:[35,74,76],cpadcsessionst:64,cpadcsetaddresstransl:[0,2,19],cpadcstartinst:[0,2],cpadcstat:64,cpaflatbuff:[0,1,2,52],cpainstanceev:27,cpainstancehandl:[1,2,23,24,27,28,30,35],cpainstanceinfo2:39,cpaintegritycrc64b:64,cpaintegritycrc:64,cpaphysbufferlist:[0,2,52],cpaphysflatbuff:[0,2,52],cpastatu:[1,2,22,23,24,25,26,27,28,29,30,31,32,33],cph0:48,cph1:48,cph2:48,cph3:48,cph_util:48,cpk:13,cpm2:[68,73,76],cpm:[4,11,60,64,68],cpp:49,cpu32u:64,cpu:[1,13,14,15,17,49,51,52,53,55,64,65,94,96,100],cpuset:102,craft:63,crb:96,crc32:[0,2,64,74,76],crc64:64,crc:[0,96],creat:[0,2,4,7,10,11,15,23,24,32,39,40,42,49,57,63,64,74,76,86,91,96,102],creation:[0,49,77],criteria:1,critic:[11,15,65],crypto:[0,1,2,7,10,13,14,16,17,35,37,39,40,42,52,55,57,59,64,65,68,71,73,74,76,77,96,101,103],crypto_mb:98,cryptograph:[0,2,3,4,13,14,15,17,19,24,27,28,37,46,59,61,64,66,71,77,90],cryptographi:[0,2,3,4,7,8,13,15,19,37,40,41,43,59,61,66,94,96],cryptostartsrcoffsetinbyt:1,csr:[13,55],ctl:19,ctr0:1,ctr:65,ctrl:[74,76],ctx_size:0,current:[0,1,13,17,19,22,23,24,48,49,61,63,64,69,71,73,74,76,77,79,82,86,92,94,95,98,99,100,102],curs:48,curv:[4,13,17,65,71,77,94],custom1:37,custom:[5,7,38,49,63,71,77,91,95,96],cy0coreaffin:42,cy0ispol:42,cy0nam:[41,42],cy1coreaffin:42,cy1ispol:42,cy1nam:42,cy2coreaffin:42,cy2ispol:42,cy2nam:42,cy3coreaffin:42,cy3ispol:42,cy3nam:42,cy:[4,8,13,24,28,37,40,41,42,61,102],cyasymloop:10,cycl:[1,2,10,13,14,15,17,48,49,52,64,65],cyinsthandl:1,cynumbuff:10,cynumconcurrentasymrequest:37,cynumconcurrentsymrequest:37,cysessiondata:0,cysymloop:10,cysymopdata:0,cyxcoreaffin:39,cyxispol:[28,39],cyxnam:39,cyxnumconcurrentasymrequest:15,cyxnumconcurrentsymrequest:15,d15xx_dev0:7,d:[0,1,7,17,19,47,48,51,52,54,56,73,76,86,88,99,102],d_csr:31,da:1,daemon:49,damag:68,data:[3,4,5,7,8,10,13,14,16,17,19,23,24,26,27,28,30,36,37,40,41,43,46,47,48,49,52,55,59,61,63,65,66,67,68,71,74,77,86,93,94,96,99,103],data_fmt:99,datacompress:[0,2],datagram:[13,65],dataleninbyt:[0,1,2,52,64],datauncompress:64,date:[1,5,9,18,62,68,70,75,77,81,87,92,101],db:1,dc:[0,2,4,7,8,10,13,24,28,35,37,40,41,42,48,61,64,68,86,93,96,99,101,102],dc_dp_sampl:[0,74,76],dc_integrity_crc_fw_t:[74,76],dc_me_active_thd_mask:[73,76],dc_stateless_multi_op_sampl:[74,76],dc_stateless_sampl:[74,76],dcc:[68,93],dccallback:0,dcchainbuildbufferlist:0,dcchaincapinfo:0,dccheckdestinationdata:[74,76],dccompression_processcallback:[74,76],dcdpcallback:0,dcerror:22,dcinstanc:0,dcinsthandl:[0,2],dcintermediatebuffersizeinkb:37,dcmake_install_prefix:98,dcnumconcurrentrequest:37,dcopdata:0,dcresult:0,dcsessiondata:0,dcxcoreaffin:39,dcxispol:[28,39],dcxname:39,dcxnumconcurrentrequest:15,de:[2,15,64,65,99],deal:[52,65],debian:[11,96,99],debug:[0,1,7,36,46,49,50,54,64,74,76,90,96],decapsul:1,decemb:5,decid:[14,49],decis:15,decod:64,decomp:[48,99],decompil:68,decompress:[0,2,5,7,19,22,35,37,48,66,68,71,77],decompress_util:48,decompression0:48,decompression1:48,decompression2:48,decompressor:64,decrypt:[1,2,14,15,65],dedic:[37,60,93],def:48,defect:[63,92],defin:[0,1,2,7,19,22,24,32,35,37,39,41,48,52,63,64,65,67,71,77,88],definit:[2,23,24,26,28,30,32,33,35],deflat:[0,2,65,71,77,99],deflate_4b:99,deflatewindows:0,degrad:[15,37,64,93],deiniti:15,delai:[15,37,54,73,76,79,82],delet:[7,57,63],delete_al:57,delimit:37,deliveri:[15,64,65],demand:24,demo:[6,84],demonstr:[0,1,4,7,10,48,57,86,88],deni:[19,63],denot:[37,39],depend:[0,1,2,14,15,21,35,37,39,40,43,44,48,49,51,52,54,60,64,73,76,77,79,82,86,96,97,98,99,100],depfil:7,deploi:85,deploy:[7,11,46,65,71,77,89,90],deprec:[1,42,64,96],depth:[15,59],depth_16:64,depth_1:64,depth_4:64,depth_8:64,der:7,deriv:[1,4,65,68],describ:[0,1,2,4,7,10,11,14,17,32,35,37,38,39,40,42,49,50,52,63,64,65,80,82,85,86,92,94,102],descript:[0,1,4,5,7,8,9,10,14,17,18,19,37,39,47,54,56,61,62,64,68,70,72,73,74,75,76,78,79,80,81,82,83,87,93,95,96,101],descriptor:[19,36,48,55,60,64],design:[10,13,14,16,17,37,53,63,92,93],desir:[10,22,67],dest:[1,64],destbuff:0,destbufferlen:0,destin:[0,1,2,5,35,63,64,68,73],detach:86,detail:[0,1,2,7,10,11,14,15,17,19,32,34,35,36,37,38,43,47,49,52,61,64,65,66,67,68,71,74,75,76,85,86,92,98,100,102],detect:[13,19,49,64,69],determin:[0,1,15,28,32,37,39,40,41,42,63,64,67,74,76],determinist:[1,4,93],dettach:86,dev0:[41,42],dev1:[7,41,42,86],dev2:7,dev:[7,11,49,63,74,76,93,96,97,99,102],dev_cfg:47,devel:[11,96,98,99],develop:[2,4,11,12,13,17,49,63,64,65,92,99],deviat:[2,92],devic:[0,1,4,7,8,10,13,14,16,17,20,23,24,25,26,28,30,31,32,33,35,37,39,40,41,42,43,46,47,51,52,54,55,56,57,59,60,61,63,64,65,69,71,73,77,79,80,82,85,86,88,93,94,95,96,102],device_data:48,device_id:49,devid:33,devpath:7,devpkgid:24,devtlb:48,df9d88b8b453a228076ddd2eb1332045eca654854b3e1bf6cce0edac24854c7c:68,dh895xcc_dev0:7,dh:[1,94],diagram:14,dictionari:[63,64],did:[13,64,93],differ:[1,2,14,15,43,48,51,52,63,65,67,71,86,98,102],diffi:[3,4,10,13,17,65,94],difficult:53,diffie_hellman_sampl:1,digest:[0,1],digest_length:1,digestappend:1,digestisappend:[0,1],digestresult:1,digestresultleninbyt:[0,1],digestverifi:1,digit:[4,13,65,94],dimens:67,dimm:[14,64],direct:[0,1,13,15,46,52,63,64,68,71,73,74,76,77,99,100],directli:[14,19,52,68,77,88,96],directori:[4,7,8,10,11,12,17,19,35,43,49,61,63,68,71,86,96,98,99,100],disabl:[1,6,7,15,37,39,48,52,54,64,67,86,96,99],disable_event_driven_polling_mod:98,disable_qat_offload:98,disable_stat:7,disadvantag:[24,65],disassembl:68,discard:64,disclaim:[68,89],discov:[0,1,49],discoveri:[0,1,35],discrep:64,discuss:[15,49,63],disk:[11,63,64,65,71,77],dispatch:[2,14,15,28,30,35,60],displai:[7,41,47,48,49,73,76,86,95,102],dispos:15,distanc:64,distclean:96,distinguish:[2,41,86],distribut:[11,13,24,68,71,96,98,99,100,102,103],distro:[68,96,99],divid:17,divisor:[1,4],dma:[0,13,19,26,35,68,73,76,102],dma_entri:102,dmaabl:[2,15,52],dmaaccess:2,dmabl:71,dmar:[26,73,76,88,102],dmesg:[40,73,74,76,88,102],dnf:[88,96,98,99,103],do_crypto:1,do_userstart:[74,76],doc:93,document:[0,1,2,3,5,6,7,9,11,14,15,17,18,22,27,46,62,64,68,70,72,75,78,80,81,82,85,87,91,93,98,101,102,103],doe:[0,1,2,7,14,15,19,32,39,41,42,49,60,63,64,65,68,73,79,82,96,100],doesn:[69,86],domain:[26,39,40,41,48,54,56,57,63,71,74,76,86,102],don:[14,40,99],done:[0,1,2,7,49,52,63,64,86,93,96,100,102],down:[0,1,19,36,48,63,74,76],download:[7,48,64,69,98,100],downtim:49,dp:[73,76],dpdk:13,dpm:[71,77],dracut:100,dram:[13,35,55,63,71,73,76,77],dramat:64,drbg:[4,7],drbg_poll_and_wait:7,drhd:[26,102],drive:[13,15,17],driven:53,driver:[2,7,8,10,11,12,13,14,15,17,23,24,26,31,32,35,37,39,40,41,42,46,49,52,54,56,57,60,61,64,65,69,70,71,73,74,76,78,83,85,86,90,93,95,96,103],drop:14,dsa:[1,4,10,13],dst:1,dstbuffer:1,dstbufferlen:1,dstfile:0,dtl:[13,65],du:63,dual:[14,71],due:[14,15,35,63,64,65,68,74,79,82,100],duplic:64,durat:1,dure:[7,10,14,17,19,22,35,39,44,49,64,71,96],dyn:[7,24],dynam:[0,2,5,7,13,20,35,37,52,66,71,77,99],dynamichuffman:[0,2],dynamichuffmanbufferreq:0,e2:[71,77],e4:71,e5:71,e65a6897be5e4939d477c4969a05e12d90b08409:52,e8:[10,41,67,96],e:[0,1,7,14,19,29,37,40,41,47,49,51,52,54,59,68,73,74,76,86,88,96,99,102],eacc:19,each:[0,1,2,10,11,14,15,19,23,24,27,32,35,37,38,39,40,41,42,43,48,49,51,55,56,57,59,60,63,64,65,67,71,74,76,86,93,100,102],eagain:19,earlier:[1,49],eas:[53,65],easier:[53,65],easili:[15,32,49],ebadf:19,ebadmsg:19,ebusi:19,ec:[1,4],ecb:65,ecc:[1,13,56,94],ecdh:[1,4,13,17,65],ecdhp256:98,ecdhp384:98,ecdhx25519:98,ecdsa:[10,65],ecdsap256:98,ecdsap384:98,echo:[47,48,67,93,96,97,100,102],ed:[10,41,67,96],edg:[65,68],edit:[11,88,102],edkii:[11,100],eea3:65,eexist:19,efault:19,effect:[7,11,54,73,76,86,96],effici:[15,60,64,94],effort:67,efi:[100,102],egrep:41,eia3:65,eight:[24,40,42,93],einprogress:19,eintr:19,einval:19,eio:19,either:[1,7,13,15,17,36,49,54,59,64,65,71,74,76,86,96,98,99,102,103],el3hlt:19,el8:[7,71],elaps:98,electr:13,electromagnet:63,electron:13,element:15,elfutil:11,elif:48,ellipt:[4,13,17,65,71,77,94],els:[0,1],elsewher:91,email:64,embed:15,emploi:[1,11,14,49],empti:64,enabl:[7,10,11,13,14,15,17,19,26,36,37,38,39,40,43,48,49,52,54,55,56,57,63,64,65,67,68,74,77,86,88,92,95,96,99,100,102],enable_event_driven_polling_mod:98,enable_external_pol:98,enable_heuristic_pol:98,enable_inline_pol:98,enable_sw_fallback:98,enablerepo:96,enabletelemetri:48,encapsul:[1,4,13],enclosur:63,encod:[0,1,2,64,86],encount:[49,64,74,76,96],encrypt:[4,11,13,14,15,17,36,49,57,63,64,71,73,76,77,94],end:[0,1,11,41,49,63,64,65],endif:[0,1],endoflastblock:[0,64,74,76],endors:68,endpoint:[6,8,12,13,19,26,28,32,35,37,38,39,40,43,46,48,50,54,56,61,65,74,86,98,99],enforc:57,engin:[2,4,10,12,13,14,15,17,19,24,37,41,47,49,51,53,64,67,68,74,76,93,95,99],enhanc:64,enodev:19,enoent:19,enomem:19,enosi:19,enospc:19,enotti:19,enough:[0,1,14,15,23,40,68,73,74,76],enq:60,enqueu:[0,1,2,35],enrol:65,ensur:[0,1,7,11,14,15,23,48,51,52,63,64,68,73,76],enter:[7,11,88],enterpris:[13,65],entireti:0,entiti:2,entri:[0,1,8,12,15,17,26,49,52,55,61,73,76,102],enumer:35,env_fil:7,envelop:13,environ:[2,7,11,14,35,55,63,71,77,84,85,86,93,96],environment:[10,72,78],eopnotsupp:19,eoverflow:19,eperm:19,epol:[15,39],equal:[1,24,49,57,74,76],equival:[1,64],erang:19,err:[48,74,76],errata:[1,69,70,83,91,92],erron:52,error:[0,2,7,19,22,26,33,35,37,40,41,47,48,49,63,65,66,69,71,74,77,92,96,98],es:49,escal:11,esp:[1,4,13],especi:[64,67,91],essenti:[1,2,11,52],establish:[21,65],esx:77,esxi:[77,79,82],etc:[0,1,7,10,11,19,37,40,41,44,49,54,63,67,86,93,96,97,100,102],ethernet:13,etim:19,even:[1,14,35,37,56,65,68,73,76,93],event:[0,15,19,27,31,39,49,64,68],eventu:14,ever:96,everi:[15,64,68,73,76,79,82,99],evolv:65,evp:[13,65,98],exact:[15,77],exactli:[0,1,41,96],examin:67,exampl:[0,1,2,4,5,7,8,10,12,15,17,24,32,35,37,39,40,41,42,47,48,52,54,56,59,61,63,64,67,68,71,77,86,96,97,102],exce:[0,64,93],exceed:[40,64,77,102],except:[0,10,35,39,48,71,93],excess:[63,65],exchang:[13,36,65],exclud:1,exclus:[60,68,86],execut:[0,1,2,7,8,12,17,35,47,48,49,57,61,63,64,71,77,103],exemplari:68,exercis:8,exhaust:11,exist:[1,11,19,41,42,52,63,64,65,96,98],exit:[11,48],expans:[1,35,66],expect:[0,14,15,37,64,69,74,93,98],expens:[1,2,35,53,64],experi:64,expir:[15,19],explain:15,explan:64,explicit:1,explicitli:[60,93],exploit:63,exponenti:[1,65],expos:[2,19,22,54,55,56,60,63,64,67,71,77,94],exposur:63,express:[13,17,40,63,68],extend:[71,77],extens:65,extent:68,extern:64,extra:[63,64],extract:[64,86],extractor:[7,96],f2:[10,41,67,96],f3:102,f7:[10,41,67,96],f8:[1,65,73,74,76],f9:[1,65],f:99,facilit:[64,65,102],factor:[15,40,92],fail:[0,1,2,7,19,26,32,33,39,40,63,69,79,82,100,102],failov:49,failur:[7,19,23,24,25,26,27,28,29,30,31,37,56,69],fair:51,fall:[80,82],fallback:[49,99],fals:[1,7,48,49,52,64,69,74],famili:[7,17],faq:[71,77,91],far:[0,64],faradai:63,fashion:10,fast:[67,96],faster:[0,96],fatal:[19,37,49,56,64,71,74,76,77],fault:[26,37,52,68,71,73,76,102],featur:[0,1,2,6,7,37,47,48,49,52,54,56,57,63,66,69,70,72,73,76,78,83,86,95,96,99,102],februari:[5,9,62,75],fedora:[11,96,98,99,103],feed:[0,64],feof:[0,1],fermat:1,fetch:[14,15,23],few:11,fewer:15,ffffffff:[73,76],fi:93,field:[0,2,15,35,49,52,60,64,74,76],figur:[1,2,36,49,64],file:[0,2,4,6,14,15,19,24,28,32,37,39,40,41,42,46,47,48,52,54,56,64,67,68,72,78,86,88,91,93,96,98,99,100,101,102,103],filelist:[8,71],filenam:[8,12,17,61,63],filesystem:[1,11,48],filetyp:68,fill:[1,14,15],filter:64,final_client_write_kei:1,final_server_write_kei:1,financi:65,find:[1,48,49,64],fine:15,finish:[15,32,33,39],fip:63,firewal:[11,65],firmwar:[7,11,13,14,25,36,47,49,55,63,64,65,69,71,77,83,95],first:[0,1,2,5,7,10,11,12,42,48,49,52,59,63,64,68,74,86],fit:[15,68],five:64,fix:[64,73,76,101],flag:[0,1,10,35,37,66,96],flat:[0,1,15],flatbuff:0,flavor:15,flexibl:67,flight:[0,1,23,65],flow:[0,2,36,73,74,76],flr:[13,68],flush:[0,66],flushflag:[0,64],focu:15,focus:15,folder:[10,41,48,86],follow:[0,1,2,4,7,8,10,11,12,14,15,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,41,42,48,49,50,52,54,56,57,61,63,64,65,66,67,68,71,73,74,76,77,85,86,88,93,96,97,98,99,100,102,103],footer:[0,64,74,76],footprint:[14,64],forc:[63,96,100],fork:99,form:[7,35,42,68],format:[0,2,4,5,32,39,41,48,57,66,99],forum:[71,77,91],forward:[1,31,49,64,77],found:[0,1,2,4,41,48,49,57,64,100,102],four:[0,2,37,40,42,51,52,93],fourth:48,fraction:49,fragment:15,frame:[14,74,76],framework:[7,13,19,36,39,49,51,65],fread:[0,1],free:[0,1,24,26,32,39,49,52,64,65,68,73,76],freebsd:[68,90],freed:[24,64],frequenc:[14,15,47,73,76,79,82],frequent:[24,49,63,65],from:[0,1,2,7,10,11,13,14,15,17,19,24,26,28,31,32,35,37,41,47,48,49,54,55,57,63,64,65,67,68,71,73,74,76,77,79,82,86,92,93,94,95,100,102],full:[0,1,10,11,14,15,17,35,37,57,65,69,73,76,101],fulli:[15,68,73,76,79,82],further:[2,12,17,35,64,68],futur:[7,59,61,64,65,67,68,73,76],fuzz:63,fw:[13,68,71,73,74,76,79,82],fw_counter:47,fwrite:0,g:[0,1,7,14,19,29,40,41,47,49,51,52,59,68,73,74,76,86,96],gain:63,galoi:[1,4,13],gate:[68,73,76,79,82],gatewai:65,gather:[0,1,5,13,15,43,63],gawk:7,gb:35,gbp:65,gcc:[11,96],gcd:[1,4],gcm:[2,4,13,65],gcm_sampl:1,gen2:[49,59],gen4:[49,59],gen:[14,15,17,41,67,68],gener:[0,2,4,5,7,8,10,12,13,14,15,17,19,32,36,38,43,46,49,55,61,64,68,71,77,91,96,99],generatedkeyleninbyt:35,get:[0,1,8,11,12,14,15,24,26,42,48,49,57,59,63,68,71,73,76,77,86,89,90,91,96,100,103],get_external_polling_fd:98,get_hash_digest_length:0,get_num_crypto_inst:98,get_num_op_retri:98,get_num_requests_in_flight:98,getlat:10,getoffloadcost:10,gfp_sm2_size_in_byt:1,gigabit:13,gige:13,git:[52,68,96,98,99,100],github:[61,91,94,96,98,99,101],give:[1,42,102],given:[0,1,2,7,15,23,24,25,26,28,32,33,37,40,42,47,48,49,59,63,74,76,93],gmac:[1,4,65],gnu:71,go:[1,26,91],goal:[54,56],goe:49,gone:91,good:[35,64,68],govern:65,gpl:[8,13,71],gradual:14,grain:64,grand:[4,8,13,61],grant:[63,68],granular:64,graphic:[2,8,12,13,17,61],great:103,greater:[64,67,74,76],greatest:[1,4],grep:[7,10,68,86,88,100,102],group:[7,13,55,63,65,86,93,96,102],groupinstal:11,growth:64,grub2:[100,102],grub:[4,8,11,13,61,88,100,102],grub_cmdline_linux:[100,102],grubbi:[88,100,102],guarante:[0,1,7,37,52],guard:65,guest:[7,26,37,49,51,57,64,67,68,78,79,82,84,85,95],guest_vm_nam:102,gui:[13,86],guid:[0,1,2,4,7,8,10,11,12,14,15,17,52,61,67,71,74,76,77,85,86,89,90,91,96,100,101,102,103],guidanc:48,guidelin:[16,17,61,63],gva:37,gz:[7,8,77],gzip:[0,4,64,99],gzipext:99,h:[0,1,2,5,7,8,19,22,23,24,26,28,30,32,33,35,52,64,99],ha:[0,1,2,7,10,15,19,24,27,31,35,40,42,49,51,53,63,64,65,67,71,74,76,77,86,93,100,102],had:60,half:[0,1,2],halt:[19,63],handl:[1,2,7,14,15,19,23,26,27,30,35,37,41,54,56,59,68,73,74,76,102],handler:[1,2,39,49],hang:[49,63],happen:[49,64,73,74,76],hard:102,hard_limit:102,harder:[53,64],hardwar:[1,2,7,8,10,11,12,13,14,15,17,19,20,25,26,33,35,36,37,40,49,52,53,55,59,61,63,64,65,67,68,71,73,76,77,91,92,93,94,102],hash:[3,4,5,10,13,37,64,93],hash_file_sampl:[1,10],hash_sampl:1,hashalg:0,hashalgorithm:[0,1],hashcheck:1,hashmod:[0,1],hashsetupdata:[0,1],hashstartsrcoffsetinbyt:[0,1],hat:13,have:[0,1,2,7,14,15,17,35,37,39,40,41,42,49,51,52,53,56,63,64,65,68,73,74,76,79,82,86,91,93,98,99,100],hb:[7,49],hd:102,hdr_start:1,hdr_sz:0,head:[55,60],header:[0,1,7,14,35,64,98],headlin:65,heartbeat:[7,20,37,46,47,50,69],heartbeat_fail:[47,49],heartbeat_pol:98,heartbeat_s:[47,49],heartbeat_sim_fail:49,heartbeattim:[37,49],hellman:[3,4,10,13,17,65,94],help:[7,14,15,35,36,52,56,64,65,77,86,96,99],henc:[1,14,15,63],here:[0,1,7,10,11,15,17,37,40,48,52,57,86,88,91,93,94,98,99],hereaft:68,hereund:68,hex:47,high:[1,11,13,15,17,28,35,39,41,49,63,64,65],higher:[0,14,15,52,68,73,76,79,82,102],highest:[15,65,73,76],highland:13,highlight:[1,15,48],histor:65,histori:[0,3,6,16,46,64,69,71,72,77,78,83,84,94,95],hit:48,hkdf:[4,5,37],hkdf_sampl:1,hkdfdatas:1,hkdfkeyop:1,hkdfout:1,hkdfsamplecallback:1,hlp:13,hmac2:1,hmac:[1,4,10,13,65],hold:[0,1,2,33,52,60,64],holder:68,home:96,host:[7,26,37,40,49,52,57,64,65,67,69,84,85,91,93,102],hostdev4:102,hostdev:[86,102],hot:86,how:[0,1,4,8,10,14,15,17,22,39,48,49,64,68,86,88,93,96],howev:[0,1,2,15,24,48,49,52,63,64,65,68,74,76,86,96],hpa:37,ht:7,html:[7,91],http:[7,11,61,68,91,93,94,96,98,99,100,101],hub:[13,17],huffman:[0,2,35,64],huffmantyp:99,hufftyp:[0,64],huge:99,hugepag:7,hung:49,hvm:102,hw:[1,7,60,68,71,73,74,76,77,79,82,86],hw_algo_bitmap:98,hw_buff_sz:99,hw_l1:64,hw_l6:64,hw_l9:64,hybrid:64,hyper:14,hypervisor:[49,68],i:[1,4,7,8,13,26,37,48,52,54,61,67,68,73,76,77,88,91,96,99,100],ia32_pasid:60,ia:[13,17,60,68,73,74,76],ic:51,icp:[7,49,68,86,96],icp_adf_userprocesstostart:[74,76],icp_any_flag:96,icp_any_nam:96,icp_any_path:96,icp_arch_us:7,icp_build_output:7,icp_buildsystem_path:7,icp_dc_dyn_not_support:7,icp_dc_onli:7,icp_dc_return_counters_on_error:[7,35],icp_debug:7,icp_dev:31,icp_disable_inlin:7,icp_env_dir:7,icp_log_syslog:7,icp_nonblocking_partials_perform:7,icp_param_check:[7,14],icp_root:[7,10,19,23,24,26,28,30,32,33,35,57,86],icp_sal_check_all_devic:49,icp_sal_check_devic:49,icp_sal_congestion_mgmt:23,icp_sal_cypolldpinst:1,icp_sal_cypollinst:49,icp_sal_dev_version_info_t:33,icp_sal_heartbeat_simulate_failur:49,icp_sal_iommu:26,icp_sal_pol:[28,30],icp_sal_poll_device_ev:49,icp_sal_reset_devic:49,icp_sal_us:[24,32],icp_sal_userstart:[21,33,39,42],icp_sal_userstartmultiprocess:[32,42],icp_sal_userstop:39,icp_sal_vers:33,icp_tools_target:7,icp_trac:7,icv:[1,4],icv_length:1,id:[13,19,24,25,33,47,64,86,88,100,102],ideal:65,ident:[49,64,93,103],identif:64,identifi:[2,15,39,42,47,60,63,64,67,86,92,93],idl:[15,37,53,54,73,76,79,82],idxd_mdev:10,ieee:[13,65],ifdef:1,ignor:[1,7,10,32,35,64,68,73,76,79,82,93,96],iio:[11,73,76,88,100],ik:13,ikm:1,ill:35,illeg:[73,76],illustr:[0,1,14,49],ilz77:64,imag:[64,67,71,77,100],immedi:[1,49],impact:[2,14,15,24,37,39,52,54,63,64,68,73,74,76,79,82,93],imped:63,implement:[0,1,2,6,15,17,19,37,49,51,53,56,57,60,64,65,67,71,74,76,96,98],impli:[49,64,68],implic:[38,68,73,74,76,79,80,82],improb:64,improv:[35,64],inaccur:[73,76,79,82],inbound:1,incident:68,includ:[0,1,2,7,8,10,11,12,13,15,17,19,23,24,26,28,30,32,33,34,35,37,38,40,41,43,47,49,52,54,63,64,65,66,67,68,71,77,85,86,91,94,96,98,99,100,101,102,103],includelz4:10,incomplet:64,incorpor:7,incorrect:[63,74],incorrectli:63,increas:[2,14,15,17,39,49,64,68,73,74,76,79,82,94,96,102],increment:[0,1,49,56,64],incur:15,independ:[0,7,49,64],index:[37,54,60,64,92],indic:[1,10,14,15,17,21,22,23,24,25,26,27,28,29,30,31,33,37,39,41,47,49,64,93,98],indirect:68,individu:[2,11,19,37,39,52,60,63],industri:65,inevit:[68,73,76,79,82],inf:1,inflate_decompress:0,inflate_destroi:0,inflate_init:0,inflight:[14,15,49,99],info:[1,102],infolen:1,inform:[0,1,2,7,10,11,15,19,20,35,36,39,40,41,47,52,54,60,61,64,65,68,78,102],infrastructur:[46,60],infrequ:49,inher:[15,53],init:[7,19,99],init_engin:98,initi:[0,9,15,18,31,32,39,54,56,62,63,64,68,70,75,79,81,82,87,102],initialis:56,initramf:100,initsess:[0,73,76],inject:[1,22,69],inlin:[7,64],inner:1,input:[0,1,13,19,28,30,35,38,52,57,63,64,74,76,99],inputfil:99,insert:[1,7,36,64],insid:[1,60,63,71,77,79,82],insignific:15,insmod:52,inst_id:[10,19,41,49,67,74,76],instal:[4,6,8,10,19,40,41,44,57,67,74,76,77,79,82,84,91,95,100,102],instanc:[0,7,10,11,15,17,20,23,27,28,30,32,35,37,38,41,42,43,46,47,49,50,52,56,60,63,64,67,69,73,76,93,102],instanceev:27,instancehandl:[1,23,27,28,30],instancehandle_in:1,instanceinfo2:1,instead:[1,2,7,10,15,35,37,52,64,65,73,76,93,96,99,102],institut:13,instruct:[7,8,10,11,12,17,61,68,71,77,85,86,93,96,98,99,103],integ:22,integr:[0,1,4,7,13,15,17,35,53,65,66],integritycrc64b:64,integritycrc:[64,96],integritycrccheck:64,intel:[3,4,5,7,8,10,11,12,13,16,19,20,26,28,32,34,36,37,38,39,40,43,46,48,50,51,52,54,55,56,59,61,63,65,66,68,72,73,74,76,77,79,82,84,85,88,91,92,93,94,95,96,101,102,103],intel_iommu:[52,88,100,102],intel_qat:[7,10,100],intelqat20:8,intend:[3,17,23,24,26,28,30,32,64,85,92],intens:[64,65],interact:15,interconnect:[4,8,13,61],interest:[7,15,24,31],interfac:[2,4,8,12,13,17,19,52,53,60,61,65,67,71,77],intermedi:[0,2,37,64],intermediari:65,intern:[2,14,15,21,32,37,42,47,49,52,54,60,64,102],internet:[1,4,13,42,65],interpret:[80,82],interrupt:[1,2,13,16,17,19,35,37,39,43,49,54,55,56,68,73,76],interv:[15,49,68,73,76],intervent:56,introduc:[7,12,15,64,67],introduct:[3,6,16,66,69,83,84,89],intrus:13,invalid:[0,19,22,23,27,30,33,35,52,64,68,73],invoc:[2,15,35,49],invok:[0,1,2,7,15,53,63,65,98],involv:[1,15,17,56,64,65,74,76],io:37,ioapic:102,ioat:11,ioctl:[13,19,36,40,49],ioctl_get_num_devic:49,ioctl_status_accel_dev:49,iommu:[13,15,20,37,52,60,63,69,88,93,102],iommu_group:93,iov:[4,8,13,26,38,39,40,46,47,49,51,55,57,61,62,71,77,85,88],iova:26,ip:[11,13,64,91],ipcomp0:39,ipcomp:63,ipp:98,ippcp:98,ippcp_2021:98,ipsec0:[39,42],ipsec1:42,ipsec2:42,ipsec3:42,ipsec:[4,13,14,32,42,63],ipsec_int_0:42,ipsec_int_:42,ipsec_sampl:1,irqbypass:[7,10],isload:49,ispol:39,issu:[7,14,36,41,52,60,64,69,71,72,75,77,78,91,95,96,98,101],ital:[8,12,17,61],item:[11,39,49,71],iter:10,its:[0,1,2,7,14,15,32,35,41,56,60,63,65,68,92],itself:[1,10,63,64],iv:1,iv_block:1,ivlen:1,ivleninbyt:1,ixa00378322:1,j0:1,j:[7,86,96,98],januari:[75,81],job:[0,36,53,64],juli:[5,70],june:[5,62,75,101],just:[1,14,65,98],k:[1,68],kasumi:[1,35,65,73,76],kb:[37,77,102],keep:[0,4,8,15,49,53,61,64,68,73,76,79,82],kei:[0,4,5,7,8,12,13,15,17,19,48,49,55,59,61,66,71,77],kern_vers:7,kernel:[7,10,11,13,15,19,26,31,35,36,37,41,49,54,56,60,63,64,65,67,69,70,71,73,74,76,83,93,95,101],kernel_qat:39,kernel_source_root:7,key_block:1,keyboardinterrupt:48,keygen:37,kit:13,know:[24,36,49,64],knowledg:36,known:[0,1,16,24,35,48,63,65,69,71,72,75,77,78,83,92,100],ko:52,kpt:[7,71,77],kvm:[7,10,13,68,88],l0_par_st:[74,76],l4:65,l7:65,l:[7,71,77,86,96,97,99,100],label:[42,71],labellen:1,lac:[13,17,35],lac_hw_precomput:1,lack:63,lacsymsession_paramcheck:[73,76],lake:51,lambda:48,laptop:65,larg:[0,1,15,19,49,63,65,68,73,74,76],larger:[0,14,15,49,64],last:[0,1,35,64,74,76],lastli:[100,102],lat_acc_avg:48,latenc:[2,10,13,14,15,17,35,36,48,54,63],latency_cod:10,later:[0,17,74,76,93],latest:[7,12,64,79,82,91,96,98,99],latter:[1,64,68,99],launch:10,layer:[1,4,13,35,36,49,51,60,65,71],layout:[2,69],ld_library_path:[10,96,98],lead:[14,15,63,64,68,73,76,79,82],learn:92,least:[2,14,19,21,35,93,98,99,102],leav:1,left:19,legaci:[1,7,96],legal:89,legitim:[26,63],len:[48,64],length:[0,1,2,14,35,52,63,64,68],less:[7,15,20,24,35,73,76,96],level:[0,1,2,7,8,11,13,15,16,17,19,41,49,63,65,66,68,71,73,76,77,96,99,102],liabil:68,liabl:68,lib64:[7,96],lib:[7,10,68,96,98,100],libadf:21,libboost:11,libcrypto:[49,65,71],libelf:11,liblz4:99,libnl3:11,libnl:11,libqat_:10,librari:[7,8,11,12,17,19,35,36,49,52,60,61,63,64,71,94,95,96,100,103],libreadline6:11,libssl:[11,96],libsystemd:[11,96],libtool:[96,98,99],libudev:[11,36],libusdm:96,libusdm_drv:71,libvirt:[86,88,102],libxml2:11,licenc:68,licens:[8,13,69,77,83],life:13,lifecycl:64,lifetim:[22,63,64],light:67,like:[35,42,48,49,63,64,68,86,93,96,98,99,100,102],limit:[0,2,7,14,15,37,39,40,42,46,50,52,59,63,65,66,67,68,72,73,76,78,88,93,95,96,97,99,102],limitdevaccess:[32,39,42],line:[7,8,10,11,12,13,17,48,61,86,100,102,103],link:[47,56,64,91,93],linux:[0,1,2,7,11,13,36,39,46,47,48,56,60,65,67,69,73,74,76,77,83,86,89,90,91,93,95,96],list:[0,1,5,6,7,10,11,12,13,16,35,48,57,61,63,64,68,72,73,76,78,86,96,100,102],listen:102,lite:0,liter:64,live:[63,64],lkcf:[7,13,19,39],ln:98,load:[7,15,19,37,39,40,41,46,49,50,64,65,68,71,77,79,82,96,100,102],local:[7,10,14,51,96,98],locat:[0,1,10,23,24,26,28,30,32,33,35,42,48,49,56,63,65,71,86,91,98],lock:[7,52,60,63,65,96,97],log:[7,10,19,47,63,65,79,82,96],logic:[0,1,28,30,38,43,46,49,59,63,64],login:[7,63,86,96],logo:92,longer:[2,64,73,76,103],look:[7,40,42,48,49,64,74,76,79,82,86,93,96,98,100,102],lookasid:[1,4,10,13,17,23,24,26,28,30,32,33,71],loop:[0,14,15,49,99],loss:68,lossless:94,lost:65,low:[14,15,63,64,68,73,76],lower:[0,13,15,17,64,73,74,76,79,82,93],ls:[48,93,100],lsmod:[7,10,100,102],lspci:[41,86,88,100,102],luca:1,lvl_enum:64,lz4:[10,66,71,77,99],lz4blockchecksum:64,lz4blockindepend:64,lz4blockmaxs:64,lz77:64,m:[32,42,99,100],mac:[1,4,13],mac_length:1,machin:[13,26,49,63,67,69,73,74,76,77,85,86,95,100,101],macro:1,made:[0,1,7,14,49,56,64,65,68,71,74,76,77],magic:64,mai:[0,1,2,5,7,10,11,14,15,19,35,37,38,39,40,41,42,43,49,51,52,56,62,63,64,67,69,71,75,77,88,92,96,102],main:[0,1,15,17,49,52,63,73,76,96],mainli:15,mainstream:64,maintain:[0,1,7,15,64,96],mainten:71,major:[35,71],make:[1,2,7,10,11,14,15,26,40,57,65,68,73,74,76,79,82,86,91,96,98,99,103],makefil:[7,8,96],malloc:[15,26,37,52,99],malwar:63,manag:[0,1,11,13,19,20,41,43,46,47,49,50,63,64,65,68,71,73,76,77,79,82,86,95,96,98,99,102],mani:[7,14,15,22,32,39,63,64,65,93,100],manner:[1,11,64],manual:[1,2,4,7,8,10,12,13,14,15,17,19,35,49,61,64,65,71,77],map:[1,10,26,37,47,48,52,60,63,64,67,86,102],march:5,mark:92,marker:64,market:13,mask:[5,13,35],maskleninbyt:35,master:1,master_secret:1,match:[0,2,5,15,49,64,68,74,76,80,82],materi:[1,4,8,13,61,68,71],math:[1,19],matrix:2,max:[7,14,23,39,48,54,55,57,60,64,99],max_huge_pag:52,max_huge_pages_per_process:52,max_inst:[1,2],max_lat:48,max_mem_numa:52,max_mr:[7,96],max_rd_lat:48,maxim:[14,16,35,37,64,93],maximum:[0,1,14,16,24,28,30,35,38,39,46,48,52,66,77,93,99,102],maxinflightrequest:23,mayb:[73,76],mb:98,mbp:48,mcc:69,md5:[5,65],mdev:[7,86],mean:[1,13,17,30,48,64,99,100],measur:[10,57,73,76,79,82],mechan:[1,2,19,23,49,56,71,77],media:[64,71,77],medic:65,meet:[1,13,17,38,74,76],megabit:57,memcmp:0,memcpi:[0,1,52,99],memlock:[7,96,97],memori:[0,7,10,13,15,17,28,35,46,49,50,55,56,60,63,64,68,71,73,77,96,97,99,102],memset:1,menu:[11,100],merchant:68,messag:[1,2,4,7,10,13,17,19,28,30,36,40,48,49,64,73,74,76,79,82,88,96,99],message_len:1,messagelentocipherinbyt:1,messagelentohashinbyt:[0,1],met:[68,86,88],meta:0,metadata:[1,2,52],metal:55,method:[14,16,19,49,64,67,88],metric:[74,76],mgf:[5,13,35,37],might:[0,1,35,64,68,93],migrat:5,miller:[1,96],millerrabinrandominput:1,millisecond:[37,54,99],min:64,minim:[1,2,14,15,35,49,64,68,73,76],minimum:[15,26,54,96,97,99],minmatch:64,minor:71,minu:1,minut:103,miscellan:[88,100],miss:[8,48,98],misus:63,mitig:[14,52,73,76],mkconfig:[88,100,102],mkdir:7,mlock:11,mmap:52,mmio:[35,37,55,60,63],mobil:[13,17],mock:49,mod:1,mod_sign_cmd:7,mode:[0,1,4,7,11,13,14,32,35,39,40,46,50,60,64,65,69,73,76,86,95,96,98,99,102],model:[15,43,46,64,65,71,77,86],modif:[38,68,73,76],modifi:[2,7,14,24,52,63,73,76,86,103],modprob:[52,100,102],modul:[4,7,10,13,19,37,63,65,69,73,74,76,83,93,100,102],modular:[1,65],monitor:[11,57,63,64,102],monopol:63,montgomeri:[71,77],more:[0,1,2,7,10,11,14,15,17,19,24,35,39,41,43,44,49,51,52,59,63,64,67,69,77,86,92,96,102],most:[1,2,12,15,35,53,64,65,74,76],move:64,mr:1,ms:[68,73,76],msi:[13,15,17,73,76],msr:60,much:[0,1],multi:[2,51,53,93],multifunct:102,multipl:[1,2,3,7,14,15,19,24,32,35,37,38,39,43,46,49,51,53,60,64,68,73,74,76,77],multipli:[1,65],multiplystatu:1,must:[0,1,2,5,7,10,11,15,22,24,26,33,35,37,38,39,41,49,51,52,56,59,63,64,68,71,93,96,99,100,102],mutual:[60,86],mxn:32,my:91,n:[0,1,2,11,19,32,51,63,67,68,74,76,93],name:[0,1,2,7,8,10,11,12,17,32,39,41,42,43,48,49,61,63,65,67,68,71,74,76,77,86,92,96,99],namespac:[79,82],nano:11,nanosecond:48,nasm:[96,98],nativ:[65,67,71],natur:[63,64],navig:[11,100],nb_mr_round:1,nearli:103,necess:65,necessari:[36,41,42,64,68,73,76,96],need:[0,1,2,7,10,11,13,15,17,19,24,26,32,35,37,38,40,41,48,49,52,53,56,63,64,68,73,74,76,86,88,93,96,97,98,99,102],neg:15,neglig:68,negoti:65,neighbor:63,neither:[68,93],nest:[1,64],net:7,netkei:65,network:[11,13,15,63,64,65],never:37,newer:[5,7,64,100],newest:64,next:[0,1,2,14,15,35,42,52,55,64],nginx:49,nine:42,nist:[1,4],nn:41,no_pasid:102,node:[14,93],node_id:[10,41,49,67,74,76],nodeaffin:1,nodedev:86,noisi:63,noldconfig:98,non:[1,4,6,10,13,15,17,36,52,53,63,64,68,96,99],nonblock:7,nonc:1,none:[21,25,27,31,32,48,64,68],nor:[64,68,93],normal:[1,63,64,71,74,76,77],nosess:101,note:[0,1,5,8,12,35,37,39,40,49,52,61,62,64,71,77,89,90,91,93,94,96],noth:26,notic:[1,68,89],notif:[27,49,60],notifi:[15,49,64,80,82],nov:101,novemb:75,now:[0,1,19,42,63,64,65,68,100,102],nrbg:4,ns:[48,101],num:[48,99],num_sessions_two:0,numa:[13,17,47,51,52],numa_nod:93,number:[0,2,4,5,7,10,11,14,16,19,20,22,24,28,29,30,32,33,35,37,38,39,41,43,46,47,48,49,51,52,54,55,57,59,60,63,64,65,68,77,86,90,93,96,102],numberadi:86,numbercyinst:[10,24,39,40],numberdcinst:[10,24,39],numbuff:[0,1],numcompcnverrorsrecov:64,numconcurrentrequest:37,numcyinst:[24,42],numdcinst:[24,42],numer:49,numerror:22,numinflightrequest:23,numinst:[1,2],numinterbufflist:0,numlabel:1,nummillerrabinround:1,numprocess:[32,39,40,42],o:[4,7,8,13,26,61,67,73,76,77,88,99,100],object:[0,7,63,71,77],observ:[10,57,64,69,74],obtain:[2,7,8,35,41,47,52,63,86,96,98,99],obvious:64,occupi:15,occur:[19,22,35,64,69,71,79,82],occurr:[49,64],octob:[5,75,81],odd:93,off:[2,15,17],offer:[36,52,64,65,68,71,77],offici:[7,86,88],offload:[1,2,10,13,14,15,17,19,35,64,65,94],offset:[1,14,15,64],offsit:64,often:[15,96],ok:49,older:71,onc:[0,1,2,15,19,24,32,35,53,63,64,88,96],one:[0,1,2,7,10,15,19,21,22,23,24,25,26,27,28,29,30,31,32,33,37,39,41,42,43,44,48,49,51,52,53,59,63,64,65,67,68,73,74,76,79,82,93,96,98,99,100],ones:[73,76],onli:[0,1,2,7,14,15,22,24,28,29,32,35,37,39,40,41,42,47,48,54,57,60,63,64,68,71,73,76,77,79,82,85,88,91,98,99,102],onlin:[64,90],onto:55,oot:[68,84,85,103],op:[13,35,57,68],opaqu:[1,2,27,52],opdata:[0,1,23],open:[0,7,10,19,65,68,71,77,93,100,102],opensourc:68,openssl:[11,13,49,51,65,71,95,96],openvpn:65,oper:[3,4,6,7,8,10,13,14,16,17,22,25,26,27,29,31,32,33,35,36,38,46,48,50,52,57,61,63,64,65,67,68,72,77,85,93,96],operationtyp:1,oppos:[1,14,35,64,68],opt:[62,65,73,76],optim:[0,1,2,7,12,15,17,19,20,36,38,52,53,65,67,68,89,90,93,96],optimum:35,option:[1,2,11,14,19,37,39,43,57,64,93,98,99],optyp:0,order:[0,1,37,52,56,64,68,93],ordinarili:49,org:[68,93,100],organ:64,orig:99,origin:[0,5,73,76,96],original_arrai:48,os:[4,8,11,13,49,61,68,71,73,74,76,77,84,85,86,95,101],os_malloc:[0,1],osal:71,other:[0,1,2,7,10,12,19,20,24,37,39,42,49,52,53,63,64,65,68,71,73,76,77,86,91,92,93,96,102],otherwis:[0,7,49,63,68],ouput:7,our:[68,101],out:[0,7,11,15,19,40,48,61,63,64,68,71,73,76,85,98,99,103],outbound:1,outer:1,outlin:[48,64],output:[0,1,7,10,13,19,35,38,40,41,47,48,49,52,57,63,64,67,68,73,86,88,96,98,100,102],output_adf:48,output_telem:48,outputs:64,outsid:[2,11,20,63],outstand:[0,1,2,15,53],over:[0,1,2,14,17,64,65],overal:[15,64],overflow:[0,35,63,66],overhead:[0,15,52],overload:[73,76],overview:[3,5,6,16,38,46,84],overwrit:63,own:[2,35,36,41,56,60,63,68,71],owner:[2,63,68],p1:1,p2:1,p5000:51,p:[1,7,99],paadbuff:1,pack:64,packag:[4,6,7,10,12,15,19,20,38,40,43,44,47,49,51,52,57,61,68,75,78,84,86,90,95],package_o:96,package_typ:96,package_version_build_numb:96,package_version_major_numb:96,package_version_minor_numb:96,package_version_patch_numb:96,packet:[1,2,10,14,15,35,37,56,63,93],packettyp:[0,1],pad:[1,35],pad_length:1,padditionalauthdata:1,padlen:1,page:[4,26,37,48,49,60,65,68,71,74,79,82,90,91,94,99,102],page_s:26,pagefault:[68,73,76,79,82],pair:[46,49,50,51,59,60,64],param:[7,73,74,76,96],paramet:[0,1,2,7,8,11,12,15,17,19,21,22,23,24,25,26,27,28,29,30,31,32,33,35,40,41,43,49,52,54,60,61,63,64,86,93,95,96,99,103],pariti:64,park:13,pars:[36,64,80,82],part:[1,2,15,25,36,48,49,63,64,65],parti:[1,71,77],partial:[2,7,16,35,48],partialsnotrequir:1,particular:[0,1,2,15,19,22,28,49,52,65,68,74,76,100],partit:[14,51],pasid:[67,73,76,88],pass:[1,2,7,14,15,19,23,27,30,33,35,39,49,52,63,64,67,68,73,76,80,82,84,85,93,102],passthrough:[69,77],password:[7,10,11,63],patch:[11,52],patent:68,path:[7,8,10,11,12,17,19,28,48,61,64,67,74,76,93,96,98],pattern:10,payload:[1,2,4,13,15,36,46,48,52,60,64,68,73],pb:1,pbar:48,pbuffer:[0,1,52],pbufferctx:0,pbufferlist:1,pbufferlistdst:0,pbufferlistsrc:0,pbuffermeta:[0,1],pbuffermetadst:0,pbuffermetasrc:0,pc3buffer:1,pc:[65,71,75,102],pcallbacktag:[0,1,27],pcallbacktagph2:1,pch:[13,17,35,63,65],pci:[4,8,13,19,56,61,63,67,74,76,77,86,93,102],pci_0000_6b_00_1:[74,76],pci_0000_e9_00_1:86,pci_trans_cnt:48,pciaaaa:[48,56],pcie:[4,8,15,48,51,56,61,63,69,74,76,86],pcipherkei:1,pciutil:11,pcombinedheadbuff:1,pcontexbuff:0,pcpadhopdatap1:1,pcpadhopdatap2:1,pcpaecsm2decopdata:1,pcpaecsm2decoutputdata:1,pcpaecsm2encopdata:1,pcpaecsm2encoutputdata:1,pcpaecsm2keyexphase1aopdata:1,pcpaecsm2keyexphase1aoutputdata:1,pcpaecsm2keyexphase1bopdata:1,pcpaecsm2keyexphase1boutputdata:1,pcpaecsm2keyexphase2aopdata:1,pcpaecsm2keyexphase2aoutputdata:1,pcpaecsm2keyexphase2bopdata:1,pcpaecsm2keyexphase2boutputdata:1,pcpaecsm2signopdata:1,pcpaecsm2verifyopdata:1,pcrcdata:64,pctxbuf:0,pcyinstanc:24,pcyinsthandl:1,pcysetupdata:0,pcysymop:0,pdata:[0,1,2,52,64],pdcinstanc:24,pdcinsthandl:2,pdcop:0,pdcsetupdata:0,pdecompbuff:0,pdecoutputdata:1,pdigestbuff:[0,1],pdigestresult:[0,1],pdstbuffer:[0,1],pdt:96,peak:15,pend:[31,68],per:[1,11,13,15,17,19,24,28,37,39,40,42,46,48,49,52,53,55,57,59,60,63,64,68,77,86,93,102],percentag:48,perf:99,perform:[0,2,6,7,11,12,13,14,17,19,22,24,35,36,38,40,48,49,52,53,57,63,65,66,71,85,86,89,90,92,94,96,99,100,101],perform_query_dev:49,performfermattest:1,performgcdtest:1,performlucastest:1,performopnow:[1,15,35],period:[14,15,48,49,99],peripher:[4,8,13,61,65],perman:[68,73,76,79,82],permiss:[7,19,63,68,102],permit:[1,19,37,68,99],persist:[67,71,77,96],perspect:[15,35],pf0:93,pf1:93,pf2:93,pf3:93,pf:[4,8,13,26,37,40,48,49,61,62,67,68,73,86,93,100,102],pf_addr:57,pf_bdf:93,pf_bu:93,pf_domain:93,pflatbuff:[0,1],pfto:49,phaddr:26,phase:[1,17],phashbuff:1,phkdfdata:1,phwcompbuff:0,phys_contig_alloc:[0,1],phys_contig_alloc_align:0,phys_contig_fre:0,physic:[1,2,4,8,11,13,14,15,19,26,35,37,46,47,49,52,57,61,63,73,86,93,100],pick:51,pid:[47,96],piec:99,pin:[1,15,52,99],pinstancenotificationcb:27,pipe:48,piv:1,pivbuff:1,pke0:48,pke1:48,pke2:48,pke3:48,pke4:48,pke5:48,pke:[4,13,17,48,49,74,76],pke_util:48,pkeygencb:1,pkeygentlsopdata:1,pkg:[11,98],place:[0,2,15,19,35,36,57,64,65,67,99],placement:102,plain:[1,100],plaintext:1,plane:[3,5,13,16,19,23,28,49,52],platform:[2,7,8,12,13,15,16,17,35,38,40,41,47,51,61,63,64,65,67,68,72,73,77,79,82,88,93,94,100],pleas:[0,1,2,12,85],plu:[1,35],plug:86,plugin:[11,65],pm_statu:[47,54],pmd:13,pmetadata:52,pmidleinterruptdelai:[37,54],pmidlesupport:[37,54],pmr:1,pnudcinst:24,pnumcyinst:24,pnumdcinst:24,poctetstringsecretkei:1,point:[0,2,14,15,35,49,52,64,65,96],pointer:[1,2,14,23,24,26,27,33,52,55,64],poli:65,polici:[11,73,76,96,102],poll:[0,1,2,7,13,16,17,20,35,36,39,40,42,43,55,98,99],poly1305:98,pool:24,popdata:[0,1],popen:48,popul:[0,1,14,42,64],popular:64,porgram:[8,12,17,61],port:[11,63],portnum:11,posit:[49,64,69],possibl:[0,1,7,11,14,15,24,32,37,40,49,55,63,64,67,68,73,74,76,79,82,91,93,98,101],post:64,potenti:[40,63,64,69],power:[13,14,17,24,35,46,47,50,64,69,71,77,99],powertool:11,pprime:1,pprimetestopdata:1,pprivatemetadata:[0,1],pr:[1,37],practic:[63,93],practis:64,pre:[1,39,96,98,99,103],prefer:[1,15,93,96],prefix:[1,96],premier:91,premiersupport:91,prepar:[7,84],prerequisit:[7,100],prescrib:65,presenc:[15,65],present:[0,1,2,7,14,15,21,36,60,63,64,65,73,76,88,100,102],preset:96,pressur:23,prevent:[11,13,14,35,63,71,77],previou:[0,7,15,35,47,57,64,73,76,96],previous:[2,7,35,60,68],prf:1,primari:64,prime:[65,96],prime_sampl:1,primecallback:1,primecandid:1,primep:1,primep_768:1,primeperformop:1,primit:2,print:[0,10,19,48,74,76,99],print_dbg:[0,1,2],print_err:[0,1,2],printf:93,prior:[7,11,22,32,64,68,96,99,103],prioriti:[28,35],priv:7,privat:[1,13,65],privatevaluex:1,privileg:[7,11,71,77],probabl:1,probe:63,problem:[24,33,74,76,79,82],proc:[1,49,88,100,102],proce:[80,82,98],procedur:[7,64,65,74,76],proceed:7,process:[0,1,2,4,7,10,11,13,14,15,17,19,22,24,28,30,31,32,35,36,38,46,47,49,52,53,55,59,60,63,64,65,68,71,73,74,76,79,82,86,88,93,102],processnam:32,processor:[7,14,17,41,51,63,68,71,77,102],procur:68,produc:[0,1,7,35,64,68,74,76],product:[0,4,17,44,68,90,92],profil:[37,40,65,74,76],profit:68,program:[2,4,7,8,13,61,64,71,77],programm:[0,1,4,7,10,11,14,15,17,61,64,71,74,76,77,89,90,91],progress:[19,49],project:[7,17],promin:65,promot:68,prompt:[7,10],proof:63,propag:15,proper:[1,63],properli:[68,73,76,100],properti:[15,92],proposit:65,protect:[63,64,65,71,77],protocol:[1,4,13,15,42,64,65],prototyp:1,provid:[0,1,2,7,10,15,17,19,27,32,35,37,38,48,49,52,60,61,63,64,65,68,71,77,85,93,94,98,100,102],provis:[1,24],proxi:11,proxy_password:11,proxy_serv:11,proxy_usernam:11,ps:1,psectionnam:32,psessionctxsizeinbyt:1,psessionhandl:0,psessionsetupdata:1,psrcbuffer2:0,psrcbuffer:[0,1],pswcompbuff:0,pswdigestbuff:0,pte:26,pub:[7,68,100],publicli:92,publish:92,pull:91,purpos:[2,7,36,63,68],put:48,pv:[1,4,75],pverinfo:33,pwd:[10,99],pxk:1,pyk:1,python3:[11,48],python:48,q35:102,qa:[1,10],qaememallocnuma:1,qat1:[37,64,69],qat20:[7,52,69,71,77],qat2:[23,24,37,64,65,74,76,77,85,93],qat:[3,4,6,7,8,10,12,13,16,17,19,21,26,28,31,32,36,37,38,39,40,41,43,46,48,50,51,52,54,55,56,59,60,61,64,65,66,69,70,72,74,77,79,82,83,84,85,88,91,93,94,95,96,100,103],qat_2:77,qat_4xxx:[7,10,68,73,76,100,102],qat_4xxx_0000:54,qat_4xxx_aaaa:54,qat_4xxx_mmp:[68,100],qat_895xcc:68,qat_895xcc_mmp:68,qat_:[49,64],qat_adf_ctl:7,qat_c3xxx:68,qat_c3xxx_mmp:68,qat_c62x:68,qat_c62x_mmp:68,qat_dev0:[10,19,29,40,41,49,67,74,76,86],qat_dev10:67,qat_dev11:67,qat_dev12:67,qat_dev13:67,qat_dev14:67,qat_dev15:[67,74,76],qat_dev16:67,qat_dev17:67,qat_dev18:67,qat_dev19:67,qat_dev1:[10,19,41,67],qat_dev2:[10,41,67],qat_dev3:[10,41,67],qat_dev4:[10,41,67],qat_dev5:[10,41,67],qat_dev6:[10,41,67],qat_dev7:[10,41,67,74,76],qat_dev8:[67,74,76],qat_dev9:[67,74,76],qat_dev:[19,48],qat_dev_process:[7,74,76],qat_devic:64,qat_dir:68,qat_direct:71,qat_engin:95,qat_firmwar:68,qat_init:[93,96],qat_polici:93,qat_qp_pasid:60,qat_servic:[7,10,40,41,42,49,57,67,86],qat_uio:7,qat_upstream_23:96,qate:69,qatengin:98,qatlib:[7,61,68,70,85,86,89,94,96,98,99,100,101,102,103],qatlib_bak:[96,97],qatlib_dir:96,qatmgr:[93,96,102],qatzip:[95,103],qemu:[74,76,88,102],qp:[55,60],qualifi:19,quanta:96,queri:[0,1,2,15,19,23,36,39,41,48,57,64,68],question:[71,77],queu:35,queue:[14,35,36,46,48,50,51,59],quick:[10,63],quickassist:[0,1,2,4,7,8,10,11,12,13,15,16,19,20,23,24,26,28,30,32,33,34,36,37,38,43,44,46,48,49,51,52,55,59,61,63,65,66,68,71,73,76,77,85,86,91,93,94,95],quit:48,quota:30,qz_root:99,qzcompress:99,qzdecompress:99,qzmalloc:99,r:[1,7,11,48,99,100,102],ra:[1,13,46,50,71,77],rabin:[1,96],radiat:63,ram:[11,102],random:[1,4,13,71,77,99],rang:[1,7,28,37,39,48,64,86],rapid:51,ras_correct:56,ras_fat:56,ras_uncorrect:56,ras_x:56,rate:[14,15,37,46,48,50,63,65],rate_in_sla_unit:57,ratelimit:77,rather:[0,2,15,52,63,67,74,76,86],ratio:[0,64],rb:1,rbg:[1,4],rc4:15,rc:48,rd_lat_acc_avg:48,rdk:13,re:[1,7,48,64,68,74,76,86,96],reach:[1,64,102],read:[0,1,2,26,30,31,35,37,42,48,49,52,55,71,73,74,76,77,91,102],readabl:63,readi:[7,103],readlin:11,readm:[7,8,77,96],real:[1,14,64],realiz:[35,73,76],realloc:[37,49],reap:64,reason:[26,64,73,76,102],reattach:86,reboot:[11,54,67,68,88,96,100,102],receiv:[15,35,37,49,60,64,74,76,93],recent:[65,68],recogn:102,recommend:[1,2,4,7,14,17,19,35,51,52,54,63,64,68,73,76,96],recompil:[73,76],reconfigur:[74,76],record:[1,64,65],recov:[13,49,56],recover:[19,64],recoveri:[11,35,56,64,73,76],red:13,redhat:71,redistribut:[68,71],reduc:[0,1,14,15,37,46,54,57,63,64,96],reduct:15,reenabl:67,refer:[0,1,2,3,5,7,8,10,11,12,13,14,15,17,19,32,35,37,39,40,41,47,49,52,57,61,64,65,67,68,71,73,74,76,77,79,80,82,85,86,96,98,99,100],referenc:61,refin:[74,76],reflect:[15,92],refresh:48,refresh_count:48,reg:[26,102],regardless:64,regex:93,region:[1,2,15,26,52,63,71,77,102],regist:[0,1,13,15,19,27,37,49,60,63],registr:7,regul:65,regular:0,reject:[7,64,96],rel:[14,57],relat:[0,1,2,3,20,33,40,61,68,72,74,76,78,88],relationship:2,releas:[0,6,7,9,12,18,49,52,61,62,65,70,73,74,75,81,86,87,89,91,94,101],relev:[19,68],reli:64,reliabl:[13,35,46,50,64,68,73,76],remain:[49,53,64,74,76],remaind:24,remap:20,rememb:67,remot:[11,14],remov:[0,1,5,7,11,26,52,57,64,73,76,79,82,86,88,96,99,103],repeat:[1,10,64,86],repeatedli:1,replac:[10,11,36,64],replic:64,replica:64,repo:96,reporit:[79,82],report:[19,35,49,56,64,69,98,102],repositori:[7,11,91,96,98,99,103],repres:[0,1,2,22,52,64,68],represent:[2,19],reproduc:68,req_cnt_thrshold:99,request:[0,1,2,10,13,14,16,17,19,22,23,26,28,30,35,36,43,47,48,49,51,52,53,54,55,56,63,64,69,79,82,91,92,99,102],requir:[0,1,2,5,7,10,11,14,15,19,26,33,35,37,38,40,42,48,49,56,60,63,64,65,67,68,79,82,86,91,92,93,95,96,97,98,99,101,103],resbuff:1,resend:56,reset:[13,19,20,27,37,48,54,56,60,64,68,73,79,82],resid:[0,2,19,35,52],resolut:[68,73,74,76,79,80,82],resolv:[15,56,69,72,73,77,78,79,83,101],resourc:[4,14,15,19,32,33,37,39,57,63,65,86,89,93],respect:47,respond:[49,79,82],respons:[0,1,2,7,10,13,14,15,17,19,28,30,33,35,36,47,51,53,55,64,69],response_quota:[28,30],rest:[64,65],restart:[7,19,24,30,40,41,56,67,68,73,86,88,102],restor:[0,49,56],restrict:[1,2,7,28,35,64],resubmit:[0,30,35,49,64],result:[0,1,7,14,15,19,35,49,52,63,64,68,73,92,100],resum:2,retain:2,retri:56,retriev:[15,17,23,24,28,30,33],reus:[1,16,64],rev:[41,102],revers:[65,68],review:63,revis:[3,4,6,16,33,46,60,69,71,72,77,78,83,84,94,95],rfc1952:0,rfc:[0,1,4,65],rhel9:102,rhel:[11,13,68,96,98,99,103],right:[7,14],ring:[14,15,17,23,28,30,35,36,37,40,49,55,59,63],risk:[63,64,71],rivest:[4,13,94],rlimit_memlock:102,rm:100,rmdir:7,robin:51,robinbas:1,roll:[35,71,77],rollback:71,room:1,root:[4,6,8,10,13,38,46,57,61,63,77,88,96],roughli:37,round:[1,26,35,48,51,96],router:65,routin:15,royalti:68,rp_:48,rp_num:48,rpm:95,rsa2048:98,rsa:[1,4,10,13,62,65,94],rst:5,rule:[7,96],run:[1,2,6,10,11,15,19,32,33,48,49,57,63,64,68,71,73,74,76,77,79,82,85,86,88,93,95,96,98,99,100,101],runstat:10,runtest:[10,86],runtim:[24,38,74,76],rwx:7,rx:[37,60],s:[0,1,2,4,7,8,10,11,12,14,15,17,19,24,37,38,41,49,51,54,55,61,62,65,68,71,74,76,77,79,80,82,85,86,89,90,91,92,93,96,98,99,100,101,102],safe:[7,10,65],safer:7,safeti:[2,15,35],sai:24,sal:[13,74,76],salctrl_adfservicesstartedcheck:[74,76],same:[0,1,2,7,14,15,24,40,41,49,62,64,67,74,76,79,82,86,93,96,102],sampl:[0,1,4,5,6,7,38,39,43,46,48,52,71,86,94,95,96,102],sample_buff_s:[0,1],sample_cnt:48,sample_cod:[1,4,10,71],sample_max_buff:0,sampleaddauthdata:1,samplealgchainingsrc:1,sampleassocdata:1,sampleauthkei:1,samplecipheriv:1,samplecipherkei:1,sampleciphersrc:1,samplecodeaescbcdecrypt:1,samplecygetinst:1,sampledata:0,sampledatas:0,sampledcgetinst:[0,2],sampledcstartpol:0,sampledhperformop:1,sampleecsm2decperformop:1,sampleecsm2encperformop:1,sampleecsm2generatortmultipli:1,sampleecsm2keyexperformop:1,sampleecsm2pointmultipli:1,sampleecsm2pointverifi:1,sampleecsm2signperformop:1,sampleecsm2verifyperformop:1,sampleesphdrdata:1,samplehdrdata:1,sampleiv:1,samplekei:1,samplenonc:1,samplepayload:1,sampleprimep_768:1,samplevirttophi:[0,1,2],sane:7,sapphir:51,sat:96,sata:13,satisfi:[49,64,102],save:[0,11,15,49,52,54],sbin:[7,96],scalabl:[4,8,13,17,41,46,47,51,61,68,71,77,85],scalar:1,scatter:[0,1,5,13,15,63],scatterlist:65,scenario:[0,1,35,42,49],schedul:[2,29],scheme:[1,14,51,63,77,86],sck:11,scm:[68,100],scope:11,script:[7,10,14,19,41,48,49,57,74,76,93,96],sd:0,sdevic:86,se:68,seamless:64,search:[48,64,91],second:[0,1,13,17,42,48,49,57,64,74,76,102],secret:[1,11,35],secret_label:1,secretlen:1,section:[0,1,2,4,5,7,10,11,12,14,15,17,19,22,24,27,32,34,35,38,40,41,42,43,46,48,50,52,57,63,64,66,68,71,74,76,77,85,86,91,96,98,99,100,101,102,103],secur:[1,4,7,13,35,42,46,65,71,92,94,96,97],securityparamet:1,see:[0,1,7,14,15,19,35,37,39,40,47,68,73,74,76,88,92,93,96,99,100,101,102,103],seed:[0,1,35,64],seed_label:1,seedlen:1,seek:65,seen:86,select:[0,2,15,19,23,24,35,40,66,71,77],selinux:11,sell:68,semaphor:2,semi:35,send:[1,2,19,26,35,49,52,55,63,64],sens:54,sensit:[11,65],sent:[1,2,27,35,54],separ:[1,14,15,19,38,39,41,42,48,49,55,63,86],sept:[70,101],septemb:[5,75],seq:1,sequenc:[0,1,64],seri:[1,7,17,51,64,65,68],serial:[13,15],seriou:19,serv:20,server:[1,11,63,65,77,96],server_random:1,server_write_kei:1,servic:[0,1,2,4,7,10,12,13,15,17,20,24,26,32,35,37,39,40,41,42,43,46,48,49,50,51,55,60,61,64,67,68,77,86,92,94,96,98,99,102],serviceen:40,servicesen:[10,40,48,57,86,93],servicesprofil:40,sess_siz:0,sessdirect:[0,64],session:[5,16,35,49,56,66,73,74,76,99],session_seq_start:1,sessionctx:1,sessionctxs:1,sessionhdl:0,sessionprior:[0,1],sessionsetupdata:1,sessionstatu:[0,1],sessionupdatedata:1,sessseqnum:1,sessstat:[0,64],sesstyp:0,set:[0,2,5,7,10,11,14,15,17,26,28,30,32,33,35,37,40,43,52,57,60,63,65,68,73,84,85,96,97,99,100,102],set_configuration_section_nam:98,set_crypto_small_packet_offload_threshold:98,set_epoll_timeout:98,set_instance_for_thread:98,set_internal_poll_interv:98,set_max_retry_count:98,set_path:48,setup:[0,1,7,11,66,88,98,102],sever:[0,1,2,15,35,49,64,65,103],sgl:[13,15,69],sh:[8,93,96,98,99],sha1:[1,65],sha224:65,sha256:[7,65,68,77,98],sha384:65,sha3:[65,98],sha512:[10,65],sha:[0,1,5,13,65],shake:65,shall:[64,68,73,76],shamir:[4,13,94],share:[1,7,15,17,24,57,60,64,67,71,73,77,86],shell:[7,48],shim:[39,40,49],shim_dev0_int_32:40,ship:[37,39],shorter:10,shot:64,should:[0,1,2,7,8,14,15,19,32,35,37,39,40,47,49,52,63,64,68,71,73,74,76,77,80,82,86,88,93,96,100,102],show:[0,2,19,39,47,55,64,71,86,101],shown:[0,1,2,7,26,36,40,47,48,49,64,67,92],shrink:64,shut:19,shutdown:[0,1,7,19,40,41,49,57,74,76,86,100,102],side:[1,2,63,73,76],sign:[1,7,13,65],signal:[13,15,17,63],signatur:[4,13,27,65,73,76,94],signific:[10,15],significantli:[15,64,94],signoflif:86,signstatu:1,silent:[7,96],silesia:99,silicon:[63,74,76],sim:[7,49],similar:[0,1,2,7,10,11,19,40,41,48,52,63,64,88,100,102],similarli:[0,32],similiar:40,simpl:[2,51,52,60,64],simpler:64,simplest:15,simpli:[1,42],simplic:63,simplif:64,simplifi:[0,1,36,64],simul:[7,22,25,96],simultan:[62,67],sinc:[1,15,35,49,64,96],singl:[0,1,2,4,7,8,10,13,14,15,19,22,35,37,38,39,43,46,49,51,52,53,57,60,61,63,64,77,88,93],singular:[73,76],siov:[4,8,13,47,61,71,84,85,88],site:92,situat:[15,68,73,76,102],size:[0,1,2,7,10,14,15,26,35,37,47,52,55,64,68,73,93,99],size_of_data:26,size_t:26,sizeof:[0,1],skid:35,skip:64,sku:[4,7,8,11,39,41,51,61,69,100,102],sl_dev0_int_1:42,sla:63,sla_id:57,sla_mgr:57,slab:47,sleep:[1,2,15,48,49],slice:[48,63,96],slot:[86,102],slow:[7,64,96],slt:1,sm2:[3,5,65,68,101],sm3:[1,65,68,71,77,101],sm4:[65,68,71,77,101],sm:[73,76,102],sm_on:[52,88],small:[0,15,63,64,65],smaller:[10,64,96],snapshot:64,snippet:0,snow3g:65,snow3g_uea2:1,snow3g_uia2:1,snow:[35,65],so:[0,1,2,7,10,15,17,19,37,49,54,63,64,65,71,77,79,82,86,91,93,96,102],soc:[7,13,71],socket:[1,4,11,13,14,35,51,64,68,73,79,82,88,93,100],soft:[35,102],soft_limit:102,softar:8,softwar:[0,1,2,4,6,8,10,11,12,13,16,19,20,33,35,36,37,38,40,41,49,51,53,55,56,59,61,63,64,67,68,74,76,77,85,92,98,99],sol:13,sole:68,solut:[64,65,71,94,102],some:[0,1,2,7,14,15,19,24,35,36,37,41,47,49,52,63,64,67,69,74,93,96,100,102],someth:[63,96],sometim:[7,71,96],sort:[48,64],sourc:[0,1,2,5,7,35,63,64,65,68,86,95,102],sp800:[1,4],sp:48,space:[1,13,15,19,20,22,23,24,26,29,31,33,35,36,39,40,41,42,47,49,52,55,59,60,63,65,67,69,71,77,88,94],spare:51,spawn:31,special:[35,60,68,88],specif:[0,1,2,4,7,11,12,13,15,19,20,25,35,39,55,56,60,64,67,68,71,91,92,100],specifi:[1,2,7,10,11,19,22,24,28,32,37,39,41,43,49,52,57,59,63,64,86,102],speed:[7,54,95,96],speedstep:[13,14,17],spend:2,spent:[10,15],spi:13,split:[37,43,48,93,99],spr:[71,96],spuriou:69,sr:[4,8,13,26,38,39,40,46,49,55,57,61,62,77,85,88],src:[0,1,4,10,71],srcbuffer:[0,1],srcbufferlen:[0,1],srcfile:[0,1],srclen:1,sriov:[7,86],sriov_numvf:67,ssc:[13,65],ssl0:[39,40,42],ssl:[2,4,10,13,15,32,35,37,39,41,42],ssl_combinedheads:1,ssl_dev0_int_0:42,ssl_dev0_int_1:42,ssl_dev0_int_2:42,ssl_dev0_int_3:42,ssl_dev1_int_0:42,ssl_dev1_int_1:42,ssl_dev1_int_2:42,ssl_dev1_int_3:42,ssl_dev:42,sslv3:1,stabil:[46,50],stabl:14,stack:[1,15,17,36,65,86,98],stage:64,stagnant:49,stall:15,standalon:[65,95,96,98,99],standard:[0,1,4,7,13,15,48,64,65,94,96],start:[0,1,2,8,10,12,14,15,19,24,32,40,41,47,49,52,57,64,67,68,71,73,74,76,77,79,82,86,89,90,91,96,103],startup:[49,93],stat:[7,96],state:[1,2,3,5,10,13,14,15,17,19,35,37,41,48,49,54,64,67,68,71,73,77,79,82],stateful_sampl:0,statefuldeflatedecompress:2,stateless:[2,3,5,37,64,74,76],stateless_multi_op_checksum_sampl:0,stateless_sampl:0,statelessdeflatecompress:[0,2],statelessdeflatedecompress:0,station:13,statist:[0,1,7,35,37,43,96],statu:[0,1,2,7,10,13,19,25,26,41,47,48,54,65,66,67,73,74,76,86,96,100,102],stderr:48,stdout:48,steadi:15,steer:15,step:[1,7,10,15,49,52,57,63,64,85,86,88,91,96,100,102,103],still:[2,19,32,42,49,64,80,82],stock:[4,8,61],stop:[0,1,6,19,32,40,41,64,74,76,79,82,96],storag:[13,71,77],storageen:0,store:[0,1,35,48,63,64],storm:49,str:48,strategi:64,stream:[0,1,63,64,71,73,76,96,98,99,103],strict:[1,7,68],string:[39,47,48,64,68],strong:[63,65],struct:[0,1,64],structur:[0,2,4,6,10,14,23,33,35,41,49,52,64],style:0,su:[7,10,86,96,97],sub:[4,8,59,69],sublabelflag:1,submiss:[10,13,14,17,52,64],submit:[0,1,2,10,13,14,15,17,23,35,36,37,49,52,53,64,68,73,74,76,91],subprocess:48,subscript:96,subsect:[1,91],subsequ:[0,1,15,41,47,63,64],subset:[10,40,93],subsidiari:92,substitut:68,subsystem:[7,13,31,65,86,102],success:[7,19,22,25,26,27,28,29,31,32,64],successfulli:[23,24,28,30,32,33,49,68],successor:4,sudo:[7,11,68,86,96,97,98,99,100,102,103],suffici:[1,15,52,63,74,76,102],suffix:49,suggest:[19,64],suit:[1,15,65],suitabl:[0,64],summari:15,superus:[7,10],suppli:[1,2,15,19,35,52],supplier:68,support:[0,2,4,7,8,10,12,15,17,19,20,23,24,27,32,35,37,39,40,41,46,47,48,49,52,54,56,57,61,62,67,69,72,78,79,82,85,86,88,89,93,95,96,98,101],sure:[1,2,68,73,76],suse:68,suspect:77,suspend:49,svm:[16,17,69,71,77,99],svmenabl:52,sw:[60,64,68,73,74,76,99],sw_algo_bitmap:98,swap:[11,15],swback:99,sy:[48,49,54,56,64,67,93],sym:[1,7,10,13,37,40,48,57,59,68,71,73,77,86,93,98],symdp_sampl:1,symdpcallback:1,symdpupdatesampl:[73,76],symmetr:[0,2,3,5,7,10,13,16,17,19,23,28,30,37,40,55,57,59,65,66,68,71,73,74,76,77,86,94,98,101],symoper:[0,1],symsessionwaitforinflightreq:1,sync:[0,16],synchron:[0,1,16,35,64,98],syntax:[21,22,23,24,25,26,27,28,29,30,31,32,33],sysconfig:[93,102],sysf:[47,48,54,56,68,93],syslog:[7,96],system:[1,2,4,6,7,8,10,13,14,15,17,19,21,24,28,32,33,37,38,39,46,47,52,54,55,61,63,65,67,68,72,73,77,79,82,84,85,93,95,96],systemcal:37,systemctl:[11,96],systemd:[11,96],t00:48,t0:48,t:[14,40,47,48,56,69,79,82,86,93,98,99],tabl:[1,19,26,37,39,40,42,47,63,64,65,70,71,101],tag:[1,52],tag_length:1,tail:[55,60,102],take:[1,7,10,14,28,49,63,64,67,73,76,103],taken:[63,100],talk:68,tamper:63,tape:[64,65],tar:[7,8,77],tarbal:7,target:[38,39,48,54,56],task:[7,49,96],taskset:99,tcg:[13,65],tear:[0,1],technic:[72,78],techniqu:[14,63,64],technolog:[0,1,2,4,7,8,10,11,12,13,15,16,19,20,34,38,46,49,51,52,55,59,61,63,65,66,68,71,77,85,86,92,94,95],tee:[96,97],telemeteri:48,telemetri:[46,50,54,71,73,76,77,79,82],telemetry_support:48,tell:[0,48,93],temporarili:63,tend:[15,53],term:[1,2,4,8,12,13,17,51,61,63,64,65,68],termin:[7,10,35,63],terminolog:[3,6,16,46,89],test:[35,65,71,74,76,92,93,95,103],testmod:99,testpass:1,text:[0,1,8,12,17,61,71,101],than:[0,2,7,15,24,35,36,41,49,52,64,67,69,74,86,93,96,98],theft:65,thei:[1,19,49,63,64,77,79,82,86,88],them:[7,24,49,100,102],theori:68,thereaft:[24,63],therebi:[63,64,65],therefor:[0,1,2,35,37,42,49,93],thi:[0,1,2,3,5,6,7,10,11,13,14,15,17,19,21,22,23,24,25,26,27,28,29,31,32,33,35,36,37,38,39,40,42,46,47,48,49,52,56,60,63,64,65,67,68,71,73,74,76,77,79,82,85,86,88,91,93,96,98,99,100,101,102,103],thing:[0,53],third:[1,48,71,77],thisphi:[0,1],thorough:63,those:[63,64,65,68],though:[1,35],thought:64,thrash:52,thread:[0,1,2,7,10,14,15,20,35,36,39,49,53,59,60,63,74,76,93,99],thread_count:99,thread_sleep:99,threat:46,three:[0,1,7,37,47,55,67,98],through:[0,1,2,15,19,26,48,56,64,65,67,68,71,77,84,91,93,99],throughout:64,throughput:[13,14,15,17,37,57,64,65,74,76,93],thu:[52,94],ticket:91,time:[0,1,7,10,11,13,14,15,17,22,24,32,35,39,48,49,55,63,64,68,73,74,76,79,82,85,86,96,98,99],timeout:[1,63],timeout_m:1,timer:[15,19,37,49,64,74,76],titl:[7,8,12,17,61,68,71,73,74,76,77,79,80,82],tl:[4,5,13,15,35,37,65],tl_at_payld_devtlb_hit:48,tl_at_payld_devtlb_miss:48,tlatenc:48,tls1:[71,77],tlsop:1,tlsv1:1,todai:[64,65],togeth:[1,15,17,41,47],token:64,toler:52,too:[0,2,14,15,19,35,39,64,65,68,73,76],took:64,tool:[11,48,57,63,64,68],top:[2,7,8,53,60,71,96],topic:[11,12],torn:[0,1],tort:68,tortal:7,total:[1,10,40,42,47,52,93],total_input_byt:35,touch:86,tpm:[13,65],trace:[7,96],track:[7,49,64,73,76,79,82,96],trade:[2,15,17],trademark:92,tradit:[1,2,16,22,35,65,71,77],tradition:53,traffic:[15,63,65,74,76,79,82],trailer:1,transact:[26,48,56,73,76],transceiv:13,transfer:[7,15,35,64],transform:[0,7,64],translat:[0,1,2,15,17,19,26,35,37,48,52,64,68,71,73,77],transmit:[15,36,37],transpar:[49,64],transport:[1,4,13,19,35,47,64,65],trap:68,treat:[0,64,74,76],tree:[0,7,35,61,64,68,83,85,86,89,98,99,102,103],tri:[15,31],triag:77,trigger:[49,64,65,69,73,76],truncat:1,trust:[13,63,65,71,77],tun:14,tunabl:35,tune:[15,16,17,38,95,102],tunnel:1,tupl:48,turn:[1,14,100,102],tweak:93,twice:0,two:[1,2,11,14,15,17,19,24,34,35,37,40,42,48,49,51,52,64,65,73,76,93,98,99,102],tx:[36,37,60],txt:77,type1:102,type:[0,1,2,7,10,19,22,37,39,41,48,49,55,57,64,67,73,74,76,86,93,96],typedef:27,typic:[1,2,10,19,32,35,49,52,65,93,96],ubuntu:[11,96,99,102],uc:48,ucs0:48,ucs1:48,udev:[7,49],udp:13,uea2:65,uefi:7,uerrssmshad:[74,76],uia2:65,uio:[7,10,36,63],unabl:[56,69,73,76],unalign:[14,68],unam:[11,100],unauthor:[63,71,77],unavail:[19,96],unblock:2,unbound:[2,52],unchain:[2,52],uncompress:[0,35,64],unconfigur:49,uncorrect:[56,71,77],under:[49,68,71,79,82,86,88],undergo:19,underli:[36,37,40],understood:1,underutil:15,underwai:67,undesir:63,undo:[7,96],unexpect:[69,74,76],unexpectedli:102,unifi:[4,8,13,61],uniform:[13,17,52],uninstal:[6,95,96,99],unintent:63,uniqu:[2,32,35,39,41,67,93],unit:[4,8,13,52,61,63,64,99],universal_newlin:48,unless:[14,24,96],unload:19,unnecessari:11,unopen:93,unpack:[6,8,35],unprivileg:63,unrecogn:[7,96],unrecover:[64,74,76],unrel:[0,1],unrespons:49,unset:93,unsign:22,unspecifi:19,unsupport:[0,2,64],untar:10,until:[1,2,14,15,49,53,64,74,76,79,82],untouch:49,untrust:[63,65,71,77],unus:[14,51],up:[0,1,7,10,11,14,19,31,33,35,41,48,49,51,52,55,63,64,65,67,74,76,84,85,96],updat:[5,7,12,15,26,40,48,49,52,55,57,60,61,64,65,70,72,73,74,75,77,78,79,81,83,84,85,86,91,92,96,100,101,102],update_sampl:1,upgrad:[11,96,100],upon:[2,14,36,40,96,97],upstream:7,uq:60,url:7,us:[2,3,5,7,8,10,11,16,17,19,20,22,23,24,25,26,27,28,29,31,32,33,37,38,39,40,41,42,47,48,49,51,52,53,54,55,57,59,60,61,62,63,64,65,67,69,71,77,79,82,85,88,92,93,96,98,99,100,102,103],usabl:[74,76],usag:[0,1,2,15,28,60,61,63,64,65,86,96,99],usc_util:48,usdm:[1,13,52,63],usdm_drv:[7,10,52,63],use_hard_coded_prim:7,usecas:[79,82],user:[0,1,2,6,8,12,13,14,15,17,19,20,22,24,26,27,29,31,33,35,36,40,41,42,43,49,52,59,61,63,64,65,69,71,73,74,76,77,80,82,85,86,89,94,96,97,101,102],user_4xxx_dev1:19,user_c4xxx_dev1:19,user_spac:71,userdata:52,userlabel:[1,35],usermod:[7,86,96],usernam:[7,11],userspac:7,usr:[7,10,48,68,96,98],usual:[13,14,17,88,96,100],utf:86,util:[1,16,19,29,37,41,43,44,48,52,53,57,63,68,71,73,74,76,93,98,99,102],util_ath0:48,util_ath1:48,util_ath2:48,util_ath3:48,util_ath:48,util_cph0:48,util_cph1:48,util_cph2:48,util_cph3:48,util_cph:48,util_cpr0:48,util_cpr:48,util_dcpr0:48,util_dcpr1:48,util_dcpr2:48,util_dcpr:48,util_pk:48,util_pke0:48,util_pke1:48,util_pke2:48,util_pke3:48,util_pke4:48,util_pke5:48,util_uc:48,util_ucs0:48,util_ucs1:48,util_xlt:48,utlb:48,uuid:86,v1:[0,1,4,35,98],v2:[1,71],v3:[0,4],v4:[0,4],v5:[60,67,68],v6:[52,68,93],v:[7,86,96,98,99],valid:[1,7,24,28,32,37,39,40,41,49,63,64,68,71,73,74,76,77,80,82,93],valu:[0,1,4,11,15,19,21,22,23,24,25,26,27,28,29,30,31,32,33,35,37,39,40,54,57,64,65,68,73,86,93,96,102],vari:[14,37,39,57,64,92],variabl:[1,2,7,10,11,14,15,48,64,93],varianc:14,variant:64,varieti:15,variou:[0,1,7,10,17,19,35,51,64,65,74,76],vcenter:77,vcpu:102,vdev:86,vector:[1,46],vectordata:1,vendor:[7,93,100],verbos:[7,96],veri:[1,13,15,17,64,67],verif:[2,52,64],verifi:[0,1,5,7,10,13,20,47,48,52,57,65,66,68,73,76,86,88,95,96,99,100,102,103],verifydigest:[0,1],verifyhwintegritycrc:64,verifyresult:1,verifystatu:1,versa:14,version:[0,1,2,5,7,8,9,12,18,20,47,52,61,62,64,67,69,70,75,77,79,81,82,86,87,88,91,100,101],versionfil:[8,96],versu:15,veryf:2,vf1:86,vf:[4,8,13,37,39,40,46,48,49,51,57,59,61,63,68,77,84,93,100,102],vf_addr:57,vfio:[7,36,63,68,86,93,102],vfio_dma_map:102,vfio_group:93,vfio_iommu_type1:7,vfio_map_dma:102,vfio_mdev:7,vfio_pci:[100,102],vfio_pci_cor:10,vfio_pin_pages_remot:102,vi:[86,100,102],via:[0,1,2,7,13,14,15,17,19,36,47,49,55,56,63,64,68,91,102],vice:14,view:[19,36,48,93],vim:86,virsh:[86,102],virt:86,virt_to_phi:26,virtual:[0,1,2,4,7,8,11,12,13,15,17,19,26,35,38,46,47,55,57,60,61,63,65,69,71,73,77,85,89,90,93,95,100,101],visit:[71,77],visual:57,vm:[13,26,49,67,68,74,77,86,95],vm_name:86,vmm:86,vmware:[71,77,79,82,83,89,90],vnd:[86,88],vpn:[13,64],vqat:[47,84],vs:[16,64],vt:[13,49,52,68,73,76,85,88],vulner:63,vvv:[100,102],w:[10,77],wa:[0,10,19,22,27,28,35,41,64,86,96,98,103],wai:[0,1,14,35,63,64,68,93,103],wait:[1,7,15,48,73,76],wan:[13,65],want:[15,24,26,51,88],warn:10,warranti:68,wast:[15,49],watchdog:[64,73,74,76],wc:100,we:[0,1,2,24,37,48,59,88,93,96,99,102,103],web:11,weight:[1,67],welcom:7,well:[1,10,11,12,14,26,38,61,64,65],were:[7,32,35,68,71,77,86,96],wget:[7,100],what:[0,1,19,26,48,63,68],whatev:[1,96],when:[0,1,2,7,10,14,19,23,24,26,28,31,32,37,39,40,41,42,47,48,49,52,53,55,56,60,63,64,65,67,68,71,79,82,86,88,91,93,96,98,99,100,103],whenev:54,where:[0,1,2,7,10,11,14,15,24,35,37,39,42,48,52,54,56,57,63,64,67,68,71,73,74,76,79,82,86,88,93],wherea:[0,1],wherebi:[74,76],whether:[1,7,14,35,43,48,49,64,68,102],which:[0,1,2,7,10,12,14,15,19,33,35,38,39,40,41,42,43,49,51,52,60,61,63,64,65,67,68,73,76,79,82,86,88,92,93,96,102],whichev:14,who:[4,12,63],whoami:[7,86,96,97],why:64,wide:[7,13,41,68],window:[7,10,48,77,90],windows:64,wireless:[65,73,76],wish:[4,12,64,102],within:[0,1,2,14,15,39,40,49,51,55,63,64,86,96,98,99,102,103],without:[0,1,7,14,15,19,21,23,35,41,53,57,60,64,69,71,73,76,93,98,99],word:2,work:[0,1,7,10,14,24,26,39,42,49,52,54,60,64,65,69,73,76,79,82,93],workaround:[1,68,73,74,76,79,82],workload:[4,12,15,48,54,57,64,65,74,76,79,82,93],world:[1,68],would:[0,1,7,22,35,42,63,64,102],wrapper:48,writabl:[63,71,77],write:[0,1,15,48,49,55,60,63,68,73,76,77,96,102],writeabl:63,written:[0,49,68,71],wrong:[73,76],www:[7,93],x1:1,x25519:65,x2:1,x448:65,x5:35,x86_64:[7,71,96,102],x:[1,10,15,37,39,40,48,51,52,54,57,64,67,79,82,93],xcbc:65,xcc:69,xeon:[7,17,41,51,68,77,92],xml:[86,102],xp:1,xpa:1,xpb:1,xt:65,xx:57,xxash32:64,xxh32:64,xxhash32:[64,71,77],xxhash:[74,76],xxxvf:[74,76],xxxx:[40,57],xz:[68,100],y1:1,y2:1,y:[1,10,11,88,96,98,99,103],yasm:[7,11],ye:[7,37,64,65,86,96,102],year:65,yield:[64,74,76],you:[1,7,10,14,15,19,47,64,68,71,73,74,76,86,88,96,100,102],your:[0,1,2,7,11,14,35,38,39,64,68,74,76,86,92,96,97,100,102],your_device_bdf:49,yp:1,ypa:1,ypb:1,z0:93,z_stream_:0,zalloc:52,zero:[2,11,14,15,30,49,64],zip:77,zlib1g:[11,96,99],zlib:[0,11,64,96,99],zuc:65,zxof:7,zxvf:7},titles:["Intel\u00ae QAT Data Compression API","Intel\u00ae QAT Cryptographic API","Base API and API Conventions","API Programmer\u2019s Guide","Introduction","Revision History","Getting Started Guide","Software Installation","Introduction","Revision History","Sample Applications","System Configuration","Introduction","Terminology","Application Tuning","Software Design Guidelines","Performance Optimization Guide","Introduction","Revision History","Acceleration Driver","Additional APIs","Check Device Availability APIs","Compress and Verify (CnV) Related APIs","Congestion Management APIs","Dynamic Instance Allocation Functions","Heartbeat APIs","IOMMU Remapping Functions","Device Polling APIs","Polling Functions","Reset Device Function","Service Specific Polling APIs","Thread-Less APIs","User Space Access Configuration Functions","Version Information Function","Supported APIs","Intel QuickAssist Technology APIs","Architecture","General Section","Configuration Files","Logical Instances Section","Maximum Number of Process Calculations","Configuring Multiple Intel\u00ae QuickAssist Technology Endpoints in a System","Configuring Multiple Processes on a System with Multiple Intel\u00ae QAT Endpoints","Configuration File Overview","Sample Configuration Files","Fused Operations","Programmer\u2019s Guide","Debugability","Telemetry","Heartbeat","Infrastructure","Load Balancing","Memory Management","Modes of Operation","Power Management","Queues and Queue Pairs","Reliability, Availability, and Stability (RAS)","Rate Limiting","Reset Operation","Service Instances","User Queues","About this Document","Revision History","Secure Architecture Considerations","Data Compression","Cryptographic Services","Services","Virtualization","Introduction","Release Notes - In-Tree","Revision History","Description of Release","Release Notes - Linux*","Known Issues","Resolved Issues","Revision History","Release Updates","Description of Release","Release Notes - VMware*","Known Issues","Resolved Issues","Revision History","Release Updates","Release Notes","Virtualization Deployment Guide","Introduction","Virtualization with OOT","Revision History","Host System Environment Preparation","Intel QuickAssist Technology Documentation - Hardware Version 2.0","Documentation & Resources","Contact & Support","Legal Notices & Disclaimers","Configuration and Tuning","Description","QATlib User\u2019s Guide","Installation","<no title>","Intel\u00ae QuickAssist Technology(QAT) OpenSSL* Engine","Intel\u00ae QuickAssist Technology (QAT) QATzip Library","System Requirements","Revision History","Running in a Virtual Machine (VM)","Sample Code"],titleterms:{"0":[67,79,82,89,90],"1":[51,79,82,90],"10480":[74,76],"10606":[74,76],"10966":[74,76],"10981":[74,76],"11081":[74,76],"11092":[74,76],"128":98,"12942":[74,76],"1542":[79,82],"1553":[79,82],"16":[74,76],"1618":[80,82],"16k":[74,76],"18924":[68,73,76,79,82],"192":98,"19310":[73,76],"2":[51,67,74,76,79,82,89,90],"20272":[68,73,76,79,82],"21751":[73,76],"21905":[73,76],"22999":[73,76],"23616":[74,76,79,82],"23946":[68,73,76],"24970":[68,73,76],"256":98,"28723":[73,76],"2k":98,"3":51,"3331":[74,76],"384":98,"3860":[74,76],"39335":68,"4":51,"4051":68,"45537":68,"4k":[74,76],"4s":[74,76],"7":[68,79,82],"77659":68,"8109":68,"8981":[73,76],"8k":[73,76],"9078":[74,76],"9131":[73,76],"9394":[74,76],"9501":[74,76],"9669":[74,76],"9671":[73,76],"9754":[74,76],"9755":[74,76],"9756":[74,76],"9764":[74,76],"case":1,"default":[10,37,74,76,80,82],"do":68,"final":[74,76],"function":[10,24,26,28,29,32,33,40,49,73,74,76,102],"public":[1,65],"return":[19,74,76],AT:[73,74,76,79,82],ATS:15,And:53,By:15,In:[1,69],No:64,Not:14,abl:52,about:[8,61],acceler:[7,10,19,64,71,74,76],accept:[80,82],access:32,accumul:[73,76],across:51,activ:68,addit:[20,73,76],address:[74,76,79,82],adf_ctl:19,adjust:14,ae:98,aer:56,affin:39,after:[74,76],agreement:57,algorithm:65,align:14,alloc:[1,2,19,24],an:49,api:[0,1,2,3,15,20,21,22,23,25,27,30,31,34,35,64,71,74,76,90],apic:102,appear:[68,73,76],applianc:65,applic:[7,10,14,19,49,57,63,64,65,73,74,76],apt:11,ar:[68,74,76],architectur:[36,63],asb:64,assign:67,assumpt:[71,77],asym:[74,76],asymmetr:93,async:15,asynchon:2,asynchron:[15,53],aten:37,attach:[73,76],attack:63,audienc:[4,12],authent:[65,68],auto:64,automat:[74,76],autoresetonerror:49,autoselectbesthuffmantre:[74,76],avail:[21,56,68,74,76,96],avoid:[15,64],awar:14,balanc:51,base:[2,11,48,100,102],batch:15,behavior:64,behaviour:68,benchmark:99,best:[15,64],between:[64,79,82],bio:[11,14,88,100],bkm:15,block:64,boot:[88,100,102],bottleneck:15,buffer:[2,15,52,68,73,74,76,98],bundl:55,calcul:40,call:53,can:[73,74,76],cannot:[73,76],categori:63,cbc:98,ccm:1,cento:[100,102],certain:68,chain:[0,1,93,98],chang:[74,76],check:[14,21],checksum:[64,71,74,76],cipher:[1,65,98],ciphersampl:1,clc:68,cnv:22,cnvnr:[64,68],code:[10,19,63,64,73,74,76,103],command:[48,57],common:102,compil:[7,10],compres:64,compress:[0,22,35,39,64,68,74,76,93],comput:98,con:53,concept:1,concurr:[15,37,74,76],condit:14,config:59,configur:[1,7,10,11,14,32,37,38,40,41,42,43,44,49,54,59,63,73,74,76,80,82,86,88,93,96,98,99,100,102],confirm:96,congest:23,consider:[11,37,54,63,64,93],constraint:35,consum:[68,73,76,79,82],contact:91,control:[19,48],convent:[2,8,12,17,61],copi:[15,74,76],core:[14,39],correct:[74,76],count:35,cpa_dc_wdog_timer_err:[74,76],cpa_sample_cod:[74,76,102],cpacyinstancesetnotificationcb:27,cpacykeygentlsopdata:1,cpadccompressbound:[74,76],cpadcinstancesetnotificationcb:27,cpadcresetsess:[74,76],cpadcsessionsetupdata:64,cpu:102,crash:[79,82],crc:64,creat:1,criteria:51,crypto:[15,49,93,98],cryptograph:[1,35,39,63,65],cryptographi:[1,65],current:[68,93,96],curv:1,custom:[90,93],cy:[74,76],cycl:35,d:100,data:[0,1,2,15,35,39,64,73,76],dc:[73,74,76],deb:11,debian:[100,102],debug:47,debugf:47,decompres:64,decompress:[64,73,74,76],dedupl:64,defin:[74,76],deflat:[64,74,76],demo:[7,10,48,57,86,88],denial:63,depend:[7,11],deploy:[63,67,84],dequeu:14,descript:[35,71,77,94],design:15,destin:[74,76],detach:[74,76],detail:99,detect:68,determin:[49,52],devic:[15,19,21,27,29,48,49,67,68,74,76,100],differ:64,diffi:1,digit:1,dimens:51,direct:67,disabl:[11,14,73,74,76,79,82],disclaim:92,discoveri:2,displai:93,distro:[100,102],dma:[52,63],dnf:11,document:[4,8,12,61,71,77,89,90],doe:[74,76],doesn:[68,73,76],download:68,driver:[19,47,63,68,77,79,80,82,100,102],due:[73,76],dummi:49,dure:[74,76],dynam:[24,64,74,76],e2:[74,76],ecdh:98,ecdsa:98,ellipt:1,enabl:[73,76,79,82,90,93,98],encrypt:[1,65],endpoint:[11,41,42,51,67,73,76],engin:98,enqcmd:60,enqueu:14,entri:47,environ:[49,64,88],environment:[71,77],eolb:[74,76],errata:68,error:[56,64,68,73,76,102],establish:0,etc:[74,76],event:[74,76],exampl:[19,93,99],except:64,exchang:1,execut:[10,73,74,76],expand:1,expans:64,expect:[68,73,76,79,82],extract:1,fail:[49,68,73,74,76],failur:[49,68,73,76,79,82],fals:[68,73,76],fault:[15,79,82],featur:[8,64,68,71,77,94],fedora:[100,102],field:1,file:[1,7,8,10,11,38,43,44,49,59,63,71,74,76,77],firmwar:[68,73,74,76,79,82,100],first:[73,76],flag:[7,64,74,76],flat:[2,52],flexibl:93,flight:49,flush:[64,74,76],format:[52,64],frame:64,frequenc:49,from:[96,98,99,103],full:68,fuse:45,gather:[2,52],gcm:[1,98],gen:51,gener:[1,35,37,63,73,76,90],get:6,guest:[77,86,100,102],guid:[3,6,16,46,84,95],guidelin:15,gzip:[74,76],handl:[49,64],hardwar:[60,89,90],hash:[0,1,65],heartbeat:[25,49,68,73,76,79,82],hellman:1,high:[74,76],histori:[5,9,18,62,70,75,81,87,101],hkdf:1,hmac:98,honor:[74,76],host:[68,73,76,86,88,100],huge:52,hw:64,hypervisor:[74,76],i:102,ia:[35,63],icp_sal_asymgetinflightrequest:23,icp_sal_check_all_devic:25,icp_sal_check_devic:25,icp_sal_cypollasymr:30,icp_sal_cypolldpinst:28,icp_sal_cypollinst:28,icp_sal_cypollsymr:30,icp_sal_dc_simulate_error:22,icp_sal_dcpolldpinst:28,icp_sal_dcpollinst:28,icp_sal_dp_symgetinflightrequest:23,icp_sal_find_new_devic:31,icp_sal_get_dc_error:22,icp_sal_getdevversioninfo:33,icp_sal_heartbeat_simulate_failur:25,icp_sal_iommu_get_remap_s:26,icp_sal_iommu_map:26,icp_sal_iommu_unmap:26,icp_sal_poll_device_ev:[27,31],icp_sal_pollallbank:28,icp_sal_pollbank:28,icp_sal_reset_devic:29,icp_sal_symgetinflightrequest:23,icp_sal_usercyfreeinst:24,icp_sal_usercygetavailablenumdyninst:24,icp_sal_usercygetavailablenumdyninstancesbydevpkg:24,icp_sal_usercygetavailablenumdyninstancesbypkgaccel:24,icp_sal_usercyinstancesalloc:24,icp_sal_usercyinstancesallocbydevpkg:24,icp_sal_usercyinstancesallocbypkgaccel:24,icp_sal_userdcfreeinst:24,icp_sal_userdcgetavailablenumdyninst:24,icp_sal_userdcgetavailablenumdyninstancesbydevpkg:24,icp_sal_userdcinstancesalloc:24,icp_sal_userdcinstancesallocbydevpkg:24,icp_sal_userisqatavail:21,icp_sal_userstart:32,icp_sal_userstop:32,id:49,implement:8,incompat:[79,82],incorpor:49,incorrect:[73,76,80,82],incorrectli:[74,76],increas:40,inform:[33,71,77],infrastructur:50,initi:[1,49],inject:[68,73,76],instal:[7,11,85,86,88,96,98,99,103],instanc:[1,2,14,24,39,40,59,68],instruct:[60,100,102],integr:64,intel:[0,1,2,14,15,17,35,41,42,47,49,64,67,71,86,89,98,99,100],intend:[4,12],intent:63,intern:[74,76],interrupt:[15,53],interv:14,introduct:[4,8,12,17,65,68,85],invalid:[40,74,76],iommu:[26,68,73,76,79,82],iov:[67,74,76,86,100],ipsec:[1,65,98],issu:[68,73,74,76,79,80,82,102],item:59,kei:[1,35,63,65,98],kernel:[39,47,52,68,88,100,102],known:[15,68,73,76,79,82],label:1,latenc:[73,76],layout:68,legaci:[79,82],legal:92,length:[74,76],less:31,level:[14,48,57,64],librari:[74,76,98,99],licens:[68,71],like:1,limit:[35,57,64,71,77,94],linux:[19,68,71,72,100,102],list:[2,8,15,52,71,77],load:[10,51,74,76],locat:100,log:64,logic:39,lz4:[64,73,74,76],machin:[68,102],mai:[68,73,74,76,79,80,82],malici:63,manag:[23,37,52,54,57,60,93],manual:90,mask:[1,80,82],maxim:15,maximum:[15,40,64],mcc:[68,73,76,79,82],mechan:63,memori:[1,2,14,19,37,47,52,74,76,79,82],method:15,mgf:1,miss:[73,76],mitig:63,mode:[2,15,53,68,93],model:[2,63,67],modif:63,modul:68,monitor:[48,49],more:[68,73,76,79,82],multi:[14,64,74,76,98],multipl:[0,41,42],non:7,note:[69,72,78,83],notic:92,numa:14,number:[1,15,40,67,71,74,76],o:102,observ:[68,73,76,79,82,102],occur:[68,73,74,76],onli:[49,93],oot:86,openssl:98,oper:[0,1,2,11,15,19,45,49,53,58,71,73,74,76],optim:[14,16,74,76],option:[7,96,102],os:[88,102],out:1,output:[74,76],overflow:[64,73,74,76],overview:[0,1,7,17,35,43,47,85],ownership:2,p:98,packag:[8,11,71,77,88,96,98,99,103],packet:49,page:[15,52,73,76],pair:[48,55],paramet:[10,14,37,39,74,76,88,100,102],partial:[1,15],pasid:60,pass:86,passthrough:68,payload:[14,19,74,76],pcie:68,per:[51,67],perform:[1,10,15,16,37,64,73,74,76,93],pf:[74,76],physic:[40,67,74,76],pin:102,place:1,plane:[0,1,2,15,35,64],platform:[14,71,74,76],point:1,polici:93,poll:[14,15,27,28,30,49,53],posit:[68,73,76],potenti:[68,73,76],power:[37,54,68,73,76,79,82],pr:[73,76],prepar:88,prime:1,prioriti:1,privileg:63,pro:53,process:[39,40,42],programm:[3,46],properti:64,proxi:65,qae_mem_dbg:47,qae_mem_slab:47,qat1:68,qat20:[68,73,74,76,79,82],qat:[0,1,2,11,14,15,35,42,47,49,63,67,68,71,73,76,86,98,99,102],qat_:47,qat_engin:98,qat_hw:98,qat_servic:19,qat_sw:98,qate20:[73,74,76],qate:68,qatlib:95,qatzip:99,queri:47,queue:[55,60],quickassist:[14,17,35,41,47,64,89,98,99],r:98,ra:56,rate:57,read:[47,63],recommend:15,recov:64,reduc:67,reduct:35,refer:[4,90],relat:[4,22,71,77],releas:[8,68,69,71,72,76,77,78,82,83,90],reliabl:56,remap:26,report:[68,73,74,76],request:[15,37,68,73,74,76],requir:[52,73,74,76,88,100],reset:[29,49,58,74,76],resolv:[68,74,76,80,82],resourc:90,respons:[49,68,73,76],restart:[49,74,76],result:[10,74,76],reus:15,revis:[5,9,18,62,70,75,81,87,101],rhel:[100,102],ring:48,rlt_errlog:[74,76],root:[7,67],rpm:[11,96],rsa2k:98,rsa:98,run:[7,102,103],s:[3,46,60,64,67,95],sampl:[10,44,73,74,76,103],scalabl:[67,93],scatter:[2,52],scheme:71,section:[37,39],secur:[11,63],select:[14,48,64],semant:53,sequenc:49,servic:[14,19,30,57,59,63,65,66,73,74,76,80,82,93],servicesen:37,servicesprofil:37,session:[0,1,15,64],set:[1,39,64,74,76,86,88,93],setup:64,sgl:[52,68],sha1:98,sha256:71,share:[37,51,52,74,76,79,82],signatur:[1,49],signoflif:10,simul:49,singl:67,siov:86,size:[74,76],sku:[68,73,76,79,82],sla:57,slice:[73,76],sm2:1,socket:[74,76],softwar:[7,15,17,60,71,86],some:[68,73,76,79,82],sourc:[74,76,96,98,99,103],space:[10,32,68],specif:[30,63],speed:98,spuriou:[68,73,76,79,82],sr:[67,74,76,86,100],sriov:[74,76],ssl:[1,65],stabil:56,standalon:93,start:[6,7,102],state:[0,74,76],stateless:0,statu:[49,64],stop:7,storag:[64,65],stress:14,structur:[1,8,74,76],sub:68,sublabel:1,submiss:15,support:[1,34,64,65,68,71,73,74,76,77,91,100],svm:[15,37,52,68,73,74,76,79,82],svmenabl:37,sy:47,sym:[74,76],sym_dp_update_sampl:[73,76],symcallback:1,symmetr:[1,15,93],sync:15,synchron:[2,15,53],sysf:64,system:[11,41,42,49,71,74,76,88,100,102],t:[68,73,76],technic:[71,77],technolog:[14,17,35,41,47,64,89,98,99],telemetri:48,terminolog:[4,8,12,13,17,61,63],test:[1,10,49,98,99],text:48,than:[68,73,76,79,82],thi:[4,8,12,61],thread:31,threat:63,through:86,timeout:[73,74,76],tl:1,todo:[47,88],tradit:[15,64],translat:[74,76,79,82],treat:[80,82],tree:69,trigger:68,tune:[14,93],type:[52,56,102],unabl:68,under:[14,74,76],unexpect:68,uninstal:[7,103],unit:57,unpack:7,up:86,updat:[1,11,71,76,82,88],us:[0,1,4,12,14,15,35,68,73,74,76,86],usag:[19,26,35,48,54,56],user:[7,10,32,39,60,68,95],util:[15,86],valu:[48,49,74,76],variat:40,vector:63,verif:1,verifi:[22,64,98],version:[33,68,71,89,90,96],vf:[67,73,74,76,86],via:59,view:60,viommu:[79,82],virt:[73,76],virtual:[37,40,49,52,64,67,68,74,76,79,82,84,86,88,102],vm:[73,76,79,82,102],vmware:78,vpn:65,vqat:86,vqat_ctl:86,vqq:[79,80,82],vs:15,vt:100,wan:64,web:65,when:[15,35,73,74,76,102],without:68,work:68,write:47,x25519:98,x:90,xcc:[68,73,76,79,82],xxhash32:[73,74,76],xxxxx:39}}) \ No newline at end of file

                    002

                    003

                    Updated for qatlib 23.11 release. +Added: - Support DC NS (NoSession) APIs. +- Support DC compressBound APIs. +- Support Symmetric Crypto SM3 & SM4. +- Support Asymmetric Crypto SM2. +- Bug Fixes. See Resolved Issues. +- Added “Running in a Virtual Machine” section.

                    Nov 2023

                    002

                    Updated for qatlib 23.08 release. Updated qatlib configuration to include full possibilities, updated text of Performance Considerations. Added “Kernel/OS Requirements” table to Requirements section.

                    Sept 2023

                    001

                    001

                    Added “Kernel/OS Requirements” table to Requirements section. See

                    June 2023