get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/92433/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 92433,
    "url": "https://patches.dpdk.org/api/patches/92433/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210429154712.2820159-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": "<20210429154712.2820159-2-matan@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210429154712.2820159-2-matan@nvidia.com",
    "date": "2021-04-29T15:46:58",
    "name": "[v2,01/15] drivers: introduce mlx5 crypto PMD",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "f029746a6db9a7aeba6ceefef52f2868e4f62067",
    "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/20210429154712.2820159-2-matan@nvidia.com/mbox/",
    "series": [
        {
            "id": 16765,
            "url": "https://patches.dpdk.org/api/series/16765/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=16765",
            "date": "2021-04-29T15:46:57",
            "name": "drivers: introduce mlx5 crypto PMD",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/16765/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/92433/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/92433/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 50B8FA0547;\n\tThu, 29 Apr 2021 17:47:43 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 84E9441328;\n\tThu, 29 Apr 2021 17:47:42 +0200 (CEST)",
            "from NAM11-CO1-obe.outbound.protection.outlook.com\n (mail-co1nam11on2079.outbound.protection.outlook.com [40.107.220.79])\n by mails.dpdk.org (Postfix) with ESMTP id BA44B41328\n for <dev@dpdk.org>; Thu, 29 Apr 2021 17:47:40 +0200 (CEST)",
            "from DM6PR10CA0018.namprd10.prod.outlook.com (2603:10b6:5:60::31) by\n DM6PR12MB3563.namprd12.prod.outlook.com (2603:10b6:5:11a::19) with\n Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.4065.26; Thu, 29 Apr 2021 15:47:38 +0000",
            "from DM6NAM11FT056.eop-nam11.prod.protection.outlook.com\n (2603:10b6:5:60:cafe::9d) by DM6PR10CA0018.outlook.office365.com\n (2603:10b6:5:60::31) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.27 via Frontend\n Transport; Thu, 29 Apr 2021 15:47:38 +0000",
            "from mail.nvidia.com (216.228.112.34) by\n DM6NAM11FT056.mail.protection.outlook.com (10.13.173.99) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id\n 15.20.4087.32 via Frontend Transport; Thu, 29 Apr 2021 15:47:38 +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; Thu, 29 Apr\n 2021 15:47:36 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=J9rU8XSpm+6/rrlG1SxQlaqdL9AD6kskAOoRaEb3ROcckMYRoCZcEaLJVlK9n002rVGN8QvXprzq4EK/LGkH8/sc6cTF++TdtPLLHwKrHCA1PxXUYZeBgnYD2B/XWDxs9fuhqvWiTFjYjBoDG8AMG2vL9aqynyhD20uJxdiKIUzUEZPplXZrfUDNA70KFphoLV2YT96R3ssNAtSSAg8NC9e1yp27mK7RxaF+B7ahsA8DKH4Y/V779ZbrAGzFOOHhHajtZLMzRntlHcjO99zvAdjxkAsa64Y2VMh+q0KYNT5sEK/eG3iw7US+NmyeKdZDAdqxBja1+rIEqoQqqmwvEg==",
        "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=jf+LA4yaLNMTKGn7q+tHsHUbswJjDPoImQ7oS3nWC5s=;\n b=e6F11fIKzElnVMx4UJ3mp7iP8LVKYgRT559KN7wTwA/JFHO/sfbJkpuaVDf4+GMfTVIXTKUgMPlTmvHYiEBW/ENOM5azDLtjCE8QtgL7MalBVXmvBSWkHPUPwprl5SMuZBBGVLcLQo6q+JmEP/nsuGIeN3/wjZUAJqiwmMwTt8tqdznvrGIQoog7Cy17J5lPRhfnjcN60tKiY5nOca5TOpXSiAe/mvsldtgroGJ98im4fQx00C4Szk2b8Novta04Jm/PRN1UchyYbqdpySjPZZkOvacY/ZxEgNFokCqPua5oxLKLgRRoeVe14vKpaw2+wJRNoFOvd7XGf6xNymdcFA==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.112.34) smtp.rcpttodomain=marvell.com 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=jf+LA4yaLNMTKGn7q+tHsHUbswJjDPoImQ7oS3nWC5s=;\n b=hm8LZXBAVBuV7kiyxJNmvp3MBA1qSolnZeS5EoNIUifqTZItGQKkkWou8aPC10+d3DEp9JrB9HFQVEdqjjYeCiHVjtJcJ1Xy/Pd/TufSLAmNtoqnQQA5WwPGnLRZ7Y/T5xsBZmzrbRRlhZmxdS32ZqmYPZbAhD+EqXig76UxCJD5LvYoZB7Awto/PLxUzar5tFNpNn3TNoxZV40hBw7Uk+udQe2RgcQXNtFM+9kUjTGfHXQ6aEeI+LgLNM5pspULnyXa5+dzgWMdd5j0vbuOqSPwnoFdztE1D/qkfs4mSymaudEE+DuEtt6xYbnXBoEakIGn+5w6BiPNG0NLseFXBQ==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.112.34)\n smtp.mailfrom=nvidia.com; marvell.com; dkim=none (message not signed)\n header.d=none;marvell.com; 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>, \"Shiri\n Kuzin\" <shirik@nvidia.com>",
        "Date": "Thu, 29 Apr 2021 18:46:58 +0300",
        "Message-ID": "<20210429154712.2820159-2-matan@nvidia.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20210429154712.2820159-1-matan@nvidia.com>",
        "References": "<20210408204849.9543-1-shirik@nvidia.com>\n <20210429154712.2820159-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": "HQMAIL107.nvidia.com (172.20.187.13) To\n HQMAIL107.nvidia.com (172.20.187.13)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "6b9c41c6-c344-48ed-00ee-08d90b261dc8",
        "X-MS-TrafficTypeDiagnostic": "DM6PR12MB3563:",
        "X-Microsoft-Antispam-PRVS": "\n <DM6PR12MB35630B6D59465E7D1D2FD7C2DF5F9@DM6PR12MB3563.namprd12.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:56;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n fFCRAUbLUIHzznX9JBiv5p4Ffsymg35oAgJYrYeUXq0YBdVsgcc1rvVl+zvKB+TF3KAw5jNVZsuoa55466aBJu6KkqrvpVL3jIQWFrghlhL8OQikPkqXzt7gBdEjTCgJurq2JS46pu0V23cgjJxwW6uMnAGAU4IN1WiXb7NGzUJWUnhBOAVAiWkxykNF3ZsFz+hQw9PgeGF+gv7nJwRO4qFfqf+EMezfu6TTqH+eu3Uv/RBewCHaBopBvPKP2s7XQMQvQ83OXbufHi0oSv/y4YEqQSDc47xsXEcDCz/YVnVGL3nqDJIjkFZFpXi4zUTcHgoDGzxTGFiEShwcoh+DDR8IT5Mo2tnHCWcAk9AIojRZm6K1c9j0zJ5o4CNSSZL6ttHW2Nr/Pwe8Uxgh+ROFmDA0ei6YHvuMze7lEVCvkWWtp63eS14tSn/R1zqaaAcJbt/pcgV5T6XK6Y6FMHZCDNlDZQJiRb7GeaD+3hQJZyJH3zNzRpnp+JhaK3rvchOtcSHHnTX9RQoo+ef782ipIhZdhkFnL9ApMbhYAu98Z5KBSOPZTA0iJdYhc3BN8Uh2dc1fzXC6JiEWnRIzsZtE0sBOOEb+h7xDGGAjTL5lSsIyPTiLcdehv7f6tlkJvgWDXsPOtvVM7nDUh8tzww4uwpm79ZQp8FsS44d0yr5B/Eg=",
        "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)(376002)(39860400002)(346002)(396003)(36840700001)(46966006)(70586007)(82740400003)(316002)(55016002)(8936002)(54906003)(47076005)(7636003)(5660300002)(336012)(107886003)(356005)(2616005)(83380400001)(6286002)(70206006)(8676002)(2906002)(36906005)(36860700001)(7696005)(1076003)(26005)(86362001)(478600001)(30864003)(6666004)(36756003)(16526019)(426003)(82310400003)(6916009)(186003)(4326008);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "29 Apr 2021 15:47:38.4786 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 6b9c41c6-c344-48ed-00ee-08d90b261dc8",
        "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 DM6NAM11FT056.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR12MB3563",
        "Subject": "[dpdk-dev] [PATCH v2 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_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 8 files changed, 350 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 44f3d322ed..707e5a43b4 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -1081,6 +1081,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_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..7d9bd64cd1 100644\n--- a/drivers/crypto/meson.build\n+++ b/drivers/crypto/meson.build\n@@ -16,6 +16,7 @@ drivers = [\n         'dpaa2_sec',\n         'kasumi',\n         'mvsam',\n+        'mlx5',\n         'nitrox',\n         'null',\n         'octeontx',\ndiff --git a/drivers/crypto/mlx5/meson.build b/drivers/crypto/mlx5/meson.build\nnew file mode 100644\nindex 0000000000..5bf0912766\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\n\\ No newline at end of file\ndiff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c\nnew file mode 100644\nindex 0000000000..8a3a307f7b\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_ib_device_match(&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": [
        "v2",
        "01/15"
    ]
}