devargs: make device representation generic
[dpdk.git] / lib / librte_eal / common / include / rte_vdev.h
index 1e6b338..3c07b76 100644 (file)
@@ -39,28 +39,50 @@ extern "C" {
 
 #include <sys/queue.h>
 #include <rte_dev.h>
+#include <rte_devargs.h>
+
+struct rte_vdev_device {
+       TAILQ_ENTRY(rte_vdev_device) next;      /**< Next attached vdev */
+       struct rte_device device;               /**< Inherit core device */
+};
+
+static inline const char *
+rte_vdev_device_name(const struct rte_vdev_device *dev)
+{
+       if (dev && dev->device.devargs)
+               return dev->device.devargs->name;
+       return NULL;
+}
+
+static inline const char *
+rte_vdev_device_args(const struct rte_vdev_device *dev)
+{
+       if (dev && dev->device.devargs)
+               return dev->device.devargs->args;
+       return "";
+}
 
 /** Double linked list of virtual device drivers. */
 TAILQ_HEAD(vdev_driver_list, rte_vdev_driver);
 
 /**
- * Initialization function called for each virtual device driver once.
+ * Probe function called for each virtual device driver once.
  */
-typedef int (rte_vdev_init_t)(const char *name, const char *args);
+typedef int (rte_vdev_probe_t)(struct rte_vdev_device *dev);
 
 /**
- * Uninitilization function called for each virtual device driver once.
+ * Remove function called for each virtual device driver once.
  */
-typedef int (rte_vdev_uninit_t)(const char *name);
+typedef int (rte_vdev_remove_t)(struct rte_vdev_device *dev);
 
 /**
  * A virtual device driver abstraction.
  */
 struct rte_vdev_driver {
        TAILQ_ENTRY(rte_vdev_driver) next; /**< Next in list. */
-       struct rte_driver driver;          /**< Inherited general driver. */
-       rte_vdev_init_t *init;         /**< Virtual device init. function. */
-       rte_vdev_uninit_t *uninit;     /**< Virtual device uninit. function. */
+       struct rte_driver driver;      /**< Inherited general driver. */
+       rte_vdev_probe_t *probe;       /**< Virtual device probe function. */
+       rte_vdev_remove_t *remove;     /**< Virtual device remove function. */
 };
 
 /**
@@ -70,7 +92,7 @@ struct rte_vdev_driver {
  *   A pointer to a rte_vdev_driver structure describing the driver
  *   to be registered.
  */
-void rte_eal_vdrv_register(struct rte_vdev_driver *driver);
+void rte_vdev_register(struct rte_vdev_driver *driver);
 
 /**
  * Unregister a virtual device driver.
@@ -79,16 +101,21 @@ void rte_eal_vdrv_register(struct rte_vdev_driver *driver);
  *   A pointer to a rte_vdev_driver structure describing the driver
  *   to be unregistered.
  */
-void rte_eal_vdrv_unregister(struct rte_vdev_driver *driver);
+void rte_vdev_unregister(struct rte_vdev_driver *driver);
 
-#define DRIVER_REGISTER_VDEV(nm, vdrv)\
+#define RTE_PMD_REGISTER_VDEV(nm, vdrv)\
 RTE_INIT(vdrvinitfn_ ##vdrv);\
+static const char *vdrvinit_ ## nm ## _alias;\
 static void vdrvinitfn_ ##vdrv(void)\
 {\
        (vdrv).driver.name = RTE_STR(nm);\
-       rte_eal_vdrv_register(&vdrv);\
+       (vdrv).driver.alias = vdrvinit_ ## nm ## _alias;\
+       rte_vdev_register(&vdrv);\
 } \
-DRIVER_EXPORT_NAME(nm, __COUNTER__)
+RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
+
+#define RTE_PMD_REGISTER_ALIAS(nm, alias)\
+static const char *vdrvinit_ ## nm ## _alias = RTE_STR(alias)
 
 #ifdef __cplusplus
 }