Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
uncached.h
Go to the documentation of this file.
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 */