]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
x86: Factor out iommu_count_units
authorJan Kiszka <jan.kiszka@siemens.com>
Thu, 2 Jul 2015 07:40:20 +0000 (09:40 +0200)
committerJan Kiszka <jan.kiszka@siemens.com>
Thu, 2 Jul 2015 07:47:33 +0000 (09:47 +0200)
Will be required for both IOMMU variants.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
hypervisor/arch/x86/Makefile
hypervisor/arch/x86/include/asm/iommu.h
hypervisor/arch/x86/iommu.c [new file with mode: 0644]
hypervisor/arch/x86/vtd.c

index 012ec46aca10086c45a990522247506e161d55ab..0d3670e9da8f99d0df6f2ecc2e80f781b966aaf8 100644 (file)
@@ -13,7 +13,7 @@
 #
 
 BUILT_IN_OBJECTS := built-in-amd.o built-in-intel.o
-COMMON_OBJECTS := apic.o dbg-write.o entry.o setup.o control.o mmio.o \
+COMMON_OBJECTS := apic.o dbg-write.o entry.o setup.o control.o mmio.o iommu.o \
                  paging.o ../../pci.o pci.o ioapic.o i8042.o vcpu.o \
                  ../../pci_ivshmem.o
 
index e476bbf9d0754e32352873a7c2b2db973bee3170..a0be3c3f98e7186549a0fc1336b3ab0d069bc8ab 100644 (file)
@@ -21,6 +21,8 @@
 #include <asm/cell.h>
 #include <asm/percpu.h>
 
+unsigned int iommu_count_units(void);
+
 int iommu_init(void);
 
 int iommu_cell_init(struct cell *cell);
diff --git a/hypervisor/arch/x86/iommu.c b/hypervisor/arch/x86/iommu.c
new file mode 100644 (file)
index 0000000..3da61d6
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Jailhouse, a Linux-based partitioning hypervisor
+ *
+ * Copyright (c) Siemens AG, 2014, 2015
+ *
+ * Authors:
+ *  Jan Kiszka <jan.kiszka@siemens.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2.  See
+ * the COPYING file in the top-level directory.
+ */
+
+#include <jailhouse/control.h>
+#include <asm/iommu.h>
+
+unsigned int iommu_count_units(void)
+{
+       unsigned int units = 0;
+
+       while (units < JAILHOUSE_MAX_IOMMU_UNITS &&
+              system_config->platform_info.x86.iommu_base[units])
+               units++;
+       return units;
+}
index 44474fb22e34501cf165884dbaee0aeaa445dc52..d36c8cea1dc7ec93d765ea0d960418d9a0b8ecda 100644 (file)
@@ -463,8 +463,7 @@ static int vtd_init_ir_emulation(unsigned int unit_no, void *reg_base)
 int iommu_init(void)
 {
        unsigned long version, caps, ecaps, ctrls, sllps_caps = ~0UL;
-       unsigned int pt_levels, num_did, n;
-       unsigned int units = 0;
+       unsigned int units, pt_levels, num_did, n;
        void *reg_base;
        u64 base_addr;
        int err;
@@ -482,9 +481,7 @@ int iommu_init(void)
 
        int_remap_table_size_log2 = n;
 
-       while (units < JAILHOUSE_MAX_IOMMU_UNITS &&
-              system_config->platform_info.x86.iommu_base[units])
-               units++;
+       units = iommu_count_units();
        if (units == 0)
                return trace_error(-EINVAL);