]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-m68k/cacheflush.h
V4L/DVB (4832): Fix uninitialised variable in dvb_frontend_swzigzag
[linux-2.6-omap-h63xx.git] / include / asm-m68k / cacheflush.h
index e4773946f10dccfb857f5717481c144f9ced12fe..24d3ff44913570cbccb4632b83bf5e3c37747299 100644 (file)
@@ -3,26 +3,30 @@
 
 #include <linux/mm.h>
 
+/* cache code */
+#define FLUSH_I_AND_D  (0x00000808)
+#define FLUSH_I                (0x00000008)
+
 /*
  * Cache handling functions
  */
 
-#define flush_icache()                                         \
-({                                                             \
-       if (CPU_IS_040_OR_060)                                  \
-               __asm__ __volatile__("nop\n\t"                  \
-                                    ".chip 68040\n\t"          \
-                                    "cinva %%ic\n\t"           \
-                                    ".chip 68k" : );           \
-       else {                                                  \
-               unsigned long _tmp;                             \
-               __asm__ __volatile__("movec %%cacr,%0\n\t"      \
-                                    "orw %1,%0\n\t"            \
-                                    "movec %0,%%cacr"          \
-                                    : "=&d" (_tmp)             \
-                                    : "id" (FLUSH_I)); \
-       }                                                       \
-})
+static inline void flush_icache(void)
+{
+       if (CPU_IS_040_OR_060)
+               asm volatile (  "nop\n"
+                       "       .chip   68040\n"
+                       "       cpusha  %bc\n"
+                       "       .chip   68k");
+       else {
+               unsigned long tmp;
+               asm volatile (  "movec  %%cacr,%0\n"
+                       "       or.w    %1,%0\n"
+                       "       movec   %0,%%cacr"
+                       : "=&d" (tmp)
+                       : "id" (FLUSH_I));
+       }
+}
 
 /*
  * invalidate the cache for the specified memory range.
@@ -43,10 +47,6 @@ extern void cache_push(unsigned long paddr, int len);
  */
 extern void cache_push_v(unsigned long vaddr, int len);
 
-/* cache code */
-#define FLUSH_I_AND_D  (0x00000808)
-#define FLUSH_I                (0x00000008)
-
 /* This is needed whenever the virtual mapping of the current
    process changes.  */
 #define __flush_cache_all()                                    \
@@ -130,20 +130,25 @@ static inline void __flush_page_to_ram(void *vaddr)
 #define flush_dcache_mmap_lock(mapping)                do { } while (0)
 #define flush_dcache_mmap_unlock(mapping)      do { } while (0)
 #define flush_icache_page(vma, page)   __flush_page_to_ram(page_address(page))
-#define flush_icache_user_range(vma,pg,adr,len)        do { } while (0)
-
-#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
-       do {                                                    \
-               flush_cache_page(vma, vaddr, page_to_pfn(page));\
-               memcpy(dst, src, len);                          \
-       } while (0)
-
-#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
-       do {                                                    \
-               flush_cache_page(vma, vaddr, page_to_pfn(page));\
-               memcpy(dst, src, len);                          \
-       } while (0)
 
+extern void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,
+                                   unsigned long addr, int len);
 extern void flush_icache_range(unsigned long address, unsigned long endaddr);
 
+static inline void copy_to_user_page(struct vm_area_struct *vma,
+                                    struct page *page, unsigned long vaddr,
+                                    void *dst, void *src, int len)
+{
+       flush_cache_page(vma, vaddr, page_to_pfn(page));
+       memcpy(dst, src, len);
+       flush_icache_user_range(vma, page, vaddr, len);
+}
+static inline void copy_from_user_page(struct vm_area_struct *vma,
+                                      struct page *page, unsigned long vaddr,
+                                      void *dst, void *src, int len)
+{
+       flush_cache_page(vma, vaddr, page_to_pfn(page));
+       memcpy(dst, src, len);
+}
+
 #endif /* _M68K_CACHEFLUSH_H */