@@ -34,4 +34,6 @@ include $(RTE_SDK)/mk/rte.vars.mk
DIRS-y += net
DIRS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += crypto
+DEPDIRS-y += buildtools/pmdinfo
+
include $(RTE_SDK)/mk/rte.subdir.mk
@@ -521,4 +521,4 @@ static struct rte_driver aesni_gcm_pmd_drv = {
.uninit = aesni_gcm_uninit
};
-PMD_REGISTER_DRIVER(aesni_gcm_pmd_drv);
+PMD_REGISTER_DRIVER_VDEV(aesni_gcm_pmd_drv, aesni_gcm);
@@ -716,4 +716,4 @@ static struct rte_driver cryptodev_aesni_mb_pmd_drv = {
.uninit = cryptodev_aesni_mb_uninit
};
-PMD_REGISTER_DRIVER(cryptodev_aesni_mb_pmd_drv);
+PMD_REGISTER_DRIVER_VDEV(cryptodev_aesni_mb_pmd_drvi, aesni_mb);
@@ -275,4 +275,4 @@ static struct rte_driver cryptodev_null_pmd_drv = {
.uninit = cryptodev_null_uninit
};
-PMD_REGISTER_DRIVER(cryptodev_null_pmd_drv);
+PMD_REGISTER_DRIVER_VDEV(cryptodev_null_pmd_drv, cryptodev_null_pmd);
@@ -137,4 +137,4 @@ static struct rte_driver pmd_qat_drv = {
.init = rte_qat_pmd_init,
};
-PMD_REGISTER_DRIVER(pmd_qat_drv);
+PMD_REGISTER_DRIVER_PDEV(pmd_qat_drv, pci_id_qat_map, qat);
@@ -548,4 +548,4 @@ static struct rte_driver cryptodev_snow3g_pmd_drv = {
.uninit = cryptodev_snow3g_uninit
};
-PMD_REGISTER_DRIVER(cryptodev_snow3g_pmd_drv);
+PMD_REGISTER_DRIVER_VDEV(cryptodev_snow3g_pmd_drv, snow3g);
@@ -878,4 +878,4 @@ static struct rte_driver pmd_af_packet_drv = {
.uninit = rte_pmd_af_packet_devuninit,
};
-PMD_REGISTER_DRIVER(pmd_af_packet_drv);
+PMD_REGISTER_DRIVER_VDEV(pmd_af_packet_drv, eth_af_packet);
@@ -550,5 +550,5 @@ static struct rte_driver rte_bnx2xvf_driver = {
.init = rte_bnx2xvf_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_bnx2x_driver);
-PMD_REGISTER_DRIVER(rte_bnx2xvf_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_bnx2x_driver, pci_id_bnx2x_map, bnx2x);
+PMD_REGISTER_DRIVER_PDEV(rte_bnx2xvf_driver, pci_id_bnx2xvf_map, bnx2xvf);
@@ -2511,4 +2511,4 @@ static struct rte_driver bond_drv = {
.uninit = bond_uninit,
};
-PMD_REGISTER_DRIVER(bond_drv);
+PMD_REGISTER_DRIVER_VDEV(bond_drv, bonding);
@@ -894,4 +894,4 @@ static struct rte_driver rte_cxgbe_driver = {
.init = rte_cxgbe_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_cxgbe_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_cxgbe_driver, cxgb4_pci_tbl, cxgb4);
@@ -1777,4 +1777,4 @@ struct rte_driver em_pmd_drv = {
.init = rte_em_pmd_init,
};
-PMD_REGISTER_DRIVER(em_pmd_drv);
+PMD_REGISTER_DRIVER_PDEV(em_pmd_drv, pci_id_em_map, em);
@@ -4973,5 +4973,5 @@ eth_igb_configure_msix_intr(struct rte_eth_dev *dev)
E1000_WRITE_FLUSH(hw);
}
-PMD_REGISTER_DRIVER(pmd_igb_drv);
-PMD_REGISTER_DRIVER(pmd_igbvf_drv);
+PMD_REGISTER_DRIVER_PDEV(pmd_igb_drv, pci_id_igb_map, igb);
+PMD_REGISTER_DRIVER_PDEV(pmd_igbvf_drv, pci_id_igbvf_map, igbvf);
@@ -1450,4 +1450,4 @@ struct rte_driver ena_pmd_drv = {
.init = rte_ena_pmd_init,
};
-PMD_REGISTER_DRIVER(ena_pmd_drv);
+PMD_REGISTER_DRIVER_PDEV(ena_pmd_drv, pci_id_ena_map, ena);
@@ -684,4 +684,4 @@ static struct rte_driver rte_enic_driver = {
.init = rte_enic_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_enic_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_enic_driver, pci_id_enic_map, enic);
@@ -3055,4 +3055,4 @@ static struct rte_driver rte_fm10k_driver = {
.init = rte_pmd_fm10k_init,
};
-PMD_REGISTER_DRIVER(rte_fm10k_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_fm10k_driver, pci_id_fm10k_map, fm10k);
@@ -695,7 +695,7 @@ static struct rte_driver rte_i40e_driver = {
.init = rte_i40e_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_i40e_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_i40e_driver, pci_id_i40e_map, i40e);
/*
* Initialize registers for flexible payload, which should be set by NVM.
@@ -1560,7 +1560,7 @@ static struct rte_driver rte_i40evf_driver = {
.init = rte_i40evf_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_i40evf_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_i40evf_driver, pci_id_i40evf_map, i40evf);
static int
i40evf_dev_configure(struct rte_eth_dev *dev)
@@ -7141,5 +7141,5 @@ static struct rte_driver rte_ixgbevf_driver = {
.init = rte_ixgbevf_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_ixgbe_driver);
-PMD_REGISTER_DRIVER(rte_ixgbevf_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_ixgbe_driver, pci_id_ixgbe_map, ixgbe);
+PMD_REGISTER_DRIVER_PDEV(rte_ixgbevf_driver, pci_id_ixgbevf_map, ixgbevf);
@@ -5817,4 +5817,4 @@ static struct rte_driver rte_mlx4_driver = {
.init = rte_mlx4_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_mlx4_driver)
+PMD_REGISTER_DRIVER_PDEV(rte_mlx4_driveri, mlx4_pci_id_map, mlx4)
@@ -672,4 +672,4 @@ static struct rte_driver rte_mlx5_driver = {
.init = rte_mlx5_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_mlx5_driver)
+PMD_REGISTER_DRIVER_PDEV(rte_mlx5_driveri, mlx5_pci_id_map, mlx5)
@@ -1635,8 +1635,8 @@ static struct rte_driver pmd_mpipe_gbe_drv = {
.init = rte_pmd_mpipe_devinit,
};
-PMD_REGISTER_DRIVER(pmd_mpipe_xgbe_drv);
-PMD_REGISTER_DRIVER(pmd_mpipe_gbe_drv);
+PMD_REGISTER_DRIVER_VDEV(pmd_mpipe_xgbe_drv, mpipe_xgbe);
+PMD_REGISTER_DRIVER_VDEV(pmd_mpipe_gbe_drv, mpipe_gbe);
static void __attribute__((constructor, used))
mpipe_init_contexts(void)
@@ -2482,7 +2482,7 @@ static struct rte_driver rte_nfp_net_driver = {
.init = nfp_net_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_nfp_net_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_nfp_net_driver, pci_id_nfp_net_map, nfp);
/*
* Local variables:
@@ -689,4 +689,4 @@ static struct rte_driver pmd_null_drv = {
.uninit = rte_pmd_null_devuninit,
};
-PMD_REGISTER_DRIVER(pmd_null_drv);
+PMD_REGISTER_DRIVER_VDEV(pmd_null_drv, eth_null);
@@ -1090,4 +1090,4 @@ static struct rte_driver pmd_pcap_drv = {
.uninit = rte_pmd_pcap_devuninit,
};
-PMD_REGISTER_DRIVER(pmd_pcap_drv);
+PMD_REGISTER_DRIVER_VDEV(pmd_pcap_drv, pcap);
@@ -630,4 +630,4 @@ static struct rte_driver pmd_ring_drv = {
.uninit = rte_pmd_ring_devuninit,
};
-PMD_REGISTER_DRIVER(pmd_ring_drv);
+PMD_REGISTER_DRIVER_VDEV(pmd_ring_drv, eth_ring);
@@ -1601,4 +1601,4 @@ static struct rte_driver rte_szedata2_driver = {
.uninit = rte_szedata2_uninit,
};
-PMD_REGISTER_DRIVER(rte_szedata2_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_szedata2_driver, rte_szedata2_pci_id_table ,rte_szedata2_pmd);
@@ -924,4 +924,4 @@ static struct rte_driver pmd_vhost_drv = {
.uninit = rte_pmd_vhost_devuninit,
};
-PMD_REGISTER_DRIVER(pmd_vhost_drv);
+PMD_REGISTER_DRIVER_VDEV(pmd_vhost_drv, eth_vhost);
@@ -1458,4 +1458,4 @@ static struct rte_driver rte_virtio_driver = {
.init = rte_virtio_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_virtio_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_virtio_driver, pci_id_virtio_map, virtio_net);
@@ -954,4 +954,4 @@ static struct rte_driver rte_vmxnet3_driver = {
.init = rte_vmxnet3_pmd_init,
};
-PMD_REGISTER_DRIVER(rte_vmxnet3_driver);
+PMD_REGISTER_DRIVER_PDEV(rte_vmxnet3_driver, pci_id_vmxnet3_map,vmxnet3);
@@ -775,4 +775,4 @@ static struct rte_driver pmd_xenvirt_drv = {
.uninit = rte_pmd_xenvirt_devuninit,
};
-PMD_REGISTER_DRIVER(pmd_xenvirt_drv);
+PMD_REGISTER_DRIVER_VDEV(pmd_xenvirt_drv, xenvirt);
@@ -48,7 +48,7 @@ extern "C" {
#include <stdio.h>
#include <sys/queue.h>
-
+#include <rte_pci.h>
#include <rte_log.h>
__attribute__((format(printf, 2, 0)))
@@ -178,12 +178,27 @@ int rte_eal_vdev_init(const char *name, const char *args);
*/
int rte_eal_vdev_uninit(const char *name);
+#define DRIVER_EXPORT_NAME_ARRAY(n, idx) n##idx[] __attribute__((used))
+
+#define DRIVER_EXPORT_PDEV(d, n, idx) static const char DRIVER_EXPORT_NAME_ARRAY(this_pmd_driver, idx) = RTE_STR(d);\
+static const char DRIVER_EXPORT_NAME_ARRAY(this_pmd_name, idx) = RTE_STR(n)
+
+#define DRIVER_EXPORT_VDEV(d, idx) static const char DRIVER_EXPORT_NAME_ARRAY(this_pmd_name, idx) = RTE_STR(d)
+
#define PMD_REGISTER_DRIVER(d)\
void devinitfn_ ##d(void);\
void __attribute__((constructor, used)) devinitfn_ ##d(void)\
{\
- rte_eal_driver_register(&d);\
-}
+ rte_eal_driver_register(&d);\
+}\
+
+#define PMD_REGISTER_DRIVER_PDEV(d, t, n)\
+PMD_REGISTER_DRIVER(d) \
+DRIVER_EXPORT_PDEV(t, n, __COUNTER__)
+
+#define PMD_REGISTER_DRIVER_VDEV(d, n)\
+PMD_REGISTER_DRIVER(d) \
+DRIVER_EXPORT_VDEV(n, __COUNTER__)
#ifdef __cplusplus
}
Modify the PMD_REGISTER_DRIVER macro, bifurcating it into two (PMD_REGISTER_DRIVER_PDEV and PMD_REGISTER_DRIVER_VDEV. Both of these do the same thing the origional macro did, but both add the definition of a string variable that informs interested parties of the name of the pmd, and the former also defines an second string that holds the symbol name of the pci table that is registered by this pmd. pmdinfo uses this information to extract hardware support from an object file and create a json string to make hardware support info discoverable later. Signed-off-by: Neil Horman <nhorman@tuxdriver.com> CC: Bruce Richardson <bruce.richardson@intel.com> CC: Thomas Monjalon <thomas.monjalon@6wind.com> CC: Stephen Hemminger <stephen@networkplumber.org> CC: Panu Matilainen <pmatilai@redhat.com> --- drivers/Makefile | 2 ++ drivers/crypto/aesni_gcm/aesni_gcm_pmd.c | 2 +- drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c | 2 +- drivers/crypto/null/null_crypto_pmd.c | 2 +- drivers/crypto/qat/rte_qat_cryptodev.c | 2 +- drivers/crypto/snow3g/rte_snow3g_pmd.c | 2 +- drivers/net/af_packet/rte_eth_af_packet.c | 2 +- drivers/net/bnx2x/bnx2x_ethdev.c | 4 ++-- drivers/net/bonding/rte_eth_bond_pmd.c | 2 +- drivers/net/cxgbe/cxgbe_ethdev.c | 2 +- drivers/net/e1000/em_ethdev.c | 2 +- drivers/net/e1000/igb_ethdev.c | 4 ++-- drivers/net/ena/ena_ethdev.c | 2 +- drivers/net/enic/enic_ethdev.c | 2 +- drivers/net/fm10k/fm10k_ethdev.c | 2 +- drivers/net/i40e/i40e_ethdev.c | 2 +- drivers/net/i40e/i40e_ethdev_vf.c | 2 +- drivers/net/ixgbe/ixgbe_ethdev.c | 4 ++-- drivers/net/mlx4/mlx4.c | 2 +- drivers/net/mlx5/mlx5.c | 2 +- drivers/net/mpipe/mpipe_tilegx.c | 4 ++-- drivers/net/nfp/nfp_net.c | 2 +- drivers/net/null/rte_eth_null.c | 2 +- drivers/net/pcap/rte_eth_pcap.c | 2 +- drivers/net/ring/rte_eth_ring.c | 2 +- drivers/net/szedata2/rte_eth_szedata2.c | 2 +- drivers/net/vhost/rte_eth_vhost.c | 2 +- drivers/net/virtio/virtio_ethdev.c | 2 +- drivers/net/vmxnet3/vmxnet3_ethdev.c | 2 +- drivers/net/xenvirt/rte_eth_xenvirt.c | 2 +- lib/librte_eal/common/include/rte_dev.h | 21 ++++++++++++++++++--- 31 files changed, 53 insertions(+), 36 deletions(-)