From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D1369A034F; Tue, 23 Mar 2021 03:20:37 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9BF0C140DE0; Tue, 23 Mar 2021 03:20:20 +0100 (CET) Received: from smtpproxy21.qq.com (smtpbg704.qq.com [203.205.195.105]) by mails.dpdk.org (Postfix) with ESMTP id 39FF3140DAA for ; Tue, 23 Mar 2021 03:20:16 +0100 (CET) X-QQ-mid: bizesmtp21t1616466011t8796bdq Received: from jiawenwu.trustnetic.com (unknown [183.129.236.74]) by esmtp6.qq.com (ESMTP) with id ; Tue, 23 Mar 2021 10:20:10 +0800 (CST) X-QQ-SSF: 01400000000000C0E000B00A0000000 X-QQ-FEAT: O1dS0B2KltXQRHkZeyUpL8aiBPINoTMARhDpaKyR4dvAjBFDXtTYFjdsvMfF8 /1K8XnUeMB2LgROgxBrt1SI/AhcFE4O9B2IY0vvxiKfdyTa/S9ueCbHGcvZeJzg3nSCSUZS VSb3ZbXhfUx6sK+vvdAo8bElDpYs83wghUY2Q1P0hTZpDLVwFaRrqaMa6X40yr7+XE1g7Cm 1PxQ+alia3/9IP00iBEUvD0b0NWuy/4Vb2dJDwv/7yZUgXzTQioZNxDYtrR6E4E/nmwGMOP 8GeeH7rZhZxioCfGbtq3vtyIDhFaFWrpTTUMIrJxiJjFxw1m4f4jWCKFU91T9ksYYJ/mHbe KNkYZOJ3BI8RX8wdKQ= X-QQ-GoodBg: 2 From: Jiawen Wu To: dev@dpdk.org Cc: Jiawen Wu Date: Tue, 23 Mar 2021 10:19:58 +0800 Message-Id: <20210323022001.352-4-jiawenwu@trustnetic.com> X-Mailer: git-send-email 2.21.0.windows.1 In-Reply-To: <20210323022001.352-1-jiawenwu@trustnetic.com> References: <20210323022001.352-1-jiawenwu@trustnetic.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:trustnetic.com:qybgforeign:qybgforeign7 X-QQ-Bgrelay: 1 Subject: [dpdk-dev] [PATCH v3 3/6] net/ngbe: support probe and remove X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add basic PCIe ethdev probe and remove. Signed-off-by: Jiawen Wu --- doc/guides/nics/features/ngbe.ini | 1 + drivers/net/ngbe/ngbe_ethdev.c | 77 +++++++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 3 deletions(-) diff --git a/doc/guides/nics/features/ngbe.ini b/doc/guides/nics/features/ngbe.ini index a7a524def..977286ac0 100644 --- a/doc/guides/nics/features/ngbe.ini +++ b/doc/guides/nics/features/ngbe.ini @@ -4,6 +4,7 @@ ; Refer to default.ini for the full list of available PMD features. ; [Features] +Multiprocess aware = Y Linux = Y ARMv8 = Y x86-32 = Y diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c index da951b6ef..d938fd68a 100644 --- a/drivers/net/ngbe/ngbe_ethdev.c +++ b/drivers/net/ngbe/ngbe_ethdev.c @@ -1,10 +1,12 @@ - /* SPDX-License-Identifier: BSD-3-Clause - * Copyright(c) 2018-2020 - */ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018-2020 + */ +#include #include #include +#include "ngbe_ethdev.h" /* * The set of PCI devices this driver supports @@ -25,10 +27,79 @@ static const struct rte_pci_id pci_id_ngbe_map[] = { { .vendor_id = 0, /* sentinel */ }, }; +static int +eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused) +{ + struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + rte_eth_copy_pci_info(eth_dev, pci_dev); + + return 0; +} + +static int +eth_ngbe_dev_uninit(struct rte_eth_dev *eth_dev) +{ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + RTE_SET_USED(eth_dev); + + return 0; +} + +static int +eth_ngbe_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, + struct rte_pci_device *pci_dev) +{ + struct rte_eth_dev *pf_ethdev; + struct rte_eth_devargs eth_da; + int retval; + + if (pci_dev->device.devargs) { + retval = rte_eth_devargs_parse(pci_dev->device.devargs->args, + ð_da); + if (retval) + return retval; + } else { + memset(ð_da, 0, sizeof(eth_da)); + } + + retval = rte_eth_dev_create(&pci_dev->device, pci_dev->device.name, + sizeof(struct ngbe_adapter), + eth_dev_pci_specific_init, pci_dev, + eth_ngbe_dev_init, NULL); + + if (retval || eth_da.nb_representor_ports < 1) + return retval; + + pf_ethdev = rte_eth_dev_allocated(pci_dev->device.name); + if (pf_ethdev == NULL) + return -ENODEV; + + return 0; +} + +static int eth_ngbe_pci_remove(struct rte_pci_device *pci_dev) +{ + struct rte_eth_dev *ethdev; + + ethdev = rte_eth_dev_allocated(pci_dev->device.name); + if (!ethdev) + return -ENODEV; + + return rte_eth_dev_destroy(ethdev, eth_ngbe_dev_uninit); +} + static struct rte_pci_driver rte_ngbe_pmd = { .id_table = pci_id_ngbe_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, + .probe = eth_ngbe_pci_probe, + .remove = eth_ngbe_pci_remove, }; RTE_PMD_REGISTER_PCI(net_ngbe, rte_ngbe_pmd); -- 2.21.0.windows.1