[dpdk-dev,RFC,v2,07/28] ethdev: Add functions to know which port is attached or detached
Commit Message
The patch adds rte_eth_dev_save() and rte_eth_dev_get_changed_port().
rte_eth_dev_save() is used for saving current rte_eth_dev structures.
rte_eth_dev_get_changed_port() receives the rte_eth_dev structures, then
compare these with current values to know which port is actually
attached or detached.
Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
---
lib/librte_ether/rte_ethdev.c | 18 ++++++++++++++++++
lib/librte_ether/rte_ethdev.h | 21 +++++++++++++++++++++
2 files changed, 39 insertions(+)
@@ -391,6 +391,24 @@ rte_eth_dev_count(void)
return (nb_ports);
}
+void
+rte_eth_dev_save(struct rte_eth_dev *devs)
+{
+ /* save current rte_eth_devices */
+ memcpy(devs, rte_eth_devices,
+ sizeof(struct rte_eth_dev) * RTE_MAX_ETHPORTS);
+}
+
+int
+rte_eth_dev_get_changed_port(struct rte_eth_dev *devs, uint8_t *port_id)
+{
+ /* check which port was attached or detached */
+ for (*port_id = 0; *port_id < RTE_MAX_ETHPORTS; (*port_id)++, devs++)
+ if (rte_eth_devices[*port_id].attached ^ devs->attached)
+ return 0;
+ return 1;
+}
+
static int
rte_eth_dev_rx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)
{
@@ -1618,6 +1618,27 @@ extern struct rte_eth_dev rte_eth_devices[];
extern uint8_t rte_eth_dev_count(void);
/**
+ * Function for internal use by port hotplug functions.
+ * Copies current ethdev structures to the specified pointer.
+ *
+ * @param devs The pointer to the ethdev structures
+ */
+extern void rte_eth_dev_save(struct rte_eth_dev *devs);
+
+/**
+ * Function for internal use by port hotplug functions.
+ * Compare the specified ethdev structures with currrents. Then
+ * if there is a port which status is changed, fill the specified pointer
+ * with the port id of that port.
+ * @param devs The pointer to the ethdev structures
+ * @param port_id The pointer to the port id
+ * @return
+ * - 0 on success, negative on error
+ */
+extern int rte_eth_dev_get_changed_port(
+ struct rte_eth_dev *devs, uint8_t *port_id);
+
+/**
* Function for internal use by dummy drivers primarily, e.g. ring-based
* driver.
* Allocates a new ethdev slot for an ethernet device and returns the pointer