get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 17111,
    "url": "http://patches.dpdk.org/api/patches/17111/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1479740470-6723-2-git-send-email-arybchenko@solarflare.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<1479740470-6723-2-git-send-email-arybchenko@solarflare.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1479740470-6723-2-git-send-email-arybchenko@solarflare.com",
    "date": "2016-11-21T15:00:15",
    "name": "[dpdk-dev,01/56] net/sfc: libefx-based PMD stub sufficient to build and init",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "7339f1eee0216b7031895ad6cd148f0fc26d78fc",
    "submitter": {
        "id": 607,
        "url": "http://patches.dpdk.org/api/people/607/?format=api",
        "name": "Andrew Rybchenko",
        "email": "arybchenko@solarflare.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1479740470-6723-2-git-send-email-arybchenko@solarflare.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/17111/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/17111/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 4B77B590B;\n\tMon, 21 Nov 2016 16:02:36 +0100 (CET)",
            "from nbfkord-smmo02.seg.att.com (nbfkord-smmo02.seg.att.com\n\t[209.65.160.78]) by dpdk.org (Postfix) with ESMTP id D9EAA3977\n\tfor <dev@dpdk.org>; Mon, 21 Nov 2016 16:01:28 +0100 (CET)",
            "from unknown [12.187.104.26]\n\tby nbfkord-smmo02.seg.att.com(mxl_mta-7.2.4-7) with SMTP id\n\t84c03385.0.1541296.00-2341.3424179.nbfkord-smmo02.seg.att.com\n\t(envelope-from <arybchenko@solarflare.com>); \n\tMon, 21 Nov 2016 15:01:28 +0000 (UTC)",
            "from ocex03.SolarFlarecom.com (10.20.40.36) by\n\tocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server\n\t(TLS) id 15.0.1044.25; Mon, 21 Nov 2016 07:01:21 -0800",
            "from opal.uk.solarflarecom.com (10.17.10.1) by\n\tocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server\n\t(TLS) id\n\t15.0.1044.25 via Frontend Transport; Mon, 21 Nov 2016 07:01:20 -0800",
            "from uklogin.uk.solarflarecom.com (uklogin.uk.solarflarecom.com\n\t[10.17.10.10])\n\tby opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id\n\tuALF1JlI007099 for <dev@dpdk.org>; Mon, 21 Nov 2016 15:01:19 GMT",
            "from uklogin.uk.solarflarecom.com (localhost.localdomain\n\t[127.0.0.1])\n\tby uklogin.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id\n\tuALF1J2q006765 for <dev@dpdk.org>; Mon, 21 Nov 2016 15:01:19 GMT"
        ],
        "X-MXL-Hash": "58330c4858a14d38-30e77441eefdfffe22f0a63d209bfda1396cb7d8",
        "From": "Andrew Rybchenko <arybchenko@solarflare.com>",
        "To": "<dev@dpdk.org>",
        "Date": "Mon, 21 Nov 2016 15:00:15 +0000",
        "Message-ID": "<1479740470-6723-2-git-send-email-arybchenko@solarflare.com>",
        "X-Mailer": "git-send-email 1.8.2.3",
        "In-Reply-To": "<1479740470-6723-1-git-send-email-arybchenko@solarflare.com>",
        "References": "<1479740470-6723-1-git-send-email-arybchenko@solarflare.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-AnalysisOut": [
            "[v=2.1 cv=UI/baXry c=1 sm=1 tr=0 a=8BlWFWvVlq5taO8ncb8nKg==]",
            "[:17 a=L24OOQBejmoA:10 a=zRKbQ67AAAAA:8 a=ZUspVpn8AAAA:8 a=]",
            "[QyXUC8HyAAAA:8 a=3UU_7fDQaXkeATdmiyEA:9 a=PA03WX8tBzeizutn]",
            "[5_OT:22 a=0UidKOZYlGDRLaJBBQYF:22 a=avl4LiGQNoF5OB0DmCJ7:2]",
            "[2]"
        ],
        "X-Spam": "[F=0.2000000000; CM=0.500; S=0.200(2015072901)]",
        "X-MAIL-FROM": "<arybchenko@solarflare.com>",
        "X-SOURCE-IP": "[12.187.104.26]",
        "Subject": "[dpdk-dev] [PATCH 01/56] net/sfc: libefx-based PMD stub sufficient\n\tto build and init",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "The PMD is put into the sfc/efx subdirectory to have a place for\nthe second PMD and library shared by both.\n\nEnable the PMD by default on supported configuratons.\n\nReviewed-by: Andy Moreton <amoreton@solarflare.com>\nSigned-off-by: Andrew Rybchenko <arybchenko@solarflare.com>\n---\n MAINTAINERS                                     |   6 ++\n config/common_base                              |   6 ++\n config/defconfig_arm-armv7a-linuxapp-gcc        |   1 +\n config/defconfig_arm64-armv8a-linuxapp-gcc      |   1 +\n config/defconfig_i686-native-linuxapp-gcc       |   5 +\n config/defconfig_i686-native-linuxapp-icc       |   5 +\n config/defconfig_ppc_64-power8-linuxapp-gcc     |   1 +\n config/defconfig_tile-tilegx-linuxapp-gcc       |   1 +\n config/defconfig_x86_64-native-linuxapp-icc     |   5 +\n config/defconfig_x86_x32-native-linuxapp-gcc    |   5 +\n doc/guides/nics/features/sfc_efx.ini            |  10 ++\n doc/guides/nics/index.rst                       |   1 +\n doc/guides/nics/sfc_efx.rst                     | 109 +++++++++++++++++++++\n drivers/net/Makefile                            |   1 +\n drivers/net/sfc/Makefile                        |  33 +++++++\n drivers/net/sfc/efx/Makefile                    |  81 ++++++++++++++++\n drivers/net/sfc/efx/rte_pmd_sfc_efx_version.map |   4 +\n drivers/net/sfc/efx/sfc.h                       |  53 +++++++++++\n drivers/net/sfc/efx/sfc_debug.h                 |  45 +++++++++\n drivers/net/sfc/efx/sfc_ethdev.c                | 120 ++++++++++++++++++++++++\n drivers/net/sfc/efx/sfc_kvargs.c                | 108 +++++++++++++++++++++\n drivers/net/sfc/efx/sfc_kvargs.h                |  58 ++++++++++++\n drivers/net/sfc/efx/sfc_log.h                   |  72 ++++++++++++++\n mk/rte.app.mk                                   |   1 +\n 24 files changed, 732 insertions(+)\n create mode 100644 doc/guides/nics/features/sfc_efx.ini\n create mode 100644 doc/guides/nics/sfc_efx.rst\n create mode 100644 drivers/net/sfc/Makefile\n create mode 100644 drivers/net/sfc/efx/Makefile\n create mode 100644 drivers/net/sfc/efx/rte_pmd_sfc_efx_version.map\n create mode 100644 drivers/net/sfc/efx/sfc.h\n create mode 100644 drivers/net/sfc/efx/sfc_debug.h\n create mode 100644 drivers/net/sfc/efx/sfc_ethdev.c\n create mode 100644 drivers/net/sfc/efx/sfc_kvargs.c\n create mode 100644 drivers/net/sfc/efx/sfc_kvargs.h\n create mode 100644 drivers/net/sfc/efx/sfc_log.h",
    "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex d6bb8f8..63fab48 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -364,6 +364,12 @@ M: Sony Chacko <sony.chacko@qlogic.com>\n F: drivers/net/qede/\n F: doc/guides/nics/qede.rst\n \n+Solarflare sfc_efx\n+M: Andrew Rybchenko <arybchenko@solarflare.com>\n+F: drivers/net/sfc/\n+F: doc/guides/nics/sfc_efx.rst\n+F: doc/guides/nics/features/sfc_efx.ini\n+\n RedHat virtio\n M: Huawei Xie <huawei.xie@intel.com>\n M: Yuanhan Liu <yuanhan.liu@linux.intel.com>\ndiff --git a/config/common_base b/config/common_base\nindex 4bff83a..1eb8eea 100644\n--- a/config/common_base\n+++ b/config/common_base\n@@ -338,6 +338,12 @@ CONFIG_RTE_LIBRTE_PMD_AF_PACKET=n\n CONFIG_RTE_LIBRTE_PMD_XENVIRT=n\n \n #\n+# Compile burst-oriented Solarflare libefx-based PMD\n+#\n+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=y\n+CONFIG_RTE_LIBRTE_SFC_EFX_DEBUG=n\n+\n+#\n # Compile null PMD\n #\n CONFIG_RTE_LIBRTE_PMD_NULL=y\ndiff --git a/config/defconfig_arm-armv7a-linuxapp-gcc b/config/defconfig_arm-armv7a-linuxapp-gcc\nindex bde6acd..d99bd0f 100644\n--- a/config/defconfig_arm-armv7a-linuxapp-gcc\n+++ b/config/defconfig_arm-armv7a-linuxapp-gcc\n@@ -75,3 +75,4 @@ CONFIG_RTE_LIBRTE_VMXNET3_PMD=n\n CONFIG_RTE_LIBRTE_PMD_XENVIRT=n\n CONFIG_RTE_LIBRTE_PMD_BNX2X=n\n CONFIG_RTE_LIBRTE_QEDE_PMD=n\n+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n\ndiff --git a/config/defconfig_arm64-armv8a-linuxapp-gcc b/config/defconfig_arm64-armv8a-linuxapp-gcc\nindex 6321884..aef5431 100644\n--- a/config/defconfig_arm64-armv8a-linuxapp-gcc\n+++ b/config/defconfig_arm64-armv8a-linuxapp-gcc\n@@ -45,5 +45,6 @@ CONFIG_RTE_TOOLCHAIN_GCC=y\n CONFIG_RTE_EAL_IGB_UIO=n\n \n CONFIG_RTE_LIBRTE_FM10K_PMD=n\n+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n\n \n CONFIG_RTE_SCHED_VECTOR=n\ndiff --git a/config/defconfig_i686-native-linuxapp-gcc b/config/defconfig_i686-native-linuxapp-gcc\nindex 576d543..5875ecd 100644\n--- a/config/defconfig_i686-native-linuxapp-gcc\n+++ b/config/defconfig_i686-native-linuxapp-gcc\n@@ -67,6 +67,11 @@ CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=n\n CONFIG_RTE_LIBRTE_PMD_KASUMI=n\n \n #\n+# Solarflare PMD is not supported on 32-bit\n+#\n+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n\n+\n+#\n # ZUC PMD is not supported on 32-bit\n #\n CONFIG_RTE_LIBRTE_PMD_ZUC=n\ndiff --git a/config/defconfig_i686-native-linuxapp-icc b/config/defconfig_i686-native-linuxapp-icc\nindex 6c902a3..7be476b 100644\n--- a/config/defconfig_i686-native-linuxapp-icc\n+++ b/config/defconfig_i686-native-linuxapp-icc\n@@ -67,6 +67,11 @@ CONFIG_RTE_LIBRTE_PMD_AESNI_GCM=n\n CONFIG_RTE_LIBRTE_PMD_KASUMI=n\n \n #\n+# Solarflare PMD is not supported on 32-bit\n+#\n+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n\n+\n+#\n # ZUC PMD is not supported on 32-bit\n #\n CONFIG_RTE_LIBRTE_PMD_ZUC=n\ndiff --git a/config/defconfig_ppc_64-power8-linuxapp-gcc b/config/defconfig_ppc_64-power8-linuxapp-gcc\nindex f953e61..35f7fb6 100644\n--- a/config/defconfig_ppc_64-power8-linuxapp-gcc\n+++ b/config/defconfig_ppc_64-power8-linuxapp-gcc\n@@ -55,4 +55,5 @@ CONFIG_RTE_LIBRTE_VMXNET3_PMD=n\n CONFIG_RTE_LIBRTE_PMD_BOND=n\n CONFIG_RTE_LIBRTE_ENIC_PMD=n\n CONFIG_RTE_LIBRTE_FM10K_PMD=n\n+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n\n \ndiff --git a/config/defconfig_tile-tilegx-linuxapp-gcc b/config/defconfig_tile-tilegx-linuxapp-gcc\nindex 5a50793..44add62 100644\n--- a/config/defconfig_tile-tilegx-linuxapp-gcc\n+++ b/config/defconfig_tile-tilegx-linuxapp-gcc\n@@ -71,3 +71,4 @@ CONFIG_RTE_LIBRTE_PORT=n\n CONFIG_RTE_LIBRTE_TABLE=n\n CONFIG_RTE_LIBRTE_PIPELINE=n\n CONFIG_RTE_LIBRTE_CXGBE_PMD=n\n+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n\ndiff --git a/config/defconfig_x86_64-native-linuxapp-icc b/config/defconfig_x86_64-native-linuxapp-icc\nindex bfa8a3d..872d1a1 100644\n--- a/config/defconfig_x86_64-native-linuxapp-icc\n+++ b/config/defconfig_x86_64-native-linuxapp-icc\n@@ -41,3 +41,8 @@ CONFIG_RTE_ARCH_64=y\n \n CONFIG_RTE_TOOLCHAIN=\"icc\"\n CONFIG_RTE_TOOLCHAIN_ICC=y\n+\n+#\n+# Solarflare PMD build is not supported using icc toolchain\n+#\n+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n\ndiff --git a/config/defconfig_x86_x32-native-linuxapp-gcc b/config/defconfig_x86_x32-native-linuxapp-gcc\nindex 0c26857..3e55c5c 100644\n--- a/config/defconfig_x86_x32-native-linuxapp-gcc\n+++ b/config/defconfig_x86_x32-native-linuxapp-gcc\n@@ -45,3 +45,8 @@ CONFIG_RTE_TOOLCHAIN_GCC=y\n # KNI is not supported on 32-bit\n #\n CONFIG_RTE_LIBRTE_KNI=n\n+\n+#\n+# Solarflare PMD is not supported on 32-bit\n+#\n+CONFIG_RTE_LIBRTE_SFC_EFX_PMD=n\ndiff --git a/doc/guides/nics/features/sfc_efx.ini b/doc/guides/nics/features/sfc_efx.ini\nnew file mode 100644\nindex 0000000..59eb830\n--- /dev/null\n+++ b/doc/guides/nics/features/sfc_efx.ini\n@@ -0,0 +1,10 @@\n+;\n+; Supported features of the 'sfc_efx' network poll mode driver.\n+;\n+; Refer to default.ini for the full list of available PMD features.\n+;\n+[Features]\n+BSD nic_uio          = Y\n+Linux UIO            = Y\n+Linux VFIO           = Y\n+x86-64               = Y\ndiff --git a/doc/guides/nics/index.rst b/doc/guides/nics/index.rst\nindex 92d56a5..5ea8b1a 100644\n--- a/doc/guides/nics/index.rst\n+++ b/doc/guides/nics/index.rst\n@@ -50,6 +50,7 @@ Network Interface Controller Drivers\n     mlx5\n     nfp\n     qede\n+    sfc_efx\n     szedata2\n     thunderx\n     virtio\ndiff --git a/doc/guides/nics/sfc_efx.rst b/doc/guides/nics/sfc_efx.rst\nnew file mode 100644\nindex 0000000..2eebcd7\n--- /dev/null\n+++ b/doc/guides/nics/sfc_efx.rst\n@@ -0,0 +1,109 @@\n+..  BSD LICENSE\n+    Copyright (c) 2016 Solarflare Communications Inc.\n+    All rights reserved.\n+\n+    This software was jointly developed between OKTET Labs (under contract\n+    for Solarflare) and Solarflare Communications, Inc.\n+\n+    Redistribution and use in source and binary forms, with or without\n+    modification, are permitted provided that the following conditions are met:\n+\n+    1. Redistributions of source code must retain the above copyright notice,\n+       this list of conditions and the following disclaimer.\n+    2. Redistributions in binary form must reproduce the above copyright notice,\n+       this list of conditions and the following disclaimer in the documentation\n+       and/or other materials provided with the distribution.\n+\n+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+    THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n+    OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n+    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n+    OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n+    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+\n+Solarflare libefx-based Poll Mode Driver\n+========================================\n+\n+The SFC EFX PMD (**librte_pmd_sfc_efx**) provides poll mode driver support\n+for **Solarflare SFN7xxx and SFN8xxx** family of 10/40 Gbps adapters.\n+SFC EFX PMD has support for the latest Linux and FreeBSD operating systems.\n+\n+More information can be found at `Solarflare Communications website\n+<http://solarflare.com>`_.\n+\n+\n+Supported NICs\n+--------------\n+\n+- Solarflare Flareon [Ultra] Server Adapters:\n+\n+   - Solarflare SFN8522 Dual Port SFP+ Server Adapter\n+\n+   - Solarflare SFN8542 Dual Port QSFP+ Server Adapter\n+\n+   - Solarflare SFN7002F Dual Port SFP+ Server Adapter\n+\n+   - Solarflare SFN7004F Quad Port SFP+ Server Adapter\n+\n+   - Solarflare SFN7042Q Dual Port QSFP+ Server Adapter\n+\n+   - Solarflare SFN7122F Dual Port SFP+ Server Adapter\n+\n+   - Solarflare SFN7124F Quad Port SFP+ Server Adapter\n+\n+   - Solarflare SFN7142Q Dual Port QSFP+ Server Adapter\n+\n+   - Solarflare SFN7322F Precision Time Synchronization Server Adapter\n+\n+\n+Prerequisites\n+-------------\n+\n+- Requires firmware version:\n+\n+   - SFN7xxx: **4.7.1.1001** or higher\n+\n+   - SFN8xxx: **6.0.2.1004** or higher\n+\n+Visit `Solarflare Support Downloads <https://support.solarflare.com>`_ to get\n+Solarflare Utilities (either Linux or FreeBSD) with the latest firmware.\n+Follow instructions from Solarflare Server Adapter User's Guide to\n+update firmware and configure the adapter.\n+\n+\n+Pre-Installation Configuration\n+------------------------------\n+\n+\n+Config File Options\n+~~~~~~~~~~~~~~~~~~~\n+\n+The following options can be modified in the ``.config`` file.\n+Please note that enabling debugging options may affect system performance.\n+\n+- ``CONFIG_RTE_LIBRTE_SFC_EFX_PMD`` (default **y**)\n+\n+  Enable compilation of Solarflare libefx-based poll-mode driver.\n+\n+- ``CONFIG_RTE_LIBRTE_SFC_EFX_DEBUG`` (default **n**)\n+\n+  Enable compilation of the extra run-time consistency checks.\n+\n+\n+Per-Device Parameters\n+~~~~~~~~~~~~~~~~~~~~~\n+\n+The following per-device parameters can be passed via EAL PCI device\n+whitelist option like \"-w 02:00.0,arg1=value1,...\".\n+\n+Case-insensitive 1/y/yes/on or 0/n/no/off may be used to specify\n+boolean parameters value.\n+\n+- ``debug_init`` [bool] (default **n**)\n+\n+  Enable extra logging during device intialization and startup.\ndiff --git a/drivers/net/Makefile b/drivers/net/Makefile\nindex bc93230..ccf464a 100644\n--- a/drivers/net/Makefile\n+++ b/drivers/net/Makefile\n@@ -50,6 +50,7 @@ DIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL) += null\n DIRS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += pcap\n DIRS-$(CONFIG_RTE_LIBRTE_QEDE_PMD) += qede\n DIRS-$(CONFIG_RTE_LIBRTE_PMD_RING) += ring\n+DIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += sfc\n DIRS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2) += szedata2\n DIRS-$(CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD) += thunderx\n DIRS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio\ndiff --git a/drivers/net/sfc/Makefile b/drivers/net/sfc/Makefile\nnew file mode 100644\nindex 0000000..bdfe2ea\n--- /dev/null\n+++ b/drivers/net/sfc/Makefile\n@@ -0,0 +1,33 @@\n+#\n+# Copyright (c) 2016 Solarflare Communications Inc.\n+# All rights reserved.\n+#\n+# This software was jointly developed between OKTET Labs (under contract\n+# for Solarflare) and Solarflare Communications, Inc.\n+#\n+# Redistribution and use in source and binary forms, with or without\n+# modification, are permitted provided that the following conditions are met:\n+#\n+# 1. Redistributions of source code must retain the above copyright notice,\n+#    this list of conditions and the following disclaimer.\n+# 2. Redistributions in binary form must reproduce the above copyright notice,\n+#    this list of conditions and the following disclaimer in the documentation\n+#    and/or other materials provided with the distribution.\n+#\n+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+\n+include $(RTE_SDK)/mk/rte.vars.mk\n+\n+DIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += efx\n+\n+include $(RTE_SDK)/mk/rte.subdir.mk\ndiff --git a/drivers/net/sfc/efx/Makefile b/drivers/net/sfc/efx/Makefile\nnew file mode 100644\nindex 0000000..71f07ca\n--- /dev/null\n+++ b/drivers/net/sfc/efx/Makefile\n@@ -0,0 +1,81 @@\n+#\n+# Copyright (c) 2016 Solarflare Communications Inc.\n+# All rights reserved.\n+#\n+# This software was jointly developed between OKTET Labs (under contract\n+# for Solarflare) and Solarflare Communications, Inc.\n+#\n+# Redistribution and use in source and binary forms, with or without\n+# modification, are permitted provided that the following conditions are met:\n+#\n+# 1. Redistributions of source code must retain the above copyright notice,\n+#    this list of conditions and the following disclaimer.\n+# 2. Redistributions in binary form must reproduce the above copyright notice,\n+#    this list of conditions and the following disclaimer in the documentation\n+#    and/or other materials provided with the distribution.\n+#\n+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+\n+include $(RTE_SDK)/mk/rte.vars.mk\n+\n+#\n+# library name\n+#\n+LIB = librte_pmd_sfc_efx.a\n+\n+CFLAGS += -O3\n+\n+# Enable basic warnings but disable some which are accepted\n+CFLAGS += -Wall\n+CFLAGS += -Wno-strict-aliasing\n+\n+# Enable extra warnings but disable some which are accepted\n+CFLAGS += -Wextra\n+CFLAGS += -Wno-empty-body\n+CFLAGS += -Wno-sign-compare\n+CFLAGS += -Wno-type-limits\n+CFLAGS += -Wno-unused-parameter\n+\n+# More warnings not enabled by above aggregators\n+CFLAGS += -Waggregate-return\n+CFLAGS += -Wbad-function-cast\n+CFLAGS += -Wcast-qual\n+CFLAGS += -Wdisabled-optimization\n+CFLAGS += -Wmissing-declarations\n+CFLAGS += -Wmissing-prototypes\n+CFLAGS += -Wnested-externs\n+CFLAGS += -Wold-style-definition\n+CFLAGS += -Wpointer-arith\n+CFLAGS += -Wstrict-prototypes\n+CFLAGS += -Wundef\n+CFLAGS += -Wwrite-strings\n+\n+EXPORT_MAP := rte_pmd_sfc_efx_version.map\n+\n+LIBABIVER := 1\n+\n+#\n+# all source are stored in SRCS-y\n+#\n+SRCS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += sfc_ethdev.c\n+SRCS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += sfc_kvargs.c\n+\n+\n+# this lib depends upon:\n+DEPDIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += lib/librte_eal\n+DEPDIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += lib/librte_kvargs\n+DEPDIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += lib/librte_ether\n+DEPDIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += lib/librte_mempool\n+DEPDIRS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD) += lib/librte_mbuf\n+\n+include $(RTE_SDK)/mk/rte.lib.mk\ndiff --git a/drivers/net/sfc/efx/rte_pmd_sfc_efx_version.map b/drivers/net/sfc/efx/rte_pmd_sfc_efx_version.map\nnew file mode 100644\nindex 0000000..1901bcb\n--- /dev/null\n+++ b/drivers/net/sfc/efx/rte_pmd_sfc_efx_version.map\n@@ -0,0 +1,4 @@\n+DPDK_16.07 {\n+\n+\tlocal: *;\n+};\ndiff --git a/drivers/net/sfc/efx/sfc.h b/drivers/net/sfc/efx/sfc.h\nnew file mode 100644\nindex 0000000..16fd2bb\n--- /dev/null\n+++ b/drivers/net/sfc/efx/sfc.h\n@@ -0,0 +1,53 @@\n+/*-\n+ * Copyright (c) 2016 Solarflare Communications Inc.\n+ * All rights reserved.\n+ *\n+ * This software was jointly developed between OKTET Labs (under contract\n+ * for Solarflare) and Solarflare Communications, Inc.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\n+ *\n+ * 1. Redistributions of source code must retain the above copyright notice,\n+ *    this list of conditions and the following disclaimer.\n+ * 2. Redistributions in binary form must reproduce the above copyright notice,\n+ *    this list of conditions and the following disclaimer in the documentation\n+ *    and/or other materials provided with the distribution.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#ifndef _SFC_H\n+#define\t_SFC_H\n+\n+#include <stdbool.h>\n+\n+#include <rte_ethdev.h>\n+#include <rte_kvargs.h>\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+/* Adapter private data */\n+struct sfc_adapter {\n+\tstruct rte_eth_dev\t\t*eth_dev;\n+\tstruct rte_kvargs\t\t*kvargs;\n+\tbool\t\t\t\tdebug_init;\n+};\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif  /* _SFC_H */\ndiff --git a/drivers/net/sfc/efx/sfc_debug.h b/drivers/net/sfc/efx/sfc_debug.h\nnew file mode 100644\nindex 0000000..de3ec61\n--- /dev/null\n+++ b/drivers/net/sfc/efx/sfc_debug.h\n@@ -0,0 +1,45 @@\n+/*-\n+ * Copyright (c) 2016 Solarflare Communications Inc.\n+ * All rights reserved.\n+ *\n+ * This software was jointly developed between OKTET Labs (under contract\n+ * for Solarflare) and Solarflare Communications, Inc.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\n+ *\n+ * 1. Redistributions of source code must retain the above copyright notice,\n+ *    this list of conditions and the following disclaimer.\n+ * 2. Redistributions in binary form must reproduce the above copyright notice,\n+ *    this list of conditions and the following disclaimer in the documentation\n+ *    and/or other materials provided with the distribution.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#ifndef _SFC_DEBUG_H_\n+#define\t_SFC_DEBUG_H_\n+\n+#include <rte_debug.h>\n+\n+#ifdef RTE_LIBRTE_SFC_EFX_DEBUG\n+/* Avoid dependency from RTE_LOG_LEVEL to be able to enable debug check\n+ * in the driver only.\n+ */\n+#define\tSFC_ASSERT(exp)\t\t\tRTE_VERIFY(exp)\n+#else\n+/* If the driver debug is not enabled, follow DPDK debug/non-debug */\n+#define\tSFC_ASSERT(exp)\t\t\tRTE_ASSERT(exp)\n+#endif\n+\n+#endif /* _SFC_DEBUG_H_ */\ndiff --git a/drivers/net/sfc/efx/sfc_ethdev.c b/drivers/net/sfc/efx/sfc_ethdev.c\nnew file mode 100644\nindex 0000000..ff20a13\n--- /dev/null\n+++ b/drivers/net/sfc/efx/sfc_ethdev.c\n@@ -0,0 +1,120 @@\n+/*-\n+ * Copyright (c) 2016 Solarflare Communications Inc.\n+ * All rights reserved.\n+ *\n+ * This software was jointly developed between OKTET Labs (under contract\n+ * for Solarflare) and Solarflare Communications, Inc.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\n+ *\n+ * 1. Redistributions of source code must retain the above copyright notice,\n+ *    this list of conditions and the following disclaimer.\n+ * 2. Redistributions in binary form must reproduce the above copyright notice,\n+ *    this list of conditions and the following disclaimer in the documentation\n+ *    and/or other materials provided with the distribution.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#include <rte_dev.h>\n+#include <rte_ethdev.h>\n+#include <rte_pci.h>\n+\n+#include \"sfc.h\"\n+#include \"sfc_debug.h\"\n+#include \"sfc_log.h\"\n+#include \"sfc_kvargs.h\"\n+\n+\n+static const struct eth_dev_ops sfc_eth_dev_ops = {\n+\t/* Just dummy init to avoid build-time warning */\n+\t.dev_configure\t\t\t= NULL,\n+};\n+\n+static int\n+sfc_eth_dev_init(struct rte_eth_dev *dev)\n+{\n+\tstruct sfc_adapter *sa = dev->data->dev_private;\n+\tstruct rte_pci_device *pci_dev = dev->pci_dev;\n+\tint rc;\n+\n+\t/* Required for logging */\n+\tsa->eth_dev = dev;\n+\n+\t/* Copy PCI device info to the dev->data */\n+\trte_eth_copy_pci_info(dev, pci_dev);\n+\n+\trc = sfc_kvargs_parse(sa);\n+\tif (rc != 0)\n+\t\tgoto fail_kvargs_parse;\n+\n+\trc = sfc_kvargs_process(sa, SFC_KVARG_DEBUG_INIT,\n+\t\t\t\tsfc_kvarg_bool_handler, &sa->debug_init);\n+\tif (rc != 0)\n+\t\tgoto fail_kvarg_debug_init;\n+\n+\tsfc_log_init(sa, \"entry\");\n+\n+\tdev->dev_ops = &sfc_eth_dev_ops;\n+\n+\tsfc_log_init(sa, \"done\");\n+\treturn 0;\n+\n+fail_kvarg_debug_init:\n+\tsfc_kvargs_cleanup(sa);\n+\n+fail_kvargs_parse:\n+\tsfc_log_init(sa, \"failed %d\", rc);\n+\tSFC_ASSERT(rc > 0);\n+\treturn -rc;\n+}\n+\n+static int\n+sfc_eth_dev_uninit(struct rte_eth_dev *dev)\n+{\n+\tstruct sfc_adapter *sa = dev->data->dev_private;\n+\n+\tsfc_log_init(sa, \"entry\");\n+\n+\tdev->dev_ops = NULL;\n+\n+\tsfc_kvargs_cleanup(sa);\n+\n+\tsfc_log_init(sa, \"done\");\n+\n+\t/* Required for logging, so cleanup last */\n+\tsa->eth_dev = NULL;\n+\treturn 0;\n+}\n+\n+static const struct rte_pci_id pci_id_sfc_efx_map[] = {\n+\t{ .vendor_id = 0 /* sentinel */ }\n+};\n+\n+static struct eth_driver sfc_efx_pmd = {\n+\t.pci_drv = {\n+\t\t.id_table = pci_id_sfc_efx_map,\n+\t\t.drv_flags = 0,\n+\t\t.probe = rte_eth_dev_pci_probe,\n+\t\t.remove = rte_eth_dev_pci_remove,\n+\t},\n+\t.eth_dev_init = sfc_eth_dev_init,\n+\t.eth_dev_uninit = sfc_eth_dev_uninit,\n+\t.dev_private_size = sizeof(struct sfc_adapter),\n+};\n+\n+RTE_PMD_REGISTER_PCI(net_sfc_efx, sfc_efx_pmd.pci_drv);\n+RTE_PMD_REGISTER_PCI_TABLE(net_sfc_efx, pci_id_sfc_efx_map);\n+RTE_PMD_REGISTER_PARAM_STRING(net_sfc_efx,\n+\tSFC_KVARG_DEBUG_INIT \"=\" SFC_KVARG_VALUES_BOOL);\ndiff --git a/drivers/net/sfc/efx/sfc_kvargs.c b/drivers/net/sfc/efx/sfc_kvargs.c\nnew file mode 100644\nindex 0000000..3e8baa4\n--- /dev/null\n+++ b/drivers/net/sfc/efx/sfc_kvargs.c\n@@ -0,0 +1,108 @@\n+/*-\n+ * Copyright (c) 2016 Solarflare Communications Inc.\n+ * All rights reserved.\n+ *\n+ * This software was jointly developed between OKTET Labs (under contract\n+ * for Solarflare) and Solarflare Communications, Inc.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\n+ *\n+ * 1. Redistributions of source code must retain the above copyright notice,\n+ *    this list of conditions and the following disclaimer.\n+ * 2. Redistributions in binary form must reproduce the above copyright notice,\n+ *    this list of conditions and the following disclaimer in the documentation\n+ *    and/or other materials provided with the distribution.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#include <stdbool.h>\n+#include <strings.h>\n+\n+#include <rte_devargs.h>\n+#include <rte_kvargs.h>\n+\n+#include \"sfc.h\"\n+#include \"sfc_kvargs.h\"\n+\n+int\n+sfc_kvargs_parse(struct sfc_adapter *sa)\n+{\n+\tstruct rte_devargs *devargs = sa->eth_dev->pci_dev->device.devargs;\n+\tconst char **params = (const char *[]){\n+\t\tSFC_KVARG_DEBUG_INIT,\n+\t\tNULL,\n+\t};\n+\n+\tif (devargs == NULL)\n+\t\treturn 0;\n+\n+\tsa->kvargs = rte_kvargs_parse(devargs->args, params);\n+\tif (sa->kvargs == NULL)\n+\t\treturn EINVAL;\n+\n+\treturn 0;\n+}\n+\n+void\n+sfc_kvargs_cleanup(struct sfc_adapter *sa)\n+{\n+\trte_kvargs_free(sa->kvargs);\n+}\n+\n+static int\n+sfc_kvarg_match_value(const char *value, const char * const *values,\n+\t\t      unsigned int n_values)\n+{\n+\tunsigned int i;\n+\n+\tfor (i = 0; i < n_values; ++i)\n+\t\tif (strcasecmp(value, values[i]) == 0)\n+\t\t\treturn 1;\n+\n+\treturn 0;\n+}\n+\n+int\n+sfc_kvargs_process(struct sfc_adapter *sa, const char *key_match,\n+\t\t   arg_handler_t handler, void *opaque_arg)\n+{\n+\tif (sa->kvargs == NULL)\n+\t\treturn 0;\n+\n+\treturn -rte_kvargs_process(sa->kvargs, key_match, handler, opaque_arg);\n+}\n+\n+int\n+sfc_kvarg_bool_handler(const char *key, const char *value_str, void *opaque)\n+{\n+\tconst char * const true_strs[] = {\n+\t\t\"1\", \"y\", \"yes\", \"on\", \"true\"\n+\t};\n+\tconst char * const false_strs[] = {\n+\t\t\"0\", \"n\", \"no\", \"off\", \"false\"\n+\t};\n+\tbool *value = opaque;\n+\n+\tif (sfc_kvarg_match_value(value_str, true_strs,\n+\t\t\t\t  RTE_DIM(true_strs)))\n+\t\t*value = true;\n+\telse if (sfc_kvarg_match_value(value_str, false_strs,\n+\t\t\t\t       RTE_DIM(false_strs)))\n+\t\t*value = false;\n+\telse\n+\t\treturn -EINVAL;\n+\n+\treturn 0;\n+}\ndiff --git a/drivers/net/sfc/efx/sfc_kvargs.h b/drivers/net/sfc/efx/sfc_kvargs.h\nnew file mode 100644\nindex 0000000..a757e3d\n--- /dev/null\n+++ b/drivers/net/sfc/efx/sfc_kvargs.h\n@@ -0,0 +1,58 @@\n+/*-\n+ * Copyright (c) 2016 Solarflare Communications Inc.\n+ * All rights reserved.\n+ *\n+ * This software was jointly developed between OKTET Labs (under contract\n+ * for Solarflare) and Solarflare Communications, Inc.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\n+ *\n+ * 1. Redistributions of source code must retain the above copyright notice,\n+ *    this list of conditions and the following disclaimer.\n+ * 2. Redistributions in binary form must reproduce the above copyright notice,\n+ *    this list of conditions and the following disclaimer in the documentation\n+ *    and/or other materials provided with the distribution.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#ifndef _SFC_KVARGS_H\n+#define\t_SFC_KVARGS_H\n+\n+#include <rte_kvargs.h>\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#define\tSFC_KVARG_VALUES_BOOL\t\t\"[1|y|yes|on|0|n|no|off]\"\n+\n+#define\tSFC_KVARG_DEBUG_INIT\t\t\"debug_init\"\n+\n+struct sfc_adapter;\n+\n+int sfc_kvargs_parse(struct sfc_adapter *sa);\n+void sfc_kvargs_cleanup(struct sfc_adapter *sa);\n+\n+int sfc_kvargs_process(struct sfc_adapter *sa, const char *key_match,\n+\t\t       arg_handler_t handler, void *opaque_arg);\n+\n+int sfc_kvarg_bool_handler(const char *key, const char *value_str,\n+\t\t\t   void *opaque);\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif  /* _SFC_KVARGS_H */\ndiff --git a/drivers/net/sfc/efx/sfc_log.h b/drivers/net/sfc/efx/sfc_log.h\nnew file mode 100644\nindex 0000000..06df181\n--- /dev/null\n+++ b/drivers/net/sfc/efx/sfc_log.h\n@@ -0,0 +1,72 @@\n+/*-\n+ * Copyright (c) 2016 Solarflare Communications Inc.\n+ * All rights reserved.\n+ *\n+ * This software was jointly developed between OKTET Labs (under contract\n+ * for Solarflare) and Solarflare Communications, Inc.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\n+ *\n+ * 1. Redistributions of source code must retain the above copyright notice,\n+ *    this list of conditions and the following disclaimer.\n+ * 2. Redistributions in binary form must reproduce the above copyright notice,\n+ *    this list of conditions and the following disclaimer in the documentation\n+ *    and/or other materials provided with the distribution.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#ifndef _SFC_LOG_H_\n+#define\t_SFC_LOG_H_\n+\n+/* Log PMD message, automatically add prefix and \\n */\n+#define\tSFC_LOG(sa, level, ...) \\\n+\tdo {\t\t\t\t\t\t\t\t\\\n+\t\tconst struct rte_eth_dev *_dev = (sa)->eth_dev;\t\t\\\n+\t\tconst struct rte_pci_device *_pci_dev = _dev->pci_dev;\t\\\n+\t\t\t\t\t\t\t\t\t\\\n+\t\tRTE_LOG(level, PMD,\t\t\t\t\t\\\n+\t\t\tRTE_FMT(\"sfc_efx \" PCI_PRI_FMT \" #%\" PRIu8 \": \"\t\\\n+\t\t\t\tRTE_FMT_HEAD(__VA_ARGS__,) \"\\n\",\t\\\n+\t\t\t\t_pci_dev->addr.domain,\t\t\t\\\n+\t\t\t\t_pci_dev->addr.bus,\t\t\t\\\n+\t\t\t\t_pci_dev->addr.devid,\t\t\t\\\n+\t\t\t\t_pci_dev->addr.function,\t\t\\\n+\t\t\t\t_dev->data->port_id,\t\t\t\\\n+\t\t\t\tRTE_FMT_TAIL(__VA_ARGS__,)));\t\t\\\n+\t} while (0)\n+\n+#define\tsfc_err(sa, ...) \\\n+\tSFC_LOG(sa, ERR, __VA_ARGS__)\n+\n+#define\tsfc_warn(sa, ...) \\\n+\tSFC_LOG(sa, WARNING, __VA_ARGS__)\n+\n+#define\tsfc_notice(sa, ...) \\\n+\tSFC_LOG(sa, NOTICE, __VA_ARGS__)\n+\n+#define\tsfc_info(sa, ...) \\\n+\tSFC_LOG(sa, INFO, __VA_ARGS__)\n+\n+#define\tsfc_log_init(sa, ...) \\\n+\tdo {\t\t\t\t\t\t\t\t\\\n+\t\tif (sa->debug_init)\t\t\t\t\t\\\n+\t\t\tSFC_LOG(sa, INFO,\t\t\t\t\\\n+\t\t\t\tRTE_FMT(\"%s(): \"\t\t\t\\\n+\t\t\t\t\tRTE_FMT_HEAD(__VA_ARGS__,),\t\\\n+\t\t\t\t\t__func__,\t\t\t\\\n+\t\t\t\t\tRTE_FMT_TAIL(__VA_ARGS__,)));\t\\\n+\t} while (0)\n+\n+#endif /* _SFC_LOG_H_ */\ndiff --git a/mk/rte.app.mk b/mk/rte.app.mk\nindex f75f0e2..52ae046 100644\n--- a/mk/rte.app.mk\n+++ b/mk/rte.app.mk\n@@ -123,6 +123,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NULL)       += -lrte_pmd_null\n _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP)       += -lrte_pmd_pcap -lpcap\n _LDLIBS-$(CONFIG_RTE_LIBRTE_QEDE_PMD)       += -lrte_pmd_qede\n _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_RING)       += -lrte_pmd_ring\n+_LDLIBS-$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD)    += -lrte_pmd_sfc_efx\n _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2)   += -lrte_pmd_szedata2 -lsze2\n _LDLIBS-$(CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD) += -lrte_pmd_thunderx_nicvf -lm\n _LDLIBS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD)     += -lrte_pmd_virtio\n",
    "prefixes": [
        "dpdk-dev",
        "01/56"
    ]
}