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 | ||
