On Thu, 23 Jul 2015 17:42:58 +0200 Thomas Monjalon <thomas.monjalon at 6wind.com> wrote:
> As noticed when reviewing the changes for hotplugging ring PMD, > http://dpdk.org/ml/archives/dev/2015-July/021872.html > a driver is considered in ethdev and EAL as a PCI driver: > > * Each Ethernet driver acts as a PCI driver and is represented by a generic > * *eth_driver* structure that holds: > * - An *rte_pci_driver* structure (which must be the first field). > * - The *eth_dev_init* function invoked for each matching PCI device. > * - The *eth_dev_uninit* function invoked for each matching PCI device. > * - The size of the private data to allocate for each matching device. > */ > struct eth_driver { > > struct rte_pci_driver pci_drv; /**< The PMD is also a PCI driver. */ > eth_dev_init_t eth_dev_init; /**< Device init function. */ > eth_dev_uninit_t eth_dev_uninit; /**< Device uninit function. */ > unsigned int dev_private_size; /**< Size of device private data. */ > }; > > So the non PCI drivers don't use rte_eth_driver_register(). > Then a difference is made with these flags: > enum pmd_type { > PMD_VDEV = 0, > PMD_PDEV = 1, > }; > > With this kind of weird things: > static struct rte_driver rte_virtio_driver = { > .type = PMD_PDEV, > > .init = rte_virtio_pmd_init, > }; > Because virtio is a virtual device with a virtual PCI address. > > All these things are not normal and make EAL code more and more difficult to > maintain. That's why we must stop accepting new code using these workarounds > and start working on a refactoring. > > Comments welcome The hyper-v driver which was posted here added a new bus type (vmbus) and it was not too painful. There were minimal changes to base EAL to make a union where pci_drv is used.