bus: get IOMMU class
[dpdk.git] / lib / librte_eal / common / eal_common_bus.c
index 08bec2d..a30a898 100644 (file)
@@ -222,3 +222,26 @@ rte_bus_find_by_device_name(const char *str)
                c[0] = '\0';
        return rte_bus_find(NULL, bus_can_parse, name);
 }
+
+
+/*
+ * Get iommu class of devices on the bus.
+ */
+enum rte_iova_mode
+rte_bus_get_iommu_class(void)
+{
+       int mode = RTE_IOVA_DC;
+       struct rte_bus *bus;
+
+       TAILQ_FOREACH(bus, &rte_bus_list, next) {
+
+               if (bus->get_iommu_class)
+                       mode |= bus->get_iommu_class();
+       }
+
+       if (mode != RTE_IOVA_VA) {
+               /* Use default IOVA mode */
+               mode = RTE_IOVA_PA;
+       }
+       return mode;
+}