Merge branch 'upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/linville...
[linux-2.6] / include / asm-frv / tlbflush.h
1 /* tlbflush.h: TLB flushing functions
2  *
3  * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells (dhowells@redhat.com)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version
9  * 2 of the License, or (at your option) any later version.
10  */
11
12 #ifndef _ASM_TLBFLUSH_H
13 #define _ASM_TLBFLUSH_H
14
15 #include <linux/mm.h>
16 #include <asm/processor.h>
17
18 #ifdef CONFIG_MMU
19
20 #ifndef __ASSEMBLY__
21 extern void asmlinkage __flush_tlb_all(void);
22 extern void asmlinkage __flush_tlb_mm(unsigned long contextid);
23 extern void asmlinkage __flush_tlb_page(unsigned long contextid, unsigned long start);
24 extern void asmlinkage __flush_tlb_range(unsigned long contextid,
25                                          unsigned long start, unsigned long end);
26 #endif /* !__ASSEMBLY__ */
27
28 #define flush_tlb_all()                         \
29 do {                                            \
30         preempt_disable();                      \
31         __flush_tlb_all();                      \
32         preempt_enable();                       \
33 } while(0)
34
35 #define flush_tlb_mm(mm)                        \
36 do {                                            \
37         preempt_disable();                      \
38         __flush_tlb_mm((mm)->context.id);       \
39         preempt_enable();                       \
40 } while(0)
41
42 #define flush_tlb_range(vma,start,end)                                  \
43 do {                                                                    \
44         preempt_disable();                                              \
45         __flush_tlb_range((vma)->vm_mm->context.id, start, end);        \
46         preempt_enable();                                               \
47 } while(0)
48
49 #define flush_tlb_page(vma,addr)                                \
50 do {                                                            \
51         preempt_disable();                                      \
52         __flush_tlb_page((vma)->vm_mm->context.id, addr);       \
53         preempt_enable();                                       \
54 } while(0)
55
56
57 #define __flush_tlb_global()                    flush_tlb_all()
58 #define flush_tlb()                             flush_tlb_all()
59 #define flush_tlb_kernel_range(start, end)      flush_tlb_all()
60 #define flush_tlb_pgtables(mm,start,end) \
61         asm volatile("movgs %0,scr0 ! movgs %0,scr1" :: "r"(ULONG_MAX) : "memory");
62
63 #else
64
65 #define flush_tlb()                             BUG()
66 #define flush_tlb_all()                         BUG()
67 #define flush_tlb_mm(mm)                        BUG()
68 #define flush_tlb_page(vma,addr)                BUG()
69 #define flush_tlb_range(mm,start,end)           BUG()
70 #define flush_tlb_pgtables(mm,start,end)        BUG()
71 #define flush_tlb_kernel_range(start, end)      BUG()
72
73 #endif
74
75
76 #endif /* _ASM_TLBFLUSH_H */