From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from wes1-so2.wedos.net (wes1-so2.wedos.net [46.28.106.16]) by dpdk.org (Postfix) with ESMTP id 3A8F391E9 for ; Mon, 4 Jan 2016 21:09:52 +0100 (CET) Received: from pcviktorin.fit.vutbr.cz (pcviktorin.fit.vutbr.cz [147.229.13.147]) by wes1-so2.wedos.net (Postfix) with ESMTPSA id 3pZ7NJ0ZmXzs4; Mon, 4 Jan 2016 21:09:52 +0100 (CET) From: Jan Viktorin To: dev@dpdk.org Date: Mon, 4 Jan 2016 21:08:26 +0100 Message-Id: <1451938106-12145-15-git-send-email-viktorin@rehivetech.com> X-Mailer: git-send-email 2.6.3 In-Reply-To: <1451938106-12145-1-git-send-email-viktorin@rehivetech.com> References: <1451938106-12145-1-git-send-email-viktorin@rehivetech.com> Cc: Jan Viktorin Subject: [dpdk-dev] [PATCH 14/14] lib/ether: introduce rte_eth_copy_dev_info X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Jan 2016 20:09:52 -0000 This function should be preferred over the rte_eth_copy_pci_info as it is not PCI-specific. Signed-off-by: Jan Viktorin --- lib/librte_ether/rte_ethdev.c | 38 ++++++++++++++++++++++++++++++++++++++ lib/librte_ether/rte_ethdev.h | 15 +++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index 75121bc..6d58544 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -3309,3 +3309,41 @@ rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev, struct rte_pci_device *pci_de eth_dev->data->numa_node = pci_dev->numa_node; eth_dev->data->drv_name = pci_dev->driver->name; } + +void +rte_eth_copy_dev_info(struct rte_eth_dev *eth_dev, const union rte_device *dev) +{ + unsigned int drv_flags; + + if (eth_dev == NULL || dev == NULL) { + RTE_PMD_DEBUG_TRACE("NULL pointer eth_dev=%p dev=%p\n", + eth_dev, dev); + return; + } + + if (eth_dev->dev->magic != dev->magic) { + rte_panic("%s() incompatible magic set: %08x != %08x\n", + __func__, eth_dev->dev->magic, dev->magic); + return; + } + + eth_dev->data->dev_flags = 0; + + switch (eth_dev->dev->magic) { + case RTE_PCI_DEVICE_MAGIC: + drv_flags = dev->pci.driver->drv_flags; + if (drv_flags & RTE_PCI_DRV_INTR_LSC) + eth_dev->data->dev_flags |= RTE_PCI_DRV_INTR_LSC; + if (drv_flags & RTE_PCI_DRV_DETACHABLE) + eth_dev->data->dev_flags |= RTE_PCI_DRV_DETACHABLE; + + eth_dev->data->kdrv = dev->pci.kdrv; + eth_dev->data->numa_node = dev->pci.numa_node; + eth_dev->data->drv_name = dev->pci.driver->name; + break; + default: + rte_panic("%s() unrecognized dev magic: %08x\n", + __func__, dev->magic); + break; + } +} diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 5dd2e1a..020c0f7 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -3864,6 +3864,21 @@ extern int rte_eth_timesync_write_time(uint8_t port_id, */ extern void rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev, struct rte_pci_device *pci_dev); +/** + * Copy device info to the Ethernet device data. The target eth_dev must be + * compatible with the given device (from the same infrastructure - eg. PCI). + * + * @param eth_dev + * The *eth_dev* pointer is the address of the *rte_eth_dev* structure. + * @param pci_dev + * The *dev* pointer is the address of the *rte_device* union. + * + * @return + * - 0 on success, negative on error + */ +extern void rte_eth_copy_dev_info(struct rte_eth_dev *eth_dev, + const union rte_device *dev); + /** * Create memzone for HW rings. -- 2.6.3