[dpdk-dev] [RFC PATCH 1/6] librte_ether: add fields from rte_pci_driver to rte_eth_dev and rte_eth_dev_data.
Bernard Iremonger
bernard.iremonger at intel.com
Thu Aug 27 17:40:36 CEST 2015
add dev_flags to rte_eth_dev, add macros for dev_flags.
add numa_node to rte_eth_dev_data.
use dev_type to distinguish between vdev's and pdev's.
remove unused RTE_ETH_DEV_MAX.
Signed-off-by: Bernard Iremonger <bernard.iremonger at intel.com>
---
lib/librte_ether/rte_ethdev.c | 19 +++++++++++++++----
lib/librte_ether/rte_ethdev.h | 8 +++++++-
2 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 6b2400c..64e5a20 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -260,6 +260,7 @@ rte_eth_dev_allocate(const char *name, enum rte_eth_dev_type type)
eth_dev->data->port_id = port_id;
eth_dev->attached = DEV_ATTACHED;
eth_dev->dev_type = type;
+ eth_dev->dev_flags = 0;
nb_ports++;
return eth_dev;
}
@@ -424,7 +425,10 @@ rte_eth_dev_socket_id(uint8_t port_id)
{
if (!rte_eth_dev_is_valid_port(port_id))
return -1;
- return rte_eth_devices[port_id].pci_dev->numa_node;
+ if (rte_eth_devices[port_id].dev_type == RTE_ETH_DEV_PCI)
+ return rte_eth_devices[port_id].pci_dev->numa_node;
+ else
+ return rte_eth_devices[port_id].data->numa_node;
}
uint8_t
@@ -504,6 +508,7 @@ static int
rte_eth_dev_is_detachable(uint8_t port_id)
{
uint32_t drv_flags;
+ uint32_t dev_flags;
if (!rte_eth_dev_is_valid_port(port_id)) {
PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
@@ -520,10 +525,14 @@ rte_eth_dev_is_detachable(uint8_t port_id)
default:
return -ENOTSUP;
}
+ drv_flags = rte_eth_devices[port_id].driver->pci_drv.drv_flags;
+ return !(drv_flags & RTE_PCI_DRV_DETACHABLE);
+ } else if (rte_eth_devices[port_id].dev_type == RTE_ETH_DEV_VIRTUAL) {
+ dev_flags = rte_eth_devices[port_id].dev_flags;
+ return !(dev_flags & RTE_ETH_DEV_DETACHABLE);
}
- drv_flags = rte_eth_devices[port_id].driver->pci_drv.drv_flags;
- return !(drv_flags & RTE_PCI_DRV_DETACHABLE);
+ return -ENOTSUP;
}
/* attach the new physical device, then store port_id of the device */
@@ -1795,8 +1804,10 @@ rte_eth_dev_info_get(uint8_t port_id, struct rte_eth_dev_info *dev_info)
FUNC_PTR_OR_RET(*dev->dev_ops->dev_infos_get);
(*dev->dev_ops->dev_infos_get)(dev, dev_info);
dev_info->pci_dev = dev->pci_dev;
- if (dev->driver)
+ if (dev->dev_type == RTE_ETH_DEV_PCI)
dev_info->driver_name = dev->driver->pci_drv.name;
+ else
+ dev_info->driver_name = dev->data->name;
}
void
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 544afe0..a0a648f 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1553,7 +1553,6 @@ enum rte_eth_dev_type {
RTE_ETH_DEV_PCI,
/**< Physical function and Virtual function of PCI devices */
RTE_ETH_DEV_VIRTUAL, /**< non hardware device */
- RTE_ETH_DEV_MAX /**< max value of this enum */
};
/**
@@ -1587,8 +1586,14 @@ struct rte_eth_dev {
struct rte_eth_rxtx_callback *pre_tx_burst_cbs[RTE_MAX_QUEUES_PER_PORT];
uint8_t attached; /**< Flag indicating the port is attached */
enum rte_eth_dev_type dev_type; /**< Flag indicating the device type */
+ uint32_t dev_flags; /**< Flags controlling handling of device. */
};
+/** Device supports link state interrupt */
+#define RTE_ETH_DEV_INTR_LSC 0x0008
+/** Device supports detaching capability */
+#define RTE_ETH_DEV_DETACHABLE 0x0010
+
struct rte_eth_dev_sriov {
uint8_t active; /**< SRIOV is active with 16, 32 or 64 pools */
uint8_t nb_q_per_pool; /**< rx queue number per pool */
@@ -1639,6 +1644,7 @@ struct rte_eth_dev_data {
all_multicast : 1, /**< RX all multicast mode ON(1) / OFF(0). */
dev_started : 1, /**< Device state: STARTED(1) / STOPPED(0). */
lro : 1; /**< RX LRO is ON(1) / OFF(0) */
+ int numa_node;
};
/**
--
1.9.1
More information about the dev
mailing list