Hi Fan, > Subject: [dpdk-dev v9 3/4] test/crypto: add unit-test for cryptodev direct > APIs > > This patch adds the QAT test to use cryptodev symmetric crypto > direct APIs. > > Signed-off-by: Fan Zhang <roy.fan.zh...@intel.com> > --- > app/test/test_cryptodev.c | 461 +++++++++++++++++++++++--- > app/test/test_cryptodev.h | 7 + > app/test/test_cryptodev_blockcipher.c | 51 ++- > 3 files changed, 456 insertions(+), 63 deletions(-) > > diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c > index 70bf6fe2c..13f642e0e 100644 > --- a/app/test/test_cryptodev.c > +++ b/app/test/test_cryptodev.c > @@ -49,6 +49,8 @@ > #define VDEV_ARGS_SIZE 100 > #define MAX_NB_SESSIONS 4 > > +#define MAX_DRV_SERVICE_CTX_SIZE 256 > + > #define IN_PLACE 0 > #define OUT_OF_PLACE 1 > > @@ -57,6 +59,8 @@ static int gbl_driver_id; > static enum rte_security_session_action_type gbl_action_type = > RTE_SECURITY_ACTION_TYPE_NONE; > > +int cryptodev_dp_test; > +
Why do we need this? We should make decision based on Feature flag of crypto device. > struct crypto_testsuite_params { > struct rte_mempool *mbuf_pool; > struct rte_mempool *large_mbuf_pool; > @@ -147,6 +151,182 @@ ceil_byte_length(uint32_t num_bits) > return (num_bits >> 3); > } > > +void > +process_sym_hw_api_op(uint8_t dev_id, uint16_t qp_id, struct rte_crypto_op > *op, > + uint8_t is_cipher, uint8_t is_auth, uint8_t len_in_bits, > + uint8_t cipher_iv_len) > +{ > + int32_t n; > + struct rte_crypto_sym_op *sop; > + struct rte_crypto_op *ret_op = NULL; > + struct rte_crypto_vec data_vec[UINT8_MAX]; > + union rte_crypto_sym_additional_data a_data; > + union rte_crypto_sym_ofs ofs; > + int32_t status; > + uint32_t max_len; > + union rte_cryptodev_session_ctx sess; > + enum rte_crypto_dp_service service_type; > + uint32_t count = 0; > + uint8_t service_data[MAX_DRV_SERVICE_CTX_SIZE] = {0}; > + struct rte_crypto_dp_service_ctx *ctx = (void *)service_data; > + uint32_t cipher_offset = 0, cipher_len = 0, auth_offset = 0, > + auth_len = 0; > + int ctx_service_size; > + > + sop = op->sym; > + > + sess.crypto_sess = sop->session; > + > + if (is_cipher && is_auth) { > + service_type = RTE_CRYPTO_DP_SYM_CHAIN; > + cipher_offset = sop->cipher.data.offset; > + cipher_len = sop->cipher.data.length; > + auth_offset = sop->auth.data.offset; > + auth_len = sop->auth.data.length; > + max_len = RTE_MAX(cipher_offset + cipher_len, > + auth_offset + auth_len); > + } else if (is_cipher) { > + service_type = RTE_CRYPTO_DP_SYM_CIPHER_ONLY; > + cipher_offset = sop->cipher.data.offset; > + cipher_len = sop->cipher.data.length; > + max_len = cipher_len + cipher_offset; > + } else if (is_auth) { > + service_type = RTE_CRYPTO_DP_SYM_AUTH_ONLY; > + auth_offset = sop->auth.data.offset; > + auth_len = sop->auth.data.length; > + max_len = auth_len + auth_offset; > + } else { /* aead */ > + service_type = RTE_CRYPTO_DP_SYM_AEAD; > + cipher_offset = sop->aead.data.offset; > + cipher_len = sop->aead.data.length; > + max_len = cipher_len + cipher_offset; > + } > + > + if (len_in_bits) { > + max_len = max_len >> 3; > + cipher_offset = cipher_offset >> 3; > + auth_offset = auth_offset >> 3; > + cipher_len = cipher_len >> 3; > + auth_len = auth_len >> 3; > + } > + > + ctx_service_size = rte_cryptodev_dp_get_service_ctx_data_size(dev_id); > + assert(ctx_service_size <= MAX_DRV_SERVICE_CTX_SIZE && > + ctx_service_size > 0); > + > + if (rte_cryptodev_dp_configure_service(dev_id, qp_id, service_type, > + RTE_CRYPTO_OP_WITH_SESSION, sess, ctx, 0) < 0) { > + op->status = RTE_CRYPTO_OP_STATUS_ERROR; > + return; > + } **_dp_configure_service does not provide context of the API. What does service mean here? Can we rename it to rte_cryptodev_configure_raw_dp? This gives better readability to have an API to configure crypto device for raw data path. > + > + /* test update service */ > + if (rte_cryptodev_dp_configure_service(dev_id, qp_id, service_type, > + RTE_CRYPTO_OP_WITH_SESSION, sess, ctx, 1) < 0) { Do we really need an extra parameter to specify update? Can we not call again same API for update? Anyway the implementation will be copying the complete information from the sess. > + op->status = RTE_CRYPTO_OP_STATUS_ERROR; > + return; > + } > + > + n = rte_crypto_mbuf_to_vec(sop->m_src, 0, max_len, > + data_vec, RTE_DIM(data_vec)); > + if (n < 0 || n > sop->m_src->nb_segs) { > + op->status = RTE_CRYPTO_OP_STATUS_ERROR; > + return; > + } > + > + ofs.raw = 0; > + > + switch (service_type) { > + case RTE_CRYPTO_DP_SYM_AEAD: > + ofs.ofs.cipher.head = cipher_offset; > + ofs.ofs.cipher.tail = max_len - cipher_offset - cipher_len; > + a_data.aead.iv_ptr = rte_crypto_op_ctod_offset(op, void *, > + IV_OFFSET); > + a_data.aead.iv_iova = rte_crypto_op_ctophys_offset(op, > + IV_OFFSET); > + a_data.aead.aad_ptr = (void *)sop->aead.aad.data; > + a_data.aead.aad_iova = sop->aead.aad.phys_addr; > + a_data.aead.digest_ptr = (void *)sop->aead.digest.data; > + a_data.aead.digest_iova = sop->aead.digest.phys_addr; > + break; > + case RTE_CRYPTO_DP_SYM_CIPHER_ONLY: > + ofs.ofs.cipher.head = cipher_offset; > + ofs.ofs.cipher.tail = max_len - cipher_offset - cipher_len; > + a_data.cipher_auth.cipher_iv_ptr = rte_crypto_op_ctod_offset( > + op, void *, IV_OFFSET); > + a_data.cipher_auth.cipher_iv_iova = > + rte_crypto_op_ctophys_offset(op, IV_OFFSET); > + break; > + case RTE_CRYPTO_DP_SYM_AUTH_ONLY: > + ofs.ofs.auth.head = auth_offset; > + ofs.ofs.auth.tail = max_len - auth_offset - auth_len; > + a_data.cipher_auth.auth_iv_ptr = rte_crypto_op_ctod_offset( > + op, void *, IV_OFFSET + cipher_iv_len); > + a_data.cipher_auth.auth_iv_iova = > + rte_crypto_op_ctophys_offset(op, IV_OFFSET + > + cipher_iv_len); > + a_data.cipher_auth.digest_ptr = (void *)sop->auth.digest.data; > + a_data.cipher_auth.digest_iova = sop->auth.digest.phys_addr; > + break; > + case RTE_CRYPTO_DP_SYM_CHAIN: > + ofs.ofs.cipher.head = cipher_offset; > + ofs.ofs.cipher.tail = max_len - cipher_offset - cipher_len; > + ofs.ofs.auth.head = auth_offset; > + ofs.ofs.auth.tail = max_len - auth_offset - auth_len; > + a_data.cipher_auth.cipher_iv_ptr = rte_crypto_op_ctod_offset( > + op, void *, IV_OFFSET); > + a_data.cipher_auth.cipher_iv_iova = > + rte_crypto_op_ctophys_offset(op, IV_OFFSET); > + a_data.cipher_auth.auth_iv_ptr = rte_crypto_op_ctod_offset( > + op, void *, IV_OFFSET + cipher_iv_len); > + a_data.cipher_auth.auth_iv_iova = > + rte_crypto_op_ctophys_offset(op, IV_OFFSET + > + cipher_iv_len); > + a_data.cipher_auth.digest_ptr = (void *)sop->auth.digest.data; > + a_data.cipher_auth.digest_iova = sop->auth.digest.phys_addr; Instead of cipher_auth, it should be chain. Can we also support "hash then cipher" case also? > + break; > + default: > + break; > + } > + > + status = rte_cryptodev_dp_sym_submit_single_job(ctx, data_vec, n, ofs, > + &a_data, (void *)op); > + if (status < 0) { > + op->status = RTE_CRYPTO_OP_STATUS_ERROR; > + return; > + } > + > + status = rte_cryptodev_dp_sym_submit_done(ctx, 1); > + if (status < 0) { > + op->status = RTE_CRYPTO_OP_STATUS_ERROR; > + return; > + } > + > + > + status = -1; > + while (count++ < 65535 && status == -1) { > + status = rte_cryptodev_dp_sym_dequeue_single_job(ctx, > + (void **)&ret_op); > + if (status == -1) > + rte_pause(); > + } > + > + if (status != -1) { > + if (rte_cryptodev_dp_sym_dequeue_done(ctx, 1) < 0) { > + op->status = RTE_CRYPTO_OP_STATUS_ERROR; > + return; > + } > + } > + > + if (count == 65536 || status != 1 || ret_op != op) { Remove hardcode 65536 > + op->status = RTE_CRYPTO_OP_STATUS_ERROR; > + return; > + } > + > + op->status = status == 1 ? RTE_CRYPTO_OP_STATUS_SUCCESS : > + RTE_CRYPTO_OP_STATUS_ERROR; > +} > + > static void > process_cpu_aead_op(uint8_t dev_id, struct rte_crypto_op *op) > { > @@ -1656,6 +1836,9 @@ > test_AES_CBC_HMAC_SHA512_decrypt_perform(struct > rte_cryptodev_sym_session *sess, > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_crypt_auth_op(ts_params->valid_devs[0], > ut_params->op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 0, 0); Can we rename process_sym_hw_api_op to process_sym_hw_raw_op? > else > TEST_ASSERT_NOT_NULL( > process_crypto_request(ts_params- > >valid_devs[0], > @@ -1710,12 +1893,18 @@ test_AES_cipheronly_all(void) > static int > test_AES_docsis_all(void) > { > + /* Data-path service does not support DOCSIS yet */ > + if (cryptodev_dp_test) > + return -ENOTSUP; > return test_blockcipher(BLKCIPHER_AES_DOCSIS_TYPE); > } > > static int > test_DES_docsis_all(void) > { > + /* Data-path service does not support DOCSIS yet */ > + if (cryptodev_dp_test) > + return -ENOTSUP; > return test_blockcipher(BLKCIPHER_DES_DOCSIS_TYPE); > } > > @@ -2470,7 +2659,11 @@ test_snow3g_authentication(const struct > snow3g_hash_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 1, 0); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > ut_params->obuf = ut_params->op->sym->m_src; > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > @@ -2549,7 +2742,11 @@ test_snow3g_authentication_verify(const struct > snow3g_hash_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 1, 0); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > ut_params->obuf = ut_params->op->sym->m_src; > @@ -2619,6 +2816,9 @@ test_kasumi_authentication(const struct > kasumi_hash_test_data *tdata) > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_crypt_auth_op(ts_params->valid_devs[0], > ut_params->op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 1, 0); > else > ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > @@ -2690,7 +2890,11 @@ test_kasumi_authentication_verify(const struct > kasumi_hash_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 1, 0); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > ut_params->obuf = ut_params->op->sym->m_src; > @@ -2897,8 +3101,12 @@ test_kasumi_encryption(const struct > kasumi_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > - ut_params->op); > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 0, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > + ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > ut_params->obuf = ut_params->op->sym->m_dst; > @@ -2983,7 +3191,11 @@ test_kasumi_encryption_sgl(const struct > kasumi_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 0, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > @@ -3026,8 +3238,9 @@ test_kasumi_encryption_oop(const struct > kasumi_test_data *tdata) > struct rte_cryptodev_sym_capability_idx cap_idx; > cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; > cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; > + /* Data-path service does not support OOP */ > if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], > - &cap_idx) == NULL) > + &cap_idx) == NULL || cryptodev_dp_test) > return -ENOTSUP; > > /* Create KASUMI session */ > @@ -3107,8 +3320,9 @@ test_kasumi_encryption_oop_sgl(const struct > kasumi_test_data *tdata) > struct rte_cryptodev_sym_capability_idx cap_idx; > cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; > cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; > + /* Data-path service does not support OOP */ > if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], > - &cap_idx) == NULL) > + &cap_idx) == NULL || cryptodev_dp_test) > return -ENOTSUP; > > rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); > @@ -3192,8 +3406,9 @@ test_kasumi_decryption_oop(const struct > kasumi_test_data *tdata) > struct rte_cryptodev_sym_capability_idx cap_idx; > cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; > cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_KASUMI_F8; > + /* Data-path service does not support OOP */ > if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], > - &cap_idx) == NULL) > + &cap_idx) == NULL || cryptodev_dp_test) > return -ENOTSUP; > > /* Create KASUMI session */ > @@ -3306,7 +3521,11 @@ test_kasumi_decryption(const struct > kasumi_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 0, 1, 0); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > @@ -3381,7 +3600,11 @@ test_snow3g_encryption(const struct > snow3g_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 0, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > @@ -3419,7 +3642,7 @@ test_snow3g_encryption_oop(const struct > snow3g_test_data *tdata) > cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; > cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; > if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], > - &cap_idx) == NULL) > + &cap_idx) == NULL || cryptodev_dp_test) > return -ENOTSUP; > > /* Create SNOW 3G session */ > @@ -3502,7 +3725,7 @@ test_snow3g_encryption_oop_sgl(const struct > snow3g_test_data *tdata) > cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; > cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; > if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], > - &cap_idx) == NULL) > + &cap_idx) == NULL || cryptodev_dp_test) > return -ENOTSUP; > > rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); > @@ -3621,7 +3844,7 @@ test_snow3g_encryption_offset_oop(const struct > snow3g_test_data *tdata) > cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; > cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; > if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], > - &cap_idx) == NULL) > + &cap_idx) == NULL || cryptodev_dp_test) > return -ENOTSUP; > > /* Create SNOW 3G session */ > @@ -3756,7 +3979,11 @@ static int test_snow3g_decryption(const struct > snow3g_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 0, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > ut_params->obuf = ut_params->op->sym->m_dst; > @@ -3791,7 +4018,7 @@ static int test_snow3g_decryption_oop(const struct > snow3g_test_data *tdata) > cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; > cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_SNOW3G_UEA2; > if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], > - &cap_idx) == NULL) > + &cap_idx) == NULL || cryptodev_dp_test) > return -ENOTSUP; > > /* Create SNOW 3G session */ > @@ -3924,7 +4151,11 @@ test_zuc_cipher_auth(const struct > wireless_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > ut_params->obuf = ut_params->op->sym->m_src; > @@ -4019,7 +4250,11 @@ test_snow3g_cipher_auth(const struct > snow3g_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > ut_params->obuf = ut_params->op->sym->m_src; > @@ -4087,6 +4322,8 @@ test_snow3g_auth_cipher(const struct > snow3g_test_data *tdata, > printf("Device doesn't support digest encrypted.\n"); > return -ENOTSUP; > } > + if (cryptodev_dp_test) > + return -ENOTSUP; > } > > /* Create SNOW 3G session */ > @@ -4155,7 +4392,11 @@ test_snow3g_auth_cipher(const struct > snow3g_test_data *tdata, > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > @@ -4266,6 +4507,8 @@ test_snow3g_auth_cipher_sgl(const struct > snow3g_test_data *tdata, > return -ENOTSUP; > } > } else { > + if (cryptodev_dp_test) > + return -ENOTSUP; > if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) > { > printf("Device doesn't support out-of-place scatter- > gather " > "in both input and output mbufs.\n"); > @@ -4344,7 +4587,11 @@ test_snow3g_auth_cipher_sgl(const struct > snow3g_test_data *tdata, > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > @@ -4453,6 +4700,8 @@ test_kasumi_auth_cipher(const struct > kasumi_test_data *tdata, > uint64_t feat_flags = dev_info.feature_flags; > > if (op_mode == OUT_OF_PLACE) { > + if (cryptodev_dp_test) > + return -ENOTSUP; > if (!(feat_flags & RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED)) { > printf("Device doesn't support digest encrypted.\n"); > return -ENOTSUP; > @@ -4526,7 +4775,11 @@ test_kasumi_auth_cipher(const struct > kasumi_test_data *tdata, > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > @@ -4638,6 +4891,8 @@ test_kasumi_auth_cipher_sgl(const struct > kasumi_test_data *tdata, > return -ENOTSUP; > } > } else { > + if (cryptodev_dp_test) > + return -ENOTSUP; > if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) > { > printf("Device doesn't support out-of-place scatter- > gather " > "in both input and output mbufs.\n"); > @@ -4716,7 +4971,11 @@ test_kasumi_auth_cipher_sgl(const struct > kasumi_test_data *tdata, > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > @@ -4857,7 +5116,11 @@ test_kasumi_cipher_auth(const struct > kasumi_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > @@ -4944,7 +5207,11 @@ test_zuc_encryption(const struct wireless_test_data > *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 0, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > @@ -5031,7 +5298,11 @@ test_zuc_encryption_sgl(const struct > wireless_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 0, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > @@ -5119,7 +5390,11 @@ test_zuc_authentication(const struct > wireless_test_data *tdata) > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 1, 0); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > ut_params->obuf = ut_params->op->sym->m_src; > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > @@ -5177,6 +5452,8 @@ test_zuc_auth_cipher(const struct wireless_test_data > *tdata, > return -ENOTSUP; > } > } else { > + if (cryptodev_dp_test) > + return -ENOTSUP; > if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) > { > printf("Device doesn't support out-of-place scatter- > gather " > "in both input and output mbufs.\n"); > @@ -5251,7 +5528,11 @@ test_zuc_auth_cipher(const struct > wireless_test_data *tdata, > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > @@ -5359,6 +5640,8 @@ test_zuc_auth_cipher_sgl(const struct > wireless_test_data *tdata, > return -ENOTSUP; > } > } else { > + if (cryptodev_dp_test) > + return -ENOTSUP; > if (!(feat_flags & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)) > { > printf("Device doesn't support out-of-place scatter- > gather " > "in both input and output mbufs.\n"); > @@ -5437,7 +5720,11 @@ test_zuc_auth_cipher_sgl(const struct > wireless_test_data *tdata, > if (retval < 0) > return retval; > > - ut_params->op = process_crypto_request(ts_params->valid_devs[0], > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 1, tdata->cipher_iv.len); > + else > + ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > @@ -5580,6 +5867,9 @@ test_kasumi_decryption_test_case_2(void) > static int > test_kasumi_decryption_test_case_3(void) > { > + /* rte_crypto_mbuf_to_vec does not support incomplete mbuf build */ > + if (cryptodev_dp_test) > + return -ENOTSUP; > return test_kasumi_decryption(&kasumi_test_case_3); > } > > @@ -5779,6 +6069,9 @@ test_snow3g_auth_cipher_part_digest_enc_oop(void) > static int > test_snow3g_auth_cipher_test_case_3_sgl(void) > { > + /* rte_crypto_mbuf_to_vec does not support incomplete mbuf build */ > + if (cryptodev_dp_test) > + return -ENOTSUP; > return test_snow3g_auth_cipher_sgl( > &snow3g_auth_cipher_test_case_3, IN_PLACE, 0); > } > @@ -5793,6 +6086,9 @@ test_snow3g_auth_cipher_test_case_3_oop_sgl(void) > static int > test_snow3g_auth_cipher_part_digest_enc_sgl(void) > { > + /* rte_crypto_mbuf_to_vec does not support incomplete mbuf build */ > + if (cryptodev_dp_test) > + return -ENOTSUP; > return test_snow3g_auth_cipher_sgl( > &snow3g_auth_cipher_partial_digest_encryption, > IN_PLACE, 0); > @@ -6146,10 +6442,9 @@ test_mixed_auth_cipher(const struct > mixed_cipher_auth_test_data *tdata, > unsigned int ciphertext_len; > > struct rte_cryptodev_info dev_info; > - struct rte_crypto_op *op; > > /* Check if device supports particular algorithms separately */ > - if (test_mixed_check_if_unsupported(tdata)) > + if (test_mixed_check_if_unsupported(tdata) || cryptodev_dp_test) > return -ENOTSUP; > > rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); > @@ -6161,6 +6456,9 @@ test_mixed_auth_cipher(const struct > mixed_cipher_auth_test_data *tdata, > return -ENOTSUP; > } > > + if (op_mode == OUT_OF_PLACE) > + return -ENOTSUP; > + > /* Create the session */ > if (verify) > retval = create_wireless_algo_cipher_auth_session( > @@ -6192,9 +6490,11 @@ test_mixed_auth_cipher(const struct > mixed_cipher_auth_test_data *tdata, > /* clear mbuf payload */ > memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0, > rte_pktmbuf_tailroom(ut_params->ibuf)); > - if (op_mode == OUT_OF_PLACE) > + if (op_mode == OUT_OF_PLACE) { > + > memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0, > rte_pktmbuf_tailroom(ut_params->obuf)); > + } Unnecessary change. > > ciphertext_len = ceil_byte_length(tdata->ciphertext.len_bits); > plaintext_len = ceil_byte_length(tdata->plaintext.len_bits); > @@ -6235,18 +6535,17 @@ test_mixed_auth_cipher(const struct > mixed_cipher_auth_test_data *tdata, > if (retval < 0) > return retval; > > - op = process_crypto_request(ts_params->valid_devs[0], > + ut_params->op = process_crypto_request(ts_params->valid_devs[0], > ut_params->op); > > /* Check if the op failed because the device doesn't */ > /* support this particular combination of algorithms */ > - if (op == NULL && ut_params->op->status == > + if (ut_params->op == NULL && ut_params->op->status == > RTE_CRYPTO_OP_STATUS_INVALID_SESSION) { > printf("Device doesn't support this mixed combination. " > "Test Skipped.\n"); > return -ENOTSUP; > } > - ut_params->op = op; Unnecessary change > > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > @@ -6337,10 +6636,9 @@ test_mixed_auth_cipher_sgl(const struct > mixed_cipher_auth_test_data *tdata, > uint8_t digest_buffer[10000]; > > struct rte_cryptodev_info dev_info; > - struct rte_crypto_op *op; > > /* Check if device supports particular algorithms */ > - if (test_mixed_check_if_unsupported(tdata)) > + if (test_mixed_check_if_unsupported(tdata) || cryptodev_dp_test) > return -ENOTSUP; > > rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); > @@ -6440,20 +6738,18 @@ test_mixed_auth_cipher_sgl(const struct > mixed_cipher_auth_test_data *tdata, > if (retval < 0) > return retval; > > - op = process_crypto_request(ts_params->valid_devs[0], > + ut_params->op = process_crypto_request(ts_params->valid_devs[0], > ut_params->op); > > /* Check if the op failed because the device doesn't */ > /* support this particular combination of algorithms */ > - if (op == NULL && ut_params->op->status == > + if (ut_params->op == NULL && ut_params->op->status == > RTE_CRYPTO_OP_STATUS_INVALID_SESSION) { > printf("Device doesn't support this mixed combination. " > "Test Skipped.\n"); > return -ENOTSUP; > } Unnecessary change > > - ut_params->op = op; > - > TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf"); > > ut_params->obuf = (op_mode == IN_PLACE ? > @@ -7043,6 +7339,9 @@ test_authenticated_encryption(const struct > aead_test_data *tdata) > /* Process crypto operation */ > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_aead_op(ts_params->valid_devs[0], ut_params- > >op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 0, 0, 0); > else > TEST_ASSERT_NOT_NULL( > process_crypto_request(ts_params->valid_devs[0], > @@ -8540,6 +8839,9 @@ test_authenticated_decryption(const struct > aead_test_data *tdata) > /* Process crypto operation */ > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_aead_op(ts_params->valid_devs[0], ut_params- > >op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 0, 0, 0); > else > TEST_ASSERT_NOT_NULL( > process_crypto_request(ts_params->valid_devs[0], > @@ -8833,6 +9135,9 @@ test_authenticated_encryption_oop(const struct > aead_test_data *tdata) > if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0], > &cap_idx) == NULL) > return -ENOTSUP; > + /* Data-path service does not support OOP */ > + if (cryptodev_dp_test) > + return -ENOTSUP; > > /* not supported with CPU crypto */ > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > @@ -8923,8 +9228,9 @@ test_authenticated_decryption_oop(const struct > aead_test_data *tdata) > &cap_idx) == NULL) > return -ENOTSUP; > > - /* not supported with CPU crypto */ > - if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > + /* not supported with CPU crypto and data-path service*/ > + if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO || > + cryptodev_dp_test) > return -ENOTSUP; > > /* Create AEAD session */ > @@ -9151,8 +9457,13 @@ test_authenticated_decryption_sessionless( > "crypto op session type not sessionless"); > > /* Process crypto operation */ > - TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params- > >valid_devs[0], > - ut_params->op), "failed to process sym crypto op"); > + if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 0, 0, 0); > + else > + TEST_ASSERT_NOT_NULL(process_crypto_request( > + ts_params->valid_devs[0], ut_params->op), > + "failed to process sym crypto op"); > > TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process"); > > @@ -9472,6 +9783,9 @@ test_MD5_HMAC_generate(const struct > HMAC_MD5_vector *test_case) > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_crypt_auth_op(ts_params->valid_devs[0], > ut_params->op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 0, 0); > else > TEST_ASSERT_NOT_NULL( > process_crypto_request(ts_params->valid_devs[0], > @@ -9530,6 +9844,9 @@ test_MD5_HMAC_verify(const struct > HMAC_MD5_vector *test_case) > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_crypt_auth_op(ts_params->valid_devs[0], > ut_params->op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 0, 0); > else > TEST_ASSERT_NOT_NULL( > process_crypto_request(ts_params->valid_devs[0], > @@ -10098,6 +10415,9 @@ test_AES_GMAC_authentication(const struct > gmac_test_data *tdata) > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_crypt_auth_op(ts_params->valid_devs[0], > ut_params->op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 0, 0); > else > TEST_ASSERT_NOT_NULL( > process_crypto_request(ts_params->valid_devs[0], > @@ -10215,6 +10535,9 @@ test_AES_GMAC_authentication_verify(const > struct gmac_test_data *tdata) > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_crypt_auth_op(ts_params->valid_devs[0], > ut_params->op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 0, 0); > else > TEST_ASSERT_NOT_NULL( > process_crypto_request(ts_params->valid_devs[0], > @@ -10780,7 +11103,10 @@ > test_authentication_verify_fail_when_data_corruption( > TEST_ASSERT_NOT_EQUAL(ut_params->op->status, > RTE_CRYPTO_OP_STATUS_SUCCESS, > "authentication not failed"); > - } else { > + } else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 0, 0); > + else { > ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NULL(ut_params->op, "authentication not > failed"); > @@ -10851,7 +11177,10 @@ > test_authentication_verify_GMAC_fail_when_corruption( > TEST_ASSERT_NOT_EQUAL(ut_params->op->status, > RTE_CRYPTO_OP_STATUS_SUCCESS, > "authentication not failed"); > - } else { > + } else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 1, 0, 0); > + else { > ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NULL(ut_params->op, "authentication not > failed"); > @@ -10926,7 +11255,10 @@ > test_authenticated_decryption_fail_when_corruption( > TEST_ASSERT_NOT_EQUAL(ut_params->op->status, > RTE_CRYPTO_OP_STATUS_SUCCESS, > "authentication not failed"); > - } else { > + } else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 0, 0); > + else { > ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > TEST_ASSERT_NULL(ut_params->op, "authentication not > failed"); > @@ -11021,6 +11353,9 @@ test_authenticated_encryt_with_esn( > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_crypt_auth_op(ts_params->valid_devs[0], > ut_params->op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 0, 0); > else > ut_params->op = process_crypto_request( > ts_params->valid_devs[0], ut_params->op); > @@ -11141,6 +11476,9 @@ test_authenticated_decrypt_with_esn( > if (gbl_action_type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_crypt_auth_op(ts_params->valid_devs[0], > ut_params->op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 1, 1, 0, 0); > else > ut_params->op = process_crypto_request(ts_params- > >valid_devs[0], > ut_params->op); > @@ -11285,6 +11623,9 @@ test_authenticated_encryption_SGL(const struct > aead_test_data *tdata, > unsigned int sgl_in = fragsz < tdata->plaintext.len; > unsigned int sgl_out = (fragsz_oop ? fragsz_oop : fragsz) < > tdata->plaintext.len; > + /* Data path service does not support OOP */ > + if (cryptodev_dp_test) > + return -ENOTSUP; > if (sgl_in && !sgl_out) { > if (!(dev_info.feature_flags & > > RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT)) > @@ -11480,6 +11821,9 @@ test_authenticated_encryption_SGL(const struct > aead_test_data *tdata, > if (oop == IN_PLACE && > gbl_action_type == > RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) > process_cpu_aead_op(ts_params->valid_devs[0], ut_params- > >op); > + else if (cryptodev_dp_test) > + process_sym_hw_api_op(ts_params->valid_devs[0], 0, > + ut_params->op, 0, 0, 0, 0); > else > TEST_ASSERT_NOT_NULL( > process_crypto_request(ts_params->valid_devs[0], > @@ -13041,6 +13385,29 @@ test_cryptodev_nitrox(void) > return unit_test_suite_runner(&cryptodev_nitrox_testsuite); > } > > +static int > +test_qat_sym_direct_api(void /*argv __rte_unused, int argc __rte_unused*/) > +{ > + int ret; > + > + gbl_driver_id = rte_cryptodev_driver_id_get( > + RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD)); > + > + if (gbl_driver_id == -1) { > + RTE_LOG(ERR, USER1, "QAT PMD must be loaded. Check that > both " > + "CONFIG_RTE_LIBRTE_PMD_QAT and > CONFIG_RTE_LIBRTE_PMD_QAT_SYM " > + "are enabled in config file to run this testsuite.\n"); > + return TEST_SKIPPED; > + } > + > + cryptodev_dp_test = 1; Cryptodev_dp_test cannot be set blindly. You should check for feature flag of the device If the feature is supported or not. Can we also rename this flag as "test_raw_crypto_dp" > + ret = unit_test_suite_runner(&cryptodev_testsuite); > + cryptodev_dp_test = 0; > + > + return ret; > +} > + > +REGISTER_TEST_COMMAND(cryptodev_qat_sym_api_autotest, > test_qat_sym_direct_api); It would be better to name the test string as test_cryptodev_qat_raw_dp > REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat); > REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, > test_cryptodev_aesni_mb); > REGISTER_TEST_COMMAND(cryptodev_cpu_aesni_mb_autotest, > diff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h > index 41542e055..e4e4c7626 100644 > --- a/app/test/test_cryptodev.h > +++ b/app/test/test_cryptodev.h > @@ -71,6 +71,8 @@ > #define CRYPTODEV_NAME_CAAM_JR_PMD crypto_caam_jr > #define CRYPTODEV_NAME_NITROX_PMD crypto_nitrox_sym > > +extern int cryptodev_dp_test; > + > /** > * Write (spread) data from buffer to mbuf data > * > @@ -209,4 +211,9 @@ create_segmented_mbuf(struct rte_mempool > *mbuf_pool, int pkt_len, > return NULL; > } > > +void > +process_sym_hw_api_op(uint8_t dev_id, uint16_t qp_id, struct rte_crypto_op > *op, > + uint8_t is_cipher, uint8_t is_auth, uint8_t len_in_bits, > + uint8_t cipher_iv_len); > + > #endif /* TEST_CRYPTODEV_H_ */ > diff --git a/app/test/test_cryptodev_blockcipher.c > b/app/test/test_cryptodev_blockcipher.c > index 221262341..311b34c15 100644 > --- a/app/test/test_cryptodev_blockcipher.c > +++ b/app/test/test_cryptodev_blockcipher.c > @@ -462,25 +462,44 @@ test_blockcipher_one_case(const struct > blockcipher_test_case *t, > } > > /* Process crypto operation */ > - if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) { > - snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, > - "line %u FAILED: %s", > - __LINE__, "Error sending packet for encryption"); > - status = TEST_FAILED; > - goto error_exit; > - } > + if (cryptodev_dp_test) { > + uint8_t is_cipher = 0, is_auth = 0; > > - op = NULL; > + if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_OOP) { > + RTE_LOG(DEBUG, USER1, > + "QAT direct API does not support OOP, Test > Skipped.\n"); > + snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, > "SKIPPED"); > + status = TEST_SUCCESS; > + goto error_exit; > + } > + if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER) > + is_cipher = 1; > + if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH) > + is_auth = 1; > > - while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0) > - rte_pause(); > + process_sym_hw_api_op(dev_id, 0, op, is_cipher, is_auth, 0, > + tdata->iv.len); > + } else { > + if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) { > + snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, > + "line %u FAILED: %s", > + __LINE__, "Error sending packet for > encryption"); > + status = TEST_FAILED; > + goto error_exit; > + } > > - if (!op) { > - snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, > - "line %u FAILED: %s", > - __LINE__, "Failed to process sym crypto op"); > - status = TEST_FAILED; > - goto error_exit; > + op = NULL; > + > + while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0) > + rte_pause(); > + > + if (!op) { > + snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, > + "line %u FAILED: %s", > + __LINE__, "Failed to process sym crypto op"); > + status = TEST_FAILED; > + goto error_exit; > + } > } > > debug_hexdump(stdout, "m_src(after):", > -- > 2.20.1