pci: separate ioport handlers per UIO driver
[dpdk.git] / lib / librte_eal / linuxapp / eal / eal_pci.c
index 4c45452..74c6919 100644 (file)
@@ -362,7 +362,7 @@ pci_scan_one(const char *dirname, uint16_t domain, uint8_t bus,
                else
                        dev->kdrv = RTE_KDRV_UNKNOWN;
        } else
-               dev->kdrv = RTE_KDRV_UNKNOWN;
+               dev->kdrv = RTE_KDRV_NONE;
 
        /* device is valid, add in list (sorted) */
        if (TAILQ_EMPTY(&pci_device_list)) {
@@ -543,7 +543,7 @@ int rte_eal_pci_write_config(const struct rte_pci_device *device,
        }
 }
 
-#if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686)
+#if defined(RTE_ARCH_X86)
 static int
 pci_ioport_map(struct rte_pci_device *dev, int bar __rte_unused,
               struct rte_pci_ioport *p)
@@ -607,28 +607,28 @@ int
 rte_eal_pci_ioport_map(struct rte_pci_device *dev, int bar,
                       struct rte_pci_ioport *p)
 {
-       int ret;
+       int ret = -1;
 
        switch (dev->kdrv) {
 #ifdef VFIO_PRESENT
        case RTE_KDRV_VFIO:
-               ret = -1;
                if (pci_vfio_is_enabled())
                        ret = pci_vfio_ioport_map(dev, bar, p);
                break;
 #endif
        case RTE_KDRV_IGB_UIO:
+               ret = pci_uio_ioport_map(dev, bar, p);
+               break;
        case RTE_KDRV_UIO_GENERIC:
                ret = pci_uio_ioport_map(dev, bar, p);
                break;
-       default:
-#if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686)
-               /* special case for x86 ... */
+       case RTE_KDRV_NONE:
+#if defined(RTE_ARCH_X86)
                ret = pci_ioport_map(dev, bar, p);
-#else
-               ret = -1;
 #endif
                break;
+       default:
+               break;
        }
 
        if (!ret)
@@ -648,15 +648,18 @@ rte_eal_pci_ioport_read(struct rte_pci_ioport *p,
                break;
 #endif
        case RTE_KDRV_IGB_UIO:
+               pci_uio_ioport_read(p, data, len, offset);
+               break;
        case RTE_KDRV_UIO_GENERIC:
                pci_uio_ioport_read(p, data, len, offset);
                break;
-       default:
-#if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686)
-               /* special case for x86 ... */
+       case RTE_KDRV_NONE:
+#if defined(RTE_ARCH_X86)
                pci_uio_ioport_read(p, data, len, offset);
 #endif
                break;
+       default:
+               break;
        }
 }
 
@@ -671,43 +674,46 @@ rte_eal_pci_ioport_write(struct rte_pci_ioport *p,
                break;
 #endif
        case RTE_KDRV_IGB_UIO:
+               pci_uio_ioport_write(p, data, len, offset);
+               break;
        case RTE_KDRV_UIO_GENERIC:
                pci_uio_ioport_write(p, data, len, offset);
                break;
-       default:
-#if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686)
-               /* special case for x86 ... */
+       case RTE_KDRV_NONE:
+#if defined(RTE_ARCH_X86)
                pci_uio_ioport_write(p, data, len, offset);
 #endif
                break;
+       default:
+               break;
        }
 }
 
 int
 rte_eal_pci_ioport_unmap(struct rte_pci_ioport *p)
 {
-       int ret;
+       int ret = -1;
 
        switch (p->dev->kdrv) {
 #ifdef VFIO_PRESENT
        case RTE_KDRV_VFIO:
-               ret = -1;
                if (pci_vfio_is_enabled())
                        ret = pci_vfio_ioport_unmap(p);
                break;
 #endif
        case RTE_KDRV_IGB_UIO:
+               ret = pci_uio_ioport_unmap(p);
+               break;
        case RTE_KDRV_UIO_GENERIC:
                ret = pci_uio_ioport_unmap(p);
                break;
-       default:
-#if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686)
-               /* special case for x86 ... nothing to do */
+       case RTE_KDRV_NONE:
+#if defined(RTE_ARCH_X86)
                ret = 0;
-#else
-               ret = -1;
 #endif
                break;
+       default:
+               break;
        }
 
        return ret;