X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_eal%2Fcommon%2Finclude%2Frte_vdev.h;h=3c07b76a0b4872526af746fab4addb76e86ab258;hb=f3a1188cee4a5f2599fb88f17b237fbe03127d6e;hp=c7aa7955dff6da8091c419603f31e61003453ee6;hpb=3ac2bd97d9b2e8362348d83f711c36e52b7c2024;p=dpdk.git diff --git a/lib/librte_eal/common/include/rte_vdev.h b/lib/librte_eal/common/include/rte_vdev.h index c7aa7955df..3c07b76a0b 100644 --- a/lib/librte_eal/common/include/rte_vdev.h +++ b/lib/librte_eal/common/include/rte_vdev.h @@ -1,8 +1,7 @@ /*- * BSD LICENSE * - * Copyright(c) 2014 6WIND S.A. - * All rights reserved. + * Copyright(c) 2016 RehiveTech. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -14,7 +13,7 @@ * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. - * * Neither the name of 6WIND S.A. nor the names of its + * * Neither the name of RehiveTech nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * @@ -31,78 +30,95 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _RTE_VDEV_H_ -#define _RTE_VDEV_H_ - -/** - * @file - * - * RTE Virtual Devices Interface - * - * This file manages the list of the virtual device drivers. - */ +#ifndef RTE_VDEV_H +#define RTE_VDEV_H #ifdef __cplusplus extern "C" { #endif #include +#include +#include + +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(rte_vdev_driver_list, rte_vdev_driver); +TAILQ_HEAD(vdev_driver_list, rte_vdev_driver); /** - * Initialization function called for each virtual device probing. + * 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); /** - * A structure describing a virtual device driver. + * Remove function called for each virtual device driver once. + */ +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. */ - const char *name; /**< Driver name. */ - rte_vdev_init_t *init; /**< Device init. function. */ + TAILQ_ENTRY(rte_vdev_driver) next; /**< Next in list. */ + 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. */ }; /** * Register a virtual device driver. * * @param driver - * A pointer to a rte_vdev structure describing the driver + * A pointer to a rte_vdev_driver structure describing the driver * to be registered. */ -void rte_eal_vdev_driver_register(struct rte_vdev_driver *driver); +void rte_vdev_register(struct rte_vdev_driver *driver); /** * Unregister a virtual device driver. * * @param driver - * A pointer to a rte_vdev structure describing the driver + * A pointer to a rte_vdev_driver structure describing the driver * to be unregistered. */ -void rte_eal_vdev_driver_unregister(struct rte_vdev_driver *driver); +void rte_vdev_unregister(struct rte_vdev_driver *driver); -enum rte_pmd_driver_type { - PMD_VDEV = 1 -}; - -extern void rte_eal_nonpci_dev_init_register(const char *name, int (*dev_initfn)(const char *, const char *)); -#define PMD_REGISTER_DRIVER(d, t)\ -void devinitfn_ ##d(void);\ -void __attribute__((constructor, used)) devinitfn_ ##d(void)\ +#define RTE_PMD_REGISTER_VDEV(nm, vdrv)\ +RTE_INIT(vdrvinitfn_ ##vdrv);\ +static const char *vdrvinit_ ## nm ## _alias;\ +static void vdrvinitfn_ ##vdrv(void)\ {\ - enum rte_pmd_driver_type _t = (t);\ - switch(_t)\ - {\ - case PMD_VDEV:\ - rte_eal_vdev_driver_register(&d);\ - break;\ - };\ -} + (vdrv).driver.name = RTE_STR(nm);\ + (vdrv).driver.alias = vdrvinit_ ## nm ## _alias;\ + rte_vdev_register(&vdrv);\ +} \ +RTE_PMD_EXPORT_NAME(nm, __COUNTER__) + +#define RTE_PMD_REGISTER_ALIAS(nm, alias)\ +static const char *vdrvinit_ ## nm ## _alias = RTE_STR(alias) #ifdef __cplusplus } #endif -#endif /* _RTE_VDEV_H_ */ +#endif