bus/pci: always check IOMMU capabilities
[dpdk.git] / drivers / bus / pci / bsd / pci.c
index 655b34b..8f07ed9 100644 (file)
@@ -145,7 +145,7 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
                goto error;
        }
 
-       snprintf((*uio_res)->path, sizeof((*uio_res)->path), "%s", devname);
+       strlcpy((*uio_res)->path, devname, sizeof((*uio_res)->path));
        memcpy(&(*uio_res)->pci_addr, &dev->addr, sizeof((*uio_res)->pci_addr));
 
        return 0;
@@ -223,6 +223,8 @@ pci_scan_one(int dev_pci_fd, struct pci_conf *conf)
        }
 
        memset(dev, 0, sizeof(*dev));
+       dev->device.bus = &rte_pci_bus.bus;
+
        dev->addr.domain = conf->pc_sel.pc_domain;
        dev->addr.bus = conf->pc_sel.pc_bus;
        dev->addr.devid = conf->pc_sel.pc_dev;
@@ -374,13 +376,20 @@ error:
        return -1;
 }
 
-/*
- * Get iommu class of PCI devices on the bus.
- */
+bool
+pci_device_iommu_support_va(__rte_unused const struct rte_pci_device *dev)
+{
+       return false;
+}
+
 enum rte_iova_mode
-rte_pci_get_iommu_class(void)
+pci_device_iova_mode(const struct rte_pci_driver *pdrv __rte_unused,
+                    const struct rte_pci_device *pdev)
 {
        /* Supports only RTE_KDRV_NIC_UIO */
+       if (pdev->kdrv != RTE_KDRV_NIC_UIO)
+               RTE_LOG(DEBUG, EAL, "Unsupported kernel driver? Defaulting to IOVA as 'PA'\n");
+
        return RTE_IOVA_PA;
 }
 
@@ -439,6 +448,8 @@ int rte_pci_read_config(const struct rte_pci_device *dev,
 {
        int fd = -1;
        int size;
+       /* Copy Linux implementation's behaviour */
+       const int return_len = len;
        struct pci_io pi = {
                .pi_sel = {
                        .pc_domain = dev->addr.domain,
@@ -469,7 +480,7 @@ int rte_pci_read_config(const struct rte_pci_device *dev,
        }
        close(fd);
 
-       return 0;
+       return return_len;
 
  error:
        if (fd >= 0)