aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2009-01-05 09:47:27 -0500
committerIngo Molnar <mingo@elte.hu>2009-01-06 08:06:56 -0500
commit33feffd4525fc2e4dd0a322fb5d07d61f85d791e (patch)
tree3952bd84430b75495af070a34c9a8551ed2e75bc
parentffbbef5c0639dbf31a0511d8f65f574bb3e30758 (diff)
x86, pci-nommu: add map_page
This is a preparation of struct dma_mapping_ops unification. We use map_page and unmap_page instead of map_single and unmap_single. We will remove map_single hook in the last patch in this patchset. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--arch/x86/kernel/pci-nommu.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/arch/x86/kernel/pci-nommu.c b/arch/x86/kernel/pci-nommu.c
index c70ab5a5d4c8..5a73a824ac1c 100644
--- a/arch/x86/kernel/pci-nommu.c
+++ b/arch/x86/kernel/pci-nommu.c
@@ -25,18 +25,25 @@ check_addr(char *name, struct device *hwdev, dma_addr_t bus, size_t size)
25 return 1; 25 return 1;
26} 26}
27 27
28static dma_addr_t 28static dma_addr_t nommu_map_page(struct device *dev, struct page *page,
29nommu_map_single(struct device *hwdev, phys_addr_t paddr, size_t size, 29 unsigned long offset, size_t size,
30 int direction) 30 enum dma_data_direction dir,
31 struct dma_attrs *attrs)
31{ 32{
32 dma_addr_t bus = paddr; 33 dma_addr_t bus = page_to_phys(page) + offset;
33 WARN_ON(size == 0); 34 WARN_ON(size == 0);
34 if (!check_addr("map_single", hwdev, bus, size)) 35 if (!check_addr("map_single", dev, bus, size))
35 return bad_dma_address; 36 return bad_dma_address;
36 flush_write_buffers(); 37 flush_write_buffers();
37 return bus; 38 return bus;
38} 39}
39 40
41static dma_addr_t nommu_map_single(struct device *hwdev, phys_addr_t paddr,
42 size_t size, int direction)
43{
44 return nommu_map_page(hwdev, pfn_to_page(paddr >> PAGE_SHIFT),
45 paddr & ~PAGE_MASK, size, direction, NULL);
46}
40 47
41/* Map a set of buffers described by scatterlist in streaming 48/* Map a set of buffers described by scatterlist in streaming
42 * mode for DMA. This is the scatter-gather version of the 49 * mode for DMA. This is the scatter-gather version of the
@@ -83,6 +90,7 @@ struct dma_mapping_ops nommu_dma_ops = {
83 .free_coherent = nommu_free_coherent, 90 .free_coherent = nommu_free_coherent,
84 .map_single = nommu_map_single, 91 .map_single = nommu_map_single,
85 .map_sg = nommu_map_sg, 92 .map_sg = nommu_map_sg,
93 .map_page = nommu_map_page,
86 .is_phys = 1, 94 .is_phys = 1,
87}; 95};
88 96