net/sfc/base: remove unused defined for WPTR alignment
[dpdk.git] / test / test / test_cryptodev.c
index df84430..4d7e5b1 100644 (file)
@@ -1,33 +1,5 @@
-/*-
- *   BSD LICENSE
- *
- *   Copyright(c) 2015-2017 Intel Corporation. All rights reserved.
- *
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions
- *   are met:
- *
- *      * Redistributions of source code must retain the above copyright
- *        notice, this list of conditions and the following disclaimer.
- *      * Redistributions in binary form must reproduce the above copyright
- *        notice, this list of conditions and the following disclaimer in
- *        the documentation and/or other materials provided with the
- *        distribution.
- *      * Neither the name of Intel Corporation nor the names of its
- *        contributors may be used to endorse or promote products derived
- *        from this software without specific prior written permission.
- *
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2015-2017 Intel Corporation
  */
 
 #include <rte_common.h>
@@ -36,6 +8,7 @@
 #include <rte_malloc.h>
 #include <rte_memcpy.h>
 #include <rte_pause.h>
+#include <rte_bus_vdev.h>
 
 #include <rte_crypto.h>
 #include <rte_cryptodev.h>
@@ -341,6 +314,28 @@ testsuite_setup(void)
                }
        }
 
+       /* Create a MRVL device if required */
+       if (gbl_driver_id == rte_cryptodev_driver_id_get(
+                       RTE_STR(CRYPTODEV_MRVL_PMD))) {
+#ifndef RTE_LIBRTE_PMD_MRVL_CRYPTO
+               RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_MRVL_CRYPTO must be"
+                       " enabled in config file to run this testsuite.\n");
+               return TEST_FAILED;
+#endif
+               nb_devs = rte_cryptodev_device_count_by_driver(
+                               rte_cryptodev_driver_id_get(
+                               RTE_STR(CRYPTODEV_NAME_MRVL_PMD)));
+               if (nb_devs < 1) {
+                       ret = rte_vdev_init(
+                               RTE_STR(CRYPTODEV_NAME_MRVL_PMD),
+                               NULL);
+
+                       TEST_ASSERT(ret == 0, "Failed to create "
+                               "instance of pmd : %s",
+                               RTE_STR(CRYPTODEV_NAME_MRVL_PMD));
+               }
+       }
+
 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
        if (gbl_driver_id == rte_cryptodev_driver_id_get(
                        RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD))) {
@@ -1310,7 +1305,7 @@ test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
 
        /* Set crypto operation authentication parameters */
        sym_op->auth.digest.data = ut_params->digest;
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, QUOTE_512_BYTES);
 
        sym_op->auth.data.offset = 0;
@@ -1462,7 +1457,7 @@ test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
        sym_op->m_src = ut_params->ibuf;
 
        sym_op->auth.digest.data = ut_params->digest;
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, QUOTE_512_BYTES);
 
        sym_op->auth.data.offset = 0;
@@ -1919,6 +1914,101 @@ test_AES_chain_armv8_all(void)
        return TEST_SUCCESS;
 }
 
+static int
+test_AES_chain_mrvl_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool,
+               ts_params->session_mpool,
+               ts_params->valid_devs[0],
+               rte_cryptodev_driver_id_get(
+               RTE_STR(CRYPTODEV_NAME_MRVL_PMD)),
+               BLKCIPHER_AES_CHAIN_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
+static int
+test_AES_cipheronly_mrvl_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool,
+               ts_params->session_mpool,
+               ts_params->valid_devs[0],
+               rte_cryptodev_driver_id_get(
+               RTE_STR(CRYPTODEV_NAME_MRVL_PMD)),
+               BLKCIPHER_AES_CIPHERONLY_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
+static int
+test_authonly_mrvl_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool,
+               ts_params->session_mpool,
+               ts_params->valid_devs[0],
+               rte_cryptodev_driver_id_get(
+               RTE_STR(CRYPTODEV_NAME_MRVL_PMD)),
+               BLKCIPHER_AUTHONLY_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
+static int
+test_3DES_chain_mrvl_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool,
+               ts_params->session_mpool,
+               ts_params->valid_devs[0],
+               rte_cryptodev_driver_id_get(
+               RTE_STR(CRYPTODEV_NAME_MRVL_PMD)),
+               BLKCIPHER_3DES_CHAIN_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
+static int
+test_3DES_cipheronly_mrvl_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool,
+               ts_params->session_mpool,
+               ts_params->valid_devs[0],
+               rte_cryptodev_driver_id_get(
+               RTE_STR(CRYPTODEV_NAME_MRVL_PMD)),
+               BLKCIPHER_3DES_CIPHERONLY_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
 /* ***** SNOW 3G Tests ***** */
 static int
 create_wireless_algo_hash_session(uint8_t dev_id,
@@ -2268,7 +2358,7 @@ create_wireless_algo_hash_operation(const uint8_t *auth_tag,
        TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
                                "no room to append auth tag");
        ut_params->digest = sym_op->auth.digest.data;
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, data_pad_len);
        if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
                memset(sym_op->auth.digest.data, 0, auth_tag_len);
@@ -2324,7 +2414,7 @@ create_wireless_cipher_hash_operation(const struct wireless_test_data *tdata,
        TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
                        "no room to append auth tag");
        ut_params->digest = sym_op->auth.digest.data;
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, data_pad_len);
        if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
                memset(sym_op->auth.digest.data, 0, auth_tag_len);
@@ -2391,7 +2481,7 @@ create_wireless_algo_cipher_hash_operation(const uint8_t *auth_tag,
        TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
                        "no room to append auth tag");
        ut_params->digest = sym_op->auth.digest.data;
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, data_pad_len);
        if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
                memset(sym_op->auth.digest.data, 0, auth_tag_len);
@@ -2449,7 +2539,7 @@ create_wireless_algo_auth_cipher_operation(unsigned int auth_tag_len,
        TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
                        "no room to append auth tag");
 
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, data_pad_len);
 
        memset(sym_op->auth.digest.data, 0, auth_tag_len);
@@ -5036,7 +5126,7 @@ create_aead_operation(enum rte_crypto_aead_operation op,
                                "no room to append aad");
 
                sym_op->aead.aad.phys_addr =
-                               rte_pktmbuf_mtophys(ut_params->ibuf);
+                               rte_pktmbuf_iova(ut_params->ibuf);
                /* Copy AAD 18 bytes after the AAD pointer, according to the API */
                memcpy(sym_op->aead.aad.data + 18, tdata->aad.data, tdata->aad.len);
                TEST_HEXDUMP(stdout, "aad:", sym_op->aead.aad.data,
@@ -5058,7 +5148,7 @@ create_aead_operation(enum rte_crypto_aead_operation op,
                                "no room to append aad");
 
                sym_op->aead.aad.phys_addr =
-                               rte_pktmbuf_mtophys(ut_params->ibuf);
+                               rte_pktmbuf_iova(ut_params->ibuf);
                memcpy(sym_op->aead.aad.data, tdata->aad.data, tdata->aad.len);
                TEST_HEXDUMP(stdout, "aad:", sym_op->aead.aad.data,
                        tdata->aad.len);
@@ -5126,7 +5216,7 @@ create_aead_operation(enum rte_crypto_aead_operation op,
                TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
                                "no room to append digest");
                memset(sym_op->aead.digest.data, 0, tdata->auth_tag.len);
-               sym_op->aead.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+               sym_op->aead.digest.phys_addr = rte_pktmbuf_iova_offset(
                                ut_params->obuf ? ut_params->obuf :
                                                ut_params->ibuf,
                                                plaintext_pad_len +
@@ -5136,7 +5226,7 @@ create_aead_operation(enum rte_crypto_aead_operation op,
                                ut_params->ibuf, tdata->auth_tag.len);
                TEST_ASSERT_NOT_NULL(sym_op->aead.digest.data,
                                "no room to append digest");
-               sym_op->aead.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+               sym_op->aead.digest.phys_addr = rte_pktmbuf_iova_offset(
                                ut_params->ibuf,
                                plaintext_pad_len + aad_pad_len);
 
@@ -6109,7 +6199,7 @@ static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params,
                        ut_params->ibuf, MD5_DIGEST_LEN);
        TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
                        "no room to append digest");
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, plaintext_pad_len);
 
        if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) {
@@ -6845,7 +6935,7 @@ create_gmac_operation(enum rte_crypto_auth_operation op,
        TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
                        "no room to append digest");
 
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, plaintext_pad_len);
 
        if (op == RTE_CRYPTO_AUTH_OP_VERIFY) {
@@ -7367,7 +7457,7 @@ create_auth_operation(struct crypto_testsuite_params *ts_params,
        TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
                        "no room to append auth tag");
 
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, reference->plaintext.len);
 
        if (auth_generate)
@@ -7414,7 +7504,7 @@ create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,
        TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
                        "no room to append auth tag");
 
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, reference->ciphertext.len);
 
        if (auth_generate)
@@ -7467,7 +7557,7 @@ create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,
        TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
                        "no room to append auth tag");
 
-       sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
+       sym_op->auth.digest.phys_addr = rte_pktmbuf_iova_offset(
                        ut_params->ibuf, reference->ciphertext.len);
 
        if (auth_generate)
@@ -7746,7 +7836,7 @@ create_aead_operation_SGL(enum rte_crypto_aead_operation op,
                                ut_params->ibuf, aad_len);
                TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
                                "no room to prepend aad");
-               sym_op->aead.aad.phys_addr = rte_pktmbuf_mtophys(
+               sym_op->aead.aad.phys_addr = rte_pktmbuf_iova(
                                ut_params->ibuf);
 
                memset(sym_op->aead.aad.data, 0, aad_len);
@@ -7766,7 +7856,7 @@ create_aead_operation_SGL(enum rte_crypto_aead_operation op,
                                ut_params->ibuf, aad_len);
                TEST_ASSERT_NOT_NULL(sym_op->aead.aad.data,
                                "no room to prepend aad");
-               sym_op->aead.aad.phys_addr = rte_pktmbuf_mtophys(
+               sym_op->aead.aad.phys_addr = rte_pktmbuf_iova(
                                ut_params->ibuf);
 
                memset(sym_op->aead.aad.data, 0, aad_len);
@@ -7913,7 +8003,7 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
                        digest_mem = rte_pktmbuf_append(ut_params->obuf,
                                tdata->auth_tag.len);
 
-                       digest_phys = rte_pktmbuf_mtophys_offset(
+                       digest_phys = rte_pktmbuf_iova_offset(
                                        ut_params->obuf,
                                        tdata->plaintext.len + prepend_len);
                }
@@ -7951,14 +8041,14 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
         * Place digest at the end of the last buffer
         */
        if (!digest_phys)
-               digest_phys = rte_pktmbuf_mtophys(buf) + to_trn;
+               digest_phys = rte_pktmbuf_iova(buf) + to_trn;
        if (oop && buf_last_oop)
-               digest_phys = rte_pktmbuf_mtophys(buf_last_oop) + to_trn;
+               digest_phys = rte_pktmbuf_iova(buf_last_oop) + to_trn;
 
        if (!digest_mem && !oop) {
                digest_mem = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
                                + tdata->auth_tag.len);
-               digest_phys = rte_pktmbuf_mtophys_offset(ut_params->ibuf,
+               digest_phys = rte_pktmbuf_iova_offset(ut_params->ibuf,
                                tdata->plaintext.len);
        }
 
@@ -9253,6 +9343,12 @@ static struct unit_test_suite cryptodev_dpaa_sec_testsuite  = {
                TEST_CASE_ST(ut_setup, ut_teardown,
                        test_AES_GCM_auth_decryption_test_case_256_7),
 
+               /** Out of place tests */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GCM_authenticated_encryption_oop_test_case_1),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GCM_authenticated_decryption_oop_test_case_1),
+
                TEST_CASES_END() /**< NULL terminate unit test array */
        }
 };
@@ -9374,6 +9470,12 @@ static struct unit_test_suite cryptodev_dpaa2_sec_testsuite  = {
                TEST_CASE_ST(ut_setup, ut_teardown,
                        test_AES_GCM_auth_decryption_test_case_256_7),
 
+               /** Out of place tests */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GCM_authenticated_encryption_oop_test_case_1),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       test_AES_GCM_authenticated_decryption_oop_test_case_1),
+
                TEST_CASES_END() /**< NULL terminate unit test array */
        }
 };
@@ -9417,6 +9519,40 @@ static struct unit_test_suite cryptodev_armv8_testsuite  = {
        }
 };
 
+static struct unit_test_suite cryptodev_mrvl_testsuite  = {
+       .suite_name = "Crypto Device Marvell Component Test Suite",
+       .setup = testsuite_setup,
+       .teardown = testsuite_teardown,
+       .unit_test_cases = {
+               TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_multi_session_random_usage),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_AES_chain_mrvl_all),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_AES_cipheronly_mrvl_all),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_authonly_mrvl_all),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_3DES_chain_mrvl_all),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                               test_3DES_cipheronly_mrvl_all),
+
+               /** Negative tests */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       authentication_verify_HMAC_SHA1_fail_data_corrupt),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       authentication_verify_HMAC_SHA1_fail_tag_corrupt),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
+
+               TEST_CASES_END() /**< NULL terminate unit test array */
+       }
+};
+
+
 static int
 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
 {
@@ -9561,6 +9697,22 @@ test_cryptodev_armv8(void)
        return unit_test_suite_runner(&cryptodev_armv8_testsuite);
 }
 
+static int
+test_cryptodev_mrvl(void)
+{
+       gbl_driver_id = rte_cryptodev_driver_id_get(
+                       RTE_STR(CRYPTODEV_NAME_MRVL_PMD));
+
+       if (gbl_driver_id == -1) {
+               RTE_LOG(ERR, USER1, "MRVL PMD must be loaded. Check if "
+                               "CONFIG_RTE_LIBRTE_PMD_MRVL_CRYPTO is enabled "
+                               "in config file to run this testsuite.\n");
+               return TEST_FAILED;
+       }
+
+       return unit_test_suite_runner(&cryptodev_mrvl_testsuite);
+}
+
 #ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
 
 static int
@@ -9630,5 +9782,6 @@ REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);
 REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc);
 REGISTER_TEST_COMMAND(cryptodev_sw_armv8_autotest, test_cryptodev_armv8);
+REGISTER_TEST_COMMAND(cryptodev_sw_mrvl_autotest, test_cryptodev_mrvl);
 REGISTER_TEST_COMMAND(cryptodev_dpaa2_sec_autotest, test_cryptodev_dpaa2_sec);
 REGISTER_TEST_COMMAND(cryptodev_dpaa_sec_autotest, test_cryptodev_dpaa_sec);