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
next prev parent 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).