DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] ethdev: The users could get device types now
@ 2014-09-28  3:27 Ding Heng
  2014-09-28  3:50 ` Zhang, Helin
  2014-09-28 12:36 ` Neil Horman
  0 siblings, 2 replies; 4+ messages in thread
From: Ding Heng @ 2014-09-28  3:27 UTC (permalink / raw)
  To: dev

As different PMDs support different features, application may want
to know the NIC type of a port, then decide how to use that port.
Add a new field in struct rte_eth_dev, users are able to get
device type now.

Signed-off-by: Ding Heng <hengx.ding@intel.com>
---
 lib/librte_ether/rte_ethdev.c | 32 ++++++++++++++++++++++++++++++++
 lib/librte_ether/rte_ethdev.h | 20 ++++++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index fd1010a..490ea3a 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -235,6 +235,38 @@ rte_eth_dev_init(struct rte_pci_driver *pci_drv,
 	if (diag == 0)
 		return (0);
 
+	/* Define the device type */
+	if (strcmp(eth_drv->pci_drv.name, "rte_i40e_pmd") == 0)
+		eth_dev->dev_type = ETH_DEV_I40E;
+	else if (strcmp(eth_drv->pci_drv.name, "rte_i40evf_pmd") == 0)
+		eth_dev->dev_type = ETH_DEV_I40E_VF;
+	else if (strcmp(eth_drv->pci_drv.name, "rte_em_pmd") == 0)
+		eth_dev->dev_type = ETH_DEV_EM;
+	else if (strcmp(eth_drv->pci_drv.name, "rte_igb_pmd") == 0)
+		eth_dev->dev_type = ETH_DEV_IGB;
+	else if (strcmp(eth_drv->pci_drv.name, "rte_igbvf_pmd") == 0)
+		eth_dev->dev_type = ETH_DEV_IGB_VF;
+	else if (strcmp(eth_drv->pci_drv.name, "rte_ixgbe_pmd") == 0)
+		eth_dev->dev_type = ETH_DEV_IXGBE;
+	else if (strcmp(eth_drv->pci_drv.name, "rte_ixgbevf_pmd") == 0)
+		eth_dev->dev_type = ETH_DEV_IXGBE_VF;
+	else if (strcmp(eth_drv->pci_drv.name, "eth_bond") == 0)
+		eth_dev->dev_type = ETH_DEV_BOND;
+	else if (strcmp(eth_drv->pci_drv.name, "eth_ring") == 0)
+		eth_dev->dev_type = ETH_DEV_RING;
+	else if (strcmp(eth_drv->pci_drv.name, "rte_virtio_pmd") == 0)
+		eth_dev->dev_type = ETH_DEV_VIRTIO;
+	else if (strcmp(eth_drv->pci_drv.name, "rte_vmxnet3_pmd") == 0)
+		eth_dev->dev_type = ETH_DEV_VMXNET3;
+	else if (strcmp(eth_drv->pci_drv.name, "eth_xenvirt") == 0)
+		eth_dev->dev_type = ETH_DEV_XENVIRT;
+	else if (strcmp(eth_drv->pci_drv.name, "rte_max_pmd") == 0)
+		eth_dev->dev_type = ETH_DEV_MAX;
+	else if (strcmp(eth_drv->pci_drv.name, "eth_pcap") == 0)
+		eth_dev->dev_type = ETH_DEV_PCAP;
+	else
+		eth_dev->dev_type = ETH_DEV_UNKNOWN;
+
 	PMD_DEBUG_TRACE("driver %s: eth_dev_init(vendor_id=0x%u device_id=0x%x)"
 			" failed\n", pci_drv->name,
 			(unsigned) pci_dev->id.vendor_id,
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 50df654..83a7ea5 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -268,6 +268,25 @@ enum rte_eth_rx_mq_mode {
 	ETH_MQ_RX_VMDQ_DCB_RSS, /**< Enable both VMDQ and DCB in VMDq */
 };
 
+/*Device type*/
+enum rte_eth_dev_type {
+	ETH_DEV_UNKNOWN = 0,
+	ETH_DEV_EM,
+	ETH_DEV_IGB,
+	ETH_DEV_IGB_VF,
+	ETH_DEV_IXGBE,
+	ETH_DEV_IXGBE_VF,
+	ETH_DEV_I40E,
+	ETH_DEV_I40E_VF,
+	ETH_DEV_BOND,
+	ETH_DEV_PCAP,
+	ETH_DEV_RING,
+	ETH_DEV_VIRTIO,
+	ETH_DEV_VMXNET3,
+	ETH_DEV_XENVIRT,
+	ETH_DEV_MAX
+};
+
 /**
  * for rx mq mode backward compatible
  */
@@ -1487,6 +1506,7 @@ struct rte_eth_dev {
 	struct eth_dev_ops *dev_ops;    /**< Functions exported by PMD */
 	struct rte_pci_device *pci_dev; /**< PCI info. supplied by probing */
 	struct rte_eth_dev_cb_list callbacks; /**< User application callbacks */
+	enum rte_eth_dev_type dev_type;  /**< Device type info. */
 };
 
 struct rte_eth_dev_sriov {
-- 
1.9.3

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-09-29  2:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-28  3:27 [dpdk-dev] [PATCH] ethdev: The users could get device types now Ding Heng
2014-09-28  3:50 ` Zhang, Helin
2014-09-28 12:36 ` Neil Horman
2014-09-29  3:06   ` Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).