rte_eal_vdrv_register(struct rte_vdev_driver *driver)
{
TAILQ_INSERT_TAIL(&vdev_driver_list, driver, next);
+ rte_eal_driver_register(&driver->driver);
}
/* unregister a driver */
void
rte_eal_vdrv_unregister(struct rte_vdev_driver *driver)
{
+ rte_eal_driver_unregister(&driver->driver);
TAILQ_REMOVE(&vdev_driver_list, driver, next);
}
return -EINVAL;
TAILQ_FOREACH(driver, &vdev_driver_list, next) {
- if (driver->driver.type != PMD_VDEV)
- continue;
-
/*
* search a driver prefix in virtual device name.
* For example, if the driver is pcap PMD, driver->name
- * will be "eth_pcap", but "name" will be "eth_pcapN".
+ * will be "net_pcap", but "name" will be "net_pcapN".
* So use strncmp to compare.
*/
if (!strncmp(driver->driver.name, name,
strlen(driver->driver.name)))
- return driver->driver.init(name, args);
+ return driver->probe(name, args);
+ }
+
+ /* Give new names precedence over aliases. */
+ TAILQ_FOREACH(driver, &vdev_driver_list, next) {
+ if (driver->driver.alias &&
+ !strncmp(driver->driver.alias, name,
+ strlen(driver->driver.alias)))
+ return driver->probe(name, args);
}
RTE_LOG(ERR, EAL, "no driver found for %s\n", name);
return -EINVAL;
TAILQ_FOREACH(driver, &vdev_driver_list, next) {
- if (driver->driver.type != PMD_VDEV)
- continue;
-
/*
* search a driver prefix in virtual device name.
* For example, if the driver is pcap PMD, driver->name
- * will be "eth_pcap", but "name" will be "eth_pcapN".
+ * will be "net_pcap", but "name" will be "net_pcapN".
* So use strncmp to compare.
*/
if (!strncmp(driver->driver.name, name,
strlen(driver->driver.name)))
- return driver->driver.uninit(name);
+ return driver->remove(name);
+ }
+
+ /* Give new names precedence over aliases. */
+ TAILQ_FOREACH(driver, &vdev_driver_list, next) {
+ if (driver->driver.alias &&
+ !strncmp(driver->driver.alias, name,
+ strlen(driver->driver.alias)))
+ return driver->remove(name);
}
RTE_LOG(ERR, EAL, "no driver found for %s\n", name);