Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/92761/?format=api
https://patches.dpdk.org/api/patches/92761/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210504210857.3398397-2-matan@nvidia.com/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20210504210857.3398397-2-matan@nvidia.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20210504210857.3398397-2-matan@nvidia.com", "date": "2021-05-04T21:08:43", "name": "[v3,01/15] drivers: introduce mlx5 crypto PMD", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": true, "hash": "b7fa05c2d2a1385af9efb023bd88764b6f5415ce", "submitter": { "id": 1911, "url": "https://patches.dpdk.org/api/people/1911/?format=api", "name": "Matan Azrad", "email": "matan@nvidia.com" }, "delegate": { "id": 6690, "url": "https://patches.dpdk.org/api/users/6690/?format=api", "username": "akhil", "first_name": "akhil", "last_name": "goyal", "email": "gakhil@marvell.com" }, "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210504210857.3398397-2-matan@nvidia.com/mbox/", "series": [ { "id": 16812, "url": "https://patches.dpdk.org/api/series/16812/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=16812", "date": "2021-05-04T21:08:42", "name": "drivers: introduce mlx5 crypto PMD", "version": 3, "mbox": "https://patches.dpdk.org/series/16812/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/92761/comments/", "check": "fail", "checks": "https://patches.dpdk.org/api/patches/92761/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "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])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 691C0A0A02;\n\tTue, 4 May 2021 23:09:32 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 748154067E;\n\tTue, 4 May 2021 23:09:28 +0200 (CEST)", "from NAM10-BN7-obe.outbound.protection.outlook.com\n (mail-bn7nam10on2058.outbound.protection.outlook.com [40.107.92.58])\n by mails.dpdk.org (Postfix) with ESMTP id 362314067E\n for <dev@dpdk.org>; Tue, 4 May 2021 23:09:26 +0200 (CEST)", "from MW4PR04CA0313.namprd04.prod.outlook.com (2603:10b6:303:82::18)\n by BYAPR12MB3320.namprd12.prod.outlook.com (2603:10b6:a03:d7::30)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.38; Tue, 4 May\n 2021 21:09:24 +0000", "from CO1NAM11FT061.eop-nam11.prod.protection.outlook.com\n (2603:10b6:303:82:cafe::30) by MW4PR04CA0313.outlook.office365.com\n (2603:10b6:303:82::18) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.29 via Frontend\n Transport; Tue, 4 May 2021 21:09:24 +0000", "from mail.nvidia.com (216.228.112.34) by\n CO1NAM11FT061.mail.protection.outlook.com (10.13.175.200) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id\n 15.20.4087.27 via Frontend Transport; Tue, 4 May 2021 21:09:23 +0000", "from nvidia.com (172.20.145.6) by HQMAIL107.nvidia.com\n (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 4 May\n 2021 21:09:21 +0000" ], "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=ZzdAvh6ODXklRpBmMqM2sCnxGoc6YVR9Peuc0gOJdBGE809YVUxo2Z9iA3VCLBnDgHXLAIQ0Uu52gEVw9MEUYFHhVGp4NNY4yJ74x1MEyi7OLcMa72wWXGqd+wGkdkUz7hOIPqLv4lvkTfHWwVofnf7lOAK/GYn/tJqH227o7mLPd8/o3Xk9Df59Enax52dhbemWt477ThpY45YZivmjG1RZHeoxmvdhbsF9aPFSUax8YcCMNtU+1T/XlczQtGm04khRs1BOcVaPuGIQDq+Our5VmhPz1g0a5pTZ1blPJMt3Gc8/gTOh+V06Xf/Ovps2I7oHSYdyka/taBViMqEidA==", "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=1TaBS6XnfsmX17Bt0i04FVwsmZWMn8wb4L3mAb9hY0Y=;\n b=lfq8zOYv59wVPkXIE3HVcPu4El3G1Fp/V8Hj7jcPKUneYDfaD5AMXWHoFX21k/iFAEWsJQ5t0taftoxKctyL+nnLbIqIccTjIgf1ZUhLHg+bSjod5pUEUqXxslOB8Nk2TwYLv/JJzStUzivY8recMhgFYFAWXbDVP4OoP2jypS+nulcvneMKjZRCKo10in7Rp5cjzMrXp+gATmwegpmIRMKFc4BEQtx7u9XW1ZYFUMZopEnoML8cl1IA72LTbivAi1yWgy0WjbteBRuFfXXcpxGQa4KqzwG2HiMDGlfYCCJOnDthPXwlVTbFD6kIpr3eKLOMZD8HFZ5JWywyavVoDg==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.112.34) smtp.rcpttodomain=monjalon.net smtp.mailfrom=nvidia.com;\n dmarc=pass (p=none sp=none pct=100) action=none header.from=nvidia.com;\n dkim=none (message not signed); arc=none", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=1TaBS6XnfsmX17Bt0i04FVwsmZWMn8wb4L3mAb9hY0Y=;\n b=YzYvFr3NmHDn6oqX2dk/6gFL+nPdZjQBJNggTAEMQbQQs8JLOfQDGc5oDwg5vM9IvwQH7YaKSzDgihkxYyC1/3KCmTb0T/aNWKInL7f36cXREtY54bxiITwE0Wohuq3pXYv9KnVP14pSaFdIkR2tmqNozWWHoKEnXkNJ6WKoucfA6MVj2f+vevvG5MFQjvBdKvdSt20HkStmucS9jQErIXkbsuF4J4A3uU4MAtrl1iPOjbvGyvfLRdx8SallYxMfLatyPivQZB6rXu1zTGMuj5RdTd2zZLFit4xmZ83N9y1HrFUigMCtwuXhqtSVCA6rwz1vSaF8DOFVz8bj6qpdjQ==", "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.112.34)\n smtp.mailfrom=nvidia.com; monjalon.net; dkim=none (message not signed)\n header.d=none;monjalon.net; dmarc=pass action=none header.from=nvidia.com;", "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.112.34 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.112.34; helo=mail.nvidia.com;", "From": "Matan Azrad <matan@nvidia.com>", "To": "<dev@dpdk.org>", "CC": "<matan@nvidia.com>, <gakhil@marvell.com>, <suanmingm@nvidia.com>, \"Thomas\n Monjalon\" <thomas@monjalon.net>, Shiri Kuzin <shirik@nvidia.com>", "Date": "Wed, 5 May 2021 00:08:43 +0300", "Message-ID": "<20210504210857.3398397-2-matan@nvidia.com>", "X-Mailer": "git-send-email 2.25.1", "In-Reply-To": "<20210504210857.3398397-1-matan@nvidia.com>", "References": "<20210429154712.2820159-1-matan@nvidia.com>\n <20210504210857.3398397-1-matan@nvidia.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-Originating-IP": "[172.20.145.6]", "X-ClientProxiedBy": "HQMAIL111.nvidia.com (172.20.187.18) To\n HQMAIL107.nvidia.com (172.20.187.13)", "X-EOPAttributedMessage": "0", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id": "8285141d-f5c3-4ba3-3f10-08d90f40e4b1", "X-MS-TrafficTypeDiagnostic": "BYAPR12MB3320:", "X-LD-Processed": "43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr", "X-Microsoft-Antispam-PRVS": "\n <BYAPR12MB33206F1B46194B3F3D90C9C7DF5A9@BYAPR12MB3320.namprd12.prod.outlook.com>", "X-MS-Oob-TLC-OOBClassifiers": "OLM:48;", "X-MS-Exchange-SenderADCheck": "1", "X-Microsoft-Antispam": "BCL:0;", "X-Microsoft-Antispam-Message-Info": "\n O/d0OnG9Fp0VIQRqBVtIq4f4Zo5IORAWiX0YaFXYA7ICzLDjmC2tzolGq2HRwGJWaYsRmfkM/NKKPCZ9gWC1AUrSz3uY288ofRswxB4+nY9aRTUaGwTquLTSybbKE2DQQBQRvxjoAondTjehT/rkJliyIWDBXty601pFn8KlkGlSf7ExLQz4RSuZb/sB2HTydstvd/Jb5xVBFQdzRTT/vS7VrGtwQIC4Ba5ji/fZyN1B4m6UkyAGFM646e2XDgSDDDoRSibnGN8PnlUqW4a/WyhdySXV+FgsfXV3dOYdNPJJiXa1s9fsuAI24uAg2NIhSB4KcOyd6sJR/36ixv9P6dBUf5oYjNub7Y9E5J6xdq2G/So+q8dIooP1bPsSmL7ncnTs7Fxg5UimSFZFGEbysENkAllP+1jdisNMond2U15ZX0qEpxK18dcMhjCP3wvN+aRYmQjugFtKMOOj222FqZ/G2vG2bu7SRQnftsxVifdwlq4ec1X2ryYEuy3m4hbZkUMLb1Iteq86hfBM4zJPxOu2qhnJyUcr1NddPSK/6rsHiBO9oS9pkgsA0FHN44+CWbJ1OmqYgTDnZmVF7qrSF9Rf2pC342cjPrkAck1ujWVdViFiSjT8NXdo20aCe569mgDuGKJFlY2GgDwNusEdkCu8ucVpITHu9up4v+xilsg=", "X-Forefront-Antispam-Report": "CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE;\n SFS:(4636009)(136003)(39860400002)(396003)(346002)(376002)(46966006)(36840700001)(6666004)(47076005)(86362001)(336012)(478600001)(54906003)(36756003)(30864003)(26005)(356005)(70206006)(4326008)(7636003)(1076003)(426003)(2616005)(70586007)(5660300002)(6916009)(55016002)(36906005)(316002)(82310400003)(16526019)(2906002)(107886003)(8936002)(7696005)(6286002)(83380400001)(36860700001)(8676002)(82740400003)(186003);\n DIR:OUT; SFP:1101;", "X-OriginatorOrg": "Nvidia.com", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "04 May 2021 21:09:23.7691 (UTC)", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 8285141d-f5c3-4ba3-3f10-08d90f40e4b1", "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a", "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34];\n Helo=[mail.nvidia.com]", "X-MS-Exchange-CrossTenant-AuthSource": "\n CO1NAM11FT061.eop-nam11.prod.protection.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BYAPR12MB3320", "Subject": "[dpdk-dev] [PATCH v3 01/15] drivers: introduce mlx5 crypto PMD", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "From: Shiri Kuzin <shirik@nvidia.com>\n\nAdd a new PMD for Nvidia devices- crypto PMD.\n\nThe crypto PMD will be supported starting Nvidia ConnectX6 and\nBlueField2.\n\nThe crypto PMD will add the support of encryption and decryption using\nthe AES-XTS symmetric algorithm.\n\nThe crypto PMD requires rdma-core and uses mlx5 DevX.\n\nThis patch adds the PCI probing, basic functions, build files and\nlog utility.\n\nSigned-off-by: Shiri Kuzin <shirik@nvidia.com>\nAcked-by: Matan Azrad <matan@nvidia.com>\n---\n MAINTAINERS | 4 +\n drivers/common/mlx5/mlx5_common.h | 1 +\n drivers/common/mlx5/mlx5_common_pci.c | 14 ++\n drivers/common/mlx5/mlx5_common_pci.h | 21 +-\n drivers/crypto/meson.build | 1 +\n drivers/crypto/mlx5/meson.build | 26 +++\n drivers/crypto/mlx5/mlx5_crypto.c | 272 ++++++++++++++++++++++++\n drivers/crypto/mlx5/mlx5_crypto_utils.h | 19 ++\n drivers/crypto/mlx5/version.map | 3 +\n 9 files changed, 351 insertions(+), 10 deletions(-)\n create mode 100644 drivers/crypto/mlx5/meson.build\n create mode 100644 drivers/crypto/mlx5/mlx5_crypto.c\n create mode 100644 drivers/crypto/mlx5/mlx5_crypto_utils.h\n create mode 100644 drivers/crypto/mlx5/version.map", "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex b40d8ae266..165474c91f 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -1078,6 +1078,10 @@ F: drivers/crypto/octeontx2/\n F: doc/guides/cryptodevs/octeontx2.rst\n F: doc/guides/cryptodevs/features/octeontx2.ini\n \n+Mellanox mlx5\n+M: Matan Azrad <matan@nvidia.com>\n+F: drivers/crypto/mlx5/\n+\n Null Crypto\n M: Declan Doherty <declan.doherty@intel.com>\n F: drivers/crypto/null/\ndiff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h\nindex 1fbefe0fa6..89aca32305 100644\n--- a/drivers/common/mlx5/mlx5_common.h\n+++ b/drivers/common/mlx5/mlx5_common.h\n@@ -216,6 +216,7 @@ enum mlx5_class {\n \tMLX5_CLASS_VDPA = RTE_BIT64(1),\n \tMLX5_CLASS_REGEX = RTE_BIT64(2),\n \tMLX5_CLASS_COMPRESS = RTE_BIT64(3),\n+\tMLX5_CLASS_CRYPTO = RTE_BIT64(4),\n };\n \n #define MLX5_DBR_SIZE RTE_CACHE_LINE_SIZE\ndiff --git a/drivers/common/mlx5/mlx5_common_pci.c b/drivers/common/mlx5/mlx5_common_pci.c\nindex 3f16cd21cf..8a47afee20 100644\n--- a/drivers/common/mlx5/mlx5_common_pci.c\n+++ b/drivers/common/mlx5/mlx5_common_pci.c\n@@ -31,6 +31,7 @@ static const struct {\n \t{ .name = \"net\", .driver_class = MLX5_CLASS_NET },\n \t{ .name = \"regex\", .driver_class = MLX5_CLASS_REGEX },\n \t{ .name = \"compress\", .driver_class = MLX5_CLASS_COMPRESS },\n+\t{ .name = \"crypto\", .driver_class = MLX5_CLASS_CRYPTO },\n };\n \n static const unsigned int mlx5_class_combinations[] = {\n@@ -38,13 +39,26 @@ static const unsigned int mlx5_class_combinations[] = {\n \tMLX5_CLASS_VDPA,\n \tMLX5_CLASS_REGEX,\n \tMLX5_CLASS_COMPRESS,\n+\tMLX5_CLASS_CRYPTO,\n \tMLX5_CLASS_NET | MLX5_CLASS_REGEX,\n \tMLX5_CLASS_VDPA | MLX5_CLASS_REGEX,\n \tMLX5_CLASS_NET | MLX5_CLASS_COMPRESS,\n \tMLX5_CLASS_VDPA | MLX5_CLASS_COMPRESS,\n \tMLX5_CLASS_REGEX | MLX5_CLASS_COMPRESS,\n+\tMLX5_CLASS_NET | MLX5_CLASS_CRYPTO,\n+\tMLX5_CLASS_VDPA | MLX5_CLASS_CRYPTO,\n+\tMLX5_CLASS_REGEX | MLX5_CLASS_CRYPTO,\n+\tMLX5_CLASS_COMPRESS | MLX5_CLASS_CRYPTO,\n \tMLX5_CLASS_NET | MLX5_CLASS_REGEX | MLX5_CLASS_COMPRESS,\n \tMLX5_CLASS_VDPA | MLX5_CLASS_REGEX | MLX5_CLASS_COMPRESS,\n+\tMLX5_CLASS_NET | MLX5_CLASS_REGEX | MLX5_CLASS_CRYPTO,\n+\tMLX5_CLASS_VDPA | MLX5_CLASS_REGEX | MLX5_CLASS_CRYPTO,\n+\tMLX5_CLASS_NET | MLX5_CLASS_COMPRESS | MLX5_CLASS_CRYPTO,\n+\tMLX5_CLASS_VDPA | MLX5_CLASS_COMPRESS | MLX5_CLASS_CRYPTO,\n+\tMLX5_CLASS_NET | MLX5_CLASS_REGEX | MLX5_CLASS_COMPRESS |\n+\tMLX5_CLASS_CRYPTO,\n+\tMLX5_CLASS_VDPA | MLX5_CLASS_REGEX | MLX5_CLASS_COMPRESS |\n+\tMLX5_CLASS_CRYPTO,\n \t/* New class combination should be added here. */\n };\n \ndiff --git a/drivers/common/mlx5/mlx5_common_pci.h b/drivers/common/mlx5/mlx5_common_pci.h\nindex de89bb98bc..cb8d2f5f87 100644\n--- a/drivers/common/mlx5/mlx5_common_pci.h\n+++ b/drivers/common/mlx5/mlx5_common_pci.h\n@@ -9,17 +9,18 @@\n * @file\n *\n * RTE Mellanox PCI Driver Interface\n- * Mellanox ConnectX PCI device supports multiple class: net,vdpa,regex and\n- * compress devices. This layer enables creating such multiple class of devices\n- * on a single PCI device by allowing to bind multiple class specific device\n- * driver to attach to mlx5_pci driver.\n+ * Mellanox ConnectX PCI device supports multiple class: net,vdpa,regex,compress\n+ * and crypto devices. This layer enables creating such multiple class of\n+ * devices on a single PCI device by allowing to bind multiple class specific\n+ * device driver to attach to mlx5_pci driver.\n *\n- * ----------- ------------ ------------- ----------------\n- * | mlx5 | | mlx5 | | mlx5 | | mlx5 |\n- * | net pmd | | vdpa pmd | | regex pmd | | compress pmd |\n- * ----------- ------------ ------------- ----------------\n- * \\ \\ / /\n- * \\ \\ / /\n+ * -------- -------- --------- ------------ ----------\n+ * | mlx5 | | mlx5 | | mlx5 | | mlx5 | | mlx5 |\n+ * | net | | vdpa | | regex | | compress | | crypto |\n+ * | pmd | | pmd | | pmd | | pmd | | pmd |\n+ * -------- -------- --------- ------------ ----------\n+ * \\ \\ | / /\n+ * \\ \\ | / /\n * \\ \\_--------------_/ /\n * \\_______________| mlx5 |_______________/\n * | pci common |\ndiff --git a/drivers/crypto/meson.build b/drivers/crypto/meson.build\nindex b9fdf9392f..6951607def 100644\n--- a/drivers/crypto/meson.build\n+++ b/drivers/crypto/meson.build\n@@ -15,6 +15,7 @@ drivers = [\n 'dpaa_sec',\n 'dpaa2_sec',\n 'kasumi',\n+ 'mlx5',\n 'mvsam',\n 'nitrox',\n 'null',\ndiff --git a/drivers/crypto/mlx5/meson.build b/drivers/crypto/mlx5/meson.build\nnew file mode 100644\nindex 0000000000..fd00283665\n--- /dev/null\n+++ b/drivers/crypto/mlx5/meson.build\n@@ -0,0 +1,26 @@\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright 2021 Mellanox Technologies, Ltd\n+\n+if not is_linux\n+\tbuild = false\n+\treason = 'only supported on Linux'\n+\tsubdir_done()\n+endif\n+\n+fmt_name = 'mlx5_crypto'\n+deps += ['common_mlx5', 'eal', 'cryptodev']\n+sources = files(\n+\t'mlx5_crypto.c',\n+)\n+cflags_options = [\n+\t'-std=c11',\n+\t'-Wno-strict-prototypes',\n+\t'-D_BSD_SOURCE',\n+\t'-D_DEFAULT_SOURCE',\n+\t'-D_XOPEN_SOURCE=600',\n+]\n+foreach option:cflags_options\n+\tif cc.has_argument(option)\n+\t\tcflags += option\n+\tendif\n+endforeach\ndiff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c\nnew file mode 100644\nindex 0000000000..ffbce5d68a\n--- /dev/null\n+++ b/drivers/crypto/mlx5/mlx5_crypto.c\n@@ -0,0 +1,272 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright 2021 Mellanox Technologies, Ltd\n+ */\n+\n+#include <rte_malloc.h>\n+#include <rte_log.h>\n+#include <rte_errno.h>\n+#include <rte_pci.h>\n+#include <rte_crypto.h>\n+#include <rte_cryptodev.h>\n+#include <rte_cryptodev_pmd.h>\n+\n+#include <mlx5_glue.h>\n+#include <mlx5_common.h>\n+#include <mlx5_common_pci.h>\n+#include <mlx5_devx_cmds.h>\n+#include <mlx5_common_os.h>\n+\n+#include \"mlx5_crypto_utils.h\"\n+\n+#define MLX5_CRYPTO_DRIVER_NAME mlx5_crypto\n+#define MLX5_CRYPTO_LOG_NAME pmd.crypto.mlx5\n+\n+struct mlx5_crypto_priv {\n+\tTAILQ_ENTRY(mlx5_crypto_priv) next;\n+\tstruct ibv_context *ctx; /* Device context. */\n+\tstruct rte_pci_device *pci_dev;\n+\tstruct rte_cryptodev *crypto_dev;\n+\tvoid *uar; /* User Access Region. */\n+\tuint32_t pdn; /* Protection Domain number. */\n+\tstruct ibv_pd *pd;\n+};\n+\n+TAILQ_HEAD(mlx5_crypto_privs, mlx5_crypto_priv) mlx5_crypto_priv_list =\n+\t\t\t\tTAILQ_HEAD_INITIALIZER(mlx5_crypto_priv_list);\n+static pthread_mutex_t priv_list_lock = PTHREAD_MUTEX_INITIALIZER;\n+\n+int mlx5_crypto_logtype;\n+\n+uint8_t mlx5_crypto_driver_id;\n+\n+static const char mlx5_crypto_drv_name[] = RTE_STR(MLX5_CRYPTO_DRIVER_NAME);\n+\n+static const struct rte_driver mlx5_drv = {\n+\t.name = mlx5_crypto_drv_name,\n+\t.alias = mlx5_crypto_drv_name\n+};\n+\n+static struct cryptodev_driver mlx5_cryptodev_driver;\n+\n+static struct rte_cryptodev_ops mlx5_crypto_ops = {\n+\t.dev_configure\t\t\t= NULL,\n+\t.dev_start\t\t\t= NULL,\n+\t.dev_stop\t\t\t= NULL,\n+\t.dev_close\t\t\t= NULL,\n+\t.dev_infos_get\t\t\t= NULL,\n+\t.stats_get\t\t\t= NULL,\n+\t.stats_reset\t\t\t= NULL,\n+\t.queue_pair_setup\t\t= NULL,\n+\t.queue_pair_release\t\t= NULL,\n+\t.sym_session_get_size\t\t= NULL,\n+\t.sym_session_configure\t\t= NULL,\n+\t.sym_session_clear\t\t= NULL,\n+\t.sym_get_raw_dp_ctx_size\t= NULL,\n+\t.sym_configure_raw_dp_ctx\t= NULL,\n+};\n+\n+static void\n+mlx5_crypto_hw_global_release(struct mlx5_crypto_priv *priv)\n+{\n+\tif (priv->pd != NULL) {\n+\t\tclaim_zero(mlx5_glue->dealloc_pd(priv->pd));\n+\t\tpriv->pd = NULL;\n+\t}\n+\tif (priv->uar != NULL) {\n+\t\tmlx5_glue->devx_free_uar(priv->uar);\n+\t\tpriv->uar = NULL;\n+\t}\n+}\n+\n+static int\n+mlx5_crypto_pd_create(struct mlx5_crypto_priv *priv)\n+{\n+#ifdef HAVE_IBV_FLOW_DV_SUPPORT\n+\tstruct mlx5dv_obj obj;\n+\tstruct mlx5dv_pd pd_info;\n+\tint ret;\n+\n+\tpriv->pd = mlx5_glue->alloc_pd(priv->ctx);\n+\tif (priv->pd == NULL) {\n+\t\tDRV_LOG(ERR, \"Failed to allocate PD.\");\n+\t\treturn errno ? -errno : -ENOMEM;\n+\t}\n+\tobj.pd.in = priv->pd;\n+\tobj.pd.out = &pd_info;\n+\tret = mlx5_glue->dv_init_obj(&obj, MLX5DV_OBJ_PD);\n+\tif (ret != 0) {\n+\t\tDRV_LOG(ERR, \"Fail to get PD object info.\");\n+\t\tmlx5_glue->dealloc_pd(priv->pd);\n+\t\tpriv->pd = NULL;\n+\t\treturn -errno;\n+\t}\n+\tpriv->pdn = pd_info.pdn;\n+\treturn 0;\n+#else\n+\t(void)priv;\n+\tDRV_LOG(ERR, \"Cannot get pdn - no DV support.\");\n+\treturn -ENOTSUP;\n+#endif /* HAVE_IBV_FLOW_DV_SUPPORT */\n+}\n+\n+static int\n+mlx5_crypto_hw_global_prepare(struct mlx5_crypto_priv *priv)\n+{\n+\tif (mlx5_crypto_pd_create(priv) != 0)\n+\t\treturn -1;\n+\tpriv->uar = mlx5_devx_alloc_uar(priv->ctx, -1);\n+\tif (priv->uar == NULL || mlx5_os_get_devx_uar_reg_addr(priv->uar) ==\n+\t NULL) {\n+\t\trte_errno = errno;\n+\t\tclaim_zero(mlx5_glue->dealloc_pd(priv->pd));\n+\t\tDRV_LOG(ERR, \"Failed to allocate UAR.\");\n+\t\treturn -1;\n+\t}\n+\treturn 0;\n+}\n+\n+/**\n+ * DPDK callback to register a PCI device.\n+ *\n+ * This function spawns crypto device out of a given PCI device.\n+ *\n+ * @param[in] pci_drv\n+ * PCI driver structure (mlx5_crypto_driver).\n+ * @param[in] pci_dev\n+ * PCI device information.\n+ *\n+ * @return\n+ * 0 on success, 1 to skip this driver, a negative errno value otherwise\n+ * and rte_errno is set.\n+ */\n+static int\n+mlx5_crypto_pci_probe(struct rte_pci_driver *pci_drv,\n+\t\t\tstruct rte_pci_device *pci_dev)\n+{\n+\tstruct ibv_device *ibv;\n+\tstruct rte_cryptodev *crypto_dev;\n+\tstruct ibv_context *ctx;\n+\tstruct mlx5_crypto_priv *priv;\n+\tstruct mlx5_hca_attr attr = { 0 };\n+\tstruct rte_cryptodev_pmd_init_params init_params = {\n+\t\t.name = \"\",\n+\t\t.private_data_size = sizeof(struct mlx5_crypto_priv),\n+\t\t.socket_id = pci_dev->device.numa_node,\n+\t\t.max_nb_queue_pairs =\n+\t\t\t\tRTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS,\n+\t};\n+\tRTE_SET_USED(pci_drv);\n+\tif (rte_eal_process_type() != RTE_PROC_PRIMARY) {\n+\t\tDRV_LOG(ERR, \"Non-primary process type is not supported.\");\n+\t\trte_errno = ENOTSUP;\n+\t\treturn -rte_errno;\n+\t}\n+\tibv = mlx5_os_get_ibv_device(&pci_dev->addr);\n+\tif (ibv == NULL) {\n+\t\tDRV_LOG(ERR, \"No matching IB device for PCI slot \"\n+\t\t\tPCI_PRI_FMT \".\", pci_dev->addr.domain,\n+\t\t\tpci_dev->addr.bus, pci_dev->addr.devid,\n+\t\t\tpci_dev->addr.function);\n+\t\treturn -rte_errno;\n+\t}\n+\tDRV_LOG(INFO, \"PCI information matches for device \\\"%s\\\".\", ibv->name);\n+\tctx = mlx5_glue->dv_open_device(ibv);\n+\tif (ctx == NULL) {\n+\t\tDRV_LOG(ERR, \"Failed to open IB device \\\"%s\\\".\", ibv->name);\n+\t\trte_errno = ENODEV;\n+\t\treturn -rte_errno;\n+\t}\n+\tif (mlx5_devx_cmd_query_hca_attr(ctx, &attr) != 0 ||\n+\t attr.crypto == 0 || attr.aes_xts == 0) {\n+\t\tDRV_LOG(ERR, \"Not enough capabilities to support crypto \"\n+\t\t\t\"operations, maybe old FW/OFED version?\");\n+\t\tclaim_zero(mlx5_glue->close_device(ctx));\n+\t\trte_errno = ENOTSUP;\n+\t\treturn -ENOTSUP;\n+\t}\n+\tcrypto_dev = rte_cryptodev_pmd_create(ibv->name, &pci_dev->device,\n+\t\t\t\t\t&init_params);\n+\tif (crypto_dev == NULL) {\n+\t\tDRV_LOG(ERR, \"Failed to create device \\\"%s\\\".\", ibv->name);\n+\t\tclaim_zero(mlx5_glue->close_device(ctx));\n+\t\treturn -ENODEV;\n+\t}\n+\tDRV_LOG(INFO,\n+\t\t\"Crypto device %s was created successfully.\", ibv->name);\n+\tcrypto_dev->dev_ops = &mlx5_crypto_ops;\n+\tcrypto_dev->dequeue_burst = NULL;\n+\tcrypto_dev->enqueue_burst = NULL;\n+\tcrypto_dev->feature_flags = RTE_CRYPTODEV_FF_HW_ACCELERATED;\n+\tcrypto_dev->driver_id = mlx5_crypto_driver_id;\n+\tpriv = crypto_dev->data->dev_private;\n+\tpriv->ctx = ctx;\n+\tpriv->pci_dev = pci_dev;\n+\tpriv->crypto_dev = crypto_dev;\n+\tif (mlx5_crypto_hw_global_prepare(priv) != 0) {\n+\t\trte_cryptodev_pmd_destroy(priv->crypto_dev);\n+\t\tclaim_zero(mlx5_glue->close_device(priv->ctx));\n+\t\treturn -1;\n+\t}\n+\tpthread_mutex_lock(&priv_list_lock);\n+\tTAILQ_INSERT_TAIL(&mlx5_crypto_priv_list, priv, next);\n+\tpthread_mutex_unlock(&priv_list_lock);\n+\treturn 0;\n+}\n+\n+static int\n+mlx5_crypto_pci_remove(struct rte_pci_device *pdev)\n+{\n+\tstruct mlx5_crypto_priv *priv = NULL;\n+\n+\tpthread_mutex_lock(&priv_list_lock);\n+\tTAILQ_FOREACH(priv, &mlx5_crypto_priv_list, next)\n+\t\tif (rte_pci_addr_cmp(&priv->pci_dev->addr, &pdev->addr) != 0)\n+\t\t\tbreak;\n+\tif (priv)\n+\t\tTAILQ_REMOVE(&mlx5_crypto_priv_list, priv, next);\n+\tpthread_mutex_unlock(&priv_list_lock);\n+\tif (priv) {\n+\t\tmlx5_crypto_hw_global_release(priv);\n+\t\trte_cryptodev_pmd_destroy(priv->crypto_dev);\n+\t\tclaim_zero(mlx5_glue->close_device(priv->ctx));\n+\t}\n+\treturn 0;\n+}\n+\n+static const struct rte_pci_id mlx5_crypto_pci_id_map[] = {\n+\t\t{\n+\t\t\tRTE_PCI_DEVICE(PCI_VENDOR_ID_MELLANOX,\n+\t\t\t\t\tPCI_DEVICE_ID_MELLANOX_CONNECTX6)\n+\t\t},\n+\t\t{\n+\t\t\t.vendor_id = 0\n+\t\t}\n+\t};\n+\n+static struct mlx5_pci_driver mlx5_crypto_driver = {\n+\t.driver_class = MLX5_CLASS_CRYPTO,\n+\t.pci_driver = {\n+\t\t.driver = {\n+\t\t\t.name = RTE_STR(MLX5_CRYPTO_DRIVER_NAME),\n+\t\t},\n+\t\t.id_table = mlx5_crypto_pci_id_map,\n+\t\t.probe = mlx5_crypto_pci_probe,\n+\t\t.remove = mlx5_crypto_pci_remove,\n+\t\t.drv_flags = 0,\n+\t},\n+};\n+\n+RTE_INIT(rte_mlx5_crypto_init)\n+{\n+\tmlx5_common_init();\n+\tif (mlx5_glue != NULL)\n+\t\tmlx5_pci_driver_register(&mlx5_crypto_driver);\n+}\n+\n+RTE_PMD_REGISTER_CRYPTO_DRIVER(mlx5_cryptodev_driver, mlx5_drv,\n+\t\t\t mlx5_crypto_driver_id);\n+\n+RTE_LOG_REGISTER(mlx5_crypto_logtype, MLX5_CRYPTO_LOG_NAME, NOTICE)\n+RTE_PMD_EXPORT_NAME(MLX5_CRYPTO_DRIVER_NAME, __COUNTER__);\n+RTE_PMD_REGISTER_PCI_TABLE(MLX5_CRYPTO_DRIVER_NAME, mlx5_crypto_pci_id_map);\n+RTE_PMD_REGISTER_KMOD_DEP(MLX5_CRYPTO_DRIVER_NAME, \"* ib_uverbs & mlx5_core & mlx5_ib\");\ndiff --git a/drivers/crypto/mlx5/mlx5_crypto_utils.h b/drivers/crypto/mlx5/mlx5_crypto_utils.h\nnew file mode 100644\nindex 0000000000..cef4b07a36\n--- /dev/null\n+++ b/drivers/crypto/mlx5/mlx5_crypto_utils.h\n@@ -0,0 +1,19 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright 2021 Mellanox Technologies, Ltd\n+ */\n+\n+#ifndef RTE_PMD_MLX5_CRYPTO_UTILS_H_\n+#define RTE_PMD_MLX5_CRYPTO_UTILS_H_\n+\n+#include <mlx5_common.h>\n+\n+extern int mlx5_crypto_logtype;\n+\n+#define MLX5_CRYPTO_LOG_PREFIX \"mlx5_crypto\"\n+/* Generic printf()-like logging macro with automatic line feed. */\n+#define DRV_LOG(level, ...) \\\n+\tPMD_DRV_LOG_(level, mlx5_crypto_logtype, MLX5_CRYPTO_LOG_PREFIX, \\\n+\t\t__VA_ARGS__ PMD_DRV_LOG_STRIP PMD_DRV_LOG_OPAREN, \\\n+\t\tPMD_DRV_LOG_CPAREN)\n+\n+#endif /* RTE_PMD_MLX5_CRYPTO_UTILS_H_ */\ndiff --git a/drivers/crypto/mlx5/version.map b/drivers/crypto/mlx5/version.map\nnew file mode 100644\nindex 0000000000..4a76d1d52d\n--- /dev/null\n+++ b/drivers/crypto/mlx5/version.map\n@@ -0,0 +1,3 @@\n+DPDK_21 {\n+\tlocal: *;\n+};\n", "prefixes": [ "v3", "01/15" ] }{ "id": 92761, "url": "