From patchwork Thu Jul 15 16:41: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: 95907 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 73DF9A0C41; Thu, 15 Jul 2021 18:42:08 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 61FDD41264; Thu, 15 Jul 2021 18:42:07 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2085.outbound.protection.outlook.com [40.107.223.85]) by mails.dpdk.org (Postfix) with ESMTP id E5BA44125B for ; Thu, 15 Jul 2021 18:42:04 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l8q6IUiHKGbn1OUL2LwU//RUwCqnv9/uRR6DYUo8u6POqM8wzUh/IjSXQtouE4eW305iD/VANW3fxfYzOh8XoOZwM+yoE57NTsAXwUCwFaUj6CzrDcNiwP7KQ/PjoP7npk8FEpP9V+UTewFlQSyhQ9kLINYscEXk1eNs3M8LXymRqFUH8PjpG3l8DFBKCGAhiFHF9uLX4mFsJgBnzV3UPiMUb2yRULF777jcmPbW3IaCbU6sueeBflTn91pRcz6pIhQbqDOYK28JiAgOtdrtV0Q9xqFqnlpvus3tOWBpnjbprH25BEUaqfNgk4rK59IPyz+QXUGZFaexMST7k9TkHA== 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=cTuU4cYaZXvXZCklKVLNnNhYtMjnUi0eYgqYQ6rE3zQds6msV1N8/TjUbFNvgRlxNUp68gVgYYNVsSus1k4Qf03b5kTxX3P76sUGc/xWajXf9fapu5oDYKUIHyMH/2Caw5XW7q7wm5ghazCzMFf4G4PwmQgNTqkLQhqI1ZbNsZr+1X8zytajuRU0w6h3nAOt3NlWwe9OwWxa9AoNfopT9VVncM61tEKoFv0hnuGurLOVB84afjXvLMoqUZLUor2wyGGeD5I6SAaZ6gezzE327ht0ooFKhZv0LSp7k3y6FJ3DF/nNR3PEOv+c7W4pcEHZKoK2hlY2HYJSOfk4eDY+Pg== 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=r9/drh+MkTiIDvfIpwDCK6PT7MWae9fbxXHbmEqoAOQs3yt5GAmFmiXRLLbog3fWLNF/IePcOIxJ0O4nqQQINT/VHfg1EwTcD3W7JYGK4QTKq+C4jkS5RuIkILkabuUe7LN5+JmbfUEdjIf2FJgweorJ5BRYh4DAWssJ1erZrOUZ3y+/Eyq2oCMQF9fg3+0MATWZAoaYjbvhG/CD50gN8YW9dZhqTD5kuF+LYWnJdcTHH6LkLX7m8g1otI8Ilp4sL/P150TORYXwSPeBjnmF1eyV7BS4nvz9DiokgBETkPIa3lcqzm5vY9XG3hYMiJaB8DBM9TwX+MNFp3OjqK6EVA== Received: from CO2PR04CA0095.namprd04.prod.outlook.com (2603:10b6:104:6::21) by BYAPR12MB3109.namprd12.prod.outlook.com (2603:10b6:a03:db::17) 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 16:42:02 +0000 Received: from CO1NAM11FT024.eop-nam11.prod.protection.outlook.com (2603:10b6:104:6:cafe::a9) by CO2PR04CA0095.outlook.office365.com (2603:10b6:104:6::21) 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 16:42:02 +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 CO1NAM11FT024.mail.protection.outlook.com (10.13.174.162) 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 16:42:02 +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 16:42:00 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:11 +0300 Message-ID: <20210715164126.54073-2-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c368688c-c126-4237-d6f5-08d947af791b X-MS-TrafficTypeDiagnostic: BYAPR12MB3109: 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: 1YosM6RQI3K72xw/saHS4geTfbgW+inus+EmlySnwvHk7APH/5vUpAkF1zL2i1nn9PHmBdDF4P9fsy1CoETPOlwV8w5W93RgvWLW9NSEUfIKURLcvXKpExoeL1XVmhDJGxrfuCJpgwHxyZSy+8fdy/UNblSZfnbMkvFn2bPEU4O/vsu0Gn/uiGXApsadBemNBLhF3elgrSKgVU39yuStQAvG1C536vGP6QU1pgbX7QTdl9a5Y5gOpzL6FSk5xKOnUUlGg8bVmF+DGjBerc7hbpLOiAu2YdrrZpA7+yvbOX1QBDci34dGcqzw71dQju183SszhNDVMKj+I/KcIJwpuxG5Lfrjehd14XMjc4OD7Gd+1ORW5d70BXTJyxzandD2zyewnuQdvHAPCBUQw4SdjaE4j0RVk7V+/yF/zzwDAGLIdzorhV0x20jtYMQYFFs2wYjKQNuqI2nYDUwFLeunFpW2/DY/Pc+Xpmfll0pTRtk91iw1BEoAMDdl7TCyOvZshOxeESUYFWjMVWJMYxo9C/rY5oJ7wkTqnDOqilYNkVg6CQo0dUYZmJhxTbY1PdqCZn069PRJw5E30eFgMe4tyjcQZSVrtcLqz8e3COlesFY6piTmRchUHr5eRnT2RwIZmBK2LMPHKGsDqzjj6z4KD0rnimxdkH/oSl1fT/EYwkv5vr9ZT0i+GU52cpg1aAL0aCU2jieupjVyxRHuOi8PCpuZ3dQbUxmKDeP85W0v0Hw= 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)(46966006)(36840700001)(5660300002)(86362001)(478600001)(4326008)(36756003)(70586007)(2616005)(83380400001)(7696005)(70206006)(30864003)(36860700001)(426003)(2906002)(16526019)(36906005)(26005)(186003)(8676002)(82310400003)(6916009)(316002)(34020700004)(8936002)(336012)(7636003)(54906003)(47076005)(55016002)(82740400003)(1076003)(6286002)(6666004)(356005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:02.5283 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c368688c-c126-4237-d6f5-08d947af791b 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: CO1NAM11FT024.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB3109 Subject: [dpdk-dev] [PATCH v8 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 16:41: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: 95908 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 1197EA0C41; Thu, 15 Jul 2021 18:42:17 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1D03A412A5; Thu, 15 Jul 2021 18:42:09 +0200 (CEST) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam07on2087.outbound.protection.outlook.com [40.107.95.87]) by mails.dpdk.org (Postfix) with ESMTP id F28B14125B for ; Thu, 15 Jul 2021 18:42:05 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N992fkHeJ91i+RovF6vg8qMCcAKLGXyFClp7dXc4XNny+j9B2eXK99SUxKHuvfUSvsbyI7Co8Y2U+w3xDr6KBXkFaClHRr+us+mt/oG3U0ZkxElBI76D+Z+/J6ITlxl3sDMksGUBSF2vQMPA7XRzv60dp4rswMBa1/tEdHbmARh9Lq4by1s9Sia5pbRKIwhwAdsCiFScebf1LNnca2912QIuY19Fq+4qj5PGETa3vS4ecRzXMHmshwMMnWtII5HW9afEZE+fYMWB1b9QzMjj31G3SlRgHYx55sfxvBQsyT9dE4Nc2fuT6ynwlDJcCkLEoAmM3Ayle8ADxxNxUw9GXA== 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=masgFBFiWWVH8Iw474a7ii3R52o9gJVxhbOfU4Djq2eEA58EaQg3XmsIdtLFtgwCJS8bBDAv9LDIyj/P7DLbWUOogfWvIA4D/qaCN2xJZ9DT21QJ0/vKh0ogVcWxtSv9vfmSeEUtXscpfY6zVmCAzOrvC2ik+KSEN8AJGxDnrgUnazSwrqbeAtLylrvmczZ2XtaqsUEMYiSoMP5Ex4F58opargZI/FXzzxZ9Fgl0Qv6yJSZ7Yhp7uOIVVdr3FN2nSu4tr9X74XtAkR45SWrVsR+swhy8duO7+GKT/83h1joNXNPMrxC7Yl2d1yF5zwhoeoYg8LTjtMHnP5Fwogaz7w== 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=ElWeMUIGSEpPjPtQ6SQDhzgcx2P9lZmasAeToCFzsiP+ybwjIGDTfAieqa/eg5X0Oab84hlbD+GHDm6+RPKjS+liF/JJMF25p90uwtNMG7pXfw9bs6q61T5WOPMw/6SpB4KmZ308V89aa2h38C/ovVsabU9mmDmQIkGlnNuxJwDFE441gW7Z2AFohoMSrkFC2mhkl3nYAyYDQxPg6naO3eOliW5muV9EXz1jPxh6FKPf6DlQmwF4pCnQpgQ4/w0QiHneXl7I+mTzd5bLcv2ugC0PePVAY1bU0sYs5VqhK6tA3rj6T/yIKoxijHGAOHVAKJaTa7/mvCNA8k9MYLkgbg== Received: from MW4PR04CA0025.namprd04.prod.outlook.com (2603:10b6:303:69::30) by CH2PR12MB4104.namprd12.prod.outlook.com (2603:10b6:610:a4::12) 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 16:42:04 +0000 Received: from CO1NAM11FT066.eop-nam11.prod.protection.outlook.com (2603:10b6:303:69:cafe::57) by MW4PR04CA0025.outlook.office365.com (2603:10b6:303:69::30) 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 16:42:04 +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 CO1NAM11FT066.mail.protection.outlook.com (10.13.175.18) 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 16:42:04 +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 16:42:02 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:12 +0300 Message-ID: <20210715164126.54073-3-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b8c5764e-5d0e-4715-f5d7-08d947af7a23 X-MS-TrafficTypeDiagnostic: CH2PR12MB4104: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3968; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /HqFgXFu9NmK8Wu9okAS5VkIX7C8zMgh3cxeTd/ZBhFyzbK1sNns6mcnOEW5mfFXgcAFeHJ4IABFTjQ8QEiP0K1tyBBtXMEYm5D22x9wjy8mAI7ySNOzWOpfDcLNltNypca+wT5nf1SX4edl6c6Bk7SXw6Ji3BDm0K66E5q8RSQzt1G8tJ0TjC63tAjS952bdHshJpLrtHBfibshhjcClfynbKmZebOkmrLoqDU/wukqfJ6jeif7b/7yAK3Jc/whrfmWP0Xf7nY2ezG6fXs/oJ/2+tPbpN7pFpZt9kDLBeKcFVYP+Y17rdSAIIqYeX3zUSnzwzu1Vwn9T27oIpcUGXcYSocEgb9TRH9vfnsZBZEKbjpUEaSTjjpudFaipU5Uf13OVU3O/QsJ6SlPRAyhZMPCj4kDsuRf/ZKI8RoCRfRl5O19pQ1k+ZHZGUsAOEt/PMxanuUsqVxKiqOoz2hfxnRy/mAcMZJQD5+VXniyZwo816ZTl65nfIXXshJo+XPkyPT80upQpPEsaU1/8sQXr9LjeiCD4oPa8J+LiyKu6Oc0XkdSFRLJgnK5EVknxN5aJixxcCLrQsD4xhP9BcGdppX9RhEeoLWPDVyHvetvRi3onuAtDsfTBnHl1HtxyzHnkD8wHprFhngBIvIMSZ7nixrpHs+hhIvxiMSXwsZiFGOPUABa6EL+vQZrMK4eDbC3PD/YhEeepKnPjgKMBjWI6zryEH/8l41BGzRtGiYkFww= 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)(136003)(39860400002)(376002)(396003)(36840700001)(46966006)(7636003)(6286002)(7696005)(82740400003)(316002)(55016002)(47076005)(70206006)(86362001)(36756003)(26005)(6916009)(1076003)(8676002)(356005)(70586007)(34020700004)(8936002)(6666004)(16526019)(5660300002)(2616005)(82310400003)(186003)(83380400001)(336012)(36906005)(2906002)(478600001)(54906003)(36860700001)(426003)(4326008); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:04.2302 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b8c5764e-5d0e-4715-f5d7-08d947af7a23 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: CO1NAM11FT066.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4104 Subject: [dpdk-dev] [PATCH v8 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 16:41: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: 95909 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 31917A0C41; Thu, 15 Jul 2021 18:42:24 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6512F41287; Thu, 15 Jul 2021 18:42:11 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2081.outbound.protection.outlook.com [40.107.94.81]) by mails.dpdk.org (Postfix) with ESMTP id F129141275 for ; Thu, 15 Jul 2021 18:42:07 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m013+Ijig8x70LtkuRW1l6GLuLmwN3IACTO/fYWZcf2RSvXbh5d8ig59eVLlKPX7UYoeCi8EONEuiAA7+271NBP7c//Gw13iTAOEXIkhr/BtQM3+/mSupK9YS3i+8/BHRSXFKNmd7GLCsev8ODyonZMtJiSEKSfLHe3vqPhLwUDLkoFZu+sRv4RYjwU6kqbDhil7QxNDmi2p6/cllG9ifYOTdCbsUUzq2/K0oBFF5dmSfE31q5u6JpXAc0yCDKd24xv26K28jgFKljoGIHluXayptTE1T2vDanS0cEA2JrP8iLShhnpCKktMLR+zx11n+FngxOb2c+zLaZ8Ef8QFOg== 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=cP2ZeazIPq1YQUMMivAuHnw1hnwlU31ef9CwcWNqiiJHC40ALfvK/Rry3z1/zgQZ3ojz1Q6gsSC/tHBE7MIyzhHF/k1NNfyx7iVTw6bn7xwmyuIHrJWxn2BZE889/YB2lBlZk/vjn/d5Hkb5YcI0KJlOe/uGyE1cmshOyITnawawq1vPgDVlaKIacQbgg6zytVnCeKW9D39jtgAHClJFFKFQ2yVwW0cXQX9xpMs7ipWpZ7pHQgnmTxcHrWIVD4SycfnHg1TTdF5FKxhEgENODAGCdQAvXcdPyPbhWPWfrlae6qsQYdXcRjcJNxRtdSYokL3oSxOxXBrBLf5EqbZ8Xw== 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=kVVoBtLg0uwB6f/HTtA4KwGKMc+CB27cRJ4w85Rdu2GkmP6jrzkiQckkXvFrYy+n9gcpApGfbFMYMvgXMOd94gMkG9PkLrNxKsm45Kic6TSXwoKy2j2EUkEqP97By4PTpcJo5w0PB20TYoxduxTgxC0H+9ZqWau9dybr2EZ1eBOLKd4yJ89etiPxSkOOZ+3+df1NybxCDqkfN1PdSXykvPwD7xsMLDgDnKvJWmaumBgjO8svaNiU5vM2xSFjxPY+jjqlE4J/V194dmd6oNOUI+OfeXHGJ7MvwHTF4kaHBwb3+CCh8e5QsSokWc7qcW9xyFOlpq+Ghyl5kqjKwuU0RA== Received: from MW4PR04CA0025.namprd04.prod.outlook.com (2603:10b6:303:69::30) by MWHPR12MB1533.namprd12.prod.outlook.com (2603:10b6:301:f::8) 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 16:42:06 +0000 Received: from CO1NAM11FT066.eop-nam11.prod.protection.outlook.com (2603:10b6:303:69:cafe::57) by MW4PR04CA0025.outlook.office365.com (2603:10b6:303:69::30) 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 16:42:06 +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 CO1NAM11FT066.mail.protection.outlook.com (10.13.175.18) 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 16:42:06 +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 16:42:04 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:13 +0300 Message-ID: <20210715164126.54073-4-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1cd0b00b-a4b7-4158-0bff-08d947af7b42 X-MS-TrafficTypeDiagnostic: MWHPR12MB1533: 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: D25bhYYM8MveKs0BGQ/rvgAvYo+iiO/27UqwmuMLuuP6futc6EpVwwlUB3724C/ivM5aHRV88tpCGaOmQ5mz7UcZlQH9pP9awRqIvNlsITdGDNrbAfmhNZDo0zoenxAvO+PGjYbRojOt2ED2W6Bdqdz3fys80+PbgWnp37+ZPVxTJI1T6oh7e4j1RqJRqoNmnZSQZzDnMQAtdpTC2XcJ3GK3l41/kiQc+XO3Olneal3JaFNgN8G5MfTJ2YeayfTBhVJyqLcwArFOADH7eLsoVKQTh6Gmq3WIDGg52196pEAee6iknIVs4ZzNrhHVbHvO8IUIG5CQG5HVibX0Qv5oabmUxM5mm1k2o/FkP9Cj9Y7CdJuxU9OqNZbajRscA+Y841QB0qtjYfBc4dXe8J6drXrryBicytzjGmPWafGJdnAyKkUPiR+lkQa+iW+mw2dKSJcP0g9PENDtonMGWP20kef30NfB7ONECxhhfepJcL+DdQLmHma2CSsxgLVeOQAScIUh7QtZ2QL9LJglMzMOOX1azJZVZJLkWZalv+qAokclptbWPPsrGK+/THW9uPsBRXgQjS7jyfzhVGuIwfN7ZCTGAOolfy/nnY3kVJprFFBTOOPjLUcoBXYlmF8aG3WRZuEAcXLu/5efNfpaSNZvfzDy0xIGs2mgaUUpWN6KKkymjSd7ME0GGuudB2MwbHZbQH5KLDWWvmr6pKI+tObwP4aHTWVOMLVnok8LDbRHOk8= 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)(39860400002)(136003)(346002)(376002)(36840700001)(46966006)(8936002)(2616005)(1076003)(356005)(7636003)(36860700001)(6666004)(55016002)(4326008)(47076005)(8676002)(86362001)(426003)(336012)(36906005)(478600001)(5660300002)(26005)(83380400001)(7696005)(70586007)(54906003)(6286002)(70206006)(2906002)(34020700004)(82740400003)(36756003)(6916009)(16526019)(186003)(82310400003)(316002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:06.1371 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1cd0b00b-a4b7-4158-0bff-08d947af7b42 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: CO1NAM11FT066.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1533 Subject: [dpdk-dev] [PATCH v8 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 16:41: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: 95910 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 3FC4AA0C41; Thu, 15 Jul 2021 18:42:31 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7A6D5412C5; Thu, 15 Jul 2021 18:42:12 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2054.outbound.protection.outlook.com [40.107.92.54]) by mails.dpdk.org (Postfix) with ESMTP id BE61C41289 for ; Thu, 15 Jul 2021 18:42:10 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kvI/ENspMQjgPN72i2GEKmJNLw+to3CYwBvIda1pLjdkaSjeCq6n8SuzeM8iaaItQgBGXvC3gwmnE1JlSkaMGY8VmzE0sLXyifGgKQY5dWqzGv+9FEr0PSNa0Faap1cerELh9LcFtb1au74D2cSArXz1NOHwzXdYTjY5Fdj6CvsLCpJGoO83mKeyLvW5Dp9ga9atlj1k3PD1ULRpjOB9oukcGFl6wqXDT3KsuZyO/8TEsU6P3idXep0c8hIdgUCDe9yUxUpOjvEJ+iYQCIw7YsqMaog7cSlHO3sgY0U94hJOWD0/rqSWRXZLtlmVere+bfbvBuspmvwUnfS7EjeqkA== 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=YiAc9eKtHUzQnAkxpsMA7GxESwQa/akenygADvoWltpkhPLOiToNWwBMB0Fpgy/XUH+91bFqWtFvgU8udsgRkDfdx9ImvvavZH71yLzfeYVWK6pD9GJ9N5RMSRstVJV/qQyAyX1AT4HEluFPm1nPJ3c99rqRSzxSmpbDbP45KG8ab85QJvJtqi7+zbOR25qHXhY443s3sO3TzvFfVVVye32igifh+lxHXuhZ1f8O3zEDuMo4N4MA6vV44sH7Nov1JsCuX5La4T6BtimbOvYzzqviDy7cSWS2etZ96nLQU75ZlizOaUCWB8HbSMDR6rxGeHl8zni/123hiqIGUmiLfg== 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=IAI31F8TFsTE1PdJsCXjE/I5w2OvzyPm/s3x5XfT2FjKvHjYJfdPUWDGRvyz+pg1A9hjh1DbHj2e8pvA8Wmh8Ml/b538rdCVbKaP3L/n0cuX+LcGzl8yqZusRL/FmOA8ThvXo+rifkj1jLwQKSWNmJQaTxOGwS5Fy4JPBVJY4CVLJwrIzkNOIrX9VEXdD4ZMJtOQDlvnckjVZiTeVb4KLdyqv6jmwuurheJeeVJC+sQAloLkgMOXaScC8qkxHEjXwBUqSrPIL7S1cnbwAcIfkdmjZxC0aQbUnp7awMDSvjx79ciKeuLSo6xzX3qFqfPA+dTsyjVOiGwt3kMvm1utSw== Received: from MW4PR04CA0020.namprd04.prod.outlook.com (2603:10b6:303:69::25) by CY4PR12MB1446.namprd12.prod.outlook.com (2603:10b6:910:10::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.22; Thu, 15 Jul 2021 16:42:09 +0000 Received: from CO1NAM11FT066.eop-nam11.prod.protection.outlook.com (2603:10b6:303:69:cafe::8) by MW4PR04CA0020.outlook.office365.com (2603:10b6:303:69::25) 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 16:42:09 +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 CO1NAM11FT066.mail.protection.outlook.com (10.13.175.18) 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 16:42: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 16:42:05 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:14 +0300 Message-ID: <20210715164126.54073-5-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 546421e6-920d-4aed-0386-08d947af7d13 X-MS-TrafficTypeDiagnostic: CY4PR12MB1446: 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: 0FJxidbx1GC0vpTUEKjn/4Et/QRPhClWxPOPBVbuqcnDBG0OR1bgFx43rIkEHcvt/MQX/EqRLQK0Dffu6duxaF8diLgydb5MBeAaxJIbGkniiT9oEqBXdXpfakB4wEPTSOIoHAEz27GrCJ3RG71BAyW6YJHLPJgPdcSy7sqvmQg1utndRvSWJOCjx8ryM2Uyck7NCaV7MS9vZbevRvrKzIjBRNyS0Kx2PJecH74tb5MrunpkhlzseXxFmQVRQywd0op+M7fjr81/nI37bod68mjppp5tIifhemLZ5rQVRHGFvsGkTXS7x83+WTm7f6H8FzUzrHuNYf73Kdav2RQQBlVZn//PGe7CTQ/4HpPb9XLZQuD/UnWEOIZDoPcshKE98wSZFhkfJyBKok/Zvor3OFKPgW8nAB5Iu6gJmdp7bGHh8xxmgdaYqRzFpVTsQC8ilkkt7seLiWNd7EhQzJ7bh8Us0a4SIyLc4J7ys2jJM6vP3DOOEcG1NYrp0UVku8Lv/llWOdBc4uR+aOEsFhiWeqE7Scn282drUo4J8nxI3+ni5ty8HBVOz1uxd9gy+CYK/ivAGLgVueD8N9umwvziQl2qR1sR9xHUybp9eHhKDh/z3Oxd9XpS4rs+xBkE8YWC2+AMB3jnftpO4sUqIcektv5f32YNtcRsV6JCKifWiUreJHG/24gVSBqBbUaIZWO2Qy4Srp9AhPpsm4l9x+YZ9z9Wd7dSWnQeErptmQgyriU= 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)(39860400002)(376002)(396003)(136003)(46966006)(36840700001)(70586007)(7636003)(316002)(6286002)(47076005)(36906005)(26005)(70206006)(356005)(1076003)(86362001)(8676002)(83380400001)(2616005)(55016002)(8936002)(36860700001)(186003)(2906002)(7696005)(6916009)(36756003)(5660300002)(16526019)(82740400003)(336012)(34020700004)(478600001)(4326008)(6666004)(426003)(82310400003)(54906003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:09.1753 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 546421e6-920d-4aed-0386-08d947af7d13 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: CO1NAM11FT066.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1446 Subject: [dpdk-dev] [PATCH v8 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 16:41: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: 95911 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 D1260A0C41; Thu, 15 Jul 2021 18:42:39 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 18ADF412DF; Thu, 15 Jul 2021 18:42:16 +0200 (CEST) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2077.outbound.protection.outlook.com [40.107.243.77]) by mails.dpdk.org (Postfix) with ESMTP id BECE1412BD for ; Thu, 15 Jul 2021 18:42:11 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I1H/Iw6vEW5i+UGjhS/g601POnd4j0Fm2+J7cKn58gwcIhY25BZysDaS/rG06ABdIZX34OjMg1KlJCCHOm/x9F4yimySRGXgdd/5cRqesFTHzZvGr0bWR9o4C1AgytClxSOYRNTDz8OChEQ6qpzz+N+AWsf8CceAeRW7e7aIVcvesIwnRfYJybtl9qnaNcoTHQqmvUhcEBxGnNXU6IYr3v7FC0fCt1dzFpk/IvgDROqIcrN7fPuhQbpss70zEe9fir1eDVm32iGgH92YiItWtICZcQ39CHumaPZ1q1Jfuraccn/wDOCgRKjfOIrH2v5qa5iBTO7S9p37Br7hwsX3uA== 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=BUoXXRbEb6gvgsrV+WruXwc6XhZOFSC2DISS8DSjK3UWCxM+T828EHFNcej57NtQxvtcoHFHGbe1yJjiIcICmJJTwccWxjompzABe+8UasodSxBr7mwBeqYz960XhR7x35Iy2/MpU7aASSbz4rTxZy2vHuM/D1MtApDQT2YUrxpfedW//+mXqLyuHdBNV19RTZpFzf/2iHxlybF6gCwM8c9voxZ4Yn0galeiE/OZfyeDVaTUVQlkGCuJoQhd4ShApy03QiYN2w86DGlILReSIhI+tY6i50uQBRYHXC2dZIlI5pIaeCamJ6Aj5zPHT5rMUsbZVvp0N56I9lIq8eau7w== 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=Teq3d7qvrjJEtpAYw/WcjfnOvIBLE6eIOmFvmuvJinY8Qf0OjN31ens9qcgEZmc+5NZf030uzCwZxv3XDbJwBWQSR0+qETaon8avhA6TPuaQNWHphzn77vWttHyYga9mT6P6p4y7kfnOYK0Mh1C1OdGriYC27SPoglCwdSLuAa9yP0zduhi3EpoGvlkr/KN56BVyKaTcLR279W2k2n8eTTjUe9NCTeE55ly2Tc+Ak0Np2Dw+cJzV2MUwzrHH/2838P6i6ZNzYzq4zgbsJwzygja8dUg4TTNp8Z83gtdcSpo+ErJgjjfpVWkLLb2EnSYsYkClH5tmqivM21k/3hb/pA== Received: from MW4PR04CA0023.namprd04.prod.outlook.com (2603:10b6:303:69::28) by DM5PR1201MB0169.namprd12.prod.outlook.com (2603:10b6:4:55::22) 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 16:42:10 +0000 Received: from CO1NAM11FT066.eop-nam11.prod.protection.outlook.com (2603:10b6:303:69:cafe::f5) by MW4PR04CA0023.outlook.office365.com (2603:10b6:303:69::28) 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 16:42:09 +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 CO1NAM11FT066.mail.protection.outlook.com (10.13.175.18) 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 16:42: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 16:42:07 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:15 +0300 Message-ID: <20210715164126.54073-6-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aac4000f-14d7-42a5-6a59-08d947af7d5f X-MS-TrafficTypeDiagnostic: DM5PR1201MB0169: 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: D1/49Xn4EHrPfURjhSv6eIRW2zct/gjuN+LeYZOjNOfabA4JcBuwlXEFXGkJcsY2jCjXlbAWA44L6zK04GX5eNN0lLzYnuLMxMUatHhDqHbPkXr//hrs3OMC+hjAVCDjD+mL8lGGmzF50Ic+mkp/HP6b0TKFe1i9ruv5IdT91flwDIl7AhhVrZQZXcyv1hmm2kRauqtIZG0ztVPs6mc+BVBqrfiE3AVfMLjLEU2POY3kVE4vpAMT82OZXV8AOCbmxFEn6g/p+Spf50RzLPZhprV7jDFkrQQE1NH5fZCGJPFhJ5GXB/79vD6oVvDibOUQFa5o8A8I4s43d/SE9XaC/p1Ia4DX+Zgj9v51JTkhcVnKqizCbO9kFLZBgnHmuFLpPH0oj1eU/KiOUT5TEHMyaR/U1yL0o11nP311AXSV8qaypG5/K2276vsETSUnLCuIQQv7MuXsH/obxEbGlyLldWFU77PjcHRVky2tH5ksiNtQZGw2KTNl11b5sIytnvKV/8c2AQsi49GkjFy0xYANenetBbtYIxQQTJ27NQtqEXtT3fj7D8bFgdyTXf7MDBkxApYxgyjGmNA9W2oBt7OkJPnsTZfLzHbCqbcVjzuCW+Xm45w6hqAcZM2oyHxIXgTEYdeDHHW2kESATfBL95qdYzuZt7mHxm18iIXdelz8rQ9K1Ew0tnFYQNqQvtt0A3vOajj6mJuV7eJSM2sd3qgNkH8/PWIGkPu37U9XQg87Ri8= 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)(346002)(136003)(396003)(376002)(36840700001)(46966006)(82310400003)(55016002)(8676002)(36860700001)(70586007)(8936002)(47076005)(316002)(4326008)(5660300002)(426003)(82740400003)(336012)(36906005)(86362001)(356005)(34020700004)(2616005)(54906003)(6916009)(186003)(2906002)(7636003)(83380400001)(478600001)(16526019)(36756003)(6286002)(26005)(6666004)(7696005)(70206006)(1076003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:09.6940 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: aac4000f-14d7-42a5-6a59-08d947af7d5f 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: CO1NAM11FT066.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1201MB0169 Subject: [dpdk-dev] [PATCH v8 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 16:41: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: 95912 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 47A95A0C41; Thu, 15 Jul 2021 18:42:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 41388412FB; Thu, 15 Jul 2021 18:42:17 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2077.outbound.protection.outlook.com [40.107.244.77]) by mails.dpdk.org (Postfix) with ESMTP id A7C18412D2 for ; Thu, 15 Jul 2021 18:42:12 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NdZ6jUnmcRFp/yEj5LLgJQa65ukO2kjcPfO045gDGly/oBgiHqSWqPD8wvLJaCtw+7Ap+o/wvCKXdCV6UDX8RM/aUonPhg5IyoWnMOIt3r6OmvChLtEY8mID79itql1+i9TftE1Ur2ad1JOLdR4UcKzVdQTDZDnear6XczjZ9hIS/e9OsSixYJbvZLkWWnncbM9DVXCJJVocpiluq+E0DbQkk5955j9HmrmTwAYvXbe74kcuwbwgbvycGeCgY7+HYv8YVFcmMdxzlKgSC0Zjg4JYPKypj5AF15V2PD8QYky8x0LcATFBUoPbkS8QMF6wQNLcqIfCEb32PCGEkLclbg== 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=nv1eW7ccouuZkOmqEVxaD9YrBvV6gf33imC5SSQ60WmKoy/UOwePoskJIHss/o+Y3BXDghe8Qc9h5oKisT3D9euEgAOOa0rgDsGqcDl9NsXZ/un4v/1GW714hjVXsWX6qvOcIlvcRfk0rzMilkZyZhq6XGIRuO2PAs/xEAGxAi6j7hokOW22avd0eIQ7j1AralwdnY5Ad5a+XtS2WzAT/GnD+B8huJIcykiJXvUL5gSnKMRiS56MjfPXYKpSi6Tu5NOZRLGDIKQyfkgOTCfM+LqNUlAMN8wcpTPXyDUj4XibePhKvHLwR8/xCD7DIKbqpN8jvRAd92JX6hdmlQu1aA== 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=s+U2/bNc2JwPO9//aYnZoCC8xnm2QBtVxIXs4VBX19ggo5WfbtYMjiCKAVOxUniszkXvCTM19vwQQ3wlwbhPki2XEOqxx//iTrGoief9lhPwHxIkC94cMDkLPZuRzSP/tmdVzE73nZd20sYNXdHeBjOBCi37/4XFSA3P+R4FRNbk9t5ptDfegOfAzrjZtlGCHRXOzEIJyMnls1AYsGn6EnG8cnVQanlzFwNoVdaKm7ZX+FhqiHGPodqVR1DrZsPjEePdo+57C0YdDFiyKDcrmow7eyd7k6UkICPH3E6SWoxwmKa63b6gwp8JAzgWg4Szb2VXmwiseV6QXeUbMajV1g== Received: from MW4PR04CA0027.namprd04.prod.outlook.com (2603:10b6:303:69::32) by DM6PR12MB2617.namprd12.prod.outlook.com (2603:10b6:5:4a::14) 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 16:42:11 +0000 Received: from CO1NAM11FT066.eop-nam11.prod.protection.outlook.com (2603:10b6:303:69:cafe::a2) by MW4PR04CA0027.outlook.office365.com (2603:10b6:303:69::32) 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 16:42:11 +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 CO1NAM11FT066.mail.protection.outlook.com (10.13.175.18) 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 16:42:10 +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 16:42:09 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:16 +0300 Message-ID: <20210715164126.54073-7-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 37bbbb4c-c26f-4c96-09bd-08d947af7e1e X-MS-TrafficTypeDiagnostic: DM6PR12MB2617: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1303; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QX+mrpCCDvWA0lUNfuTyBaINSGWiRXhk1AaQ0RXo8OsKTjLmyIwEUNH8cRnUN4RVC4/mrLiAL5FHLkhEVDx0BRI4O6TCHpp8TkA+8icvQ/kgS8prLuJdk+HviX+ErM+tKLP5QgaJ1T5sX1Ic6W4Sea7LTxEeR/jI/zQVVanRLsZTNoHfkYE3VPNFIokEd3ZScDEUm76CW0VN03Vc6jwLsA8b9nfNRoWT4AiIEOY54Ivzll1O1gB3pUHkN2F8FZ/e+U4wMDZ0/MJAPh0IPLRHsBMN97AzlZkO1VvUU+JhIYYE0sOsYKDtjh4hD9uW+A9c0cUtXaKi4jfkSvKTOW5XZqr7zunlez+6o9rKMnM6by562pT5NBTYV73MWCklMFos37tcxidS58uNLKrKGfR6mcdkrKFzpoD68qSqtfqgqzIVXl656+ni/zlPmyIe3G/EpJs3wfUsY0VrS4xFw37S+bQKy0iw3wKv/CdV0jaPFcsnFJbCJV+eB/YD+C2t+IHz3rsgpoRxHVPtJ0ak6iFGGFyyWF74Jn9J3keiebFtLZUFCMKZzhZZP1m3UcsQBIt+d3ag8wP0RH83vdOVDRCMoYxB6hqA0W+bhhuCLpayuliB87MLk4iyHjzp/vl/RCtV5hj6pLdDa8jAU0uA+av4S3XE8WLzFF2RW738tCCv2LgEaxvXcG0AsJOVZP5Vm9rS8GEgu0jLERCzRQwYsbYfXp9Mczt5vjiq2X431y3d9iw= 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)(346002)(136003)(396003)(376002)(36840700001)(46966006)(82310400003)(8936002)(55016002)(8676002)(356005)(70586007)(47076005)(36860700001)(4326008)(82740400003)(426003)(36906005)(336012)(5660300002)(86362001)(316002)(34020700004)(54906003)(2616005)(6916009)(2906002)(7696005)(7636003)(186003)(16526019)(478600001)(83380400001)(36756003)(6286002)(26005)(6666004)(1076003)(70206006); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:10.9403 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 37bbbb4c-c26f-4c96-09bd-08d947af7e1e 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: CO1NAM11FT066.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2617 Subject: [dpdk-dev] [PATCH v8 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 16:41: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: 95913 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 17633A0C41; Thu, 15 Jul 2021 18:42:54 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 850224130B; Thu, 15 Jul 2021 18:42:18 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2069.outbound.protection.outlook.com [40.107.220.69]) by mails.dpdk.org (Postfix) with ESMTP id 15064412DF for ; Thu, 15 Jul 2021 18:42:15 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ve/aZopIDPmWQ/Q4DxXF/XKpYIx2ElCvDDUl4JaJ2El94dvIZYjulg+l8kCnOAH/DGpullcEvGaMf6RiG1FLZglwQRwqRhTEALNKeCetIQkHVdXrehHWt9Eb8jqYPjH4a4fxW+FnkxPA95/Ji2hCq998q9QSU9LiUIRY+GmxOy0jYfnIS3oRYMEV6I4kLSS4AnkeXEmFjb3N5WF4/J0D8zeWKRxudxjEIk7oQJq9NPqUMZ+GwqYWImonO5t5UKQHFm1XVjGBbL+UVd1wddPrgC99L7U93mOgGXXdKmuZy96x5LBmDO7nt5o+5LAAVhhPOgd0qETmkb8jBFmqQWvtrQ== 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=CWG9sDQjQBKyqqK/m7VrldK3jAGcK0OeDDZ50lZaH4dN2WmHJCvCm3cpgCYFpL6ChAW03aS06QsGB9T5XOQ72UTM3UULiH/XuxRWMVjICBqcXuwMJ2gb5UFiMoWbv6qGK+ndp7+m2eMzlm3yhf+XCBIczKB4FKSbJvsrkV1utilku8qMpNhnG/37T4hbXhqgHg8JQuTUjR3nrZB7mMJExpKz1MiuCOUq6GG/9gYkXTbh8M0/rttHnJ+amWOdw6zvCXd67Vb+Cgj+TQycM8jjxl6SQKHKoAigCHZxUrU2/543i4fWNdjM5nPwN4Ufz53df3Z7DCOkv85HG1yc8jbhOA== 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=ePkJypeU/y4z24HAlMKYNDgSEIIgOHH6DriUVRRmpUH4Zb0s6ykcC6hrM3z1GijiKesJsbD1ebX4c4QgAgUFnb/yi0e/92cjdcPRp+zWoOEdemAjb7IM2bdUiDEH62wz2nx9KgzQRUWUY5xq1t62VXITU7dTfqyQqS9nqfeqE8UA1PTFxTSTuE4/VEqzOe6CWJ8zmAO5OIK5aMSK87A0NGz7AOXzXOT+DLuSA4xfaJOzIZqkPHYR69d0HCcuhu6MVR7CluKNkjCSp9Nhf9y6T3PqFmmZK73BhQ+mFH2T9W1yzfjJmSYUMHoKkxvPyim7EFzzXFFacaDRCauXFPRxmA== Received: from MWHPR08CA0039.namprd08.prod.outlook.com (2603:10b6:300:c0::13) by MW2PR12MB2393.namprd12.prod.outlook.com (2603:10b6:907:11::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 16:42:13 +0000 Received: from CO1NAM11FT010.eop-nam11.prod.protection.outlook.com (2603:10b6:300:c0:cafe::cd) by MWHPR08CA0039.outlook.office365.com (2603:10b6:300:c0::13) 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 16:42: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 CO1NAM11FT010.mail.protection.outlook.com (10.13.175.88) 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 16:42: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 16:42:10 +0000 From: Shiri Kuzin To: CC: , , , , Michael Baum Date: Thu, 15 Jul 2021 19:41:17 +0300 Message-ID: <20210715164126.54073-8-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 773cea12-8a70-4f01-acf2-08d947af7f84 X-MS-TrafficTypeDiagnostic: MW2PR12MB2393: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:785; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zduzfTNuxIHoq8m3pAKti2cJlrl5fpipwULge698RlZuN/S8SJgPzRXdM0VFrnjd06ZA7d4uE806QlGhGW2avxkwgy/g4mYgZ9cTwKhTFuJ+1/fcFs4UGPApvx9E3bjcnfSQgnOzIDeAiLUvv4n475ZWttyuxBTBIKOEARMkxfKbtdkUqlFbQ2QXCHwAdsa2t1MzRZ4mJWwiGlwhW8W4TIdc6yogThfOceD9fcQG7Zna59HuuJ66jqgvCkqem2GjPqRY+5nYxZ4KunEvc/OhY50fvDy2o6lqHG9e3CmDEMR5tPBpxaEzRdMTNK0OILEeD6eFK7T17cGzbgrXosnre7PtX1hAcx0uwOQhttFDfyp3PD0Lq4y9Vde8TC4I6DG6Q+SYcvuje6+SImXkC2rPFQl/fV2e3BZfQYAhHWGKbAba+Sn3sH9lMNU5FFj1Ioa8r3nt8EzuH56Mgn0ykk2mHJWVEvimXy3/AsDwpBqwlih425Qit7bHocSvMBQtGP4EWEgBOZ1qYEpr0fGk5N7kGXK3nUUiogoj0S7/6O1dsnaBRw21UaXD/lDNIsZpf++LQGCStjRpf+ISfHDfJ4tuR3YdXbGvnxbgUBgbd1wO6JV0w98tVeLRU1Wozow030EkInwd2DfHbdbBJ5dh9s0bBvxemvdtLJjGLPIekACpCkjoZpk3x57sD6j6QFHgmriCvaGsE8vTzVEIvPRaPGsEHdlBHjHB+c9mc2rrZOKZCvM= 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)(376002)(136003)(36840700001)(46966006)(86362001)(426003)(2906002)(107886003)(26005)(36906005)(8936002)(34020700004)(36756003)(316002)(82310400003)(36860700001)(55016002)(7696005)(4326008)(54906003)(1076003)(478600001)(6286002)(82740400003)(336012)(8676002)(16526019)(70206006)(5660300002)(47076005)(2616005)(186003)(7636003)(70586007)(356005)(6916009)(83380400001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:13.2766 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 773cea12-8a70-4f01-acf2-08d947af7f84 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: CO1NAM11FT010.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2PR12MB2393 Subject: [dpdk-dev] [PATCH v8 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 16:41:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95914 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 DA38AA0C41; Thu, 15 Jul 2021 18:43:03 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3E16141275; Thu, 15 Jul 2021 18:42:24 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2087.outbound.protection.outlook.com [40.107.237.87]) by mails.dpdk.org (Postfix) with ESMTP id 7102D41314 for ; Thu, 15 Jul 2021 18:42:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ADhz/ZNiX2Y3Qp9AUf7t5NUDJL8v/F4lBiitRsil3V6+/DdlRYilSy/EGU5ScPINihomNA+e62Mmw5+yAS2yoy2Eo5sz81xOea4B2vfYRtkVeokKYnCahy2csl7UsJk+UhJKGvDeJGYJA3IB+6PbaVsO7HgPhwxBVpv6gQzUy6168AplHuDlYmYR6LbGVLstDM8bQg9tD91pnoufv48619Q3GmfCe9/Smm0+3t0lQgDc2gKh0LXtGvUG6slwz994dOHzCDl36w0rBbMX3rTRZZwA7GTZaPthrUWWk8Puz//slOpoWdbYZxeH8cLgfUmyLHpLaEF8f7g4l4g62FC4qQ== 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=CofZ9SP2z8LF3exIz32eQh03xpg2hheKdrwFAKSf50/7KvPe/8iWbSz637zWHbjHKc3lBz1tpmQ+RSLsJtiuc1PcaRtErQUz9S/g+75ttholvfG8jvoJe8m7Wpl01wSfSeDeUnreghUYyaBQUph4+ljElhLVLV4W1eiQsQXaqIPlTstEl2v+7GMC4g0Jl4D5WkAFf+9Y8Rf/U6TQ47L+LXt659Hqehq+R/orx9sP05s3STyfe6A1yBTQgMx4CHRRtSvOqe0Q0myHXrFaae7vTVBAmzVr5EMH1jT23ZZhX5TUMSIr4EH1yjzzviJeNVBKEYsjINil4bPfsfBByc/Qow== 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=fxSTxMSf8TCPrcxP+2feO+PJ5c9J6qkx7XSpLusnV9o3h8HoJG/fDYRmWcLoOz+6bw1dPRaioPLE51/J9ZZJZEBLdBnaw0J0wj64mwuJBmYQD7om4ZY6ICGkmxHJcyKkzMwG+8OxW2VvD+v5dUOBP81Sag7Ve9JS/40ag0312L0HgicVTGeXVizTCAhs4wL3Vc1aFnJ1f0S7LwCanO8avCt8x4f8EJjBUuA5mBjnNhgvdLlWs2GKjBwAzYyVzRuzXEtPBjqmELXjejJGwmqoepVddG2To0Enyp4SBbBmwQZzklT7SN+DvxAXCrDH75FfDlMqtnioFVGpKRK5S5mf3g== Received: from MW4P221CA0016.NAMP221.PROD.OUTLOOK.COM (2603:10b6:303:8b::21) by DM6PR12MB3132.namprd12.prod.outlook.com (2603:10b6:5:3c::27) 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 16:42:17 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8b:cafe::11) by MW4P221CA0016.outlook.office365.com (2603:10b6:303:8b::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 16:42: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 16:42: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 16:42:12 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:18 +0300 Message-ID: <20210715164126.54073-9-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 506e01b3-61bf-4f45-d8ac-08d947af8225 X-MS-TrafficTypeDiagnostic: DM6PR12MB3132: 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: d14i4WNiB7hitHwbHtL3tYND4xb9ek3SHasQc0K+aifYr0Ezrv2tBgvlQ1i4wC7yCWBgWYhgr8Lkf0/0yR31K/9869t+5JtWftUi9SXQaqQR58q+Bkfw1kCPuY7VHGxgYTyQsPJE4uwjUpDJL6nFwB7A8VDS4Uo/HSmlFFU1x14jmltVdwhwcq17jnQoRcuRCTZVJhb8K4Re4ZzR8JOssEpq6wryUD3eAD6B5nu5+DZfCjilcZLMzveBzS7+Xk9JkQlRvIfF6Sx/RQOBGXSP45wsJ0WS0SxLgyoc4CkbjVEBg6Yo8NucQZ/3odcZ5yVMK2FrivjqBpGQXgbqMEuDclXbq4kyHd7s+kvE20b2tATjlGVw5ge0oF0iyn9+FBgXgAI/MzfTXk2lERZsEARSYCjpecch9U3Kpuu8CNNepYsbl0TSt3yHH3i56tbga41ArYGfN4z+zfl8Gp9/NDVWA5VstUEGhFepsZrcyLjnlcY7lCxoLiMC/Yr4fBcCvBBBPQwKq6CWjW7UUfcyJlMTBCD1RYv8TTTLti/Mzbcw4n7WnZeXh8KfXA8ROS382KOu7xz044NESBPS2dNOZL+fO+LADxvZjAPUPe+qeJw+6Dv/Dp4hJtnDBJZlYpAl9xo3iggIW7RlUdn0xrMmsq839KKdco1B652r9s4u1n3rOEfcgvdN0lBoYH24HnVs7de2gZRrmH+ISUwxF6+BsUAhcbvP6kdmjUxvhIWCP6XBpEA= 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)(346002)(136003)(376002)(46966006)(36840700001)(82310400003)(426003)(2616005)(86362001)(26005)(54906003)(316002)(36860700001)(34020700004)(6916009)(356005)(7636003)(82740400003)(478600001)(55016002)(1076003)(8676002)(47076005)(70586007)(186003)(4326008)(70206006)(2906002)(36756003)(36906005)(16526019)(336012)(6286002)(83380400001)(7696005)(5660300002)(8936002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:17.7113 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 506e01b3-61bf-4f45-d8ac-08d947af8225 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: DM6PR12MB3132 Subject: [dpdk-dev] [PATCH v8 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 16:41:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95915 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 C3C12A0C41; Thu, 15 Jul 2021 18:43:10 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 744254131B; Thu, 15 Jul 2021 18:42:25 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2069.outbound.protection.outlook.com [40.107.244.69]) by mails.dpdk.org (Postfix) with ESMTP id 7685541327 for ; Thu, 15 Jul 2021 18:42:20 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LSUlP4GRYDeySIkVlhAz/wE3ByA7C6XvNQR+a77n9wJ7XdS3BYPQ09aadceHqwdSVkhmUKVGBDdq6VwLNIx9soeU9P0xES4VPK8Zr0Qbbuw4XJx4XHzAH+mFTY68ETS99sj2jGxVxNaEiZ1JghXMFc9f42LMZ8pq8I2QXS4CYn0oclsSecl1gnEo2V7JvT50gOzPqfKLNGct6n4oSxx/I+Ej9B4Hcb1DfFdMJatquIfVWB/0wnYc3J+WjNZQsFg+Dnw9m4pPx671DTzjTeuhd5e/rDB8d9ZawXYc3kWtPKxIyXKQ8RBHsmLOiBpjAQ4xzwQRX+zsmKaLkvByqi0R5Q== 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=XwuPPLGvzJ/uZClI49Bp/BxLyvDL6K3H3EvcZIR7ReRbM4uG+Bywf0YLncbCmOy5VXRkWWygh03iCtyzdN9lg8KcYa8ApVGBQzpFe4SVoTfSwwzSUxT6lB6Drj1q72WbkveW/vHFttij6lo3uEjDR5/954i8zCowIBPcxJzOUO9J7WJ8AZhFM9lv1SXSxjk6DJbMwb46Omyr1RYHjyFOSNr/7kqfE4vXyD5tF0HY6kVz7Ew7/Rt4ZZs49HznbljHUmENkoMG4zhjHQKmBNC532LSHZS4ij7GhVvybaHvBQ4ExQyby40hVh8vgNxT4qf3LBOqVsyFJ9ahRXZvPISvMg== 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=Z+hrBobhwVip8Xfr/MyNrTisweWNx/DCFalK/yLshjQACKE9ScU1xamQAH+GMBhMaDsDfkoKGQk5hgGcpNybehZFIo9QxqQlzm4Ja6GGjyVDJ4zAQ8HmM9xAPeRt5ShgxMlkeUCRr1GYZpDXQCeZAZKox17j1q8rVtFs7NRlIg4VuhP6LdO21QMGyYWeA//VsQWjvd15wo8sGJO+pwGEkB2DLjbu9up/nnKNxOO22UAHWkOPFDGcGGJQy5DotBzBFNK8X2qXEU+60SuJJc0Be1hOAcOE7L9hphMG5j9V1oFAV89uR8tuXTTtBfgc1vmGOIVKCygahGxRjz8Nhp/NSg== Received: from MW4P221CA0003.NAMP221.PROD.OUTLOOK.COM (2603:10b6:303:8b::8) by MN2PR12MB3181.namprd12.prod.outlook.com (2603:10b6:208:ae::27) 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 16:42:18 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8b:cafe::fd) by MW4P221CA0003.outlook.office365.com (2603:10b6:303:8b::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 16:42:18 +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 16:42:18 +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 16:42:14 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:19 +0300 Message-ID: <20210715164126.54073-10-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 83bd2239-0260-46f8-c537-08d947af8285 X-MS-TrafficTypeDiagnostic: MN2PR12MB3181: 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: vq+aJdRBax5D9ogLFkeJLqWHu9jwVmFtGTi3cxbX67a8Lo6xYr3DL/Fm/eEisPqpuOtxUzIxI8aEEbmJ9vnOnbWT72vYKCvQ39NNgaepYXU1YRj9m5v42OPn8p0KQK32PxCuu/szm6T4BDcBeAL7MMhkqX/PE8Yry6UC4Mz0lvPZ54QIJj76/obrQbV2qExKEe0puIk4+36dYyD+FOQ5RAmZAPjMHbR44zHf9np7wfJ8hUg2jyQrYHVEkg+e+2K0AdqWL/Rwdn+t9yYJO9w8sbMkJfjXg2r+VvvOiFLQokJTNR9SAnFBfgWXojCw2+22PlGuEMiqmytFEnDyyQXQ128noFfBvQYKyLpQ9YI4MBc5pMjeQa0E+EgaO7HGG9hCW2W5hRCgSS7VvXgwQyt95bEms4BDxYlh3e4t1+QwF88h0Y6wzV1SYmxoRQMlvCxYZtbcrDLHBjqmpaIO7FUb8/R8oNyFjRoaUjK8IEwidY5kYTOkJnjqJKfwrAimwVtMIJOC4a5c8hR3RXZlVxGFekpP+jdFgLycQ6drHOq8F8Hxzsh9leaMXNRlmpotcxWntBs2wd3jPFeISvbpwhCUio1hYIDqNvQOS1T4TWewHhqlJZG5LFdR1dtjNedsR1uUFBA+CGBy+o51oiJtwVKz5kpLUIJBKLHTC7dpPKC4hQ3iTnVo6307EqN1BNAV+EJmyBgC6Rj+kjBJ8tn2gLoDAe67Xxwe4Ik68qXHuUwqgM8= 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)(39860400002)(136003)(376002)(46966006)(36840700001)(82310400003)(86362001)(2616005)(26005)(36860700001)(426003)(6916009)(356005)(54906003)(478600001)(7636003)(34020700004)(82740400003)(316002)(55016002)(8676002)(47076005)(70586007)(186003)(1076003)(4326008)(70206006)(2906002)(36756003)(36906005)(16526019)(83380400001)(7696005)(336012)(5660300002)(6286002)(8936002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:18.2700 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 83bd2239-0260-46f8-c537-08d947af8285 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: MN2PR12MB3181 Subject: [dpdk-dev] [PATCH v8 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 16:41:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95916 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 B5C08A0C41; Thu, 15 Jul 2021 18:43:17 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B56F441331; Thu, 15 Jul 2021 18:42:26 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam07on2078.outbound.protection.outlook.com [40.107.212.78]) by mails.dpdk.org (Postfix) with ESMTP id C83D741316 for ; Thu, 15 Jul 2021 18:42:20 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cWjVE9bTJJ3CbXLlFnn7Cbx8zCYyvewWu+VAbwVYT9kSm9s8K0ATOmtLm0J5RVvam8j4bZlK03E/jT+7ySQNxRCDB4YpJeh3C8WtgpK/Yyp7QIIDSxWXII7q4BBR1ENFCHPv1vy/gnl3oeIX6O1UJrLU2nt5wAiHZYDvOWFSHFHFSePzpwP32KMnfur86XX9g3BXB2qqGfzikT+TcyWBBMxXgKe9xa9dmJjD4vX3aNH3UpgL+ILZJmTP98c7t1NvFUVpvbouQ2LHLPLYkE2cl8NZHn6ZD2SYfeexSIp90G18izFZg49MsEWNdNaFeZC5q6J/rhVH4NL9noQMZg2xwQ== 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=ONcA4ri7m0bdrlDCFEyJkPnqbe/WhwGwtIHgZH+5kOpLb6kNhE86wUD0xS+Wh65HWptv9KefaaDXfRe3OM68kqL8MO5AkNE93A1P6+cwb7M6YQr3CutLLZ/H0h3RXw4iHpkFJQqXZktqNxfk9czgpSUbZosu6pFmqD9UmRwkfr2m4zW8B+w+HTj3pcsSXq76lvbsQP+BH4VOVssZmu7F1BSbvqEt6hcz78jwqjo+Wj+xhGFHhSilSWCb4c5fz8IVIWJk+mdQ74JMGBm8FjhZu400HRJKhLeeWXUcU36rxL4IIsIQu9912a/CH38XPBGUGvPgbS9NtCrgf7uyNqr7qw== 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=B4XbHXVMbl7aoHjIeoBHpqs94DrE3mJ7QO8hXdBbpjpPl04mjWoJFbKJn1nGOHIaStLEFY3ItmTZjhyvtQMbMNI3aGTj4YiHogL26fr0cJ2CpuziqlbQn0Y7qfXFsdY0QoUrpM28Em0TuBpruzL2ji9zdIAgpdPJt74W762nsid9Lr91VRNeVTNtkCQZT7H/AF1031HuGLVC1rYXjsNZ6VNGWUe8B1gv2NkLoyIhsIKRC1OUfDanQmJDDBzSOcZDbtXzO4D1GE0yUmVUPGZRXMjUYp6XYmKmjDPDsA3BOivjdcYjqRj1ISWqr4v0B4Wd0Wxqb33dzE+RSiIWQ7RTMg== Received: from MW4P221CA0010.NAMP221.PROD.OUTLOOK.COM (2603:10b6:303:8b::15) by BN6PR12MB1329.namprd12.prod.outlook.com (2603:10b6:404:19::22) 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 16:42:19 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8b:cafe::22) by MW4P221CA0010.outlook.office365.com (2603:10b6:303:8b::15) 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 16:42: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 16:42: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 16:42:16 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:20 +0300 Message-ID: <20210715164126.54073-11-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 56695800-407f-4894-0f4e-08d947af8302 X-MS-TrafficTypeDiagnostic: BN6PR12MB1329: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:193; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5ID9mArZ5wG8TkD59zQ15VcggxK6tx5p/Y2CHofQnWpFpUmHr7GOwgLCWtu7qC7H3iW+PvhYEcuT8McnwYX/Uv5F48jze7f5EpIedikktHs9wD/KOhEqMkLtqcgxODV8rTPWnBgeXRKu6WMUPoQbgd67KUyR22iIBHs0CYyLjTYgTx2nc5d7sB5ABzUseY88JPkT32ZVy3DtIrweLkTHKlUjpapI2EmQHxSjh9S30PPbCEfv1QxoRLRz6/0edJ26AuKtO2zWMbTo9V7VfxhLYKptcOHn7TK8C+D93iKtkvybhsq6vWoEiivjcj49/QY/jKMqmUe3ucxMq1oApTWjqkTPYoBA9FPABaEYuVZwzBoTB2YFNDp8nZVBVPTj1vKmas/v4alRoUXMfc5IKLGCjTeg8huYbQxF1khLpaV72EOT/7XKToJUMqTtAtOwIAJ/E+yzXDfzzWJgLm8uFlvgXjL6HS8oYiLbRfPuhbG/0WK83Q+gC4mV0+pacha5xrGYRF+5SgFxI01UoYml3S2g9wp2WWLh4tRoYEz9kNYJ1VrYzTQcB2KEhEnWRLUZsgpA4/qzTD1Vsy3+mEXRPD7h8W3FGgUiQgGbB/DapVGZkjRhMD+y+0OpRuOB1/l1Gn6S06dkgrlyP0epkKETWHVajENQd4JjDyEQqjJF1c+Q6GTimwyrO+FJmKjr0TgAF0TmSEMHr1mzpwVQ5+35Z+en+40MhPrJgU4TVMoAblEvBy4= 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)(136003)(346002)(396003)(39860400002)(36840700001)(46966006)(70586007)(186003)(1076003)(83380400001)(47076005)(6666004)(8676002)(6286002)(8936002)(7696005)(70206006)(5660300002)(16526019)(336012)(2906002)(36756003)(36906005)(4326008)(36860700001)(34020700004)(316002)(6916009)(82310400003)(426003)(86362001)(26005)(2616005)(478600001)(7636003)(54906003)(82740400003)(55016002)(356005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:19.1195 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 56695800-407f-4894-0f4e-08d947af8302 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: BN6PR12MB1329 Subject: [dpdk-dev] [PATCH v8 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 16:41:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95917 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 DCDADA0C41; Thu, 15 Jul 2021 18:43:24 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1362141337; Thu, 15 Jul 2021 18:42:28 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2044.outbound.protection.outlook.com [40.107.94.44]) by mails.dpdk.org (Postfix) with ESMTP id 5B07441284 for ; Thu, 15 Jul 2021 18:42:22 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=V9JfSM7QobuL3DWWJUf1Sf84x9xkpjESjgvEmqXoxolf4NpPWS41jQIdWcQ7tivAan+rv4ZHUhwPoQxRph9QcJaA55Ch/nwTDO9jexs/yALk982sqcewL+rj0bBQxhfegbhLkNuWkWDRs8uhjxZZZbSBKQLyNkyb5nQfCbH0hmMdglQcfsJt2BsNfZy6wYBavUNuOlM4x+iv7NDTn8EKjUxXe7j+KgBt8V8VvnFURu7I27uSMhT1YeYcPE3LGpK+OY7BqWjW3+JL+/UlV8Ze9b+4joi/4uKT4bwM6/Y+73t14O/kx/BhpKTViudYvyBeft8o/r+vhVb1gZG57aJx2g== 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=LvwMWl1HAqSNifubZ/d10myoUpW6+7LGr+s9jkpk2PqfHl+i9bWwH7+DgVXA/gTdgVDLsdotBHBCH5WMCn9QGmfphyHpAkQg7knMDt5PkW/FWa3EOBd0KjAym9b+KUHD/oTq2Brx6l8/OOkfeQsRVDbEZCLEUnFOTVnJzHNby68WCrrBZx5gyu1qpOzleoJbw1LlJjwPhmYrLSDj3iDe5ALzqu6VkbHeWo8ZQZ+Zr/e6T9/PNqv8juncg44PmVVVR/Ye3Zwa/nDJougwENuwcbP1VDITYTPrefms/n/HzpTOVVcp6SGMAvGxbn9kqJ0+zAo9c+2vbBEMY0i91QBDOA== 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=KZ1DYnpdpO9uN4dogAVqRBK94NG6QwYIBCJkO+cSHoqwsg9pTr5TmIww0UbGC82hfa6oxkPT5UO2jKvAZkkhiyH602fdGTB9ZFUiF2Kh/3kjM83hnwirlXyAyUO4x9q8a5sBbXfgLVIz739ekdDF7pGYvZUXl8Ph8H8uQpfsxz/n0MyOZh5ok/gaLr+ZJexDSUNIT+kilPlYyWMP4wb28oi7W+WAV3rZamGwPyZBsreFY7rQWhRwSklAs9B47IjwECanly2K5PLs8+9u1/JKSvGWxs4t71PtBs3YdmVoIFWbaRtgLXq0gGC0SUEy9FtKfq++ARmzSosnYvj8fWUKwQ== Received: from MW4P221CA0001.NAMP221.PROD.OUTLOOK.COM (2603:10b6:303:8b::6) by SN1PR12MB2399.namprd12.prod.outlook.com (2603:10b6:802:2b::20) 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 16:42:20 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8b:cafe::17) by MW4P221CA0001.outlook.office365.com (2603:10b6:303:8b::6) 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 16:42:20 +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 16:42: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 16:42:17 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:21 +0300 Message-ID: <20210715164126.54073-12-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 384f8a86-6741-4fcf-daf7-08d947af83c7 X-MS-TrafficTypeDiagnostic: SN1PR12MB2399: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:295; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Z1w3nn/z9UpkBWd70ZqpAdWx0J54rK0xMsIJEIVCRACj3aYqgvQxxcaBBU8/C2IHvbCbk2Cs1ugUSwWowz6l4k/Yqja+849yORlHCrM2g1UihHYojzGolAstNKAMnob7prjV8KiMhzruadtYAf9+igDRyzWQSoMZdTGsIoUnxzA5m2w8mltR+ugCGFj8K6GrnkzESGCgaVE68QArzx0bpAqnXrL+AQVIXtgFa5reNsqYzDQkDZcNMnCB6ZgYtHv8a0JuJqcPUVwNe0BCmRYdDCgSO9Mw6r/vkaq6/u3CvIG+AKwvHNeaaJ//y9CjCFCb1lJ6hoxR5OSjibxwI0HxIcAmq36Oqk7pBJ25MteSBx41uRJT4uMbo6j98/mZ+AXLL6bkyFENcoFphGKUyOn7VUGjku+B1CdRlAIfmq9zXPxwJBukVh8jWkU0OkSPKhLO0cKvBd2eOfQu7XyImPZJQPleAg6FWu4uMgw5DT0goac/pqLAUygcF0DFEpYDobOeGD7YXCFRVK2PmSRQ+hey7PAzF4BYfzxrAczfHFVt0aEb0LrvoXkcUMAClU3dcos7+R1B5sim6NI70ng7d6kcFCnnCtOB6AYVtbPjZ8TiLKNiaOwZ2P1gJLDHkqE54hBD7QlyAjuO9vaIIY9TrSq9NdlbebT4HtfcyUCg9dHgiVImr5rUX2Az2ZfYejmLUXRsE9q/ZfgRLDthLJ6xMfAS+txhtScBVitu2q7ji8zMtNQ= 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)(39860400002)(396003)(346002)(376002)(46966006)(36840700001)(82310400003)(34020700004)(356005)(83380400001)(7636003)(2906002)(7696005)(36906005)(316002)(36756003)(86362001)(55016002)(54906003)(36860700001)(47076005)(82740400003)(26005)(5660300002)(8936002)(6666004)(8676002)(70586007)(70206006)(16526019)(478600001)(186003)(4326008)(6286002)(2616005)(336012)(426003)(6916009)(1076003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:20.4608 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 384f8a86-6741-4fcf-daf7-08d947af83c7 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: SN1PR12MB2399 Subject: [dpdk-dev] [PATCH v8 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 16:41:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95918 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 8DFFCA0C41; Thu, 15 Jul 2021 18:43:31 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 469A24125B; Thu, 15 Jul 2021 18:42:34 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2085.outbound.protection.outlook.com [40.107.93.85]) by mails.dpdk.org (Postfix) with ESMTP id 9E67B41275 for ; Thu, 15 Jul 2021 18:42:23 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KGIkpWVktvLEO21Jgryg/5ucHC3k3hSANYVDc5jQxihPSb92Bj5pkcIP3YIECch+d3fiY8H5l8o10Jz8nqeHv/UQ/w0xETjLZUwz9DXDoq2Xr8xcwhmQyZBvbL1qEaKDhBD0LLAbNpkwYUno52+Hq251mLLPu/ng1vrquDNpB37zFtoNdDLhvoacH+ehnWa3QECUlfv5nb/UW6TfZaM3Es2ykHThAniUg8yG2JSb4PagAL1HwQ5zpV3XeHel7VP7N7/uX0ipoU7ZMr6ukSGkX+QFZx9QFMRdlNpJCc+ccYTC1vrADIT1yoP4yjMy1ykNcivaAPRGwhmP70H+H+AWtg== 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=WcoF96B5vpRQEZrxFqwacn3McNh6Hap4W1OYUc3OQgVpTJ+XCOxK4Br+fMA8mbldrIaP9TaJ4aLucI5vZFs9JlMXwj90P4KM7n60ITOQOuaHcOsCwo3ZeXeEvp8NONNUXrS9ecwagrmP+cNgZ/VLWO6ICrek/7wF+64IcIkQl4QSX+wxHVU2RQXeI2AGNd+5GoNlMBOxwwsdgiBih4SsFhLyXPmt3tJ2ByeNaghQP/i6lxCNt7t0a2zOOsFRhsqvBAanDKOzEhz9Dtu5739Tbb0w0b3N6G+KI5sKng6caL6yFHBsJ8ZEi19c32tSAVlwHOfAm/4xrOEgq0rU3AynzA== 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=AL6ER+hR68jBxQ2lwhQ/1kdzGRKMjRHKYjjsKk3LaZ/CazCmrKbJDeRncL8vXMOmXM2V9ZGXnTFnmcObAIF2gmOHNcQg8jkpkswUHmVSD/PRmYUPKdIu0ytJj3G4hb9pnf8OhdDjx3d4yNalEEJNuxR9gHrUoS+V3Cn1/0yRDAwqXRfNuVpP1dMW1bQbglxYpmxlRZvDpJbWnpcdIEpCr8zMv9q9NsMdzVyYyFxnClbYLEFGaDjpjshMuYzcwJYPuCczUxc7Ws1b5Dky0y4fiR/BR4sex9wVbCsiBE2SajhdSFynm903TxcyH080p47Y8YLnTdMfOPXJkQoW35kMkw== Received: from MW4P221CA0027.NAMP221.PROD.OUTLOOK.COM (2603:10b6:303:8b::32) by BYAPR12MB2981.namprd12.prod.outlook.com (2603:10b6:a03:de::26) 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 16:42:22 +0000 Received: from CO1NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8b:cafe::61) by MW4P221CA0027.outlook.office365.com (2603:10b6:303:8b::32) 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 16:42: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 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 16:42:21 +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 16:42:19 +0000 From: Shiri Kuzin To: CC: , , , , Michael Baum Date: Thu, 15 Jul 2021 19:41:22 +0300 Message-ID: <20210715164126.54073-13-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0107e686-a4e0-4bb8-fd0f-08d947af8492 X-MS-TrafficTypeDiagnostic: BYAPR12MB2981: 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: lDqWL3Y5GirvNK7yDqrNjXqSffsJ81wwlo5yjJNgGejg5QY7MZu58jeOJy9USWFaP2HFgUoVDC+00EX1v1RecoZ9IjEUuGOcL3nIj1AfuSnOK3LRq2s8+wqbECbUDCiyGdiOdq2vjkfCk5HnlwAnx5kYkO6U7KqNkKyLSR7EkOKQDBtDxhCAz5aSAzK3ajlr23E19oDEOwGsWVcZElWSnEbiGRAjBYo3g0AvPoCP53Ozo7VWAjF3Dunsd8NJTedhgmUF/QeXwMm5lIEylKVPpcqEGge22HEz4v7kRpqFk6nRrQ8p6COT3lUxhFtJsgaeNIJRNct2Cfr01sXw30hO7DyqO32b+V6cns26wLfpYPO4tKjRphvUH5qANqySLBwl075V0l47MCoAWfh1ft2ajJw5R3puOrCaXF1d2muPo9Be4kAgf44gb+XxIhC1IXEXpGlFSCj28fYcP7yer3Ex4Tmdw6ywdPWiIMN8XcOs+tox54dUU+RX/6vU3MukW/HaU8KyZSAMMmsrdgIJFhIskJ5u9txQ8RtcNueJZ80rtDH7DjvmACwk4bBGoEKnxEFNqv8++yh+Z+EvRtEBLV5IMItV3t6wcfAxXTHyILEpuPQYfCS+spv9Kr109HSZvFA6Jag8uq8JYtkFR+u9g3CM1nrQp9BjQf0wAxt0pi0Gec/n+aW9N4Xoyn1rA+eZiDLw2l9A+IZciBgUN/dwSggCcTCyieHon/Fk3+0XduGkq7Y= 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)(136003)(39860400002)(346002)(396003)(36840700001)(46966006)(5660300002)(82740400003)(6286002)(356005)(6666004)(70206006)(47076005)(83380400001)(316002)(34020700004)(8936002)(54906003)(7636003)(1076003)(2906002)(8676002)(70586007)(30864003)(36906005)(186003)(82310400003)(4326008)(2616005)(36860700001)(426003)(55016002)(336012)(478600001)(16526019)(7696005)(36756003)(86362001)(6916009)(26005)(107886003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:21.7860 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0107e686-a4e0-4bb8-fd0f-08d947af8492 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: BYAPR12MB2981 Subject: [dpdk-dev] [PATCH v8 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 16:41:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95919 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 A0F66A0C41; Thu, 15 Jul 2021 18:43:37 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7411241342; Thu, 15 Jul 2021 18:42:35 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam07on2060.outbound.protection.outlook.com [40.107.212.60]) by mails.dpdk.org (Postfix) with ESMTP id 7BF504132E for ; Thu, 15 Jul 2021 18:42:26 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Kmqupppju3S0vZHUUGNZvRs/z8TpmwubSoMI88lOhR7alVcJjoiGVuPQDlfKbsZ83vcEe8Lk41x24ar2NUH5OrqdRHfpUDecixQaPO4SyuiMf+skVk7uXcnvQ3gdI6vvKncAa8BlTHcG8+tIr2VfUE5dHw8qqICB03dspVOvoTxILAyf1/NBIBEylHnjhAIWhdLpnEBuzxYV3WCix2AnIwgQ2JTy07cqI5kAHboWWXJsRgpjWLPuv1qjCugxdckjdZPU+eJiRBq3ZRHCuCz/ewN2ShpyFJa1eei6ZIXA/PJ7w7gqqn6lazy0jDvulkmIaTVv9yphXMHNVGXnepwZVQ== 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=O4FKGyEgXo8qFfGP+OwbZJw4gj+n/d1dtPMorv2nKq336re61FA5lS3hT74ZzgG2+0aBrJuJpox9TAcAMEaDSZYNNvXF1vyY1wnVT+VlmhOkxQyoRpZFzRa3S3QVzL6906PYZDpyuSB6/whoatFPsmhMTo4oUBhu+pEGtbzuw0fr2gImxmeillwehW1nh3walRbQMcZp4yUBIwxy08/ACrZpFjwjAWsoub7arnZIxyQQCXkXFuiOywK0fDZIxEJw5XuFockpV2yasUi3naAtviW0C+nAugtNtHuovqtIhXnQoY9rns+bIxVYpM7hdgpCZnQkuBnpAKbh4U6GnpgfUQ== 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=J3MYdzZz72NZXRNUpwKW+QGtfzcFRb5ko2Nv7rlwXrnbgNcvB7Z4qctH1ZvZ16H4iyQxbJRUwH/VoBcFj+dyvoxUT0eq0K7oFYG7umoIOxCtReCEKmx7ZCcv5UATtxUb0cML2czjIfZEKmbf8Ypzfdt1TwGdIYcFaRfxM6gJpHWdLQRoN5OdUtrSEhgQ8AsQ1rqW2YeTPuy0Dl0lB12vrs2W9YLKLYRvydDRgS0LyGXTY6mV2b+AHiGlHSUXBAWjaZOdPGL/4JoIm6jgzA3i3imSHV3LCfaWDp1X547ljTeLx1IdgR6mfzJNLuJyv6DseS9XbYUPgJj49y8BDpzKhQ== Received: from MW4PR04CA0333.namprd04.prod.outlook.com (2603:10b6:303:8a::8) by DM6PR12MB4794.namprd12.prod.outlook.com (2603:10b6:5:163::27) 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 16:42:25 +0000 Received: from CO1NAM11FT037.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8a:cafe::e6) by MW4PR04CA0333.outlook.office365.com (2603:10b6:303:8a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.24 via Frontend Transport; Thu, 15 Jul 2021 16:42: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 CO1NAM11FT037.mail.protection.outlook.com (10.13.174.91) 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 16:42:24 +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 16:42:21 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:23 +0300 Message-ID: <20210715164126.54073-14-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b4b027a2-0586-4e3b-a4e5-08d947af8679 X-MS-TrafficTypeDiagnostic: DM6PR12MB4794: 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: gjb0BfkydR3woqE/Q82Ad/Wf/i1N5kF01RFnaAzOqh7fThPUHWzNqeANI4SUATXlLUiYptTs7OiUewYVtww8sCO9T1/kFEKRZ2nx48eUi/v7YaCH2B0oZ3g3nL/Kj2eAnKNIoiqDJ0a0sUL4E+NT8t29wM/nwMxXMZq1QoYHvY5oGRc4qcHJBB7kNf9+8MoLEp/37/r/nIIgxM60foXSkOfTlDH6V5KQGXkbraaUQm2DwNwPG8XMDDCSs/YmyQGWIsntE/RWNdNfVjcuQH+L27nezN8y0Av59iy6Uv5PNWKUdGKW4FI66XP9IAGXryy6/8SQE46671EyUc/L2Jgai+egBC851cY52dE6Wkl0es6SXaCpoQv7umNeBQabJ/e2sJlXSi6tZlbCHJCfp5NtNngkpZVijNxvjf90/Ygzr2JRD2vuWGuH4b4565d9PlUcoApya7eTsoAD2CFbsPtTQZgjsSTwtlXyVrGKr6nw0FfypEhNFoFP3QLoE7lsfnjoO0lnzr8/4SOX6pZIJYy0LhpDO2q+OxlKVqv3AJ781PVbxFyce99o0dcUaoTQ+JFoeMP9Mz16gQDZrZcXuOfADB0eSJToGPI/14hgixYzhxsoqIRR74uS1BTFvC6NumFmrjgDN6EGP/fXFI8d8Yjqlj6cu4ocdWlAhMtgYWoTH0z1wVxy4acA2HxpRgJSP1t1MK0MN7fDaK77sgWWhFKLaeYUMbfTGNk2QChaavTsZlg= 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)(376002)(396003)(346002)(136003)(46966006)(36840700001)(83380400001)(36860700001)(82740400003)(1076003)(70206006)(6916009)(6286002)(7696005)(5660300002)(426003)(8676002)(316002)(34020700004)(36906005)(36756003)(82310400003)(2906002)(478600001)(54906003)(47076005)(55016002)(86362001)(16526019)(26005)(8936002)(7636003)(186003)(336012)(2616005)(4326008)(70586007)(356005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:24.9574 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b4b027a2-0586-4e3b-a4e5-08d947af8679 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: CO1NAM11FT037.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4794 Subject: [dpdk-dev] [PATCH v8 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 16:41:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95920 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 38D77A0C41; Thu, 15 Jul 2021 18:43:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B69A941351; Thu, 15 Jul 2021 18:42:37 +0200 (CEST) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam07on2076.outbound.protection.outlook.com [40.107.95.76]) by mails.dpdk.org (Postfix) with ESMTP id 9872541337 for ; Thu, 15 Jul 2021 18:42:27 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Er5NLjamxDbAxZOOLNyItKmos6eAJKvdHBsSX72NZja+jKUz2A/1SXoy0d1tldei2OSmMlqO39XdSZirr4x2vr7otugiCSgBItjZJFHG4EyD8kwlQiSHBcQIV7KsPXSaHsnZT6/rKIxyLi/Zbacyxo97YzuTFY35PpdUbslSx+6+vYLkCeuLeXhlhN3+uoe9mRieAxOKX3uqVPqkoik8TeZbvImJz+lWRi2/tXPomXzjT9WH0chs0ugU6USH30X6aqO/ByYTmU4pKLYYuohL7ASjdxIrWcEXqL/UFyVYdfBgvB8oShq6jZJxKvzuNSIRc1qVHMODnWzoCalzdk3iOA== 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=aVERjlIwPiEPVg/Uf/5hF7j56Ft6LGisjZZyrkpANTcizO1vojTKP8h9jMKwR/4VHFNFvydv37ATVWz9XtwQ/RUWBmJmlZnuKdufLrjwnt+O55uYwRnSB/z4IjdsmENP5+IZFb6ZBxVJTfuIhDrKd1ujk/xABIaITbSnFqt6AGWIuIjQETqr7Q34hKsAaCfc5xEtcQGIzTlN7HuJqIfoOoRlw/LBPxjLgmBgCPgqSJyLjkO4MKFHCt3r/FQFat1qrUq6sUWI6t5HKJadLo7IdJ63JBFpftZpXpnV5h+2sxy1YKGnao1Q7GqAnOa8QF73xVqbm3Dls6nKd4v4AN7iPw== 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=kO5XlDUFg+cD4nBUQDqc/PU+6SzsOD+/FqZvRxrIzs5tiK1Ls3DOUgUIbyuFQ0zMWfsK/IjSmR/d+43AOrTII0XcYM0VG54wLY0xeI16uPm+Bf+NIVmOUoYcFGS5qXL8cFGeNy+ZyrFwrZmJkaW8jt8wSRAMakzUxDjj90UaiYbB54pHRc2+PcsY8XXawexPp3sVwKvHF08Anw1k2nmibLMPvHcEk8GRVZvBGLux0FfD4rJrPZE0s88ugvFxFLXSar1r/QnDBXY3o3LRfEH0WGv5nAXhRiSOkfL7v7jwVaWtrKM/EeKhJN5Be8MSPj/MXmg55JqjAuoHao5idSwokA== Received: from MW4PR04CA0360.namprd04.prod.outlook.com (2603:10b6:303:8a::35) by BYAPR12MB2808.namprd12.prod.outlook.com (2603:10b6:a03:69::24) 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 16:42:26 +0000 Received: from CO1NAM11FT037.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8a:cafe::8d) by MW4PR04CA0360.outlook.office365.com (2603:10b6:303:8a::35) 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 16:42:26 +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 CO1NAM11FT037.mail.protection.outlook.com (10.13.174.91) 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 16:42: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 16:42:23 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:24 +0300 Message-ID: <20210715164126.54073-15-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 65d0eea7-e971-4584-bf59-08d947af86f0 X-MS-TrafficTypeDiagnostic: BYAPR12MB2808: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: N5tzZlUF4qw5Z6BWCOWVd8E3Cjs1H5BdCgLedabZHQKybX5AMlnaqhMlBKkFwlgHRb7v8dV74EmRh3uqypXwtKvY9Kpvht2Uek3qcBRXWvcG+BU18C1gbL1EnvuEA9rGsYdyf332ozb418Sz8P9OYPtZYysI+4HvACOGxHpZFN86KqKw+Ksq/gmyyVmAljvrmnVzf9ZDO4Ix6sxEhNRDQXUI9+tDJm1KV5IGy/qw4MfKIglexiwHgK8JxJQdPhmgTEd+zt6UeA9rs6iKTvdfsJBHkOycue869uOSj6ngGFwr9Yq3ml+HDzbYkbJ6mcqnHRYr1CClTELZTN3W5xL7TshTNq+LbHY3QLpjWvQquN0WSHUDlqJ+LyyO6JZnCpr571tTLB6Wsaz9ChmaFe+lXUDGo70DZMOC7n8X+JRNMvD6u2cX1y4bpXite4OqtQejUUIqUDt7faDCKWjgJcY3vt85OX6pEmb+QEzvFFofDfgQRI61R3ZmavrByUyca5FYzr/BiFZCpAkNFPrfFqNu6AP87rwrM/+FBRrP6NxqZmuJ1sXJQ3FpZPeINarPxk4vdvphSlfLP3mdja8MXKia0Kd2xFIqQWdlJe1rcN4E4XNgycvy6/aff1JQOuLEU4jgjDlMZc7pmdIj2jfD8NF4K7yMvVtUPSS7Yw7Sk1p9aTY2+rZvFOVWsk9Mr6J0SLz4LiDdDUJMGimnG0xnPAgAsclwGA3ppqnsC6q0YwoUshk= 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)(346002)(136003)(396003)(39860400002)(46966006)(36840700001)(8936002)(336012)(82310400003)(356005)(54906003)(7636003)(8676002)(83380400001)(47076005)(1076003)(5660300002)(55016002)(36906005)(36860700001)(16526019)(6916009)(70206006)(2906002)(186003)(2616005)(82740400003)(86362001)(26005)(316002)(34020700004)(478600001)(7696005)(4326008)(426003)(6286002)(36756003)(70586007); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:25.7299 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 65d0eea7-e971-4584-bf59-08d947af86f0 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: CO1NAM11FT037.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB2808 Subject: [dpdk-dev] [PATCH v8 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 16:41:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95922 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 4A4B5A0C41; Thu, 15 Jul 2021 18:43:56 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6F29841350; Thu, 15 Jul 2021 18:42:40 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2071.outbound.protection.outlook.com [40.107.236.71]) by mails.dpdk.org (Postfix) with ESMTP id 194B9412A3 for ; Thu, 15 Jul 2021 18:42:31 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RiaFygAupQLBrVpSgdADWkhF+88vYvhbVFtqE9dVbh+DLQuqplGMn9N4HqaZj+3QwKC3hv5WDZGLeNSxqE1yXflOH4VgokPcTyXXwQgw9/EK+ACa1Q2apbMhubxYlhH0B/WayBBkd9B7mF+c0rZC7SYzxjH7vksxsq8UGP9nvm14anF1FdmCoCCW61acF0viE/97k/Fwx7FZ79kmiibRZKYidRM4ewEuqWYPzPztDo7FOeDGCUBdPja4PtnP7zcxgFDGl9XDaHv+HHlUVwAO/NV/+J3vZBCKrqHzo9VfzV2xhIBVaXocSUlkG95rtyLqRGd3PUK3A/ss/voK+w1IOQ== 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=Y7ncc/D1Y3axwKDWAB8XonifFBfMApuM7Q6sDn/Cp2QJO7l+pr4VjsAX0HJW0eh5rcY0gvqGP+hPz2x4CMEvoBHyfqM2Va8vLrCNv5nDGv+y3eQImk1/aBOjUqN9CYSEYCmLlDM5IBMogB6t+lxpcfOOqtANm2sBbLzTY79Sk/hGkaDLpx9kbm/aZZcrHqdvBEsG1eA4l9s2H+iWRvNiEoQuyxxB+Fr4vj/85vpoghujLWVVDE7oDRIXfqTJ6zjC+k1hG3jKjnayDDYwKixQ9jVRLF5Ueh8EMY0TkcmBkKCczb+LOtiSOxh74Foc2T0A0bRdkXvmv5RRda5K1evlmw== 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=jg49Z6yU/YhKabGU8c9g0InnkaqlXLqQb20qc0akqPeR2sfjabXoKkUYdOUfEVJtl+j5loEFFia5z052Qz01L0gtrttsSNLEhOZgOSOoCHImxBqc/zq5ZlcidFhobY00mrz7IkeCS3gE9U51TNmnWSlQpsS6Oy0y863LDHrckMZyTrZ1CyKqsRpXuiXWiUFPzexU2G1Wcmm6NXPJD15ULYu9bmTju8KQrXgcSBLgAcn4tBlE50uoFU4acTtN2RRFbwJdd/4rOnPDQ4v6JTm9OMYJiw6vsRWwHNskYd54Swrn5rIxRl0JYoC0J3uqp7jgfLyalzxwr8/FEYK+FlJISw== Received: from MW4PR04CA0359.namprd04.prod.outlook.com (2603:10b6:303:8a::34) by PH0PR12MB5402.namprd12.prod.outlook.com (2603:10b6:510:ef::23) 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 16:42:27 +0000 Received: from CO1NAM11FT037.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8a:cafe::2b) by MW4PR04CA0359.outlook.office365.com (2603:10b6:303:8a::34) 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 16:42: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 CO1NAM11FT037.mail.protection.outlook.com (10.13.174.91) 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 16:42:27 +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 16:42:25 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:25 +0300 Message-ID: <20210715164126.54073-16-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2e5d2091-3e4c-44bf-997b-08d947af8818 X-MS-TrafficTypeDiagnostic: PH0PR12MB5402: 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: hju9b3K/JdoN8sWYRKj7KeEf+nw5LAMCi08nPFZW5lMJawuD4Lyvp5EBTksgflP4Jr6eYzxqM5mDs544OffyyStBL9QRClRLfTTKHf/GMBUr8D+uCGfx6O0C0B5oAvwP0tK7oHle+SZoM7inJo2VeuR3T3WQlfWckVjP3lsD6wfyz1FpxwOcXe/frW7pfqpEC5F4PtAufy9WraXHq5J9eOgzNUlZfn6O2XezqbgugNEj8WCDPczTGDVjAFFV9mCg+1YTPQIe1DkxizHgxgpl0AugO3Pl96D7tyG06fudJ/UH94lHpTq/a6Wdpoc3LQWOKjc2VkfmxQ2yzYrCAbYXF1VgoSLSed8tL6ddeKHutzBAAEGYDqOJxH+0JSfls5S7glDUJQnO5+hw52iTsfo+fQUJrb7hA6GzoVESzXWbW70Ocx+8WaqdOHKkP8idJh+Av+p5YXH5TSpD18uVPwuowXgtQzc/ldz0e/VzQUSKGhy94Q6j4xCDXKQ5mfeNYduYvolQtp+TFWR50XrxNEJVysCd4Fn7lAzbCSYEv2cp4hrR64rRlEWCslqNilSfHZPzH6Ty4y1EhRwVruTt+7zGcGrL4imBkONVEOiq2XpKYvqiTxC64JVEOSC4xMT1TrR0SDGfgQp0u2N/JlvF33Wvk+kYjgXxF2VpE0yx+Ds0+bslser8vchk+KgCnyfUrJ86KW8089x27NDGn68HnaH/ZA2HFHp1INHKjWJgO+oCkS4= 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)(46966006)(36840700001)(336012)(4326008)(2616005)(426003)(36906005)(55016002)(30864003)(86362001)(356005)(6286002)(1076003)(34020700004)(83380400001)(82310400003)(2906002)(7636003)(36756003)(47076005)(36860700001)(316002)(16526019)(186003)(70586007)(70206006)(26005)(5660300002)(8676002)(7696005)(8936002)(6916009)(54906003)(478600001)(559001)(579004); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:27.6698 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2e5d2091-3e4c-44bf-997b-08d947af8818 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: CO1NAM11FT037.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB5402 Subject: [dpdk-dev] [PATCH v8 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 16:41:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 95921 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 A78A5A0C41; Thu, 15 Jul 2021 18:43:50 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0907641356; Thu, 15 Jul 2021 18:42:39 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam07on2041.outbound.protection.outlook.com [40.107.212.41]) by mails.dpdk.org (Postfix) with ESMTP id F166D4125B for ; Thu, 15 Jul 2021 18:42:30 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HFsTwvyrSIan5Lzv20zvoZrzT90Pf7Kt/rjELg0C5EGsCrFHYZAXV9Um1sFpij+HAl8lAyTUQwLqa0P3tMfX/o7RQJoRZRteqktW8LWwaKdYeelU7W4Gzl06DrRpj5Jvpk+7IPRLbBV6qfDrDItD4qy0pALXKVSzRX+xkXWTT5LSroW49K92sGp3I+r5h1plsXHo+QT/jxTYME7VLkHucAmjQN9Ng1FGKGuJJ2WvvYZNaJ/cUuOCw2dn9bBW7MCt5iaYTZg+QjdweAJLfxtdUnJovxgUhllv5ZkUwS9j6Zz5X+f6KvExWo6d+HAlw+wa6+nYhrVdWN0Z2oXNCgVLXQ== 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=qRFWoSDhT7SOI8wuenW5x2Nosze3DxvlGEzUzE5uaGE=; b=OVmVlx6xn+B9W8ENZUhTPhrIb/yeOSBObZt0P/RmPvh6ymVY2zqrSAgQNIIviNqdDcneVFg0izLWymlNR0P/5vD8h/YhDrAc4Wv+qSAHa9KPCkuBZ8UxW1al0tpeiS0hA0sGq42EH8XrqdI06CfIG3Bw0U+PR2TYOMzv9nmwWfEbPL1D+D4VYepfNw4a4VcvM5xGShwzpPQ5NGPT7C7TUKy/hzQSMwZQHmLuzmnkGlEdlL0LKGQT8/PujMZum2NFPbrtfztypJYVot2VXtyKCw3N0/GjnnOgAaFrbUnzMsQX4WqiwQ3jcgPYeQTgEaIgcS1rKsOJUDwc7r4/EB+pAg== 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=qRFWoSDhT7SOI8wuenW5x2Nosze3DxvlGEzUzE5uaGE=; b=jc3O1WRxtDdIiT5jKZ4QFqRJnxtDj/aTgKCfhHYDSeoL6f1dZPjlHg5bkjFkjkRa4olgChoklWDVi4HVg98sd+mJn5n98law08hRsnSP99TpR/IRABHi6sre5eyHMkoTDKSw9ofCMXGrNDcNs+McftQLTJF6qxvAMyzq5AaS4Hwo6zmW0ag3PK7s2HT4jDDxbPVxHstgfo3+0OiXb3SpvVjEDAOgdGvlRj/wAV0M+EWKdPtv9ph4gOWoS+hs7TayLr5TQw8WkJ9UYQLAcL9EirbQlkMVj5CS3pcf4ZZG+XSAx26p/zgJbmDW48SL6/pvWYPPBpvFwRySqIH+wdyC1A== Received: from MW4PR04CA0343.namprd04.prod.outlook.com (2603:10b6:303:8a::18) by BYAPR12MB3542.namprd12.prod.outlook.com (2603:10b6:a03:135::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20; Thu, 15 Jul 2021 16:42:28 +0000 Received: from CO1NAM11FT037.eop-nam11.prod.protection.outlook.com (2603:10b6:303:8a:cafe::82) by MW4PR04CA0343.outlook.office365.com (2603:10b6:303:8a::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 16:42: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 CO1NAM11FT037.mail.protection.outlook.com (10.13.174.91) 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 16:42: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 16:42:26 +0000 From: Shiri Kuzin To: CC: , , , Date: Thu, 15 Jul 2021 19:41:26 +0300 Message-ID: <20210715164126.54073-17-shirik@nvidia.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210715164126.54073-1-shirik@nvidia.com> References: <20210715150817.51485-1-shirik@nvidia.com> <20210715164126.54073-1-shirik@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1e7ab0f4-e1f9-465f-5352-08d947af88a0 X-MS-TrafficTypeDiagnostic: BYAPR12MB3542: 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: UVSEVUaFycJpLdHK0qgj5lCzIav7iijDhbC7AWNLrZu+gMPft7iX7EkY2YsC2GDRawfcF8nPPN12JLzLPtIbuAAjKnNo2ahLxynR6oZWJ2W75QuxKC9KtA6ReiPn508ZpIuvdc67ZCtwF0TJQZKiJBNISneKNsxxotGlLHGZkkYRrHuxUoOVTzJ+93NqmC1U5g6DtJiE0t4VJWdseZtLaByJGs7nkCgMuP6IIC2BU43KHKOkOODNrwuWIIZCEOd/tSTTIpEOruNRmOqUlissoBeJ+O/PbWfa1dNOX7gta9WvfqM0DsbWvrYGsVVcz6qPcXiY4DylRPLJsY/rcXyFBxZlqU+/YFzV5qf5Q8V+Q0/FVuKN1jCReuzSQo420j94nEoq33552OI9bM7vJYEeR13NBcDgVyjkbN1HWeo5wC8S4UBQzWXBMjQqFSj/69CKKQ4lFQ59slON1x9WclICkiUiKJTjyS3OC83hEfXWsALc3+U7/jPds5r3Ixqhsm6JiPDaNUV6qn3aUykyeTVM8Fd6xYWDYKo/SOTPtVXyb5fEHT6RtXNqR0paFk3v2j+brX0KieLi1KbOm/DGeUr246aoVicWpFpgay3NSkozZ4YD9C3vjibxJ3d3vWFi27OAtn35+sX2gucPe2GTfhl5rzxdmgTuntkv9aG1fnszhUiVNI13UVcCmiPlW64CeXtnQl1ouFMOEIKFd6536iOvWZeL+qMHoEELI485zdTyBM8= 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)(396003)(346002)(376002)(39860400002)(46966006)(36840700001)(34020700004)(36756003)(82310400003)(54906003)(83380400001)(336012)(86362001)(1076003)(2906002)(7696005)(7636003)(36860700001)(6916009)(55016002)(82740400003)(6286002)(2616005)(426003)(36906005)(26005)(186003)(356005)(5660300002)(316002)(16526019)(47076005)(478600001)(8936002)(8676002)(70586007)(4326008)(70206006); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2021 16:42:28.5623 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1e7ab0f4-e1f9-465f-5352-08d947af88a0 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: CO1NAM11FT037.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB3542 Subject: [dpdk-dev] [PATCH v8 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 | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/app/test/test_cryptodev_aes_test_vectors.h b/app/test/test_cryptodev_aes_test_vectors.h index dd7ffde685..a797af1b00 100644 --- a/app/test/test_cryptodev_aes_test_vectors.h +++ b/app/test/test_cryptodev_aes_test_vectors.h @@ -4687,6 +4687,70 @@ static const struct blockcipher_test_case aes_cipheronly_test_cases[] = { .test_data = &aes_test_data_xts_wrapped_key_48_pt_4096_du_0, .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, }, + { + .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 - encryption", .test_data = &null_test_data_chain_x8_multiple,