ethdev: add an argument to internal callback function
[dpdk.git] / lib / librte_ether / rte_ethdev.c
index cc2f921..0d9d9c1 100644 (file)
@@ -274,8 +274,8 @@ rte_eth_dev_pci_probe(struct rte_pci_driver *pci_drv,
        if (diag == 0)
                return 0;
 
-       RTE_PMD_DEBUG_TRACE("driver %s: eth_dev_init(vendor_id=0x%u device_id=0x%x) failed\n",
-                       pci_drv->name,
+       RTE_PMD_DEBUG_TRACE("driver %s: eth_dev_init(vendor_id=0x%x device_id=0x%x) failed\n",
+                       pci_drv->driver.name,
                        (unsigned) pci_dev->id.vendor_id,
                        (unsigned) pci_dev->id.device_id);
        if (rte_eal_process_type() == RTE_PROC_PRIMARY)
@@ -421,7 +421,7 @@ int
 rte_eth_dev_attach(const char *devargs, uint8_t *port_id)
 {
        int ret = -1;
-       int current = eth_dev_last_created_port;
+       int current = rte_eth_dev_count();
        char *name = NULL;
        char *args = NULL;
 
@@ -438,9 +438,9 @@ rte_eth_dev_attach(const char *devargs, uint8_t *port_id)
        if (ret < 0)
                goto err;
 
-       /* no point looking at eth_dev_last_created_port if no port exists */
-       if (!nb_ports) {
-               RTE_LOG(ERR, EAL, "No ports found for device (%s)\n", name);
+       /* no point looking at the port count if no port exists */
+       if (!rte_eth_dev_count()) {
+               RTE_LOG(ERR, EAL, "No port found for device (%s)\n", name);
                ret = -1;
                goto err;
        }
@@ -448,7 +448,7 @@ rte_eth_dev_attach(const char *devargs, uint8_t *port_id)
        /* if nothing happened, there is a bug here, since some driver told us
         * it did attach a device, but did not create a port.
         */
-       if (current == eth_dev_last_created_port) {
+       if (current == rte_eth_dev_count()) {
                ret = -1;
                goto err;
        }
@@ -2508,7 +2508,7 @@ rte_eth_dev_callback_unregister(uint8_t port_id,
 
 void
 _rte_eth_dev_callback_process(struct rte_eth_dev *dev,
-       enum rte_eth_event_type event)
+       enum rte_eth_event_type event, void *cb_arg)
 {
        struct rte_eth_dev_callback *cb_lst;
        struct rte_eth_dev_callback dev_cb;
@@ -2519,6 +2519,9 @@ _rte_eth_dev_callback_process(struct rte_eth_dev *dev,
                        continue;
                dev_cb = *cb_lst;
                cb_lst->active = 1;
+               if (cb_arg != NULL)
+                       dev_cb.cb_arg = (void *) cb_arg;
+
                rte_spinlock_unlock(&rte_eth_dev_cb_lock);
                dev_cb.cb_fn(dev->data->port_id, dev_cb.event,
                                                dev_cb.cb_arg);
@@ -2568,7 +2571,7 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name,
        const struct rte_memzone *mz;
 
        snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d",
-                dev->driver->pci_drv.name, ring_name,
+                dev->driver->pci_drv.driver.name, ring_name,
                 dev->data->port_id, queue_id);
 
        mz = rte_memzone_lookup(z_name);
@@ -3209,8 +3212,8 @@ rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev, struct rte_pci_device *pci_de
                eth_dev->data->dev_flags |= RTE_ETH_DEV_DETACHABLE;
 
        eth_dev->data->kdrv = pci_dev->kdrv;
-       eth_dev->data->numa_node = pci_dev->numa_node;
-       eth_dev->data->drv_name = pci_dev->driver->name;
+       eth_dev->data->numa_node = pci_dev->device.numa_node;
+       eth_dev->data->drv_name = pci_dev->driver->driver.name;
 }
 
 int