diff options
author | Glauber Costa <gcosta@redhat.com> | 2008-04-08 12:20:54 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-19 13:19:57 -0400 |
commit | 116890d556af38d539597655c564a73e6eef3d9e (patch) | |
tree | 4c284032ee8b59fb97fd01b86ba6ca0b925480fe | |
parent | cb5867a5d8ca20e16ddc3397c36ee9c2e4cba219 (diff) |
x86: move x86_64-specific to common code.
This patch moves the bootmem functions, that are largely
x86_64-specific into pci-dma.c. The code goes inside an ifdef.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | arch/x86/kernel/pci-dma.c | 73 | ||||
-rw-r--r-- | arch/x86/kernel/pci-dma_64.c | 68 |
2 files changed, 73 insertions, 68 deletions
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 6b77fd872a7a..91443361cb67 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c | |||
@@ -1,6 +1,9 @@ | |||
1 | #include <linux/dma-mapping.h> | 1 | #include <linux/dma-mapping.h> |
2 | #include <linux/dmar.h> | 2 | #include <linux/dmar.h> |
3 | #include <linux/bootmem.h> | ||
3 | 4 | ||
5 | #include <asm/proto.h> | ||
6 | #include <asm/dma.h> | ||
4 | #include <asm/gart.h> | 7 | #include <asm/gart.h> |
5 | #include <asm/calgary.h> | 8 | #include <asm/calgary.h> |
6 | 9 | ||
@@ -26,6 +29,76 @@ int dma_set_mask(struct device *dev, u64 mask) | |||
26 | } | 29 | } |
27 | EXPORT_SYMBOL(dma_set_mask); | 30 | EXPORT_SYMBOL(dma_set_mask); |
28 | 31 | ||
32 | #ifdef CONFIG_X86_64 | ||
33 | static __initdata void *dma32_bootmem_ptr; | ||
34 | static unsigned long dma32_bootmem_size __initdata = (128ULL<<20); | ||
35 | |||
36 | static int __init parse_dma32_size_opt(char *p) | ||
37 | { | ||
38 | if (!p) | ||
39 | return -EINVAL; | ||
40 | dma32_bootmem_size = memparse(p, &p); | ||
41 | return 0; | ||
42 | } | ||
43 | early_param("dma32_size", parse_dma32_size_opt); | ||
44 | |||
45 | void __init dma32_reserve_bootmem(void) | ||
46 | { | ||
47 | unsigned long size, align; | ||
48 | if (end_pfn <= MAX_DMA32_PFN) | ||
49 | return; | ||
50 | |||
51 | align = 64ULL<<20; | ||
52 | size = round_up(dma32_bootmem_size, align); | ||
53 | dma32_bootmem_ptr = __alloc_bootmem_nopanic(size, align, | ||
54 | __pa(MAX_DMA_ADDRESS)); | ||
55 | if (dma32_bootmem_ptr) | ||
56 | dma32_bootmem_size = size; | ||
57 | else | ||
58 | dma32_bootmem_size = 0; | ||
59 | } | ||
60 | static void __init dma32_free_bootmem(void) | ||
61 | { | ||
62 | int node; | ||
63 | |||
64 | if (end_pfn <= MAX_DMA32_PFN) | ||
65 | return; | ||
66 | |||
67 | if (!dma32_bootmem_ptr) | ||
68 | return; | ||
69 | |||
70 | for_each_online_node(node) | ||
71 | free_bootmem_node(NODE_DATA(node), __pa(dma32_bootmem_ptr), | ||
72 | dma32_bootmem_size); | ||
73 | |||
74 | dma32_bootmem_ptr = NULL; | ||
75 | dma32_bootmem_size = 0; | ||
76 | } | ||
77 | |||
78 | void __init pci_iommu_alloc(void) | ||
79 | { | ||
80 | /* free the range so iommu could get some range less than 4G */ | ||
81 | dma32_free_bootmem(); | ||
82 | /* | ||
83 | * The order of these functions is important for | ||
84 | * fall-back/fail-over reasons | ||
85 | */ | ||
86 | #ifdef CONFIG_GART_IOMMU | ||
87 | gart_iommu_hole_init(); | ||
88 | #endif | ||
89 | |||
90 | #ifdef CONFIG_CALGARY_IOMMU | ||
91 | detect_calgary(); | ||
92 | #endif | ||
93 | |||
94 | detect_intel_iommu(); | ||
95 | |||
96 | #ifdef CONFIG_SWIOTLB | ||
97 | pci_swiotlb_init(); | ||
98 | #endif | ||
99 | } | ||
100 | #endif | ||
101 | |||
29 | static int __init pci_iommu_init(void) | 102 | static int __init pci_iommu_init(void) |
30 | { | 103 | { |
31 | #ifdef CONFIG_CALGARY_IOMMU | 104 | #ifdef CONFIG_CALGARY_IOMMU |
diff --git a/arch/x86/kernel/pci-dma_64.c b/arch/x86/kernel/pci-dma_64.c index 42021300964a..6b204cc42890 100644 --- a/arch/x86/kernel/pci-dma_64.c +++ b/arch/x86/kernel/pci-dma_64.c | |||
@@ -271,74 +271,6 @@ static __init int iommu_setup(char *p) | |||
271 | } | 271 | } |
272 | early_param("iommu", iommu_setup); | 272 | early_param("iommu", iommu_setup); |
273 | 273 | ||
274 | static __initdata void *dma32_bootmem_ptr; | ||
275 | static unsigned long dma32_bootmem_size __initdata = (128ULL<<20); | ||
276 | |||
277 | static int __init parse_dma32_size_opt(char *p) | ||
278 | { | ||
279 | if (!p) | ||
280 | return -EINVAL; | ||
281 | dma32_bootmem_size = memparse(p, &p); | ||
282 | return 0; | ||
283 | } | ||
284 | early_param("dma32_size", parse_dma32_size_opt); | ||
285 | |||
286 | void __init dma32_reserve_bootmem(void) | ||
287 | { | ||
288 | unsigned long size, align; | ||
289 | if (end_pfn <= MAX_DMA32_PFN) | ||
290 | return; | ||
291 | |||
292 | align = 64ULL<<20; | ||
293 | size = round_up(dma32_bootmem_size, align); | ||
294 | dma32_bootmem_ptr = __alloc_bootmem_nopanic(size, align, | ||
295 | __pa(MAX_DMA_ADDRESS)); | ||
296 | if (dma32_bootmem_ptr) | ||
297 | dma32_bootmem_size = size; | ||
298 | else | ||
299 | dma32_bootmem_size = 0; | ||
300 | } | ||
301 | static void __init dma32_free_bootmem(void) | ||
302 | { | ||
303 | int node; | ||
304 | |||
305 | if (end_pfn <= MAX_DMA32_PFN) | ||
306 | return; | ||
307 | |||
308 | if (!dma32_bootmem_ptr) | ||
309 | return; | ||
310 | |||
311 | for_each_online_node(node) | ||
312 | free_bootmem_node(NODE_DATA(node), __pa(dma32_bootmem_ptr), | ||
313 | dma32_bootmem_size); | ||
314 | |||
315 | dma32_bootmem_ptr = NULL; | ||
316 | dma32_bootmem_size = 0; | ||
317 | } | ||
318 | |||
319 | void __init pci_iommu_alloc(void) | ||
320 | { | ||
321 | /* free the range so iommu could get some range less than 4G */ | ||
322 | dma32_free_bootmem(); | ||
323 | /* | ||
324 | * The order of these functions is important for | ||
325 | * fall-back/fail-over reasons | ||
326 | */ | ||
327 | #ifdef CONFIG_GART_IOMMU | ||
328 | gart_iommu_hole_init(); | ||
329 | #endif | ||
330 | |||
331 | #ifdef CONFIG_CALGARY_IOMMU | ||
332 | detect_calgary(); | ||
333 | #endif | ||
334 | |||
335 | detect_intel_iommu(); | ||
336 | |||
337 | #ifdef CONFIG_SWIOTLB | ||
338 | pci_swiotlb_init(); | ||
339 | #endif | ||
340 | } | ||
341 | |||
342 | #ifdef CONFIG_PCI | 274 | #ifdef CONFIG_PCI |
343 | /* Many VIA bridges seem to corrupt data for DAC. Disable it here */ | 275 | /* Many VIA bridges seem to corrupt data for DAC. Disable it here */ |
344 | 276 | ||