Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/14507/?format=api
http://patches.dpdk.org/api/patches/14507/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/1467594845-3487-2-git-send-email-thomas.monjalon@6wind.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": "<1467594845-3487-2-git-send-email-thomas.monjalon@6wind.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1467594845-3487-2-git-send-email-thomas.monjalon@6wind.com", "date": "2016-07-04T01:13:59", "name": "[dpdk-dev,v9,1/7] drivers: export infos as string symbols", "commit_ref": null, "pull_url": null, "state": "rejected", "archived": true, "hash": "986074d2b0fd34432aa87a9350a509a2becac0a6", "submitter": { "id": 1, "url": "http://patches.dpdk.org/api/people/1/?format=api", "name": "Thomas Monjalon", "email": "thomas.monjalon@6wind.com" }, "delegate": null, "mbox": "http://patches.dpdk.org/project/dpdk/patch/1467594845-3487-2-git-send-email-thomas.monjalon@6wind.com/mbox/", "series": [], "comments": "http://patches.dpdk.org/api/patches/14507/comments/", "check": "pending", "checks": "http://patches.dpdk.org/api/patches/14507/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 AFE772C4A;\n\tMon, 4 Jul 2016 03:14:16 +0200 (CEST)", "from mail-wm0-f54.google.com (mail-wm0-f54.google.com\n\t[74.125.82.54]) by dpdk.org (Postfix) with ESMTP id D37992B93\n\tfor <dev@dpdk.org>; Mon, 4 Jul 2016 03:14:14 +0200 (CEST)", "by mail-wm0-f54.google.com with SMTP id f126so85734877wma.1\n\tfor <dev@dpdk.org>; Sun, 03 Jul 2016 18:14:14 -0700 (PDT)", "from XPS13.localdomain (184.203.134.77.rev.sfr.net.\n\t[77.134.203.184]) by smtp.gmail.com with ESMTPSA id\n\tl4sm5527127wjk.18.2016.07.03.18.14.13\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tSun, 03 Jul 2016 18:14:13 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=6wind-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=wNjxrdv1FgI2tojXEppAGj0LfiIdh3G0acwK1nDj3TU=;\n\tb=lq0OlUB7NwQtFXdoHCU68L80RiDozlY8ADsjMSFgcUcmESr6hmtNB1xN8qY2XeaSly\n\tmrUDdC0aCFHkhSw8fpQL4OQhDYFBsfCsHfqHlRqN1+m4+VLrelaK+m5Rb2BZDaYERZY3\n\t8FrQTEkN2KzH7yZZdtslB98Nc50BEzFd8P7c4INdscGxgsouAUnEZVOVpjYud7L1oJbA\n\tafWiFo/gA3A+4zgA4SOhkrRMpZxV3zA9JABPIKwb/1dnALpqzOnWVH7xdc24ox5TjE6e\n\t9YuoezAmcQ9QRk7SLRZ9roe7tuWsc3MB3BeFvJwA9wBvq1KL5e4E3LP5xRNNb7VDlXRV\n\tv6Rg==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=wNjxrdv1FgI2tojXEppAGj0LfiIdh3G0acwK1nDj3TU=;\n\tb=gW6o9SOFSPJzORS0YvDZbKduFCVHMAcRUTOKoIwBxaGFHp3KWTYvOlKQNUeVPZ4vZj\n\tbBql1TMd/45+kAC7tdxa1Sg8cBvtbRoDkTUyrbRbxJdIxQqDpKw0zGe/80EWCPneMXtj\n\t1yMrd7uOTAUBgrUEF00A7+DehPkWVJakaQ6GJF6SrAe9grETd+FGAmrcM7mp9ebOWFTp\n\tfNiDFIIbLB9CtIFCDV8S9wgE2OacOw11gwt7ARXN/ZzoL/PVGhOfaLGXm6AXC71slj7X\n\tS03pnU0+N+ZR12yRm7Cm76A8T5DXECrmvEvj6tg2mcyxmpRJ2bHSs4yPnibF9jlqZoo9\n\toIcw==", "X-Gm-Message-State": "ALyK8tJy9RwcrOyPpOczSX+s2FNTATuLnTqYwxXFrmHQT4P4b7I3FnASWeRwAPLINbEKSJ05", "X-Received": "by 10.194.9.38 with SMTP id w6mr7660961wja.62.1467594854400;\n\tSun, 03 Jul 2016 18:14:14 -0700 (PDT)", "From": "Thomas Monjalon <thomas.monjalon@6wind.com>", "To": "Neil Horman <nhorman@tuxdriver.com>", "Cc": "dev@dpdk.org,\n\tPanu Matilainen <pmatilai@redhat.com>", "Date": "Mon, 4 Jul 2016 03:13:59 +0200", "Message-Id": "<1467594845-3487-2-git-send-email-thomas.monjalon@6wind.com>", "X-Mailer": "git-send-email 2.7.0", "In-Reply-To": "<1467594845-3487-1-git-send-email-thomas.monjalon@6wind.com>", "References": "<1466189185-21952-1-git-send-email-nhorman@tuxdriver.com>\n\t<1467594845-3487-1-git-send-email-thomas.monjalon@6wind.com>", "Subject": "[dpdk-dev] [PATCH v9 1/7] drivers: export infos as string symbols", "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": "From: Neil Horman <nhorman@tuxdriver.com>\n\nModify the PMD_REGISTER_DRIVER macro, adding a name argument to it. The\naddition of a name argument creates a token that can be used for subsequent\nmacros in the creation of unique symbol names to export additional bits of\ninformation for use by the dpdk-pmdinfogen tool. For example:\n\n RTE_REGISTER_DRIVER(ena, ena_driver);\nregisters the ena_driver struct as PMD_REGISTER_DRIVER did, and creates\na symbol\n const char rte_pmd_name0[] __attribute__((used)) = \"ena\";\nwhich dpdk-pmdinfogen can search for and extract. The subsequent macro\n RTE_EXPORT_PCI_TABLE(ena, ena_pci_id_map);\ncreates a symbol\n const char ena_pci_table_export[] __attribute__((used)) = \"ena_pci_id_map\";\nWhich allows dpdk-pmdinfogen to find the pci table of this driver.\n\nUsing this pattern, we can export arbitrary bits of information.\n\ndpdk-pmdinfo uses this information to extract hardware support from an object\nfile and create a json string to make hardware support info discoverable\nlater.\n\nSigned-off-by: Neil Horman <nhorman@tuxdriver.com>\nAcked-by: Panu Matilainen <pmatilai@redhat.com>\nAcked-by: Remy Horton <remy.horton@intel.com>\nSigned-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>\n---\n doc/guides/prog_guide/dev_kit_build_system.rst | 19 ++++++++++++++++\n drivers/crypto/aesni_gcm/aesni_gcm_pmd.c | 4 +++-\n drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 4 +++-\n drivers/crypto/kasumi/rte_kasumi_pmd.c | 4 +++-\n drivers/crypto/null/null_crypto_pmd.c | 4 +++-\n drivers/crypto/qat/rte_qat_cryptodev.c | 3 ++-\n drivers/crypto/snow3g/rte_snow3g_pmd.c | 4 +++-\n drivers/net/af_packet/rte_eth_af_packet.c | 4 +++-\n drivers/net/bnx2x/bnx2x_ethdev.c | 6 ++++--\n drivers/net/bnxt/bnxt_ethdev.c | 3 ++-\n drivers/net/bonding/rte_eth_bond_pmd.c | 5 ++++-\n drivers/net/cxgbe/cxgbe_ethdev.c | 3 ++-\n drivers/net/e1000/em_ethdev.c | 3 ++-\n drivers/net/e1000/igb_ethdev.c | 6 ++++--\n drivers/net/ena/ena_ethdev.c | 3 ++-\n drivers/net/enic/enic_ethdev.c | 3 ++-\n drivers/net/fm10k/fm10k_ethdev.c | 3 ++-\n drivers/net/i40e/i40e_ethdev.c | 3 ++-\n drivers/net/i40e/i40e_ethdev_vf.c | 3 ++-\n drivers/net/ixgbe/ixgbe_ethdev.c | 6 ++++--\n drivers/net/mlx4/mlx4.c | 3 ++-\n drivers/net/mlx5/mlx5.c | 3 ++-\n drivers/net/mpipe/mpipe_tilegx.c | 4 ++--\n drivers/net/nfp/nfp_net.c | 3 ++-\n drivers/net/null/rte_eth_null.c | 3 ++-\n drivers/net/pcap/rte_eth_pcap.c | 4 +++-\n drivers/net/qede/qede_ethdev.c | 6 ++++--\n drivers/net/ring/rte_eth_ring.c | 3 ++-\n drivers/net/szedata2/rte_eth_szedata2.c | 3 ++-\n drivers/net/thunderx/nicvf_ethdev.c | 3 ++-\n drivers/net/vhost/rte_eth_vhost.c | 3 ++-\n drivers/net/virtio/virtio_ethdev.c | 3 ++-\n drivers/net/virtio/virtio_user_ethdev.c | 2 +-\n drivers/net/vmxnet3/vmxnet3_ethdev.c | 3 ++-\n drivers/net/xenvirt/rte_eth_xenvirt.c | 2 +-\n lib/librte_eal/common/eal_common_dev.c | 2 +-\n lib/librte_eal/common/include/rte_dev.h | 30 ++++++++++++++++++++------\n 37 files changed, 127 insertions(+), 46 deletions(-)", "diff": "diff --git a/doc/guides/prog_guide/dev_kit_build_system.rst b/doc/guides/prog_guide/dev_kit_build_system.rst\nindex 3e89eae..f3a4bff 100644\n--- a/doc/guides/prog_guide/dev_kit_build_system.rst\n+++ b/doc/guides/prog_guide/dev_kit_build_system.rst\n@@ -304,6 +304,25 @@ Misc\n \n * rte.subdir.mk: Build several directories in the development kit framework.\n \n+.. _Internally_Generated_Build_Tools:\n+\n+Internally Generated Build Tools\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+These well known symbol names are defined by various macros and used to export\n+important information about hardware support and usage for PMD files. For\n+instance the macro:\n+\n+.. code-block:: c\n+\n+ RTE_REGISTER_DRIVER(drv, name)\n+\n+Creates the following symbol:\n+\n+.. code-block:: c\n+\n+ static char rte_pmd_name0[] __attribute__((used)) = \"<name>\";\n+\n .. _Useful_Variables_Provided_by_the_Build_System:\n \n Useful Variables Provided by the Build System\ndiff --git a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c\nindex 2987ef6..3e13eae 100644\n--- a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c\n+++ b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c\n@@ -521,4 +521,6 @@ static struct rte_driver aesni_gcm_pmd_drv = {\n \t.uninit = aesni_gcm_uninit\n };\n \n-PMD_REGISTER_DRIVER(aesni_gcm_pmd_drv);\n+RTE_REGISTER_DRIVER(aesni_gcm, aesni_gcm_pmd_drv);\n+RTE_EXPORT_PARAM_STRING(aesni_gcm, \"max_nb_queue_pairs=<int> \"\n+\"max_nb_sessions=<int> socket_id=<int>\");\ndiff --git a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c\nindex 6554fc4..2afc2bb 100644\n--- a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c\n+++ b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c\n@@ -721,4 +721,6 @@ static struct rte_driver cryptodev_aesni_mb_pmd_drv = {\n \t.uninit = cryptodev_aesni_mb_uninit\n };\n \n-PMD_REGISTER_DRIVER(cryptodev_aesni_mb_pmd_drv);\n+RTE_REGISTER_DRIVER(aesni_mb, cryptodev_aesni_mb_pmd_drv);\n+RTE_EXPORT_PARAM_STRING(aesni_gcm, \"max_nb_queue_pairs=<int> \"\n+\"max_nb_sessions=<int> socket_id=<int>\");\ndiff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c b/drivers/crypto/kasumi/rte_kasumi_pmd.c\nindex 5f8c7a2..3dda257 100644\n--- a/drivers/crypto/kasumi/rte_kasumi_pmd.c\n+++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c\n@@ -654,4 +654,6 @@ static struct rte_driver cryptodev_kasumi_pmd_drv = {\n \t.uninit = cryptodev_kasumi_uninit\n };\n \n-PMD_REGISTER_DRIVER(cryptodev_kasumi_pmd_drv);\n+RTE_REGISTER_DRIVER(kasumi, cryptodev_kasumi_pmd_drv);\n+RTE_EXPORT_PARAM_STRING(kasumi, \"max_nb_queue_pairs=<int> \"\n+\"max_nb_sessions=<int> socket_id=<int>\");\ndiff --git a/drivers/crypto/null/null_crypto_pmd.c b/drivers/crypto/null/null_crypto_pmd.c\nindex bdaf13c..003dce7 100644\n--- a/drivers/crypto/null/null_crypto_pmd.c\n+++ b/drivers/crypto/null/null_crypto_pmd.c\n@@ -275,4 +275,6 @@ static struct rte_driver cryptodev_null_pmd_drv = {\n \t.uninit = cryptodev_null_uninit\n };\n \n-PMD_REGISTER_DRIVER(cryptodev_null_pmd_drv);\n+RTE_REGISTER_DRIVER(cryptodev_null_pmd, cryptodev_null_pmd_drv);\n+RTE_EXPORT_PARAM_STRING(aesni_gcm, \"max_nb_queue_pairs=<int> \"\n+\"max_nb_sessions=<int> socket_id=<int>\");\ndiff --git a/drivers/crypto/qat/rte_qat_cryptodev.c b/drivers/crypto/qat/rte_qat_cryptodev.c\nindex f46ec85..d9cd10a 100644\n--- a/drivers/crypto/qat/rte_qat_cryptodev.c\n+++ b/drivers/crypto/qat/rte_qat_cryptodev.c\n@@ -134,4 +134,5 @@ static struct rte_driver pmd_qat_drv = {\n \t.init = rte_qat_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(pmd_qat_drv);\n+RTE_REGISTER_DRIVER(qat, pmd_qat_drv);\n+RTE_EXPORT_PCI_TABLE(qat, pci_id_qat_map);\ndiff --git a/drivers/crypto/snow3g/rte_snow3g_pmd.c b/drivers/crypto/snow3g/rte_snow3g_pmd.c\nindex dc8de6b..e531408 100644\n--- a/drivers/crypto/snow3g/rte_snow3g_pmd.c\n+++ b/drivers/crypto/snow3g/rte_snow3g_pmd.c\n@@ -645,4 +645,6 @@ static struct rte_driver cryptodev_snow3g_pmd_drv = {\n \t.uninit = cryptodev_snow3g_uninit\n };\n \n-PMD_REGISTER_DRIVER(cryptodev_snow3g_pmd_drv);\n+RTE_REGISTER_DRIVER(snow3g, cryptodev_snow3g_pmd_drv);\n+RTE_EXPORT_PARAM_STRING(aesni_gcm, \"max_nb_queue_pairs=<int> \"\n+\"max_nb_sessions=<int> socket_id=<int>\");\ndiff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c\nindex 2d7f344..9a9547c 100644\n--- a/drivers/net/af_packet/rte_eth_af_packet.c\n+++ b/drivers/net/af_packet/rte_eth_af_packet.c\n@@ -896,4 +896,6 @@ static struct rte_driver pmd_af_packet_drv = {\n \t.uninit = rte_pmd_af_packet_devuninit,\n };\n \n-PMD_REGISTER_DRIVER(pmd_af_packet_drv);\n+RTE_REGISTER_DRIVER(eth_af_packet, pmd_af_packet_drv);\n+RTE_EXPORT_PARAM_STRING(eth_af_packet, \"iface=<string> \"\n+\"qpairs=<int> blocksz=<int> framesz=<int> framecnt=<int>\");\ndiff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c\nindex 3ff57c4..ec0d88d 100644\n--- a/drivers/net/bnx2x/bnx2x_ethdev.c\n+++ b/drivers/net/bnx2x/bnx2x_ethdev.c\n@@ -566,5 +566,7 @@ static struct rte_driver rte_bnx2xvf_driver = {\n \t.init = rte_bnx2xvf_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_bnx2x_driver);\n-PMD_REGISTER_DRIVER(rte_bnx2xvf_driver);\n+RTE_REGISTER_DRIVER(bnx2x,rte_bnx2x_driver);\n+RTE_EXPORT_PCI_TABLE(bnx2x, pci_id_bnx2x_map);\n+RTE_REGISTER_DRIVER(bnx2xvf, rte_bnx2xvf_driver);\n+RTE_EXPORT_PCI_TABLE(bnx2xvf, pci_id_bnx2xvf_map);\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 406e38a..2e0801f 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -1046,4 +1046,5 @@ static struct rte_driver bnxt_pmd_drv = {\n \t.init = bnxt_rte_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(bnxt_pmd_drv);\n+RTE_REGISTER_DRIVER(bnxt, bnxt_pmd_drv);\n+RTE_EXPORT_PCI_TABLE(bnxt, bnxt_pci_id_map);\ndiff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c\nindex 9a2518f..579e67e 100644\n--- a/drivers/net/bonding/rte_eth_bond_pmd.c\n+++ b/drivers/net/bonding/rte_eth_bond_pmd.c\n@@ -2515,4 +2515,7 @@ static struct rte_driver bond_drv = {\n \t.uninit = bond_uninit,\n };\n \n-PMD_REGISTER_DRIVER(bond_drv);\n+RTE_REGISTER_DRIVER(bonding, bond_drv);\n+RTE_EXPORT_PARAM_STRING(bonding, \"slave=<ifc> primary=<ifc> mode=[0-4] \"\n+\"xmit_policy=[l2 | l23 | l34] socket_id=<int> mac=<mac addr> \"\n+\"lsc_poll_period_ms=<int> up_delay=<int> down_delay=<int>\");\ndiff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c\nindex 6c130ed..7e12617 100644\n--- a/drivers/net/cxgbe/cxgbe_ethdev.c\n+++ b/drivers/net/cxgbe/cxgbe_ethdev.c\n@@ -1061,4 +1061,5 @@ static struct rte_driver rte_cxgbe_driver = {\n \t.init = rte_cxgbe_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_cxgbe_driver);\n+RTE_REGISTER_DRIVER(cxgb4, rte_cxgbe_driver);\n+RTE_EXPORT_PCI_TABLE(cxgb4, cxgb4_pci_tbl);\ndiff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c\nindex 653be09..d0a104e 100644\n--- a/drivers/net/e1000/em_ethdev.c\n+++ b/drivers/net/e1000/em_ethdev.c\n@@ -1777,4 +1777,5 @@ struct rte_driver em_pmd_drv = {\n \t.init = rte_em_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(em_pmd_drv);\n+RTE_REGISTER_DRIVER(em, em_pmd_drv);\n+RTE_EXPORT_PCI_TABLE(em, pci_id_em_map);\ndiff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c\nindex 5067d20..164aae5 100644\n--- a/drivers/net/e1000/igb_ethdev.c\n+++ b/drivers/net/e1000/igb_ethdev.c\n@@ -5210,5 +5210,7 @@ eth_igb_configure_msix_intr(struct rte_eth_dev *dev)\n \tE1000_WRITE_FLUSH(hw);\n }\n \n-PMD_REGISTER_DRIVER(pmd_igb_drv);\n-PMD_REGISTER_DRIVER(pmd_igbvf_drv);\n+RTE_REGISTER_DRIVER(igb, pmd_igb_drv);\n+RTE_EXPORT_PCI_TABLE(igb, pci_id_igb_map);\n+RTE_REGISTER_DRIVER(igbvf, pmd_igbvf_drv);\n+RTE_EXPORT_PCI_TABLE(igbvf, pci_id_igbvf_map);\ndiff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c\nindex e157587..82ade83 100644\n--- a/drivers/net/ena/ena_ethdev.c\n+++ b/drivers/net/ena/ena_ethdev.c\n@@ -1450,4 +1450,5 @@ struct rte_driver ena_pmd_drv = {\n \t.init = rte_ena_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(ena_pmd_drv);\n+RTE_REGISTER_DRIVER(ena, ena_pmd_drv);\n+RTE_EXPORT_PCI_TABLE(ena, pci_id_ena_map);\ndiff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c\nindex a7ce064..4e62282 100644\n--- a/drivers/net/enic/enic_ethdev.c\n+++ b/drivers/net/enic/enic_ethdev.c\n@@ -636,4 +636,5 @@ static struct rte_driver rte_enic_driver = {\n \t.init = rte_enic_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_enic_driver);\n+RTE_REGISTER_DRIVER(enic, rte_enic_driver);\n+RTE_EXPORT_PCI_TABLE(enic, pci_id_enic_map);\ndiff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c\nindex eb77705..62f7d41 100644\n--- a/drivers/net/fm10k/fm10k_ethdev.c\n+++ b/drivers/net/fm10k/fm10k_ethdev.c\n@@ -3086,4 +3086,5 @@ static struct rte_driver rte_fm10k_driver = {\n \t.init = rte_pmd_fm10k_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_fm10k_driver);\n+RTE_REGISTER_DRIVER(fm10k, rte_fm10k_driver);\n+RTE_EXPORT_PCI_TABLE(fm10k, pci_id_fm10k_map);\ndiff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c\nindex f414d93..8fc0852 100644\n--- a/drivers/net/i40e/i40e_ethdev.c\n+++ b/drivers/net/i40e/i40e_ethdev.c\n@@ -705,7 +705,8 @@ static struct rte_driver rte_i40e_driver = {\n \t.init = rte_i40e_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_i40e_driver);\n+RTE_REGISTER_DRIVER(i40e, rte_i40e_driver);\n+RTE_EXPORT_PCI_TABLE(i40e, pci_id_i40e_map);\n \n /*\n * Initialize registers for flexible payload, which should be set by NVM.\ndiff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c\nindex 7b6df1d..27b7b57 100644\n--- a/drivers/net/i40e/i40e_ethdev_vf.c\n+++ b/drivers/net/i40e/i40e_ethdev_vf.c\n@@ -1581,7 +1581,8 @@ static struct rte_driver rte_i40evf_driver = {\n \t.init = rte_i40evf_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_i40evf_driver);\n+RTE_REGISTER_DRIVER(i40evf, rte_i40evf_driver);\n+RTE_EXPORT_PCI_TABLE(i40evf, pci_id_i40evf_map);\n \n static int\n i40evf_dev_configure(struct rte_eth_dev *dev)\ndiff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c\nindex 0629b42..014b972 100644\n--- a/drivers/net/ixgbe/ixgbe_ethdev.c\n+++ b/drivers/net/ixgbe/ixgbe_ethdev.c\n@@ -7352,5 +7352,7 @@ static struct rte_driver rte_ixgbevf_driver = {\n \t.init = rte_ixgbevf_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_ixgbe_driver);\n-PMD_REGISTER_DRIVER(rte_ixgbevf_driver);\n+RTE_REGISTER_DRIVER(ixgbe, rte_ixgbe_driver);\n+RTE_EXPORT_PCI_TABLE(ixgbe, pci_id_ixgbe_map);\n+RTE_REGISTER_DRIVER(ixgbevf, rte_ixgbevf_driver);\n+RTE_EXPORT_PCI_TABLE(ixgbevf, pci_id_ixgbevf_map);\ndiff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c\nindex f8ed42b..1681fc3 100644\n--- a/drivers/net/mlx4/mlx4.c\n+++ b/drivers/net/mlx4/mlx4.c\n@@ -5861,4 +5861,5 @@ static struct rte_driver rte_mlx4_driver = {\n \t.init = rte_mlx4_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_mlx4_driver)\n+RTE_REGISTER_DRIVER(mlx4, rte_mlx4_driver);\n+RTE_EXPORT_PCI_TABLE(mlx4, mlx4_pci_id_map);\ndiff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c\nindex 5aa4adc..5f4186a 100644\n--- a/drivers/net/mlx5/mlx5.c\n+++ b/drivers/net/mlx5/mlx5.c\n@@ -762,4 +762,5 @@ static struct rte_driver rte_mlx5_driver = {\n \t.init = rte_mlx5_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_mlx5_driver)\n+RTE_REGISTER_DRIVER(mlx5, rte_mlx5_driver);\n+RTE_EXPORT_PCI_TABLE(mlx5, mlx5_pci_id_map);\ndiff --git a/drivers/net/mpipe/mpipe_tilegx.c b/drivers/net/mpipe/mpipe_tilegx.c\nindex 26e1424..94f71ad 100644\n--- a/drivers/net/mpipe/mpipe_tilegx.c\n+++ b/drivers/net/mpipe/mpipe_tilegx.c\n@@ -1635,8 +1635,8 @@ static struct rte_driver pmd_mpipe_gbe_drv = {\n \t.init = rte_pmd_mpipe_devinit,\n };\n \n-PMD_REGISTER_DRIVER(pmd_mpipe_xgbe_drv);\n-PMD_REGISTER_DRIVER(pmd_mpipe_gbe_drv);\n+RTE_REGISTER_DRIVER(mpipe_xgbe, pmd_mpipe_xgbe_drv);\n+RTE_REGISTER_DRIVER(mpipe_gbe, pmd_mpipe_gbe_drv);\n \n static void __attribute__((constructor, used))\n mpipe_init_contexts(void)\ndiff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c\nindex 6afd49b..de0f961 100644\n--- a/drivers/net/nfp/nfp_net.c\n+++ b/drivers/net/nfp/nfp_net.c\n@@ -2486,7 +2486,8 @@ static struct rte_driver rte_nfp_net_driver = {\n \t.init = nfp_net_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_nfp_net_driver);\n+RTE_REGISTER_DRIVER(nfp, rte_nfp_net_driver);\n+RTE_EXPORT_PCI_TABLE(nfp, pci_id_nfp_net_map);\n \n /*\n * Local variables:\ndiff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c\nindex ab440f3..e22b5c3 100644\n--- a/drivers/net/null/rte_eth_null.c\n+++ b/drivers/net/null/rte_eth_null.c\n@@ -693,4 +693,5 @@ static struct rte_driver pmd_null_drv = {\n \t.uninit = rte_pmd_null_devuninit,\n };\n \n-PMD_REGISTER_DRIVER(pmd_null_drv);\n+RTE_REGISTER_DRIVER(eth_null, pmd_null_drv);\n+RTE_EXPORT_PARAM_STRING(eth_null, \"size=<int> copy=<int>\");\ndiff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c\nindex c86f17b..2dd536e 100644\n--- a/drivers/net/pcap/rte_eth_pcap.c\n+++ b/drivers/net/pcap/rte_eth_pcap.c\n@@ -1090,4 +1090,6 @@ static struct rte_driver pmd_pcap_drv = {\n \t.uninit = rte_pmd_pcap_devuninit,\n };\n \n-PMD_REGISTER_DRIVER(pmd_pcap_drv);\n+RTE_REGISTER_DRIVER(pcap, pmd_pcap_drv);\n+RTE_EXPORT_PARAM_STRING(pcap, \"rx_pcap=<string> tx_pcap=<string> \"\n+\"rx_iface=<ifc> tx_iface=<ifc> iface=<ifc>\");\ndiff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c\nindex bb531be..bc07b99 100644\n--- a/drivers/net/qede/qede_ethdev.c\n+++ b/drivers/net/qede/qede_ethdev.c\n@@ -1340,5 +1340,7 @@ static struct rte_driver rte_qede_driver = {\n \t.init = rte_qedevf_pmd_init\n };\n \n-PMD_REGISTER_DRIVER(rte_qede_driver);\n-PMD_REGISTER_DRIVER(rte_qedevf_driver);\n+RTE_REGISTER_DRIVER(qede, rte_qede_driver);\n+RTE_EXPORT_PCI_TABLE(qede, pci_id_qede_map);\n+RTE_REGISTER_DRIVER(qedevf, rte_qedevf_driver);\n+RTE_EXPORT_PCI_TABLE(qedevf, pci_id_qedevf_map);\ndiff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c\nindex b1783c3..7a11d78 100644\n--- a/drivers/net/ring/rte_eth_ring.c\n+++ b/drivers/net/ring/rte_eth_ring.c\n@@ -630,4 +630,5 @@ static struct rte_driver pmd_ring_drv = {\n \t.uninit = rte_pmd_ring_devuninit,\n };\n \n-PMD_REGISTER_DRIVER(pmd_ring_drv);\n+RTE_REGISTER_DRIVER(eth_ring, pmd_ring_drv);\n+RTE_EXPORT_PARAM_STRING(eth_ring, \"nodeaction=[attach|detach]\");\ndiff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c\nindex 985a8d6..d8564d9 100644\n--- a/drivers/net/szedata2/rte_eth_szedata2.c\n+++ b/drivers/net/szedata2/rte_eth_szedata2.c\n@@ -1601,4 +1601,5 @@ static struct rte_driver rte_szedata2_driver = {\n \t.uninit = rte_szedata2_uninit,\n };\n \n-PMD_REGISTER_DRIVER(rte_szedata2_driver);\n+RTE_REGISTER_DRIVER(rte_szedata2_pmd, rte_szedata2_driver);\n+RTE_EXPORT_PCI_TABLE(rte_szedata2_pmd, rte_szedata2_pci_id_table);\ndiff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c\nindex 48ed381..4593251 100644\n--- a/drivers/net/thunderx/nicvf_ethdev.c\n+++ b/drivers/net/thunderx/nicvf_ethdev.c\n@@ -1788,4 +1788,5 @@ static struct rte_driver rte_nicvf_driver = {\n \t.init = rte_nicvf_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_nicvf_driver);\n+RTE_REGISTER_DRIVER(thunderx_nicvf, rte_nicvf_driver);\n+RTE_EXPORT_PCI_TABLE(thunderx_nicvf, pci_id_nicvf_map);\ndiff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c\nindex c5bbb87..ea3a248 100644\n--- a/drivers/net/vhost/rte_eth_vhost.c\n+++ b/drivers/net/vhost/rte_eth_vhost.c\n@@ -921,4 +921,5 @@ static struct rte_driver pmd_vhost_drv = {\n \t.uninit = rte_pmd_vhost_devuninit,\n };\n \n-PMD_REGISTER_DRIVER(pmd_vhost_drv);\n+RTE_REGISTER_DRIVER(eth_vhost, pmd_vhost_drv);\n+RTE_EXPORT_PARAM_STRING(eth_vhost, \"iface=<ifc> queues=<int>\");\ndiff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c\nindex 480daa3..a884d77 100644\n--- a/drivers/net/virtio/virtio_ethdev.c\n+++ b/drivers/net/virtio/virtio_ethdev.c\n@@ -1571,4 +1571,5 @@ static struct rte_driver rte_virtio_driver = {\n \t.init = rte_virtio_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_virtio_driver);\n+RTE_REGISTER_DRIVER(virtio_net, rte_virtio_driver);\n+RTE_EXPORT_PCI_TABLE(virtio_net, pci_id_virtio_map);\ndiff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c\nindex 5ab2471..587de75 100644\n--- a/drivers/net/virtio/virtio_user_ethdev.c\n+++ b/drivers/net/virtio/virtio_user_ethdev.c\n@@ -437,4 +437,4 @@ static struct rte_driver virtio_user_driver = {\n \t.uninit = virtio_user_pmd_devuninit,\n };\n \n-PMD_REGISTER_DRIVER(virtio_user_driver);\n+RTE_REGISTER_DRIVER(virtio_user, virtio_user_driver);\ndiff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c\nindex 29b469c..be4c404 100644\n--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c\n+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c\n@@ -954,4 +954,5 @@ static struct rte_driver rte_vmxnet3_driver = {\n \t.init = rte_vmxnet3_pmd_init,\n };\n \n-PMD_REGISTER_DRIVER(rte_vmxnet3_driver);\n+RTE_REGISTER_DRIVER(vmxnet3, rte_vmxnet3_driver);\n+RTE_EXPORT_PCI_TABLE(vmxnet3, pci_id_vmxnet3_map);\ndiff --git a/drivers/net/xenvirt/rte_eth_xenvirt.c b/drivers/net/xenvirt/rte_eth_xenvirt.c\nindex 3e45808..f28f5f0 100644\n--- a/drivers/net/xenvirt/rte_eth_xenvirt.c\n+++ b/drivers/net/xenvirt/rte_eth_xenvirt.c\n@@ -766,4 +766,4 @@ static struct rte_driver pmd_xenvirt_drv = {\n \t.uninit = rte_pmd_xenvirt_devuninit,\n };\n \n-PMD_REGISTER_DRIVER(pmd_xenvirt_drv);\n+RTE_REGISTER_DRIVER(xenvirt, pmd_xenvirt_drv);\ndiff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c\nindex a8a4146..707e875 100644\n--- a/lib/librte_eal/common/eal_common_dev.c\n+++ b/lib/librte_eal/common/eal_common_dev.c\n@@ -98,7 +98,7 @@ rte_eal_dev_init(void)\n \t/*\n \t * Note that the dev_driver_list is populated here\n \t * from calls made to rte_eal_driver_register from constructor functions\n-\t * embedded into PMD modules via the PMD_REGISTER_DRIVER macro\n+\t * embedded into PMD modules via the RTE_REGISTER_DRIVER macro\n \t */\n \n \t/* call the init function for each virtual device */\ndiff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h\nindex f1b5507..1aa7656 100644\n--- a/lib/librte_eal/common/include/rte_dev.h\n+++ b/lib/librte_eal/common/include/rte_dev.h\n@@ -48,7 +48,7 @@ extern \"C\" {\n \n #include <stdio.h>\n #include <sys/queue.h>\n-\n+#include <rte_pci.h>\n #include <rte_log.h>\n \n __attribute__((format(printf, 2, 0)))\n@@ -178,12 +178,30 @@ int rte_eal_vdev_init(const char *name, const char *args);\n */\n int rte_eal_vdev_uninit(const char *name);\n \n-#define PMD_REGISTER_DRIVER(d)\\\n-void devinitfn_ ##d(void);\\\n-void __attribute__((constructor, used)) devinitfn_ ##d(void)\\\n+#define _RTE_EXPORT_DRIVER_NAME(name, index) name##index[]\n+\n+#define RTE_EXPORT_DRIVER_NAME(name, index) \\\n+static const char _RTE_EXPORT_DRIVER_NAME(rte_pmd_name, index) \\\n+__attribute__((used)) = RTE_STR(name)\n+\n+#define RTE_REGISTER_DRIVER(_name, driver)\\\n+void devinitfn_ ##driver(void);\\\n+void __attribute__((constructor, used)) devinitfn_ ##driver(void)\\\n {\\\n-\trte_eal_driver_register(&d);\\\n-}\n+\t(driver).name = RTE_STR(_name);\\\n+\trte_eal_driver_register(&driver);\\\n+} \\\n+RTE_EXPORT_DRIVER_NAME(_name, __COUNTER__)\n+\n+#define _RTE_EXPORT_TAG(name, tag) __##name##_##tag\n+\n+#define RTE_EXPORT_PCI_TABLE(name, table) \\\n+static const char _RTE_EXPORT_TAG(name, pci_table_export)[] \\\n+__attribute__((used)) = RTE_STR(table)\n+\n+#define RTE_EXPORT_PARAM_STRING(name, str) \\\n+static const char _RTE_EXPORT_TAG(name, param_string_export)[] \\\n+__attribute__((used)) = str\n \n #ifdef __cplusplus\n }\n", "prefixes": [ "dpdk-dev", "v9", "1/7" ] }{ "id": 14507, "url": "