From patchwork Thu Jul 15 15:08:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95888 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 33D5AA0A0C; Thu, 15 Jul 2021 17:09:11 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C9FC541240; Thu, 15 Jul 2021 17:09:08 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2060.outbound.protection.outlook.com [40.107.220.60]) by mails.dpdk.org (Postfix) with ESMTP id 4D8934123B for ; Thu, 15 Jul 2021 17:09:06 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RcTU6L9CVxyr2mlA7hlqMGlprsiV9QWMMP7xbVMDoR43UPA5OF6jOqqyPOExAIUnn+jVkY4ZXmAWfRG8ZSDATniSZZF3oLzgoptx9sFzrYwBNUZZ5p+3hPAJhE0rO1p/KVhGZKz5Z87+T6+PumbRgdnIixXEbAyq/dOHbB4thI4MslFp/lxQds7jGXQcNqxAuUtuVRHpN1flWGuFH0gH7oXpcyPc1kgxq3aedWpjgjCOEb0o9m6umAkdp4tVV86A9wBgQakcqlmHt5NyPpN9LY/r3W5frBCMmXwpoxOymhkAzKpUtrQYhP8US6zJ+ME/63ll/ejuSHbSlzm0XhVefA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+Nr6HFysRWinOgWMhz7lmeSYtCS+mxafW8cCrRlE8Qs=; b=caXmAV5E5ln3Nu8T1d+u8gQw0WZr9G+U+W/hvb6jusMX8kRb3nxJaMlYEZWNg9ZNw3bOqq8aNzgyV8V8Mi7vJ0Qukdt1rxmYmzAgfPTyXPpw5/s55MyK2tc2K/wP7iRA2lk34eUd0Vl5Y168WbWd4UAaqHpC04NwyZWWRZX/algRyhjZQLK5SsT7c5J6s1Ghlzpw+KXXg6hXbUDvDDFWxDFIwM/+r2yNPQCW4ZGWFxSz1pUE3LHAMn8AKVRMO6nv/HQoTH1f9JnXIzh7YjiudmdToz+UuLuXN34s3k3edWAJMLPsi7ww0IrJM3lj2VSeEdL6QwqG8lpL++HqI2/AeA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+Nr6HFysRWinOgWMhz7lmeSYtCS+mxafW8cCrRlE8Qs=; b=V4+G75OtGLGsX+9qAUi+pl4k3s6G7fPBugvIibqJtcH2nNX+sx0FYxjBM/zda2zmbkbZrT6pl8pIrFBcNyyWKPZHbynQmWP67yQ/OBpa6zDrCwkL3sCiZXAIMU2Pl4ssnsBeFtIX/1WudWdXJATUEkbP7Gna55/j5KUZ+Lvzot8HVsJbrXNAzYsL9lWZbMjSKnCFqtW+OS1XstX5XUGpfa5mfOk7u+i7wFOTa1TQbbgsV9Fpsp9yi6QluuQyrR1jSjp7yoq+cQtWel59a4IfFaUygxDPOV9Jqw2C+9rHXXe66D0kxGJdvcPtyzHVVaH6OrqEX7AXRso5XZyHfh78OA== Received: from MWHPR03CA0009.namprd03.prod.outlook.com (2603:10b6:300:117::19) by CH0PR12MB5187.namprd12.prod.outlook.com (2603:10b6:610:ba::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23; Thu, 15 Jul 2021 15:09:04 +0000 Received: from CO1NAM11FT057.eop-nam11.prod.protection.outlook.com (2603:10b6:300:117:cafe::dd) by MWHPR03CA0009.outlook.office365.com (2603:10b6:300:117::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.22 via Frontend Transport; Thu, 15 Jul 2021 15:09:03 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT057.mail.protection.outlook.com (10.13.174.205) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:03 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:01 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:02 +0300 Message-ID: <20210715150817.51485-2-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4cc4188e-268e-4150-7ae3-08d947a27bca X-MS-TrafficTypeDiagnostic: CH0PR12MB5187: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:121; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4DjfxF2PdZdmTIedoOj4T6Uxtu+ub98yGBDZ2yCjNiwzV7x8y/zBqLgErTRwawE0G2zcp4SVIX2wgZCnWSWzw5pxenDMUZ90aaz2rwwAtO/wxNsFnkY2Jm3joPUTYxrykWhIxobwrTslbUWH6dz/6eDrBW+CmWfIbD4V2t/VudATTWvxGrW6WrIwC1wuinXqS95RIyHgMxvDejge754G1yDIZTvimf7ir4hd4cCSbInsDNGEchGvCmqlwi9ozpFsb9cCV6IS3/xxKcc9E0OWWjtG5C4If2AqG1h0FoqbRx0I0QdtVlb56GZp1TjhE/emcBTYPW7gXW7r4Q4pKfE0cMJ9ZRuDLwCB3r54qbDQvoXnLoL/Q81EuDKfCZqYszzQo3Kvc6O2ef5lvLJQ73lZ403aSAeH1KBZY+rGAp0nqrQqVrH0DGldMsUmsC4NbNnYB7gK1t4R/asHnegHPW8fTpoYBCy9ZkBGrwn1NKLzM1kQ+XY4TTyLL+KWV7t3dsNwaIPMngR8yUsbA1S32NeGDHwGekvBUnJ6FliYrfkTeapqiO1J9E+vsdcP5cojKNRto7uTkBgVFnZRF7N97EbM6onbacflkZZgx1U9CW+Rf88+ow4nhBN0lHiLnl5RBsnLStzdose2lJ+KNkZ3h1Nzl3Bdh8gtC/aoSP14F2LpSq57p3oN1/RL6Yp4unzC3sdcflBDBjV4keZOJLj8ILU8GO4n03odiZO8HsPndlhRI1Y= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(46966006)(36840700001)(6286002)(26005)(47076005)(8936002)(8676002)(55016002)(70206006)(86362001)(36860700001)(83380400001)(82740400003)(186003)(16526019)(70586007)(316002)(7696005)(36906005)(6916009)(2616005)(356005)(1076003)(54906003)(426003)(336012)(478600001)(5660300002)(2906002)(34020700004)(82310400003)(4326008)(36756003)(7636003)(30864003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:03.5477 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4cc4188e-268e-4150-7ae3-08d947a27bca X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT057.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR12MB5187 Subject: [dpdk-dev] [PATCH v7 01/16] drivers: introduce mlx5 crypto PMD X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Add a new PMD for Mellanox devices- crypto PMD. The crypto PMD will be supported starting Nvidia ConnectX6 and BlueField2. The crypto PMD will add the support of encryption and decryption using the AES-XTS symmetric algorithm. The crypto PMD requires rdma-core and uses mlx5 DevX. This patch adds the PCI probing, basic functions, build files and log utility. Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad --- MAINTAINERS | 4 + doc/guides/cryptodevs/features/mlx5.ini | 27 +++ doc/guides/cryptodevs/index.rst | 1 + doc/guides/cryptodevs/mlx5.rst | 63 ++++++ doc/guides/rel_notes/release_21_08.rst | 5 + drivers/common/mlx5/mlx5_common.h | 1 + drivers/common/mlx5/mlx5_common_pci.c | 14 ++ drivers/common/mlx5/mlx5_common_pci.h | 21 +- drivers/crypto/meson.build | 1 + drivers/crypto/mlx5/meson.build | 26 +++ drivers/crypto/mlx5/mlx5_crypto.c | 275 ++++++++++++++++++++++++ drivers/crypto/mlx5/mlx5_crypto_utils.h | 19 ++ drivers/crypto/mlx5/version.map | 3 + 13 files changed, 450 insertions(+), 10 deletions(-) create mode 100644 doc/guides/cryptodevs/features/mlx5.ini create mode 100644 doc/guides/cryptodevs/mlx5.rst create mode 100644 drivers/crypto/mlx5/meson.build create mode 100644 drivers/crypto/mlx5/mlx5_crypto.c create mode 100644 drivers/crypto/mlx5/mlx5_crypto_utils.h create mode 100644 drivers/crypto/mlx5/version.map diff --git a/MAINTAINERS b/MAINTAINERS index af2a91d7c4..ba2cb4ef42 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1102,6 +1102,10 @@ F: drivers/crypto/octeontx2/ F: doc/guides/cryptodevs/octeontx2.rst F: doc/guides/cryptodevs/features/octeontx2.ini +Mellanox mlx5 +M: Matan Azrad +F: drivers/crypto/mlx5/ + Null Crypto M: Declan Doherty F: drivers/crypto/null/ diff --git a/doc/guides/cryptodevs/features/mlx5.ini b/doc/guides/cryptodevs/features/mlx5.ini new file mode 100644 index 0000000000..ceadd967b6 --- /dev/null +++ b/doc/guides/cryptodevs/features/mlx5.ini @@ -0,0 +1,27 @@ +; +; Features of a mlx5 crypto driver. +; +; Refer to default.ini for the full list of available PMD features. +; +[Features] +HW Accelerated = Y + +; +; Supported crypto algorithms of a mlx5 crypto driver. +; +[Cipher] + +; +; Supported authentication algorithms of a mlx5 crypto driver. +; +[Auth] + +; +; Supported AEAD algorithms of a mlx5 crypto driver. +; +[AEAD] + +; +; Supported Asymmetric algorithms of a mlx5 crypto driver. +; +[Asymmetric] diff --git a/doc/guides/cryptodevs/index.rst b/doc/guides/cryptodevs/index.rst index 067e7d784e..0f981c77b5 100644 --- a/doc/guides/cryptodevs/index.rst +++ b/doc/guides/cryptodevs/index.rst @@ -23,6 +23,7 @@ Crypto Device Drivers octeontx octeontx2 openssl + mlx5 mvsam nitrox null diff --git a/doc/guides/cryptodevs/mlx5.rst b/doc/guides/cryptodevs/mlx5.rst new file mode 100644 index 0000000000..05a0a449e2 --- /dev/null +++ b/doc/guides/cryptodevs/mlx5.rst @@ -0,0 +1,63 @@ +.. SPDX-License-Identifier: BSD-3-Clause + Copyright (c) 2021 NVIDIA Corporation & Affiliates + +.. include:: + +MLX5 Crypto Driver +================== + +The MLX5 crypto driver library +(**librte_crypto_mlx5**) provides support for **Mellanox ConnectX-6** +family adapters. + +Overview +-------- + +The device can provide disk encryption services, allowing data encryption +and decryption towards a disk. Having all encryption/decryption +operations done in a single device can reduce cost and overheads of the related +FIPS certification, as ConnectX-6 is FIPS 140-2 level-2 ready. +The encryption cipher is AES-XTS of 256/512 bit key size. + +MKEY is a memory region object in the hardware, that holds address translation information and +attributes per memory area. Its ID must be tied to addresses provided to the hardware. +The encryption operations are performed with MKEY read/write transactions, when +the MKEY is configured to perform crypto operations. + +The encryption does not require text to be aligned to the AES block size (128b). + +The PMD uses libibverbs and libmlx5 to access the device firmware or to +access the hardware components directly. +There are different levels of objects and bypassing abilities. +To get the best performances: + +- Verbs is a complete high-level generic API. +- Direct Verbs is a device-specific API. +- DevX allows to access firmware objects. + +Enabling librte_crypto_mlx5 causes DPDK applications to be linked against +libibverbs. + + +Driver options +-------------- + +- ``class`` parameter [string] + + Select the class of the driver that should probe the device. + `crypto` for the mlx5 crypto driver. + + +Supported NICs +-------------- + +* Mellanox\ |reg| ConnectX\ |reg|-6 200G MCX654106A-HCAT (2x200G) + +Prerequisites +------------- + +- Mellanox OFED version: **5.3** + see :doc:`../../nics/mlx5` guide for more Mellanox OFED details. + +- Compilation can be done also with rdma-core v15+. + see :doc:`../../nics/mlx5` guide for more rdma-core details. diff --git a/doc/guides/rel_notes/release_21_08.rst b/doc/guides/rel_notes/release_21_08.rst index 7d289e07e3..2bf4ce7a73 100644 --- a/doc/guides/rel_notes/release_21_08.rst +++ b/doc/guides/rel_notes/release_21_08.rst @@ -125,6 +125,11 @@ New Features The experimental PMD power management API now supports managing multiple Ethernet Rx queues per lcore. +* **Added support for Nvidia crypto device driver.** + + * Added mlx5 crypto driver to support AES-XTS cipher operations. + The first device to support it is ConnectX-6. + Removed Items ------------- diff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h index 7fb7d40b38..962179a5a5 100644 --- a/drivers/common/mlx5/mlx5_common.h +++ b/drivers/common/mlx5/mlx5_common.h @@ -216,6 +216,7 @@ enum mlx5_class { MLX5_CLASS_VDPA = RTE_BIT64(1), MLX5_CLASS_REGEX = RTE_BIT64(2), MLX5_CLASS_COMPRESS = RTE_BIT64(3), + MLX5_CLASS_CRYPTO = RTE_BIT64(4), }; #define MLX5_DBR_SIZE RTE_CACHE_LINE_SIZE diff --git a/drivers/common/mlx5/mlx5_common_pci.c b/drivers/common/mlx5/mlx5_common_pci.c index 34747c4e07..5547e62d6b 100644 --- a/drivers/common/mlx5/mlx5_common_pci.c +++ b/drivers/common/mlx5/mlx5_common_pci.c @@ -31,6 +31,7 @@ static const struct { { .name = "net", .driver_class = MLX5_CLASS_NET }, { .name = "regex", .driver_class = MLX5_CLASS_REGEX }, { .name = "compress", .driver_class = MLX5_CLASS_COMPRESS }, + { .name = "crypto", .driver_class = MLX5_CLASS_CRYPTO }, }; static const unsigned int mlx5_class_combinations[] = { @@ -38,13 +39,26 @@ static const unsigned int mlx5_class_combinations[] = { MLX5_CLASS_VDPA, MLX5_CLASS_REGEX, MLX5_CLASS_COMPRESS, + MLX5_CLASS_CRYPTO, MLX5_CLASS_NET | MLX5_CLASS_REGEX, MLX5_CLASS_VDPA | MLX5_CLASS_REGEX, MLX5_CLASS_NET | MLX5_CLASS_COMPRESS, MLX5_CLASS_VDPA | MLX5_CLASS_COMPRESS, MLX5_CLASS_REGEX | MLX5_CLASS_COMPRESS, + MLX5_CLASS_NET | MLX5_CLASS_CRYPTO, + MLX5_CLASS_VDPA | MLX5_CLASS_CRYPTO, + MLX5_CLASS_REGEX | MLX5_CLASS_CRYPTO, + MLX5_CLASS_COMPRESS | MLX5_CLASS_CRYPTO, MLX5_CLASS_NET | MLX5_CLASS_REGEX | MLX5_CLASS_COMPRESS, MLX5_CLASS_VDPA | MLX5_CLASS_REGEX | MLX5_CLASS_COMPRESS, + MLX5_CLASS_NET | MLX5_CLASS_REGEX | MLX5_CLASS_CRYPTO, + MLX5_CLASS_VDPA | MLX5_CLASS_REGEX | MLX5_CLASS_CRYPTO, + MLX5_CLASS_NET | MLX5_CLASS_COMPRESS | MLX5_CLASS_CRYPTO, + MLX5_CLASS_VDPA | MLX5_CLASS_COMPRESS | MLX5_CLASS_CRYPTO, + MLX5_CLASS_NET | MLX5_CLASS_REGEX | MLX5_CLASS_COMPRESS | + MLX5_CLASS_CRYPTO, + MLX5_CLASS_VDPA | MLX5_CLASS_REGEX | MLX5_CLASS_COMPRESS | + MLX5_CLASS_CRYPTO, /* New class combination should be added here. */ }; diff --git a/drivers/common/mlx5/mlx5_common_pci.h b/drivers/common/mlx5/mlx5_common_pci.h index de89bb98bc..cb8d2f5f87 100644 --- a/drivers/common/mlx5/mlx5_common_pci.h +++ b/drivers/common/mlx5/mlx5_common_pci.h @@ -9,17 +9,18 @@ * @file * * RTE Mellanox PCI Driver Interface - * Mellanox ConnectX PCI device supports multiple class: net,vdpa,regex and - * compress devices. This layer enables creating such multiple class of devices - * on a single PCI device by allowing to bind multiple class specific device - * driver to attach to mlx5_pci driver. + * Mellanox ConnectX PCI device supports multiple class: net,vdpa,regex,compress + * and crypto devices. This layer enables creating such multiple class of + * devices on a single PCI device by allowing to bind multiple class specific + * device driver to attach to mlx5_pci driver. * - * ----------- ------------ ------------- ---------------- - * | mlx5 | | mlx5 | | mlx5 | | mlx5 | - * | net pmd | | vdpa pmd | | regex pmd | | compress pmd | - * ----------- ------------ ------------- ---------------- - * \ \ / / - * \ \ / / + * -------- -------- --------- ------------ ---------- + * | mlx5 | | mlx5 | | mlx5 | | mlx5 | | mlx5 | + * | net | | vdpa | | regex | | compress | | crypto | + * | pmd | | pmd | | pmd | | pmd | | pmd | + * -------- -------- --------- ------------ ---------- + * \ \ | / / + * \ \ | / / * \ \_--------------_/ / * \_______________| mlx5 |_______________/ * | pci common | diff --git a/drivers/crypto/meson.build b/drivers/crypto/meson.build index cb865aa0d5..ea239f4c56 100644 --- a/drivers/crypto/meson.build +++ b/drivers/crypto/meson.build @@ -16,6 +16,7 @@ drivers = [ 'dpaa_sec', 'dpaa2_sec', 'kasumi', + 'mlx5', 'mvsam', 'nitrox', 'null', diff --git a/drivers/crypto/mlx5/meson.build b/drivers/crypto/mlx5/meson.build new file mode 100644 index 0000000000..6fd70bc477 --- /dev/null +++ b/drivers/crypto/mlx5/meson.build @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright (c) 2021 NVIDIA Corporation & Affiliates + +if not is_linux + build = false + reason = 'only supported on Linux' + subdir_done() +endif + +fmt_name = 'mlx5_crypto' +deps += ['common_mlx5', 'eal', 'cryptodev'] +sources = files( + 'mlx5_crypto.c', +) +cflags_options = [ + '-std=c11', + '-Wno-strict-prototypes', + '-D_BSD_SOURCE', + '-D_DEFAULT_SOURCE', + '-D_XOPEN_SOURCE=600', +] +foreach option:cflags_options + if cc.has_argument(option) + cflags += option + endif +endforeach diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c new file mode 100644 index 0000000000..fbe3c21aae --- /dev/null +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -0,0 +1,275 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2021 NVIDIA Corporation & Affiliates + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "mlx5_crypto_utils.h" + +#define MLX5_CRYPTO_DRIVER_NAME mlx5_crypto +#define MLX5_CRYPTO_LOG_NAME pmd.crypto.mlx5 + +#define MLX5_CRYPTO_FEATURE_FLAGS \ + RTE_CRYPTODEV_FF_HW_ACCELERATED + +struct mlx5_crypto_priv { + TAILQ_ENTRY(mlx5_crypto_priv) next; + struct ibv_context *ctx; /* Device context. */ + struct rte_pci_device *pci_dev; + struct rte_cryptodev *crypto_dev; + void *uar; /* User Access Region. */ + uint32_t pdn; /* Protection Domain number. */ + struct ibv_pd *pd; +}; + +TAILQ_HEAD(mlx5_crypto_privs, mlx5_crypto_priv) mlx5_crypto_priv_list = + TAILQ_HEAD_INITIALIZER(mlx5_crypto_priv_list); +static pthread_mutex_t priv_list_lock = PTHREAD_MUTEX_INITIALIZER; + +int mlx5_crypto_logtype; + +uint8_t mlx5_crypto_driver_id; + +static const char mlx5_crypto_drv_name[] = RTE_STR(MLX5_CRYPTO_DRIVER_NAME); + +static const struct rte_driver mlx5_drv = { + .name = mlx5_crypto_drv_name, + .alias = mlx5_crypto_drv_name +}; + +static struct cryptodev_driver mlx5_cryptodev_driver; + +static struct rte_cryptodev_ops mlx5_crypto_ops = { + .dev_configure = NULL, + .dev_start = NULL, + .dev_stop = NULL, + .dev_close = NULL, + .dev_infos_get = NULL, + .stats_get = NULL, + .stats_reset = NULL, + .queue_pair_setup = NULL, + .queue_pair_release = NULL, + .sym_session_get_size = NULL, + .sym_session_configure = NULL, + .sym_session_clear = NULL, + .sym_get_raw_dp_ctx_size = NULL, + .sym_configure_raw_dp_ctx = NULL, +}; + +static void +mlx5_crypto_hw_global_release(struct mlx5_crypto_priv *priv) +{ + if (priv->pd != NULL) { + claim_zero(mlx5_glue->dealloc_pd(priv->pd)); + priv->pd = NULL; + } + if (priv->uar != NULL) { + mlx5_glue->devx_free_uar(priv->uar); + priv->uar = NULL; + } +} + +static int +mlx5_crypto_pd_create(struct mlx5_crypto_priv *priv) +{ +#ifdef HAVE_IBV_FLOW_DV_SUPPORT + struct mlx5dv_obj obj; + struct mlx5dv_pd pd_info; + int ret; + + priv->pd = mlx5_glue->alloc_pd(priv->ctx); + if (priv->pd == NULL) { + DRV_LOG(ERR, "Failed to allocate PD."); + return errno ? -errno : -ENOMEM; + } + obj.pd.in = priv->pd; + obj.pd.out = &pd_info; + ret = mlx5_glue->dv_init_obj(&obj, MLX5DV_OBJ_PD); + if (ret != 0) { + DRV_LOG(ERR, "Fail to get PD object info."); + mlx5_glue->dealloc_pd(priv->pd); + priv->pd = NULL; + return -errno; + } + priv->pdn = pd_info.pdn; + return 0; +#else + (void)priv; + DRV_LOG(ERR, "Cannot get pdn - no DV support."); + return -ENOTSUP; +#endif /* HAVE_IBV_FLOW_DV_SUPPORT */ +} + +static int +mlx5_crypto_hw_global_prepare(struct mlx5_crypto_priv *priv) +{ + if (mlx5_crypto_pd_create(priv) != 0) + return -1; + priv->uar = mlx5_devx_alloc_uar(priv->ctx, -1); + if (priv->uar == NULL || mlx5_os_get_devx_uar_reg_addr(priv->uar) == + NULL) { + rte_errno = errno; + claim_zero(mlx5_glue->dealloc_pd(priv->pd)); + DRV_LOG(ERR, "Failed to allocate UAR."); + return -1; + } + return 0; +} + +/** + * DPDK callback to register a PCI device. + * + * This function spawns crypto device out of a given PCI device. + * + * @param[in] pci_drv + * PCI driver structure (mlx5_crypto_driver). + * @param[in] pci_dev + * PCI device information. + * + * @return + * 0 on success, 1 to skip this driver, a negative errno value otherwise + * and rte_errno is set. + */ +static int +mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, + struct rte_pci_device *pci_dev) +{ + struct ibv_device *ibv; + struct rte_cryptodev *crypto_dev; + struct ibv_context *ctx; + struct mlx5_crypto_priv *priv; + struct mlx5_hca_attr attr = { 0 }; + struct rte_cryptodev_pmd_init_params init_params = { + .name = "", + .private_data_size = sizeof(struct mlx5_crypto_priv), + .socket_id = pci_dev->device.numa_node, + .max_nb_queue_pairs = + RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS, + }; + RTE_SET_USED(pci_drv); + if (rte_eal_process_type() != RTE_PROC_PRIMARY) { + DRV_LOG(ERR, "Non-primary process type is not supported."); + rte_errno = ENOTSUP; + return -rte_errno; + } + ibv = mlx5_os_get_ibv_device(&pci_dev->addr); + if (ibv == NULL) { + DRV_LOG(ERR, "No matching IB device for PCI slot " + PCI_PRI_FMT ".", pci_dev->addr.domain, + pci_dev->addr.bus, pci_dev->addr.devid, + pci_dev->addr.function); + return -rte_errno; + } + DRV_LOG(INFO, "PCI information matches for device \"%s\".", ibv->name); + ctx = mlx5_glue->dv_open_device(ibv); + if (ctx == NULL) { + DRV_LOG(ERR, "Failed to open IB device \"%s\".", ibv->name); + rte_errno = ENODEV; + return -rte_errno; + } + if (mlx5_devx_cmd_query_hca_attr(ctx, &attr) != 0 || + attr.crypto == 0 || attr.aes_xts == 0) { + DRV_LOG(ERR, "Not enough capabilities to support crypto " + "operations, maybe old FW/OFED version?"); + claim_zero(mlx5_glue->close_device(ctx)); + rte_errno = ENOTSUP; + return -ENOTSUP; + } + crypto_dev = rte_cryptodev_pmd_create(ibv->name, &pci_dev->device, + &init_params); + if (crypto_dev == NULL) { + DRV_LOG(ERR, "Failed to create device \"%s\".", ibv->name); + claim_zero(mlx5_glue->close_device(ctx)); + return -ENODEV; + } + DRV_LOG(INFO, + "Crypto device %s was created successfully.", ibv->name); + crypto_dev->dev_ops = &mlx5_crypto_ops; + crypto_dev->dequeue_burst = NULL; + crypto_dev->enqueue_burst = NULL; + crypto_dev->feature_flags = MLX5_CRYPTO_FEATURE_FLAGS; + crypto_dev->driver_id = mlx5_crypto_driver_id; + priv = crypto_dev->data->dev_private; + priv->ctx = ctx; + priv->pci_dev = pci_dev; + priv->crypto_dev = crypto_dev; + if (mlx5_crypto_hw_global_prepare(priv) != 0) { + rte_cryptodev_pmd_destroy(priv->crypto_dev); + claim_zero(mlx5_glue->close_device(priv->ctx)); + return -1; + } + pthread_mutex_lock(&priv_list_lock); + TAILQ_INSERT_TAIL(&mlx5_crypto_priv_list, priv, next); + pthread_mutex_unlock(&priv_list_lock); + return 0; +} + +static int +mlx5_crypto_pci_remove(struct rte_pci_device *pdev) +{ + struct mlx5_crypto_priv *priv = NULL; + + pthread_mutex_lock(&priv_list_lock); + TAILQ_FOREACH(priv, &mlx5_crypto_priv_list, next) + if (rte_pci_addr_cmp(&priv->pci_dev->addr, &pdev->addr) != 0) + break; + if (priv) + TAILQ_REMOVE(&mlx5_crypto_priv_list, priv, next); + pthread_mutex_unlock(&priv_list_lock); + if (priv) { + mlx5_crypto_hw_global_release(priv); + rte_cryptodev_pmd_destroy(priv->crypto_dev); + claim_zero(mlx5_glue->close_device(priv->ctx)); + } + return 0; +} + +static const struct rte_pci_id mlx5_crypto_pci_id_map[] = { + { + RTE_PCI_DEVICE(PCI_VENDOR_ID_MELLANOX, + PCI_DEVICE_ID_MELLANOX_CONNECTX6) + }, + { + .vendor_id = 0 + } + }; + +static struct mlx5_pci_driver mlx5_crypto_driver = { + .driver_class = MLX5_CLASS_CRYPTO, + .pci_driver = { + .driver = { + .name = RTE_STR(MLX5_CRYPTO_DRIVER_NAME), + }, + .id_table = mlx5_crypto_pci_id_map, + .probe = mlx5_crypto_pci_probe, + .remove = mlx5_crypto_pci_remove, + .drv_flags = 0, + }, +}; + +RTE_INIT(rte_mlx5_crypto_init) +{ + mlx5_common_init(); + if (mlx5_glue != NULL) + mlx5_pci_driver_register(&mlx5_crypto_driver); +} + +RTE_PMD_REGISTER_CRYPTO_DRIVER(mlx5_cryptodev_driver, mlx5_drv, + mlx5_crypto_driver_id); + +RTE_LOG_REGISTER_DEFAULT(mlx5_crypto_logtype, NOTICE) +RTE_PMD_EXPORT_NAME(MLX5_CRYPTO_DRIVER_NAME, __COUNTER__); +RTE_PMD_REGISTER_PCI_TABLE(MLX5_CRYPTO_DRIVER_NAME, mlx5_crypto_pci_id_map); +RTE_PMD_REGISTER_KMOD_DEP(MLX5_CRYPTO_DRIVER_NAME, "* ib_uverbs & mlx5_core & mlx5_ib"); diff --git a/drivers/crypto/mlx5/mlx5_crypto_utils.h b/drivers/crypto/mlx5/mlx5_crypto_utils.h new file mode 100644 index 0000000000..b6c60ca782 --- /dev/null +++ b/drivers/crypto/mlx5/mlx5_crypto_utils.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2021 NVIDIA Corporation & Affiliates + */ + +#ifndef RTE_PMD_MLX5_CRYPTO_UTILS_H_ +#define RTE_PMD_MLX5_CRYPTO_UTILS_H_ + +#include + +extern int mlx5_crypto_logtype; + +#define MLX5_CRYPTO_LOG_PREFIX "mlx5_crypto" +/* Generic printf()-like logging macro with automatic line feed. */ +#define DRV_LOG(level, ...) \ + PMD_DRV_LOG_(level, mlx5_crypto_logtype, MLX5_CRYPTO_LOG_PREFIX, \ + __VA_ARGS__ PMD_DRV_LOG_STRIP PMD_DRV_LOG_OPAREN, \ + PMD_DRV_LOG_CPAREN) + +#endif /* RTE_PMD_MLX5_CRYPTO_UTILS_H_ */ diff --git a/drivers/crypto/mlx5/version.map b/drivers/crypto/mlx5/version.map new file mode 100644 index 0000000000..4a76d1d52d --- /dev/null +++ b/drivers/crypto/mlx5/version.map @@ -0,0 +1,3 @@ +DPDK_21 { + local: *; +}; From patchwork Thu Jul 15 15:08:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95889 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 61CD0A0A0C; Thu, 15 Jul 2021 17:09:21 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8A83441275; Thu, 15 Jul 2021 17:09:11 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2085.outbound.protection.outlook.com [40.107.94.85]) by mails.dpdk.org (Postfix) with ESMTP id 174B14123B for ; Thu, 15 Jul 2021 17:09:08 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PXy61dtQdQzSDUF59z+RnNpLejqA2/zS0+IKq1qWu3HNo2nznaC+uFjMknU2e59WssA+wU/21fKlPRhdXfjOtzODsnCmwrscLBsHuYgftda3dSiDNpZ4QTHkiQqciQoXZUiAhmjz1gTyCbSHZ0HgN0/WFkh0/S4E65petKGxrqEfnganFpigMzc2nFnM2U3HdIFFEQXbguc4O1vo2QdgRTlFGVi+YQUExN1kf6Uk7nXktglbM/VC/YYk9arCb/8Mf46XdDc9Qh16CRlYgGUMoF3D3xOLk3XWOuZXEKYH8thSp4Yu7oz4ce9rGcxLSeZ0gezVlpmbeUtQc42q6PobxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OGj2qfgA9enBMp0FrtTabcR+gbQjQ+dGIKPMJHLwq9E=; b=nIdBvHpAHUPdk8z+b/L8VwJx/gESIGFqZTsti6Dcl4lkkilsiYm5/9V5vY7wK0EAjPn24XvasiI5+0znLCpwfXnlZCJMnAHfJMeQ1rxvW9jIgKqBAJkF1YC+VZ9LFVJP0MFYdHBZJoQrZtTbsF/WhSmOR0z+Gkve8SdhcoMU3oBL5QEYjSbBW6/dxzaDeckZ1Mk3PWM2MMBYtpNkbn6z2VcCUu6ydkZSRAA4AJUO/lufY8aF9OQDzZOvPFsYm39pUsBQo38oMZpPrgyjaTZgvxRH5QUnpIe1OBJwj38NmOdeVgRzqucJSCAu9bCwdvp8rdanD7x2otwSpjSMdvRi+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OGj2qfgA9enBMp0FrtTabcR+gbQjQ+dGIKPMJHLwq9E=; b=A6mzRQNrPiwItEcZV6n1/9MOUeDzFPd0VGdBvbwlXSUNnJuIW2dpzB0Cz+00sdP4GlBHeBx5wNVidsFP/WEb6wtuqMtmSV7REoLGnPDGLhv+spBhY2DMK0fdM1qEL3leW4yKo30i+LolImB75EvJ0deKFDbkx8WkNcj7m0zwvtoXhx94tvlfFJXna5D2qDFkeBFjXY75/XTRDi++dih1bIe6F9JyvUqpsbxSyGVDhExZ5XeA4hrJ3IG4QHJvvVZ/52BrnNKFStkmFRFX5cE6GpUo9MrFRlSUrBhyH/U836KdxEuaH0lgyq9YRSNwVOeKWLqLW5tU1ZcGVatdLEjkAw== Received: from MWHPR03CA0017.namprd03.prod.outlook.com (2603:10b6:300:117::27) by CH2PR12MB4860.namprd12.prod.outlook.com (2603:10b6:610:6c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul 2021 15:09:06 +0000 Received: from CO1NAM11FT057.eop-nam11.prod.protection.outlook.com (2603:10b6:300:117:cafe::47) by MWHPR03CA0017.outlook.office365.com (2603:10b6:300:117::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.22 via Frontend Transport; Thu, 15 Jul 2021 15:09:05 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT057.mail.protection.outlook.com (10.13.174.205) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:05 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:03 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:03 +0300 Message-ID: <20210715150817.51485-3-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 65edd074-15f7-4150-95ba-08d947a27cb2 X-MS-TrafficTypeDiagnostic: CH2PR12MB4860: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3968; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qHDSLNt4YAmHJKniGN4mb+q2a7LPe1dGGcGiIm/wdBBV1ttq0d3KBCIcIrkOzL6O3faMjXgZPwfxde3xjknwtSdIBVPX0vd18fGzu1MR+pFGVNZcJciUdXliAruIHarSoVy5aomfB2B/YbWTULSfwXXr6npV9PXS3XCKu8XQrP/iarK0icXiRRjXbAX7VI/w5yhrzHFMyyz+LQEdoSNUF6jnsFOMrBOb4z7/hsf3uakMmsRVfji9LlFgIeVuAu36Dwulwc61czmSPh9Ml7jL85LbXLyQ7dFD36sR3pnSfHvnnjKUn39p3qClt4PQEB5Izoffw3vfgqZsSIoyiKPRIZLgfm3gBgGWEpck9Du1QdTYeO/rQFQALb1PueaZqjKY9LcLCml1j2LJZ+Hg206pJ9CernneQkdQvOUN6jf/Vohd4A2u5eUz5nOAq/q8ZUUgku2zVlzONxC7ba/7eLD6d4m32qRKUSYwHYKn6MFtKO6NlSjuCVMSCaMdc8elFr3hzRJwBTSGlhSpwTlFaz+ndSB5cP0bkw/8gQOHp92+ykkwvZ2cqPVUREzK/QM9Gzg9GheDzrk6WsGGCydD8tEd1+a9f3hp6dBLp0CuqLpNw1z6IYkAivQnXAleJH/SH8fUoX/9V/pB/nBEhL+tzuU+pr2jV/776BDaazN/BRV2meeh5UX9KR80VR76BYH+qeTNOydKmzgTIdOuDaIZkQpYkWUe7O1pzcY2aJpQSzU2oN0= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(36840700001)(46966006)(426003)(7696005)(86362001)(70206006)(82310400003)(8676002)(70586007)(2616005)(336012)(478600001)(7636003)(8936002)(356005)(54906003)(36860700001)(26005)(55016002)(4326008)(1076003)(6286002)(83380400001)(186003)(16526019)(6916009)(47076005)(36906005)(2906002)(36756003)(316002)(5660300002)(34020700004); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:05.0839 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 65edd074-15f7-4150-95ba-08d947a27cb2 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT057.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4860 Subject: [dpdk-dev] [PATCH v7 02/16] crypto/mlx5: add DEK object management X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" A DEK(Data encryption Key) is an mlx5 HW object which represents the cipher algorithm key. The DEKs are used during data encryption/decryption operations. In symmetric algorithms like AES-STS, we use the same DEK for both encryption and decryption. Use the mlx5 hash-list tool to manage the DEK objects in the PMD. Provide the compare, create and destroy functions to manage DEKs in hash-list and introduce an internal API to setup and unset the DEK management and to prepare and destroy specific DEK object. The DEK hash-list will be created in dev_configure routine and destroyed in dev_close routine. Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad --- drivers/crypto/mlx5/meson.build | 1 + drivers/crypto/mlx5/mlx5_crypto.c | 42 ++++--- drivers/crypto/mlx5/mlx5_crypto.h | 51 ++++++++ drivers/crypto/mlx5/mlx5_crypto_dek.c | 161 ++++++++++++++++++++++++++ 4 files changed, 239 insertions(+), 16 deletions(-) create mode 100644 drivers/crypto/mlx5/mlx5_crypto.h create mode 100644 drivers/crypto/mlx5/mlx5_crypto_dek.c diff --git a/drivers/crypto/mlx5/meson.build b/drivers/crypto/mlx5/meson.build index 6fd70bc477..d55cdbfe6f 100644 --- a/drivers/crypto/mlx5/meson.build +++ b/drivers/crypto/mlx5/meson.build @@ -11,6 +11,7 @@ fmt_name = 'mlx5_crypto' deps += ['common_mlx5', 'eal', 'cryptodev'] sources = files( 'mlx5_crypto.c', + 'mlx5_crypto_dek.c', ) cflags_options = [ '-std=c11', diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index fbe3c21aae..d2d82c7b15 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -3,12 +3,9 @@ */ #include -#include #include +#include #include -#include -#include -#include #include #include @@ -17,6 +14,7 @@ #include #include "mlx5_crypto_utils.h" +#include "mlx5_crypto.h" #define MLX5_CRYPTO_DRIVER_NAME mlx5_crypto #define MLX5_CRYPTO_LOG_NAME pmd.crypto.mlx5 @@ -24,16 +22,6 @@ #define MLX5_CRYPTO_FEATURE_FLAGS \ RTE_CRYPTODEV_FF_HW_ACCELERATED -struct mlx5_crypto_priv { - TAILQ_ENTRY(mlx5_crypto_priv) next; - struct ibv_context *ctx; /* Device context. */ - struct rte_pci_device *pci_dev; - struct rte_cryptodev *crypto_dev; - void *uar; /* User Access Region. */ - uint32_t pdn; /* Protection Domain number. */ - struct ibv_pd *pd; -}; - TAILQ_HEAD(mlx5_crypto_privs, mlx5_crypto_priv) mlx5_crypto_priv_list = TAILQ_HEAD_INITIALIZER(mlx5_crypto_priv_list); static pthread_mutex_t priv_list_lock = PTHREAD_MUTEX_INITIALIZER; @@ -51,11 +39,33 @@ static const struct rte_driver mlx5_drv = { static struct cryptodev_driver mlx5_cryptodev_driver; +static int +mlx5_crypto_dev_configure(struct rte_cryptodev *dev, + struct rte_cryptodev_config *config __rte_unused) +{ + struct mlx5_crypto_priv *priv = dev->data->dev_private; + + if (mlx5_crypto_dek_setup(priv) != 0) { + DRV_LOG(ERR, "Dek hash list creation has failed."); + return -ENOMEM; + } + return 0; +} + +static int +mlx5_crypto_dev_close(struct rte_cryptodev *dev) +{ + struct mlx5_crypto_priv *priv = dev->data->dev_private; + + mlx5_crypto_dek_unset(priv); + return 0; +} + static struct rte_cryptodev_ops mlx5_crypto_ops = { - .dev_configure = NULL, + .dev_configure = mlx5_crypto_dev_configure, .dev_start = NULL, .dev_stop = NULL, - .dev_close = NULL, + .dev_close = mlx5_crypto_dev_close, .dev_infos_get = NULL, .stats_get = NULL, .stats_reset = NULL, diff --git a/drivers/crypto/mlx5/mlx5_crypto.h b/drivers/crypto/mlx5/mlx5_crypto.h new file mode 100644 index 0000000000..167e9e57ad --- /dev/null +++ b/drivers/crypto/mlx5/mlx5_crypto.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2021 NVIDIA Corporation & Affiliates + */ + +#ifndef MLX5_CRYPTO_H_ +#define MLX5_CRYPTO_H_ + +#include + +#include +#include + +#include + +#define MLX5_CRYPTO_DEK_HTABLE_SZ (1 << 11) +#define MLX5_CRYPTO_KEY_LENGTH 80 + +struct mlx5_crypto_priv { + TAILQ_ENTRY(mlx5_crypto_priv) next; + struct ibv_context *ctx; /* Device context. */ + struct rte_pci_device *pci_dev; + struct rte_cryptodev *crypto_dev; + void *uar; /* User Access Region. */ + uint32_t pdn; /* Protection Domain number. */ + struct ibv_pd *pd; + struct mlx5_hlist *dek_hlist; /* Dek hash list. */ +}; + +struct mlx5_crypto_dek { + struct mlx5_list_entry entry; /* Pointer to DEK hash list entry. */ + struct mlx5_devx_obj *obj; /* Pointer to DEK DevX object. */ + uint8_t data[MLX5_CRYPTO_KEY_LENGTH]; /* DEK key data. */ + bool size_is_48; /* Whether the key\data size is 48 bytes or not. */ +} __rte_cache_aligned; + +int +mlx5_crypto_dek_destroy(struct mlx5_crypto_priv *priv, + struct mlx5_crypto_dek *dek); + +struct mlx5_crypto_dek * +mlx5_crypto_dek_prepare(struct mlx5_crypto_priv *priv, + struct rte_crypto_cipher_xform *cipher); + +int +mlx5_crypto_dek_setup(struct mlx5_crypto_priv *priv); + +void +mlx5_crypto_dek_unset(struct mlx5_crypto_priv *priv); + +#endif /* MLX5_CRYPTO_H_ */ + diff --git a/drivers/crypto/mlx5/mlx5_crypto_dek.c b/drivers/crypto/mlx5/mlx5_crypto_dek.c new file mode 100644 index 0000000000..43d1bcc9f8 --- /dev/null +++ b/drivers/crypto/mlx5/mlx5_crypto_dek.c @@ -0,0 +1,161 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2021 NVIDIA Corporation & Affiliates + */ + +#include +#include +#include +#include + +#include +#include + +#include "mlx5_crypto_utils.h" +#include "mlx5_crypto.h" + +struct mlx5_crypto_dek_ctx { + struct rte_crypto_cipher_xform *cipher; + struct mlx5_crypto_priv *priv; +}; + +int +mlx5_crypto_dek_destroy(struct mlx5_crypto_priv *priv, + struct mlx5_crypto_dek *dek) +{ + return mlx5_hlist_unregister(priv->dek_hlist, &dek->entry); +} + +struct mlx5_crypto_dek * +mlx5_crypto_dek_prepare(struct mlx5_crypto_priv *priv, + struct rte_crypto_cipher_xform *cipher) +{ + struct mlx5_hlist *dek_hlist = priv->dek_hlist; + struct mlx5_crypto_dek_ctx dek_ctx = { + .cipher = cipher, + .priv = priv, + }; + struct rte_crypto_cipher_xform *cipher_ctx = cipher; + uint64_t key64 = __rte_raw_cksum(cipher_ctx->key.data, + cipher_ctx->key.length, 0); + struct mlx5_list_entry *entry = mlx5_hlist_register(dek_hlist, + key64, &dek_ctx); + + return entry == NULL ? NULL : + container_of(entry, struct mlx5_crypto_dek, entry); +} + +static struct mlx5_list_entry * +mlx5_crypto_dek_clone_cb(void *tool_ctx __rte_unused, + struct mlx5_list_entry *oentry, + void *cb_ctx __rte_unused) +{ + struct mlx5_crypto_dek *entry = rte_zmalloc(__func__, sizeof(*entry), + RTE_CACHE_LINE_SIZE); + + if (!entry) { + DRV_LOG(ERR, "Cannot allocate dek resource memory."); + rte_errno = ENOMEM; + return NULL; + } + memcpy(entry, oentry, sizeof(*entry)); + return &entry->entry; +} + +static void +mlx5_crypto_dek_clone_free_cb(void *tool_ctx __rte_unused, + struct mlx5_list_entry *entry) +{ + struct mlx5_crypto_dek *dek = container_of(entry, + struct mlx5_crypto_dek, entry); + + rte_free(dek); +} + +static int +mlx5_crypto_dek_match_cb(void *tool_ctx __rte_unused, + struct mlx5_list_entry *entry, void *cb_ctx) +{ + struct mlx5_crypto_dek_ctx *ctx = cb_ctx; + struct rte_crypto_cipher_xform *cipher_ctx = ctx->cipher; + struct mlx5_crypto_dek *dek = + container_of(entry, typeof(*dek), entry); + uint32_t key_len = dek->size_is_48 ? 48 : 80; + + if (key_len != cipher_ctx->key.length) + return -1; + return memcmp(cipher_ctx->key.data, dek->data, key_len); +} + +static struct mlx5_list_entry * +mlx5_crypto_dek_create_cb(void *tool_ctx __rte_unused, void *cb_ctx) +{ + struct mlx5_crypto_dek_ctx *ctx = cb_ctx; + struct rte_crypto_cipher_xform *cipher_ctx = ctx->cipher; + struct mlx5_crypto_dek *dek = rte_zmalloc(__func__, sizeof(*dek), + RTE_CACHE_LINE_SIZE); + struct mlx5_devx_dek_attr dek_attr = { + .pd = ctx->priv->pdn, + .key_purpose = MLX5_CRYPTO_KEY_PURPOSE_AES_XTS, + .has_keytag = 1, + }; + + if (dek == NULL) { + DRV_LOG(ERR, "Failed to allocate dek memory."); + return NULL; + } + switch (cipher_ctx->key.length) { + case 48: + dek->size_is_48 = true; + dek_attr.key_size = MLX5_CRYPTO_KEY_SIZE_128b; + break; + case 80: + dek->size_is_48 = false; + dek_attr.key_size = MLX5_CRYPTO_KEY_SIZE_256b; + break; + default: + DRV_LOG(ERR, "Key size not supported."); + return NULL; + } + memcpy(&dek_attr.key, cipher_ctx->key.data, cipher_ctx->key.length); + dek->obj = mlx5_devx_cmd_create_dek_obj(ctx->priv->ctx, &dek_attr); + if (dek->obj == NULL) { + rte_free(dek); + return NULL; + } + memcpy(&dek->data, cipher_ctx->key.data, cipher_ctx->key.length); + return &dek->entry; +} + +static void +mlx5_crypto_dek_remove_cb(void *tool_ctx __rte_unused, + struct mlx5_list_entry *entry) +{ + struct mlx5_crypto_dek *dek = + container_of(entry, typeof(*dek), entry); + + claim_zero(mlx5_devx_cmd_destroy(dek->obj)); + rte_free(dek); +} + + +int +mlx5_crypto_dek_setup(struct mlx5_crypto_priv *priv) +{ + priv->dek_hlist = mlx5_hlist_create("dek_hlist", + MLX5_CRYPTO_DEK_HTABLE_SZ, + 0, 1, NULL, mlx5_crypto_dek_create_cb, + mlx5_crypto_dek_match_cb, + mlx5_crypto_dek_remove_cb, + mlx5_crypto_dek_clone_cb, + mlx5_crypto_dek_clone_free_cb); + if (priv->dek_hlist == NULL) + return -1; + return 0; +} + +void +mlx5_crypto_dek_unset(struct mlx5_crypto_priv *priv) +{ + mlx5_hlist_destroy(priv->dek_hlist); + priv->dek_hlist = NULL; +} From patchwork Thu Jul 15 15:08:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95890 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8146CA0A0C; Thu, 15 Jul 2021 17:09:30 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BB5624128C; Thu, 15 Jul 2021 17:09:12 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2074.outbound.protection.outlook.com [40.107.93.74]) by mails.dpdk.org (Postfix) with ESMTP id 5DDB740143 for ; Thu, 15 Jul 2021 17:09:09 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YKkIFllrmBthnt+j8WcRRKdB0AGd6+iDgwAi/9jBvj5tFJizE9NklBls7QdF3kdXUU0Vm1vuxfIbwR8fV9mX/E+rYwExGabg4lofNRLBKGsNfvIhKfhK23YFzEivbRZmU0pxlLPpZXVFQswPpiXaHPkhXrGkbCtAKVwazYITy7E/Te6v2+I3GCrOwq/5lc6mFyl/YHmbPLDziix//XirEdUBxpMwOw6mRk7uh73R0Sv1c0eXdiPIEm8Ud03cS4BhKNmyjljEFk4K2IPb4+Ikbg6IH+JVvhL3rS1NnVTsRK8dbwB6kUR7V+Y9FaqR9oiHhk1qORWMrOc7anybYlaOng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Z5sTuWNkYl+cn/A8iRmfa/C7SaLLwniaRU/Q8FxplZo=; b=ZLGn7Za6ny3DRGv1M9mFgsJa7LcOkGGk3cKnCnjeEfyadkndv/m2PLhzA4TjDduJ8Oxa7+eFRv7I0i3//KDukt6tk2KnVD8pNRaeGjjYwVWGneURiHoEmvhNqpgm14zPzv4vnpwyvhxz9tEJLLkoi4DJWEnD2kkhHJ4sOS72+5tNHfdJy/BualZUs0pMRz2XsACAyRO6otDjT2YoKU5U06i92QQt8lzSj/hNHwrVffSWCqbhH0A20cOgFoetKgwzu609wV0WS6GFpkOnNwCY7uhjMW9fGxbUuSGCUgw/jxVghsqZFTYn8XNQkdTwZxYMUkoJLDDFAUa2p6zLY1qDtw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Z5sTuWNkYl+cn/A8iRmfa/C7SaLLwniaRU/Q8FxplZo=; b=iAYF7ZpdRDSmK7tux1vB+FnWhTKuAMcfCz3lddx9S3qpfZWUyr1yd4QdXTy/Hwz0VHbG2wOHeEpLhgFF5NqwaGuUImlMXrgr7PnEloMEo4/LYkpcYqLVRcyQ0gbPc1nSI56eibRc93sOptscu89mhG6s+nBdqfXc+1CzSEQ2SknqgBBA1uvLId8MzMLg+v3OIP6Wmw/XLGgL0tVxyDh1kucQzp6ZueYUT/FSOlVBTOWS57HGANttsDeSzzOX5D3oNI0QKegG/IgtN+bcSKzf6ZTKf5RLixhUHgSS8P+RtHWJevg10BeZgWo5fBWYLnvqYOqHOH6YKlaLECzaiJvZ5w== Received: from MWHPR03CA0009.namprd03.prod.outlook.com (2603:10b6:300:117::19) by CY4PR12MB1430.namprd12.prod.outlook.com (2603:10b6:903:3e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Thu, 15 Jul 2021 15:09:07 +0000 Received: from CO1NAM11FT057.eop-nam11.prod.protection.outlook.com (2603:10b6:300:117:cafe::d8) by MWHPR03CA0009.outlook.office365.com (2603:10b6:300:117::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.22 via Frontend Transport; Thu, 15 Jul 2021 15:09:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT057.mail.protection.outlook.com (10.13.174.205) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:07 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:04 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:04 +0300 Message-ID: <20210715150817.51485-4-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7b823268-e935-41a5-dcbe-08d947a27e09 X-MS-TrafficTypeDiagnostic: CY4PR12MB1430: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: L4yAnB+4qRp/HxH+VS9wGGTztXps3Nen11z0mZKw/LF7d8atEvoA0H1s5F+XUJEG86R9hD5pM+MEderM0KFglM8oKg3WGxWMPZppodMkBc5dZxAs7g4t18HfsPiELn2S8hK8BIf1KZcH3dFoAU6YE/jkyhuUCfP+d26AIZG5kWSKcRBBaFKk1XjY5xInnlpUit6W58JrqFm6Io7m26lRKoEXSy/5wzRt2MsnJ3W1H67gOA7HY8yY/3DXOPSTcIJWo9isji/dQG1KboWcN60CREEH9NKhtHJBN0P3VDfaJOhDFPRXYPrNlnDQgs0CzDdeYhK1JzSXrzjkvXblCbb1+JVV6kPJPAj9y7pyyjuJjOgcAwyf3TchkEy74SWg5RTCBwguuu7CyYJpmw5r7B+jFEjdV6p5tQrDFgZ03VWhAG4C4hNG1zjZLsnmbmboiw3If0LjfHSblT38F7lOEC1233w77Snuwv9JuzyYl7q5lPboSRNaIbq5USwdWfCs56h+aadBkRHfunITPoA3QUX/t9TIFGvPADfs2GiJeJ+ENk4303NQqKf16swrs/yUpDhdstnkFnSMIBx14CxGOiu9U7ap8A8qudPy/r39gxLYeoC9V/8qW3KL9fnZynrAcCSeOjwg381yON9EKJMt8Vat2K37Gnp83otJKd+GAUy+kHrhF7exfpLYfLkUqM1klMbrZBMU8VU26lmF4FxYHjHvwmwTulzhomU0/doaaXJW7r0= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(39850400004)(136003)(346002)(396003)(376002)(36840700001)(46966006)(82740400003)(8676002)(8936002)(7636003)(36756003)(83380400001)(34020700004)(6286002)(2906002)(1076003)(82310400003)(36906005)(316002)(36860700001)(356005)(47076005)(54906003)(7696005)(70586007)(6916009)(2616005)(55016002)(26005)(426003)(186003)(4326008)(478600001)(86362001)(16526019)(70206006)(5660300002)(336012); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:07.3466 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7b823268-e935-41a5-dcbe-08d947a27e09 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT057.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1430 Subject: [dpdk-dev] [PATCH v7 03/16] crypto/mlx5: add session operations X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Sessions are used in symmetric transformations in order to prepare objects and data for packet processing stage. A mlx5 session includes iv_offset, pointer to mlx5_crypto_dek struct, bsf_size, bsf_p_type, block size index, encryption_order and encryption standard. Implement the next session operations: mlx5_crypto_sym_session_get_size- returns the size of the mlx5 session struct. mlx5_crypto_sym_session_configure- prepares the DEK hash-list and saves all the session data. mlx5_crypto_sym_session_clear - destroys the DEK hash-list. Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad --- doc/guides/cryptodevs/features/mlx5.ini | 5 + doc/guides/cryptodevs/mlx5.rst | 10 ++ drivers/crypto/mlx5/mlx5_crypto.c | 172 +++++++++++++++++++++++- 3 files changed, 182 insertions(+), 5 deletions(-) diff --git a/doc/guides/cryptodevs/features/mlx5.ini b/doc/guides/cryptodevs/features/mlx5.ini index ceadd967b6..bd757b5211 100644 --- a/doc/guides/cryptodevs/features/mlx5.ini +++ b/doc/guides/cryptodevs/features/mlx5.ini @@ -4,12 +4,17 @@ ; Refer to default.ini for the full list of available PMD features. ; [Features] +Symmetric crypto = Y HW Accelerated = Y +Cipher multiple data units = Y +Cipher wrapped key = Y ; ; Supported crypto algorithms of a mlx5 crypto driver. ; [Cipher] +AES XTS (128) = Y +AES XTS (256) = Y ; ; Supported authentication algorithms of a mlx5 crypto driver. diff --git a/doc/guides/cryptodevs/mlx5.rst b/doc/guides/cryptodevs/mlx5.rst index 05a0a449e2..dd1d1a615d 100644 --- a/doc/guides/cryptodevs/mlx5.rst +++ b/doc/guides/cryptodevs/mlx5.rst @@ -53,6 +53,16 @@ Supported NICs * Mellanox\ |reg| ConnectX\ |reg|-6 200G MCX654106A-HCAT (2x200G) + +Limitations +----------- + +- AES-XTS keys provided in xform must include keytag and should be wrappend. +- The supported data-unit lengths are 512B and 1KB. In case the `dataunit_len` + is not provided in the cipher xform, the OP length is limited to the above + values and 1MB. + + Prerequisites ------------- diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index d2d82c7b15..3f0c97d081 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -3,6 +3,7 @@ */ #include +#include #include #include #include @@ -20,7 +21,9 @@ #define MLX5_CRYPTO_LOG_NAME pmd.crypto.mlx5 #define MLX5_CRYPTO_FEATURE_FLAGS \ - RTE_CRYPTODEV_FF_HW_ACCELERATED + (RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO | RTE_CRYPTODEV_FF_HW_ACCELERATED | \ + RTE_CRYPTODEV_FF_CIPHER_WRAPPED_KEY | \ + RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS) TAILQ_HEAD(mlx5_crypto_privs, mlx5_crypto_priv) mlx5_crypto_priv_list = TAILQ_HEAD_INITIALIZER(mlx5_crypto_priv_list); @@ -30,6 +33,32 @@ int mlx5_crypto_logtype; uint8_t mlx5_crypto_driver_id; +const struct rte_cryptodev_capabilities mlx5_crypto_caps[] = { + { /* AES XTS */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + {.sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, + {.cipher = { + .algo = RTE_CRYPTO_CIPHER_AES_XTS, + .block_size = 16, + .key_size = { + .min = 32, + .max = 64, + .increment = 32 + }, + .iv_size = { + .min = 16, + .max = 16, + .increment = 0 + }, + .dataunit_set = + RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES | + RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES, + }, } + }, } + }, +}; + static const char mlx5_crypto_drv_name[] = RTE_STR(MLX5_CRYPTO_DRIVER_NAME); static const struct rte_driver mlx5_drv = { @@ -39,6 +68,49 @@ static const struct rte_driver mlx5_drv = { static struct cryptodev_driver mlx5_cryptodev_driver; +struct mlx5_crypto_session { + uint32_t bs_bpt_eo_es; + /* + * bsf_size, bsf_p_type, encryption_order and encryption standard, + * saved in big endian format. + */ + uint32_t bsp_res; + /* + * crypto_block_size_pointer and reserved 24 bits saved in big endian + * format. + */ + uint32_t iv_offset:16; + /* Starting point for Initialisation Vector. */ + struct mlx5_crypto_dek *dek; /* Pointer to dek struct. */ + uint32_t dek_id; /* DEK ID */ +} __rte_packed; + +static void +mlx5_crypto_dev_infos_get(struct rte_cryptodev *dev, + struct rte_cryptodev_info *dev_info) +{ + RTE_SET_USED(dev); + if (dev_info != NULL) { + dev_info->driver_id = mlx5_crypto_driver_id; + dev_info->feature_flags = MLX5_CRYPTO_FEATURE_FLAGS; + dev_info->capabilities = mlx5_crypto_caps; + dev_info->max_nb_queue_pairs = 0; + dev_info->min_mbuf_headroom_req = 0; + dev_info->min_mbuf_tailroom_req = 0; + dev_info->sym.max_nb_sessions = 0; + /* + * If 0, the device does not have any limitation in number of + * sessions that can be used. + */ + } +} + +static unsigned int +mlx5_crypto_sym_session_get_size(struct rte_cryptodev *dev __rte_unused) +{ + return sizeof(struct mlx5_crypto_session); +} + static int mlx5_crypto_dev_configure(struct rte_cryptodev *dev, struct rte_cryptodev_config *config __rte_unused) @@ -61,19 +133,109 @@ mlx5_crypto_dev_close(struct rte_cryptodev *dev) return 0; } +static int +mlx5_crypto_sym_session_configure(struct rte_cryptodev *dev, + struct rte_crypto_sym_xform *xform, + struct rte_cryptodev_sym_session *session, + struct rte_mempool *mp) +{ + struct mlx5_crypto_priv *priv = dev->data->dev_private; + struct mlx5_crypto_session *sess_private_data; + struct rte_crypto_cipher_xform *cipher; + uint8_t encryption_order; + int ret; + + if (unlikely(xform->next != NULL)) { + DRV_LOG(ERR, "Xform next is not supported."); + return -ENOTSUP; + } + if (unlikely((xform->type != RTE_CRYPTO_SYM_XFORM_CIPHER) || + (xform->cipher.algo != RTE_CRYPTO_CIPHER_AES_XTS))) { + DRV_LOG(ERR, "Only AES-XTS algorithm is supported."); + return -ENOTSUP; + } + ret = rte_mempool_get(mp, (void *)&sess_private_data); + if (ret != 0) { + DRV_LOG(ERR, + "Failed to get session %p private data from mempool.", + sess_private_data); + return -ENOMEM; + } + cipher = &xform->cipher; + sess_private_data->dek = mlx5_crypto_dek_prepare(priv, cipher); + if (sess_private_data->dek == NULL) { + rte_mempool_put(mp, sess_private_data); + DRV_LOG(ERR, "Failed to prepare dek."); + return -ENOMEM; + } + if (cipher->op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) + encryption_order = MLX5_ENCRYPTION_ORDER_ENCRYPTED_RAW_MEMORY; + else + encryption_order = MLX5_ENCRYPTION_ORDER_ENCRYPTED_RAW_WIRE; + sess_private_data->bs_bpt_eo_es = rte_cpu_to_be_32 + (MLX5_BSF_SIZE_64B << MLX5_BSF_SIZE_OFFSET | + MLX5_BSF_P_TYPE_CRYPTO << MLX5_BSF_P_TYPE_OFFSET | + encryption_order << MLX5_ENCRYPTION_ORDER_OFFSET | + MLX5_ENCRYPTION_STANDARD_AES_XTS); + switch (xform->cipher.dataunit_len) { + case 0: + sess_private_data->bsp_res = 0; + break; + case 512: + sess_private_data->bsp_res = rte_cpu_to_be_32 + ((uint32_t)MLX5_BLOCK_SIZE_512B << + MLX5_BLOCK_SIZE_OFFSET); + break; + case 4096: + sess_private_data->bsp_res = rte_cpu_to_be_32 + ((uint32_t)MLX5_BLOCK_SIZE_4096B << + MLX5_BLOCK_SIZE_OFFSET); + break; + default: + DRV_LOG(ERR, "Cipher data unit length is not supported."); + return -ENOTSUP; + } + sess_private_data->iv_offset = cipher->iv.offset; + sess_private_data->dek_id = + rte_cpu_to_be_32(sess_private_data->dek->obj->id & + 0xffffff); + set_sym_session_private_data(session, dev->driver_id, + sess_private_data); + DRV_LOG(DEBUG, "Session %p was configured.", sess_private_data); + return 0; +} + +static void +mlx5_crypto_sym_session_clear(struct rte_cryptodev *dev, + struct rte_cryptodev_sym_session *sess) +{ + struct mlx5_crypto_priv *priv = dev->data->dev_private; + struct mlx5_crypto_session *spriv = get_sym_session_private_data(sess, + dev->driver_id); + + if (unlikely(spriv == NULL)) { + DRV_LOG(ERR, "Failed to get session %p private data.", spriv); + return; + } + mlx5_crypto_dek_destroy(priv, spriv->dek); + set_sym_session_private_data(sess, dev->driver_id, NULL); + rte_mempool_put(rte_mempool_from_obj(spriv), spriv); + DRV_LOG(DEBUG, "Session %p was cleared.", spriv); +} + static struct rte_cryptodev_ops mlx5_crypto_ops = { .dev_configure = mlx5_crypto_dev_configure, .dev_start = NULL, .dev_stop = NULL, .dev_close = mlx5_crypto_dev_close, - .dev_infos_get = NULL, + .dev_infos_get = mlx5_crypto_dev_infos_get, .stats_get = NULL, .stats_reset = NULL, .queue_pair_setup = NULL, .queue_pair_release = NULL, - .sym_session_get_size = NULL, - .sym_session_configure = NULL, - .sym_session_clear = NULL, + .sym_session_get_size = mlx5_crypto_sym_session_get_size, + .sym_session_configure = mlx5_crypto_sym_session_configure, + .sym_session_clear = mlx5_crypto_sym_session_clear, .sym_get_raw_dp_ctx_size = NULL, .sym_configure_raw_dp_ctx = NULL, }; From patchwork Thu Jul 15 15:08:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95891 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 53A40A0A0C; Thu, 15 Jul 2021 17:09:38 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1F645412A3; Thu, 15 Jul 2021 17:09:14 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2065.outbound.protection.outlook.com [40.107.93.65]) by mails.dpdk.org (Postfix) with ESMTP id ED5AE41252 for ; Thu, 15 Jul 2021 17:09:09 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ah00AEdCPySE9n28kdH+vNA1ZzUlpO1OkLU8xFKURD+QCy7E+HCxE8xaxODG0KFfkFDAxPmUm+Nv/jNy3YEARhpMLqcg0jVTRqOyFmAaxqNyaO45hVFXT6KiHEH3tPmFIUuiPpCpB/kVmdP/4230friFNchSq9GqhdHToivNtzgm26aZfuD1XOvYzfcigQDh6rKiHILQZUmxmVWMfyg3hhqxRAS14RIH7YeIQag8i8pe5jLvXCb7zSbDWsmuF0teeEcr3KvKi/nJr6N7osQIA7DNW/mFt/Qsi80K4rQyM/CK7VaJA6lZ+7gpG1cMBRcQUKP7cFkHbLn9GIoHUc5auw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zYW7FJU8n8KCNsyHBGZ7uIQXlvC37Of+gwZbvNVciA4=; b=AMCZ51RYkRhhtk1/e2gmoxtW2Q3St8aP9pnn7cr/5Hnf3zT+vZBqfl7qDQkQqqBA1eObZamiZNk3sYHMSToi9L+A7yBce6Y/H9prCq+u+zwCFYOmIbtdAyWC0hQz2qHMqZ3bUZc9K7jFzfAJVUc4UbS916j4+4WIfa44NUeoEFsw6x+EtHPpQo7U8MED6JPNf7FKWm5efSPWnyGeFrdbj8y+75qjABHz0wZZrVGC2CH1pJlDx21IgoH6OCQ6PwH2g8xin7Rf3o6+KIEYtgiPEdbE+XoYVlYcpBoOJQ/mm+B5VPNwwrf+tD/dL1tXeu9IvCB3ywPti2Hv//itE8Jfcg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zYW7FJU8n8KCNsyHBGZ7uIQXlvC37Of+gwZbvNVciA4=; b=OY6nwHMwE6BF4ZnvDOlyPDeFdIe+39aDuGXkdky6pjcz/U+PVpLi9aKk8z4nymUmJ117yPLLCmO8e7yFg+Lb/aR4JXVDZSJtM0KtcqGVcvAjF0LwcR2fchKGUhQDj/WUK9jg0Ttla04Imi06rmBH3KKnTj1JLaYrwQhedvijSiSOMyUGbDbaODNXMnHMt8TuSA7AhP6Sk86STtfOdOI3toHE+NwwDnnNkbXc3gRPphLJbKzGVFnHmkB1o2dlam1pEKumcIFT95bs18iiTubF5EZwzYKWsXhKnwfEy0V4LDIr3ca5daXiYWpoYUiKoaMtaDojT05mDWOQg236RglMdw== Received: from MWHPR03CA0012.namprd03.prod.outlook.com (2603:10b6:300:117::22) by DM6PR12MB4041.namprd12.prod.outlook.com (2603:10b6:5:210::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.23; Thu, 15 Jul 2021 15:09:08 +0000 Received: from CO1NAM11FT057.eop-nam11.prod.protection.outlook.com (2603:10b6:300:117:cafe::12) by MWHPR03CA0012.outlook.office365.com (2603:10b6:300:117::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:08 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT057.mail.protection.outlook.com (10.13.174.205) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:08 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:06 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:05 +0300 Message-ID: <20210715150817.51485-5-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f57ace8b-aeb9-4911-cd5e-08d947a27ea4 X-MS-TrafficTypeDiagnostic: DM6PR12MB4041: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2150; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: t533EVj7xxurLmyGdnYrmkz1Uw3R5gXVmxJaD9jiQTKkk8QkOYXTc1IPqstcTxH9RN7yKe2VP5k4GPmTCE23BKcOHTzapS8PJ98yuh3y1yOw+CtagZT4Hdx5yOCM+b9X5dEWRMw92rW3sAgJJ7hEbSO4qhBxYpeLqVQ71mXUBiK/72Xn8nELJdSolhs+0CbTxYAjf75ZcXx2/rSbS6aXHZgMi+p4rvrSWdMALmc782tu0FxyERvO4Ll9phCpFG2S7PiEQCwIR3neNKrclxX1V7DiEqFdAFZT9PqKyWQKKhzU4r9BSzDxBw0OS3f75nARcfgX12JAhqTjpkfSdbNaBU4U/jO1k7JGvp751G3MqhOb3xjN68o8a3lyiA70wP7mbMvSsyg8oBTd889UpC5CAResfy/1uC0FZjiXiaCRob+3aqe1ZE+B/rSyh6VudMqYFwKcd6x593q6uhPq01cEW6TBScrDS8I9VOv8uL0Ew3OUXUVPk0fknFK+N1tTnqCQkTeoLyLczJApxCKMwT8T2TNogVNkiC/p4Lek7OzjGcOVGhiCsV+8+2wUXQboTOWjBVRQcc4yg5MfX0XBGDKdXOQZ4rvqezbWY7Zi/zMNmgf23BITab+4Qehzq0MRNJCqmd0soI5njzSAHC6baNtaGUcOp0LtphvYAlZLln0cw6ZEteWhu+HrekWM3lB06GpqJ3MCoALvHJ0RdIS62KSwC31jq/cGBJ3H++tI+4uRdgw= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(396003)(346002)(376002)(39850400004)(136003)(46966006)(36840700001)(82740400003)(86362001)(16526019)(426003)(5660300002)(186003)(36756003)(478600001)(36906005)(316002)(83380400001)(55016002)(2616005)(36860700001)(54906003)(336012)(82310400003)(6286002)(34020700004)(4326008)(8676002)(2906002)(7636003)(8936002)(6916009)(356005)(7696005)(70586007)(26005)(70206006)(47076005)(1076003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:08.3510 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f57ace8b-aeb9-4911-cd5e-08d947a27ea4 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT057.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4041 Subject: [dpdk-dev] [PATCH v7 04/16] crypto/mlx5: add basic operations X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" The basic dev control operations are configure, close and get info. Extended the existing support of configure and close: -mlx5_crypto_dev_configure- function used to configure device. -mlx5_crypto_dev_close- function used to close a configured device. Added config struct to user private data with the fields socket id, number of queue pairs and feature flags to be disabled. Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad --- drivers/crypto/mlx5/mlx5_crypto.c | 26 +++++++++++++++++++------- drivers/crypto/mlx5/mlx5_crypto.h | 1 + 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index 3f0c97d081..a7e44deb9e 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -105,22 +105,27 @@ mlx5_crypto_dev_infos_get(struct rte_cryptodev *dev, } } -static unsigned int -mlx5_crypto_sym_session_get_size(struct rte_cryptodev *dev __rte_unused) -{ - return sizeof(struct mlx5_crypto_session); -} - static int mlx5_crypto_dev_configure(struct rte_cryptodev *dev, - struct rte_cryptodev_config *config __rte_unused) + struct rte_cryptodev_config *config) { struct mlx5_crypto_priv *priv = dev->data->dev_private; + if (config == NULL) { + DRV_LOG(ERR, "Invalid crypto dev configure parameters."); + return -EINVAL; + } + if ((config->ff_disable & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) != 0) { + DRV_LOG(ERR, + "Disabled symmetric crypto feature is not supported."); + return -ENOTSUP; + } if (mlx5_crypto_dek_setup(priv) != 0) { DRV_LOG(ERR, "Dek hash list creation has failed."); return -ENOMEM; } + priv->dev_config = *config; + DRV_LOG(DEBUG, "Device %u was configured.", dev->driver_id); return 0; } @@ -130,9 +135,16 @@ mlx5_crypto_dev_close(struct rte_cryptodev *dev) struct mlx5_crypto_priv *priv = dev->data->dev_private; mlx5_crypto_dek_unset(priv); + DRV_LOG(DEBUG, "Device %u was closed.", dev->driver_id); return 0; } +static unsigned int +mlx5_crypto_sym_session_get_size(struct rte_cryptodev *dev __rte_unused) +{ + return sizeof(struct mlx5_crypto_session); +} + static int mlx5_crypto_sym_session_configure(struct rte_cryptodev *dev, struct rte_crypto_sym_xform *xform, diff --git a/drivers/crypto/mlx5/mlx5_crypto.h b/drivers/crypto/mlx5/mlx5_crypto.h index 167e9e57ad..a0df775407 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.h +++ b/drivers/crypto/mlx5/mlx5_crypto.h @@ -24,6 +24,7 @@ struct mlx5_crypto_priv { uint32_t pdn; /* Protection Domain number. */ struct ibv_pd *pd; struct mlx5_hlist *dek_hlist; /* Dek hash list. */ + struct rte_cryptodev_config dev_config; }; struct mlx5_crypto_dek { From patchwork Thu Jul 15 15:08:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95892 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A318EA0A0C; Thu, 15 Jul 2021 17:09:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B59334125C; Thu, 15 Jul 2021 17:09:18 +0200 (CEST) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2089.outbound.protection.outlook.com [40.107.243.89]) by mails.dpdk.org (Postfix) with ESMTP id 1119D41294 for ; Thu, 15 Jul 2021 17:09:13 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a1skeIlmZlxKRNg3flU8g51bU11Xrcjx7zKR4tH1w0P091QTGpvr1ZVqojUo8V7U1TEP9eMUkHnLp/ObQuOKfyOSkBRg9Hy9Qz3kyGrn66VMVmVSTF3xTYjfZvR3TEaq4onE/cA7JcKPX63GfSI+aiUOBAqY7WxvZLmZEIkxrLsZzNy4C9S7CkmBd+gdzsaSGqa4wHMTboiut8isrjeURzNIpVGp6AHB61rwg5gWJUR6Z1U3FCPdCn6+WC7K3q9EkDfdms0l6qfvQxkdXeNXb1DoQreMJi626Jj30NOC9/Cgo7rJ7qTHN/IGJuKLHg7VMC8wXCe9oiC4+qgwZNoLIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=93LjWRSjUeNmDXYn/ad/Rnaw5v8pzsLWQWfAJwC89a8=; b=ZAe4SBgkP/q2nzR2Gx3uD68+v163Wkln/WeSzvHRlpYPT2xwWw8b4z4uvpiLHSzhoxurciZjhSmPxCZztPA3Wt3rCNCJMWGi4NuRGprVFP4+j3dLFeQbxQD+jofmsIZmNd4PAGz2hjkKZ5JZbG3Th0M7w9/PY5U1o1vsOJc4L9m1WfigtKUf1vKx1XN8K0d0QgCVnQqpv1gYt2slYmmt7baO8abCZ50n9y2ydinRC7oxc4Gvmq9oVl9Az3YtXzexZeDWhuiNVV0DpwDo+wGMzWjBFmyD1PUx8xSkyxzcWiK9QS8KAsai0RVKFQwn9CDWvFXImyhaddEmoGbrByi6ig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=93LjWRSjUeNmDXYn/ad/Rnaw5v8pzsLWQWfAJwC89a8=; b=k/cJSMgtcv2D4Ice+OXwDm86BHgvG5X5a99K+22XZCkG0yIfWhAWbVnwt2HhhBqfZHetUAjn4LsE/4gJsqp74XjkEOd8KJ1y/p+HqgXdQdG7jx6jyyQfflW4TDHiB8INLYgaGBZLCg6XZ3aSNil3WvwiwAk3SihgPgQebyMQL0bV5OnFTDd91SVsY2jKo+9UmjUF7ENovg22qGU5PeWAt49JPKgsAd4663YmbwKLoFAeSOGF+lBKhERZgTx2dB+aiiRCLpe1OrcpNchtBw+4k/za0ETTzct4YK2PzDzuFmZLOtgQYi5hJm7oU7jArKBsMRKASuB2+z4roDvZEtbnvQ== Received: from MWHPR03CA0006.namprd03.prod.outlook.com (2603:10b6:300:117::16) by CO6PR12MB5460.namprd12.prod.outlook.com (2603:10b6:5:357::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul 2021 15:09:10 +0000 Received: from CO1NAM11FT057.eop-nam11.prod.protection.outlook.com (2603:10b6:300:117:cafe::29) by MWHPR03CA0006.outlook.office365.com (2603:10b6:300:117::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:10 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT057.mail.protection.outlook.com (10.13.174.205) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:09 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:08 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:06 +0300 Message-ID: <20210715150817.51485-6-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 08906272-26c4-4c04-6ea8-08d947a27f8e X-MS-TrafficTypeDiagnostic: CO6PR12MB5460: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2512; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HKTpg2Aq/oV77u1MH3qws8/8wgz3GRb2NlGEcXFaDFJwmZi6R5sqPZ7NvKurzjZTJzLYtWQWxVleN0C7/TmgCk1MoSstJXrMInXdDhQefzFswuV3WJ2NoMK6fvs1ANfH01jrWWO7Aa0cNVs1CFZyMzca9bsNxdnFY8Fg3MskqidrNch6ngqCjoTsSJjmy5g1a55DADXzln6+rMSE/v3NkhwHh49SwMa5QTcHC73mP4u29H65jsoR6Q5F7sWMEyPsx246l7Mew7/ZxJYvPqoITU/V819N8XI4l64KYF6nsaXfgKhCa71rrUM/xZENFKHurDIjdjdCrtb/hNijdHrcpyKHfLHzSLhsIVDt7nc2EUUTar8Ied6FIT+9cZwrYReV9ViZ68QaRZS+wsrEAqEXb4xory0k0/xSENzQrXdQ9b36tJ1ZsVebWICXH4buaRIHqEmMdkLoS7Evgvrt2f6z9SJjIh67fiorfYXRDtnO+7qjY7HDZ+wsGMT5wlKLQMqJZvRhgNz3WKr9dQSgdMyogFKspljMCmqpuvjN1F58aPx9G/33UleL+X6kWQ8AR2kd69vg9GegVbbnCbEBjkmPwqQwT5yPJXtlSzLSENSt+tGNEdTcSYUsK25GtoEjlTS/re7r0Ie/gXl/q5G2r+F4k4gX8fSTp1UbO95KHcWRzAl+xPAr9TCCkkQ+7wWsGaB3UrwZMK0oUbOnYcH9HDQ8lYXcY6JsRXGHo/OPLoRlvMA= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(346002)(396003)(136003)(376002)(39860400002)(36840700001)(46966006)(478600001)(36756003)(55016002)(336012)(7696005)(16526019)(82310400003)(4326008)(2616005)(426003)(36860700001)(36906005)(316002)(186003)(26005)(86362001)(6916009)(47076005)(34020700004)(6286002)(356005)(5660300002)(82740400003)(2906002)(8676002)(70586007)(70206006)(1076003)(83380400001)(8936002)(54906003)(7636003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:09.8831 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 08906272-26c4-4c04-6ea8-08d947a27f8e X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT057.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR12MB5460 Subject: [dpdk-dev] [PATCH v7 05/16] crypto/mlx5: add queue pairs operations X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" The HW queue pairs are a pair of send queue and receive queue of independent work queues packed together in one object for the purpose of transferring data between nodes of a network. Completion Queue is a FIFO queue of completed work requests. In crypto driver we use one QP in loopback in order to encrypt and decrypt data locally without sending it to the wire. In the configured QP we only use the SQ to perform the encryption and decryption operations. Added implementation for the QP setup function which creates the CQ, creates the QP and changes its state to RTS (ready to send). Added implementation for the release QP function to release all the QP resources. Added the ops structure that contains any operation which is supported by the cryptodev. Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad --- drivers/crypto/mlx5/mlx5_crypto.c | 129 +++++++++++++++++++++++++++++- drivers/crypto/mlx5/mlx5_crypto.h | 11 +++ 2 files changed, 137 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index a7e44deb9e..ebaa65c7a9 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -19,6 +20,7 @@ #define MLX5_CRYPTO_DRIVER_NAME mlx5_crypto #define MLX5_CRYPTO_LOG_NAME pmd.crypto.mlx5 +#define MLX5_CRYPTO_MAX_QPS 1024 #define MLX5_CRYPTO_FEATURE_FLAGS \ (RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO | RTE_CRYPTODEV_FF_HW_ACCELERATED | \ @@ -94,7 +96,7 @@ mlx5_crypto_dev_infos_get(struct rte_cryptodev *dev, dev_info->driver_id = mlx5_crypto_driver_id; dev_info->feature_flags = MLX5_CRYPTO_FEATURE_FLAGS; dev_info->capabilities = mlx5_crypto_caps; - dev_info->max_nb_queue_pairs = 0; + dev_info->max_nb_queue_pairs = MLX5_CRYPTO_MAX_QPS; dev_info->min_mbuf_headroom_req = 0; dev_info->min_mbuf_tailroom_req = 0; dev_info->sym.max_nb_sessions = 0; @@ -235,6 +237,127 @@ mlx5_crypto_sym_session_clear(struct rte_cryptodev *dev, DRV_LOG(DEBUG, "Session %p was cleared.", spriv); } +static int +mlx5_crypto_queue_pair_release(struct rte_cryptodev *dev, uint16_t qp_id) +{ + struct mlx5_crypto_qp *qp = dev->data->queue_pairs[qp_id]; + + if (qp->qp_obj != NULL) + claim_zero(mlx5_devx_cmd_destroy(qp->qp_obj)); + if (qp->umem_obj != NULL) + claim_zero(mlx5_glue->devx_umem_dereg(qp->umem_obj)); + if (qp->umem_buf != NULL) + rte_free(qp->umem_buf); + mlx5_devx_cq_destroy(&qp->cq_obj); + rte_free(qp); + dev->data->queue_pairs[qp_id] = NULL; + return 0; +} + +static int +mlx5_crypto_qp2rts(struct mlx5_crypto_qp *qp) +{ + /* + * In Order to configure self loopback, when calling these functions the + * remote QP id that is used is the id of the same QP. + */ + if (mlx5_devx_cmd_modify_qp_state(qp->qp_obj, MLX5_CMD_OP_RST2INIT_QP, + qp->qp_obj->id)) { + DRV_LOG(ERR, "Failed to modify QP to INIT state(%u).", + rte_errno); + return -1; + } + if (mlx5_devx_cmd_modify_qp_state(qp->qp_obj, MLX5_CMD_OP_INIT2RTR_QP, + qp->qp_obj->id)) { + DRV_LOG(ERR, "Failed to modify QP to RTR state(%u).", + rte_errno); + return -1; + } + if (mlx5_devx_cmd_modify_qp_state(qp->qp_obj, MLX5_CMD_OP_RTR2RTS_QP, + qp->qp_obj->id)) { + DRV_LOG(ERR, "Failed to modify QP to RTS state(%u).", + rte_errno); + return -1; + } + return 0; +} + +static int +mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id, + const struct rte_cryptodev_qp_conf *qp_conf, + int socket_id) +{ + struct mlx5_crypto_priv *priv = dev->data->dev_private; + struct mlx5_devx_qp_attr attr = {0}; + struct mlx5_crypto_qp *qp; + uint16_t log_nb_desc = rte_log2_u32(qp_conf->nb_descriptors); + uint32_t umem_size = RTE_BIT32(log_nb_desc) * + MLX5_CRYPTO_WQE_SET_SIZE + + sizeof(*qp->db_rec) * 2; + uint32_t alloc_size = sizeof(*qp); + struct mlx5_devx_cq_attr cq_attr = { + .uar_page_id = mlx5_os_get_devx_uar_page_id(priv->uar), + }; + + if (dev->data->queue_pairs[qp_id] != NULL) + mlx5_crypto_queue_pair_release(dev, qp_id); + alloc_size = RTE_ALIGN(alloc_size, RTE_CACHE_LINE_SIZE); + alloc_size += sizeof(struct rte_crypto_op *) * RTE_BIT32(log_nb_desc); + qp = rte_zmalloc_socket(__func__, alloc_size, RTE_CACHE_LINE_SIZE, + socket_id); + if (qp == NULL) { + DRV_LOG(ERR, "Failed to allocate QP memory."); + rte_errno = ENOMEM; + return -rte_errno; + } + if (mlx5_devx_cq_create(priv->ctx, &qp->cq_obj, log_nb_desc, + &cq_attr, socket_id) != 0) { + DRV_LOG(ERR, "Failed to create CQ."); + goto error; + } + qp->umem_buf = rte_zmalloc_socket(__func__, umem_size, 4096, socket_id); + if (qp->umem_buf == NULL) { + DRV_LOG(ERR, "Failed to allocate QP umem."); + rte_errno = ENOMEM; + goto error; + } + qp->umem_obj = mlx5_glue->devx_umem_reg(priv->ctx, + (void *)(uintptr_t)qp->umem_buf, + umem_size, + IBV_ACCESS_LOCAL_WRITE); + if (qp->umem_obj == NULL) { + DRV_LOG(ERR, "Failed to register QP umem."); + goto error; + } + attr.pd = priv->pdn; + attr.uar_index = mlx5_os_get_devx_uar_page_id(priv->uar); + attr.cqn = qp->cq_obj.cq->id; + attr.log_page_size = rte_log2_u32(sysconf(_SC_PAGESIZE)); + attr.rq_size = 0; + attr.sq_size = RTE_BIT32(log_nb_desc); + attr.dbr_umem_valid = 1; + attr.wq_umem_id = qp->umem_obj->umem_id; + attr.wq_umem_offset = 0; + attr.dbr_umem_id = qp->umem_obj->umem_id; + attr.dbr_address = RTE_BIT64(log_nb_desc) * + MLX5_CRYPTO_WQE_SET_SIZE; + qp->qp_obj = mlx5_devx_cmd_create_qp(priv->ctx, &attr); + if (qp->qp_obj == NULL) { + DRV_LOG(ERR, "Failed to create QP(%u).", rte_errno); + goto error; + } + qp->db_rec = RTE_PTR_ADD(qp->umem_buf, (uintptr_t)attr.dbr_address); + if (mlx5_crypto_qp2rts(qp)) + goto error; + qp->ops = (struct rte_crypto_op **)RTE_ALIGN((uintptr_t)(qp + 1), + RTE_CACHE_LINE_SIZE); + dev->data->queue_pairs[qp_id] = qp; + return 0; +error: + mlx5_crypto_queue_pair_release(dev, qp_id); + return -1; +} + static struct rte_cryptodev_ops mlx5_crypto_ops = { .dev_configure = mlx5_crypto_dev_configure, .dev_start = NULL, @@ -243,8 +366,8 @@ static struct rte_cryptodev_ops mlx5_crypto_ops = { .dev_infos_get = mlx5_crypto_dev_infos_get, .stats_get = NULL, .stats_reset = NULL, - .queue_pair_setup = NULL, - .queue_pair_release = NULL, + .queue_pair_setup = mlx5_crypto_queue_pair_setup, + .queue_pair_release = mlx5_crypto_queue_pair_release, .sym_session_get_size = mlx5_crypto_sym_session_get_size, .sym_session_configure = mlx5_crypto_sym_session_configure, .sym_session_clear = mlx5_crypto_sym_session_clear, diff --git a/drivers/crypto/mlx5/mlx5_crypto.h b/drivers/crypto/mlx5/mlx5_crypto.h index a0df775407..1c3c4855ec 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.h +++ b/drivers/crypto/mlx5/mlx5_crypto.h @@ -11,9 +11,11 @@ #include #include +#include #define MLX5_CRYPTO_DEK_HTABLE_SZ (1 << 11) #define MLX5_CRYPTO_KEY_LENGTH 80 +#define MLX5_CRYPTO_WQE_SET_SIZE 1024 struct mlx5_crypto_priv { TAILQ_ENTRY(mlx5_crypto_priv) next; @@ -27,6 +29,15 @@ struct mlx5_crypto_priv { struct rte_cryptodev_config dev_config; }; +struct mlx5_crypto_qp { + struct mlx5_devx_cq cq_obj; + struct mlx5_devx_obj *qp_obj; + struct mlx5dv_devx_umem *umem_obj; + void *umem_buf; + volatile uint32_t *db_rec; + struct rte_crypto_op **ops; +}; + struct mlx5_crypto_dek { struct mlx5_list_entry entry; /* Pointer to DEK hash list entry. */ struct mlx5_devx_obj *obj; /* Pointer to DEK DevX object. */ From patchwork Thu Jul 15 15:08:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95893 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C9E8EA0A0C; Thu, 15 Jul 2021 17:09:55 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DC896412BD; Thu, 15 Jul 2021 17:09:19 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2050.outbound.protection.outlook.com [40.107.92.50]) by mails.dpdk.org (Postfix) with ESMTP id 5714C41296 for ; Thu, 15 Jul 2021 17:09:13 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dMkqUJU0sa+11Z6PZ/DiMAXhdnfucqlf723WqgE8yRlWQRneOKWWtwTeB5IGFRWVxZ3aqri04X3TDsPpxnfBua+mEbtCq7KJwLx7qoGfavIi0td2UhZqfcHVTqau+EetFKRYRL5CZoEYwSgTcYzYNu1lptpWUxobYS9wOkjT+7w1F5cvs43dsWnJ7YC5TZDRiPqMrg8avkBffgjzO62LbLBAR1Pm4JnJL2TgiinCd0j06R0S1eePVJdPSmfFLHleI5YAAG8QJvCbpoqfPdND2uZfF5NiBulvG5/0V8LMIX6fcyC3BngkY1IKUnLFx1f4r/t3W9H2sN9GLW+/Y7bVXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PKPcULQp+1Zj2Z+yiwmhGOTaN719wzCCEY76irrsYFc=; b=gTXl2mGDEqdIrORpFCq2YrmfW6/lQHiYrG/6/BrEk4kSVKhCoVXy/jk11OAg2zkSTQ9V60rmevVwFsN4OvQdvUjo/lta43GjSRkqAPJNXZfgnr5807iyIqTmo13DVw2awrDoUD8OcYXKgBP1u4R8R+17xC7wICqlhHvYtLJT620JasAK4YxwtRcUww0l3i5yNtX4YjxTfC0CJuNcxcs8OjogXhDloncDk3BPUM9+Nggckcu9K/MLPzrHRhDDLHdaZIPUkF7Ty8YHIorTGh7QoJW6oRTFer+H7mqJssZZn2Z8UE3eSm2LHGduM0Qzq5fWyMioE8XrwpYqdKofimQpyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PKPcULQp+1Zj2Z+yiwmhGOTaN719wzCCEY76irrsYFc=; b=NzS8qXybZNzn9LjmcIsvSjn0IsKVgOcdd4LyL3WBk4isSXLa0DVsfiIb/+aKrJCUHSfvwR9h0YydXODzvRMM3FSDTbmxTVfgevYqaGbgwYASO5x5PouqCdw9DDk3ZyM/C972xnWZCcoYw3sNRxSJjAcbTuFb58VbO51Th8JhpONxD0PLm25/R7NRzwdwDBij6B2ZAYGYgAiUFq/ab7rWi6JrSOiKXrPRUu3vOTQFXrx04PxbLIydMNZqcl5S0CGXZwisRp2m4IsVGYJxPR+iDnlpra4FiKcnOQwLHS/IWBpE9pv4p0l/JscphelUA4rs58pgtOikiEiUKoL3qHyVJA== Received: from MWHPR03CA0008.namprd03.prod.outlook.com (2603:10b6:300:117::18) by MN2PR12MB4391.namprd12.prod.outlook.com (2603:10b6:208:269::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul 2021 15:09:12 +0000 Received: from CO1NAM11FT057.eop-nam11.prod.protection.outlook.com (2603:10b6:300:117:cafe::b3) by MWHPR03CA0008.outlook.office365.com (2603:10b6:300:117::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:12 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT057.mail.protection.outlook.com (10.13.174.205) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:11 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:10 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:07 +0300 Message-ID: <20210715150817.51485-7-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9e86f4a0-2ffc-4ddf-76f4-08d947a280c4 X-MS-TrafficTypeDiagnostic: MN2PR12MB4391: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1303; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WgtT01iSFK5lae/2EILo2ooQcuc/ySw7cT83Lo3eINBRp0PZAtYTjLaOnj86asKnGqIZ3nTuKHbdeHlkbMOaIw3Tgue5TWXKqN9MUQ0IxHPf8GBciCzbC5ieAHfjv2GYldrW6ZfqFdC6zkpfSvv64EBEQZIDzdFqn+BQG6sGjXCbfyPDqKSUadmj14g4gU3MHX8tSUKoWaOLq70WYM2f7M7snPSVGeGAIu2AymKL6H9lxWkRfGgDmdMFMwrw168EIus3FnZgpqr3VvF4HWV+BWLROWOYmB1Kd4ZeHYbShBekZ1JxyBbqeVKam280aH87XaQt+E9XyR/M7APv6h3CD4Qo9QVK+562FoSgEatdor/Aske1/1InUOL9HEPOtwRSFQcshCXrH+fBVKsn+C6VnN6mLqfp28RHd9aTRUBbX/KRNDdMtRrQca47vbf26kxetUosxSkM8KfUN3F4NRpuZylXTgM1huopIst6toBIUkd4fB/EM7SB/uI6ssn3ieveNJQRQ8sIUYvL6QjnEaaWBeckQcqpSB2r7zL0Xph3is960726N16++veQP2j690UzrSEfFrGHcVpz8RmsYyXdZCUuFnW6qEdBlSMqXzZAQYVXResbGjWh8zDYg0RQh/ERwKnOdkD9TWbAqm0q5Hyxye//39WbZ+rBLcZ4tiIoy/X9hMHjNmKBPKh4LP2TIu3O9npu5BOEQENv9IJyOFbJx/5J6ujg9uOdqQvwv19eIA0= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(396003)(376002)(136003)(39850400004)(346002)(36840700001)(46966006)(47076005)(5660300002)(2906002)(26005)(186003)(16526019)(70206006)(6666004)(4326008)(336012)(55016002)(70586007)(83380400001)(8936002)(7696005)(426003)(478600001)(82740400003)(6916009)(356005)(1076003)(82310400003)(86362001)(6286002)(34020700004)(54906003)(7636003)(8676002)(2616005)(36860700001)(36906005)(36756003)(316002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:11.9179 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9e86f4a0-2ffc-4ddf-76f4-08d947a280c4 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT057.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4391 Subject: [dpdk-dev] [PATCH v7 06/16] crypto/mlx5: add dev stop and start operations X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Add the dev_start function that is used to start a configured device. Add the dev_stop function that is used to stop a configured device. Both functions set the dev parameter as used and return 0. Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad --- drivers/crypto/mlx5/mlx5_crypto.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index ebaa65c7a9..37e66cf57b 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -131,6 +131,19 @@ mlx5_crypto_dev_configure(struct rte_cryptodev *dev, return 0; } +static void +mlx5_crypto_dev_stop(struct rte_cryptodev *dev) +{ + RTE_SET_USED(dev); +} + +static int +mlx5_crypto_dev_start(struct rte_cryptodev *dev) +{ + RTE_SET_USED(dev); + return 0; +} + static int mlx5_crypto_dev_close(struct rte_cryptodev *dev) { @@ -360,8 +373,8 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id, static struct rte_cryptodev_ops mlx5_crypto_ops = { .dev_configure = mlx5_crypto_dev_configure, - .dev_start = NULL, - .dev_stop = NULL, + .dev_start = mlx5_crypto_dev_start, + .dev_stop = mlx5_crypto_dev_stop, .dev_close = mlx5_crypto_dev_close, .dev_infos_get = mlx5_crypto_dev_infos_get, .stats_get = NULL, From patchwork Thu Jul 15 15:08:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95894 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id CF272A0A0C; Thu, 15 Jul 2021 17:10:02 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1C1EB412E4; Thu, 15 Jul 2021 17:09:21 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2061.outbound.protection.outlook.com [40.107.223.61]) by mails.dpdk.org (Postfix) with ESMTP id 5A5D3412C5 for ; Thu, 15 Jul 2021 17:09:15 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=htNmEuUeuAbBtrES96dc5sCKiwHEzmk49MwzEKfwmOrpzOLl7ESFKjuebsk78G3/RdkX0GzmEc6rlisNPDydmhY/Q/JgXdZPVd/vgkdTYze2BPtV01NDUume62E4RX1RTjVGDtG29CRp7egmXdS7Ry/65CNdEnTTk/E+3erH2fGqluFPLTyjribRTfbpVoXt3dcYfAwToVx0BwyQTPvzSk9TBMIcI0M8XYbIod6KoBiQR1NkQX1GcpATcraUQfXKl2l+WpwdwkRRsrYErQRwqxljOIi4XynuKWT+oSM9JFDMqjNMmTl1xu7d9/3s7art3fTxFh78eUiJVl1e310GfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AKLxD3+JvQMWtzegbseniE3LRKE+nIYVxokxlYsCDHA=; b=HNSZGLilUmXI4Te5Ig5eKVgGNj+t/5lEiI/Q0LeCJx/o4zp2CeBjglZJC8e6NgL6D1gAlaCjzmpnQC3N/MPiTqF3EhwwwSEuQfUWXIZbtnGzonKGwpGLi7e4TlN0aOQvRtAVq62Rw+Fhc6JS3BBwdhrsSNhVR2WuooSx6rqi+4t0dBRM0tgzYRnVIGSObto4ww71RRaXcWJooPHj4YeD7ZlxZWmuWn4dEmzCE4udAjsHAlXpyMR4FlNk/hUJX3ZAEWLbNLg0ITnY5V3wgptQimR6IqtwEYrFI8R67UqUnK3GoX+p8nO0U9xooBE+YkBCYj+r1r+BZu7ogUbbWzQLwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AKLxD3+JvQMWtzegbseniE3LRKE+nIYVxokxlYsCDHA=; b=e/Tb+DWdGbSFwqRtK88bQw+38JhrTXXTcJl/x/9cnNYtc5N2SHwi5wvauAH34N9ujbXq548lWq5NMUYQ4YyZuUpMTFBkBoOedGg3xfeFz9NHPaEOj1gE+dcIfwy1GE4MZeTNddw+8mR8I+Aywuz6w6Jxr8L0bV7VawRgKl9JC/FU5OPJkdM9I7KQSZF9lExkChYfjP07oukdVDRrOPl7A4MH7xPK2CjVvZiKygeyCd8G2gcZiQ/QIBGneIrRNoH3VRGtLHMUEXN7lSgVT4c2/huA1f4IoUCSZYqetcv+zrn5+W6vq8f3/etaNJvpYrpdSkYrhsxBTBY3MKYsaVkYTA== Received: from MW4PR04CA0068.namprd04.prod.outlook.com (2603:10b6:303:6b::13) by DM6PR12MB3003.namprd12.prod.outlook.com (2603:10b6:5:38::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul 2021 15:09:13 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:6b:cafe::cf) by MW4PR04CA0068.outlook.office365.com (2603:10b6:303:6b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:13 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT015.mail.protection.outlook.com (10.13.175.130) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:13 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:11 +0000 From: Shiri Kuzin To: CC: , , , , Michael Baum Date: Thu, 15 Jul 2021 18:08:08 +0300 Message-ID: <20210715150817.51485-8-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1f45b866-0bfc-4663-f947-08d947a281d1 X-MS-TrafficTypeDiagnostic: DM6PR12MB3003: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:785; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YvV6H7VNqZvoFn05nrsqYNXLSLjCbsbr0C1FAtKf7ZDuyJ4dIUNbtuezpyXR6MFU9cfsTTYWEwBcWx05H/x7T3cX6V0CXaQFXlERppx3dTC5xw80jVAJAktYQWxEsn3FuTqNjXahgToKMmL8QGyuc6Dq6OWFqpPNKxNZ11g2AlLpZDniVRvElrEmNKyK9CE3QOxdfesoKRQu9KyTIAMIeMAlBXUXamxFjbI6RV7ib7edJBLM/T5gzF8r/WuZFQBLxCEX2/ougFzmU7FTCghvx+Z7FxBlJcygCwxH28y/SC6IHRT7KJMHgVt9nqR7bbCXd3lV/M4Xl7X5H0MeUMdrLs8AAD2ZFJhCjKYWjd6B+BvRapUaIXQhc/lhn6OSHkl6gbVl3dEZ+AesJ7HpznUCiRh7wiQlU5KLJiP++K1loScJR4sMI5K8JASqYUx8J+vPph0iBlm7kiXFS/EDr2MD2BgJdRsJFpANOwGCRXsZsIW23vOTiZCMrzVmlSa1YJkAUDcy7gqhbhQj+GnaZv9pcsyyhx8V2K/PdDgG4Z7hPM+fKuGbGMNOU0IR7I+jyQ8kQil03jlePN5cHCiBAXt18JY9Qaj8qetCMzzeuoWBAwvZKeYyBEgB3Ka0csBTVY1SE8+Ffnyjt6dM0Xu1A7xLTvyLz+0UlS3l0Tud2xQAANEEVRFxu/VSukPRV7PlqdEHb78BPyQQuaruPc/nleD/l9Fqgl5Kn7DMBYSMYP4zBGI= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(346002)(396003)(39860400002)(136003)(376002)(46966006)(36840700001)(478600001)(426003)(55016002)(336012)(7696005)(36756003)(16526019)(82310400003)(4326008)(36860700001)(186003)(36906005)(107886003)(26005)(86362001)(2616005)(6916009)(82740400003)(2906002)(356005)(6666004)(34020700004)(6286002)(5660300002)(8676002)(70586007)(70206006)(1076003)(83380400001)(316002)(54906003)(8936002)(47076005)(7636003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:13.6642 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1f45b866-0bfc-4663-f947-08d947a281d1 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT015.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3003 Subject: [dpdk-dev] [PATCH v7 07/16] crypto/mlx5: add memory region management X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Mellanox user space drivers don't deal with physical addresses as part of a memory protection mechanism. The device translates the given virtual address to a physical address using the given memory key as an address space identifier. That's why any mbuf virtual address is moved directly to the HW descriptor(WQE). The mapping between the virtual address to the physical address is saved in MR configured by the kernel to the HW. Each MR has a key that should also be moved to the WQE by the SW. When the SW sees an unmapped address, it extends the address range and creates a MR using a system call. Add memory region cache management: - 2 level cache per queue-pair - no locks. - 1 shared cache between all the queues using a lock. Using this way, the MR key search per data-path address is optimized. Signed-off-by: Shiri Kuzin Signed-off-by: Michael Baum Acked-by: Matan Azrad --- doc/guides/cryptodevs/mlx5.rst | 6 +++ drivers/crypto/mlx5/mlx5_crypto.c | 63 +++++++++++++++++++++++++++++++ drivers/crypto/mlx5/mlx5_crypto.h | 3 ++ 3 files changed, 72 insertions(+) diff --git a/doc/guides/cryptodevs/mlx5.rst b/doc/guides/cryptodevs/mlx5.rst index dd1d1a615d..ece881220e 100644 --- a/doc/guides/cryptodevs/mlx5.rst +++ b/doc/guides/cryptodevs/mlx5.rst @@ -26,6 +26,12 @@ the MKEY is configured to perform crypto operations. The encryption does not require text to be aligned to the AES block size (128b). +For security reasons and to increase robustness, this driver only deals with virtual +memory addresses. The way resources allocations are handled by the kernel, +combined with hardware specifications that allow handling virtual memory +addresses directly, ensure that DPDK applications cannot access random +physical memory (or memory that does not belong to the current process). + The PMD uses libibverbs and libmlx5 to access the device firmware or to access the hardware components directly. There are different levels of objects and bypassing abilities. diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index 37e66cf57b..38008dcb28 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -261,6 +261,7 @@ mlx5_crypto_queue_pair_release(struct rte_cryptodev *dev, uint16_t qp_id) claim_zero(mlx5_glue->devx_umem_dereg(qp->umem_obj)); if (qp->umem_buf != NULL) rte_free(qp->umem_buf); + mlx5_mr_btree_free(&qp->mr_ctrl.cache_bh); mlx5_devx_cq_destroy(&qp->cq_obj); rte_free(qp); dev->data->queue_pairs[qp_id] = NULL; @@ -342,6 +343,14 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id, DRV_LOG(ERR, "Failed to register QP umem."); goto error; } + if (mlx5_mr_btree_init(&qp->mr_ctrl.cache_bh, MLX5_MR_BTREE_CACHE_N, + priv->dev_config.socket_id) != 0) { + DRV_LOG(ERR, "Cannot allocate MR Btree for qp %u.", + (uint32_t)qp_id); + rte_errno = ENOMEM; + goto error; + } + qp->mr_ctrl.dev_gen_ptr = &priv->mr_scache.dev_gen; attr.pd = priv->pdn; attr.uar_index = mlx5_os_get_devx_uar_page_id(priv->uar); attr.cqn = qp->cq_obj.cq->id; @@ -448,6 +457,40 @@ mlx5_crypto_hw_global_prepare(struct mlx5_crypto_priv *priv) return 0; } +/** + * Callback for memory event. + * + * @param event_type + * Memory event type. + * @param addr + * Address of memory. + * @param len + * Size of memory. + */ +static void +mlx5_crypto_mr_mem_event_cb(enum rte_mem_event event_type, const void *addr, + size_t len, void *arg __rte_unused) +{ + struct mlx5_crypto_priv *priv; + + /* Must be called from the primary process. */ + MLX5_ASSERT(rte_eal_process_type() == RTE_PROC_PRIMARY); + switch (event_type) { + case RTE_MEM_EVENT_FREE: + pthread_mutex_lock(&priv_list_lock); + /* Iterate all the existing mlx5 devices. */ + TAILQ_FOREACH(priv, &mlx5_crypto_priv_list, next) + mlx5_free_mr_by_addr(&priv->mr_scache, + priv->ctx->device->name, + addr, len); + pthread_mutex_unlock(&priv_list_lock); + break; + case RTE_MEM_EVENT_ALLOC: + default: + break; + } +} + /** * DPDK callback to register a PCI device. * @@ -530,6 +573,22 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, claim_zero(mlx5_glue->close_device(priv->ctx)); return -1; } + if (mlx5_mr_btree_init(&priv->mr_scache.cache, + MLX5_MR_BTREE_CACHE_N * 2, rte_socket_id()) != 0) { + DRV_LOG(ERR, "Failed to allocate shared cache MR memory."); + mlx5_crypto_hw_global_release(priv); + rte_cryptodev_pmd_destroy(priv->crypto_dev); + claim_zero(mlx5_glue->close_device(priv->ctx)); + rte_errno = ENOMEM; + return -rte_errno; + } + priv->mr_scache.reg_mr_cb = mlx5_common_verbs_reg_mr; + priv->mr_scache.dereg_mr_cb = mlx5_common_verbs_dereg_mr; + /* Register callback function for global shared MR cache management. */ + if (TAILQ_EMPTY(&mlx5_crypto_priv_list)) + rte_mem_event_callback_register("MLX5_MEM_EVENT_CB", + mlx5_crypto_mr_mem_event_cb, + NULL); pthread_mutex_lock(&priv_list_lock); TAILQ_INSERT_TAIL(&mlx5_crypto_priv_list, priv, next); pthread_mutex_unlock(&priv_list_lock); @@ -549,6 +608,10 @@ mlx5_crypto_pci_remove(struct rte_pci_device *pdev) TAILQ_REMOVE(&mlx5_crypto_priv_list, priv, next); pthread_mutex_unlock(&priv_list_lock); if (priv) { + if (TAILQ_EMPTY(&mlx5_crypto_priv_list)) + rte_mem_event_callback_unregister("MLX5_MEM_EVENT_CB", + NULL); + mlx5_mr_release_cache(&priv->mr_scache); mlx5_crypto_hw_global_release(priv); rte_cryptodev_pmd_destroy(priv->crypto_dev); claim_zero(mlx5_glue->close_device(priv->ctx)); diff --git a/drivers/crypto/mlx5/mlx5_crypto.h b/drivers/crypto/mlx5/mlx5_crypto.h index 1c3c4855ec..a9fbc0aa82 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.h +++ b/drivers/crypto/mlx5/mlx5_crypto.h @@ -12,6 +12,7 @@ #include #include +#include #define MLX5_CRYPTO_DEK_HTABLE_SZ (1 << 11) #define MLX5_CRYPTO_KEY_LENGTH 80 @@ -27,6 +28,7 @@ struct mlx5_crypto_priv { struct ibv_pd *pd; struct mlx5_hlist *dek_hlist; /* Dek hash list. */ struct rte_cryptodev_config dev_config; + struct mlx5_mr_share_cache mr_scache; /* Global shared MR cache. */ }; struct mlx5_crypto_qp { @@ -36,6 +38,7 @@ struct mlx5_crypto_qp { void *umem_buf; volatile uint32_t *db_rec; struct rte_crypto_op **ops; + struct mlx5_mr_ctrl mr_ctrl; }; struct mlx5_crypto_dek { From patchwork Thu Jul 15 15:08:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95895 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 36041A0A0C; Thu, 15 Jul 2021 17:10:13 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D02DA412FF; Thu, 15 Jul 2021 17:09:25 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2084.outbound.protection.outlook.com [40.107.220.84]) by mails.dpdk.org (Postfix) with ESMTP id 7490441233 for ; Thu, 15 Jul 2021 17:09:18 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=A1pFLbWXtNtou8+AYTKbv3o+lf7X5MQ76UBkegw2/r9eNzswEdTRHuy3kN5maHn7h6+LS1EHxSBBK+vpMvggEhyXYxdZnG+Tvd9365ead+TOISubsIPray8NNpZEQSZz3fyrpevi396vLXGIDg1hYrG+W+iXAW6pJjXV0BttXkSrb80fCjgN5Gq8AL6YpQ601HjBJO50CLW/OAjzj1TlwoynmC75RCduj6s6MxaZLtzKdoqlcnF7OQYNX9B2OMiEdyp7TglTsCsoOr44uJFy6vNWdH3blY/vgDKM1voYn8bai+RhD6eq6MZUtM5CYyn2jJffYJ92DCO/TSeWMFilxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uwcnV+38iIzlgyAZ2ajKk8JPMWkwROpON9kr1/u/PZ0=; b=LLmeU/mm9AX+UMlGbvsRvBWdf/iFAyZSj47pIDbnEydvTQ6cJvzP5JbSZKwTOt3MEDoEAj7oj3l6vbLeY4SExEm3qtYz3DWGJn/StDaU955nJrDQ3rvqSvcDtOjRFh+hPHCJ9EWHN3cUj8lE7deQW97mnQyGfmw8zAK/+0bGfahEyPBxRCu5V9c1viIFTC3l8L2YUzW0JackGJ2PM404x6koTav+y4M1DfE6YIal8M+vgj6Ul+qUmirpYAY3R2Pay/LVIMQBkxxrMTVKeVjCAtPwj9Wke6WuvtZfY8RWRjP+0CetAYm0aL6gj0Fybh38YhX0iCCc6GBvg9KfppSRPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uwcnV+38iIzlgyAZ2ajKk8JPMWkwROpON9kr1/u/PZ0=; b=r/KXkmwUqN34r+pN+sjbxaACcrgPGFrpMr5bts4HMRvBAhxEuafzYVdTLx3j0I874BrNms7RJ/KG9NFO4N2oeMuZ1sSLlyNMWbIx53o8oWzag39xkbb6UyICqX7ddjIITkmucCaLaKGleLTFhuGp96PFfT5XrX3YKCyI/CVttOhSVWEBFUjAuZQsmXCortYqUoSkdSEGqlNArjn1vBJvTRBB5XR3oH0tJNYb89fVb1QTl+a7nMxpaSMNTJY0djep3300s37m6gFjB+r6C0eKH6SgBorf1LZCy1TRLUzI+XwysEQGCj4cQI4XvnKlHZyRMB4W8J1ydb9W/kZqjSaDZg== Received: from MW4PR04CA0075.namprd04.prod.outlook.com (2603:10b6:303:6b::20) by BN6PR1201MB0002.namprd12.prod.outlook.com (2603:10b6:404:ae::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Thu, 15 Jul 2021 15:09:16 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:6b:cafe::e7) by MW4PR04CA0075.outlook.office365.com (2603:10b6:303:6b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:15 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT015.mail.protection.outlook.com (10.13.175.130) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:15 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:13 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:09 +0300 Message-ID: <20210715150817.51485-9-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0d5b08b9-d4f7-4a5c-0406-08d947a282dd X-MS-TrafficTypeDiagnostic: BN6PR1201MB0002: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:117; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: S1uALZyu4JajPjzNvyl1D80icX83uNuDKxC7ev+UIOVz3RUEFHqyJsqg86XYOAn1kmju7XVkf5wYSguNf6IdRxo/CUJdZWMoUfUACJXNXcUHDtMU84ws1OIy7SI+I02v8uf/sb1K7bq34Ep5gvibZaVeFpco3PrZZDfruJGrXx5De0ae7UaJL38ApDfZRi6K+QWrqhJupw2y5mXcuHm7LKIAvSCUyblZC06llyOhVe8wQse79NPhIl/3FrkETKnN3d7tDuJLaNULPFqAj3WZoFAlXsvTIJEDq8/GbGewd8Zl13XISH/RNpjFhU8mjFoja+rq2HAE0uSEAHcsRcy+RoYspELfnu6de0sd3Yz0DWHkA8DMVsU+0QlkyzAc+qCiLBA2B2lFyOr7EQRcYoV1OM0nLDRMqiU0MANV3DQ/pM5q+CTZXloWdEYZ+cMt5twVKIzLm0qnBXt6hPd3Z60e5YHr8Xpa0Q5N4XYXnuDmMBAmnI4suYWJOcMR2gmgb2NQABMrSQoNsreWur6fi2BQyb6r6UKOTKpwS4v5fGNFhEUYfheAjpIeH8LE8Vzha6n+F6sxvhohw2JU+OL9SlijQhTvSf51ad6l6b8vOZdihYIR5pJ9sgs6/9EQeofRACqZF6SBYpRNDgXB5Zt9Q/xO3fU69pvvXUmG98lVlYpurxHfyGXG/p8w74T1H2B11nIYpqUo82YtiIQ5raDNC4FXezQ/5QkDKfYTwSJJI/NXoHg= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(396003)(376002)(346002)(39860400002)(136003)(36840700001)(46966006)(7636003)(55016002)(82310400003)(86362001)(6916009)(8676002)(426003)(356005)(1076003)(34020700004)(47076005)(36860700001)(83380400001)(7696005)(336012)(5660300002)(6666004)(8936002)(16526019)(186003)(6286002)(70206006)(36906005)(82740400003)(4326008)(316002)(54906003)(478600001)(2906002)(36756003)(2616005)(26005)(70586007); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:15.4133 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0d5b08b9-d4f7-4a5c-0406-08d947a282dd X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT015.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR1201MB0002 Subject: [dpdk-dev] [PATCH v7 08/16] crypto/mlx5: create login object using DevX X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" To work with crypto engines that are marked with wrapped_import_method, a login session is required. A crypto login object needs to be created using DevX. The crypto login object contains: - The credential pointer. - The import_KEK pointer to be used for all secured information communicated in crypto commands (key fields), including the provided credential in this command. - The credential secret, wrapped by the import_KEK indicated in this command. Size includes 8 bytes IV for wrapping. Added devargs for the required login values: - wcs_file - path to the file containing the credential. - import_kek_id - the import KEK pointer. - credential_id - the credential pointer. Create the login DevX object in pci_probe function and destroy it in pci_remove. Destroying the crypto login object means logout. Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad --- doc/guides/cryptodevs/mlx5.rst | 60 +++++++++++++++++ drivers/crypto/mlx5/mlx5_crypto.c | 103 ++++++++++++++++++++++++++++++ drivers/crypto/mlx5/mlx5_crypto.h | 7 ++ 3 files changed, 170 insertions(+) diff --git a/doc/guides/cryptodevs/mlx5.rst b/doc/guides/cryptodevs/mlx5.rst index ece881220e..6cae5affbd 100644 --- a/doc/guides/cryptodevs/mlx5.rst +++ b/doc/guides/cryptodevs/mlx5.rst @@ -44,6 +44,51 @@ To get the best performances: Enabling librte_crypto_mlx5 causes DPDK applications to be linked against libibverbs. +In order to move the device to crypto operational mode, credential and KEK +(Key Encrypting Key) should be set as the first step. +The credential will be used by the software in order to perform crypto login, and the KEK is +the AES Key Wrap Algorithm (rfc3394) key that will be used for sensitive data +wrapping. +The credential and the AES-XTS keys should be provided to the hardware, as ciphertext +encrypted by the KEK. + +When crypto engines are defined to work in wrapped import method, they come out +of the factory in Commissioning mode, and thus, cannot be used for crypto operations +yet. A dedicated tool is used for changing the mode from Commissioning to +Operational, while setting the first import_KEK and credential in plaintext. +The mlxreg dedicated tool should be used as follows: + +- Set CRYPTO_OPERATIONAL register to set the device in crypto operational mode. + + The input to this tool is: + The first credential in plaintext, 40B. + The first import_KEK in plaintext: kek size 0 for 16B or 1 for 32B, kek data. + + Example: + mlxreg -d /dev/mst/mt4123_pciconf0 --reg_name CRYPTO_OPERATIONAL --get + + The "wrapped_crypto_operational" value will be "0x00000000". + The command to set the register should be executed only once, and all the + values mentioned above should be specified in the same command. + + Example: + mlxreg -d /dev/mst/mt4123_pciconf0 --reg_name CRYPTO_OPERATIONAL + --set "credential[0]=0x10000000, credential[1]=0x10000000, kek[0]=0x00000000" + + All values not specified will remain 0. + "wrapped_crypto_going_to_commissioning" and "wrapped_crypto_operational" + should not be specified. + + All the device ports should set it in order to move to operational mode. + +- Query CRYPTO_OPERATIONAL register to make sure the device is in Operational + mode. + + Example: + mlxreg -d /dev/mst/mt4123_pciconf0 --reg_name CRYPTO_OPERATIONAL --get + The "wrapped_crypto_operational" value will be "0x00000001" if the mode was + successfully changed to operational mode. + Driver options -------------- @@ -53,6 +98,21 @@ Driver options Select the class of the driver that should probe the device. `crypto` for the mlx5 crypto driver. +- ``wcs_file`` parameter [string] - mandatory + + File path including only the wrapped credential in string format of hexadecimal + numbers, represent 48 bytes (8 bytes IV added by the AES key wrap algorithm). + +- ``import_kek_id`` parameter [int] + + The identifier of the KEK, default value is 0 represents the operational + register import_kek.. + +- ``credential_id`` parameter [int] + + The identifier of the credential, default value is 0 represents the operational + register credential. + Supported NICs -------------- diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index 38008dcb28..cbaa2e52ff 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -457,6 +457,101 @@ mlx5_crypto_hw_global_prepare(struct mlx5_crypto_priv *priv) return 0; } + +static int +mlx5_crypto_args_check_handler(const char *key, const char *val, void *opaque) +{ + struct mlx5_crypto_devarg_params *devarg_prms = opaque; + struct mlx5_devx_crypto_login_attr *attr = &devarg_prms->login_attr; + unsigned long tmp; + FILE *file; + int ret; + int i; + + if (strcmp(key, "class") == 0) + return 0; + if (strcmp(key, "wcs_file") == 0) { + file = fopen(val, "rb"); + if (file == NULL) { + rte_errno = ENOTSUP; + return -rte_errno; + } + for (i = 0 ; i < MLX5_CRYPTO_CREDENTIAL_SIZE ; i++) { + ret = fscanf(file, "%02hhX", &attr->credential[i]); + if (ret <= 0) { + fclose(file); + DRV_LOG(ERR, + "Failed to read credential from file."); + rte_errno = EINVAL; + return -rte_errno; + } + } + fclose(file); + devarg_prms->login_devarg = true; + return 0; + } + errno = 0; + tmp = strtoul(val, NULL, 0); + if (errno) { + DRV_LOG(WARNING, "%s: \"%s\" is an invalid integer.", key, val); + return -errno; + } + if (strcmp(key, "import_kek_id") == 0) + attr->session_import_kek_ptr = (uint32_t)tmp; + else if (strcmp(key, "credential_id") == 0) + attr->credential_pointer = (uint32_t)tmp; + else + DRV_LOG(WARNING, "Invalid key %s.", key); + return 0; +} + +static struct mlx5_devx_obj * +mlx5_crypto_config_login(struct rte_devargs *devargs, + struct ibv_context *ctx) +{ + /* + * Set credential pointer and session import KEK pointer to a default + * value of 0. + */ + struct mlx5_crypto_devarg_params login = { + .login_devarg = false, + .login_attr = { + .credential_pointer = 0, + .session_import_kek_ptr = 0, + } + }; + struct rte_kvargs *kvlist; + + if (devargs == NULL) { + DRV_LOG(ERR, + "No login devargs in order to enable crypto operations in the device."); + rte_errno = EINVAL; + return NULL; + } + kvlist = rte_kvargs_parse(devargs->args, NULL); + if (kvlist == NULL) { + DRV_LOG(ERR, "Failed to parse devargs."); + rte_errno = EINVAL; + return NULL; + } + if (rte_kvargs_process(kvlist, NULL, mlx5_crypto_args_check_handler, + &login) != 0) { + DRV_LOG(ERR, "Devargs handler function Failed."); + rte_kvargs_free(kvlist); + rte_errno = EINVAL; + return NULL; + } + rte_kvargs_free(kvlist); + if (login.login_devarg == false) { + DRV_LOG(ERR, + "No login credential devarg in order to enable crypto operations " + "in the device."); + rte_errno = EINVAL; + return NULL; + } + return mlx5_devx_cmd_create_crypto_login_obj(ctx, &login.login_attr); +} + /** * Callback for memory event. * @@ -512,6 +607,7 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, struct ibv_device *ibv; struct rte_cryptodev *crypto_dev; struct ibv_context *ctx; + struct mlx5_devx_obj *login; struct mlx5_crypto_priv *priv; struct mlx5_hca_attr attr = { 0 }; struct rte_cryptodev_pmd_init_params init_params = { @@ -550,6 +646,11 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, rte_errno = ENOTSUP; return -ENOTSUP; } + login = mlx5_crypto_config_login(pci_dev->device.devargs, ctx); + if (login == NULL) { + DRV_LOG(ERR, "Failed to configure login."); + return -rte_errno; + } crypto_dev = rte_cryptodev_pmd_create(ibv->name, &pci_dev->device, &init_params); if (crypto_dev == NULL) { @@ -566,6 +667,7 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, crypto_dev->driver_id = mlx5_crypto_driver_id; priv = crypto_dev->data->dev_private; priv->ctx = ctx; + priv->login_obj = login; priv->pci_dev = pci_dev; priv->crypto_dev = crypto_dev; if (mlx5_crypto_hw_global_prepare(priv) != 0) { @@ -614,6 +716,7 @@ mlx5_crypto_pci_remove(struct rte_pci_device *pdev) mlx5_mr_release_cache(&priv->mr_scache); mlx5_crypto_hw_global_release(priv); rte_cryptodev_pmd_destroy(priv->crypto_dev); + claim_zero(mlx5_devx_cmd_destroy(priv->login_obj)); claim_zero(mlx5_glue->close_device(priv->ctx)); } return 0; diff --git a/drivers/crypto/mlx5/mlx5_crypto.h b/drivers/crypto/mlx5/mlx5_crypto.h index a9fbc0aa82..b98c621c23 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.h +++ b/drivers/crypto/mlx5/mlx5_crypto.h @@ -29,6 +29,7 @@ struct mlx5_crypto_priv { struct mlx5_hlist *dek_hlist; /* Dek hash list. */ struct rte_cryptodev_config dev_config; struct mlx5_mr_share_cache mr_scache; /* Global shared MR cache. */ + struct mlx5_devx_obj *login_obj; }; struct mlx5_crypto_qp { @@ -48,6 +49,12 @@ struct mlx5_crypto_dek { bool size_is_48; /* Whether the key\data size is 48 bytes or not. */ } __rte_cache_aligned; + +struct mlx5_crypto_devarg_params { + bool login_devarg; + struct mlx5_devx_crypto_login_attr login_attr; +}; + int mlx5_crypto_dek_destroy(struct mlx5_crypto_priv *priv, struct mlx5_crypto_dek *dek); From patchwork Thu Jul 15 15:08:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95896 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D57F8A0A0C; Thu, 15 Jul 2021 17:10:21 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F37AA4130E; Thu, 15 Jul 2021 17:09:26 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2075.outbound.protection.outlook.com [40.107.92.75]) by mails.dpdk.org (Postfix) with ESMTP id 074FC41233 for ; Thu, 15 Jul 2021 17:09:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UJsdF9scJ2CIsY5Hso2FAf6YD6Sfy9PFejhkWxCbK32EUfD4iuhCrr+NaUFCyBDKRCae30beqPmeKXixI3PmE2QTqQISz1x09doG8KhQezR8fDhk10n2SgSQh84g9CEE+hxiHTZVZP+tD2P0/aeEmGf0g8GeYkRQ4/WV8+GMmObEFNZ/B3zp8YxBfR2G0YumGGf/SSDcD0gswoQzt9wMjrNe7n0mNmV1I63QiQRVimaBfLQYjL9w7GID7azlW31QvTtMz6Uzu5t9AtGpm/stz0cZewUkKJjkAF9l6DSHo+ipUvvRPxivIAR16h/23/mD3DqUptcM8hsZlalHl2JDQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hZvn5bJ7Rk2g3jDa4qj0jnYqDhatdzrXjwl3ex3sXeI=; b=MzB2CSU7F1trJdCde8er4fILAithXpl033wA5KlG+o8nN2VNAXs8O60xB8REcws/uwUn4FrYGP+kHh/5sJyThqzFEklfM2IDg9Wm+uUn76Pt3eY3ut++alMEJvpVb+lDNelys63z+0N5hD4NiRnffa1uzIoQoBbLeoUSVEVm9BMLCjjvylKb/A8jqcFzzt1EY2Q4aA+nhMp/bPlndf+pJrD1otDSanV78pRbz9WT7OVWWBVpjzg9PyorrfymaatJJozAoOULg7KXgnSUUY8OnbKQ/JdiJAkEt46XAnhDwE0WeS2KzDH0fKWSeaIQaqVu/7WjPA2xCRo8ru1Hz4v2kg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hZvn5bJ7Rk2g3jDa4qj0jnYqDhatdzrXjwl3ex3sXeI=; b=qXnWOAFhvU35YXJWJHM5L2SysjvwBKilwQ8ZiMj4LoXCgfBUOtmX8JzYBNnSda0mlXdMXaRK2eWcoiy6LHcGXjsWr+kF6h54HM1vIUQdNbvlevyablQ+6MLSIcGqPrOspDUxFKwQ1+P1YG+t9zGtRUv0zPq6SsUnVz23M+5ZeIdaNcEBUOz2u5Dh3jqrCP2hkRUwZUEuaQ+3fyhDsS543i7JqNZdaVsXq17ysmANYOo8IKwOcC3uG+OrF15EIcwlw4T48d5raN6+Sps5BZlqzAmBK+/ybNf8j6LDrC4ulmasbURBe60u22M8FRNE/BmuXdOYryEL/5VjnrYskJZbGA== Received: from MW4PR04CA0072.namprd04.prod.outlook.com (2603:10b6:303:6b::17) by BL0PR12MB5012.namprd12.prod.outlook.com (2603:10b6:208:1ca::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Thu, 15 Jul 2021 15:09:17 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:6b:cafe::bb) by MW4PR04CA0072.outlook.office365.com (2603:10b6:303:6b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23 via Frontend Transport; Thu, 15 Jul 2021 15:09:17 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT015.mail.protection.outlook.com (10.13.175.130) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:17 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:15 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:10 +0300 Message-ID: <20210715150817.51485-10-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 672146d3-4276-477d-60d0-08d947a283ef X-MS-TrafficTypeDiagnostic: BL0PR12MB5012: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:139; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: et0TIZFUdJsx81gowhvT0IKGIzul9IUN4cjOP1JMJE8n3ZEHmDCYXQnGt185ZxJwjgUrO8po5gxcUXy7UTOJdg9WcRPlKfZg8pChNVOt79pYPIf00N2lbCT8M04kgmYdcXERq4G0b4WQdwKGs7aUgegRa7rCEbMuORxIiImE2zf5HDdKOsJFNprvZEijur44oCjWrzpfTVW6gOQKUdUL5eDD77eNkHKEDFjbTAd53z+RDlH5uwiElDTKqJtEVh6Ja1ornT+2yg7M1ZTiH+lxDsAUDj5ILpJ0IbBXtu7WEDG2IMcjZA0liznbu6djJ5qr37hpAHsFrW4ghi5K/w70HzJM4+cO954fQYPhf1swxVSPOvIpllbuFOcCz9lTVwX6RBn/vHgEV0qWaNa0jgjbYoH1jgTkvx9eb5l/2PSWqzlpylHwEHIWgLwT73jLwMxWus4KqMsf8WVKjmxjVYydnxcuhW8MWOOCBDEUPX9k6oiTkSVbTnDlwCxBUp2dwXLp8pnZDELYFssJ+/D/ZBtunh1cV4uTpHT6BOwQb19MYd8cQZE5b/nnOwsP78IbLFgttTSehHEQ7X8IKBwRsES0hyfAp0nIJ12w8sEzGgvGXZ/ct5AlItdMQ9J05AXgSLzzIAVM1LupClI0/HYljZKhaTPjo2FNkJryZcpGXv4Htsjo7Y78XT8jy35HbAtzlqJnX2/7J5qZs2hnNfDsYUntAkp9SxVXVDYXaZwXqU/veu4= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(39850400004)(136003)(346002)(396003)(376002)(46966006)(36840700001)(82740400003)(8676002)(7636003)(36860700001)(36906005)(316002)(36756003)(83380400001)(6286002)(34020700004)(2906002)(1076003)(356005)(8936002)(7696005)(54906003)(47076005)(82310400003)(70586007)(6916009)(2616005)(26005)(426003)(55016002)(4326008)(478600001)(186003)(86362001)(70206006)(336012)(6666004)(5660300002)(16526019); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:17.0954 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 672146d3-4276-477d-60d0-08d947a283ef X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT015.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB5012 Subject: [dpdk-dev] [PATCH v7 09/16] crypto/mlx5: add keytag devarg X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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: Suanming Mou A keytag is a piece of data encrypted together with a DEK. When a DEK is referenced by an MKEY.bsf through its index, the keytag is also supplied in the BSF as plaintext. The HW will decrypt the DEK (and the attached keytag) and will fail the operation if the keytags don't match. This commit adds the configuration of the keytag with devargs. Signed-off-by: Suanming Mou Signed-off-by: Matan Azrad --- doc/guides/cryptodevs/mlx5.rst | 7 +++++ drivers/crypto/mlx5/mlx5_crypto.c | 50 +++++++++++++++++-------------- drivers/crypto/mlx5/mlx5_crypto.h | 3 +- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/doc/guides/cryptodevs/mlx5.rst b/doc/guides/cryptodevs/mlx5.rst index 6cae5affbd..c3632484a5 100644 --- a/doc/guides/cryptodevs/mlx5.rst +++ b/doc/guides/cryptodevs/mlx5.rst @@ -52,6 +52,9 @@ wrapping. The credential and the AES-XTS keys should be provided to the hardware, as ciphertext encrypted by the KEK. +A keytag (64 bits) should be appended to the AES-XTS keys (before wrapping), +and will be validated when the hardware attempts to access it. + When crypto engines are defined to work in wrapped import method, they come out of the factory in Commissioning mode, and thus, cannot be used for crypto operations yet. A dedicated tool is used for changing the mode from Commissioning to @@ -113,6 +116,10 @@ Driver options The identifier of the credential, default value is 0 represents the operational register credential. +- ``keytag`` parameter [int] + + The plaintext of the keytag appanded to the AES-XTS keys, default value is 0. + Supported NICs -------------- diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index cbaa2e52ff..0f786ac4ca 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -500,56 +500,52 @@ mlx5_crypto_args_check_handler(const char *key, const char *val, void *opaque) attr->session_import_kek_ptr = (uint32_t)tmp; else if (strcmp(key, "credential_id") == 0) attr->credential_pointer = (uint32_t)tmp; + else if (strcmp(key, "keytag") == 0) + devarg_prms->keytag = tmp; else DRV_LOG(WARNING, "Invalid key %s.", key); return 0; } -static struct mlx5_devx_obj * -mlx5_crypto_config_login(struct rte_devargs *devargs, - struct ibv_context *ctx) +static int +mlx5_crypto_parse_devargs(struct rte_devargs *devargs, + struct mlx5_crypto_devarg_params *devarg_prms) { - /* - * Set credential pointer and session import KEK pointer to a default - * value of 0. - */ - struct mlx5_crypto_devarg_params login = { - .login_devarg = false, - .login_attr = { - .credential_pointer = 0, - .session_import_kek_ptr = 0, - } - }; + struct mlx5_devx_crypto_login_attr *attr = &devarg_prms->login_attr; struct rte_kvargs *kvlist; + /* Default values. */ + attr->credential_pointer = 0; + attr->session_import_kek_ptr = 0; + devarg_prms->keytag = 0; if (devargs == NULL) { DRV_LOG(ERR, "No login devargs in order to enable crypto operations in the device."); rte_errno = EINVAL; - return NULL; + return -1; } kvlist = rte_kvargs_parse(devargs->args, NULL); if (kvlist == NULL) { DRV_LOG(ERR, "Failed to parse devargs."); rte_errno = EINVAL; - return NULL; + return -1; } if (rte_kvargs_process(kvlist, NULL, mlx5_crypto_args_check_handler, - &login) != 0) { + devarg_prms) != 0) { DRV_LOG(ERR, "Devargs handler function Failed."); rte_kvargs_free(kvlist); rte_errno = EINVAL; - return NULL; + return -1; } rte_kvargs_free(kvlist); - if (login.login_devarg == false) { + if (devarg_prms->login_devarg == false) { DRV_LOG(ERR, "No login credential devarg in order to enable crypto operations " "in the device."); rte_errno = EINVAL; - return NULL; + return -1; } - return mlx5_devx_cmd_create_crypto_login_obj(ctx, &login.login_attr); + return 0; } /** @@ -609,6 +605,7 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, struct ibv_context *ctx; struct mlx5_devx_obj *login; struct mlx5_crypto_priv *priv; + struct mlx5_crypto_devarg_params devarg_prms = { 0 }; struct mlx5_hca_attr attr = { 0 }; struct rte_cryptodev_pmd_init_params init_params = { .name = "", @@ -617,6 +614,8 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, .max_nb_queue_pairs = RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS, }; + int ret; + RTE_SET_USED(pci_drv); if (rte_eal_process_type() != RTE_PROC_PRIMARY) { DRV_LOG(ERR, "Non-primary process type is not supported."); @@ -646,7 +645,13 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, rte_errno = ENOTSUP; return -ENOTSUP; } - login = mlx5_crypto_config_login(pci_dev->device.devargs, ctx); + ret = mlx5_crypto_parse_devargs(pci_dev->device.devargs, &devarg_prms); + if (ret) { + DRV_LOG(ERR, "Failed to parse devargs."); + return -rte_errno; + } + login = mlx5_devx_cmd_create_crypto_login_obj(ctx, + &devarg_prms.login_attr); if (login == NULL) { DRV_LOG(ERR, "Failed to configure login."); return -rte_errno; @@ -686,6 +691,7 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, } priv->mr_scache.reg_mr_cb = mlx5_common_verbs_reg_mr; priv->mr_scache.dereg_mr_cb = mlx5_common_verbs_dereg_mr; + priv->keytag = rte_cpu_to_be_64(devarg_prms.keytag); /* Register callback function for global shared MR cache management. */ if (TAILQ_EMPTY(&mlx5_crypto_priv_list)) rte_mem_event_callback_register("MLX5_MEM_EVENT_CB", diff --git a/drivers/crypto/mlx5/mlx5_crypto.h b/drivers/crypto/mlx5/mlx5_crypto.h index b98c621c23..d374d3c4e9 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.h +++ b/drivers/crypto/mlx5/mlx5_crypto.h @@ -30,6 +30,7 @@ struct mlx5_crypto_priv { struct rte_cryptodev_config dev_config; struct mlx5_mr_share_cache mr_scache; /* Global shared MR cache. */ struct mlx5_devx_obj *login_obj; + uint64_t keytag; }; struct mlx5_crypto_qp { @@ -49,10 +50,10 @@ struct mlx5_crypto_dek { bool size_is_48; /* Whether the key\data size is 48 bytes or not. */ } __rte_cache_aligned; - struct mlx5_crypto_devarg_params { bool login_devarg; struct mlx5_devx_crypto_login_attr login_attr; + uint64_t keytag; }; int From patchwork Thu Jul 15 15:08:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95897 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F3C03A0A0C; Thu, 15 Jul 2021 17:10:28 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7560341316; Thu, 15 Jul 2021 17:09:28 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2044.outbound.protection.outlook.com [40.107.223.44]) by mails.dpdk.org (Postfix) with ESMTP id 942F7412DD for ; Thu, 15 Jul 2021 17:09:20 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=i3340aWJpUsEpf0Bhog0bcQjs76jCe1MkS/FPF45sS7swSCuTQgI7E7Hu6SO58S+snjEj9kDNHVmT8ecosMIvex8iOTxpiws048SdA7/qa8gHBhJTmXzosP13qfzPpIka+tWSZKRVZSVBT/9GJvK5/SwdsTV2CU16weoO/OyOlLiluT29EPls39oXfYrSYn23pu3Sw6aGyjebUjiPrMVEoNifEuKKDmrWiGJa/6y0I0x9AW0djpgx2+lOJAHEjBcUV/78G4dloIEsU0XNfLDFPqczfzW/tFxpyuNWFO8A/lkBuZK+FHB+tycZFMLXrfTeuoOXhrQhp+Ypy76Lhlu4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=U16QMk4+K7oH8a2eITgqff0aHsCyPUYnry1A6cimFjg=; b=SQvPStRE6UOrunWwHYUJYbyI2hWzvSRpKR3x7JsaxzT0QatmXTYSrXxOHE5CzUakUQjIzwnkb4A1gx9tm6sbyCuUHNDR9CeYBOjRtKInJOBlKbK+TUy/wscCCNYsA3W9Sp0KWsSLxg5qKaqwc0Tc8U0ieiNxsjhBE6xqp98b8WYDNz+Vt6095N8QmSPKyU35EgsDtdXjUp27MatUcNHh6reC+Q+HXnbjq6Ky4BxDf9BbxXn7Ao+6N1I8GSwv3X2ZRwOLLpjf/9HFSlmcMEViWCUcBiHtgjxLcpb4BOy6P8bQ73Put1JXf/s53B5re5u67hSBYWvR6GyRX/oRkK/i0Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=U16QMk4+K7oH8a2eITgqff0aHsCyPUYnry1A6cimFjg=; b=SDqBsijToHe7ivTcWg4kS9JfeD57rmL2fI4idQqEFUH7WJc/hdG35e3iaDZUd02ARnEkmPgBs6eYR/jLjyW5WuJ/QIEGeBEf2F00H1MSRnuEOCZ2jqPCUiYzOBDuDgOtHiZ/OknvpZ5SI1oA56e4sMCs2XrO58NCOLVKez5xFmC9rjmDpVTSl5tdwyg/qs+8DMwNMf/cYyJpwIRYmK5eP35ADO5Ccup5XxAE33jlUnRjg5IHsBwyrz12MqhnZIbP4qFJUVesJeFiJaNCKihN3SdBdU2GzDruVAJPk3JF8JZyPYrhSR5rUg7PLXHYMgpCAbrQbLiKsvP7CEolb/sWzA== Received: from MW4PR04CA0088.namprd04.prod.outlook.com (2603:10b6:303:6b::33) by DM5PR1201MB0121.namprd12.prod.outlook.com (2603:10b6:4:56::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.24; Thu, 15 Jul 2021 15:09:19 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:6b:cafe::c4) by MW4PR04CA0088.outlook.office365.com (2603:10b6:303:6b::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.22 via Frontend Transport; Thu, 15 Jul 2021 15:09:19 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT015.mail.protection.outlook.com (10.13.175.130) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:19 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:17 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:11 +0300 Message-ID: <20210715150817.51485-11-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 21749f3f-5be4-499f-d5b6-08d947a28522 X-MS-TrafficTypeDiagnostic: DM5PR1201MB0121: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:193; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4nsrKLrs3T+bRbIXBzidf+WUVwONwmqG7txjYvW4Jhw2MXgg6PIRyuraEv335c6JJAjD8tRx6mn5+W6nCyfvC7/V/hd6YYAI4d/klgkN+xPWTRz+y57x1zUMZaTK3n4xC7oYhE6y52Vl7V66otIFg5ntvh3QCwcxipumY9RYXr3JN/8HwR6RkXHViZnPInKA5wiBcj3mrYu5aKrvp1HMOcEZti7UqY4tM67/XHabEdndLJ9FUJa8nKkLmEKzjWop7LNp+2SE7Iu87/5GjDqOv+ABKYaSJTsGuXvXfPpuda08SJJfdiOx36+QE9iE/m2XW98FYmLN+t2s2UD7udodiu+dhyTLnxEHi1e48Lhiu8z4yFvWHpjj7qb//H42yc5fB84AVGUGYgC0wrPLJ97Zd1cP55zkhONdWe/hVZ2wPN6X0o77bK0LwF1mucYF8KfbXWGEGfDo4ZdnXX2UeqkmytzfX0y+JR5pFdYobswyLoEH7PvWMlBzwROf01UiqF5MNefKDvkjyRo1e6R6Pe2ZiDCop23HF+I+88LysEfIZa6wAYka4YDJKsGTkjLzhGTl/yoDcjneRNF7xBm8msr77h1kTmPQ1D53zJzKNxAo1mkOoqTR8P+ayAHx6P81CkZUZ6Jp5cL2OdTiMTRF7e/HM3WBFzqYurPCq4NGg0NDFpwI2Ufa960x4wJujt3wv/TVBnbFwtPusjAyMbBgLizC49eYuYctap9+HKtH4zSgmW4= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(136003)(39850400004)(396003)(376002)(346002)(36840700001)(46966006)(2906002)(16526019)(36756003)(2616005)(82740400003)(356005)(186003)(86362001)(5660300002)(7696005)(7636003)(55016002)(36860700001)(6666004)(83380400001)(54906003)(47076005)(1076003)(6916009)(36906005)(8676002)(70586007)(336012)(70206006)(4326008)(478600001)(316002)(426003)(26005)(34020700004)(8936002)(6286002)(82310400003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:19.2473 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 21749f3f-5be4-499f-d5b6-08d947a28522 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT015.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1201MB0121 Subject: [dpdk-dev] [PATCH v7 10/16] crypto/mlx5: add maximum segments devarg X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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: Suanming Mou The mlx5 HW crypto operations are done by attaching crypto property to a memory region. Once done, every access to the memory via the crypto-enabled memory region will result with in-line encryption or decryption of the data. As a result, the design choice is to provide two types of WQEs. One is UMR WQE which sets the crypto property and the other is rdma write WQE which sends DMA command to copy data from local MR to remote MR. The size of the WQEs will be defined by a new devarg called max_segs_num. This devarg also defines the maximum segments in mbuf chain that will be supported for crypto operations. Signed-off-by: Suanming Mou Signed-off-by: Matan Azrad --- doc/guides/cryptodevs/mlx5.rst | 4 ++++ drivers/crypto/mlx5/mlx5_crypto.c | 33 +++++++++++++++++++++++++++---- drivers/crypto/mlx5/mlx5_crypto.h | 6 ++++++ 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/doc/guides/cryptodevs/mlx5.rst b/doc/guides/cryptodevs/mlx5.rst index c3632484a5..dd4705b744 100644 --- a/doc/guides/cryptodevs/mlx5.rst +++ b/doc/guides/cryptodevs/mlx5.rst @@ -120,6 +120,10 @@ Driver options The plaintext of the keytag appanded to the AES-XTS keys, default value is 0. +- ``max_segs_num`` parameter [int] + + Maximum number of mbuf chain segments(src or dest), default value is 8. + Supported NICs -------------- diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index 0f786ac4ca..fc251f3f4c 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -21,6 +21,7 @@ #define MLX5_CRYPTO_DRIVER_NAME mlx5_crypto #define MLX5_CRYPTO_LOG_NAME pmd.crypto.mlx5 #define MLX5_CRYPTO_MAX_QPS 1024 +#define MLX5_CRYPTO_MAX_SEGS 56 #define MLX5_CRYPTO_FEATURE_FLAGS \ (RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO | RTE_CRYPTODEV_FF_HW_ACCELERATED | \ @@ -496,14 +497,24 @@ mlx5_crypto_args_check_handler(const char *key, const char *val, void *opaque) DRV_LOG(WARNING, "%s: \"%s\" is an invalid integer.", key, val); return -errno; } - if (strcmp(key, "import_kek_id") == 0) + if (strcmp(key, "max_segs_num") == 0) { + if (!tmp || tmp > MLX5_CRYPTO_MAX_SEGS) { + DRV_LOG(WARNING, "Invalid max_segs_num: %d, should" + " be less than %d.", + (uint32_t)tmp, MLX5_CRYPTO_MAX_SEGS); + rte_errno = EINVAL; + return -rte_errno; + } + devarg_prms->max_segs_num = (uint32_t)tmp; + } else if (strcmp(key, "import_kek_id") == 0) { attr->session_import_kek_ptr = (uint32_t)tmp; - else if (strcmp(key, "credential_id") == 0) + } else if (strcmp(key, "credential_id") == 0) { attr->credential_pointer = (uint32_t)tmp; - else if (strcmp(key, "keytag") == 0) + } else if (strcmp(key, "keytag") == 0) { devarg_prms->keytag = tmp; - else + } else { DRV_LOG(WARNING, "Invalid key %s.", key); + } return 0; } @@ -518,6 +529,7 @@ mlx5_crypto_parse_devargs(struct rte_devargs *devargs, attr->credential_pointer = 0; attr->session_import_kek_ptr = 0; devarg_prms->keytag = 0; + devarg_prms->max_segs_num = 8; if (devargs == NULL) { DRV_LOG(ERR, "No login devargs in order to enable crypto operations in the device."); @@ -614,6 +626,7 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, .max_nb_queue_pairs = RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS, }; + uint16_t rdmw_wqe_size; int ret; RTE_SET_USED(pci_drv); @@ -692,6 +705,18 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, priv->mr_scache.reg_mr_cb = mlx5_common_verbs_reg_mr; priv->mr_scache.dereg_mr_cb = mlx5_common_verbs_dereg_mr; priv->keytag = rte_cpu_to_be_64(devarg_prms.keytag); + priv->max_segs_num = devarg_prms.max_segs_num; + priv->umr_wqe_size = sizeof(struct mlx5_wqe_umr_bsf_seg) + + sizeof(struct mlx5_umr_wqe) + + RTE_ALIGN(priv->max_segs_num, 4) * + sizeof(struct mlx5_wqe_dseg); + rdmw_wqe_size = sizeof(struct mlx5_rdma_write_wqe) + + sizeof(struct mlx5_wqe_dseg) * + (priv->max_segs_num <= 2 ? 2 : 2 + + RTE_ALIGN(priv->max_segs_num - 2, 4)); + priv->wqe_set_size = priv->umr_wqe_size + rdmw_wqe_size; + priv->umr_wqe_stride = priv->umr_wqe_size / MLX5_SEND_WQE_BB; + priv->max_rdmar_ds = rdmw_wqe_size / sizeof(struct mlx5_wqe_dseg); /* Register callback function for global shared MR cache management. */ if (TAILQ_EMPTY(&mlx5_crypto_priv_list)) rte_mem_event_callback_register("MLX5_MEM_EVENT_CB", diff --git a/drivers/crypto/mlx5/mlx5_crypto.h b/drivers/crypto/mlx5/mlx5_crypto.h index d374d3c4e9..7a386fe76a 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.h +++ b/drivers/crypto/mlx5/mlx5_crypto.h @@ -25,12 +25,17 @@ struct mlx5_crypto_priv { struct rte_cryptodev *crypto_dev; void *uar; /* User Access Region. */ uint32_t pdn; /* Protection Domain number. */ + uint32_t max_segs_num; /* Maximum supported data segs. */ struct ibv_pd *pd; struct mlx5_hlist *dek_hlist; /* Dek hash list. */ struct rte_cryptodev_config dev_config; struct mlx5_mr_share_cache mr_scache; /* Global shared MR cache. */ struct mlx5_devx_obj *login_obj; uint64_t keytag; + uint16_t wqe_set_size; + uint16_t umr_wqe_size; + uint16_t umr_wqe_stride; + uint16_t max_rdmar_ds; }; struct mlx5_crypto_qp { @@ -54,6 +59,7 @@ struct mlx5_crypto_devarg_params { bool login_devarg; struct mlx5_devx_crypto_login_attr login_attr; uint64_t keytag; + uint32_t max_segs_num; }; int From patchwork Thu Jul 15 15:08:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95898 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C4FF8A0A0C; Thu, 15 Jul 2021 17:10:36 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 99DE941324; Thu, 15 Jul 2021 17:09:29 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2062.outbound.protection.outlook.com [40.107.93.62]) by mails.dpdk.org (Postfix) with ESMTP id 69622412F3 for ; Thu, 15 Jul 2021 17:09:22 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j0ey117DIEBd/tfha4AbS7qo+4E29dkZzHggCYjhOaPLJdRh0FWb7jsHs2TNHoK/05iVDAl4lWZo4h3ZcT0jAJ0OXK42Fyu6gVTOheTgmpf/RAGdB1dEhRcaUIEXyl/8atj1/D02sINjr/I/ccaG5s6C9/HXswfPUDmBYu0apcX8KNUGEGw060pS0iYS+W7BlCdPwzZLYgB0mtXkWxLihXlSSf9exMgDSgNqNPFShsqIvVHpqIU0Tfff4E9H4EUTTGEdrudx2gTnEH+rvkGsT27ADxblo/KbSlbEnJnGB3mx+UbROnDgtRVj3hf5TwTZBp6umu5DAhSxRO2mFdADbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wVwQ7Eqq76RE+rii2v4RFdk1WzYL7s/6A3OWdXzqUwg=; b=nBPVLLQpo1QAcRLB1ncTIlwpluEeKUereVy5sqsrPPpNm0aJ2F2g8X2YRfII9PJBaIds6kKe81HqPmqv//IRu49lsPhnq3p4mD9OYYQ7pLUKIhnfgpKeCvqr/g/EU56hofiPCocdZS1CDIUDuM+o92NE659JfgdXKLqOAhKlLZxaoJ1rCjkH48xS8oy1nNs1om7ZtmdbqnJFuq7oRPZ7nwH9izJ8lFnHoL1TmJThhYCj7KOeIqTQS0ZDdfxlGLWnYh44k0KXzlvdokuMTEqCQ7ZdReEecerHHM1D9zPQusSC5bXwA+RGgdkS/9uit4J4oawuDfvRV55YI1eqC4rIkQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wVwQ7Eqq76RE+rii2v4RFdk1WzYL7s/6A3OWdXzqUwg=; b=LnDrkqWZcqjIWrHRKRaMerKkjYQPXMUdEubTpWg01aDkH3GBIXjWtXZXwzdX21CwFIArk9EExigMdpSjgxUBIW2TEQUb4T4jcKQfU3QqDHglbhYct6DHKVTb/d8KOVsUQIAqgic6IxaGGEn4vR2L24FHm+71TBZxosp8b/Zp4NfGGjIaDHTpnWk6lrc/6BRhKz0YZgYi4zB9AhZckjWVBfTR3VarRF3bBgB9u8cm7ckIBZ3y6eYK7mu0Dj8Oi+zaiHGqgW28l+OK3NgT5wQ97ioO87U60elKLNdJBbnrFX7853ZmPcywm9fOf8g9AMboUI1QJht2tw6HkfAkkmihnQ== Received: from MW3PR06CA0016.namprd06.prod.outlook.com (2603:10b6:303:2a::21) by DM6PR12MB4140.namprd12.prod.outlook.com (2603:10b6:5:221::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Thu, 15 Jul 2021 15:09:21 +0000 Received: from CO1NAM11FT035.eop-nam11.prod.protection.outlook.com (2603:10b6:303:2a:cafe::ee) by MW3PR06CA0016.outlook.office365.com (2603:10b6:303:2a::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:21 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT035.mail.protection.outlook.com (10.13.175.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:20 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:18 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:12 +0300 Message-ID: <20210715150817.51485-12-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 032985e3-703f-4e5b-8d90-08d947a2861b X-MS-TrafficTypeDiagnostic: DM6PR12MB4140: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:295; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: o54EHBtszeAwmaEVdar6LZmjQ6bk6Rf6Y9B0gZP6m/wGKLLE35y8KoRtuYTq6QwmAHHnl9bOBkh7qloFxwow5XAEYFHBb1S3bD9BbNTK8SUZm7qcj+r80k1ylCYIwN6O32UxecbjUp6evIE6MggApohU0TWw/1AQuIdDuse2Q8nDVPokiPEPOVbXjAlzAnyulwE0EPtEQFarvVQD3lInonOCwGJQN10yU0cVmCy+3TO6FHrifKe7424t/W7XB9fhhNaJFxM96Gm9NY5TmdnewV2e/9HFbvaHz0JFANF0erpJaQL7zUzXiWBQu1uY/zvxbfEaywBJ7U+ChQPzELotVePSOE+A4Lr5zpmt4XMIURoEFhZjFXUQyYcZw+sXmBJtkgaU2yBHggoRuJZ+B9aID5dFyBBAGjqFCzF+lwFZgQiHco/H/z1j5Rv6XtLfzBsnw/+FmbYp9UuKWLKXnqQyyTZHgCtaNQ+tNj52OET2a8nNXV+lYOpZhJloLlwBWKWyKSzMaKeImCEonDqWAYvGRuNHv3HJ1U2l2X8dh70diQmD9aw4vqwIMK+U16niKzyf66joNLuocsYXH8khcfKNxlaXtRVHLDwnq6tD3fAd1yy9zDs3mrw9E1Oy0r+ZekY7yJ1wTeurhAoWT7COXd5s4F6iZYsyEyq4Q8ZgskfYvNKyZxosDIyrUHmKs7EzTBlERVKbMGnpMvk74hQwVOvMh9KOvvAovecL9k+0NjG1SyM= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(36840700001)(46966006)(86362001)(36756003)(82310400003)(36906005)(34020700004)(316002)(5660300002)(7636003)(83380400001)(1076003)(54906003)(2906002)(186003)(2616005)(16526019)(426003)(6286002)(36860700001)(336012)(55016002)(6916009)(8936002)(356005)(47076005)(478600001)(8676002)(70206006)(7696005)(6666004)(4326008)(70586007)(26005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:20.8233 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 032985e3-703f-4e5b-8d90-08d947a2861b X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT035.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4140 Subject: [dpdk-dev] [PATCH v7 11/16] crypto/mlx5: add WQE set initialization X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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: Suanming Mou Currently, HW handles the WQEs much faster than the software, Using the constant WQE set layout can initialize most of the WQE segments in advanced, and software only needs to configure very limited segments in datapath. This accelerates the software WQE organize in datapath. This commit initializes the fixed WQE set segments. Signed-off-by: Suanming Mou Signed-off-by: Matan Azrad --- drivers/crypto/mlx5/mlx5_crypto.c | 83 +++++++++++++++++++++++++++++-- drivers/crypto/mlx5/mlx5_crypto.h | 10 +++- 2 files changed, 87 insertions(+), 6 deletions(-) diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index fc251f3f4c..e5f8d96ff7 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -297,6 +297,69 @@ mlx5_crypto_qp2rts(struct mlx5_crypto_qp *qp) return 0; } +static void +mlx5_crypto_qp_init(struct mlx5_crypto_priv *priv, struct mlx5_crypto_qp *qp) +{ + uint32_t i; + + for (i = 0 ; i < qp->entries_n; i++) { + struct mlx5_wqe_cseg *cseg = RTE_PTR_ADD(qp->umem_buf, i * + priv->wqe_set_size); + struct mlx5_wqe_umr_cseg *ucseg = (struct mlx5_wqe_umr_cseg *) + (cseg + 1); + struct mlx5_wqe_umr_bsf_seg *bsf = + (struct mlx5_wqe_umr_bsf_seg *)(RTE_PTR_ADD(cseg, + priv->umr_wqe_size)) - 1; + struct mlx5_wqe_rseg *rseg; + + /* Init UMR WQE. */ + cseg->sq_ds = rte_cpu_to_be_32((qp->qp_obj->id << 8) | + (priv->umr_wqe_size / MLX5_WSEG_SIZE)); + cseg->flags = RTE_BE32(MLX5_COMP_ONLY_FIRST_ERR << + MLX5_COMP_MODE_OFFSET); + cseg->misc = rte_cpu_to_be_32(qp->mkey[i]->id); + ucseg->if_cf_toe_cq_res = RTE_BE32(1u << MLX5_UMRC_IF_OFFSET); + ucseg->mkey_mask = RTE_BE64(1u << 0); /* Mkey length bit. */ + ucseg->ko_to_bs = rte_cpu_to_be_32 + ((RTE_ALIGN(priv->max_segs_num, 4u) << + MLX5_UMRC_KO_OFFSET) | (4 << MLX5_UMRC_TO_BS_OFFSET)); + bsf->keytag = priv->keytag; + /* Init RDMA WRITE WQE. */ + cseg = RTE_PTR_ADD(cseg, priv->umr_wqe_size); + cseg->flags = RTE_BE32((MLX5_COMP_ALWAYS << + MLX5_COMP_MODE_OFFSET) | + MLX5_WQE_CTRL_INITIATOR_SMALL_FENCE); + rseg = (struct mlx5_wqe_rseg *)(cseg + 1); + rseg->rkey = rte_cpu_to_be_32(qp->mkey[i]->id); + } +} + +static int +mlx5_crypto_indirect_mkeys_prepare(struct mlx5_crypto_priv *priv, + struct mlx5_crypto_qp *qp) +{ + struct mlx5_umr_wqe *umr; + uint32_t i; + struct mlx5_devx_mkey_attr attr = { + .pd = priv->pdn, + .umr_en = 1, + .crypto_en = 1, + .set_remote_rw = 1, + .klm_num = RTE_ALIGN(priv->max_segs_num, 4), + }; + + for (umr = (struct mlx5_umr_wqe *)qp->umem_buf, i = 0; + i < qp->entries_n; i++, umr = RTE_PTR_ADD(umr, priv->wqe_set_size)) { + attr.klm_array = (struct mlx5_klm *)&umr->kseg[0]; + qp->mkey[i] = mlx5_devx_cmd_mkey_create(priv->ctx, &attr); + if (!qp->mkey[i]) { + DRV_LOG(ERR, "Failed to allocate indirect mkey."); + return -1; + } + } + return 0; +} + static int mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id, const struct rte_cryptodev_qp_conf *qp_conf, @@ -307,7 +370,7 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id, struct mlx5_crypto_qp *qp; uint16_t log_nb_desc = rte_log2_u32(qp_conf->nb_descriptors); uint32_t umem_size = RTE_BIT32(log_nb_desc) * - MLX5_CRYPTO_WQE_SET_SIZE + + priv->wqe_set_size + sizeof(*qp->db_rec) * 2; uint32_t alloc_size = sizeof(*qp); struct mlx5_devx_cq_attr cq_attr = { @@ -317,7 +380,9 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id, if (dev->data->queue_pairs[qp_id] != NULL) mlx5_crypto_queue_pair_release(dev, qp_id); alloc_size = RTE_ALIGN(alloc_size, RTE_CACHE_LINE_SIZE); - alloc_size += sizeof(struct rte_crypto_op *) * RTE_BIT32(log_nb_desc); + alloc_size += (sizeof(struct rte_crypto_op *) + + sizeof(struct mlx5_devx_obj *)) * + RTE_BIT32(log_nb_desc); qp = rte_zmalloc_socket(__func__, alloc_size, RTE_CACHE_LINE_SIZE, socket_id); if (qp == NULL) { @@ -362,8 +427,7 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id, attr.wq_umem_id = qp->umem_obj->umem_id; attr.wq_umem_offset = 0; attr.dbr_umem_id = qp->umem_obj->umem_id; - attr.dbr_address = RTE_BIT64(log_nb_desc) * - MLX5_CRYPTO_WQE_SET_SIZE; + attr.dbr_address = RTE_BIT64(log_nb_desc) * priv->wqe_set_size; qp->qp_obj = mlx5_devx_cmd_create_qp(priv->ctx, &attr); if (qp->qp_obj == NULL) { DRV_LOG(ERR, "Failed to create QP(%u).", rte_errno); @@ -372,8 +436,17 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id, qp->db_rec = RTE_PTR_ADD(qp->umem_buf, (uintptr_t)attr.dbr_address); if (mlx5_crypto_qp2rts(qp)) goto error; - qp->ops = (struct rte_crypto_op **)RTE_ALIGN((uintptr_t)(qp + 1), + qp->mkey = (struct mlx5_devx_obj **)RTE_ALIGN((uintptr_t)(qp + 1), RTE_CACHE_LINE_SIZE); + qp->ops = (struct rte_crypto_op **)(qp->mkey + RTE_BIT32(log_nb_desc)); + qp->entries_n = 1 << log_nb_desc; + if (mlx5_crypto_indirect_mkeys_prepare(priv, qp)) { + DRV_LOG(ERR, "Cannot allocate indirect memory regions."); + rte_errno = ENOMEM; + goto error; + } + mlx5_crypto_qp_init(priv, qp); + qp->priv = priv; dev->data->queue_pairs[qp_id] = qp; return 0; error: diff --git a/drivers/crypto/mlx5/mlx5_crypto.h b/drivers/crypto/mlx5/mlx5_crypto.h index 7a386fe76a..d9b1ff8e99 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.h +++ b/drivers/crypto/mlx5/mlx5_crypto.h @@ -16,7 +16,6 @@ #define MLX5_CRYPTO_DEK_HTABLE_SZ (1 << 11) #define MLX5_CRYPTO_KEY_LENGTH 80 -#define MLX5_CRYPTO_WQE_SET_SIZE 1024 struct mlx5_crypto_priv { TAILQ_ENTRY(mlx5_crypto_priv) next; @@ -24,6 +23,7 @@ struct mlx5_crypto_priv { struct rte_pci_device *pci_dev; struct rte_cryptodev *crypto_dev; void *uar; /* User Access Region. */ + volatile uint64_t *uar_addr; uint32_t pdn; /* Protection Domain number. */ uint32_t max_segs_num; /* Maximum supported data segs. */ struct ibv_pd *pd; @@ -39,13 +39,21 @@ struct mlx5_crypto_priv { }; struct mlx5_crypto_qp { + struct mlx5_crypto_priv *priv; struct mlx5_devx_cq cq_obj; struct mlx5_devx_obj *qp_obj; + struct rte_cryptodev_stats stats; struct mlx5dv_devx_umem *umem_obj; void *umem_buf; volatile uint32_t *db_rec; struct rte_crypto_op **ops; + struct mlx5_devx_obj **mkey; /* WQE's indirect mekys. */ struct mlx5_mr_ctrl mr_ctrl; + uint8_t *wqe; + uint16_t entries_n; + uint16_t pi; + uint16_t ci; + uint16_t db_pi; }; struct mlx5_crypto_dek { From patchwork Thu Jul 15 15:08:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95899 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8EEFCA0A0C; Thu, 15 Jul 2021 17:10:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 66F4F41278; Thu, 15 Jul 2021 17:09:35 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2055.outbound.protection.outlook.com [40.107.223.55]) by mails.dpdk.org (Postfix) with ESMTP id D485141300 for ; Thu, 15 Jul 2021 17:09:25 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IsXu1rsEfy+B+W1OPGKGXQo7oM4Enl3q2MZpkqFb6ddj+J+3ACwqbNZStF3q+BiNtiOB7q7jVTKCpqdalExpumPlDcdFecgIBk23jbqQRTWe7n6IDyi0zCEubZ6i+fYXtrbH8Y1yS8wEBlW9dxel+SqYc/4LvoxjkkBP6sJmiimYeCRJmtBMYf/jxit/YlxlJ1QrnPqT4ghENOl/ov2meR4EvIDkXbjAEWkrRsL/VelLIQvUBdG6A8/+7yoVIofeqxHU/tCd7RJfLt4Qf8LaVurYhSxKe0FTuiBBC/14S3sMFuzD4uYwoDZOq9lyx3tCyjxwwlmfg9AJ5PYnyM6wEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S6dGTk2rSEm4EVTpfADNvh0e8eNklBib34M21ZVJkCk=; b=f4lOLaDP4Q4xN6/cGbUFFOuDzj4d/qDXkCj/8o70UmZg8FHCqFHvoO9YUBonN62QUL4/j0yX+VgPTjS8w5ly9Ph/McIBtVG7xpI8U2IDV8qim6Rj3u9Fm2zH+5eFR7skiGNnyQCwyJUj+MNK/YqHB9ztlAhBTVyEfTKk5MzkbtikH05VhuFeEgBtuoWasRqFoyAT+ia3D6XF3L+p8MpAamlZs9q72Qp0m7BC9fEK2iOzlZkeYuk1Oigd4jyEhojxzCdlWAgXsLmlxTU31x0qb83W5liyuKSwkRIPVHTh7V8LZBjzZYibLGktVzA4sUGuilTos2JMBg6EJRchOiiEJw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S6dGTk2rSEm4EVTpfADNvh0e8eNklBib34M21ZVJkCk=; b=UE3j/11nBwgEhJ6VKR2DuRHALI54GuAHQ9T55SP32L4hIXAu4U4cCH1SnnfxuPOV010UKOmwWce+KjFL11otwwC3kB02G9G7EkzLAikdsFX6PcbyvfD9GyurgDw5HOzhR+6T32XjF7Xz/01kiRWjMoLZyGuJ2FSJAcqZBZ2uGu3hky85PU/4ku6u5DdDEzto2K9MAoJxu8qxkszqQSN5OMa5ig0gkgTmsyqp3qb8pEdSNlv0Q9ewjpn7R9nKVrR8DS7wEa0TdZNGW3tjOItBZ69Fw1Fx8vhFTKo4LxvxTAV0pdKcwj4tea6ntLuc97CguWhz8+YnlwQfw1y665cwiA== Received: from MW4PR04CA0079.namprd04.prod.outlook.com (2603:10b6:303:6b::24) by BN6PR12MB1233.namprd12.prod.outlook.com (2603:10b6:404:1c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul 2021 15:09:23 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:6b:cafe::9d) by MW4PR04CA0079.outlook.office365.com (2603:10b6:303:6b::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23 via Frontend Transport; Thu, 15 Jul 2021 15:09:23 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT015.mail.protection.outlook.com (10.13.175.130) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:22 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:20 +0000 From: Shiri Kuzin To: CC: , , , , Michael Baum Date: Thu, 15 Jul 2021 18:08:13 +0300 Message-ID: <20210715150817.51485-13-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 08a6430e-21f3-4284-7972-08d947a28748 X-MS-TrafficTypeDiagnostic: BN6PR12MB1233: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:316; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JPWnTjg4/ubX1V3+mk0BdbHlnTZliaNm9b0g0JPfeuHizAYo/Rb6JkaUJqL0IAKPVkDJ+5m4HXsK7a7KQSqnUjXKJa/IT8PfvX/9zXItvfIjSrJa21k4Gc6WvX6NhbBvh/QvYH5Kvt/5PcWKcxR++nzJG5gd5OX1HkzNlkPrCUAzvc9kZvNT8UUx4RKrT/Jt3av2EdaKFJKnOkWPCi0Q0etjPPomTRsGxGC/KpCMIDTO4QifuI5yXm9Ap8gtt+QSc8lv95SDpWNDheRk5pCBamCGZgJnQSxWdjZBa6DTT3rbJFTtwx1mjGhereKurfft1vb3VkIC9YBvX4G2G0QMEC3X7RoOSPu8IYaJ/HKgpsuB4JfgnEAwAzoi6XYl4WYoo/dVZiVaWBS5Ne2W02O056NRZm+b7itcdIc7F+aGCkwmASzGTGS/w8f1yCzkTfonPrlA3hgLFJSzkWPEKBCeXnJrormwcSj36UAjUGN7thRxL/WirBdZuI3sRGZ9c6/UihC+9x465h/coP/fNq97nKwqzw5UaQA0dzrZauIHSSvDUMjWOLZ/LpBVBXIYDu17O8xrBa7Pe+Q6+Gaav9oganrvgqVBNZIXPb4fbefBJyU0FNQVIlwDCOSWgDWhtLGfOOZV1Fxx35RN49syEUfcSHFl7EUn+4bnlxGAAxQWUQ/ZL4FfTBEes0pFzd6geqqeg0dulgY/6TXKgBq/3HRZ5muvaY1PP/InHD93n/aVQ3g= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(39860400002)(396003)(136003)(376002)(346002)(36840700001)(46966006)(316002)(36906005)(2616005)(70586007)(55016002)(336012)(1076003)(426003)(2906002)(30864003)(70206006)(86362001)(8936002)(8676002)(4326008)(6286002)(107886003)(54906003)(34020700004)(82310400003)(83380400001)(26005)(7696005)(36756003)(47076005)(5660300002)(6666004)(356005)(7636003)(478600001)(186003)(16526019)(6916009)(36860700001)(82740400003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:22.7464 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 08a6430e-21f3-4284-7972-08d947a28748 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT015.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1233 Subject: [dpdk-dev] [PATCH v7 12/16] crypto/mlx5: add enqueue and dequeue operations X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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: Suanming Mou The crypto operations are done with the WQE set which contains one UMR WQE and one rdma write WQE. Most segments of the WQE set are initialized properly during queue setup, only limited segments are initialized according to the crypto detail in the datapath process. This commit adds the enquue and dequeue operations and updates the WQE set segments accordingly. Signed-off-by: Suanming Mou Signed-off-by: Matan Azrad Signed-off-by: Michael Baum --- doc/guides/cryptodevs/features/mlx5.ini | 5 + drivers/crypto/mlx5/mlx5_crypto.c | 286 +++++++++++++++++++++++- drivers/crypto/mlx5/mlx5_crypto.h | 3 + 3 files changed, 290 insertions(+), 4 deletions(-) diff --git a/doc/guides/cryptodevs/features/mlx5.ini b/doc/guides/cryptodevs/features/mlx5.ini index bd757b5211..a89526add0 100644 --- a/doc/guides/cryptodevs/features/mlx5.ini +++ b/doc/guides/cryptodevs/features/mlx5.ini @@ -6,6 +6,11 @@ [Features] Symmetric crypto = Y HW Accelerated = Y +In Place SGL = Y +OOP SGL In SGL Out = Y +OOP SGL In LB Out = Y +OOP LB In SGL Out = Y +OOP LB In LB Out = Y Cipher multiple data units = Y Cipher wrapped key = Y diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index e5f8d96ff7..b467739a3c 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -25,6 +25,10 @@ #define MLX5_CRYPTO_FEATURE_FLAGS \ (RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO | RTE_CRYPTODEV_FF_HW_ACCELERATED | \ + RTE_CRYPTODEV_FF_IN_PLACE_SGL | RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT | \ + RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT | \ + RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT | \ + RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT | \ RTE_CRYPTODEV_FF_CIPHER_WRAPPED_KEY | \ RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS) @@ -297,6 +301,279 @@ mlx5_crypto_qp2rts(struct mlx5_crypto_qp *qp) return 0; } +static __rte_noinline uint32_t +mlx5_crypto_get_block_size(struct rte_crypto_op *op) +{ + uint32_t bl = op->sym->cipher.data.length; + + switch (bl) { + case (1 << 20): + return RTE_BE32(MLX5_BLOCK_SIZE_1MB << MLX5_BLOCK_SIZE_OFFSET); + case (1 << 12): + return RTE_BE32(MLX5_BLOCK_SIZE_4096B << + MLX5_BLOCK_SIZE_OFFSET); + case (1 << 9): + return RTE_BE32(MLX5_BLOCK_SIZE_512B << MLX5_BLOCK_SIZE_OFFSET); + default: + DRV_LOG(ERR, "Unknown block size: %u.", bl); + return UINT32_MAX; + } +} + +/** + * Query LKey from a packet buffer for QP. If not found, add the mempool. + * + * @param priv + * Pointer to the priv object. + * @param addr + * Search key. + * @param mr_ctrl + * Pointer to per-queue MR control structure. + * @param ol_flags + * Mbuf offload features. + * + * @return + * Searched LKey on success, UINT32_MAX on no match. + */ +static __rte_always_inline uint32_t +mlx5_crypto_addr2mr(struct mlx5_crypto_priv *priv, uintptr_t addr, + struct mlx5_mr_ctrl *mr_ctrl, uint64_t ol_flags) +{ + uint32_t lkey; + + /* Check generation bit to see if there's any change on existing MRs. */ + if (unlikely(*mr_ctrl->dev_gen_ptr != mr_ctrl->cur_gen)) + mlx5_mr_flush_local_cache(mr_ctrl); + /* Linear search on MR cache array. */ + lkey = mlx5_mr_lookup_lkey(mr_ctrl->cache, &mr_ctrl->mru, + MLX5_MR_CACHE_N, addr); + if (likely(lkey != UINT32_MAX)) + return lkey; + /* Take slower bottom-half on miss. */ + return mlx5_mr_addr2mr_bh(priv->pd, 0, &priv->mr_scache, mr_ctrl, addr, + !!(ol_flags & EXT_ATTACHED_MBUF)); +} + +static __rte_always_inline uint32_t +mlx5_crypto_klm_set(struct mlx5_crypto_priv *priv, struct mlx5_crypto_qp *qp, + struct rte_mbuf *mbuf, struct mlx5_wqe_dseg *klm, + uint32_t offset, uint32_t *remain) +{ + uint32_t data_len = (rte_pktmbuf_data_len(mbuf) - offset); + uintptr_t addr = rte_pktmbuf_mtod_offset(mbuf, uintptr_t, offset); + + if (data_len > *remain) + data_len = *remain; + *remain -= data_len; + klm->bcount = rte_cpu_to_be_32(data_len); + klm->pbuf = rte_cpu_to_be_64(addr); + klm->lkey = mlx5_crypto_addr2mr(priv, addr, &qp->mr_ctrl, + mbuf->ol_flags); + return klm->lkey; + +} + +static __rte_always_inline uint32_t +mlx5_crypto_klms_set(struct mlx5_crypto_priv *priv, struct mlx5_crypto_qp *qp, + struct rte_crypto_op *op, struct rte_mbuf *mbuf, + struct mlx5_wqe_dseg *klm) +{ + uint32_t remain_len = op->sym->cipher.data.length; + uint32_t nb_segs = mbuf->nb_segs; + uint32_t klm_n = 1u; + + /* First mbuf needs to take the cipher offset. */ + if (unlikely(mlx5_crypto_klm_set(priv, qp, mbuf, klm, + op->sym->cipher.data.offset, &remain_len) == UINT32_MAX)) { + op->status = RTE_CRYPTO_OP_STATUS_ERROR; + return 0; + } + while (remain_len) { + nb_segs--; + mbuf = mbuf->next; + if (unlikely(mbuf == NULL || nb_segs == 0)) { + op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS; + return 0; + } + if (unlikely(mlx5_crypto_klm_set(priv, qp, mbuf, ++klm, 0, + &remain_len) == UINT32_MAX)) { + op->status = RTE_CRYPTO_OP_STATUS_ERROR; + return 0; + } + klm_n++; + } + return klm_n; +} + +static __rte_always_inline int +mlx5_crypto_wqe_set(struct mlx5_crypto_priv *priv, + struct mlx5_crypto_qp *qp, + struct rte_crypto_op *op, + struct mlx5_umr_wqe *umr) +{ + struct mlx5_crypto_session *sess = get_sym_session_private_data + (op->sym->session, mlx5_crypto_driver_id); + struct mlx5_wqe_cseg *cseg = &umr->ctr; + struct mlx5_wqe_mkey_cseg *mkc = &umr->mkc; + struct mlx5_wqe_dseg *klms = &umr->kseg[0]; + struct mlx5_wqe_umr_bsf_seg *bsf = ((struct mlx5_wqe_umr_bsf_seg *) + RTE_PTR_ADD(umr, priv->umr_wqe_size)) - 1; + uint32_t ds; + bool ipl = op->sym->m_dst == NULL || op->sym->m_dst == op->sym->m_src; + /* Set UMR WQE. */ + uint32_t klm_n = mlx5_crypto_klms_set(priv, qp, op, + ipl ? op->sym->m_src : op->sym->m_dst, klms); + + if (unlikely(klm_n == 0)) + return 0; + bsf->bs_bpt_eo_es = sess->bs_bpt_eo_es; + if (unlikely(!sess->bsp_res)) { + bsf->bsp_res = mlx5_crypto_get_block_size(op); + if (unlikely(bsf->bsp_res == UINT32_MAX)) { + op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS; + return 0; + } + } else { + bsf->bsp_res = sess->bsp_res; + } + bsf->raw_data_size = rte_cpu_to_be_32(op->sym->cipher.data.length); + memcpy(bsf->xts_initial_tweak, + rte_crypto_op_ctod_offset(op, uint8_t *, sess->iv_offset), 16); + bsf->res_dp = sess->dek_id; + mkc->len = rte_cpu_to_be_64(op->sym->cipher.data.length); + cseg->opcode = rte_cpu_to_be_32((qp->db_pi << 8) | MLX5_OPCODE_UMR); + qp->db_pi += priv->umr_wqe_stride; + /* Set RDMA_WRITE WQE. */ + cseg = RTE_PTR_ADD(cseg, priv->umr_wqe_size); + klms = RTE_PTR_ADD(cseg, sizeof(struct mlx5_rdma_write_wqe)); + if (!ipl) { + klm_n = mlx5_crypto_klms_set(priv, qp, op, op->sym->m_src, + klms); + if (unlikely(klm_n == 0)) + return 0; + } else { + memcpy(klms, &umr->kseg[0], sizeof(*klms) * klm_n); + } + ds = 2 + klm_n; + cseg->sq_ds = rte_cpu_to_be_32((qp->qp_obj->id << 8) | ds); + cseg->opcode = rte_cpu_to_be_32((qp->db_pi << 8) | + MLX5_OPCODE_RDMA_WRITE); + ds = RTE_ALIGN(ds, 4); + qp->db_pi += ds >> 2; + /* Set NOP WQE if needed. */ + if (priv->max_rdmar_ds > ds) { + cseg += ds; + ds = priv->max_rdmar_ds - ds; + cseg->sq_ds = rte_cpu_to_be_32((qp->qp_obj->id << 8) | ds); + cseg->opcode = rte_cpu_to_be_32((qp->db_pi << 8) | + MLX5_OPCODE_NOP); + qp->db_pi += ds >> 2; /* Here, DS is 4 aligned for sure. */ + } + qp->wqe = (uint8_t *)cseg; + return 1; +} + +static __rte_always_inline void +mlx5_crypto_uar_write(uint64_t val, struct mlx5_crypto_priv *priv) +{ +#ifdef RTE_ARCH_64 + *priv->uar_addr = val; +#else /* !RTE_ARCH_64 */ + rte_spinlock_lock(&priv->uar32_sl); + *(volatile uint32_t *)priv->uar_addr = val; + rte_io_wmb(); + *((volatile uint32_t *)priv->uar_addr + 1) = val >> 32; + rte_spinlock_unlock(&priv->uar32_sl); +#endif +} + +static uint16_t +mlx5_crypto_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops, + uint16_t nb_ops) +{ + struct mlx5_crypto_qp *qp = queue_pair; + struct mlx5_crypto_priv *priv = qp->priv; + struct mlx5_umr_wqe *umr; + struct rte_crypto_op *op; + uint16_t mask = qp->entries_n - 1; + uint16_t remain = qp->entries_n - (qp->pi - qp->ci); + + if (remain < nb_ops) + nb_ops = remain; + else + remain = nb_ops; + if (unlikely(remain == 0)) + return 0; + do { + op = *ops++; + umr = RTE_PTR_ADD(qp->umem_buf, priv->wqe_set_size * qp->pi); + if (unlikely(mlx5_crypto_wqe_set(priv, qp, op, umr) == 0)) { + if (remain != nb_ops) + break; + return 0; + } + qp->ops[qp->pi] = op; + qp->pi = (qp->pi + 1) & mask; + } while (--remain); + rte_io_wmb(); + qp->db_rec[MLX5_SND_DBR] = rte_cpu_to_be_32(qp->db_pi); + rte_wmb(); + mlx5_crypto_uar_write(*(volatile uint64_t *)qp->wqe, qp->priv); + rte_wmb(); + return nb_ops; +} + +static __rte_noinline void +mlx5_crypto_cqe_err_handle(struct mlx5_crypto_qp *qp, struct rte_crypto_op *op) +{ + const uint32_t idx = qp->ci & (qp->entries_n - 1); + volatile struct mlx5_err_cqe *cqe = (volatile struct mlx5_err_cqe *) + &qp->cq_obj.cqes[idx]; + + op->status = RTE_CRYPTO_OP_STATUS_ERROR; + DRV_LOG(ERR, "CQE ERR:%x.\n", rte_be_to_cpu_32(cqe->syndrome)); +} + +static uint16_t +mlx5_crypto_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops, + uint16_t nb_ops) +{ + struct mlx5_crypto_qp *qp = queue_pair; + volatile struct mlx5_cqe *restrict cqe; + struct rte_crypto_op *restrict op; + const unsigned int cq_size = qp->entries_n; + const unsigned int mask = cq_size - 1; + uint32_t idx; + uint32_t next_idx = qp->ci & mask; + const uint16_t max = RTE_MIN((uint16_t)(qp->pi - qp->ci), nb_ops); + uint16_t i = 0; + int ret; + + if (unlikely(max == 0)) + return 0; + do { + idx = next_idx; + next_idx = (qp->ci + 1) & mask; + op = qp->ops[idx]; + cqe = &qp->cq_obj.cqes[idx]; + ret = check_cqe(cqe, cq_size, qp->ci); + rte_io_rmb(); + if (unlikely(ret != MLX5_CQE_STATUS_SW_OWN)) { + if (unlikely(ret != MLX5_CQE_STATUS_HW_OWN)) + mlx5_crypto_cqe_err_handle(qp, op); + break; + } + op->status = RTE_CRYPTO_OP_STATUS_SUCCESS; + ops[i++] = op; + qp->ci++; + } while (i < max); + if (likely(i != 0)) { + rte_io_wmb(); + qp->cq_obj.db_rec[0] = rte_cpu_to_be_32(qp->ci); + } + return i; +} + static void mlx5_crypto_qp_init(struct mlx5_crypto_priv *priv, struct mlx5_crypto_qp *qp) { @@ -521,8 +798,9 @@ mlx5_crypto_hw_global_prepare(struct mlx5_crypto_priv *priv) if (mlx5_crypto_pd_create(priv) != 0) return -1; priv->uar = mlx5_devx_alloc_uar(priv->ctx, -1); - if (priv->uar == NULL || mlx5_os_get_devx_uar_reg_addr(priv->uar) == - NULL) { + if (priv->uar) + priv->uar_addr = mlx5_os_get_devx_uar_reg_addr(priv->uar); + if (priv->uar == NULL || priv->uar_addr == NULL) { rte_errno = errno; claim_zero(mlx5_glue->dealloc_pd(priv->pd)); DRV_LOG(ERR, "Failed to allocate UAR."); @@ -752,8 +1030,8 @@ mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv, DRV_LOG(INFO, "Crypto device %s was created successfully.", ibv->name); crypto_dev->dev_ops = &mlx5_crypto_ops; - crypto_dev->dequeue_burst = NULL; - crypto_dev->enqueue_burst = NULL; + crypto_dev->dequeue_burst = mlx5_crypto_dequeue_burst; + crypto_dev->enqueue_burst = mlx5_crypto_enqueue_burst; crypto_dev->feature_flags = MLX5_CRYPTO_FEATURE_FLAGS; crypto_dev->driver_id = mlx5_crypto_driver_id; priv = crypto_dev->data->dev_private; diff --git a/drivers/crypto/mlx5/mlx5_crypto.h b/drivers/crypto/mlx5/mlx5_crypto.h index d9b1ff8e99..1350513b9e 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.h +++ b/drivers/crypto/mlx5/mlx5_crypto.h @@ -36,6 +36,9 @@ struct mlx5_crypto_priv { uint16_t umr_wqe_size; uint16_t umr_wqe_stride; uint16_t max_rdmar_ds; +#ifndef RTE_ARCH_64 + rte_spinlock_t uar32_sl; +#endif /* RTE_ARCH_64 */ }; struct mlx5_crypto_qp { From patchwork Thu Jul 15 15:08:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95900 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 79189A0A0C; Thu, 15 Jul 2021 17:10:53 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8214841331; Thu, 15 Jul 2021 17:09:36 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2070.outbound.protection.outlook.com [40.107.94.70]) by mails.dpdk.org (Postfix) with ESMTP id B3B3241300 for ; Thu, 15 Jul 2021 17:09:26 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=esKEcHeXmZob0+aGrxjj7a1qQ+3PlE/hXrqfib3WlT1ICRdnEMwhywYCg8B8QyzpSK3aqTf8YhMMa/98CFTbDe84QLxnOE41erR7ywY0VsTer+SvYP3SJJjl99hkeXK1bdLJFQk8hEwW3HEM7AMSvRQxmgxE4TCDFWrp6dDMJB+QdChHM6N24ZzJCKO4UXST+0rc4yTyvwWzJlSiPbNcCXkcrBFzYkNAT1HEjRK40PoTc13FbgTlUo875Q/4MGnBhceEm0qaHZ7a0owQiBd2P4D10+fh3+LLOBz5GOZATFInJDdQKjAcTcxgfHqd6YY0gGRS3txj2lC7EEm3rvqOZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6B4z6RaT1FojXWmhe4rY3B30tW43xUwN3dCZ8+rmvOY=; b=GGAXDB1ou2HvMb/O600Qcp+i5K+93mv4T9AMR7I6zv5wn5T9xYri2l/vE8UmEcIbrmAjp9DAJdCMnt39fmNcp/hfsiff980nrv81wVMnIJDaKVByWL3YMb1205hHiEUkILHz6x9IOLYuzINs20E9uMBQPHMifQEf53Hl3E1ItFWU5YSXtSndJ/Y4ysykFyex9kG5ziUea7mJEK/kMMCTaHdT3T8ffC8mIGq6At20E1s90YHciakg/2FkBEAZRN5f5vjxTSKVhQy0HjMHDSQ/3zvZ1W6FDSbPN443mQA87fy/c/Qcj74OfDn+vkWYRZe2MCVAm87j1PKTkctE6IbeWw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6B4z6RaT1FojXWmhe4rY3B30tW43xUwN3dCZ8+rmvOY=; b=as7eUUQ7dnZIBE93WWMeI3F+l8G5/jm0hvvDtepAaBUM1ikMCCJO8HwXdasFL7jBCJZ+ORqQjNv+FNh9N+w1qLycpKH0UDpn/lZsg8w6IRJ3QQX2Fj9VrzRytiPUdoBpIBV06a8JvQ7JDUythH9O/4QJxBOYeleiMu3YX7R+IxRjWlAROIi0UhnAxQoFBsnuC+g5/Xgo59TYjC7KxuyNzuZs34suRpRFEvY19QPJ9NrBJhN458ZBzb2yt6xgG8zgKZDlBQ+5fXnYQs1RyGSWHmsn3+ABnVWY7vS9dC9JAcSlnNdrrtWR0dni46EI/uzbfToHA7DbGZCIAdYA6reTVA== Received: from MW4PR04CA0065.namprd04.prod.outlook.com (2603:10b6:303:6b::10) by DM4PR12MB5327.namprd12.prod.outlook.com (2603:10b6:5:39e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Thu, 15 Jul 2021 15:09:25 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:6b:cafe::d0) by MW4PR04CA0065.outlook.office365.com (2603:10b6:303:6b::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:25 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT015.mail.protection.outlook.com (10.13.175.130) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:25 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:22 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:14 +0300 Message-ID: <20210715150817.51485-14-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4a780d38-ee86-4084-94ba-08d947a288ac X-MS-TrafficTypeDiagnostic: DM4PR12MB5327: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:158; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SgvZ3OFRCWmJQPI1AcW3NuuN6jRsT3V52ZUzFMpODF81pySnfTZF8O6Y0GxXvjejMhQOjveJXxUu5YsVQeeePNiEBn/l5LZqKYbbNeHP8//IoQ7M/QYKsa1aN89EFYQZYNOpwANlQ7o3O9HkdlsfwZhzNvkqU8t7XY78DFxpiTJ+3q2EVUqGDU8U3QaDaNHEoOLSxUAbCcoBbF+NfGsaZCRFVlUtajt+CsR/KTBo1DBP3iefRbgz9HbYK5VELz3zALrzXvHLW/+vCMdGleuXXcYL5k40g0Kc6vnQj+17jHcxLMMVuUMX8dsZzW/s4zT/fB9EZpW58RqduWjTWly75fYEGOSFiAKVq17EbFlB0IZLKmMm+4aZ7CIhZm3LraQUX7Ly4l2T/RaTCwGeyiuw5sziOVZ6wVVZ506F4sUl7pQKlreoQ/36FUiwq48CJSJb/LO/CPq/Xruce0p0mW899UZqufXcSuClLGFNWZOF4pF5vlHW6LZbguSSU7YDjuP1P1gjnCbMkHMXjoI4sCy4BmNOjlz0q54gTHFen+qD4H1u2kTWpDW38rmVCJk1g0XifEfFkzRZG2/TstruCX2lNh3Lblk7PeHiQ7soh/yfeywVYZTuaBMdgVTEOaLthyHP4GaLE4XTFzsQw/8RBkjtnJvRKAZWygIWgygZXr7H4Km2MuHqwq1TTvXQw0PngDJVorUxBU+bC8xJ6H1b3vo0pCPXt+cj7QqSdAAMYLzDUqI= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(346002)(376002)(396003)(136003)(39850400004)(46966006)(36840700001)(4326008)(316002)(82740400003)(186003)(36756003)(6286002)(8936002)(16526019)(36906005)(70206006)(26005)(70586007)(478600001)(54906003)(2616005)(2906002)(1076003)(356005)(36860700001)(34020700004)(47076005)(336012)(82310400003)(7636003)(6916009)(8676002)(426003)(86362001)(55016002)(7696005)(6666004)(5660300002)(83380400001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:25.1942 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4a780d38-ee86-4084-94ba-08d947a288ac X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT015.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5327 Subject: [dpdk-dev] [PATCH v7 13/16] crypto/mlx5: add statistic get and reset operations X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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: Suanming Mou This commit adds mlx5 crypto statistic get and reset operations. Signed-off-by: Suanming Mou Signed-off-by: Matan Azrad --- drivers/crypto/mlx5/mlx5_crypto.c | 40 ++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c index b467739a3c..0ecca32cce 100644 --- a/drivers/crypto/mlx5/mlx5_crypto.c +++ b/drivers/crypto/mlx5/mlx5_crypto.c @@ -508,13 +508,17 @@ mlx5_crypto_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops, op = *ops++; umr = RTE_PTR_ADD(qp->umem_buf, priv->wqe_set_size * qp->pi); if (unlikely(mlx5_crypto_wqe_set(priv, qp, op, umr) == 0)) { - if (remain != nb_ops) + qp->stats.enqueue_err_count++; + if (remain != nb_ops) { + qp->stats.enqueued_count -= remain; break; + } return 0; } qp->ops[qp->pi] = op; qp->pi = (qp->pi + 1) & mask; } while (--remain); + qp->stats.enqueued_count += nb_ops; rte_io_wmb(); qp->db_rec[MLX5_SND_DBR] = rte_cpu_to_be_32(qp->db_pi); rte_wmb(); @@ -531,6 +535,7 @@ mlx5_crypto_cqe_err_handle(struct mlx5_crypto_qp *qp, struct rte_crypto_op *op) &qp->cq_obj.cqes[idx]; op->status = RTE_CRYPTO_OP_STATUS_ERROR; + qp->stats.dequeue_err_count++; DRV_LOG(ERR, "CQE ERR:%x.\n", rte_be_to_cpu_32(cqe->syndrome)); } @@ -570,6 +575,7 @@ mlx5_crypto_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops, if (likely(i != 0)) { rte_io_wmb(); qp->cq_obj.db_rec[0] = rte_cpu_to_be_32(qp->ci); + qp->stats.dequeued_count += i; } return i; } @@ -731,14 +737,42 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id, return -1; } +static void +mlx5_crypto_stats_get(struct rte_cryptodev *dev, + struct rte_cryptodev_stats *stats) +{ + int qp_id; + + for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { + struct mlx5_crypto_qp *qp = dev->data->queue_pairs[qp_id]; + + stats->enqueued_count += qp->stats.enqueued_count; + stats->dequeued_count += qp->stats.dequeued_count; + stats->enqueue_err_count += qp->stats.enqueue_err_count; + stats->dequeue_err_count += qp->stats.dequeue_err_count; + } +} + +static void +mlx5_crypto_stats_reset(struct rte_cryptodev *dev) +{ + int qp_id; + + for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { + struct mlx5_crypto_qp *qp = dev->data->queue_pairs[qp_id]; + + memset(&qp->stats, 0, sizeof(qp->stats)); + } +} + static struct rte_cryptodev_ops mlx5_crypto_ops = { .dev_configure = mlx5_crypto_dev_configure, .dev_start = mlx5_crypto_dev_start, .dev_stop = mlx5_crypto_dev_stop, .dev_close = mlx5_crypto_dev_close, .dev_infos_get = mlx5_crypto_dev_infos_get, - .stats_get = NULL, - .stats_reset = NULL, + .stats_get = mlx5_crypto_stats_get, + .stats_reset = mlx5_crypto_stats_reset, .queue_pair_setup = mlx5_crypto_queue_pair_setup, .queue_pair_release = mlx5_crypto_queue_pair_release, .sym_session_get_size = mlx5_crypto_sym_session_get_size, From patchwork Thu Jul 15 15:08:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95901 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id EBD89A0A0C; Thu, 15 Jul 2021 17:10:59 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BA0884133C; Thu, 15 Jul 2021 17:09:37 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2046.outbound.protection.outlook.com [40.107.94.46]) by mails.dpdk.org (Postfix) with ESMTP id B0F4E4131B for ; Thu, 15 Jul 2021 17:09:28 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nF4pMq7JndWsb1kh73+dIdk3pyIyPgClQW3LkEGMWret1wBhIiQiBT7bZA7r+7E0GB94+QZ9eGN9vrBe9WNBvXeao6x267M75FhvyEAaCUwzlVv+vljjB7YiiX6nPHSdzhvfPC4bHLLKXoIa0AyHT90VSfqojapT3blaKHx3qHb79EFvTWqCNKHIP/AmSkw/4kM4P6WWTCd8h904gvCrns3RE9Vbkqn4gFug4/bI0eZJS09vi0XMBeOOoMH8uHJRr/jyHLRrj3F6Ww23+Fj4BRA/eAr6kk3Do84gp/0mI6EMJyG2wXmtWXawgnD3L4MQyEw0rFACjQ93tHy6U/bIWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DUOirRn6KdVyWW/CEFulGBSxKWrQ64NGKjrwE7ha3Aw=; b=lBkLGixyAdgVDtbggofYRsCiuQaXahqTmpJOlpoMQY/1j7EVOBsDeyvA44UJ7aeYDGEN5DOOmfgexKlkCWVL1DhNWO8w55j2QZ1HmqpHnn93foEWSPU56hy9Hmakoyx4bnzIiHevMLSWcw7oulAMqvUnm8AVpAsslXS1SYQB4K43rcKoTkGpvE8d1keXzunl2vUIWqFzMBKcB/2aIDjIhKjPZDzGAYNYAdMMEI0jMiZiUHWv4QqYgHtAfaNjiKvdCOssV61lo8eowhvS66Qg/2ahbUdecRWyK026kIxa5ErEVmTlPde+owUQEyTUqv5dW+vnzl9bLy7awjfAvmI+eA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DUOirRn6KdVyWW/CEFulGBSxKWrQ64NGKjrwE7ha3Aw=; b=tKII2HEt3QF7o4EUuex6HjvP9pdE/M9GZ70yyAvZioHzjRJPajyLfOAihvmWng219SirWhMzk8DvRdrenl8aZd+jGd7RXmYPl0TqoUaiCKImh7+IWTdKaw4QtVsSv+gqHJE0pNitKYbfuF8409fh0EzR0eKYW63/kfAdY4DYpqFdG+ECzQpr66Kkda4fRV/l6Vkk8ReD34sJOXF7e5IHe9wMfxwXOiHkNQhW/BNjRzvSBjey22XaZEFEMPhsVf4DjjBFTMypnpuZol2EWmKtTuBq/BAkYcmH5MmVunUsDgaJmvvmEvmwrVSaYdtNDrFz1xTv1eY2aIr+CH1NlCJVvQ== Received: from MW4PR04CA0065.namprd04.prod.outlook.com (2603:10b6:303:6b::10) by CY4PR12MB1686.namprd12.prod.outlook.com (2603:10b6:910:c::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.23; Thu, 15 Jul 2021 15:09:27 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:6b:cafe::d0) by MW4PR04CA0065.outlook.office365.com (2603:10b6:303:6b::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:27 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT015.mail.protection.outlook.com (10.13.175.130) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:26 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:24 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:15 +0300 Message-ID: <20210715150817.51485-15-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bfca4331-26a2-449f-ca5f-08d947a289be X-MS-TrafficTypeDiagnostic: CY4PR12MB1686: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JQpEJNILznwIB69k4XJoHArO9D1pD80h5+qZXeu4+awOXcGukFUlsDjJmwMzWgRIidS6XqgaG/a1PwNotjqWYpQFe+C+psJ4lzZlue8xpvUq4KajLQDIdAIRwgceaf5LjdtWbe1Ju5Hn4baTYFsnGvDTcVdGG4UG4EC+dC1ck6v6ywasnPrtGlTAB5QwFr3McmvXc33edAPy3VsvFwjoUv33wdItDDB3WWGYgZRZS68IB44Y/45zAU9vF1vbFrHjRA/ee+N98Yr73BFkXY7hzGuMdysfdmmAFoDxeUqJ0zV9MEHAgXahQ5bq1/DpIxyrvRQSsYbomslRJ8WC0F79u2gR2oDqY7NcKio/CAHEmi+ATT9mV7avsleBVx2xDUKN1jNxbTUlyZ+gpIUfSIs73uAcjkuXxaPFFETwztN0rbLqexVkKEcV13zGuJcuebAL/EBRHVtSADJ/MHMrneyoC97m/rr+bEKkUzPfr6yn2bl6XEBxg5fcKNi2zFw4Z3crZjXLgyheguD2o+6LGOE3WQqqulee+c+NIHyz58aHzi1hDJHJ3bPAyERRngXzI8cbaB18X6lVuSi5lyr0K4qlGiikyaJz6YCGsHUv1LyPVpbeqrwJVYHcIisJH/HQB/TMZoagnewp7fLB0wsU5iTvQLpfiLMaqmB/Exs0oMPsrd0RJshf6RMmPxesvgYPBMuNkwNXRSzEATKEJvg4pZgWTVy/yHs+5f7u3+ES/afPLj0= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(376002)(396003)(346002)(136003)(39850400004)(46966006)(36840700001)(82310400003)(26005)(2616005)(36860700001)(86362001)(426003)(6916009)(316002)(70206006)(356005)(54906003)(478600001)(7636003)(34020700004)(82740400003)(55016002)(6666004)(8676002)(83380400001)(7696005)(47076005)(70586007)(186003)(1076003)(36906005)(4326008)(2906002)(36756003)(6286002)(5660300002)(8936002)(16526019)(336012); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:26.9722 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bfca4331-26a2-449f-ca5f-08d947a289be X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT015.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1686 Subject: [dpdk-dev] [PATCH v7 14/16] test/crypto: add mlx5 crypto driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" In order to test the new mlx5 crypto PMD, the driver is added to the crypto test application. Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad --- app/test/test_cryptodev.c | 7 +++++++ app/test/test_cryptodev.h | 2 ++ doc/guides/cryptodevs/mlx5.rst | 3 +++ 3 files changed, 12 insertions(+) diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c index 31201d93e1..e46668a1e0 100644 --- a/app/test/test_cryptodev.c +++ b/app/test/test_cryptodev.c @@ -14569,6 +14569,12 @@ test_cryptodev_cpu_aesni_gcm(void) return rc; } +static int +test_cryptodev_mlx5(void /*argv __rte_unused, int argc __rte_unused*/) +{ + return run_cryptodev_testsuite(RTE_STR(CRYPTODEV_NAME_MLX5_PMD)); +} + static int test_cryptodev_null(void) { @@ -14797,6 +14803,7 @@ REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl); REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm); REGISTER_TEST_COMMAND(cryptodev_cpu_aesni_gcm_autotest, test_cryptodev_cpu_aesni_gcm); +REGISTER_TEST_COMMAND(cryptodev_mlx5_autotest, test_cryptodev_mlx5); REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null); REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g); REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi); diff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h index 5bf1e8818b..262e545ee6 100644 --- a/app/test/test_cryptodev.h +++ b/app/test/test_cryptodev.h @@ -73,6 +73,8 @@ #define CRYPTODEV_NAME_BCMFS_PMD crypto_bcmfs #define CRYPTODEV_NAME_CN9K_PMD crypto_cn9k #define CRYPTODEV_NAME_CN10K_PMD crypto_cn10k +#define CRYPTODEV_NAME_MLX5_PMD mlx5_crypto + enum cryptodev_api_test_type { CRYPTODEV_API_TEST = 0, diff --git a/doc/guides/cryptodevs/mlx5.rst b/doc/guides/cryptodevs/mlx5.rst index dd4705b744..2023dd1b3b 100644 --- a/doc/guides/cryptodevs/mlx5.rst +++ b/doc/guides/cryptodevs/mlx5.rst @@ -92,6 +92,9 @@ The mlxreg dedicated tool should be used as follows: The "wrapped_crypto_operational" value will be "0x00000001" if the mode was successfully changed to operational mode. + The mlx5 crypto PMD can be verfied by running the test application: + ./build/app/test/dpdk-test -c 1 -n 1 -w ,class=crypto,wcs_file= + RTE>>cryptodev_mlx5_autotest Driver options -------------- From patchwork Thu Jul 15 15:08:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95903 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D222EA0A0C; Thu, 15 Jul 2021 17:11:13 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 40A4841346; Thu, 15 Jul 2021 17:09:40 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2069.outbound.protection.outlook.com [40.107.94.69]) by mails.dpdk.org (Postfix) with ESMTP id 20B0A41278 for ; Thu, 15 Jul 2021 17:09:32 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AM1dmywSM/bIhb4X/9vRmjgLRqEPTzVRdhgZrvceRSRcy0R9JNiQ80iItI3cYZ533PaEgv2CwWgHQ7OYxxzVPBBqNqbRlrpY2ifv15oGznT6dIUeZmNCMz8V+oj10/QRp/kyig6oVxWejGGWl0wJ9kA7H+MpvaJFbZjLIukM9pRtKEiLNRCLNl1nd4guYBs0qI0XciyGs90sd6vZSELUUq9RejLfN7hiOXNnm6ra85l4qCcpOgnm9iiCsvdxuyeE4QbSP/Rw0/QXwKKu+HG+hJPKeCVyjx/07c/6HM87JUVCJ9OlY2r9na0NwKzbXvTHA1MU/QHQAwQQl1G1A+6QrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7hEq7k9ajJjRDi0N1lTYDwnKukuvSdCgW+cMIa1YtJo=; b=IxWJlZXl3mEEHRpEES/rEcpdZxjaVzXzYNLfL4O55qTrFnE4eQEe1+VtHzA9EB8TeKQgR3vuqPEilGa5dlvx9qWOjGF8GmMLLKXIa1g51mdKYwPWDPeqNfVF3/46TBxFLy8J/ugdjGS59OSSVY3rmupyYsihY+00l6QiKhlqFfoVzY8JEKgcsBeuldFdFwoOqQqut9RJzxRTnVMiPEFDouXVFyK31Arry+fROD7PDvYfgDEbajiSb6FyTJObYYwzGzsqJNp3p4ZZbmBfQAf/gMqdJ3h8hHdUkJUoZePEZw1Xl7moc1yLG7EcC1zRlGtLNTpBcyUbuPD1mGv8HJOKtg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7hEq7k9ajJjRDi0N1lTYDwnKukuvSdCgW+cMIa1YtJo=; b=tmnQJLqar5RamV0bilifheQnIvOO7FZ6Gh6Yxoe0+HsYkL8Yri+XY+d595HRltcRrV5RdB39SEZcWzKN4f+7JCB926rbvHlNGDoaf6yWS+Nld1Du8S0TOCT7HbRFkZYtpcnELqnLcQiLO9K/DfEjpTctM7yAfo3xaGui+joKF9DJIcEq6J07eTHQ2wLwNjQbHCUx98XuLHL2VSV1xFm3mitPCUbPz1b4u+UaMbY/572vZygjq0/47FdI8yMV2wFyRusP+PJy585vO/4SwY6OcUW9H1IT2xP8ZQZt6D9416ZdIxtv2n2Tn18zup6jztEpB9e1WvMKuOxWzfd9IkdAdw== Received: from MW4PR04CA0063.namprd04.prod.outlook.com (2603:10b6:303:6b::8) by DM5PR12MB2389.namprd12.prod.outlook.com (2603:10b6:4:b4::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18; Thu, 15 Jul 2021 15:09:28 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:6b:cafe::b0) by MW4PR04CA0063.outlook.office365.com (2603:10b6:303:6b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.22 via Frontend Transport; Thu, 15 Jul 2021 15:09:28 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT015.mail.protection.outlook.com (10.13.175.130) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:28 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:26 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:16 +0300 Message-ID: <20210715150817.51485-16-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5caae974-c414-4fce-2533-08d947a28aa6 X-MS-TrafficTypeDiagnostic: DM5PR12MB2389: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2512; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Rq0kiGs36/+uW0BwB9N9txSKdB1/3a1XBLyOq+K+DR7aGrKA6waTXQsCMlYDEGSccJ3Z51RyUNGs2kn8mHtlnluLPaadnOlqM7H/k2L8BLR2eFojSVxny9VofX6Vc0MNcr8v8GnbAdocHBl3l33F1lGqj/ENIiTtZiRh4lxAMYjDqMaj/BV2L+JDOWhBl0JjpHxPSglpEarCoy2kDswTOo3CnPk/lI1XbBI5wKniCYhiOZScs01OQum6YyAGxwanHoTxfZakeb+E373vEYAiWgOF1waf7417Gk2DwFab7B81g/DMctnNCznUssxfoj4iNP+JxWUxeIitrThosi9QpLAFGM0rMx6fGaGlwwVmZYI1PczSonnojLLY6KpUiaNf3EVngkiaiaR/5S6fopJ86yphXjK4dTsOiPFYA+9CRbLUZxUol2daEfYK71yYI78AIEwW4MmeNXzVh7OcNTde8sBc6fugqbNVmF+Ua6FyPc1G18LE7MFbkAO/XBCW+EcRvp8HZLe99W3vtjbU273E8pVwhRf+oCZRpX1jhixUgW2Px2vbYMiAdHmsiJhknYCYeOlkkClDaWwLeOFWBj1L4XkrrdiY31ZM0+cnh2Wm2AsrdTn2Ax5bDYbdTxvZeeZ6npIrO7hfUQbSwdFsQJpAacLB2nC76IPY9UomfmZyIGEKUjppgQMWnvMcumt/3Cn+Jr9UuyPaWx4uPyonWnFueXZfJLsDPjTM+6q4qs4RwjU= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(39860400002)(136003)(346002)(396003)(376002)(36840700001)(46966006)(8676002)(82310400003)(6286002)(5660300002)(34020700004)(2906002)(7696005)(47076005)(70206006)(1076003)(426003)(70586007)(55016002)(26005)(86362001)(54906003)(186003)(30864003)(36756003)(316002)(6916009)(7636003)(36906005)(83380400001)(8936002)(82740400003)(4326008)(16526019)(2616005)(356005)(36860700001)(6666004)(336012)(478600001)(579004)(559001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:28.4764 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5caae974-c414-4fce-2533-08d947a28aa6 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT015.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB2389 Subject: [dpdk-dev] [PATCH v7 15/16] test/crypto: add data-unit and wrapped vectors X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" The AES-XTS algorithm supports using a wrapped key. In AES-XTS the data-unit defines the data block size to be encrypted\decrypted. Add AES-XTS vectors with a wrapped key. Add a variable stating whether the key is wrapped or not. Add the AES-XTS data-unit. Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad --- app/test/test_cryptodev.h | 2 +- app/test/test_cryptodev_aes_test_vectors.h | 1340 ++++++++++++++++++++ app/test/test_cryptodev_blockcipher.c | 10 +- app/test/test_cryptodev_blockcipher.h | 2 + 4 files changed, 1352 insertions(+), 2 deletions(-) diff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h index 262e545ee6..f35dba6837 100644 --- a/app/test/test_cryptodev.h +++ b/app/test/test_cryptodev.h @@ -19,7 +19,7 @@ #define DEFAULT_NUM_XFORMS (2) #define NUM_MBUFS (8191) #define MBUF_CACHE_SIZE (256) -#define MBUF_DATAPAYLOAD_SIZE (2048 + DIGEST_BYTE_LENGTH_SHA512) +#define MBUF_DATAPAYLOAD_SIZE (4096 + DIGEST_BYTE_LENGTH_SHA512) #define MBUF_SIZE (sizeof(struct rte_mbuf) + \ RTE_PKTMBUF_HEADROOM + MBUF_DATAPAYLOAD_SIZE) diff --git a/app/test/test_cryptodev_aes_test_vectors.h b/app/test/test_cryptodev_aes_test_vectors.h index e404050701..dd7ffde685 100644 --- a/app/test/test_cryptodev_aes_test_vectors.h +++ b/app/test/test_cryptodev_aes_test_vectors.h @@ -2609,6 +2609,1298 @@ blockcipher_test_data aes_test_data_xts_key_64_pt_48 = { } }; +static const uint8_t plaintext_aes256xts_512bytes[] = { + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79 +}; +static const uint8_t ciphertext_aes256xts_512bytes[] = { + 0xD3, 0x94, 0x3E, 0xC9, 0xD3, 0x43, 0x13, 0xD3, + 0x07, 0x7E, 0x51, 0x11, 0x97, 0xA5, 0xB1, 0xB2, + 0xB0, 0x55, 0xF8, 0xD6, 0xA2, 0x10, 0x78, 0x76, + 0x37, 0x95, 0x4F, 0x25, 0x99, 0xCC, 0x12, 0xD6, + 0xBB, 0x2A, 0x24, 0xF4, 0x2D, 0x82, 0xFF, 0x56, + 0xEC, 0x55, 0x3B, 0xDD, 0xF9, 0xE1, 0xC8, 0x48, + 0x68, 0x16, 0xD2, 0x2B, 0x95, 0x7C, 0x1F, 0xCB, + 0x32, 0xD6, 0x8F, 0x9A, 0x2E, 0xF7, 0x9B, 0xBE, + 0x72, 0xFC, 0x55, 0x33, 0x27, 0x21, 0x2F, 0x69, + 0xCA, 0x76, 0xA5, 0x9B, 0x21, 0x2E, 0x40, 0x57, + 0x2C, 0x1C, 0x98, 0x41, 0x9A, 0x5E, 0x55, 0x38, + 0xDE, 0xC2, 0x09, 0x57, 0x32, 0xA3, 0x34, 0x40, + 0xC1, 0x8D, 0xCF, 0x70, 0x15, 0xF2, 0x6F, 0x4F, + 0x6A, 0x04, 0xA6, 0x6D, 0xFF, 0x53, 0x25, 0x6A, + 0x0E, 0xD0, 0x87, 0x63, 0xA1, 0x6C, 0xB1, 0x99, + 0x4A, 0x42, 0xF5, 0xF6, 0xEA, 0xA4, 0xEB, 0x6D, + 0x70, 0x9B, 0x0F, 0x85, 0xE2, 0x43, 0x6C, 0x27, + 0x54, 0x57, 0x52, 0x1C, 0xCF, 0x72, 0x11, 0x83, + 0xC3, 0xF5, 0xC6, 0xB6, 0x07, 0xEC, 0x1A, 0xF5, + 0xAC, 0xA1, 0xF2, 0x3A, 0x01, 0x53, 0x0C, 0xA4, + 0x40, 0x19, 0xAF, 0x7B, 0x2D, 0xE7, 0x56, 0x8B, + 0x71, 0x5F, 0x8D, 0x96, 0xF1, 0x5D, 0x33, 0xAC, + 0xE7, 0xAD, 0x96, 0xDB, 0xBB, 0xF7, 0xF5, 0x3F, + 0x0E, 0x02, 0x2E, 0x80, 0xE9, 0xA2, 0x30, 0xD2, + 0x82, 0x65, 0xEC, 0x1A, 0xB2, 0xE8, 0x98, 0x23, + 0x42, 0x79, 0x43, 0x85, 0x3B, 0xF9, 0xFB, 0xBB, + 0xC5, 0x29, 0xAD, 0x95, 0xAE, 0x22, 0x5B, 0x26, + 0xDF, 0x76, 0x65, 0x37, 0x17, 0xBC, 0x58, 0xBB, + 0x1B, 0x0A, 0x71, 0xDC, 0x68, 0xFF, 0x90, 0x36, + 0x37, 0xB7, 0x49, 0x5E, 0x49, 0x4E, 0xE4, 0x1E, + 0x24, 0x39, 0x48, 0xC7, 0x68, 0x19, 0xED, 0x94, + 0xB5, 0xF6, 0x85, 0xFA, 0xE6, 0xB8, 0x2B, 0x9E, + 0x07, 0x9E, 0xFB, 0x1D, 0x61, 0x06, 0x47, 0x2A, + 0x3E, 0x1E, 0xD8, 0x52, 0xFB, 0xB7, 0xE3, 0xB4, + 0x0D, 0xA8, 0x15, 0x1E, 0x98, 0x02, 0xBD, 0x89, + 0x89, 0xE3, 0x38, 0x2C, 0xAB, 0x50, 0x25, 0x30, + 0xB4, 0x5E, 0xA5, 0xCD, 0xA8, 0x9B, 0xA4, 0x2A, + 0xED, 0x19, 0x3B, 0xC3, 0x05, 0x07, 0x57, 0xB5, + 0x52, 0x11, 0x74, 0x95, 0x51, 0x5A, 0xD8, 0xED, + 0xDF, 0x37, 0x91, 0x83, 0x27, 0xD5, 0x08, 0x82, + 0xB3, 0x42, 0x08, 0xC7, 0x81, 0x35, 0x5F, 0x58, + 0x28, 0x69, 0x0D, 0x97, 0x1D, 0x28, 0xE6, 0xB0, + 0x58, 0x93, 0xCE, 0x2A, 0xB4, 0x7D, 0x4B, 0x83, + 0x20, 0x1E, 0x08, 0xEF, 0x68, 0x51, 0xEB, 0xB4, + 0xFA, 0x78, 0xB5, 0xE5, 0x2D, 0x93, 0x07, 0x99, + 0xBB, 0xDD, 0x9A, 0x4E, 0xD6, 0xE7, 0x31, 0x9F, + 0x4D, 0xB4, 0x05, 0x45, 0x89, 0x59, 0x42, 0xFF, + 0x0C, 0xD4, 0xC2, 0xF3, 0xA0, 0xF7, 0xD3, 0xCE, + 0x26, 0x2F, 0x9B, 0xCB, 0x98, 0x24, 0xDE, 0x50, + 0xF6, 0x81, 0x24, 0xA3, 0xB4, 0x99, 0x94, 0xDB, + 0xF5, 0xF4, 0x74, 0xAC, 0xED, 0xF1, 0xD6, 0x2F, + 0x89, 0x48, 0x41, 0x24, 0xBB, 0xA7, 0x64, 0x48, + 0xAE, 0x36, 0xE3, 0xF3, 0xA8, 0x37, 0x4F, 0xE6, + 0x24, 0x92, 0xC4, 0x27, 0x86, 0x68, 0xC4, 0xA2, + 0x2F, 0xB2, 0xA8, 0xFF, 0x27, 0x5F, 0x59, 0xB9, + 0x86, 0x89, 0x5A, 0x09, 0xB8, 0xDA, 0xD6, 0xBA, + 0x26, 0x86, 0x51, 0xC2, 0xDF, 0xCF, 0x07, 0x49, + 0x1C, 0xB7, 0x1A, 0x80, 0xD4, 0x97, 0x13, 0xAA, + 0xE8, 0x38, 0xA7, 0x2C, 0xB7, 0xE2, 0xE0, 0x33, + 0xF9, 0xC3, 0x21, 0xF6, 0x2A, 0xAA, 0x1A, 0xF7, + 0x39, 0x1F, 0x2F, 0x7E, 0x38, 0xC8, 0x82, 0x3F, + 0xCC, 0xD8, 0xE2, 0xD9, 0x02, 0xE6, 0x8E, 0x31, + 0xA7, 0x37, 0xE8, 0x59, 0x3F, 0xE1, 0x60, 0x1C, + 0x74, 0x52, 0xE4, 0x49, 0xF7, 0x21, 0x60, 0x11 +}; +static const struct +blockcipher_test_data aes_test_data_xts_wrapped_key_48_pt_512_du_512 = { + .crypto_algo = RTE_CRYPTO_CIPHER_AES_XTS, + .cipher_key = { + .data = { + 0x94, 0xD8, 0xAE, 0xD7, 0x74, 0xBF, 0x51, 0xF1, + 0x2D, 0x19, 0x0B, 0x9A, 0xB3, 0xDC, 0x1E, 0xA9, + 0x5C, 0xC5, 0x47, 0xC1, 0xBB, 0x94, 0xDB, 0xFA, + 0x2B, 0x1E, 0x54, 0xA5, 0x76, 0xAD, 0x07, 0x4B, + 0x46, 0xE0, 0xAA, 0xF9, 0xF7, 0x5C, 0x64, 0x2D, + 0x8F, 0x04, 0x17, 0x72, 0xE5, 0x8D, 0xFE, 0x9C + }, + .len = 48 + }, + .iv = { + .data = { + 0x4F, 0xAE, 0xF7, 0x11, 0x7C, 0xDA, 0x59, 0xC6, + 0x6E, 0x4B, 0x92, 0x01, 0x3E, 0x76, 0x8A, 0xD5 + }, + .len = 16 + }, + .plaintext = { + .data = plaintext_aes256xts_512bytes, + .len = 512 + }, + .ciphertext = { + .data = ciphertext_aes256xts_512bytes, + .len = 512 + }, + .xts_dataunit_len = 512, + .wrapped_key = true +}; +static const uint8_t plaintext_aes256xts_4096bytes[] = { + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, + 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79 +}; +static const uint8_t ciphertext_aes256xts_4096bytes[] = { + 0xD3, 0x94, 0x3E, 0xC9, 0xD3, 0x43, 0x13, 0xD3, + 0x07, 0x7E, 0x51, 0x11, 0x97, 0xA5, 0xB1, 0xB2, + 0xB0, 0x55, 0xF8, 0xD6, 0xA2, 0x10, 0x78, 0x76, + 0x37, 0x95, 0x4F, 0x25, 0x99, 0xCC, 0x12, 0xD6, + 0xBB, 0x2A, 0x24, 0xF4, 0x2D, 0x82, 0xFF, 0x56, + 0xEC, 0x55, 0x3B, 0xDD, 0xF9, 0xE1, 0xC8, 0x48, + 0x68, 0x16, 0xD2, 0x2B, 0x95, 0x7C, 0x1F, 0xCB, + 0x32, 0xD6, 0x8F, 0x9A, 0x2E, 0xF7, 0x9B, 0xBE, + 0x72, 0xFC, 0x55, 0x33, 0x27, 0x21, 0x2F, 0x69, + 0xCA, 0x76, 0xA5, 0x9B, 0x21, 0x2E, 0x40, 0x57, + 0x2C, 0x1C, 0x98, 0x41, 0x9A, 0x5E, 0x55, 0x38, + 0xDE, 0xC2, 0x09, 0x57, 0x32, 0xA3, 0x34, 0x40, + 0xC1, 0x8D, 0xCF, 0x70, 0x15, 0xF2, 0x6F, 0x4F, + 0x6A, 0x04, 0xA6, 0x6D, 0xFF, 0x53, 0x25, 0x6A, + 0x0E, 0xD0, 0x87, 0x63, 0xA1, 0x6C, 0xB1, 0x99, + 0x4A, 0x42, 0xF5, 0xF6, 0xEA, 0xA4, 0xEB, 0x6D, + 0x70, 0x9B, 0x0F, 0x85, 0xE2, 0x43, 0x6C, 0x27, + 0x54, 0x57, 0x52, 0x1C, 0xCF, 0x72, 0x11, 0x83, + 0xC3, 0xF5, 0xC6, 0xB6, 0x07, 0xEC, 0x1A, 0xF5, + 0xAC, 0xA1, 0xF2, 0x3A, 0x01, 0x53, 0x0C, 0xA4, + 0x40, 0x19, 0xAF, 0x7B, 0x2D, 0xE7, 0x56, 0x8B, + 0x71, 0x5F, 0x8D, 0x96, 0xF1, 0x5D, 0x33, 0xAC, + 0xE7, 0xAD, 0x96, 0xDB, 0xBB, 0xF7, 0xF5, 0x3F, + 0x0E, 0x02, 0x2E, 0x80, 0xE9, 0xA2, 0x30, 0xD2, + 0x82, 0x65, 0xEC, 0x1A, 0xB2, 0xE8, 0x98, 0x23, + 0x42, 0x79, 0x43, 0x85, 0x3B, 0xF9, 0xFB, 0xBB, + 0xC5, 0x29, 0xAD, 0x95, 0xAE, 0x22, 0x5B, 0x26, + 0xDF, 0x76, 0x65, 0x37, 0x17, 0xBC, 0x58, 0xBB, + 0x1B, 0x0A, 0x71, 0xDC, 0x68, 0xFF, 0x90, 0x36, + 0x37, 0xB7, 0x49, 0x5E, 0x49, 0x4E, 0xE4, 0x1E, + 0x24, 0x39, 0x48, 0xC7, 0x68, 0x19, 0xED, 0x94, + 0xB5, 0xF6, 0x85, 0xFA, 0xE6, 0xB8, 0x2B, 0x9E, + 0x07, 0x9E, 0xFB, 0x1D, 0x61, 0x06, 0x47, 0x2A, + 0x3E, 0x1E, 0xD8, 0x52, 0xFB, 0xB7, 0xE3, 0xB4, + 0x0D, 0xA8, 0x15, 0x1E, 0x98, 0x02, 0xBD, 0x89, + 0x89, 0xE3, 0x38, 0x2C, 0xAB, 0x50, 0x25, 0x30, + 0xB4, 0x5E, 0xA5, 0xCD, 0xA8, 0x9B, 0xA4, 0x2A, + 0xED, 0x19, 0x3B, 0xC3, 0x05, 0x07, 0x57, 0xB5, + 0x52, 0x11, 0x74, 0x95, 0x51, 0x5A, 0xD8, 0xED, + 0xDF, 0x37, 0x91, 0x83, 0x27, 0xD5, 0x08, 0x82, + 0xB3, 0x42, 0x08, 0xC7, 0x81, 0x35, 0x5F, 0x58, + 0x28, 0x69, 0x0D, 0x97, 0x1D, 0x28, 0xE6, 0xB0, + 0x58, 0x93, 0xCE, 0x2A, 0xB4, 0x7D, 0x4B, 0x83, + 0x20, 0x1E, 0x08, 0xEF, 0x68, 0x51, 0xEB, 0xB4, + 0xFA, 0x78, 0xB5, 0xE5, 0x2D, 0x93, 0x07, 0x99, + 0xBB, 0xDD, 0x9A, 0x4E, 0xD6, 0xE7, 0x31, 0x9F, + 0x4D, 0xB4, 0x05, 0x45, 0x89, 0x59, 0x42, 0xFF, + 0x0C, 0xD4, 0xC2, 0xF3, 0xA0, 0xF7, 0xD3, 0xCE, + 0x26, 0x2F, 0x9B, 0xCB, 0x98, 0x24, 0xDE, 0x50, + 0xF6, 0x81, 0x24, 0xA3, 0xB4, 0x99, 0x94, 0xDB, + 0xF5, 0xF4, 0x74, 0xAC, 0xED, 0xF1, 0xD6, 0x2F, + 0x89, 0x48, 0x41, 0x24, 0xBB, 0xA7, 0x64, 0x48, + 0xAE, 0x36, 0xE3, 0xF3, 0xA8, 0x37, 0x4F, 0xE6, + 0x24, 0x92, 0xC4, 0x27, 0x86, 0x68, 0xC4, 0xA2, + 0x2F, 0xB2, 0xA8, 0xFF, 0x27, 0x5F, 0x59, 0xB9, + 0x86, 0x89, 0x5A, 0x09, 0xB8, 0xDA, 0xD6, 0xBA, + 0x26, 0x86, 0x51, 0xC2, 0xDF, 0xCF, 0x07, 0x49, + 0x1C, 0xB7, 0x1A, 0x80, 0xD4, 0x97, 0x13, 0xAA, + 0xE8, 0x38, 0xA7, 0x2C, 0xB7, 0xE2, 0xE0, 0x33, + 0xF9, 0xC3, 0x21, 0xF6, 0x2A, 0xAA, 0x1A, 0xF7, + 0x39, 0x1F, 0x2F, 0x7E, 0x38, 0xC8, 0x82, 0x3F, + 0xCC, 0xD8, 0xE2, 0xD9, 0x02, 0xE6, 0x8E, 0x31, + 0xA7, 0x37, 0xE8, 0x59, 0x3F, 0xE1, 0x60, 0x1C, + 0x74, 0x52, 0xE4, 0x49, 0xF7, 0x21, 0x60, 0x11, + 0x8F, 0xD0, 0xA1, 0x4B, 0xE3, 0xF1, 0x18, 0x3D, + 0x90, 0x89, 0x54, 0x27, 0xA0, 0xF9, 0x32, 0x09, + 0x3D, 0x9D, 0x9A, 0x09, 0x53, 0xC6, 0x7E, 0x95, + 0x85, 0x53, 0x98, 0x4C, 0x23, 0xEA, 0x54, 0xBD, + 0x6F, 0x50, 0xBC, 0x4C, 0xCF, 0x37, 0xC5, 0x7B, + 0x4B, 0xCE, 0x84, 0xAF, 0xE2, 0xE2, 0x55, 0x49, + 0xBC, 0xBF, 0x92, 0xCA, 0x1E, 0x5E, 0x10, 0xDF, + 0x60, 0x87, 0x09, 0xA1, 0x4C, 0x1D, 0x7E, 0x1E, + 0x59, 0xE9, 0xCF, 0xDA, 0x45, 0x3F, 0xE2, 0x0F, + 0x53, 0x8D, 0x8B, 0x79, 0xBD, 0xD8, 0xB0, 0xE3, + 0x5B, 0x7C, 0x55, 0x4A, 0x84, 0xF0, 0x1E, 0xF9, + 0xE8, 0xF3, 0x09, 0x4D, 0x0B, 0xD7, 0x77, 0xCC, + 0x3F, 0x70, 0x22, 0x7D, 0x17, 0x27, 0x48, 0x57, + 0xE2, 0x36, 0xA0, 0x84, 0x3B, 0xDE, 0x05, 0x34, + 0xEF, 0x55, 0x12, 0xF4, 0x9A, 0x99, 0x0D, 0x28, + 0x86, 0x28, 0x99, 0x6B, 0x22, 0xEE, 0x63, 0xF0, + 0x68, 0x9C, 0xE1, 0x70, 0xF6, 0x26, 0xD8, 0x3B, + 0xF9, 0x57, 0x18, 0x3D, 0xAD, 0x66, 0xF0, 0xCF, + 0x7B, 0x0C, 0x28, 0x4D, 0xB8, 0xEB, 0x7B, 0x04, + 0x1E, 0x7D, 0x40, 0x5F, 0x5A, 0x1E, 0x7E, 0x08, + 0x7F, 0x4C, 0x1E, 0x18, 0xE5, 0x3E, 0x6C, 0x90, + 0x3C, 0x89, 0x13, 0x2A, 0xC4, 0x2A, 0x94, 0xB5, + 0x3E, 0x18, 0x1C, 0x4C, 0xBA, 0xEA, 0x86, 0xD2, + 0x05, 0xA9, 0x59, 0x9C, 0x80, 0xC2, 0x45, 0xAD, + 0x30, 0x99, 0x18, 0x6A, 0x2F, 0x73, 0x8C, 0xF0, + 0xFE, 0xA4, 0xBD, 0x44, 0x3E, 0xEB, 0x98, 0x75, + 0x48, 0x08, 0x57, 0x45, 0xD8, 0x41, 0xDE, 0x61, + 0x6D, 0x06, 0x93, 0xC4, 0x99, 0x1B, 0x23, 0xB5, + 0x12, 0x22, 0x5C, 0xC7, 0x9E, 0x18, 0xEA, 0x64, + 0xDB, 0xCE, 0x1A, 0xAC, 0x5D, 0x9B, 0x80, 0xE2, + 0xBF, 0x3E, 0xC2, 0xA4, 0x78, 0x4F, 0xF1, 0xE3, + 0x7D, 0x2A, 0x20, 0x94, 0x13, 0xCD, 0xF3, 0x1C, + 0x33, 0x9C, 0xC1, 0x59, 0x85, 0x52, 0xCB, 0xDB, + 0x03, 0xDF, 0x11, 0xE6, 0xAB, 0x95, 0x82, 0x65, + 0x7A, 0x88, 0x73, 0xEE, 0xBA, 0x21, 0x1C, 0x2F, + 0xCD, 0xD7, 0xC6, 0xE5, 0x13, 0xDE, 0x7A, 0x9E, + 0xEE, 0x83, 0x8D, 0xC6, 0x47, 0x63, 0xE0, 0xC7, + 0xC4, 0xBE, 0x19, 0x25, 0xEE, 0xCC, 0x0A, 0x13, + 0x18, 0x9D, 0x34, 0x5B, 0x55, 0x6C, 0xC1, 0x6E, + 0xBF, 0x5A, 0xC5, 0x61, 0x75, 0x77, 0x49, 0x8C, + 0x67, 0x61, 0xE8, 0x72, 0x87, 0xE8, 0xCA, 0xBE, + 0x6E, 0xC3, 0xD7, 0x81, 0x8C, 0x78, 0x79, 0xC8, + 0x72, 0xDA, 0x1A, 0x40, 0x7D, 0x60, 0xE2, 0x5A, + 0x47, 0x38, 0xA1, 0x21, 0x22, 0x6B, 0x54, 0x74, + 0xDD, 0xF3, 0xBC, 0x96, 0x28, 0x7E, 0xC2, 0x8B, + 0x13, 0xEE, 0x53, 0xBC, 0x34, 0x67, 0x07, 0x87, + 0xD5, 0x6B, 0x93, 0x22, 0x21, 0xB9, 0xED, 0x17, + 0xE4, 0xA1, 0x96, 0xB2, 0xC6, 0xFF, 0x79, 0xA0, + 0xA7, 0xF9, 0xDD, 0x92, 0x78, 0xF7, 0xE3, 0x16, + 0x79, 0xEF, 0xEF, 0x31, 0x4D, 0x1D, 0x75, 0xF9, + 0xCF, 0x5A, 0x1B, 0x68, 0x16, 0x7F, 0xAF, 0x5F, + 0x30, 0xB7, 0xEF, 0xF8, 0x94, 0x63, 0x73, 0x3D, + 0xB3, 0x63, 0xE4, 0xE6, 0xD8, 0xAD, 0xF4, 0x80, + 0x5E, 0x82, 0xA3, 0xFB, 0x3D, 0x0F, 0xCF, 0x59, + 0xB8, 0x76, 0xAF, 0x27, 0x83, 0xE3, 0x2D, 0x6F, + 0xE0, 0xF3, 0x11, 0xD5, 0xAE, 0x82, 0x14, 0x1D, + 0x78, 0x95, 0xBF, 0x31, 0x22, 0x1B, 0x80, 0x12, + 0x02, 0xD7, 0x4D, 0x1B, 0x92, 0xE3, 0x15, 0xBA, + 0x67, 0xD6, 0x8F, 0xD4, 0xDA, 0xBF, 0xD4, 0x62, + 0xAD, 0x76, 0xDA, 0x04, 0xA2, 0xEA, 0x98, 0xD3, + 0xC3, 0x6E, 0x5F, 0x26, 0x3C, 0x5E, 0xD9, 0xEA, + 0x09, 0xF0, 0x02, 0xFC, 0xD2, 0x11, 0xF8, 0xA8, + 0x7E, 0xFF, 0x06, 0x28, 0x5B, 0xE5, 0x6F, 0x9A, + 0x00, 0xE7, 0x7F, 0xB9, 0xFB, 0x59, 0xBB, 0xDD, + 0x85, 0xF3, 0x40, 0xCE, 0xA3, 0x5E, 0x2E, 0x2E, + 0x34, 0x91, 0x58, 0x41, 0x00, 0xB5, 0xE1, 0x88, + 0x24, 0x51, 0xC7, 0xB6, 0xF3, 0x21, 0x52, 0x6E, + 0xE7, 0xFC, 0x42, 0xE7, 0x9C, 0xCC, 0x1E, 0x51, + 0x45, 0x39, 0xBE, 0x09, 0xFE, 0x1A, 0xC4, 0xF0, + 0x79, 0xF4, 0x05, 0xC7, 0xA7, 0xF8, 0x0F, 0xB6, + 0x5A, 0x7B, 0xD7, 0xE1, 0x6F, 0xF0, 0x9D, 0x67, + 0xA3, 0xE3, 0x3E, 0x2E, 0xB9, 0x8C, 0x83, 0x9E, + 0xFD, 0x2E, 0xA2, 0x92, 0x99, 0x3C, 0xC0, 0x99, + 0x01, 0xAB, 0x0D, 0xFA, 0x55, 0x96, 0x04, 0x60, + 0x1A, 0xAD, 0x4C, 0xBB, 0x3D, 0xBB, 0x7D, 0x8B, + 0x9F, 0x28, 0x85, 0x7D, 0xB9, 0xE4, 0x05, 0x79, + 0x7B, 0x63, 0xDD, 0x7F, 0x4D, 0xE7, 0x50, 0xD9, + 0x41, 0xFF, 0x53, 0xB1, 0xCE, 0x42, 0x7B, 0xD6, + 0x05, 0x1B, 0x4E, 0xAF, 0xC4, 0x8C, 0x17, 0xC8, + 0x52, 0xBD, 0x03, 0x3B, 0x92, 0x57, 0x4E, 0xA8, + 0x15, 0xC3, 0x26, 0x1C, 0x55, 0xC1, 0xFF, 0xAE, + 0xA9, 0x26, 0x2D, 0xA7, 0x8E, 0x3A, 0x7F, 0xA3, + 0x48, 0xA5, 0xBC, 0x14, 0x84, 0xF2, 0x90, 0xCE, + 0x35, 0x0F, 0x64, 0x6B, 0xD8, 0x1C, 0x12, 0xFE, + 0x5A, 0x4F, 0x0E, 0xCE, 0x81, 0x4E, 0x79, 0x6B, + 0xCF, 0x56, 0xA7, 0xDB, 0x24, 0xBC, 0xB0, 0x84, + 0x4C, 0xB0, 0xDA, 0xBE, 0xE6, 0x8F, 0xD7, 0x8E, + 0x0E, 0xA0, 0xD3, 0x55, 0xC2, 0x4A, 0x34, 0x1C, + 0xF9, 0xC7, 0x3D, 0x29, 0x70, 0x8B, 0xF0, 0x99, + 0x61, 0xF5, 0x11, 0xFB, 0x82, 0xE2, 0x67, 0x35, + 0x60, 0x78, 0x47, 0x81, 0x2A, 0x74, 0x5E, 0x4D, + 0x48, 0xD3, 0x7C, 0x32, 0xCA, 0x1B, 0xD2, 0xA2, + 0x5C, 0x3A, 0x2F, 0xCE, 0xB4, 0x6C, 0x3A, 0x6A, + 0x8F, 0x67, 0x46, 0x12, 0xE7, 0xAE, 0x6A, 0x3B, + 0x99, 0x04, 0x5E, 0x96, 0xD0, 0xB9, 0x84, 0xF6, + 0xA7, 0x64, 0x11, 0xE8, 0x0C, 0x51, 0xFD, 0x3F, + 0x18, 0xFA, 0xE8, 0x52, 0xD9, 0x4B, 0x99, 0x7A, + 0x25, 0x2B, 0x1B, 0x21, 0xAD, 0x8C, 0xFE, 0x0D, + 0x34, 0x51, 0x91, 0x75, 0x55, 0x6F, 0xEB, 0x9F, + 0x42, 0xDC, 0x73, 0x7D, 0x31, 0x0A, 0x74, 0x13, + 0x80, 0xB8, 0xC3, 0xED, 0x73, 0x9D, 0x79, 0x42, + 0xC0, 0x33, 0xAB, 0xC1, 0xCB, 0xB9, 0xD0, 0xBE, + 0xA0, 0x78, 0xB8, 0x3B, 0xEB, 0x3D, 0x1A, 0x3F, + 0xFB, 0x9B, 0xAA, 0x8F, 0x89, 0xF9, 0xD1, 0x22, + 0x82, 0xE6, 0x66, 0xEE, 0x2A, 0xFD, 0x9F, 0xF8, + 0x92, 0x7E, 0x10, 0xF5, 0xD5, 0x23, 0x0B, 0xB1, + 0xD6, 0xF1, 0x7A, 0x3D, 0x73, 0xE9, 0xCE, 0x7F, + 0xE6, 0x0B, 0x17, 0xBC, 0x23, 0xAE, 0x72, 0xB6, + 0xFA, 0x19, 0x46, 0xBB, 0xFE, 0xA4, 0xC1, 0x64, + 0xA8, 0x5E, 0xE8, 0xBB, 0x63, 0x58, 0x19, 0x50, + 0xAA, 0x36, 0xC2, 0x4B, 0x38, 0x24, 0xD1, 0x2E, + 0xAE, 0xAD, 0x6E, 0x34, 0x64, 0xA8, 0xC8, 0xF2, + 0x4E, 0x74, 0x5C, 0x98, 0xE8, 0xDF, 0x99, 0x8C, + 0x41, 0x79, 0x60, 0x2D, 0xD5, 0xF4, 0xE3, 0xE9, + 0x1D, 0xF6, 0x5A, 0xA9, 0x69, 0x8E, 0xA1, 0x4F, + 0xD3, 0x1B, 0x09, 0xA8, 0x7A, 0xD1, 0xE1, 0xCF, + 0xAC, 0xBA, 0xD0, 0xD1, 0x34, 0x34, 0x8F, 0xC1, + 0xD1, 0xA8, 0xAF, 0x6E, 0x92, 0xE0, 0xB0, 0xF6, + 0xF9, 0x08, 0xA0, 0xCB, 0x58, 0x34, 0xF6, 0x68, + 0xA2, 0xBF, 0x05, 0x39, 0x63, 0xBA, 0x4F, 0xEF, + 0xE3, 0x95, 0x69, 0xD5, 0x89, 0x7C, 0x64, 0x07, + 0x13, 0x42, 0x14, 0xF1, 0xA6, 0x9B, 0x87, 0xE5, + 0xF4, 0x49, 0xAE, 0x67, 0x65, 0xCC, 0xF2, 0x26, + 0xF8, 0x31, 0xBD, 0x33, 0x6A, 0x87, 0x77, 0x4E, + 0xB1, 0xEE, 0xA4, 0xA2, 0xC8, 0xA0, 0x4A, 0xC1, + 0xDF, 0x55, 0xE0, 0xDE, 0x53, 0x15, 0x3B, 0xEC, + 0x55, 0x32, 0xCA, 0x06, 0xE4, 0x78, 0x59, 0x63, + 0x10, 0x68, 0xA9, 0x46, 0x1B, 0xEF, 0x73, 0x6D, + 0x1A, 0x02, 0x64, 0x12, 0x76, 0x9B, 0xDB, 0x7C, + 0x03, 0x35, 0x19, 0xE1, 0x58, 0x7A, 0x87, 0x0C, + 0x76, 0xDC, 0xFC, 0xC0, 0x28, 0xE4, 0xA2, 0x07, + 0x9C, 0x28, 0x05, 0x21, 0x13, 0x58, 0xEF, 0x05, + 0xBB, 0xAB, 0x94, 0xA2, 0x93, 0xBC, 0x31, 0x61, + 0x26, 0x39, 0x38, 0x0C, 0xC4, 0x67, 0xDA, 0xA5, + 0xE4, 0x1E, 0x1B, 0xB6, 0xE5, 0x73, 0xD6, 0x6C, + 0xEE, 0xBC, 0x9D, 0xB9, 0xE7, 0xD9, 0x45, 0x2F, + 0xF2, 0xB6, 0x92, 0x54, 0x41, 0x05, 0xB7, 0xB7, + 0xFC, 0x37, 0x63, 0x6A, 0xB4, 0xBE, 0xB8, 0x3E, + 0xD8, 0x53, 0x3B, 0xF8, 0x7D, 0x9A, 0x05, 0xDF, + 0x20, 0x02, 0x27, 0x64, 0x38, 0xFA, 0x7D, 0xAF, + 0x7F, 0xFA, 0xD1, 0xB7, 0x32, 0xC5, 0x74, 0x3E, + 0x04, 0xA2, 0x67, 0x79, 0x02, 0x2E, 0x6F, 0xA1, + 0x27, 0x87, 0x07, 0xB5, 0x9F, 0x0A, 0x7D, 0x5E, + 0x14, 0xA0, 0x31, 0x46, 0x3F, 0xA9, 0xDE, 0x98, + 0xB9, 0x89, 0xA0, 0x4A, 0x7A, 0xBD, 0x15, 0xAE, + 0x2D, 0x0B, 0x38, 0x9A, 0xD8, 0x0E, 0xD2, 0xBA, + 0x6D, 0xA1, 0x04, 0x1E, 0x4E, 0x39, 0x87, 0x4B, + 0xC8, 0x3C, 0x74, 0x35, 0x4D, 0xC8, 0x1B, 0x42, + 0x06, 0x5B, 0x73, 0xB7, 0x33, 0x86, 0x4A, 0x10, + 0x2A, 0x10, 0x16, 0x28, 0x6F, 0x2A, 0xE3, 0x86, + 0xDE, 0xA3, 0x44, 0x23, 0xE2, 0x90, 0xC4, 0x20, + 0x90, 0xE0, 0xB8, 0xE6, 0xA7, 0xB6, 0xD6, 0x92, + 0xF4, 0xF8, 0x8A, 0xBC, 0xAC, 0x31, 0x47, 0x8F, + 0xAA, 0xE0, 0xD9, 0xF7, 0xE3, 0xCB, 0x11, 0xA4, + 0x6B, 0x05, 0xB3, 0xB8, 0x72, 0x69, 0xE6, 0xDD, + 0x75, 0x0F, 0x20, 0x1D, 0x3F, 0xC6, 0x96, 0xA0, + 0x18, 0xB6, 0x24, 0xA1, 0xA6, 0xFD, 0x0C, 0x80, + 0x1E, 0xD2, 0x28, 0xA2, 0x1A, 0x27, 0xF4, 0x23, + 0x59, 0x1A, 0xCC, 0x0F, 0xD4, 0x99, 0xD0, 0xB4, + 0x1E, 0x91, 0xC7, 0xD8, 0x8F, 0x8C, 0x5B, 0xEB, + 0xB5, 0x9F, 0xFF, 0x4F, 0xD0, 0xD5, 0xB7, 0x60, + 0xCC, 0x0A, 0x10, 0x38, 0xBF, 0xA8, 0x2E, 0xCC, + 0xEB, 0x26, 0xB0, 0x78, 0xB3, 0xE0, 0x40, 0xAF, + 0xCD, 0x12, 0xC5, 0x3A, 0x24, 0xD8, 0xEE, 0x3A, + 0x64, 0x83, 0x2E, 0xD9, 0x25, 0x21, 0x66, 0xA5, + 0x28, 0xD1, 0xE1, 0x84, 0x25, 0x1B, 0x20, 0xB8, + 0xF5, 0x76, 0xB6, 0x3E, 0x4B, 0xC6, 0xEC, 0xC1, + 0xC7, 0xAC, 0xC4, 0xAD, 0xCE, 0xF0, 0xB4, 0x0F, + 0x35, 0x1E, 0xCE, 0x4E, 0xE3, 0x57, 0x30, 0xFC, + 0xF4, 0x9B, 0x86, 0xB0, 0xDD, 0x3F, 0x2F, 0xB6, + 0x10, 0x20, 0xE4, 0x24, 0x17, 0x1C, 0x24, 0xC6, + 0x89, 0xE4, 0x14, 0xAD, 0x2E, 0x41, 0x08, 0x33, + 0x88, 0xB1, 0x6F, 0x11, 0x85, 0xAF, 0x58, 0x17, + 0xE3, 0x91, 0xB4, 0x72, 0xA2, 0x7F, 0xA3, 0x98, + 0xAF, 0xB7, 0x6B, 0x58, 0x76, 0xA3, 0x11, 0x1C, + 0x8A, 0x1A, 0xE6, 0x58, 0x54, 0xB0, 0xB9, 0x6E, + 0x46, 0xCB, 0x16, 0xC0, 0x63, 0x0C, 0xEE, 0xA2, + 0xAE, 0xF6, 0x71, 0xEF, 0xD1, 0xB9, 0x3D, 0xB7, + 0x76, 0xCE, 0x5B, 0x84, 0x66, 0x7C, 0x7D, 0xF1, + 0x96, 0x60, 0x34, 0xF6, 0xD1, 0x64, 0x27, 0xD9, + 0xF3, 0x78, 0x8B, 0xF4, 0xC3, 0x1D, 0x37, 0xC0, + 0xF4, 0x4A, 0xD0, 0xA5, 0x9A, 0xEB, 0xDD, 0x79, + 0x54, 0x5D, 0xEB, 0x04, 0xC1, 0xA4, 0xBC, 0xED, + 0xE3, 0x74, 0xC3, 0xB9, 0x9A, 0x6A, 0xAA, 0x06, + 0xD1, 0xF0, 0x0F, 0xC5, 0xEF, 0x7E, 0x0B, 0xC8, + 0xF4, 0x94, 0x4E, 0x69, 0x0E, 0x36, 0x00, 0x13, + 0x45, 0xCE, 0x68, 0x13, 0xFE, 0x7F, 0x29, 0xA2, + 0x1D, 0x79, 0xDF, 0xF2, 0x27, 0xFB, 0xAE, 0x52, + 0x05, 0x78, 0xD7, 0xB9, 0xF7, 0x38, 0x68, 0xD5, + 0xBA, 0xD7, 0xCF, 0x09, 0xC6, 0xD2, 0x5B, 0xC6, + 0x98, 0xE4, 0xEC, 0xD5, 0xE9, 0xC2, 0xA5, 0x1A, + 0x52, 0xC8, 0xA7, 0xBA, 0x3D, 0x74, 0x75, 0x00, + 0xAA, 0xDD, 0x6A, 0x3F, 0xB6, 0x2F, 0x08, 0xB7, + 0x1C, 0x6B, 0x52, 0x0C, 0xC9, 0xE4, 0x4D, 0xF4, + 0xC5, 0x26, 0x1F, 0x35, 0x41, 0x25, 0x68, 0x17, + 0xA8, 0x81, 0x75, 0xF4, 0x66, 0x41, 0xB5, 0xE4, + 0x1D, 0x92, 0xEE, 0xDA, 0x0F, 0x56, 0x76, 0xC6, + 0xAA, 0x0F, 0xA8, 0x63, 0x8D, 0xF0, 0x69, 0x63, + 0x93, 0x45, 0xBC, 0x76, 0x40, 0xBE, 0xA9, 0x96, + 0x36, 0xAF, 0x2F, 0x6B, 0x3E, 0xAB, 0xF3, 0xC0, + 0xD7, 0xD5, 0xB1, 0x23, 0x23, 0xA2, 0xA0, 0xC4, + 0xC5, 0x70, 0xEF, 0x66, 0x79, 0x15, 0xF0, 0xD0, + 0x40, 0x0A, 0x33, 0x0C, 0xF3, 0x32, 0x6D, 0x8D, + 0xB4, 0x44, 0x46, 0x78, 0x3F, 0x8D, 0x75, 0x40, + 0xA5, 0x60, 0xBC, 0x9B, 0x76, 0xDF, 0x25, 0xF4, + 0xE9, 0xED, 0xAC, 0x74, 0x2F, 0x9A, 0x00, 0xC4, + 0x2B, 0x52, 0x26, 0x79, 0x09, 0x19, 0x57, 0x89, + 0x60, 0x14, 0xBE, 0x65, 0xBD, 0x7B, 0x4D, 0x7D, + 0x9B, 0x8B, 0x9E, 0x72, 0x6C, 0x0C, 0x57, 0xC7, + 0x00, 0x08, 0x38, 0x7C, 0x37, 0x45, 0x9D, 0x55, + 0xA2, 0x62, 0x5E, 0x34, 0x19, 0x99, 0x31, 0x16, + 0xF1, 0x14, 0x44, 0x2D, 0xE3, 0x7E, 0x22, 0xE1, + 0xA2, 0xB8, 0x9A, 0x9F, 0xE0, 0x37, 0x29, 0xBB, + 0xCD, 0x46, 0xEE, 0x0A, 0x62, 0x2B, 0x98, 0x34, + 0xBA, 0x9E, 0x54, 0x1B, 0xB1, 0x5C, 0x4F, 0xE9, + 0xAA, 0xE4, 0x95, 0x8C, 0xA4, 0xEF, 0xC2, 0xB1, + 0x7F, 0xF9, 0x80, 0xDA, 0x55, 0x95, 0x92, 0xC0, + 0x86, 0xF4, 0x2D, 0x99, 0x3E, 0x17, 0xDC, 0x55, + 0xA6, 0x33, 0x85, 0x90, 0x31, 0xC8, 0xFF, 0x58, + 0x83, 0xC5, 0xBA, 0x60, 0x20, 0x5F, 0x87, 0x29, + 0x20, 0x5A, 0x7D, 0x44, 0x2B, 0xA0, 0xE2, 0x99, + 0xC8, 0x70, 0xBE, 0x89, 0xC5, 0xBC, 0xF6, 0x0D, + 0x04, 0xC0, 0x96, 0xD1, 0x5C, 0xD1, 0x90, 0x43, + 0xD3, 0x7B, 0x73, 0x52, 0x30, 0xB6, 0xA9, 0x7C, + 0x0A, 0xA3, 0x24, 0x0E, 0x80, 0xFE, 0xBE, 0x31, + 0xFD, 0xB5, 0x96, 0x04, 0x2B, 0xCF, 0x0B, 0x28, + 0x1F, 0x7A, 0xCF, 0xC4, 0x82, 0x78, 0x52, 0x30, + 0xB1, 0x34, 0x12, 0x50, 0x03, 0x09, 0x1C, 0x8B, + 0x80, 0x60, 0xE3, 0xA1, 0xE5, 0x61, 0xF7, 0xD7, + 0xB6, 0x74, 0xBE, 0xD6, 0x58, 0x03, 0xD3, 0xE5, + 0xF7, 0xAC, 0x07, 0x60, 0xB7, 0x8A, 0xEC, 0xFA, + 0xC6, 0x0F, 0xF0, 0x20, 0x04, 0x6B, 0x8F, 0x61, + 0x09, 0x92, 0x03, 0xFB, 0x85, 0x99, 0x94, 0x9D, + 0x2E, 0x6A, 0xC2, 0x9F, 0x20, 0x46, 0x2A, 0x96, + 0xED, 0x42, 0x7D, 0x64, 0xA9, 0xE4, 0x1B, 0xDE, + 0x11, 0x20, 0x12, 0x93, 0xE6, 0x2B, 0xE5, 0x93, + 0x48, 0x37, 0x8C, 0x5A, 0x54, 0x0D, 0xEB, 0xF0, + 0x9F, 0x9D, 0xE4, 0xA5, 0xC4, 0x93, 0x6F, 0x6A, + 0xE3, 0x99, 0x69, 0xD9, 0xFE, 0x0C, 0x4E, 0xEC, + 0x8B, 0x30, 0x1F, 0x7A, 0xB8, 0xC8, 0x5B, 0x61, + 0x8E, 0xC2, 0x10, 0x90, 0x57, 0xB4, 0x72, 0x58, + 0x7F, 0x41, 0x29, 0x7E, 0xF9, 0xBE, 0x40, 0xC3, + 0x6F, 0xA9, 0xE3, 0x00, 0xE9, 0xC8, 0xFD, 0x4B, + 0xFD, 0x3F, 0xE3, 0x3F, 0x25, 0x22, 0xFD, 0xB7, + 0x2D, 0x57, 0xEF, 0x91, 0x08, 0xF0, 0x20, 0x56, + 0x30, 0xFA, 0x83, 0x69, 0xFD, 0x56, 0x5A, 0x9B, + 0xCE, 0xF8, 0x28, 0x02, 0xB4, 0x91, 0x35, 0x75, + 0x9E, 0x63, 0x99, 0x48, 0xCF, 0x35, 0xF5, 0x58, + 0x0C, 0x48, 0x8F, 0x0A, 0x2D, 0x9A, 0xE6, 0x40, + 0xF6, 0x21, 0xB5, 0x69, 0xC1, 0x09, 0x31, 0x00, + 0xA3, 0xC1, 0x4C, 0x99, 0x70, 0x4F, 0x5A, 0x63, + 0x17, 0x90, 0xB8, 0xF8, 0x3A, 0x0E, 0xFD, 0x67, + 0xEA, 0x0E, 0xBA, 0x7B, 0x1E, 0xEF, 0x37, 0x84, + 0xD5, 0x51, 0x37, 0x01, 0xD6, 0x93, 0x15, 0xDF, + 0x56, 0x89, 0x0E, 0x54, 0xF5, 0x1D, 0xF7, 0xE5, + 0xB7, 0xC1, 0xF1, 0xC2, 0xD9, 0x14, 0x6F, 0x40, + 0x55, 0x67, 0x50, 0x7C, 0x58, 0x35, 0x8B, 0x39, + 0xCB, 0xB5, 0x87, 0xF5, 0x55, 0x5E, 0x26, 0x8C, + 0x5B, 0x73, 0x0E, 0xBB, 0x25, 0x51, 0x0E, 0xAD, + 0x57, 0x72, 0x7B, 0x68, 0x83, 0x11, 0x1E, 0x3A, + 0x3D, 0xA4, 0x7C, 0x18, 0xB7, 0x70, 0x18, 0xBC, + 0x72, 0x03, 0x4A, 0xA1, 0xD2, 0xF9, 0xA9, 0x8A, + 0x25, 0x45, 0x19, 0xEE, 0x93, 0x06, 0xB5, 0x09, + 0x71, 0xC9, 0x2D, 0xFD, 0x2B, 0xF3, 0xC7, 0x64, + 0x5F, 0xCE, 0x71, 0x1D, 0x81, 0x96, 0x67, 0xBF, + 0x01, 0x39, 0x8C, 0xE7, 0xA2, 0xD0, 0x98, 0x57, + 0x5A, 0xFD, 0x21, 0xC7, 0x46, 0xAA, 0xB4, 0xE4, + 0x0E, 0xBE, 0xC6, 0x68, 0x3E, 0x38, 0xF5, 0xA2, + 0xED, 0x73, 0xCC, 0x53, 0x7E, 0x7E, 0x03, 0x32, + 0xDC, 0xB6, 0xC1, 0x03, 0x9E, 0xB3, 0x2A, 0xAD, + 0xC0, 0xC3, 0x6E, 0x47, 0xFB, 0x1E, 0xB7, 0x0D, + 0x86, 0x95, 0x09, 0xA6, 0x9D, 0x6F, 0x92, 0xFC, + 0xFF, 0x2C, 0x7D, 0x09, 0x16, 0x68, 0x50, 0x3E, + 0x4F, 0x23, 0x4C, 0x93, 0x95, 0x2A, 0xE1, 0x9B, + 0x16, 0xF0, 0x0F, 0xFF, 0x79, 0xA8, 0x06, 0xF9, + 0x70, 0x61, 0x72, 0x2C, 0xE8, 0x91, 0x01, 0x6D, + 0x45, 0xE5, 0x82, 0x5D, 0x26, 0x21, 0xAD, 0x3D, + 0x77, 0x73, 0x23, 0x04, 0x84, 0x27, 0xA3, 0x5D, + 0x6D, 0xA8, 0x99, 0xC1, 0xCE, 0x4F, 0xA9, 0xF7, + 0xAB, 0x5C, 0xDE, 0x01, 0xE6, 0x1E, 0xEF, 0xE6, + 0xFD, 0xE0, 0x68, 0x85, 0x3E, 0xEE, 0xBF, 0xF1, + 0x0D, 0x79, 0xF4, 0xA2, 0xB4, 0x14, 0xBC, 0x0C, + 0x49, 0x77, 0x03, 0x71, 0x08, 0x3E, 0x40, 0xA6, + 0xD7, 0x03, 0xFA, 0xE2, 0xFB, 0xC7, 0x59, 0x30, + 0x6E, 0x07, 0x06, 0x1C, 0x7C, 0x47, 0xE5, 0x4C, + 0x57, 0x0A, 0x91, 0x4A, 0x43, 0xE4, 0x8A, 0xCD, + 0x6E, 0x92, 0x01, 0xE2, 0x52, 0xC1, 0x92, 0x34, + 0x8E, 0x64, 0x0F, 0x39, 0x63, 0x53, 0xAB, 0xE5, + 0x44, 0xD5, 0xAA, 0xAA, 0xF6, 0x03, 0x89, 0xB9, + 0xDD, 0xB2, 0x2D, 0x56, 0x1A, 0xE0, 0x72, 0x5A, + 0x52, 0x19, 0x46, 0xEA, 0xB3, 0xCE, 0xB3, 0x59, + 0x46, 0x7A, 0xA7, 0x48, 0x37, 0x0C, 0x09, 0xBA, + 0x92, 0x70, 0x17, 0x7F, 0xF5, 0xD3, 0x60, 0x44, + 0xC4, 0xC6, 0xC6, 0x7D, 0xD2, 0x21, 0xAC, 0x3F, + 0x62, 0x6C, 0xE9, 0xBA, 0x4C, 0xF3, 0x82, 0x7E, + 0x6D, 0x3A, 0x92, 0xDC, 0x94, 0xE4, 0x5F, 0xA6, + 0x8B, 0x66, 0xA0, 0xDD, 0xE2, 0x97, 0x83, 0xED, + 0xF5, 0x9D, 0xDF, 0x74, 0x77, 0x23, 0x7D, 0xDA, + 0xC4, 0xFB, 0x92, 0x1A, 0xD9, 0x37, 0x36, 0xD2, + 0x88, 0xC9, 0xEA, 0x0F, 0x98, 0xBD, 0xC5, 0xF8, + 0xAA, 0x19, 0x75, 0x12, 0x6A, 0x41, 0xB5, 0xB3, + 0xB5, 0xA4, 0x96, 0xDC, 0x2B, 0x49, 0x86, 0x66, + 0x35, 0xD8, 0x4A, 0x62, 0xB4, 0xCB, 0x1E, 0x27, + 0xC1, 0xAD, 0x34, 0x0E, 0x26, 0x16, 0xF2, 0xC2, + 0x22, 0x52, 0x84, 0xD8, 0xD1, 0x32, 0xB8, 0x9C, + 0xFE, 0x64, 0x42, 0x9F, 0xE4, 0x69, 0xF0, 0xAE, + 0x3B, 0xD9, 0x2C, 0xA0, 0x14, 0xEB, 0x69, 0x74, + 0x7C, 0xE2, 0xA6, 0x60, 0xE1, 0x52, 0x1C, 0xCC, + 0xBF, 0xE6, 0xA1, 0x83, 0x20, 0x5D, 0x9E, 0xA3, + 0xFB, 0x84, 0x8B, 0x33, 0xE6, 0xC9, 0x32, 0x83, + 0xC0, 0x3F, 0x98, 0x1D, 0x6E, 0xC0, 0x50, 0x71, + 0x29, 0x60, 0x5F, 0x36, 0xB4, 0x68, 0x1D, 0xB9, + 0x76, 0x73, 0xC3, 0x80, 0xC5, 0xBC, 0x59, 0x7B, + 0x59, 0xB4, 0xE0, 0x6A, 0x80, 0xCD, 0x4D, 0x8C, + 0x9E, 0xE0, 0x0B, 0x45, 0x7D, 0x54, 0xD4, 0xC4, + 0x97, 0x6C, 0x54, 0xEF, 0x14, 0x64, 0xBD, 0x3B, + 0xD7, 0xEE, 0xF4, 0xD1, 0x41, 0x76, 0x3A, 0x24, + 0x7A, 0xC2, 0xCA, 0x68, 0x28, 0x53, 0x46, 0xF7, + 0x1B, 0xDA, 0x4B, 0x7A, 0x56, 0x75, 0x86, 0xFB, + 0x31, 0x2C, 0x27, 0xF9, 0x4D, 0x35, 0xA4, 0x82, + 0xE7, 0x2F, 0x41, 0xB4, 0xCA, 0xCE, 0x75, 0x94, + 0x08, 0x54, 0xE2, 0x9E, 0x99, 0xC9, 0x85, 0xDE, + 0x6F, 0x80, 0x95, 0x59, 0x3E, 0x54, 0x9F, 0x31, + 0xF8, 0xDE, 0xD0, 0xD7, 0xA6, 0xD4, 0xD3, 0xBB, + 0xD9, 0xC7, 0x55, 0xDD, 0xAE, 0xAD, 0x9E, 0x57, + 0x4A, 0x33, 0x5D, 0x7A, 0xA6, 0xA3, 0xCA, 0xF9, + 0x4C, 0x5B, 0x51, 0xCC, 0x22, 0xBB, 0x76, 0x44, + 0x17, 0xDE, 0x22, 0xA1, 0xDF, 0x80, 0x13, 0x7D, + 0xE5, 0x34, 0x7E, 0x75, 0x73, 0x10, 0x40, 0xFB, + 0x9A, 0x21, 0xCD, 0xD3, 0xD3, 0x84, 0xB6, 0x0C, + 0x31, 0x1E, 0xB5, 0x42, 0xF4, 0x34, 0x11, 0x7F, + 0x4A, 0x23, 0xA8, 0xA5, 0x8F, 0x20, 0xCD, 0xA9, + 0xF2, 0xE4, 0xEE, 0xFA, 0x57, 0xD1, 0x22, 0x1C, + 0xA5, 0xDC, 0x0B, 0x25, 0xFE, 0xC2, 0xA7, 0x7E, + 0x09, 0x2E, 0xDA, 0x40, 0x9F, 0x6C, 0xC8, 0x71, + 0x58, 0x91, 0x04, 0x25, 0xD0, 0x06, 0xEA, 0x1B, + 0xCD, 0x9D, 0x50, 0xD8, 0x40, 0x24, 0xAC, 0xC3, + 0xB4, 0x07, 0x6E, 0x76, 0xF4, 0x4C, 0xD8, 0x80, + 0xD0, 0x20, 0xF5, 0x15, 0x6A, 0x0A, 0x12, 0xF8, + 0x6B, 0x67, 0x77, 0x34, 0xAE, 0x60, 0x68, 0x13, + 0x5B, 0x8E, 0xFF, 0x5E, 0x7A, 0x77, 0x67, 0x0D, + 0xE6, 0x96, 0x43, 0x9F, 0x8F, 0x77, 0x5F, 0x97, + 0x23, 0x91, 0x33, 0x72, 0xC7, 0x8A, 0xC7, 0x80, + 0xCF, 0xE7, 0x71, 0x06, 0x25, 0xB7, 0x4B, 0x89, + 0x6A, 0x46, 0x67, 0x19, 0x49, 0x44, 0x03, 0x52, + 0x32, 0xB1, 0x8F, 0xE7, 0x9E, 0xDA, 0x03, 0x41, + 0xA3, 0xAC, 0xE5, 0xF3, 0x96, 0xE6, 0xAC, 0xFF, + 0xEC, 0x35, 0x4D, 0x83, 0xA9, 0xCE, 0x7C, 0x52, + 0xF2, 0x36, 0x97, 0xF0, 0x28, 0x36, 0x54, 0x59, + 0x96, 0xEA, 0xEE, 0xB2, 0xC1, 0xAB, 0xA4, 0x96, + 0x62, 0xD4, 0x3C, 0xF0, 0x1F, 0x2D, 0x65, 0x0E, + 0x46, 0x7E, 0x12, 0x31, 0x8F, 0xA7, 0x8D, 0x7A, + 0x4A, 0x41, 0x15, 0x57, 0x90, 0xF6, 0xF1, 0xE8, + 0xE8, 0xE3, 0x57, 0x7B, 0x55, 0x85, 0x95, 0x97, + 0xB3, 0x29, 0x3D, 0x02, 0x73, 0x1E, 0x87, 0x1F, + 0x01, 0x89, 0x06, 0x88, 0x9E, 0x8A, 0x2E, 0xE0, + 0x99, 0xFC, 0xF0, 0x48, 0x60, 0x37, 0x65, 0x25, + 0xDB, 0x89, 0xC9, 0x7A, 0x51, 0x7E, 0x35, 0x92, + 0x00, 0xC9, 0x61, 0x3F, 0x88, 0xE3, 0x20, 0x01, + 0x46, 0x5A, 0x2C, 0x37, 0x02, 0xC9, 0x15, 0x0F, + 0xB2, 0xEB, 0xC3, 0x55, 0x18, 0xF0, 0x15, 0x1A, + 0x08, 0x8E, 0xB8, 0x9D, 0x18, 0xE4, 0x9F, 0x34, + 0x10, 0x67, 0x68, 0x57, 0x60, 0x61, 0xEC, 0xD5, + 0xD9, 0xA8, 0x3A, 0xAB, 0xD6, 0xD2, 0x7A, 0x47, + 0x3D, 0xA4, 0x08, 0x7C, 0x3E, 0x4D, 0x76, 0x08, + 0x19, 0x22, 0xB2, 0x89, 0x57, 0x84, 0xC2, 0x98, + 0x72, 0xB8, 0x8B, 0xE0, 0x85, 0xA1, 0x3A, 0xC2, + 0xA0, 0x06, 0x43, 0x03, 0xCF, 0x4F, 0x27, 0x80, + 0x48, 0x9A, 0xBC, 0xB3, 0x3C, 0xC4, 0x5E, 0xAC, + 0x8B, 0x85, 0x6F, 0x21, 0xD6, 0xFE, 0x12, 0x90, + 0x53, 0x2F, 0x65, 0x32, 0x8D, 0x03, 0xFE, 0xFE, + 0x61, 0x04, 0x47, 0x24, 0x6A, 0xB5, 0x01, 0x98, + 0xB9, 0x27, 0x10, 0xE1, 0x32, 0x3D, 0x2A, 0xA0, + 0xC5, 0x70, 0xDE, 0x1E, 0x10, 0xD7, 0x01, 0x50, + 0x4F, 0x87, 0xCA, 0xD9, 0xBF, 0x12, 0xEA, 0x38, + 0x4C, 0x43, 0xD5, 0x5A, 0xEF, 0x3E, 0x21, 0x8E, + 0x59, 0x77, 0x23, 0xED, 0x51, 0x09, 0x99, 0x73, + 0xD2, 0x56, 0x04, 0xDD, 0x8F, 0x5F, 0xDF, 0x79, + 0xFF, 0x16, 0x8C, 0xB0, 0xBA, 0x8A, 0x1A, 0x56, + 0xAF, 0xCA, 0x19, 0xF2, 0x64, 0x1A, 0xF5, 0x1E, + 0xA7, 0xA7, 0x84, 0x3D, 0xAD, 0xC1, 0x0E, 0x22, + 0xA1, 0x45, 0xFC, 0xB4, 0x13, 0x91, 0x34, 0xB7, + 0x48, 0xEF, 0x9E, 0xD9, 0x0B, 0xE3, 0x82, 0x75, + 0x80, 0xC5, 0xD9, 0xA0, 0x77, 0xA3, 0xF9, 0xCC, + 0x67, 0xDD, 0xCB, 0x28, 0xC6, 0xE8, 0x2C, 0xB8, + 0xAC, 0x63, 0xBD, 0x3B, 0x28, 0x4A, 0xE9, 0x2D, + 0x29, 0x84, 0xD7, 0x4F, 0x61, 0x06, 0xE3, 0x37, + 0xC1, 0x58, 0x20, 0x5D, 0x0A, 0xE7, 0x45, 0x29, + 0x7D, 0xED, 0x0F, 0xCE, 0x00, 0x95, 0x2A, 0x62, + 0x38, 0xA8, 0x1A, 0x3A, 0x96, 0x0E, 0x56, 0xD9, + 0x18, 0xC2, 0x25, 0xA5, 0xAA, 0x27, 0x0A, 0x6E, + 0xDD, 0x1C, 0x35, 0x6C, 0xC1, 0x26, 0x90, 0xF6, + 0x43, 0x1B, 0x34, 0xDA, 0xE1, 0x5D, 0x09, 0x7C, + 0xBE, 0x0F, 0x40, 0xD3, 0x24, 0x82, 0x0B, 0xFF, + 0xE6, 0xB7, 0x10, 0xD6, 0x36, 0xD0, 0xE6, 0xC0, + 0xBE, 0x65, 0x4C, 0x83, 0xF1, 0xDA, 0xDE, 0xCE, + 0xE8, 0x5A, 0x80, 0x88, 0xFE, 0x9B, 0x79, 0x54, + 0xA3, 0xA4, 0x5A, 0x76, 0xD0, 0xE2, 0xCE, 0x92, + 0x53, 0x7D, 0x9C, 0xDA, 0xA1, 0xED, 0x9F, 0x56, + 0x05, 0x0A, 0xA4, 0x81, 0xC7, 0x82, 0x5B, 0xB8, + 0xC7, 0xA8, 0x95, 0x21, 0x99, 0x0B, 0x0F, 0xD2, + 0x66, 0x68, 0xC3, 0x07, 0x53, 0x93, 0x8C, 0x68, + 0x5A, 0xF5, 0x6F, 0x5E, 0x07, 0x68, 0x70, 0xF2, + 0x6A, 0x78, 0xA8, 0xDB, 0x24, 0x6F, 0xD9, 0x74, + 0x38, 0x29, 0xBF, 0x50, 0xCC, 0xC8, 0x34, 0x82, + 0x69, 0x1A, 0xF4, 0x1A, 0x95, 0xE1, 0x31, 0x39, + 0x00, 0xBE, 0xF6, 0x25, 0x19, 0x5A, 0xF6, 0xA7, + 0xB7, 0xC7, 0xAC, 0xFA, 0x52, 0x6D, 0xC7, 0xEA, + 0xFF, 0xC4, 0xB0, 0x84, 0x41, 0x2D, 0x6B, 0x22, + 0x57, 0x1F, 0x8A, 0x97, 0x71, 0xEF, 0x54, 0xA7, + 0xA9, 0xB5, 0xA0, 0x7A, 0xFF, 0x52, 0xBC, 0x78, + 0x56, 0x8C, 0x9C, 0x2A, 0xFB, 0x31, 0xA6, 0xC8, + 0x87, 0xC8, 0x82, 0x72, 0x00, 0x68, 0x27, 0xDE, + 0x54, 0x67, 0x4C, 0x36, 0x4E, 0xE2, 0x77, 0x7F, + 0xAD, 0x15, 0x1B, 0xC9, 0x07, 0xC4, 0x84, 0x50, + 0x84, 0x45, 0xB5, 0x1D, 0xCE, 0x3F, 0x7C, 0xDF, + 0x73, 0x88, 0x3E, 0x6D, 0xAC, 0x18, 0x67, 0x2C, + 0x1D, 0x31, 0xD5, 0x41, 0x6E, 0xFC, 0x3D, 0xFE, + 0x5C, 0x6D, 0x3B, 0xCB, 0x67, 0x05, 0x44, 0x8B, + 0x02, 0xB7, 0xF5, 0x05, 0xFD, 0x1D, 0x7E, 0x13, + 0x90, 0xCE, 0xED, 0xD2, 0xAB, 0x08, 0xFF, 0xC3, + 0x91, 0x2C, 0x79, 0x06, 0xDB, 0x54, 0xAB, 0xFF, + 0xF6, 0x9D, 0xBB, 0xDC, 0x3C, 0xCD, 0x03, 0xE7, + 0xD8, 0x1A, 0x4E, 0x7F, 0xCB, 0x1B, 0xA3, 0xCA, + 0xDC, 0x14, 0xC5, 0xFE, 0x46, 0x38, 0x07, 0x82, + 0x5E, 0x9A, 0x77, 0x9C, 0xB4, 0x44, 0x26, 0xBA, + 0xC2, 0x27, 0xD0, 0xF4, 0x75, 0x67, 0x4A, 0x15, + 0x2A, 0x55, 0x2A, 0x61, 0x87, 0x55, 0xA0, 0xFB, + 0xE0, 0x93, 0xA5, 0xD7, 0xDF, 0x0D, 0x97, 0xD3, + 0x93, 0x39, 0x0B, 0x5A, 0xC6, 0x86, 0x17, 0x7D, + 0x6A, 0xA4, 0x07, 0x9C, 0xB9, 0x0F, 0x42, 0x15, + 0x46, 0x71, 0x45, 0x70, 0x75, 0x4B, 0xD5, 0x80, + 0x64, 0x62, 0x92, 0x50, 0xBC, 0x10, 0xA1, 0x68, + 0x60, 0x5A, 0x6F, 0x31, 0x26, 0xCA, 0xB1, 0x48, + 0xFB, 0xC6, 0xF4, 0x3A, 0xCA, 0x52, 0x20, 0x2F, + 0x7D, 0xEC, 0x19, 0xF8, 0xAA, 0x27, 0xC2, 0x23, + 0xD0, 0x8F, 0x60, 0xFC, 0x7F, 0xA0, 0xCB, 0xDC, + 0xA2, 0xC6, 0xC4, 0xC5, 0x13, 0x00, 0xF3, 0x43, + 0x48, 0x6D, 0xFD, 0x7D, 0xB9, 0xA8, 0x14, 0xB0, + 0x0C, 0x72, 0x82, 0x2F, 0x99, 0x64, 0x41, 0x2B, + 0xB3, 0x34, 0x73, 0x73, 0xF4, 0x26, 0x1D, 0x06, + 0xDF, 0x6E, 0xF4, 0x20, 0x1E, 0x31, 0xE3, 0x8A, + 0x01, 0x6C, 0xDB, 0x3C, 0xE3, 0xC6, 0xC4, 0xC5, + 0xB8, 0x20, 0x51, 0xF1, 0xD6, 0xB0, 0x30, 0xB7, + 0x2D, 0xDA, 0x95, 0x01, 0x0D, 0xED, 0xEE, 0x6F, + 0x69, 0xFD, 0xCF, 0x9D, 0xDD, 0x05, 0xD6, 0xC0, + 0xFE, 0x11, 0x67, 0xAF, 0x53, 0x94, 0x60, 0xFC, + 0x56, 0xBA, 0x0C, 0x5F, 0xA7, 0x7E, 0xDA, 0x65 +}; +static const struct +blockcipher_test_data aes_test_data_xts_wrapped_key_48_pt_4096_du_4096 = { + .crypto_algo = RTE_CRYPTO_CIPHER_AES_XTS, + .cipher_key = { + .data = { + 0x94, 0xD8, 0xAE, 0xD7, 0x74, 0xBF, 0x51, 0xF1, + 0x2D, 0x19, 0x0B, 0x9A, 0xB3, 0xDC, 0x1E, 0xA9, + 0x5C, 0xC5, 0x47, 0xC1, 0xBB, 0x94, 0xDB, 0xFA, + 0x2B, 0x1E, 0x54, 0xA5, 0x76, 0xAD, 0x07, 0x4B, + 0x46, 0xE0, 0xAA, 0xF9, 0xF7, 0x5C, 0x64, 0x2D, + 0x8F, 0x04, 0x17, 0x72, 0xE5, 0x8D, 0xFE, 0x9C + }, + .len = 48 + }, + .iv = { + .data = { + 0x4F, 0xAE, 0xF7, 0x11, 0x7C, 0xDA, 0x59, 0xC6, + 0x6E, 0x4B, 0x92, 0x01, 0x3E, 0x76, 0x8A, 0xD5 + }, + .len = 16 + }, + .plaintext = { + .data = plaintext_aes256xts_4096bytes, + .len = 4096 + }, + .ciphertext = { + .data = ciphertext_aes256xts_4096bytes, + .len = 4096 + }, + .xts_dataunit_len = 4096, + .wrapped_key = true +}; + +static const struct +blockcipher_test_data aes_test_data_xts_wrapped_key_48_pt_4096_du_0 = { + .crypto_algo = RTE_CRYPTO_CIPHER_AES_XTS, + .cipher_key = { + .data = { + 0x94, 0xD8, 0xAE, 0xD7, 0x74, 0xBF, 0x51, 0xF1, + 0x2D, 0x19, 0x0B, 0x9A, 0xB3, 0xDC, 0x1E, 0xA9, + 0x5C, 0xC5, 0x47, 0xC1, 0xBB, 0x94, 0xDB, 0xFA, + 0x2B, 0x1E, 0x54, 0xA5, 0x76, 0xAD, 0x07, 0x4B, + 0x46, 0xE0, 0xAA, 0xF9, 0xF7, 0x5C, 0x64, 0x2D, + 0x8F, 0x04, 0x17, 0x72, 0xE5, 0x8D, 0xFE, 0x9C + }, + .len = 48 + }, + .iv = { + .data = { + 0x4F, 0xAE, 0xF7, 0x11, 0x7C, 0xDA, 0x59, 0xC6, + 0x6E, 0x4B, 0x92, 0x01, 0x3E, 0x76, 0x8A, 0xD5 + }, + .len = 16 + }, + .plaintext = { + .data = plaintext_aes256xts_4096bytes, + .len = 4096 + }, + .ciphertext = { + .data = ciphertext_aes256xts_4096bytes, + .len = 4096 + }, + .xts_dataunit_len = 0, + .wrapped_key = true +}; + +static const struct +blockcipher_test_data aes_test_data_xts_wrapped_key_48_pt_512_du_0 = { + .crypto_algo = RTE_CRYPTO_CIPHER_AES_XTS, + .cipher_key = { + .data = { + 0x94, 0xD8, 0xAE, 0xD7, 0x74, 0xBF, 0x51, 0xF1, + 0x2D, 0x19, 0x0B, 0x9A, 0xB3, 0xDC, 0x1E, 0xA9, + 0x5C, 0xC5, 0x47, 0xC1, 0xBB, 0x94, 0xDB, 0xFA, + 0x2B, 0x1E, 0x54, 0xA5, 0x76, 0xAD, 0x07, 0x4B, + 0x46, 0xE0, 0xAA, 0xF9, 0xF7, 0x5C, 0x64, 0x2D, + 0x8F, 0x04, 0x17, 0x72, 0xE5, 0x8D, 0xFE, 0x9C + }, + .len = 48 + }, + .iv = { + .data = { + 0x4F, 0xAE, 0xF7, 0x11, 0x7C, 0xDA, 0x59, 0xC6, + 0x6E, 0x4B, 0x92, 0x01, 0x3E, 0x76, 0x8A, 0xD5 + }, + .len = 16 + }, + .plaintext = { + .data = plaintext_aes256xts_512bytes, + .len = 512 + }, + .ciphertext = { + .data = ciphertext_aes256xts_512bytes, + .len = 512 + }, + .xts_dataunit_len = 0, + .wrapped_key = true +}; + + /* AES-DOCSIS-BPI test vectors */ /* Multiple of AES block size */ @@ -3347,6 +4639,54 @@ static const struct blockcipher_test_case aes_cipheronly_test_cases[] = { .test_data = &aes_test_data_xts_key_64_pt_48, .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, }, + { + .test_descr = "AES-256-XTS Encryption (512-byte plaintext" + " Dataunit 512)", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_512_du_512, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + }, + { + .test_descr = "AES-256-XTS Decryption (512-byte plaintext" + " Dataunit 512)", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_512_du_512, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + }, + { + .test_descr = "AES-256-XTS Encryption (512-byte plaintext" + " Dataunit 0)", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_512_du_0, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + }, + { + .test_descr = "AES-256-XTS Decryption (512-byte plaintext" + " Dataunit 0)", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_512_du_0, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + }, + { + .test_descr = "AES-256-XTS Encryption (4096-byte plaintext" + " Dataunit 4096)", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_4096_du_4096, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + }, + { + .test_descr = "AES-256-XTS Decryption (4096-byte plaintext" + " Dataunit 4096)", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_4096_du_4096, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + }, + { + .test_descr = "AES-256-XTS Encryption (4096-byte plaintext" + " Dataunit 0)", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_4096_du_0, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + }, + { + .test_descr = "AES-256-XTS Decryption (4096-byte plaintext" + " Dataunit 0)", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_4096_du_0, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + }, { .test_descr = "cipher-only - NULL algo - x8 - encryption", .test_data = &null_test_data_chain_x8_multiple, diff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c index d342c7b859..53fd4718af 100644 --- a/app/test/test_cryptodev_blockcipher.c +++ b/app/test/test_cryptodev_blockcipher.c @@ -36,7 +36,8 @@ verify_algo_support(const struct blockcipher_test_case *t, if (capability == NULL) return -1; - if (cap_idx.algo.cipher != RTE_CRYPTO_CIPHER_NULL) + if (cap_idx.algo.cipher != RTE_CRYPTO_CIPHER_NULL && + !(t->test_data->wrapped_key)) ret = rte_cryptodev_sym_capability_check_cipher(capability, tdata->cipher_key.len, tdata->iv.len); @@ -145,6 +146,12 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t, nb_segs = 3; } + if (!!(feat_flags & RTE_CRYPTODEV_FF_CIPHER_WRAPPED_KEY) ^ + tdata->wrapped_key) { + snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, + "SKIPPED"); + return TEST_SKIPPED; + } if (global_api_test_type == CRYPTODEV_RAW_API_TEST && !(feat_flags & RTE_CRYPTODEV_FF_SYM_RAW_DP)) { @@ -450,6 +457,7 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t, cipher_xform->cipher.key.data = cipher_key; cipher_xform->cipher.key.length = tdata->cipher_key.len; cipher_xform->cipher.iv.offset = IV_OFFSET; + cipher_xform->cipher.dataunit_len = tdata->xts_dataunit_len; if (tdata->crypto_algo == RTE_CRYPTO_CIPHER_NULL) cipher_xform->cipher.iv.length = 0; diff --git a/app/test/test_cryptodev_blockcipher.h b/app/test/test_cryptodev_blockcipher.h index a06241b06d..dcaa08ae22 100644 --- a/app/test/test_cryptodev_blockcipher.h +++ b/app/test/test_cryptodev_blockcipher.h @@ -97,6 +97,8 @@ struct blockcipher_test_data { unsigned int cipher_offset; unsigned int auth_offset; + uint16_t xts_dataunit_len; + bool wrapped_key; }; struct unit_test_suite * From patchwork Thu Jul 15 15:08:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95902 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D188DA0A0C; Thu, 15 Jul 2021 17:11:06 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F28BD41342; Thu, 15 Jul 2021 17:09:38 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2077.outbound.protection.outlook.com [40.107.237.77]) by mails.dpdk.org (Postfix) with ESMTP id 6C27D412C8 for ; Thu, 15 Jul 2021 17:09:32 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KIWTneAbkXOr+HTGa/Kx7f3VssvgMvAOq1/V/OM1siKuqDDHdYbMHp5QHNgSM5DTyKOTc08Z/NjdyVwYkwZzZYJesQOO+BmXLmy/BHK8cJxrLeLB3BwEtT8giZXM4LZOwVODfwBACp3beivg/Q5GqhIcNneYggac0FqZQeIrNW7uaf0xONv7xXRSImvuMKKfGL3Z3v/4bKtcFV8RHJKjOzHkCgamNBLGypUfFzpGlWunbVu5F5qkRaEPnWn4DHKQku6EKXMTEf9X/uxqZ83RibOcPoorels6wDd9nM9sZHaFbfVnz4NkQf5/nK3jqcWlW6DxYZwqgKIBGzY/+KapLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XtbNZir3/ly7Gdrd8NsQcO5P4B/xciXnbMZtoizDbow=; b=Mbtp1y8X3zoNES/Egpr+zvQR0rGI1J2QOIIERA84JlUZbc642hTJuamjQJOBwx8n1dt1da86L9Qq0JJr2lQ80EnSpKR7Cx1XbVGz13HJqpLpgbVlswN+C7Ojqk3iKS+aNJlKoENc9MLRwqAhJHCfBX3dNwGByCk1ZGtwNTkVQ583GvrL6da30NuVkj0XZMI28+1XheCGzpOVY5/r4EC6SHoAxdVTDsGSgEy0f+XIMtMoEgJAIpzbR07xkjhmhxbgelSM78B1nBipvzGz1zE5hCWcRFvqcoxVlgmuDT5wUIVwodbsMOlvAbGEqeux9GyaMa+2452LIzHFpQbn5fwWJQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XtbNZir3/ly7Gdrd8NsQcO5P4B/xciXnbMZtoizDbow=; b=ahKU2KgKiHBgwIaaWVv9/Ada7LaFV/3M23eZqHZxmJilS8plItiQCbz+59eiDrKNLpZWk+UbeMYhAXALZc6Oq+5GPpJ9CyZigPTCEpTuwNP68rxnWx//Olur2q0KExLwLU7PGdQE/VLeRX2GN1COdbYaUijPujI3TJtn8h7xu7NFXSELSCGRpjt0yu6NKw3oFaUwJAEb3HhoPWf8dqsAyUyfFCbtOxramwyF+T6wgc51NkuDM7NNZYsE0ajzmF20z/NyKIJ9RUGQcEodKLPCtbkX7WxGuy5q1u+lVFOZ3u7Dp8MSY1vPeEIBE/1ehmifgTIF8lbIHul4hr3C6wczkw== Received: from MW4PR03CA0248.namprd03.prod.outlook.com (2603:10b6:303:b4::13) by BN6PR12MB1873.namprd12.prod.outlook.com (2603:10b6:404:102::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.22; Thu, 15 Jul 2021 15:09:31 +0000 Received: from CO1NAM11FT007.eop-nam11.prod.protection.outlook.com (2603:10b6:303:b4:cafe::65) by MW4PR03CA0248.outlook.office365.com (2603:10b6:303:b4::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.23 via Frontend Transport; Thu, 15 Jul 2021 15:09:29 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by CO1NAM11FT007.mail.protection.outlook.com (10.13.174.131) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4331.21 via Frontend Transport; Thu, 15 Jul 2021 15:09:29 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 15 Jul 2021 15:09:27 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 18:08:17 +0300 Message-ID: <20210715150817.51485-17-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715150817.51485-1-shirik@nvidia.com> References: <20210708152530.25835-1-shirik@nvidia.com> <20210715150817.51485-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d07c60b6-e1df-4734-2ee1-08d947a28b59 X-MS-TrafficTypeDiagnostic: BN6PR12MB1873: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1923; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mWxbzQ+9cMyIih03ca7KbzEjHFrwLfSobcyc6TuECPJL7u8Gjsrp5CcrCkMNGjS04CjKJfjglD+p/S/e5WO+tV9TORYjdym0UJpYXbpEipSeH/XOJJQuHokh0HqWXkFuPgajYb/6S7KpqA76GDILz9PqCZmgViI50UaZaLHmuFxKt4y5B9o7KI0sw6VFGEvNT35b43XBOK18zzY0W/J0RrshV2Ld5/eX+m7CwESVmhWkg/JFou7zKN8XVB1AjCXIV04DaQ1FWhL/ksTZUhUGSeUCHlW7rtKDSIyQEdsuHtU/dTpgo+5ytJpXK0rlYxCEQeH74TN07dsqvZ2xfs6btauVe42OvlabQp8TzgLlRFgoyqJctKHKD0I4kdYHdaxX5158a4iFPcrT60tnBrW7CBOmEJgf5lsxpEDw1RBnu04I9BDzTeuWKOhBiZi4D3kAyFBSw7gn3nhJ4lBxOnpVUNLQI5vrChoeu+PkoYxGHQLZwUa+E4XuRJ+C15pZvxYD1qZdZwidkLuyq6U/crcdbDPdPgVV+Er0housFjCDcVQHY7G+y0I4wzwcbv5iIRjiLbUIcJevKo9XlRGV3/JCmctL6PvYcs/rn5EqgXqgcQMSnAyLZLY8ti4sLpGGwSuJ1uA60uZUNjuMyeXDzRgaD1/S1t3tWvwWuXJxKe6os/4I4kfL4B/3N+ICHD335iaSV30Meq8kq4TODchGPfEHTfEv+NeCUBQvNRe287CitZc= X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(346002)(39850400004)(136003)(376002)(396003)(36840700001)(46966006)(7696005)(478600001)(70206006)(186003)(6666004)(4326008)(356005)(36860700001)(6916009)(7636003)(26005)(36756003)(5660300002)(2906002)(16526019)(6286002)(86362001)(426003)(2616005)(47076005)(8676002)(316002)(1076003)(70586007)(54906003)(34020700004)(82740400003)(36906005)(82310400003)(336012)(83380400001)(8936002)(55016002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 15:09:29.6348 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d07c60b6-e1df-4734-2ee1-08d947a28b59 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT007.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1873 Subject: [dpdk-dev] [PATCH v7 16/16] test/crypto: add AES-XTS multi segment OOP tests X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" The AES-XTS algorithm can supports wrapped key and data-unit. The encryption/decryption can be done out of place and using multi segments. Add multi segment and out of place tests to the recently added AES-XTS vectors, which support using data-unit and a wrapped key. Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad --- app/test/test_cryptodev_aes_test_vectors.h | 63 +++++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/app/test/test_cryptodev_aes_test_vectors.h b/app/test/test_cryptodev_aes_test_vectors.h index dd7ffde685..f0a7376cac 100644 --- a/app/test/test_cryptodev_aes_test_vectors.h +++ b/app/test/test_cryptodev_aes_test_vectors.h @@ -4688,9 +4688,68 @@ static const struct blockcipher_test_case aes_cipheronly_test_cases[] = { .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, }, { - .test_descr = "cipher-only - NULL algo - x8 - encryption", - .test_data = &null_test_data_chain_x8_multiple, + .test_descr = "AES-256-XTS Encryption (512-byte plaintext" + " Dataunit 512) Scater gather OOP", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_512_du_512, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP | + BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "AES-256-XTS Decryption (512-byte plaintext" + " Dataunit 512) Scater gather OOP", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_512_du_512, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP | + BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "AES-256-XTS Encryption (512-byte plaintext" + " Dataunit 0) Scater gather OOP", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_512_du_0, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP | + BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "AES-256-XTS Decryption (512-byte plaintext" + " Dataunit 0) Scater gather OOP", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_512_du_0, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP | + BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "AES-256-XTS Encryption (4096-byte plaintext" + " Dataunit 4096) Scater gather OOP", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_4096_du_4096, .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP | + BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "AES-256-XTS Decryption (4096-byte plaintext" + " Dataunit 4096) Scater gather OOP", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_4096_du_4096, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP | + BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "AES-256-XTS Encryption (4096-byte plaintext" + " Dataunit 0) Scater gather OOP", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_4096_du_0, + .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP | + BLOCKCIPHER_TEST_FEATURE_SG, + }, + { + .test_descr = "AES-256-XTS Decryption (4096-byte plaintext" + " Dataunit 0) Scater gather OOP", + .test_data = &aes_test_data_xts_wrapped_key_48_pt_4096_du_0, + .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, + .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP | + BLOCKCIPHER_TEST_FEATURE_SG, }, { .test_descr = "cipher-only - NULL algo - x8 - decryption",