[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1219156366-32498-2-git-send-email-joerg.roedel@amd.com>
Date: Tue, 19 Aug 2008 16:32:39 +0200
From: Joerg Roedel <joerg.roedel@....com>
To: mingo@...hat.com, tglx@...utronix.de, hpa@...or.com
CC: linux-kernel@...r.kernel.org, iommu@...ts.linux-foundation.org,
muli@...ibm.com, Joerg Roedel <joerg.roedel@....com>
Subject: [PATCH 1/8] x86: add alloc_coherent dma_ops callback to GART driver
Signed-off-by: Joerg Roedel <joerg.roedel@....com>
---
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 4d8efb0..44a75a6 100644
--- a/arch/x86/kernel/pci-gart_64.c
+++ b/arch/x86/kernel/pci-gart_64.c
@@ -506,6 +506,26 @@ error:
return 0;
}
+/* allocate and map a coherent mapping */
+static void *
+gart_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr,
+ gfp_t flag)
+{
+ void *vaddr;
+
+ vaddr = (void *)__get_free_pages(flag, get_order(size));
+ if (!vaddr)
+ return NULL;
+
+ *dma_addr = gart_map_single(dev, __pa(vaddr), size, DMA_BIDIRECTIONAL);
+ if (*dma_addr != bad_dma_address)
+ return vaddr;
+
+ free_pages((unsigned long)vaddr, get_order(size));
+
+ return NULL;
+}
+
static int no_agp;
static __init unsigned long check_iommu_size(unsigned long aper, u64 aper_size)
@@ -708,6 +728,7 @@ static struct dma_mapping_ops gart_dma_ops = {
.sync_sg_for_device = NULL,
.map_sg = gart_map_sg,
.unmap_sg = gart_unmap_sg,
+ .alloc_coherent = gart_alloc_coherent,
};
void gart_iommu_shutdown(void)
--
1.5.3.7
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists