X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fvirtio%2Fvirtio_pci_ethdev.c;h=54645dc62ec1af7c36d42091fb349552e15149a9;hb=3c3ea76cffe0fc614555459d9741d2472cc3ac9a;hp=d2f0ca69e7ee6d9bf6c3a877d9f93529b054a96d;hpb=7793d29359e8996c7028d976eeeaa21024139fef;p=dpdk.git diff --git a/drivers/net/virtio/virtio_pci_ethdev.c b/drivers/net/virtio/virtio_pci_ethdev.c index d2f0ca69e7..54645dc62e 100644 --- a/drivers/net/virtio/virtio_pci_ethdev.c +++ b/drivers/net/virtio/virtio_pci_ethdev.c @@ -19,6 +19,7 @@ #include #include +#include "virtio.h" #include "virtio_ethdev.h" #include "virtio_pci.h" #include "virtio_logs.h" @@ -39,9 +40,11 @@ static const struct rte_pci_id pci_id_virtio_map[] = { * could have the PCI initiated correctly. */ static int -virtio_remap_pci(struct rte_pci_device *pci_dev, struct virtio_hw *hw) +virtio_remap_pci(struct rte_pci_device *pci_dev, struct virtio_pci_dev *dev) { - if (hw->bus_type == VIRTIO_BUS_PCI_MODERN) { + struct virtio_hw *hw = &dev->hw; + + if (dev->modern) { /* * We don't have to re-parse the PCI config space, since * rte_pci_map_device() makes sure the mapped address @@ -57,8 +60,8 @@ virtio_remap_pci(struct rte_pci_device *pci_dev, struct virtio_hw *hw) PMD_INIT_LOG(DEBUG, "failed to map pci device!"); return -1; } - } else if (hw->bus_type == VIRTIO_BUS_PCI_LEGACY) { - if (rte_pci_ioport_map(pci_dev, 0, VTPCI_IO(hw)) < 0) + } else { + if (vtpci_legacy_ioport_map(hw) < 0) return -1; } @@ -73,25 +76,31 @@ eth_virtio_pci_init(struct rte_eth_dev *eth_dev) struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); int ret; - VTPCI_DEV(hw) = pci_dev; - if (rte_eal_process_type() == RTE_PROC_PRIMARY) { - ret = vtpci_init(RTE_ETH_DEV_TO_PCI(eth_dev), hw); + hw->port_id = eth_dev->data->port_id; + VTPCI_DEV(hw) = pci_dev; + ret = vtpci_init(RTE_ETH_DEV_TO_PCI(eth_dev), dev); if (ret) { - PMD_INIT_LOG(ERR, "Failed to init PCI device\n"); + PMD_INIT_LOG(ERR, "Failed to init PCI device"); return -1; } } else { - ret = virtio_remap_pci(RTE_ETH_DEV_TO_PCI(eth_dev), hw); + VTPCI_DEV(hw) = pci_dev; + if (dev->modern) + VIRTIO_OPS(hw) = &modern_ops; + else + VIRTIO_OPS(hw) = &legacy_ops; + + ret = virtio_remap_pci(RTE_ETH_DEV_TO_PCI(eth_dev), dev); if (ret < 0) { - PMD_INIT_LOG(ERR, "Failed to remap PCI device\n"); + PMD_INIT_LOG(ERR, "Failed to remap PCI device"); return -1; } } ret = eth_virtio_dev_init(eth_dev); if (ret < 0) { - PMD_INIT_LOG(ERR, "Failed to init virtio device\n"); + PMD_INIT_LOG(ERR, "Failed to init virtio device"); goto err_unmap; } @@ -103,8 +112,8 @@ eth_virtio_pci_init(struct rte_eth_dev *eth_dev) err_unmap: rte_pci_unmap_device(RTE_ETH_DEV_TO_PCI(eth_dev)); - if (hw->bus_type == VIRTIO_BUS_PCI_LEGACY) - rte_pci_ioport_unmap(VTPCI_IO(hw)); + if (!dev->modern) + vtpci_legacy_ioport_unmap(hw); return ret; }