aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2007-10-17 02:29:42 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-17 11:42:57 -0400
commit622a9edd919de98ef59571ae6c40c7458244e3f2 (patch)
treec25684f90ed52c459c39d97d6ab641fe3bb6b09d
parentbc154b1efb7f8430ea9faabd5953ebc411f8ead5 (diff)
Remove dma_cache_(wback|inv|wback_inv) functions
dma_cache_(wback|inv|wback_inv) were the earliest attempt on a generalized cache managment API for I/O purposes. Originally it was basically the raw MIPS low level cache API exported to the entire world. The API has suffered from a lack of documentation, was not very widely used unlike it's more modern brothers and can easily be replaced by dma_cache_sync. So remove it rsp. turn the surviving bits back into an arch private API, as discussed on linux-arch. Signed-off-by: Ralf Baechle <ralf@linux-mips.org> Acked-by: Paul Mundt <lethal@linux-sh.org> Acked-by: Paul Mackerras <paulus@samba.org> Acked-by: David S. Miller <davem@davemloft.net> Acked-by: Kyle McMartin <kyle@parisc-linux.org> Acked-by: Haavard Skinnemoen <hskinnemoen@atmel.com> Cc: <linux-arch@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--arch/avr32/mm/dma-coherent.c6
-rw-r--r--arch/mips/mm/cache.c2
-rw-r--r--arch/sh/drivers/pci/dma-dreamcast.c2
-rw-r--r--arch/sh/mm/consistent.c8
-rw-r--r--arch/sh64/mm/consistent.c3
-rw-r--r--include/asm-alpha/io.h6
-rw-r--r--include/asm-avr32/io.h7
-rw-r--r--include/asm-blackfin/io.h4
-rw-r--r--include/asm-h8300/io.h6
-rw-r--r--include/asm-ia64/io.h4
-rw-r--r--include/asm-m68k/io.h6
-rw-r--r--include/asm-m68knommu/io.h6
-rw-r--r--include/asm-mips/io.h2
-rw-r--r--include/asm-parisc/io.h5
-rw-r--r--include/asm-powerpc/io.h17
-rw-r--r--include/asm-ppc/io.h17
-rw-r--r--include/asm-sh/floppy.h2
-rw-r--r--include/asm-sh/io.h25
-rw-r--r--include/asm-sh64/dma-mapping.h6
-rw-r--r--include/asm-sh64/io.h48
-rw-r--r--include/asm-sparc/io.h7
-rw-r--r--include/asm-sparc64/io.h6
-rw-r--r--include/asm-x86/io_32.h11
-rw-r--r--include/asm-x86/io_64.h6
24 files changed, 19 insertions, 193 deletions
diff --git a/arch/avr32/mm/dma-coherent.c b/arch/avr32/mm/dma-coherent.c
index 099212d4567c..177fea8f7b71 100644
--- a/arch/avr32/mm/dma-coherent.c
+++ b/arch/avr32/mm/dma-coherent.c
@@ -21,13 +21,13 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size, int direction)
21 21
22 switch (direction) { 22 switch (direction) {
23 case DMA_FROM_DEVICE: /* invalidate only */ 23 case DMA_FROM_DEVICE: /* invalidate only */
24 dma_cache_inv(vaddr, size); 24 invalidate_dcache_region(vaddr, size);
25 break; 25 break;
26 case DMA_TO_DEVICE: /* writeback only */ 26 case DMA_TO_DEVICE: /* writeback only */
27 dma_cache_wback(vaddr, size); 27 clean_dcache_region(vaddr, size);
28 break; 28 break;
29 case DMA_BIDIRECTIONAL: /* writeback and invalidate */ 29 case DMA_BIDIRECTIONAL: /* writeback and invalidate */
30 dma_cache_wback_inv(vaddr, size); 30 flush_dcache_region(vaddr, size);
31 break; 31 break;
32 default: 32 default:
33 BUG(); 33 BUG();
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c
index 43dde874f414..81f30ac2bff9 100644
--- a/arch/mips/mm/cache.c
+++ b/arch/mips/mm/cache.c
@@ -47,8 +47,6 @@ void (*_dma_cache_wback)(unsigned long start, unsigned long size);
47void (*_dma_cache_inv)(unsigned long start, unsigned long size); 47void (*_dma_cache_inv)(unsigned long start, unsigned long size);
48 48
49EXPORT_SYMBOL(_dma_cache_wback_inv); 49EXPORT_SYMBOL(_dma_cache_wback_inv);
50EXPORT_SYMBOL(_dma_cache_wback);
51EXPORT_SYMBOL(_dma_cache_inv);
52 50
53#endif /* CONFIG_DMA_NONCOHERENT */ 51#endif /* CONFIG_DMA_NONCOHERENT */
54 52
diff --git a/arch/sh/drivers/pci/dma-dreamcast.c b/arch/sh/drivers/pci/dma-dreamcast.c
index 230d6ec0d239..888a34050599 100644
--- a/arch/sh/drivers/pci/dma-dreamcast.c
+++ b/arch/sh/drivers/pci/dma-dreamcast.c
@@ -51,7 +51,7 @@ void *dreamcast_consistent_alloc(struct device *dev, size_t size,
51 buf = P2SEGADDR(buf); 51 buf = P2SEGADDR(buf);
52 52
53 /* Flush the dcache before we hand off the buffer */ 53 /* Flush the dcache before we hand off the buffer */
54 dma_cache_wback_inv((void *)buf, size); 54 __flush_purge_region((void *)buf, size);
55 55
56 return (void *)buf; 56 return (void *)buf;
57} 57}
diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c
index 38c82d890ffd..e220c29a3c00 100644
--- a/arch/sh/mm/consistent.c
+++ b/arch/sh/mm/consistent.c
@@ -34,7 +34,7 @@ void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *handle)
34 /* 34 /*
35 * We must flush the cache before we pass it on to the device 35 * We must flush the cache before we pass it on to the device
36 */ 36 */
37 dma_cache_wback_inv(ret, size); 37 __flush_purge_region(ret, size);
38 38
39 page = virt_to_page(ret); 39 page = virt_to_page(ret);
40 free = page + (size >> PAGE_SHIFT); 40 free = page + (size >> PAGE_SHIFT);
@@ -68,13 +68,13 @@ void consistent_sync(void *vaddr, size_t size, int direction)
68 68
69 switch (direction) { 69 switch (direction) {
70 case DMA_FROM_DEVICE: /* invalidate only */ 70 case DMA_FROM_DEVICE: /* invalidate only */
71 dma_cache_inv(p1addr, size); 71 __flush_invalidate_region(p1addr, size);
72 break; 72 break;
73 case DMA_TO_DEVICE: /* writeback only */ 73 case DMA_TO_DEVICE: /* writeback only */
74 dma_cache_wback(p1addr, size); 74 __flush_wback_region(p1addr, size);
75 break; 75 break;
76 case DMA_BIDIRECTIONAL: /* writeback and invalidate */ 76 case DMA_BIDIRECTIONAL: /* writeback and invalidate */
77 dma_cache_wback_inv(p1addr, size); 77 __flush_purge_region(p1addr, size);
78 break; 78 break;
79 default: 79 default:
80 BUG(); 80 BUG();
diff --git a/arch/sh64/mm/consistent.c b/arch/sh64/mm/consistent.c
index 8875a2a40da7..c439620402cb 100644
--- a/arch/sh64/mm/consistent.c
+++ b/arch/sh64/mm/consistent.c
@@ -11,6 +11,7 @@
11#include <linux/mm.h> 11#include <linux/mm.h>
12#include <linux/string.h> 12#include <linux/string.h>
13#include <linux/pci.h> 13#include <linux/pci.h>
14#include <linux/dma-mapping.h>
14#include <linux/module.h> 15#include <linux/module.h>
15#include <asm/io.h> 16#include <asm/io.h>
16 17
@@ -32,7 +33,7 @@ void *consistent_alloc(struct pci_dev *hwdev, size_t size,
32 if (vp != NULL) { 33 if (vp != NULL) {
33 memset(vp, 0, size); 34 memset(vp, 0, size);
34 *dma_handle = virt_to_phys(ret); 35 *dma_handle = virt_to_phys(ret);
35 dma_cache_wback_inv((unsigned long)ret, size); 36 dma_cache_sync(NULL, ret, size, DMA_BIDIRECTIONAL);
36 } 37 }
37 38
38 return vp; 39 return vp;
diff --git a/include/asm-alpha/io.h b/include/asm-alpha/io.h
index ab5b60dcef19..38f18cf18c9d 100644
--- a/include/asm-alpha/io.h
+++ b/include/asm-alpha/io.h
@@ -551,12 +551,6 @@ extern void outsl (unsigned long port, const void *src, unsigned long count);
551#endif 551#endif
552#define RTC_ALWAYS_BCD 0 552#define RTC_ALWAYS_BCD 0
553 553
554/* Nothing to do */
555
556#define dma_cache_inv(_start,_size) do { } while (0)
557#define dma_cache_wback(_start,_size) do { } while (0)
558#define dma_cache_wback_inv(_start,_size) do { } while (0)
559
560/* 554/*
561 * Some mucking forons use if[n]def writeq to check if platform has it. 555 * Some mucking forons use if[n]def writeq to check if platform has it.
562 * It's a bloody bad idea and we probably want ARCH_HAS_WRITEQ for them 556 * It's a bloody bad idea and we probably want ARCH_HAS_WRITEQ for them
diff --git a/include/asm-avr32/io.h b/include/asm-avr32/io.h
index 64bb92bb6773..8be7ea9c9047 100644
--- a/include/asm-avr32/io.h
+++ b/include/asm-avr32/io.h
@@ -298,13 +298,6 @@ extern void __iounmap(void __iomem *addr);
298#define ioport_map(port, nr) ioremap(port, nr) 298#define ioport_map(port, nr) ioremap(port, nr)
299#define ioport_unmap(port) iounmap(port) 299#define ioport_unmap(port) iounmap(port)
300 300
301#define dma_cache_wback_inv(_start, _size) \
302 flush_dcache_region(_start, _size)
303#define dma_cache_inv(_start, _size) \
304 invalidate_dcache_region(_start, _size)
305#define dma_cache_wback(_start, _size) \
306 clean_dcache_region(_start, _size)
307
308/* 301/*
309 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 302 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
310 * access 303 * access
diff --git a/include/asm-blackfin/io.h b/include/asm-blackfin/io.h
index 525179bf43d7..d1d2e6be3b59 100644
--- a/include/asm-blackfin/io.h
+++ b/include/asm-blackfin/io.h
@@ -183,10 +183,6 @@ extern void blkfin_inv_cache_all(void);
183#define ioport_map(port, nr) ((void __iomem*)(port)) 183#define ioport_map(port, nr) ((void __iomem*)(port))
184#define ioport_unmap(addr) 184#define ioport_unmap(addr)
185 185
186#define dma_cache_inv(_start,_size) do { blkfin_inv_cache_all();} while (0)
187#define dma_cache_wback(_start,_size) do { } while (0)
188#define dma_cache_wback_inv(_start,_size) do { blkfin_inv_cache_all();} while (0)
189
190/* Pages to physical address... */ 186/* Pages to physical address... */
191#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT) 187#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
192#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT) 188#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT)
diff --git a/include/asm-h8300/io.h b/include/asm-h8300/io.h
index 91b7487cb7ae..7543a57b4ea1 100644
--- a/include/asm-h8300/io.h
+++ b/include/asm-h8300/io.h
@@ -264,12 +264,6 @@ static inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size
264 264
265extern void iounmap(void *addr); 265extern void iounmap(void *addr);
266 266
267/* Nothing to do */
268
269#define dma_cache_inv(_start,_size) do { } while (0)
270#define dma_cache_wback(_start,_size) do { } while (0)
271#define dma_cache_wback_inv(_start,_size) do { } while (0)
272
273/* H8/300 internal I/O functions */ 267/* H8/300 internal I/O functions */
274static __inline__ unsigned char ctrl_inb(unsigned long addr) 268static __inline__ unsigned char ctrl_inb(unsigned long addr)
275{ 269{
diff --git a/include/asm-ia64/io.h b/include/asm-ia64/io.h
index eb17a8692967..4ebed77aa472 100644
--- a/include/asm-ia64/io.h
+++ b/include/asm-ia64/io.h
@@ -435,10 +435,6 @@ extern void memcpy_fromio(void *dst, const volatile void __iomem *src, long n);
435extern void memcpy_toio(volatile void __iomem *dst, const void *src, long n); 435extern void memcpy_toio(volatile void __iomem *dst, const void *src, long n);
436extern void memset_io(volatile void __iomem *s, int c, long n); 436extern void memset_io(volatile void __iomem *s, int c, long n);
437 437
438#define dma_cache_inv(_start,_size) do { } while (0)
439#define dma_cache_wback(_start,_size) do { } while (0)
440#define dma_cache_wback_inv(_start,_size) do { } while (0)
441
442# endif /* __KERNEL__ */ 438# endif /* __KERNEL__ */
443 439
444/* 440/*
diff --git a/include/asm-m68k/io.h b/include/asm-m68k/io.h
index 47bb9cf107b7..baf4f9b8acfc 100644
--- a/include/asm-m68k/io.h
+++ b/include/asm-m68k/io.h
@@ -384,12 +384,6 @@ static inline void __iomem *ioremap_fullcache(unsigned long physaddr,
384 return __ioremap(physaddr, size, IOMAP_FULL_CACHING); 384 return __ioremap(physaddr, size, IOMAP_FULL_CACHING);
385} 385}
386 386
387
388/* m68k caches aren't DMA coherent */
389extern void dma_cache_wback_inv(unsigned long start, unsigned long size);
390extern void dma_cache_wback(unsigned long start, unsigned long size);
391extern void dma_cache_inv(unsigned long start, unsigned long size);
392
393static inline void memset_io(volatile void __iomem *addr, unsigned char val, int count) 387static inline void memset_io(volatile void __iomem *addr, unsigned char val, int count)
394{ 388{
395 __builtin_memset((void __force *) addr, val, count); 389 __builtin_memset((void __force *) addr, val, count);
diff --git a/include/asm-m68knommu/io.h b/include/asm-m68knommu/io.h
index 8df4cee2a0cd..653d9b2d7ddf 100644
--- a/include/asm-m68knommu/io.h
+++ b/include/asm-m68knommu/io.h
@@ -165,12 +165,6 @@ static inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size
165 165
166extern void iounmap(void *addr); 166extern void iounmap(void *addr);
167 167
168/* Nothing to do */
169
170#define dma_cache_inv(_start,_size) do { } while (0)
171#define dma_cache_wback(_start,_size) do { } while (0)
172#define dma_cache_wback_inv(_start,_size) do { } while (0)
173
174/* Pages to physical address... */ 168/* Pages to physical address... */
175#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT) 169#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
176#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT) 170#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT)
diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h
index 2cd8323c8586..e62058b0d28c 100644
--- a/include/asm-mips/io.h
+++ b/include/asm-mips/io.h
@@ -554,6 +554,8 @@ static inline void memcpy_toio(volatile void __iomem *dst, const void *src, int
554 * caches. Dirty lines of the caches may be written back or simply 554 * caches. Dirty lines of the caches may be written back or simply
555 * be discarded. This operation is necessary before dma operations 555 * be discarded. This operation is necessary before dma operations
556 * to the memory. 556 * to the memory.
557 *
558 * This API used to be exported; it now is for arch code internal use only.
557 */ 559 */
558#ifdef CONFIG_DMA_NONCOHERENT 560#ifdef CONFIG_DMA_NONCOHERENT
559 561
diff --git a/include/asm-parisc/io.h b/include/asm-parisc/io.h
index 4cc9bcec0564..95f00e11c7b4 100644
--- a/include/asm-parisc/io.h
+++ b/include/asm-parisc/io.h
@@ -270,11 +270,6 @@ extern void outsl (unsigned long port, const void *src, unsigned long count);
270/* IO Port space is : BBiiii where BB is HBA number. */ 270/* IO Port space is : BBiiii where BB is HBA number. */
271#define IO_SPACE_LIMIT 0x00ffffff 271#define IO_SPACE_LIMIT 0x00ffffff
272 272
273
274#define dma_cache_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0)
275#define dma_cache_wback(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0)
276#define dma_cache_wback_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0)
277
278/* PA machines have an MM I/O space from 0xf0000000-0xffffffff in 32 273/* PA machines have an MM I/O space from 0xf0000000-0xffffffff in 32
279 * bit mode and from 0xfffffffff0000000-0xfffffffffffffff in 64 bit 274 * bit mode and from 0xfffffffff0000000-0xfffffffffffffff in 64 bit
280 * mode (essentially just sign extending. This macro takes in a 32 275 * mode (essentially just sign extending. This macro takes in a 32
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h
index 0d0589ef8ea6..bf14ab4ef4c9 100644
--- a/include/asm-powerpc/io.h
+++ b/include/asm-powerpc/io.h
@@ -498,23 +498,6 @@ static inline void name at \
498#define writeq writeq 498#define writeq writeq
499#endif 499#endif
500 500
501#ifdef CONFIG_NOT_COHERENT_CACHE
502
503#define dma_cache_inv(_start,_size) \
504 invalidate_dcache_range(_start, (_start + _size))
505#define dma_cache_wback(_start,_size) \
506 clean_dcache_range(_start, (_start + _size))
507#define dma_cache_wback_inv(_start,_size) \
508 flush_dcache_range(_start, (_start + _size))
509
510#else /* CONFIG_NOT_COHERENT_CACHE */
511
512#define dma_cache_inv(_start,_size) do { } while (0)
513#define dma_cache_wback(_start,_size) do { } while (0)
514#define dma_cache_wback_inv(_start,_size) do { } while (0)
515
516#endif /* !CONFIG_NOT_COHERENT_CACHE */
517
518/* 501/*
519 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 502 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
520 * access 503 * access
diff --git a/include/asm-ppc/io.h b/include/asm-ppc/io.h
index 8f58231a8bc6..a0d409a5d80f 100644
--- a/include/asm-ppc/io.h
+++ b/include/asm-ppc/io.h
@@ -478,23 +478,6 @@ extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
478#include <asm/mpc8260_pci9.h> 478#include <asm/mpc8260_pci9.h>
479#endif 479#endif
480 480
481#ifdef CONFIG_NOT_COHERENT_CACHE
482
483#define dma_cache_inv(_start,_size) \
484 invalidate_dcache_range(_start, (_start + _size))
485#define dma_cache_wback(_start,_size) \
486 clean_dcache_range(_start, (_start + _size))
487#define dma_cache_wback_inv(_start,_size) \
488 flush_dcache_range(_start, (_start + _size))
489
490#else
491
492#define dma_cache_inv(_start,_size) do { } while (0)
493#define dma_cache_wback(_start,_size) do { } while (0)
494#define dma_cache_wback_inv(_start,_size) do { } while (0)
495
496#endif
497
498/* 481/*
499 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 482 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
500 * access 483 * access
diff --git a/include/asm-sh/floppy.h b/include/asm-sh/floppy.h
index 942ade98757b..59fbfdc90dfb 100644
--- a/include/asm-sh/floppy.h
+++ b/include/asm-sh/floppy.h
@@ -213,7 +213,7 @@ static int hard_dma_setup(char *addr, unsigned long size, int mode, int io)
213 } 213 }
214#endif 214#endif
215 215
216 dma_cache_wback_inv(addr, size); 216 __flush_purge_region(addr, size);
217 217
218 /* actual, physical DMA */ 218 /* actual, physical DMA */
219 doing_pdma = 0; 219 doing_pdma = 0;
diff --git a/include/asm-sh/io.h b/include/asm-sh/io.h
index 1a336cdc75fe..6ed34d8eac5f 100644
--- a/include/asm-sh/io.h
+++ b/include/asm-sh/io.h
@@ -327,31 +327,6 @@ __ioremap_mode(unsigned long offset, unsigned long size, unsigned long flags)
327 __iounmap((addr)) 327 __iounmap((addr))
328 328
329/* 329/*
330 * The caches on some architectures aren't dma-coherent and have need to
331 * handle this in software. There are three types of operations that
332 * can be applied to dma buffers.
333 *
334 * - dma_cache_wback_inv(start, size) makes caches and RAM coherent by
335 * writing the content of the caches back to memory, if necessary.
336 * The function also invalidates the affected part of the caches as
337 * necessary before DMA transfers from outside to memory.
338 * - dma_cache_inv(start, size) invalidates the affected parts of the
339 * caches. Dirty lines of the caches may be written back or simply
340 * be discarded. This operation is necessary before dma operations
341 * to the memory.
342 * - dma_cache_wback(start, size) writes back any dirty lines but does
343 * not invalidate the cache. This can be used before DMA reads from
344 * memory,
345 */
346
347#define dma_cache_wback_inv(_start,_size) \
348 __flush_purge_region(_start,_size)
349#define dma_cache_inv(_start,_size) \
350 __flush_invalidate_region(_start,_size)
351#define dma_cache_wback(_start,_size) \
352 __flush_wback_region(_start,_size)
353
354/*
355 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 330 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
356 * access 331 * access
357 */ 332 */
diff --git a/include/asm-sh64/dma-mapping.h b/include/asm-sh64/dma-mapping.h
index de4309960207..e661857f98dc 100644
--- a/include/asm-sh64/dma-mapping.h
+++ b/include/asm-sh64/dma-mapping.h
@@ -42,7 +42,11 @@ static inline void dma_free_coherent(struct device *dev, size_t size,
42static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size, 42static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
43 enum dma_data_direction dir) 43 enum dma_data_direction dir)
44{ 44{
45 dma_cache_wback_inv((unsigned long)vaddr, size); 45 unsigned long s = (unsigned long) vaddr & L1_CACHE_ALIGN_MASK;
46 unsigned long e = (vaddr + size) & L1_CACHE_ALIGN_MASK;
47
48 for (; s <= e; s += L1_CACHE_BYTES)
49 asm volatile ("ocbp %0, 0" : : "r" (s));
46} 50}
47 51
48static inline dma_addr_t dma_map_single(struct device *dev, 52static inline dma_addr_t dma_map_single(struct device *dev,
diff --git a/include/asm-sh64/io.h b/include/asm-sh64/io.h
index 3de3ad99f457..7bd7314d38c2 100644
--- a/include/asm-sh64/io.h
+++ b/include/asm-sh64/io.h
@@ -182,54 +182,6 @@ unsigned long onchip_remap(unsigned long addr, unsigned long size, const char* n
182extern void onchip_unmap(unsigned long vaddr); 182extern void onchip_unmap(unsigned long vaddr);
183 183
184/* 184/*
185 * The caches on some architectures aren't dma-coherent and have need to
186 * handle this in software. There are three types of operations that
187 * can be applied to dma buffers.
188 *
189 * - dma_cache_wback_inv(start, size) makes caches and RAM coherent by
190 * writing the content of the caches back to memory, if necessary.
191 * The function also invalidates the affected part of the caches as
192 * necessary before DMA transfers from outside to memory.
193 * - dma_cache_inv(start, size) invalidates the affected parts of the
194 * caches. Dirty lines of the caches may be written back or simply
195 * be discarded. This operation is necessary before dma operations
196 * to the memory.
197 * - dma_cache_wback(start, size) writes back any dirty lines but does
198 * not invalidate the cache. This can be used before DMA reads from
199 * memory,
200 */
201
202static __inline__ void dma_cache_wback_inv (unsigned long start, unsigned long size)
203{
204 unsigned long s = start & L1_CACHE_ALIGN_MASK;
205 unsigned long e = (start + size) & L1_CACHE_ALIGN_MASK;
206
207 for (; s <= e; s += L1_CACHE_BYTES)
208 asm volatile ("ocbp %0, 0" : : "r" (s));
209}
210
211static __inline__ void dma_cache_inv (unsigned long start, unsigned long size)
212{
213 // Note that caller has to be careful with overzealous
214 // invalidation should there be partial cache lines at the extremities
215 // of the specified range
216 unsigned long s = start & L1_CACHE_ALIGN_MASK;
217 unsigned long e = (start + size) & L1_CACHE_ALIGN_MASK;
218
219 for (; s <= e; s += L1_CACHE_BYTES)
220 asm volatile ("ocbi %0, 0" : : "r" (s));
221}
222
223static __inline__ void dma_cache_wback (unsigned long start, unsigned long size)
224{
225 unsigned long s = start & L1_CACHE_ALIGN_MASK;
226 unsigned long e = (start + size) & L1_CACHE_ALIGN_MASK;
227
228 for (; s <= e; s += L1_CACHE_BYTES)
229 asm volatile ("ocbwb %0, 0" : : "r" (s));
230}
231
232/*
233 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 185 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
234 * access 186 * access
235 */ 187 */
diff --git a/include/asm-sparc/io.h b/include/asm-sparc/io.h
index c23e74a0eaa8..243bf8e9a058 100644
--- a/include/asm-sparc/io.h
+++ b/include/asm-sparc/io.h
@@ -310,13 +310,6 @@ extern void sbus_iounmap(volatile void __iomem *vaddr, unsigned long size);
310#define RTC_PORT(x) (rtc_port + (x)) 310#define RTC_PORT(x) (rtc_port + (x))
311#define RTC_ALWAYS_BCD 0 311#define RTC_ALWAYS_BCD 0
312 312
313/* Nothing to do */
314/* P3: Only IDE DMA may need these. XXX Verify that it still does... */
315
316#define dma_cache_inv(_start,_size) do { } while (0)
317#define dma_cache_wback(_start,_size) do { } while (0)
318#define dma_cache_wback_inv(_start,_size) do { } while (0)
319
320#endif 313#endif
321 314
322#define __ARCH_HAS_NO_PAGE_ZERO_MAPPED 1 315#define __ARCH_HAS_NO_PAGE_ZERO_MAPPED 1
diff --git a/include/asm-sparc64/io.h b/include/asm-sparc64/io.h
index 9565a892801e..cd7ef3097ac2 100644
--- a/include/asm-sparc64/io.h
+++ b/include/asm-sparc64/io.h
@@ -474,12 +474,6 @@ extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
474#define sbus_iounmap(__addr, __size) \ 474#define sbus_iounmap(__addr, __size) \
475 release_region((unsigned long)(__addr), (__size)) 475 release_region((unsigned long)(__addr), (__size))
476 476
477/* Nothing to do */
478
479#define dma_cache_inv(_start,_size) do { } while (0)
480#define dma_cache_wback(_start,_size) do { } while (0)
481#define dma_cache_wback_inv(_start,_size) do { } while (0)
482
483/* 477/*
484 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 478 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
485 * access 479 * access
diff --git a/include/asm-x86/io_32.h b/include/asm-x86/io_32.h
index e8e0bd641120..4ea7b1ad3c1d 100644
--- a/include/asm-x86/io_32.h
+++ b/include/asm-x86/io_32.h
@@ -237,18 +237,9 @@ static inline void flush_write_buffers(void)
237 __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory"); 237 __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory");
238} 238}
239 239
240#define dma_cache_inv(_start,_size) flush_write_buffers()
241#define dma_cache_wback(_start,_size) flush_write_buffers()
242#define dma_cache_wback_inv(_start,_size) flush_write_buffers()
243
244#else 240#else
245 241
246/* Nothing to do */ 242#define flush_write_buffers() do { } while (0)
247
248#define dma_cache_inv(_start,_size) do { } while (0)
249#define dma_cache_wback(_start,_size) do { } while (0)
250#define dma_cache_wback_inv(_start,_size) do { } while (0)
251#define flush_write_buffers()
252 243
253#endif 244#endif
254 245
diff --git a/include/asm-x86/io_64.h b/include/asm-x86/io_64.h
index 7475095c5061..a037b0794332 100644
--- a/include/asm-x86/io_64.h
+++ b/include/asm-x86/io_64.h
@@ -249,12 +249,6 @@ void memset_io(volatile void __iomem *a, int b, size_t c);
249 */ 249 */
250#define __ISA_IO_base ((char __iomem *)(PAGE_OFFSET)) 250#define __ISA_IO_base ((char __iomem *)(PAGE_OFFSET))
251 251
252/* Nothing to do */
253
254#define dma_cache_inv(_start,_size) do { } while (0)
255#define dma_cache_wback(_start,_size) do { } while (0)
256#define dma_cache_wback_inv(_start,_size) do { } while (0)
257
258#define flush_write_buffers() 252#define flush_write_buffers()
259 253
260extern int iommu_bio_merge; 254extern int iommu_bio_merge;