Merge branch 'drm-intel-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/ickle...
[pandora-kernel.git] / arch / sh / include / asm / uncached.h
1 #ifndef __ASM_SH_UNCACHED_H
2 #define __ASM_SH_UNCACHED_H
3
4 #include <linux/bug.h>
5
6 #ifdef CONFIG_UNCACHED_MAPPING
7 extern unsigned long cached_to_uncached;
8 extern unsigned long uncached_size;
9 extern unsigned long uncached_start, uncached_end;
10
11 extern int virt_addr_uncached(unsigned long kaddr);
12 extern void uncached_init(void);
13 extern void uncached_resize(unsigned long size);
14
15 /*
16  * Jump to uncached area.
17  * When handling TLB or caches, we need to do it from an uncached area.
18  */
19 #define jump_to_uncached()                      \
20 do {                                            \
21         unsigned long __dummy;                  \
22                                                 \
23         __asm__ __volatile__(                   \
24                 "mova   1f, %0\n\t"             \
25                 "add    %1, %0\n\t"             \
26                 "jmp    @%0\n\t"                \
27                 " nop\n\t"                      \
28                 ".balign 4\n"                   \
29                 "1:"                            \
30                 : "=&z" (__dummy)               \
31                 : "r" (cached_to_uncached));    \
32 } while (0)
33
34 /*
35  * Back to cached area.
36  */
37 #define back_to_cached()                                \
38 do {                                                    \
39         unsigned long __dummy;                          \
40         ctrl_barrier();                                 \
41         __asm__ __volatile__(                           \
42                 "mov.l  1f, %0\n\t"                     \
43                 "jmp    @%0\n\t"                        \
44                 " nop\n\t"                              \
45                 ".balign 4\n"                           \
46                 "1:     .long 2f\n"                     \
47                 "2:"                                    \
48                 : "=&r" (__dummy));                     \
49 } while (0)
50 #else
51 #define virt_addr_uncached(kaddr)       (0)
52 #define uncached_init()                 do { } while (0)
53 #define uncached_resize(size)           BUG()
54 #define jump_to_uncached()              do { } while (0)
55 #define back_to_cached()                do { } while (0)
56 #endif
57
58 #endif /* __ASM_SH_UNCACHED_H */