get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 95470,
    "url": "https://patches.dpdk.org/api/patches/95470/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210706164418.32615-9-vsrivast@xilinx.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": "<20210706164418.32615-9-vsrivast@xilinx.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210706164418.32615-9-vsrivast@xilinx.com",
    "date": "2021-07-06T16:44:16",
    "name": "[08/10] vdpa/sfc: add support for MAC filter config",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "1f8e1993c8624e8b42e6e5f726e9e477119030c2",
    "submitter": {
        "id": 2281,
        "url": "https://patches.dpdk.org/api/people/2281/?format=api",
        "name": "Vijay Srivastava",
        "email": "vijay.srivastava@xilinx.com"
    },
    "delegate": {
        "id": 2642,
        "url": "https://patches.dpdk.org/api/users/2642/?format=api",
        "username": "mcoquelin",
        "first_name": "Maxime",
        "last_name": "Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210706164418.32615-9-vsrivast@xilinx.com/mbox/",
    "series": [
        {
            "id": 17687,
            "url": "https://patches.dpdk.org/api/series/17687/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17687",
            "date": "2021-07-06T16:44:08",
            "name": "vdpa/sfc: introduce Xilinx vDPA driver",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/17687/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/95470/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/95470/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 2B3CAA0C4A;\n\tWed,  7 Jul 2021 10:26:26 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 1FC5E414AA;\n\tWed,  7 Jul 2021 10:25:40 +0200 (CEST)",
            "from NAM10-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam10on2045.outbound.protection.outlook.com [40.107.94.45])\n by mails.dpdk.org (Postfix) with ESMTP id 8310C4120E\n for <dev@dpdk.org>; Tue,  6 Jul 2021 18:50:26 +0200 (CEST)",
            "from DM6PR06CA0056.namprd06.prod.outlook.com (2603:10b6:5:54::33) by\n DM6PR02MB4347.namprd02.prod.outlook.com (2603:10b6:5:2a::32) with\n Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.4287.26; Tue, 6 Jul 2021 16:50:23 +0000",
            "from DM3NAM02FT017.eop-nam02.prod.protection.outlook.com\n (2603:10b6:5:54:cafe::46) by DM6PR06CA0056.outlook.office365.com\n (2603:10b6:5:54::33) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend\n Transport; Tue, 6 Jul 2021 16:50:23 +0000",
            "from xsj-pvapexch02.xlnx.xilinx.com (149.199.62.198) by\n DM3NAM02FT017.mail.protection.outlook.com (10.13.5.6) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n 15.20.4287.22 via Frontend Transport; Tue, 6 Jul 2021 16:50:23 +0000",
            "from xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) by\n xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) with Microsoft SMTP Server\n (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n 15.1.2176.2; Tue, 6 Jul 2021 09:50:08 -0700",
            "from smtp.xilinx.com (172.19.127.96) by\n xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) with Microsoft SMTP Server id\n 15.1.2176.2 via Frontend Transport; Tue, 6 Jul 2021 09:50:08 -0700",
            "from [10.177.4.108] (port=54950 helo=xndengvm004108.xilinx.com)\n by smtp.xilinx.com with esmtp (Exim 4.90)\n (envelope-from <vijay.srivastava@xilinx.com>)\n id 1m0oGt-0000pF-Rh; Tue, 06 Jul 2021 09:50:08 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=JmXyiCJtxD59y7+oegcK6lBa0LXUMevK+4RI72iWuH+GcJ2bX1I/WyA0RhJQuPwkyOIw85FxINMmRxKbDPHEBTzVPAOGCBG5cbG9ECM2EjfWyzbkTV1om6Nk12BZntof4+KwyZhcxlxu5qzGq6Wy5zjEKtRDqgiMVsgFpF9XQIftaXDvRtKB/Mjx1VmbPJLNPWtM8BATLMQSFwAAJ5xwJyns4WmPbj9hRb1VgblbmU9PSAF48HG5ZbKhnmT8+QXRAyvf2c0cKvtVZ4LNXk34PFfhkc6DmpwkDV9D9jr+NhIH3Zd7OsH/Pe9nYJ4XoN5oAilN940pngOGfGjq6js8Qg==",
        "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=jHQDkohYiAfd4Y5TJG6b5RyhMAU3JyIwrdNyqPrxkho=;\n b=AGQzQN0Qh24XChENa2AU7wGP7zwW87XXBlWUi19uxUw9u+JxJ1IqLxM6LMzC776r3gdpNy7lwvZ/IS1VooS1vusV/lYktWQqNynX69O3tLLMkBjMsYWYqELg+gWa2s98vcnBhhwDL8vGu6VKycxqCbEhtP7YCVf2Bj4oSjysDJIdkpnA1hhO1lGYYaazgKCDhzW/46mDOoilGmRMD7qhMAwYCrUv+/l9vg/hkv62b4zJsEd+N2EjxmIPOQvD8aQasSSm2yihZR6Iz28aOajYBUzU9BXZ6ujzTemURV5iQxa/t+gFjg5F9bAjTTVfFulMtpmV7rW0UXApnGw1j622sg==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 149.199.62.198) smtp.rcpttodomain=dpdk.org smtp.mailfrom=xilinx.com;\n dmarc=pass (p=none sp=none pct=100) action=none header.from=xilinx.com;\n dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=jHQDkohYiAfd4Y5TJG6b5RyhMAU3JyIwrdNyqPrxkho=;\n b=swsNABAj0JnSw6fhwJbuwY+nrUAZWL8g+TbUXnd4Dj4i9Xhp2XBfuMtGR7AsjLqhYVW6d/mfugYixCG0nlbwqgrX58a7cJZ+rR6ekPvSU5rAUHdaFMp7foTlmaN/0gHF1Q1V6PsEvY4F57u3D0snf/E/uecEHyuDuvSJmMA1aQA=",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 149.199.62.198)\n smtp.mailfrom=xilinx.com; dpdk.org; dkim=none (message not signed)\n header.d=none;dpdk.org; dmarc=pass action=none header.from=xilinx.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of xilinx.com designates\n 149.199.62.198 as permitted sender) receiver=protection.outlook.com;\n client-ip=149.199.62.198; helo=xsj-pvapexch02.xlnx.xilinx.com;",
        "Envelope-to": "dev@dpdk.org, maxime.coquelin@redhat.com, chenbo.xia@intel.com,\n andrew.rybchenko@oktetlabs.ru",
        "From": "Vijay Srivastava <vijay.srivastava@xilinx.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<maxime.coquelin@redhat.com>, <chenbo.xia@intel.com>,\n <andrew.rybchenko@oktetlabs.ru>, Vijay Kumar Srivastava <vsrivast@xilinx.com>",
        "Date": "Tue, 6 Jul 2021 22:14:16 +0530",
        "Message-ID": "<20210706164418.32615-9-vsrivast@xilinx.com>",
        "X-Mailer": "git-send-email 2.25.0",
        "In-Reply-To": "<20210706164418.32615-1-vsrivast@xilinx.com>",
        "References": "<20210706164418.32615-1-vsrivast@xilinx.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "7ad0d5d4-e0aa-4cb5-e44a-08d9409e25e7",
        "X-MS-TrafficTypeDiagnostic": "DM6PR02MB4347:",
        "X-Microsoft-Antispam-PRVS": "\n <DM6PR02MB4347A34F0D5D484670DB144DB91B9@DM6PR02MB4347.namprd02.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:240;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n iua7mikMSmNjzKSo9uLYhIjnUceu15qoJ6zePtSv+WvBBuiWLg86W0YgiOanae5QlY7ZpNFpLSzNXuQo6RzzlO+DF715QAXuHmUJyjI8ruVLzz6OeN6/XQu1L1vAie5Y64MCexz8b2hMftvC72dE0uwKqccdvtYyCW/pm0PWAvfupBIBtrNmGT0k27uVu8WKCPQY/Si7TjzNIpCo9gc8X9IX6sepJDoNpMFHFLs8iaSj5sksPAYQ9o4/DLNl5OD/t5ftCL49fG4VTR9FEOzN6Ab6yUXbQ9o/dYrDuX4W90XoXRgZGnPmfewYb1h1n2J8hOlYDxiRsNzKyA1O1klzBNXbJqh4LxHCopUgMvSxjbS2o1FAPbZmQpqHOGuhYQRaPb4/CEa343t/8Cr6Y22yy+/NQ4TrUF0jmwZ8IfaV97aC2xb2htVoehj+bHj1q6JpLtG4ycs4sskA0d0fIGiOXLVcQaw2NHMQMegVWgcnSwt+tnbZRndvB/3Dva1WJPbokWdBx7NtjpplG1HmsRlHMwtYTKyvrvJmTAJhQIx+kBboMlkZxW8iWf72msS/Kpodrv/AqAnXPDqTaB6FQrvowOawbGlS0JQRXr1DPzodipJnWEa3gqmRE01dLWe/Ivg97wtnY/pJ+T9nBtflbeifMDv3JveoGyNSRUNSMhATdM0RfbNGtDQJcTX24PmSmkWnTYy54G/O/XXJDF5SN/TvmBvgHQpOEw5WYbyJ5hvwF40=",
        "X-Forefront-Antispam-Report": "CIP:149.199.62.198; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:xsj-pvapexch02.xlnx.xilinx.com;\n PTR:unknown-62-198.xilinx.com; CAT:NONE;\n SFS:(4636009)(39860400002)(136003)(346002)(396003)(376002)(46966006)(36840700001)(2906002)(316002)(186003)(36906005)(82310400003)(1076003)(426003)(26005)(336012)(107886003)(8936002)(2616005)(7636003)(54906003)(8676002)(4326008)(83380400001)(44832011)(5660300002)(7696005)(356005)(6666004)(70206006)(47076005)(82740400003)(36860700001)(70586007)(9786002)(6916009)(36756003)(478600001)(102446001);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "xilinx.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "06 Jul 2021 16:50:23.3690 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 7ad0d5d4-e0aa-4cb5-e44a-08d9409e25e7",
        "X-MS-Exchange-CrossTenant-Id": "657af505-d5df-48d0-8300-c31994686c5c",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.62.198];\n Helo=[xsj-pvapexch02.xlnx.xilinx.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n DM3NAM02FT017.eop-nam02.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR02MB4347",
        "X-Mailman-Approved-At": "Wed, 07 Jul 2021 10:25:28 +0200",
        "Subject": "[dpdk-dev] [PATCH 08/10] vdpa/sfc: add support for MAC filter config",
        "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: Vijay Kumar Srivastava <vsrivast@xilinx.com>\n\nAdd support for unicast and broadcast MAC filter configuration.\n\nSigned-off-by: Vijay Kumar Srivastava <vsrivast@xilinx.com>\n---\n doc/guides/vdpadevs/sfc.rst        |   4 ++\n drivers/vdpa/sfc/meson.build       |   1 +\n drivers/vdpa/sfc/sfc_vdpa.c        |  32 +++++++++\n drivers/vdpa/sfc/sfc_vdpa.h        |  30 ++++++++\n drivers/vdpa/sfc/sfc_vdpa_filter.c | 144 +++++++++++++++++++++++++++++++++++++\n drivers/vdpa/sfc/sfc_vdpa_hw.c     |  10 +++\n drivers/vdpa/sfc/sfc_vdpa_ops.c    |  17 +++++\n 7 files changed, 238 insertions(+)\n create mode 100644 drivers/vdpa/sfc/sfc_vdpa_filter.c",
    "diff": "diff --git a/doc/guides/vdpadevs/sfc.rst b/doc/guides/vdpadevs/sfc.rst\nindex abb5900..ae5ef42 100644\n--- a/doc/guides/vdpadevs/sfc.rst\n+++ b/doc/guides/vdpadevs/sfc.rst\n@@ -71,6 +71,10 @@ boolean parameters value.\n   **vdpa** device will work as vdpa device and will be probed by vdpa/sfc driver.\n   If this parameter is not specified then ef100 device will operate as network device.\n \n+- ``mac`` [mac address]\n+\n+  Configures MAC address which would be used to setup MAC filters.\n+\n \n Dynamic Logging Parameters\n ~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiff --git a/drivers/vdpa/sfc/meson.build b/drivers/vdpa/sfc/meson.build\nindex aac7c51..f69cba9 100644\n--- a/drivers/vdpa/sfc/meson.build\n+++ b/drivers/vdpa/sfc/meson.build\n@@ -33,4 +33,5 @@ sources = files(\n \t'sfc_vdpa_hw.c',\n \t'sfc_vdpa_mcdi.c',\n \t'sfc_vdpa_ops.c',\n+\t'sfc_vdpa_filter.c',\n )\ndiff --git a/drivers/vdpa/sfc/sfc_vdpa.c b/drivers/vdpa/sfc/sfc_vdpa.c\nindex ca13483..703aa9e 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa.c\n+++ b/drivers/vdpa/sfc/sfc_vdpa.c\n@@ -8,7 +8,9 @@\n #include <sys/queue.h>\n \n #include <rte_common.h>\n+#include <rte_devargs.h>\n #include <rte_errno.h>\n+#include <rte_kvargs.h>\n #include <rte_string_fns.h>\n #include <rte_vfio.h>\n #include <rte_vhost.h>\n@@ -202,6 +204,31 @@ struct sfc_vdpa_ops_data *\n \treturn (ret < 0) ? RTE_LOGTYPE_PMD : ret;\n }\n \n+static int\n+sfc_vdpa_kvargs_parse(struct sfc_vdpa_adapter *sva)\n+{\n+\tstruct rte_pci_device *pci_dev = sva->pdev;\n+\tstruct rte_devargs *devargs = pci_dev->device.devargs;\n+\t/*\n+\t * To get the device class a mandatory param 'class' is being\n+\t * used so included SFC_EFX_KVARG_DEV_CLASS in the param list.\n+\t */\n+\tconst char **params = (const char *[]){\n+\t\tSFC_EFX_KVARG_DEV_CLASS,\n+\t\tSFC_VDPA_MAC_ADDR,\n+\t\tNULL,\n+\t};\n+\n+\tif (devargs == NULL)\n+\t\treturn 0;\n+\n+\tsva->kvargs = rte_kvargs_parse(devargs->args, params);\n+\tif (sva->kvargs == NULL)\n+\t\treturn -EINVAL;\n+\n+\treturn 0;\n+}\n+\n static struct rte_pci_id pci_id_sfc_vdpa_efx_map[] = {\n \t{ RTE_PCI_DEVICE(EFX_PCI_VENID_XILINX, EFX_PCI_DEVID_RIVERHEAD_VF) },\n \t{ .vendor_id = 0, /* sentinel */ },\n@@ -244,6 +271,10 @@ struct sfc_vdpa_ops_data *\n \tif (ret != 0)\n \t\tgoto fail_set_log_prefix;\n \n+\tret = sfc_vdpa_kvargs_parse(sva);\n+\tif (ret != 0)\n+\t\tgoto fail_kvargs_parse;\n+\n \tsfc_vdpa_log_init(sva, \"entry\");\n \n \tsfc_vdpa_adapter_lock_init(sva);\n@@ -284,6 +315,7 @@ struct sfc_vdpa_ops_data *\n fail_vfio_setup:\n \tsfc_vdpa_adapter_lock_fini(sva);\n \n+fail_kvargs_parse:\n fail_set_log_prefix:\n \trte_free(sva);\n \ndiff --git a/drivers/vdpa/sfc/sfc_vdpa.h b/drivers/vdpa/sfc/sfc_vdpa.h\nindex b103b0a..fd480ca 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa.h\n+++ b/drivers/vdpa/sfc/sfc_vdpa.h\n@@ -17,8 +17,29 @@\n #include \"sfc_vdpa_log.h\"\n #include \"sfc_vdpa_ops.h\"\n \n+#define SFC_VDPA_MAC_ADDR\t\t\t\"mac\"\n #define SFC_VDPA_DEFAULT_MCDI_IOVA\t\t0x200000000000\n \n+/* Broadcast & Unicast MAC filters are supported */\n+#define SFC_MAX_SUPPORTED_FILTERS\t\t2\n+\n+/*\n+ * Get function-local index of the associated VI from the\n+ * virtqueue number. Queue 0 is reserved for MCDI\n+ */\n+#define SFC_VDPA_GET_VI_INDEX(vq_num) (((vq_num) / 2) + 1)\n+\n+enum sfc_vdpa_filter_type {\n+\tSFC_VDPA_BCAST_MAC_FILTER = 0,\n+\tSFC_VDPA_UCAST_MAC_FILTER = 1,\n+\tSFC_VDPA_FILTER_NTYPE\n+};\n+\n+typedef struct sfc_vdpa_filter_s {\n+\tint\t\t\t\tfilter_cnt;\n+\tefx_filter_spec_t\t\tspec[SFC_MAX_SUPPORTED_FILTERS];\n+} sfc_vdpa_filter_t;\n+\n /* Adapter private data */\n struct sfc_vdpa_adapter {\n \tTAILQ_ENTRY(sfc_vdpa_adapter)\tnext;\n@@ -32,6 +53,8 @@ struct sfc_vdpa_adapter {\n \tstruct rte_pci_device\t\t*pdev;\n \tstruct rte_pci_addr\t\tpci_addr;\n \n+\tstruct rte_kvargs\t\t*kvargs;\n+\n \tefx_family_t\t\t\tfamily;\n \tefx_nic_t\t\t\t*nic;\n \trte_spinlock_t\t\t\tnic_lock;\n@@ -46,6 +69,8 @@ struct sfc_vdpa_adapter {\n \tchar\t\t\t\tlog_prefix[SFC_VDPA_LOG_PREFIX_MAX];\n \tuint32_t\t\t\tlogtype_main;\n \n+\tsfc_vdpa_filter_t\t\tfilters;\n+\n \tint\t\t\t\tvfio_group_fd;\n \tint\t\t\t\tvfio_dev_fd;\n \tint\t\t\t\tvfio_container_fd;\n@@ -83,6 +108,11 @@ struct sfc_vdpa_ops_data *\n int\n sfc_vdpa_dma_map(struct sfc_vdpa_ops_data *vdpa_data, bool do_map);\n \n+int\n+sfc_vdpa_filter_remove(struct sfc_vdpa_ops_data *ops_data);\n+int\n+sfc_vdpa_filter_config(struct sfc_vdpa_ops_data *ops_data);\n+\n static inline struct sfc_vdpa_adapter *\n sfc_vdpa_adapter_by_dev_handle(void *dev_handle)\n {\ndiff --git a/drivers/vdpa/sfc/sfc_vdpa_filter.c b/drivers/vdpa/sfc/sfc_vdpa_filter.c\nnew file mode 100644\nindex 0000000..03b6a5d\n--- /dev/null\n+++ b/drivers/vdpa/sfc/sfc_vdpa_filter.c\n@@ -0,0 +1,144 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ *\n+ * Copyright(c) 2020-2021 Xilinx, Inc.\n+ */\n+\n+#include <rte_errno.h>\n+#include <rte_ether.h>\n+#include <rte_kvargs.h>\n+\n+#include \"efx.h\"\n+#include \"efx_impl.h\"\n+#include \"sfc_vdpa.h\"\n+\n+static inline int\n+sfc_vdpa_get_eth_addr(const char *key __rte_unused,\n+\t\t      const char *value, void *extra_args)\n+{\n+\tstruct rte_ether_addr *mac_addr = extra_args;\n+\n+\tif (value == NULL || extra_args == NULL)\n+\t\treturn -EINVAL;\n+\n+\t/* Convert string with Ethernet address to an ether_addr */\n+\trte_ether_unformat_addr(value, mac_addr);\n+\n+\treturn 0;\n+}\n+\n+static int\n+sfc_vdpa_set_mac_filter(efx_nic_t *nic, efx_filter_spec_t *spec,\n+\t\t\tint qid, uint8_t *eth_addr)\n+{\n+\tint rc;\n+\n+\tif (nic == NULL || spec == NULL)\n+\t\treturn -1;\n+\n+\tspec->efs_priority = EFX_FILTER_PRI_MANUAL;\n+\tspec->efs_flags = EFX_FILTER_FLAG_RX;\n+\tspec->efs_dmaq_id = qid;\n+\n+\trc = efx_filter_spec_set_eth_local(spec, EFX_FILTER_SPEC_VID_UNSPEC,\n+\t\t\t\t\t   eth_addr);\n+\tif (rc != 0)\n+\t\treturn rc;\n+\n+\trc = efx_filter_insert(nic, spec);\n+\tif (rc != 0)\n+\t\treturn rc;\n+\n+\treturn rc;\n+}\n+\n+int sfc_vdpa_filter_config(struct sfc_vdpa_ops_data *ops_data)\n+{\n+\tint rc;\n+\tint qid;\n+\tefx_nic_t *nic;\n+\tstruct rte_ether_addr bcast_eth_addr;\n+\tstruct rte_ether_addr ucast_eth_addr;\n+\tstruct sfc_vdpa_adapter *sva = ops_data->dev_handle;\n+\tefx_filter_spec_t *spec;\n+\n+\tif (ops_data == NULL)\n+\t\treturn -1;\n+\n+\tsfc_vdpa_log_init(sva, \"entry\");\n+\n+\tnic = sva->nic;\n+\n+\tsfc_vdpa_log_init(sva, \"process kvarg\");\n+\n+\t/* skip MAC filter configuration if mac address is not provided */\n+\tif (rte_kvargs_count(sva->kvargs, SFC_VDPA_MAC_ADDR) == 0) {\n+\t\tsfc_vdpa_warn(sva,\n+\t\t\t      \"MAC address is not provided, skipping MAC Filter Config\");\n+\t\treturn -1;\n+\t}\n+\n+\trc = rte_kvargs_process(sva->kvargs, SFC_VDPA_MAC_ADDR,\n+\t\t\t\t&sfc_vdpa_get_eth_addr,\n+\t\t\t\t&ucast_eth_addr);\n+\tif (rc < 0)\n+\t\treturn -1;\n+\n+\t/* create filters on the base queue */\n+\tqid = SFC_VDPA_GET_VI_INDEX(0);\n+\n+\tsfc_vdpa_log_init(sva, \"insert broadcast mac filter\");\n+\n+\tEFX_MAC_BROADCAST_ADDR_SET(bcast_eth_addr.addr_bytes);\n+\tspec = &sva->filters.spec[SFC_VDPA_BCAST_MAC_FILTER];\n+\n+\trc = sfc_vdpa_set_mac_filter(nic,\n+\t\t\t\t     spec, qid,\n+\t\t\t\t     bcast_eth_addr.addr_bytes);\n+\tif (rc != 0)\n+\t\tsfc_vdpa_err(ops_data->dev_handle,\n+\t\t\t     \"broadcast MAC filter insertion failed: %s\",\n+\t\t\t     rte_strerror(rc));\n+\telse\n+\t\tsva->filters.filter_cnt++;\n+\n+\tsfc_vdpa_log_init(sva, \"insert unicast mac filter\");\n+\tspec = &sva->filters.spec[SFC_VDPA_UCAST_MAC_FILTER];\n+\n+\trc = sfc_vdpa_set_mac_filter(nic,\n+\t\t\t\t     spec, qid,\n+\t\t\t\t     ucast_eth_addr.addr_bytes);\n+\tif (rc != 0)\n+\t\tsfc_vdpa_err(sva,\n+\t\t\t     \"unicast MAC filter insertion failed: %s\",\n+\t\t\t     rte_strerror(rc));\n+\telse\n+\t\tsva->filters.filter_cnt++;\n+\n+\tsfc_vdpa_log_init(sva, \"done\");\n+\n+\treturn rc;\n+}\n+\n+int sfc_vdpa_filter_remove(struct sfc_vdpa_ops_data *ops_data)\n+{\n+\tint i, rc = 0;\n+\tstruct sfc_vdpa_adapter *sva = ops_data->dev_handle;\n+\tefx_nic_t *nic;\n+\n+\tif (ops_data == NULL)\n+\t\treturn -1;\n+\n+\tnic = sva->nic;\n+\n+\tfor (i = 0; i < sva->filters.filter_cnt; i++) {\n+\t\trc = efx_filter_remove(nic, &(sva->filters.spec[i]));\n+\t\tif (rc != 0)\n+\t\t\tsfc_vdpa_err(sva,\n+\t\t\t\t     \"remove HW filter failed for entry %d: %s\",\n+\t\t\t\t     i, rte_strerror(rc));\n+\t}\n+\n+\tsva->filters.filter_cnt = 0;\n+\n+\treturn rc;\n+}\ndiff --git a/drivers/vdpa/sfc/sfc_vdpa_hw.c b/drivers/vdpa/sfc/sfc_vdpa_hw.c\nindex 047bcc4..3a98c8c 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa_hw.c\n+++ b/drivers/vdpa/sfc/sfc_vdpa_hw.c\n@@ -350,10 +350,20 @@\n \t\tgoto fail_virtio_init;\n \t}\n \n+\tsfc_vdpa_log_init(sva, \"init filter\");\n+\trc = efx_filter_init(enp);\n+\tif (rc != 0) {\n+\t\tsfc_vdpa_err(sva, \"filter init failed: %s\", rte_strerror(rc));\n+\t\tgoto fail_filter_init;\n+\t}\n+\n \tsfc_vdpa_log_init(sva, \"done\");\n \n \treturn 0;\n \n+fail_filter_init:\n+\tefx_virtio_fini(enp);\n+\n fail_virtio_init:\n \tefx_nic_fini(enp);\n \ndiff --git a/drivers/vdpa/sfc/sfc_vdpa_ops.c b/drivers/vdpa/sfc/sfc_vdpa_ops.c\nindex a7b9085..f14b385 100644\n--- a/drivers/vdpa/sfc/sfc_vdpa_ops.c\n+++ b/drivers/vdpa/sfc/sfc_vdpa_ops.c\n@@ -423,6 +423,8 @@\n \n \tsfc_vdpa_disable_vfio_intr(ops_data);\n \n+\tsfc_vdpa_filter_remove(ops_data);\n+\n \tops_data->state = SFC_VDPA_STATE_CONFIGURED;\n }\n \n@@ -462,12 +464,27 @@\n \t\t\tgoto fail_vq_start;\n \t}\n \n+\tops_data->vq_count = i;\n+\n+\tsfc_vdpa_log_init(ops_data->dev_handle,\n+\t\t\t  \"configure MAC filters\");\n+\trc = sfc_vdpa_filter_config(ops_data);\n+\tif (rc != 0) {\n+\t\tsfc_vdpa_err(ops_data->dev_handle,\n+\t\t\t     \"MAC filter config failed: %s\",\n+\t\t\t     rte_strerror(rc));\n+\t\tgoto fail_filter_cfg;\n+\t}\n+\n \tops_data->state = SFC_VDPA_STATE_STARTED;\n \n \tsfc_vdpa_log_init(ops_data->dev_handle, \"done\");\n \n \treturn 0;\n \n+fail_filter_cfg:\n+\t/* remove already created filters */\n+\tsfc_vdpa_filter_remove(ops_data);\n fail_vq_start:\n \t/* stop already started virtqueues */\n \tfor (j = 0; j < i; j++)\n",
    "prefixes": [
        "08/10"
    ]
}