X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fcrypto%2Farmv8%2Frte_armv8_pmd.c;h=c95729db501c29caaeeb0bf56862eaea0af947d0;hb=4f86c0ba19ba065c8c32a5b0111efc7bb74c9b96;hp=97719f278e1b84de09a43e8bb851216dcd174c0f;hpb=d4a586d29e65c1c1069e52a43ddda3f03f1c7770;p=dpdk.git diff --git a/drivers/crypto/armv8/rte_armv8_pmd.c b/drivers/crypto/armv8/rte_armv8_pmd.c index 97719f278e..c95729db50 100644 --- a/drivers/crypto/armv8/rte_armv8_pmd.c +++ b/drivers/crypto/armv8/rte_armv8_pmd.c @@ -1,33 +1,5 @@ -/* - * BSD LICENSE - * - * Copyright (C) Cavium, Inc. 2017. - * - * 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 Cavium, Inc 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) 2017 Cavium, Inc */ #include @@ -40,9 +12,9 @@ #include #include -#include "armv8_crypto_defs.h" +#include "AArch64cryptolib.h" -#include "rte_armv8_pmd_private.h" +#include "armv8_pmd_private.h" static uint8_t cryptodev_driver_id; @@ -106,25 +78,29 @@ crypto_func_tbl_t[CRYPTO_CIPHER_MAX][CRYPTO_AUTH_MAX][CRYPTO_CIPHER_KEYLEN_MAX]; static const crypto_func_tbl_t crypto_op_ca_encrypt = { /* [cipher alg][auth alg][key length] = crypto_function, */ - [CIPH_AES_CBC][AUTH_SHA1_HMAC][KEYL(128)] = aes128cbc_sha1_hmac, - [CIPH_AES_CBC][AUTH_SHA256_HMAC][KEYL(128)] = aes128cbc_sha256_hmac, + [CIPH_AES_CBC][AUTH_SHA1_HMAC][KEYL(128)] = + armv8_enc_aes_cbc_sha1_128, + [CIPH_AES_CBC][AUTH_SHA256_HMAC][KEYL(128)] = + armv8_enc_aes_cbc_sha256_128, }; static const crypto_func_tbl_t crypto_op_ca_decrypt = { - NULL + { {NULL} } }; static const crypto_func_tbl_t crypto_op_ac_encrypt = { - NULL + { {NULL} } }; static const crypto_func_tbl_t crypto_op_ac_decrypt = { /* [cipher alg][auth alg][key length] = crypto_function, */ - [CIPH_AES_CBC][AUTH_SHA1_HMAC][KEYL(128)] = sha1_hmac_aes128cbc_dec, - [CIPH_AES_CBC][AUTH_SHA256_HMAC][KEYL(128)] = sha256_hmac_aes128cbc_dec, + [CIPH_AES_CBC][AUTH_SHA1_HMAC][KEYL(128)] = + armv8_dec_aes_cbc_sha1_128, + [CIPH_AES_CBC][AUTH_SHA256_HMAC][KEYL(128)] = + armv8_dec_aes_cbc_sha256_128, }; /** @@ -183,13 +159,13 @@ crypto_key_sched_tbl_t[CRYPTO_CIPHER_MAX][CRYPTO_CIPHER_KEYLEN_MAX]; static const crypto_key_sched_tbl_t crypto_key_sched_encrypt = { /* [cipher alg][key length] = key_expand_func, */ - [CIPH_AES_CBC][KEYL(128)] = aes128_key_sched_enc, + [CIPH_AES_CBC][KEYL(128)] = armv8_expandkeys_enc_aes_cbc_128, }; static const crypto_key_sched_tbl_t crypto_key_sched_decrypt = { /* [cipher alg][key length] = key_expand_func, */ - [CIPH_AES_CBC][KEYL(128)] = aes128_key_sched_dec, + [CIPH_AES_CBC][KEYL(128)] = armv8_expandkeys_dec_aes_cbc_128, }; /** @@ -305,14 +281,16 @@ auth_set_prerequisites(struct armv8_crypto_session *sess, * Calculate partial hash values for i_key_pad and o_key_pad. * Will be used as initialization state for final HMAC. */ - error = sha1_block_partial(NULL, sess->auth.hmac.i_key_pad, - partial, SHA1_BLOCK_SIZE); + error = armv8_sha1_block_partial(NULL, + sess->auth.hmac.i_key_pad, + partial, SHA1_BLOCK_SIZE); if (error != 0) return -1; memcpy(sess->auth.hmac.i_key_pad, partial, SHA1_BLOCK_SIZE); - error = sha1_block_partial(NULL, sess->auth.hmac.o_key_pad, - partial, SHA1_BLOCK_SIZE); + error = armv8_sha1_block_partial(NULL, + sess->auth.hmac.o_key_pad, + partial, SHA1_BLOCK_SIZE); if (error != 0) return -1; memcpy(sess->auth.hmac.o_key_pad, partial, SHA1_BLOCK_SIZE); @@ -338,14 +316,16 @@ auth_set_prerequisites(struct armv8_crypto_session *sess, * Calculate partial hash values for i_key_pad and o_key_pad. * Will be used as initialization state for final HMAC. */ - error = sha256_block_partial(NULL, sess->auth.hmac.i_key_pad, - partial, SHA256_BLOCK_SIZE); + error = armv8_sha256_block_partial(NULL, + sess->auth.hmac.i_key_pad, + partial, SHA256_BLOCK_SIZE); if (error != 0) return -1; memcpy(sess->auth.hmac.i_key_pad, partial, SHA256_BLOCK_SIZE); - error = sha256_block_partial(NULL, sess->auth.hmac.o_key_pad, - partial, SHA256_BLOCK_SIZE); + error = armv8_sha256_block_partial(NULL, + sess->auth.hmac.o_key_pad, + partial, SHA256_BLOCK_SIZE); if (error != 0) return -1; memcpy(sess->auth.hmac.o_key_pad, partial, SHA256_BLOCK_SIZE); @@ -397,7 +377,16 @@ armv8_crypto_set_session_chained_parameters(struct armv8_crypto_session *sess, /* Select cipher key */ sess->cipher.key.length = cipher_xform->cipher.key.length; /* Set cipher direction */ - cop = sess->cipher.direction; + switch (sess->cipher.direction) { + case RTE_CRYPTO_CIPHER_OP_ENCRYPT: + cop = ARMV8_CRYPTO_CIPHER_OP_ENCRYPT; + break; + case RTE_CRYPTO_CIPHER_OP_DECRYPT: + cop = ARMV8_CRYPTO_CIPHER_OP_DECRYPT; + break; + default: + return -ENOTSUP; + } /* Set cipher algorithm */ calg = cipher_xform->cipher.algo; @@ -530,7 +519,7 @@ get_session(struct armv8_crypto_qp *qp, struct rte_crypto_op *op) /* get existing session */ if (likely(op->sym->session != NULL)) { sess = (struct armv8_crypto_session *) - get_session_private_data( + get_sym_session_private_data( op->sym->session, cryptodev_driver_id); } @@ -542,7 +531,8 @@ get_session(struct armv8_crypto_qp *qp, struct rte_crypto_op *op) if (rte_mempool_get(qp->sess_mp, (void **)&_sess)) return NULL; - if (rte_mempool_get(qp->sess_mp, (void **)&_sess_private_data)) + if (rte_mempool_get(qp->sess_mp_priv, + (void **)&_sess_private_data)) return NULL; sess = (struct armv8_crypto_session *)_sess_private_data; @@ -550,12 +540,12 @@ get_session(struct armv8_crypto_qp *qp, struct rte_crypto_op *op) if (unlikely(armv8_crypto_set_session_parameters(sess, op->sym->xform) != 0)) { rte_mempool_put(qp->sess_mp, _sess); - rte_mempool_put(qp->sess_mp, _sess_private_data); + rte_mempool_put(qp->sess_mp_priv, _sess_private_data); sess = NULL; } op->sym->session = (struct rte_cryptodev_sym_session *)_sess; - set_session_private_data(op->sym->session, cryptodev_driver_id, - _sess_private_data); + set_sym_session_private_data(op->sym->session, + cryptodev_driver_id, _sess_private_data); } if (unlikely(sess == NULL)) @@ -579,7 +569,7 @@ process_armv8_chained_op(struct armv8_crypto_qp *qp, struct rte_crypto_op *op, struct rte_mbuf *mbuf_src, struct rte_mbuf *mbuf_dst) { crypto_func_t crypto_func; - crypto_arg_t arg; + armv8_cipher_digest_t arg; struct rte_mbuf *m_asrc, *m_adst; uint8_t *csrc, *cdst; uint8_t *adst, *asrc; @@ -640,7 +630,7 @@ process_armv8_chained_op(struct armv8_crypto_qp *qp, struct rte_crypto_op *op, arg.cipher.key = sess->cipher.key.data; /* Acquire combined mode function */ crypto_func = sess->crypto_func; - ARMV8_CRYPTO_ASSERT(crypto_func != NULL); + RTE_VERIFY(crypto_func != NULL); error = crypto_func(csrc, cdst, clen, asrc, adst, alen, &arg); if (error != 0) { op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS; @@ -682,9 +672,10 @@ process_op(struct armv8_crypto_qp *qp, struct rte_crypto_op *op, if (op->sess_type == RTE_CRYPTO_OP_SESSIONLESS) { memset(sess, 0, sizeof(struct armv8_crypto_session)); memset(op->sym->session, 0, - rte_cryptodev_get_header_session_size()); + rte_cryptodev_sym_get_existing_header_session_size( + op->sym->session)); rte_mempool_put(qp->sess_mp, sess); - rte_mempool_put(qp->sess_mp, op->sym->session); + rte_mempool_put(qp->sess_mp_priv, op->sym->session); op->sym->session = NULL; } @@ -801,13 +792,12 @@ cryptodev_armv8_crypto_create(const char *name, dev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO | RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING | RTE_CRYPTODEV_FF_CPU_NEON | - RTE_CRYPTODEV_FF_CPU_ARM_CE; + RTE_CRYPTODEV_FF_CPU_ARM_CE | + RTE_CRYPTODEV_FF_SYM_SESSIONLESS; - /* Set vector instructions mode supported */ internals = dev->data->dev_private; internals->max_nb_qpairs = init_params->max_nb_queue_pairs; - internals->max_nb_sessions = init_params->max_nb_sessions; return 0; @@ -828,8 +818,7 @@ cryptodev_armv8_crypto_init(struct rte_vdev_device *vdev) "", sizeof(struct armv8_crypto_private), rte_socket_id(), - RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS, - RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_SESSIONS + RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS }; const char *name; const char *input_args; @@ -872,11 +861,12 @@ static struct rte_vdev_driver armv8_crypto_pmd_drv = { static struct cryptodev_driver armv8_crypto_drv; +RTE_LOG_REGISTER(crypto_armv8_log_type, pmd.crypto.armv8, ERR); + RTE_PMD_REGISTER_VDEV(CRYPTODEV_NAME_ARMV8_PMD, armv8_crypto_pmd_drv); RTE_PMD_REGISTER_ALIAS(CRYPTODEV_NAME_ARMV8_PMD, cryptodev_armv8_pmd); RTE_PMD_REGISTER_PARAM_STRING(CRYPTODEV_NAME_ARMV8_PMD, "max_nb_queue_pairs= " - "max_nb_sessions= " "socket_id="); -RTE_PMD_REGISTER_CRYPTO_DRIVER(armv8_crypto_drv, armv8_crypto_pmd_drv, +RTE_PMD_REGISTER_CRYPTO_DRIVER(armv8_crypto_drv, armv8_crypto_pmd_drv.driver, cryptodev_driver_id);