DPDK patches and discussions
 help / color / mirror / Atom feed
From: Jiawen Wu <jiawenwu@trustnetic.com>
To: dev@dpdk.org
Cc: Jiawen Wu <jiawenwu@trustnetic.com>
Subject: [dpdk-dev] [PATCH v3 01/17] net/txgbe: add ethdev probe and remove for VF device
Date: Thu, 25 Feb 2021 16:08:45 +0800	[thread overview]
Message-ID: <20210225080901.3645291-2-jiawenwu@trustnetic.com> (raw)
In-Reply-To: <20210225080901.3645291-1-jiawenwu@trustnetic.com>

Introduce virtual function driver in txgbe PMD,
add simple init and uninit function to probe and remove the device.

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 doc/guides/nics/features/txgbe_vf.ini |  11 +++
 drivers/net/txgbe/meson.build         |   1 +
 drivers/net/txgbe/txgbe_ethdev_vf.c   | 132 ++++++++++++++++++++++++++
 3 files changed, 144 insertions(+)
 create mode 100644 doc/guides/nics/features/txgbe_vf.ini
 create mode 100644 drivers/net/txgbe/txgbe_ethdev_vf.c

diff --git a/doc/guides/nics/features/txgbe_vf.ini b/doc/guides/nics/features/txgbe_vf.ini
new file mode 100644
index 000000000..5035c5eea
--- /dev/null
+++ b/doc/guides/nics/features/txgbe_vf.ini
@@ -0,0 +1,11 @@
+;
+; Supported features of the 'txgbe_vf' network poll mode driver.
+;
+; Refer to default.ini for the full list of available PMD features.
+;
+[Features]
+Multiprocess aware   = Y
+Linux                = Y
+ARMv8                = Y
+x86-32               = Y
+x86-64               = Y
diff --git a/drivers/net/txgbe/meson.build b/drivers/net/txgbe/meson.build
index 60505e211..3b9994aa9 100644
--- a/drivers/net/txgbe/meson.build
+++ b/drivers/net/txgbe/meson.build
@@ -12,6 +12,7 @@ objs = [base_objs]
 
 sources = files(
 	'txgbe_ethdev.c',
+	'txgbe_ethdev_vf.c',
 	'txgbe_fdir.c',
 	'txgbe_flow.c',
 	'txgbe_ipsec.c',
diff --git a/drivers/net/txgbe/txgbe_ethdev_vf.c b/drivers/net/txgbe/txgbe_ethdev_vf.c
new file mode 100644
index 000000000..1c3765e4e
--- /dev/null
+++ b/drivers/net/txgbe/txgbe_ethdev_vf.c
@@ -0,0 +1,132 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2015-2020
+ */
+
+#include <sys/queue.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdint.h>
+#include <string.h>
+#include <rte_log.h>
+#include <ethdev_pci.h>
+
+#include "base/txgbe.h"
+#include "txgbe_ethdev.h"
+#include "txgbe_rxtx.h"
+
+static int txgbevf_dev_close(struct rte_eth_dev *dev);
+
+/*
+ * The set of PCI devices this driver supports (for VF)
+ */
+static const struct rte_pci_id pci_id_txgbevf_map[] = {
+	{ RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_RAPTOR_VF) },
+	{ RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_RAPTOR_VF_HV) },
+	{ .vendor_id = 0, /* sentinel */ },
+};
+
+static const struct eth_dev_ops txgbevf_eth_dev_ops;
+
+/*
+ * Virtual Function device init
+ */
+static int
+eth_txgbevf_dev_init(struct rte_eth_dev *eth_dev)
+{
+	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
+	struct txgbe_hw *hw = TXGBE_DEV_HW(eth_dev);
+	PMD_INIT_FUNC_TRACE();
+
+	eth_dev->dev_ops = &txgbevf_eth_dev_ops;
+
+	/* for secondary processes, we don't initialise any further as primary
+	 * has already done this work. Only check we don't need a different
+	 * RX function
+	 */
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
+		struct txgbe_tx_queue *txq;
+		uint16_t nb_tx_queues = eth_dev->data->nb_tx_queues;
+		/* TX queue function in primary, set by last queue initialized
+		 * Tx queue may not initialized by primary process
+		 */
+		if (eth_dev->data->tx_queues) {
+			txq = eth_dev->data->tx_queues[nb_tx_queues - 1];
+			txgbe_set_tx_function(eth_dev, txq);
+		} else {
+			/* Use default TX function if we get here */
+			PMD_INIT_LOG(NOTICE,
+				     "No TX queues configured yet. Using default TX function.");
+		}
+
+		txgbe_set_rx_function(eth_dev);
+
+		return 0;
+	}
+
+	rte_eth_copy_pci_info(eth_dev, pci_dev);
+
+	hw->device_id = pci_dev->id.device_id;
+	hw->vendor_id = pci_dev->id.vendor_id;
+	hw->subsystem_device_id = pci_dev->id.subsystem_device_id;
+	hw->subsystem_vendor_id = pci_dev->id.subsystem_vendor_id;
+	hw->hw_addr = (void *)pci_dev->mem_resource[0].addr;
+
+	return 0;
+}
+
+/* Virtual Function device uninit */
+static int
+eth_txgbevf_dev_uninit(struct rte_eth_dev *eth_dev)
+{
+	PMD_INIT_FUNC_TRACE();
+
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		return 0;
+
+	txgbevf_dev_close(eth_dev);
+
+	return 0;
+}
+
+static int eth_txgbevf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
+	struct rte_pci_device *pci_dev)
+{
+	return rte_eth_dev_pci_generic_probe(pci_dev,
+		sizeof(struct txgbe_adapter), eth_txgbevf_dev_init);
+}
+
+static int eth_txgbevf_pci_remove(struct rte_pci_device *pci_dev)
+{
+	return rte_eth_dev_pci_generic_remove(pci_dev, eth_txgbevf_dev_uninit);
+}
+
+/*
+ * virtual function driver struct
+ */
+static struct rte_pci_driver rte_txgbevf_pmd = {
+	.id_table = pci_id_txgbevf_map,
+	.drv_flags = RTE_PCI_DRV_NEED_MAPPING,
+	.probe = eth_txgbevf_pci_probe,
+	.remove = eth_txgbevf_pci_remove,
+};
+
+static int
+txgbevf_dev_close(struct rte_eth_dev *dev)
+{
+	PMD_INIT_FUNC_TRACE();
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		return 0;
+
+	return 0;
+}
+
+/*
+ * dev_ops for virtual function, bare necessities for basic vf
+ * operation have been implemented
+ */
+static const struct eth_dev_ops txgbevf_eth_dev_ops = {
+};
+
+RTE_PMD_REGISTER_PCI(net_txgbe_vf, rte_txgbevf_pmd);
+RTE_PMD_REGISTER_PCI_TABLE(net_txgbe_vf, pci_id_txgbevf_map);
+RTE_PMD_REGISTER_KMOD_DEP(net_txgbe_vf, "* igb_uio | vfio-pci");
-- 
2.27.0




  reply	other threads:[~2021-02-25  8:08 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-25  8:08 [dpdk-dev] [PATCH v3 00/17] net/txgbe: add VF driver support Jiawen Wu
2021-02-25  8:08 ` Jiawen Wu [this message]
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 02/17] net/txgbe: add base code for VF driver Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 03/17] net/txgbe: support add and remove VF device MAC address Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 04/17] net/txgbe: get VF device information Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 05/17] net/txgbe: add interrupt operation for VF device Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 06/17] net/txgbe: get link status of " Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 07/17] net/txgbe: add Rx and Tx unit init for " Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 08/17] net/txgbe: add VF device stats and xstats get operation Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 09/17] net/txgbe: add VLAN handle support to VF driver Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 10/17] net/txgbe: add RSS support for VF device Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 11/17] net/txgbe: add VF device promiscuous and allmulticast mode Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 12/17] net/txgbe: support multicast MAC filter for VF driver Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 13/17] net/txgbe: support to update MTU on VF device Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 14/17] net/txgbe: support register dump " Jiawen Wu
2021-02-25  8:08 ` [dpdk-dev] [PATCH v3 15/17] net/txgbe: start and stop " Jiawen Wu
2021-02-25  8:09 ` [dpdk-dev] [PATCH v3 16/17] net/txgbe: add some supports as PF driver implemented Jiawen Wu
2021-02-25  8:09 ` [dpdk-dev] [PATCH v3 17/17] doc: update release note for txgbe Jiawen Wu
2021-02-26 13:27 ` [dpdk-dev] [PATCH v3 00/17] net/txgbe: add VF driver support Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210225080901.3645291-2-jiawenwu@trustnetic.com \
    --to=jiawenwu@trustnetic.com \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).