diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/include/asm/x86_init.h | 9 | ||||
-rw-r--r-- | arch/x86/kernel/pci-dma.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/x86_init.c | 5 |
3 files changed, 16 insertions, 0 deletions
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h index 66008ed80b7a..d8e71459f025 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h | |||
@@ -91,6 +91,14 @@ struct x86_init_timers { | |||
91 | }; | 91 | }; |
92 | 92 | ||
93 | /** | 93 | /** |
94 | * struct x86_init_iommu - platform specific iommu setup | ||
95 | * @iommu_init: platform specific iommu setup | ||
96 | */ | ||
97 | struct x86_init_iommu { | ||
98 | int (*iommu_init)(void); | ||
99 | }; | ||
100 | |||
101 | /** | ||
94 | * struct x86_init_ops - functions for platform specific setup | 102 | * struct x86_init_ops - functions for platform specific setup |
95 | * | 103 | * |
96 | */ | 104 | */ |
@@ -101,6 +109,7 @@ struct x86_init_ops { | |||
101 | struct x86_init_oem oem; | 109 | struct x86_init_oem oem; |
102 | struct x86_init_paging paging; | 110 | struct x86_init_paging paging; |
103 | struct x86_init_timers timers; | 111 | struct x86_init_timers timers; |
112 | struct x86_init_iommu iommu; | ||
104 | }; | 113 | }; |
105 | 114 | ||
106 | /** | 115 | /** |
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 839d49a669bc..a13478da533c 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c | |||
@@ -292,6 +292,8 @@ static int __init pci_iommu_init(void) | |||
292 | dma_debug_add_bus(&pci_bus_type); | 292 | dma_debug_add_bus(&pci_bus_type); |
293 | #endif | 293 | #endif |
294 | 294 | ||
295 | x86_init.iommu.iommu_init(); | ||
296 | |||
295 | calgary_iommu_init(); | 297 | calgary_iommu_init(); |
296 | 298 | ||
297 | intel_iommu_init(); | 299 | intel_iommu_init(); |
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c index bc9b230ef402..c46984d122dc 100644 --- a/arch/x86/kernel/x86_init.c +++ b/arch/x86/kernel/x86_init.c | |||
@@ -19,6 +19,7 @@ | |||
19 | void __cpuinit x86_init_noop(void) { } | 19 | void __cpuinit x86_init_noop(void) { } |
20 | void __init x86_init_uint_noop(unsigned int unused) { } | 20 | void __init x86_init_uint_noop(unsigned int unused) { } |
21 | void __init x86_init_pgd_noop(pgd_t *unused) { } | 21 | void __init x86_init_pgd_noop(pgd_t *unused) { } |
22 | int __init iommu_init_noop(void) { return 0; } | ||
22 | 23 | ||
23 | /* | 24 | /* |
24 | * The platform setup functions are preset with the default functions | 25 | * The platform setup functions are preset with the default functions |
@@ -63,6 +64,10 @@ struct x86_init_ops x86_init __initdata = { | |||
63 | .tsc_pre_init = x86_init_noop, | 64 | .tsc_pre_init = x86_init_noop, |
64 | .timer_init = hpet_time_init, | 65 | .timer_init = hpet_time_init, |
65 | }, | 66 | }, |
67 | |||
68 | .iommu = { | ||
69 | .iommu_init = iommu_init_noop, | ||
70 | }, | ||
66 | }; | 71 | }; |
67 | 72 | ||
68 | struct x86_cpuinit_ops x86_cpuinit __cpuinitdata = { | 73 | struct x86_cpuinit_ops x86_cpuinit __cpuinitdata = { |