aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/include/asm/cacheflush_32.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc/include/asm/cacheflush_32.h')
-rw-r--r--arch/sparc/include/asm/cacheflush_32.h82
1 files changed, 55 insertions, 27 deletions
diff --git a/arch/sparc/include/asm/cacheflush_32.h b/arch/sparc/include/asm/cacheflush_32.h
index bb014c24f31..2e468773f25 100644
--- a/arch/sparc/include/asm/cacheflush_32.h
+++ b/arch/sparc/include/asm/cacheflush_32.h
@@ -1,18 +1,56 @@
1#ifndef _SPARC_CACHEFLUSH_H 1#ifndef _SPARC_CACHEFLUSH_H
2#define _SPARC_CACHEFLUSH_H 2#define _SPARC_CACHEFLUSH_H
3 3
4#include <asm/cachetlb_32.h> 4#include <linux/mm.h> /* Common for other includes */
5 5// #include <linux/kernel.h> from pgalloc.h
6#define flush_cache_all() \ 6// #include <linux/sched.h> from pgalloc.h
7 sparc32_cachetlb_ops->cache_all() 7
8#define flush_cache_mm(mm) \ 8// #include <asm/page.h>
9 sparc32_cachetlb_ops->cache_mm(mm) 9#include <asm/btfixup.h>
10#define flush_cache_dup_mm(mm) \ 10
11 sparc32_cachetlb_ops->cache_mm(mm) 11/*
12#define flush_cache_range(vma,start,end) \ 12 * Fine grained cache flushing.
13 sparc32_cachetlb_ops->cache_range(vma, start, end) 13 */
14#define flush_cache_page(vma,addr,pfn) \ 14#ifdef CONFIG_SMP
15 sparc32_cachetlb_ops->cache_page(vma, addr) 15
16BTFIXUPDEF_CALL(void, local_flush_cache_all, void)
17BTFIXUPDEF_CALL(void, local_flush_cache_mm, struct mm_struct *)
18BTFIXUPDEF_CALL(void, local_flush_cache_range, struct vm_area_struct *, unsigned long, unsigned long)
19BTFIXUPDEF_CALL(void, local_flush_cache_page, struct vm_area_struct *, unsigned long)
20
21#define local_flush_cache_all() BTFIXUP_CALL(local_flush_cache_all)()
22#define local_flush_cache_mm(mm) BTFIXUP_CALL(local_flush_cache_mm)(mm)
23#define local_flush_cache_range(vma,start,end) BTFIXUP_CALL(local_flush_cache_range)(vma,start,end)
24#define local_flush_cache_page(vma,addr) BTFIXUP_CALL(local_flush_cache_page)(vma,addr)
25
26BTFIXUPDEF_CALL(void, local_flush_page_to_ram, unsigned long)
27BTFIXUPDEF_CALL(void, local_flush_sig_insns, struct mm_struct *, unsigned long)
28
29#define local_flush_page_to_ram(addr) BTFIXUP_CALL(local_flush_page_to_ram)(addr)
30#define local_flush_sig_insns(mm,insn_addr) BTFIXUP_CALL(local_flush_sig_insns)(mm,insn_addr)
31
32extern void smp_flush_cache_all(void);
33extern void smp_flush_cache_mm(struct mm_struct *mm);
34extern void smp_flush_cache_range(struct vm_area_struct *vma,
35 unsigned long start,
36 unsigned long end);
37extern void smp_flush_cache_page(struct vm_area_struct *vma, unsigned long page);
38
39extern void smp_flush_page_to_ram(unsigned long page);
40extern void smp_flush_sig_insns(struct mm_struct *mm, unsigned long insn_addr);
41
42#endif /* CONFIG_SMP */
43
44BTFIXUPDEF_CALL(void, flush_cache_all, void)
45BTFIXUPDEF_CALL(void, flush_cache_mm, struct mm_struct *)
46BTFIXUPDEF_CALL(void, flush_cache_range, struct vm_area_struct *, unsigned long, unsigned long)
47BTFIXUPDEF_CALL(void, flush_cache_page, struct vm_area_struct *, unsigned long)
48
49#define flush_cache_all() BTFIXUP_CALL(flush_cache_all)()
50#define flush_cache_mm(mm) BTFIXUP_CALL(flush_cache_mm)(mm)
51#define flush_cache_dup_mm(mm) BTFIXUP_CALL(flush_cache_mm)(mm)
52#define flush_cache_range(vma,start,end) BTFIXUP_CALL(flush_cache_range)(vma,start,end)
53#define flush_cache_page(vma,addr,pfn) BTFIXUP_CALL(flush_cache_page)(vma,addr)
16#define flush_icache_range(start, end) do { } while (0) 54#define flush_icache_range(start, end) do { } while (0)
17#define flush_icache_page(vma, pg) do { } while (0) 55#define flush_icache_page(vma, pg) do { } while (0)
18 56
@@ -29,12 +67,11 @@
29 memcpy(dst, src, len); \ 67 memcpy(dst, src, len); \
30 } while (0) 68 } while (0)
31 69
32#define __flush_page_to_ram(addr) \ 70BTFIXUPDEF_CALL(void, __flush_page_to_ram, unsigned long)
33 sparc32_cachetlb_ops->page_to_ram(addr) 71BTFIXUPDEF_CALL(void, flush_sig_insns, struct mm_struct *, unsigned long)
34#define flush_sig_insns(mm,insn_addr) \ 72
35 sparc32_cachetlb_ops->sig_insns(mm, insn_addr) 73#define __flush_page_to_ram(addr) BTFIXUP_CALL(__flush_page_to_ram)(addr)
36#define flush_page_for_dma(addr) \ 74#define flush_sig_insns(mm,insn_addr) BTFIXUP_CALL(flush_sig_insns)(mm,insn_addr)
37 sparc32_cachetlb_ops->page_for_dma(addr)
38 75
39extern void sparc_flush_page_to_ram(struct page *page); 76extern void sparc_flush_page_to_ram(struct page *page);
40 77
@@ -46,13 +83,4 @@ extern void sparc_flush_page_to_ram(struct page *page);
46#define flush_cache_vmap(start, end) flush_cache_all() 83#define flush_cache_vmap(start, end) flush_cache_all()
47#define flush_cache_vunmap(start, end) flush_cache_all() 84#define flush_cache_vunmap(start, end) flush_cache_all()
48 85
49/* When a context switch happens we must flush all user windows so that
50 * the windows of the current process are flushed onto its stack. This
51 * way the windows are all clean for the next process and the stack
52 * frames are up to date.
53 */
54extern void flush_user_windows(void);
55extern void kill_user_windows(void);
56extern void flushw_all(void);
57
58#endif /* _SPARC_CACHEFLUSH_H */ 86#endif /* _SPARC_CACHEFLUSH_H */