From patchwork Fri Jun 8 16:45:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anoob Joseph X-Patchwork-Id: 40872 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5578D1CDEF; Fri, 8 Jun 2018 18:49:30 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0072.outbound.protection.outlook.com [104.47.36.72]) by dpdk.org (Postfix) with ESMTP id EBC5D1B20D for ; Fri, 8 Jun 2018 18:49:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dMlJNjXVSGCW//ZrjOV60sRR0eq+95+HJdzf65JLnUU=; b=DOORk1bIpzzVC8Z2bnZDAFeCQfH0VWG4O9MaWiXL9Zt+0/gsb9bI9XzBXSA29wGdy/KFP0DXXIID44NotPF+kZFbEgraud+7iEHuqATVHC5Mcg0mnZfA7N+RW8csoCMrZ0y8inhqxmi8icfmq9s6aVyojg5pV0Rsswp+tMEU/PM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Anoob.Joseph@cavium.com; Received: from ajoseph83.caveonetworks.com.caveonetworks.com (115.113.156.2) by SN6PR07MB4911.namprd07.prod.outlook.com (2603:10b6:805:3c::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.820.15; Fri, 8 Jun 2018 16:49:22 +0000 From: Anoob Joseph To: Akhil Goyal , Pablo de Lara , Thomas Monjalon Cc: Srisivasubramanian Srinivasan , Ankur Dwivedi , Jerin Jacob , Murthy NSSR , Narayana Prasad , Nithin Dabilpuram , Ragothaman Jayaraman , dev@dpdk.org Date: Fri, 8 Jun 2018 22:15:20 +0530 Message-Id: <1528476325-15585-12-git-send-email-anoob.joseph@caviumnetworks.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1528476325-15585-1-git-send-email-anoob.joseph@caviumnetworks.com> References: <1528476325-15585-1-git-send-email-anoob.joseph@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [115.113.156.2] X-ClientProxiedBy: BM1PR01CA0071.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:1::11) To SN6PR07MB4911.namprd07.prod.outlook.com (2603:10b6:805:3c::29) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:SN6PR07MB4911; X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4911; 3:7SpmcgbjiwbkS4/cUctTKC7wRHIjOI1c8ggemWvUsSUIwACvN0AExcvFGp1g1kBEs/9NmbpTGwj9kVSja09fzjOMTj1fgTtl9CGdvM7oKCHdQr0GGsvA9lNm9U2iUGQbAzwrC9I0b7RK2tH13oLHGdCfFhfPdWgWJn+fmiGIABdR/lgDlmWBAwR0h/IHn1isMmUnhG5PG2tdcHMG6sMjZniTvaLTOIGPMOBRszQeloiFuZoLB1uvgeP/JqZfSLEV; 25:PIXpZuWoXvZ21Mf1r/JdENYmypL74taYZOV9G5Zt60oy3XLspPhU8GnMdiUMHXqS3eWgnQBw+tSTV0CueI3eKBJWFMpJHnicSUSEp5hMmVKN2keFk0Vm/+vtYo/CPvRF8pFX5ZAvegbA+t7OGQgKPvzuOH78HhIl8jhn023JOB7m+x5pfM+Z3KKaA4kw/+e30U0qV3v1c3PibVR7aekmLcjxf9ZkcHi7CHflJ/r8eUyaDtjblo77ODB9e0/quJmqW3QBmELVrHbtaJDJJEP6VkL9DcWwC4BBO4NTP7vZEvE2lG/U9jvMIaexTU/uDYL5TCjnxU0Ue2vSmJJcu0sDiw==; 31:ISL3TBfIFlXVZEX3Vs98mdMkg4e3EaIgmtZnQHWeIwpjDByw3+MwIoGFbLgqa+JCE9gffx4IY6uv0xgw++AOz/2tZWU4cqXypM3QAEm4tA5nz55KGyucqUyFJuKGez9wZcoXnj7io7y2GVCC6e/iMq9tk1UeicpeoJ/hD8ssK09RuzqTWTn1/PiGNvk4N+Y3hZ+YuL+Wmbkjiz1l8hvqC5x0MuyK2vYcTHZC+PereDE= X-MS-TrafficTypeDiagnostic: SN6PR07MB4911: X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4911; 20:uw70jRvQsgeAm7qiYZ+QVaPGoWMvslUvcOZIQauUON8HCvfwxYF/iglpq/4W7b2qFnbtBTNOhojaTphtetjhnlKYUT3YDKc+38Gcn+PLqKTYP2rrk0EYrzCNBwFJdf5byUAvKA6pNFdJpkVssxYtd2IEQaSUUtDt/Cvn36qy6OseUva3Io8v7ra7Ybmi97t3r3pOY8DvX4NIHzV/cOeb3vanqUuChQz4VxBkbyTEpl1mlkzjvfwbPOmwp/1DUeb350jUuOAjFmK6PbvSlHE8BNk7N5fE+t4OAJwm+zUx4DDs43sCtyrMyyrIFcQfcjdbmaHuHbiujdaztZYBGgph4LQzOy1xmSoTEi4kXsgQZfk5omwe7Fv9mFeY5XMEwrwIOaaqE+Zr/CrdX7MKB2ACbUvriWPVcdDg3q+H99EYla3DPpV3Gk+erZDZLjs4YgddzNHMnBpKL3Esd2wGceub/+RY4qSEOQKxSQYur4L04R+DoeQ19ygs9Kv+VVZdLJnElBCFcRawZTr4RaIKVyTZdhCxn60x2KivAMmG5i5NQlLDDcu4Qpy3ZQuYruAreWwMpur4gk2KNdWTmxfZBuqScnmZWhqdCkuQ3jyEAjNiYUU=; 4:5qyjggYE6uwOuMo3/5ioTrJEDcR5fEfa2+o3g/fCy+zf4Z548tOyLQH1RYdThMN0juqhMB5IEQdJBUMz5YEyHOQVxxIPYiMCZe8gbtG0sMeyRevkD98sKbOU8y1FYHDFpyIG2Rmenws+zQIHabf2ZrfZImnwmIveGlnJ9YCqe98wyqoTTpQXUjS2c3FuzKc7Um90XEpv7g1Av1TZZIskR2NtnNUKwTiAZ96Pm3CN56Y9sZNAeIQwXtHw5Gfv9oECHM2Q8LOcaXoDfXXg8J4yzg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(93006095)(3002001)(3231254)(944501410)(52105095)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:SN6PR07MB4911; BCL:0; PCL:0; RULEID:; SRVR:SN6PR07MB4911; X-Forefront-PRVS: 06973FFAD3 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(376002)(396003)(346002)(39380400002)(366004)(39860400002)(189003)(199004)(26005)(52116002)(956004)(305945005)(8676002)(81156014)(50226002)(8936002)(81166006)(7736002)(68736007)(105586002)(106356001)(3846002)(6116002)(72206003)(478600001)(6486002)(97736004)(6506007)(16586007)(6512007)(53936002)(47776003)(486006)(25786009)(5660300001)(50466002)(48376002)(4326008)(54906003)(76176011)(36756003)(110136005)(66066001)(8656006)(2906002)(316002)(55236004)(11346002)(16526019)(386003)(186003)(59450400001)(446003)(476003)(42882007)(44832011)(2616005)(51416003); DIR:OUT; SFP:1101; SCL:1; SRVR:SN6PR07MB4911; H:ajoseph83.caveonetworks.com.caveonetworks.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN6PR07MB4911; 23:qIlvR/cFPU5KQBWI5Q3A9ttZIK02h8Vldxk6BNv+/?= diVXWtmwcRxcwMIXGM4DMzvS6imsDbAOhTaogWRz4b4gnPQ/HvP8/eu5HiR9qooER2EAnOpMRMdVO1uyiICVMP8fxgCRHs+ndfOO8qy22xKAf1HljmMvUE1wN3ETxzHn2C8BQ5aYmPZqxeiZqnKNgs5R/urvZxK6Q6NIsxuQMpT/n1Dq/9sHjlkESKVsOerGFDfKqGaLM6qrcEcpSgvIufrFddIAdYnFws4t8qpIRRmpJ8scPrnpSvVZZWt4XBBb2QwevffX+kuIXiR9hu0P/bRHq0lIJG8vB5lOAomQ4ykNz/UvOFJ8JQ8NpduzL7Haoxq5Wuxk7XaXI8RZA5sdXWmRzql7WdEfIOgPYKmC90W2AyOqgYXc/4WHJYi0OOyGecxlhXBZeeeKxpgNfS+F2n2gjg/m+nQUW5wdUJgrLnhCnOn1R7AX7rCXcNNAcRmjsWx2s3WUf1WLYcaYhQD3oMRiXJJc3AHgKtLehDOeMbvPjvlyYlCSfjaOa+t+fesGik14Kqg7+JrV868qx0eQUi2lNqvVetcEHexeupOW1rhqOakDPkPHeUc0zNVRCpcROLNlWQYrAbgigIAcJd3WcvQkMKxlb+nvPHOLdOyIC2V+3IeUt0EeMgJlXRJP/5GQ51J9tPK9MOhQp6/45hGoVdrggKfGzJvUn+dZPIc6X0+aCjkyfzsw11tszC7P6MZfHiD4gm8AzUhNUD5T/pki9UmmbPSOXDnqTO1ty9/oXaz8wBNo3Gk+EJTWKHyyy0K15ihFNQJXvYWB9S2QNt1386S/EQySN6CrIU+SHBCjjTf9nrSe54eXyCAGdroH4XeniE3nUna546AyZZeagULk2b7lyH7UElXQDLsTV095yHIqCdGmoA3/caC4H+K9VOFaMZVJ9qnFoGO+m/lr0hssNJtqw50ihESSwUr7oiKC7MLg484USjzISwrmZ2KELdLT3gRtKfXnWqF8OMV99pX1cSF5H1Z2mBl5oH0y4Bg1UsvUUel1djZDqvphjJKpOaPySWAh6P8hb7NA82wrM7PHrxsK8I9vW0r9RaqzNKMRpISGTdbFmuspXGkkvTrhdF/LsVPYnsxHxvFNi1XWmUtm1JoCuHBqT+ipIN7cFZWGbbowjqulFKJGQNm04JHfR81z/bs7reeJHTx+mGygukZZesSIK5qmTRA6rC1WMKixRQJ4+kRUhr4ILKt4LXdD4xj8gTkvUY58McFr9UZ6zmNg1XhbCPo8i2oQFiqQKXCWQJSuw== X-Microsoft-Antispam-Message-Info: 2XVZDfD/h69Ln+fNgLzjT/RqGT1WYAA+lM6GF2/igkb1WVA94ekO8AmUpwPW371aZghoH/D1xC/XAlkRAki1SXn8ZpfHQx+066namk+pcT1VsDx1FGO8ikTv1mk0aVZu40v2JdNeVhtDjrhlFAnUuvl/UEneuyJsAss91WtUYmvfZUsrPDjlVjZ8k3QuDBmz X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4911; 6:yAODrtdP+v0uwcnqTNCfNVOWvlC2xtIAN9TXWQBjDekXswBZAl5JXMELsz87dlRdKSleMgV74T5T8QeukLaihIXQPX7dYY4NI+byAgbnEahVF9+9p4VtOoIFcerX/CNG7vzWWiEM3lCHgBIZPAhkG6iEvUPB1i1aqNWTvzrqT/v0Rdyu2JbLegEIq0dMVooirvUfbB5ww75+6UJCv9VhKJz7/13TiC6EqbJSD+0auJYQnFcDhidvCBH57+OBNF7DedKdQAfnht206f9sAnQUsSuU8wygBXvRmk6D37WH6pZvhYcTXS+7jhHZTYu7Kfxh/zGWIXNBaYPmP++o63rCcUrK4vwLiCuLSjfpwS6QAI2fo6CpGTA9qZC69n+dwaGLY7IOuHiuNI+yqR+9CTFqBaQgvNsC5VxefoIlnY8hHftJD59PgqipV0fr7RuLXm3I3H9iB7GD2ScElggxBS0bMw==; 5:86fjfi3KSHjSxxpHaQIzjbi0Nqc34KE+ee1T0/bBdlw+//n8Xka+uKlkUSfHsDcD0LZc3JBCqwTX6vFsRfhtpxoV5guvEVF2qfoeil3FF6zVOg7piIXZhHzgRUWPbKjju+USiDQSuNpqYdc1LNpD/rfrKllvfMYK2+5RdgASO4E=; 24:hA8sAyGbicFNpqPnHlhMiEzMMIAs1F8S6ndZDfyAAWXvIC7kDBxuZxtR2P9SX6J54Dvq63BOH5SnBET4QD2d/xEkxdRoggvCO+R3ydhcHRQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4911; 7:txCMCEc2N47VBd7Rgb2hhz/nzTOpE2VQVOy8jy/kWcWPngpg2USS8tCtQzb6P1Cr69v0SxdtPx6Fqrutw2KWiKSJ/TPeDC0PQBJyPuw/BbzDwZtS66IoflUcPhg7Q3OxMuX/qtmNUFLgIT2SG3UMvW3ocemJYT5XR4Ux5jH75oSJwjQjvit8P8rEWATJaicKbVeUOgbCRnrMZzmC2leHipvweO2tH0FV2rpJ7huB5dYm5Q8e/1vCtENLUpaYQFrR X-MS-Office365-Filtering-Correlation-Id: 09214e95-523c-43a4-4454-08d5cd5fcb58 X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jun 2018 16:49:22.4292 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 09214e95-523c-43a4-4454-08d5cd5fcb58 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR07MB4911 Subject: [dpdk-dev] [PATCH 11/16] crypto/cpt: add the basic device callback functions X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Srisivasubramanian Srinivasan This patch addresses the following: 1. Adds the basic device operation functions for the cpt vf. 2. The probe/remove functions are staic so no need to declare in the header file. 3. Removing extra declaration for cpt_dev_periodic_alarm_stop in the header file. Signed-off-by: Ankur Dwivedi Signed-off-by: Murthy NSSR Signed-off-by: Nithin Dabilpuram Signed-off-by: Ragothaman Jayaraman Signed-off-by: Srisivasubramanian Srinivasan --- drivers/crypto/cpt/Makefile | 1 + drivers/crypto/cpt/cpt_pmd_cryptodev.c | 13 +- drivers/crypto/cpt/cpt_pmd_ops.c | 544 +++++++++++++++++++++++++++++++++ drivers/crypto/cpt/cpt_pmd_ops.h | 64 ++++ 4 files changed, 616 insertions(+), 6 deletions(-) create mode 100644 drivers/crypto/cpt/cpt_pmd_ops.c create mode 100644 drivers/crypto/cpt/cpt_pmd_ops.h diff --git a/drivers/crypto/cpt/Makefile b/drivers/crypto/cpt/Makefile index 40ec9e2..bf22c2b 100644 --- a/drivers/crypto/cpt/Makefile +++ b/drivers/crypto/cpt/Makefile @@ -25,6 +25,7 @@ CFLAGS += -O3 # PMD code SRCS-$(CONFIG_RTE_LIBRTE_PMD_CPT) += cpt_pmd_cryptodev.c +SRCS-$(CONFIG_RTE_LIBRTE_PMD_CPT) += cpt_pmd_ops.c # Base code SRCS-$(CONFIG_RTE_LIBRTE_PMD_CPT) += cpt_device.c diff --git a/drivers/crypto/cpt/cpt_pmd_cryptodev.c b/drivers/crypto/cpt/cpt_pmd_cryptodev.c index addddd8..3939b5e 100644 --- a/drivers/crypto/cpt/cpt_pmd_cryptodev.c +++ b/drivers/crypto/cpt/cpt_pmd_cryptodev.c @@ -13,6 +13,7 @@ #include "base/cpt_device.h" #include "cpt_pmd_logs.h" +#include "cpt_pmd_ops.h" #define CSP_INTR_POLL_INTERVAL_MS 50 @@ -38,7 +39,7 @@ cpt_pmd_alarm_cb, arg); } -static int +int cpt_pmd_periodic_alarm_stop(void *arg) { return rte_eal_alarm_cancel(cpt_pmd_alarm_cb, arg); @@ -46,11 +47,11 @@ static struct rte_cryptodev_ops cptvf_ops = { /* Device related operations */ - .dev_configure = NULL, - .dev_start = NULL, - .dev_stop = NULL, - .dev_close = NULL, - .dev_infos_get = NULL, + .dev_configure = cpt_pmd_dev_config, + .dev_start = cpt_pmd_dev_start, + .dev_stop = cpt_pmd_dev_stop, + .dev_close = cpt_pmd_dev_close, + .dev_infos_get = cptvf_dev_info_get, .stats_get = NULL, .stats_reset = NULL, diff --git a/drivers/crypto/cpt/cpt_pmd_ops.c b/drivers/crypto/cpt/cpt_pmd_ops.c new file mode 100644 index 0000000..2f066cb --- /dev/null +++ b/drivers/crypto/cpt/cpt_pmd_ops.c @@ -0,0 +1,544 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2017 Cavium, Inc + */ + +#include +#include +#include + +#include "cpt_pmd_logs.h" +#include "cpt_pmd_ops.h" +#include "base/cpt.h" +#include "base/cpt_device.h" + +struct cpt_sess_misc { + uint16_t cpt_op:4; + uint16_t zsk_flag:4; + uint16_t aes_gcm:1; + uint16_t aes_ctr:1; + uint16_t dir_dma_supp:1; /* Single frag DMA supported? */ + uint16_t is_gmac:1; + uint16_t aad_length; + uint8_t mac_len; + uint8_t iv_length; /**< IV length in bytes */ + uint8_t auth_iv_length; /**< Auth IV length in bytes */ + uint8_t rsvd1; + uint16_t iv_offset; /**< IV offset in bytes */ + uint16_t auth_iv_offset; /**< Auth IV offset in bytes */ + uint32_t salt; + phys_addr_t ctx_dma_addr; +}; + +/* Helper macros */ + +#define SRC_IOV_SIZE \ + (sizeof(iov_ptr_t) + (sizeof(buf_ptr_t) * MAX_SG_CNT)) +#define DST_IOV_SIZE \ + (sizeof(iov_ptr_t) + (sizeof(buf_ptr_t) * MAX_SG_CNT)) + +#define SESS_PRIV(__sess) \ + (void *)((uint8_t *)__sess + sizeof(struct cpt_sess_misc)) + +#define BYTE_LEN 8 + +/* #define CPT_ALWAYS_USE_SG_MODE */ +#define CPT_ALWAYS_USE_SEPARATE_BUF + +/* TODO: Add all other capabilities */ +static const struct rte_cryptodev_capabilities cpt_capabilities[] = { + { /* SHA1 HMAC */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_SHA1_HMAC, + .block_size = 64, + .key_size = { + .min = 64, + .max = 64, + .increment = 0 + }, + .digest_size = { + .min = 1, + .max = 20, + .increment = 1 + }, + .aad_size = { 0 } + }, } + }, } + }, + { /* SHA224 HMAC */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_SHA224_HMAC, + .block_size = 64, + .key_size = { + .min = 64, + .max = 64, + .increment = 0 + }, + .digest_size = { + .min = 1, + .max = 28, + .increment = 1 + }, + .aad_size = { 0 } + }, } + }, } + }, + { /* SHA256 HMAC */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_SHA256_HMAC, + .block_size = 64, + .key_size = { + .min = 64, + .max = 64, + .increment = 0 + }, + .digest_size = { + .min = 1, + .max = 32, + .increment = 1 + }, + .aad_size = { 0 } + }, } + }, } + }, + { /* SHA384 HMAC */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_SHA384_HMAC, + .block_size = 64, + .key_size = { + .min = 64, + .max = 64, + .increment = 0 + }, + .digest_size = { + .min = 1, + .max = 48, + .increment = 1 + }, + .aad_size = { 0 } + }, } + }, } + }, + { /* SHA512 HMAC */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_SHA512_HMAC, + .block_size = 128, + .key_size = { + .min = 64, + .max = 64, + .increment = 0 + }, + .digest_size = { + .min = 1, + .max = 64, + .increment = 1 + }, + .aad_size = { 0 } + }, } + }, } + }, + { /* MD5 HMAC */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_MD5_HMAC, + .block_size = 64, + .key_size = { + .min = 8, + .max = 64, + .increment = 8 + }, + .digest_size = { + .min = 1, + .max = 16, + .increment = 1 + }, + .aad_size = { 0 } + }, } + }, } + }, + { /* AES GCM */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD, + {.aead = { + .algo = RTE_CRYPTO_AEAD_AES_GCM, + .block_size = 16, + .key_size = { + .min = 16, + .max = 32, + .increment = 8 + }, + .digest_size = { + .min = 8, + .max = 16, + .increment = 4 + }, + .aad_size = { + .min = 0, + .max = 1024, + .increment = 1 + }, + .iv_size = { + .min = 12, + .max = 12, + .increment = 0 + } + }, } + }, } + }, + { /* AES GMAC (AUTH) */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_AES_GMAC, + .block_size = 16, + .key_size = { + .min = 16, + .max = 32, + .increment = 8 + }, + .digest_size = { + .min = 8, + .max = 16, + .increment = 4 + }, + .aad_size = { + .min = 1, + .max = 65535, + .increment = 1 + } + }, } + }, } + }, + { /* SNOW 3G (UIA2) */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2, + .block_size = 16, + .key_size = { + .min = 16, + .max = 16, + .increment = 0 + }, + .digest_size = { + .min = 4, + .max = 4, + .increment = 0 + }, + .aad_size = { + .min = 16, + .max = 16, + .increment = 0 + } + }, } + }, } + }, + { /* AES CBC */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, + {.cipher = { + .algo = RTE_CRYPTO_CIPHER_AES_CBC, + .block_size = 16, + .key_size = { + .min = 16, + .max = 32, + .increment = 8 + }, + .iv_size = { + .min = 16, + .max = 16, + .increment = 0 + } + }, } + }, } + }, + { /* SNOW 3G (UEA2) */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, + {.cipher = { + .algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2, + .block_size = 16, + .key_size = { + .min = 16, + .max = 16, + .increment = 0 + }, + .iv_size = { + .min = 16, + .max = 16, + .increment = 0 + } + }, } + }, } + }, + { /* AES CTR */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, + {.cipher = { + .algo = RTE_CRYPTO_CIPHER_AES_CTR, + .block_size = 16, + .key_size = { + .min = 16, + .max = 32, + .increment = 8 + }, + .iv_size = { + .min = 16, + .max = 16, + .increment = 0 + } + }, } + }, } + }, + { /* NULL (AUTH) */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_NULL, + .block_size = 1, + .key_size = { + .min = 0, + .max = 0, + .increment = 0 + }, + .digest_size = { + .min = 0, + .max = 0, + .increment = 0 + }, + .aad_size = { 0 } + }, }, + }, }, + }, + { /* NULL (CIPHER) */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, + {.cipher = { + .algo = RTE_CRYPTO_CIPHER_NULL, + .block_size = 1, + .key_size = { + .min = 0, + .max = 0, + .increment = 0 + }, + .iv_size = { + .min = 0, + .max = 0, + .increment = 0 + } + }, }, + }, } + }, + { /* KASUMI (F8) */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, + {.cipher = { + .algo = RTE_CRYPTO_CIPHER_KASUMI_F8, + .block_size = 8, + .key_size = { + .min = 16, + .max = 16, + .increment = 0 + }, + .iv_size = { + .min = 8, + .max = 8, + .increment = 0 + } + }, } + }, } + }, + { /* ZUC (EIA3) */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_ZUC_EIA3, + .block_size = 16, + .key_size = { + .min = 16, + .max = 16, + .increment = 0 + }, + .digest_size = { + .min = 4, + .max = 4, + .increment = 0 + }, + .aad_size = { + .min = 16, + .max = 16, + .increment = 0 + } + }, } + }, } + }, + { /* ZUC (EEA3) */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, + {.cipher = { + .algo = RTE_CRYPTO_CIPHER_ZUC_EEA3, + .block_size = 16, + .key_size = { + .min = 16, + .max = 16, + .increment = 0 + }, + .iv_size = { + .min = 16, + .max = 16, + .increment = 0 + } + }, } + }, } + }, + { /* KASUMI (F9) */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + {.auth = { + .algo = RTE_CRYPTO_AUTH_KASUMI_F9, + .block_size = 8, + .key_size = { + .min = 16, + .max = 16, + .increment = 0 + }, + .digest_size = { + .min = 4, + .max = 4, + .increment = 0 + }, + .aad_size = { + .min = 8, + .max = 8, + .increment = 0 + } + }, } + }, } + }, + { /* 3DES CBC */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, + {.cipher = { + .algo = RTE_CRYPTO_CIPHER_3DES_CBC, + .block_size = 8, + .key_size = { + .min = 24, + .max = 24, + .increment = 0 + }, + .iv_size = { + .min = 8, + .max = 16, + .increment = 8 + } + }, } + }, } + }, + RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() +}; + +int cpt_pmd_dev_config(struct rte_cryptodev *dev __rte_unused, + struct rte_cryptodev_config *config __rte_unused) +{ + PMD_INIT_FUNC_TRACE(); + return 0; +} + +int cpt_pmd_dev_start(struct rte_cryptodev *c_dev __rte_unused) +{ + struct cpt_vf *cptvf = c_dev->data->dev_private; + + PMD_INIT_FUNC_TRACE(); + + return cptvf_start_device(cptvf); +} + +void cpt_pmd_dev_stop(struct rte_cryptodev *c_dev __rte_unused) +{ + struct cpt_vf *cptvf = c_dev->data->dev_private; + + PMD_INIT_FUNC_TRACE(); + + cptvf_stop_device(cptvf); +} + +int cpt_pmd_dev_close(struct rte_cryptodev *c_dev) +{ + struct cpt_vf *cptvf = c_dev->data->dev_private; + int i, ret; + + PMD_INIT_FUNC_TRACE(); + + for (i = 0; i < c_dev->data->nb_queue_pairs; i++) { + ret = cpt_pmd_que_pair_release(c_dev, i); + if (ret) + return ret; + } + cpt_pmd_periodic_alarm_stop(cptvf); + cptvf_deinit_device(cptvf); + + return 0; +} + +void +cptvf_dev_info_get(struct rte_cryptodev *dev, struct rte_cryptodev_info *info) +{ + PMD_INIT_FUNC_TRACE(); + if (info != NULL) { + info->max_nb_queue_pairs = CPT_NUM_QS_PER_VF; + info->feature_flags = dev->feature_flags; + info->capabilities = cpt_capabilities; + /* TODO: Hardcoding as of now */ + info->sym.max_nb_sessions = 128; + info->driver_id = cryptodev_cpt_driver_id; + } +} + +int +cpt_pmd_que_pair_release(struct rte_cryptodev *dev, uint16_t que_pair_id) +{ + cpt_instance_t *instance = dev->data->queue_pairs[que_pair_id]; + int ret; + + PMD_INIT_FUNC_TRACE(); + + ret = cptvf_put_resource(instance); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Error putting instance handle" + " of device %s : ret = %d\n", dev->data->name, ret); + return ret; + } + + dev->data->queue_pairs[que_pair_id] = NULL; + + return 0; +} diff --git a/drivers/crypto/cpt/cpt_pmd_ops.h b/drivers/crypto/cpt/cpt_pmd_ops.h new file mode 100644 index 0000000..015b4a2 --- /dev/null +++ b/drivers/crypto/cpt/cpt_pmd_ops.h @@ -0,0 +1,64 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2017 Cavium, Inc + */ + +#ifndef __CPT_PMD_OPS_H_ +#define __CPT_PMD_OPS_H_ + +#include "base/cpt.h" + +#define CAVIUM_VENDOR_ID 0x177d +#define NITROXIII_DEV_ID 0x11 + +#define CSP_OP_CIPHER_ENCRYPT 0x1 +#define CSP_OP_CIPHER_DECRYPT 0x2 +#define CSP_OP_CIPHER_MASK 0x3 + +#define CSP_OP_AUTH_VERIFY 0x4 +#define CSP_OP_AUTH_GENERATE 0x8 +#define CSP_OP_AUTH_MASK 0xC + +#define CSP_OP_ENCODE (CSP_OP_CIPHER_ENCRYPT | CSP_OP_AUTH_GENERATE) +#define CSP_OP_DECODE (CSP_OP_CIPHER_DECRYPT | CSP_OP_AUTH_VERIFY) + +#define MAX_CIPHER_KEY_LEN 32 +#define MAX_AUTH_KEY_LEN 32 +#define DEFAULT_BLOCK_SIZE 64 + +#define CSP_DDMA_AUTH (1 << 1) +#define CSP_DDMA_ENC (1 << 2) +#define CSP_DDMA_SUPPORTED (CSP_DDMA_AUTH | CSP_DDMA_ENC) + +/* + * Space needed in packet for direct-dma operation. + * UCODE result & padding - 16 bytes max + * Result - 16 bytes + * struct cb_info size + */ +#define CSP_DDMA_EXTRA_SPACE (32 + sizeof(struct cpt_cb_info)) + +#define ZS_EA 0x1 +#define ZS_IA 0x2 +#define K_F8 0x4 +#define K_F9 0x8 + +extern uint8_t cryptodev_cpt_driver_id; +extern int cpt_pmd_periodic_alarm_stop(void *arg); +extern struct rte_mempool *cpt_meta_pool; +extern int cpt_op_mlen; +extern int cpt_op_sb_mlen; + +int cpt_pmd_dev_config(struct rte_cryptodev *dev __rte_unused, + struct rte_cryptodev_config *config __rte_unused); +int cpt_pmd_dev_start(struct rte_cryptodev *dev); + +void cpt_pmd_dev_stop(struct rte_cryptodev *dev); + +int cpt_pmd_dev_close(struct rte_cryptodev *dev); + +void cptvf_dev_info_get(struct rte_cryptodev *dev, + struct rte_cryptodev_info *inf); + +int cpt_pmd_que_pair_release(struct rte_cryptodev *dev, uint16_t que_pair_id); + +#endif