drivers: update registration macro usage

Modify the PMD_REGISTER_DRIVER macro, adding a name argument to it.  The
addition of a name argument creates a token that can be used for subsequent
macros in the creation of unique symbol names to export additional bits of
information for use by the pmdinfogen tool.  For example:

PMD_REGISTER_DRIVER(ena_driver, ena);

registers the ena_driver struct as it always did, and creates a symbol
const char this_pmd_name0[] __attribute__((used)) = "ena";

which pmdinfogen can search for and extract.  The subsequent macro

DRIVER_REGISTER_PCI_TABLE(ena, ena_pci_id_map);

creates a symbol const char ena_pci_tbl_export[] __attribute__((used)) =
"ena_pci_id_map";

Which allows pmdinfogen to find the pci table of this driver

Using this pattern, we can export arbitrary bits of information.

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>
Acked-by: Panu Matilainen <pmatilai@redhat.com>
Acked-by: Remy Horton <remy.horton@intel.com>
This commit is contained in:
Neil Horman 2016-06-17 14:46:21 -04:00 committed by Thomas Monjalon
parent 98b0fdb0ff
commit cb6696d220
36 changed files with 113 additions and 45 deletions

View File

@ -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

View File

@ -521,4 +521,6 @@ static struct rte_driver aesni_gcm_pmd_drv = {
.uninit = aesni_gcm_uninit
};
PMD_REGISTER_DRIVER(aesni_gcm_pmd_drv);
PMD_REGISTER_DRIVER(aesni_gcm_pmd_drv, aesni_gcm);
DRIVER_REGISTER_PARAM_STRING(aesni_gcm, "max_nb_queue_pairs=<int> "
"max_nb_sessions=<int> socket_id=<int>");

View File

@ -721,4 +721,6 @@ 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(cryptodev_aesni_mb_pmd_drvi, aesni_mb);
DRIVER_REGISTER_PARAM_STRING(aesni_gcm, "max_nb_queue_pairs=<int> "
"max_nb_sessions=<int> socket_id=<int>");

View File

@ -654,4 +654,6 @@ static struct rte_driver cryptodev_kasumi_pmd_drv = {
.uninit = cryptodev_kasumi_uninit
};
PMD_REGISTER_DRIVER(cryptodev_kasumi_pmd_drv);
PMD_REGISTER_DRIVER(cryptodev_kasumi_pmd_drv, kasumi);
DRIVER_REGISTER_PARAM_STRING(kasumi, "max_nb_queue_pairs=<int> "
"max_nb_sessions=<int> socket_id=<int>");

View File

@ -275,4 +275,6 @@ static struct rte_driver cryptodev_null_pmd_drv = {
.uninit = cryptodev_null_uninit
};
PMD_REGISTER_DRIVER(cryptodev_null_pmd_drv);
PMD_REGISTER_DRIVER(cryptodev_null_pmd_drv, cryptodev_null_pmd);
DRIVER_REGISTER_PARAM_STRING(aesni_gcm, "max_nb_queue_pairs=<int> "
"max_nb_sessions=<int> socket_id=<int>");

View File

@ -134,4 +134,6 @@ static struct rte_driver pmd_qat_drv = {
.init = rte_qat_pmd_init,
};
PMD_REGISTER_DRIVER(pmd_qat_drv);
PMD_REGISTER_DRIVER(pmd_qat_drv, qat);
DRIVER_REGISTER_PCI_TABLE(qat, pci_id_qat_map);

View File

@ -645,4 +645,6 @@ static struct rte_driver cryptodev_snow3g_pmd_drv = {
.uninit = cryptodev_snow3g_uninit
};
PMD_REGISTER_DRIVER(cryptodev_snow3g_pmd_drv);
PMD_REGISTER_DRIVER(cryptodev_snow3g_pmd_drv, snow3g);
DRIVER_REGISTER_PARAM_STRING(aesni_gcm, "max_nb_queue_pairs=<int> "
"max_nb_sessions=<int> socket_id=<int>");

View File

@ -896,4 +896,6 @@ static struct rte_driver pmd_af_packet_drv = {
.uninit = rte_pmd_af_packet_devuninit,
};
PMD_REGISTER_DRIVER(pmd_af_packet_drv);
PMD_REGISTER_DRIVER(pmd_af_packet_drv, eth_af_packet);
DRIVER_REGISTER_PARAM_STRING(eth_af_packet, "iface=<string> "
"qpairs=<int> blocksz=<int> framesz=<int> framecnt=<int>");

View File

@ -566,5 +566,7 @@ 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(rte_bnx2x_driver, bnx2x);
DRIVER_REGISTER_PCI_TABLE(bnx2x, pci_id_bnx2x_map);
PMD_REGISTER_DRIVER(rte_bnx2xvf_driver, bnx2xvf);
DRIVER_REGISTER_PCI_TABLE(bnx2xvf, pci_id_bnx2xvf_map);

View File

@ -1046,4 +1046,5 @@ static struct rte_driver bnxt_pmd_drv = {
.init = bnxt_rte_pmd_init,
};
PMD_REGISTER_DRIVER(bnxt_pmd_drv);
PMD_REGISTER_DRIVER(bnxt_pmd_drv, bnxt);
DRIVER_REGISTER_PCI_TABLE(bnxt, bnxt_pci_id_map);

View File

@ -2515,4 +2515,9 @@ static struct rte_driver bond_drv = {
.uninit = bond_uninit,
};
PMD_REGISTER_DRIVER(bond_drv);
PMD_REGISTER_DRIVER(bond_drv, bonding);
DRIVER_REGISTER_PARAM_STRING(bonding, "slave=<ifc> primary=<ifc> mode=[0-4] "
"xmit_policy=[l2 | l23 | l34] socket_id=<int> mac=<mac addr> "
"lsc_poll_period_ms=<int> up_delay=<int> down_delay=<int>");

View File

@ -1061,4 +1061,6 @@ static struct rte_driver rte_cxgbe_driver = {
.init = rte_cxgbe_pmd_init,
};
PMD_REGISTER_DRIVER(rte_cxgbe_driver);
PMD_REGISTER_DRIVER(rte_cxgbe_driver, cxgb4);
DRIVER_REGISTER_PCI_TABLE(cxgb4, cxgb4_pci_tbl);

View File

@ -1777,4 +1777,5 @@ struct rte_driver em_pmd_drv = {
.init = rte_em_pmd_init,
};
PMD_REGISTER_DRIVER(em_pmd_drv);
PMD_REGISTER_DRIVER(em_pmd_drv, em);
DRIVER_REGISTER_PCI_TABLE(em, pci_id_em_map);

View File

@ -5210,5 +5210,7 @@ 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(pmd_igb_drv, igb);
DRIVER_REGISTER_PCI_TABLE(igb, pci_id_igb_map);
PMD_REGISTER_DRIVER(pmd_igbvf_drv, igbvf);
DRIVER_REGISTER_PCI_TABLE(igbvf, pci_id_igbvf_map);

View File

@ -1450,4 +1450,5 @@ struct rte_driver ena_pmd_drv = {
.init = rte_ena_pmd_init,
};
PMD_REGISTER_DRIVER(ena_pmd_drv);
PMD_REGISTER_DRIVER(ena_pmd_drv, ena);
DRIVER_REGISTER_PCI_TABLE(ena, pci_id_ena_map);

View File

@ -636,4 +636,5 @@ static struct rte_driver rte_enic_driver = {
.init = rte_enic_pmd_init,
};
PMD_REGISTER_DRIVER(rte_enic_driver);
PMD_REGISTER_DRIVER(rte_enic_driver, enic);
DRIVER_REGISTER_PCI_TABLE(enic, pci_id_enic_map);

View File

@ -3086,4 +3086,5 @@ static struct rte_driver rte_fm10k_driver = {
.init = rte_pmd_fm10k_init,
};
PMD_REGISTER_DRIVER(rte_fm10k_driver);
PMD_REGISTER_DRIVER(rte_fm10k_driver, fm10k);
DRIVER_REGISTER_PCI_TABLE(fm10k, pci_id_fm10k_map);

View File

@ -705,7 +705,8 @@ static struct rte_driver rte_i40e_driver = {
.init = rte_i40e_pmd_init,
};
PMD_REGISTER_DRIVER(rte_i40e_driver);
PMD_REGISTER_DRIVER(rte_i40e_driver, i40e);
DRIVER_REGISTER_PCI_TABLE(i40e, pci_id_i40e_map);
/*
* Initialize registers for flexible payload, which should be set by NVM.

View File

@ -1581,7 +1581,8 @@ static struct rte_driver rte_i40evf_driver = {
.init = rte_i40evf_pmd_init,
};
PMD_REGISTER_DRIVER(rte_i40evf_driver);
PMD_REGISTER_DRIVER(rte_i40evf_driver, i40evf);
DRIVER_REGISTER_PCI_TABLE(i40evf, pci_id_i40evf_map);
static int
i40evf_dev_configure(struct rte_eth_dev *dev)

View File

@ -7352,5 +7352,7 @@ 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(rte_ixgbe_driver, ixgbe);
DRIVER_REGISTER_PCI_TABLE(ixgbe, pci_id_ixgbe_map);
PMD_REGISTER_DRIVER(rte_ixgbevf_driver, ixgbevf);
DRIVER_REGISTER_PCI_TABLE(ixgbevf, pci_id_ixgbevf_map);

View File

@ -5861,4 +5861,5 @@ static struct rte_driver rte_mlx4_driver = {
.init = rte_mlx4_pmd_init,
};
PMD_REGISTER_DRIVER(rte_mlx4_driver)
PMD_REGISTER_DRIVER(rte_mlx4_driveri, mlx4)
DRIVER_REGISTER_PCI_TABLE(mlx4, mlx4_pci_id_map);

View File

@ -762,4 +762,5 @@ static struct rte_driver rte_mlx5_driver = {
.init = rte_mlx5_pmd_init,
};
PMD_REGISTER_DRIVER(rte_mlx5_driver)
PMD_REGISTER_DRIVER(rte_mlx5_driveri, mlx5)
DRIVER_REGISTER_PCI_TABLE(mlx5, mlx5_pci_id_map);

View File

@ -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(pmd_mpipe_xgbe_drv, mpipe_xgbe);
PMD_REGISTER_DRIVER(pmd_mpipe_gbe_drv, mpipe_gbe);
static void __attribute__((constructor, used))
mpipe_init_contexts(void)

View File

@ -2486,7 +2486,8 @@ static struct rte_driver rte_nfp_net_driver = {
.init = nfp_net_pmd_init,
};
PMD_REGISTER_DRIVER(rte_nfp_net_driver);
PMD_REGISTER_DRIVER(rte_nfp_net_driver, nfp);
DRIVER_REGISTER_PCI_TABLE(nfp, pci_id_nfp_net_map);
/*
* Local variables:

View File

@ -693,4 +693,5 @@ static struct rte_driver pmd_null_drv = {
.uninit = rte_pmd_null_devuninit,
};
PMD_REGISTER_DRIVER(pmd_null_drv);
PMD_REGISTER_DRIVER(pmd_null_drv, eth_null);
DRIVER_REGISTER_PARAM_STRING(eth_null, "size=<int> copy=<int>");

View File

@ -1090,4 +1090,6 @@ static struct rte_driver pmd_pcap_drv = {
.uninit = rte_pmd_pcap_devuninit,
};
PMD_REGISTER_DRIVER(pmd_pcap_drv);
PMD_REGISTER_DRIVER(pmd_pcap_drv, pcap);
DRIVER_REGISTER_PARAM_STRING(pcap, "rx_pcap=<string> tx_pcap=<string> "
"rx_iface=<ifc> tx_iface=<ifc> iface=<ifc>");

View File

@ -1340,5 +1340,7 @@ static struct rte_driver rte_qede_driver = {
.init = rte_qedevf_pmd_init
};
PMD_REGISTER_DRIVER(rte_qede_driver);
PMD_REGISTER_DRIVER(rte_qedevf_driver);
PMD_REGISTER_DRIVER(rte_qede_driver, qede);
DRIVER_REGISTER_PCI_TABLE(qede, pci_id_qede_map);
PMD_REGISTER_DRIVER(rte_qedevf_driver, qedevf);
DRIVER_REGISTER_PCI_TABLE(qedevf, pci_id_qedevf_map);

View File

@ -630,4 +630,5 @@ static struct rte_driver pmd_ring_drv = {
.uninit = rte_pmd_ring_devuninit,
};
PMD_REGISTER_DRIVER(pmd_ring_drv);
PMD_REGISTER_DRIVER(pmd_ring_drv, eth_ring);
DRIVER_REGISTER_PARAM_STRING(eth_ring, "nodeaction=[attach|detach]");

View File

@ -1601,4 +1601,5 @@ static struct rte_driver rte_szedata2_driver = {
.uninit = rte_szedata2_uninit,
};
PMD_REGISTER_DRIVER(rte_szedata2_driver);
PMD_REGISTER_DRIVER(rte_szedata2_driver, rte_szedata2_pmd);
DRIVER_REGISTER_PCI_TABLE(rte_szedata2_pmd, rte_szedata2_pci_id_table);

View File

@ -1788,4 +1788,5 @@ static struct rte_driver rte_nicvf_driver = {
.init = rte_nicvf_pmd_init,
};
PMD_REGISTER_DRIVER(rte_nicvf_driver);
PMD_REGISTER_DRIVER(rte_nicvf_driver, thunderx_nicvf);
DRIVER_REGISTER_PCI_TABLE(thunderx_nicvf, pci_id_nicvf_map);

View File

@ -921,4 +921,5 @@ static struct rte_driver pmd_vhost_drv = {
.uninit = rte_pmd_vhost_devuninit,
};
PMD_REGISTER_DRIVER(pmd_vhost_drv);
PMD_REGISTER_DRIVER(pmd_vhost_drv, eth_vhost);
DRIVER_REGISTER_PARAM_STRING(eth_vhost, "iface=<ifc> queues=<int>");

View File

@ -1571,4 +1571,5 @@ static struct rte_driver rte_virtio_driver = {
.init = rte_virtio_pmd_init,
};
PMD_REGISTER_DRIVER(rte_virtio_driver);
PMD_REGISTER_DRIVER(rte_virtio_driver, virtio_net);
DRIVER_REGISTER_PCI_TABLE(virtio_net, pci_id_virtio_map);

View File

@ -437,4 +437,4 @@ static struct rte_driver virtio_user_driver = {
.uninit = virtio_user_pmd_devuninit,
};
PMD_REGISTER_DRIVER(virtio_user_driver);
PMD_REGISTER_DRIVER(virtio_user_driver, virtio_user);

View File

@ -954,4 +954,5 @@ static struct rte_driver rte_vmxnet3_driver = {
.init = rte_vmxnet3_pmd_init,
};
PMD_REGISTER_DRIVER(rte_vmxnet3_driver);
PMD_REGISTER_DRIVER(rte_vmxnet3_driver, vmxnet3);
DRIVER_REGISTER_PCI_TABLE(vmxnet3, pci_id_vmxnet3_map);

View File

@ -766,4 +766,4 @@ static struct rte_driver pmd_xenvirt_drv = {
.uninit = rte_pmd_xenvirt_devuninit,
};
PMD_REGISTER_DRIVER(pmd_xenvirt_drv);
PMD_REGISTER_DRIVER(pmd_xenvirt_drv, xenvirt);

View File

@ -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,30 @@ int rte_eal_vdev_init(const char *name, const char *args);
*/
int rte_eal_vdev_uninit(const char *name);
#define PMD_REGISTER_DRIVER(d)\
void devinitfn_ ##d(void);\
void __attribute__((constructor, used)) devinitfn_ ##d(void)\
#define DRIVER_EXPORT_NAME_ARRAY(n, idx) n##idx[]
#define DRIVER_EXPORT_NAME(name, idx) \
static const char DRIVER_EXPORT_NAME_ARRAY(this_pmd_name, idx) \
__attribute__((used)) = RTE_STR(name)
#define PMD_REGISTER_DRIVER(drv, nm)\
void devinitfn_ ##drv(void);\
void __attribute__((constructor, used)) devinitfn_ ##drv(void)\
{\
rte_eal_driver_register(&d);\
}
(drv).name = RTE_STR(nm);\
rte_eal_driver_register(&drv);\
} \
DRIVER_EXPORT_NAME(nm, __COUNTER__)
#define DRV_EXP_TAG(name, tag) __##name##_##tag
#define DRIVER_REGISTER_PCI_TABLE(name, table) \
static const char DRV_EXP_TAG(name, pci_tbl_export)[] __attribute__((used)) = \
RTE_STR(table)
#define DRIVER_REGISTER_PARAM_STRING(name, str) \
static const char DRV_EXP_TAG(name, param_string_export)[] \
__attribute__((used)) = str
#ifdef __cplusplus
}