Define a general represenation of a device and driver in DPDK. The goal is to get rid of the deep dependency on the PCI. Higher level code should not reference the bus-specific structures as it does not need to.
PCI infrastructure embeds those structures. Other infrastructures will do the same. Suggested-by: David Marchand <david.marchand at 6wind.com> Signed-off-by: Jan Viktorin <viktorin at rehivetech.com> --- lib/librte_eal/common/include/rte_dev.h | 9 +++++++++ lib/librte_eal/common/include/rte_pci.h | 3 +++ 2 files changed, 12 insertions(+) diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h index f1b5507..b779705 100644 --- a/lib/librte_eal/common/include/rte_dev.h +++ b/lib/librte_eal/common/include/rte_dev.h @@ -50,6 +50,7 @@ extern "C" { #include <sys/queue.h> #include <rte_log.h> +#include <rte_interrupts.h> __attribute__((format(printf, 2, 0))) static inline void @@ -151,6 +152,14 @@ void rte_eal_driver_register(struct rte_driver *driver); */ void rte_eal_driver_unregister(struct rte_driver *driver); +struct rte_bus_driver { + const char *name; +}; + +struct rte_bus_device { + const char *name; +}; + /** * Initalize all the registered drivers in this process */ diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h index 334c12e..10a2306 100644 --- a/lib/librte_eal/common/include/rte_pci.h +++ b/lib/librte_eal/common/include/rte_pci.h @@ -83,6 +83,7 @@ extern "C" { #include <inttypes.h> #include <rte_interrupts.h> +#include <rte_dev.h> TAILQ_HEAD(pci_device_list, rte_pci_device); /**< PCI devices in D-linked Q. */ TAILQ_HEAD(pci_driver_list, rte_pci_driver); /**< PCI drivers in D-linked Q. */ @@ -166,6 +167,7 @@ struct rte_pci_device { int numa_node; /**< NUMA node connection */ struct rte_devargs *devargs; /**< Device user arguments */ enum rte_kernel_driver kdrv; /**< Kernel driver passthrough */ + struct rte_bus_device dev; /**< Generic device */ }; /** Any PCI device identifier (vendor, device, ...) */ @@ -209,6 +211,7 @@ struct rte_pci_driver { pci_devuninit_t *devuninit; /**< Device uninit function. */ const struct rte_pci_id *id_table; /**< ID table, NULL terminated. */ uint32_t drv_flags; /**< Flags contolling handling of device. */ + struct rte_bus_driver drv; /**< Generic driver */ }; /** Device needs PCI BAR mapping (done with either IGB_UIO or VFIO) */ -- 2.7.0