diff options
author | Joerg Roedel <joerg.roedel@amd.com> | 2008-08-19 10:32:39 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-08-22 02:33:55 -0400 |
commit | 94581094e774402a11887719bac10505236c2d51 (patch) | |
tree | f055baffe63a836ae20a4f7783e92e5982bf3292 /arch/x86/kernel/pci-gart_64.c | |
parent | 1fca25427482387689fa27594c992a961d98768f (diff) |
x86: add alloc_coherent dma_ops callback to GART driver
[ v2 - x86: make gart_alloc_coherent return zeroed memory
FUJITA Tomonori pointed it out that the dma_alloc_coherent function
should return memory set to zero. This patch adds this to the GART
implementation too. ]
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/pci-gart_64.c')
-rw-r--r-- | arch/x86/kernel/pci-gart_64.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c index 49285f8fd4d5..076e64b2d4f3 100644 --- a/arch/x86/kernel/pci-gart_64.c +++ b/arch/x86/kernel/pci-gart_64.c | |||
@@ -499,6 +499,26 @@ error: | |||
499 | return 0; | 499 | return 0; |
500 | } | 500 | } |
501 | 501 | ||
502 | /* allocate and map a coherent mapping */ | ||
503 | static void * | ||
504 | gart_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr, | ||
505 | gfp_t flag) | ||
506 | { | ||
507 | void *vaddr; | ||
508 | |||
509 | vaddr = (void *)__get_free_pages(flag | __GFP_ZERO, get_order(size)); | ||
510 | if (!vaddr) | ||
511 | return NULL; | ||
512 | |||
513 | *dma_addr = gart_map_single(dev, __pa(vaddr), size, DMA_BIDIRECTIONAL); | ||
514 | if (*dma_addr != bad_dma_address) | ||
515 | return vaddr; | ||
516 | |||
517 | free_pages((unsigned long)vaddr, get_order(size)); | ||
518 | |||
519 | return NULL; | ||
520 | } | ||
521 | |||
502 | static int no_agp; | 522 | static int no_agp; |
503 | 523 | ||
504 | static __init unsigned long check_iommu_size(unsigned long aper, u64 aper_size) | 524 | static __init unsigned long check_iommu_size(unsigned long aper, u64 aper_size) |
@@ -701,6 +721,7 @@ static struct dma_mapping_ops gart_dma_ops = { | |||
701 | .sync_sg_for_device = NULL, | 721 | .sync_sg_for_device = NULL, |
702 | .map_sg = gart_map_sg, | 722 | .map_sg = gart_map_sg, |
703 | .unmap_sg = gart_unmap_sg, | 723 | .unmap_sg = gart_unmap_sg, |
724 | .alloc_coherent = gart_alloc_coherent, | ||
704 | }; | 725 | }; |
705 | 726 | ||
706 | void gart_iommu_shutdown(void) | 727 | void gart_iommu_shutdown(void) |