Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[linux-btrfs-devel.git] / arch / arm / mm / cache-v3.S
blobc2301f226100e371e72c46cde695c186a84b240b
1 /*
2  *  linux/arch/arm/mm/cache-v3.S
3  *
4  *  Copyright (C) 1997-2002 Russell king
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10 #include <linux/linkage.h>
11 #include <linux/init.h>
12 #include <asm/page.h>
13 #include "proc-macros.S"
16  *      flush_icache_all()
17  *
18  *      Unconditionally clean and invalidate the entire icache.
19  */
20 ENTRY(v3_flush_icache_all)
21         mov     pc, lr
22 ENDPROC(v3_flush_icache_all)
25  *      flush_user_cache_all()
26  *
27  *      Invalidate all cache entries in a particular address
28  *      space.
29  *
30  *      - mm    - mm_struct describing address space
31  */
32 ENTRY(v3_flush_user_cache_all)
33         /* FALLTHROUGH */
35  *      flush_kern_cache_all()
36  *
37  *      Clean and invalidate the entire cache.
38  */
39 ENTRY(v3_flush_kern_cache_all)
40         /* FALLTHROUGH */
43  *      flush_user_cache_range(start, end, flags)
44  *
45  *      Invalidate a range of cache entries in the specified
46  *      address space.
47  *
48  *      - start - start address (may not be aligned)
49  *      - end   - end address (exclusive, may not be aligned)
50  *      - flags - vma_area_struct flags describing address space
51  */
52 ENTRY(v3_flush_user_cache_range)
53         mov     ip, #0
54         mcreq   p15, 0, ip, c7, c0, 0           @ flush ID cache
55         mov     pc, lr
58  *      coherent_kern_range(start, end)
59  *
60  *      Ensure coherency between the Icache and the Dcache in the
61  *      region described by start.  If you have non-snooping
62  *      Harvard caches, you need to implement this function.
63  *
64  *      - start  - virtual start address
65  *      - end    - virtual end address
66  */
67 ENTRY(v3_coherent_kern_range)
68         /* FALLTHROUGH */
71  *      coherent_user_range(start, end)
72  *
73  *      Ensure coherency between the Icache and the Dcache in the
74  *      region described by start.  If you have non-snooping
75  *      Harvard caches, you need to implement this function.
76  *
77  *      - start  - virtual start address
78  *      - end    - virtual end address
79  */
80 ENTRY(v3_coherent_user_range)
81         mov     pc, lr
84  *      flush_kern_dcache_area(void *page, size_t size)
85  *
86  *      Ensure no D cache aliasing occurs, either with itself or
87  *      the I cache
88  *
89  *      - addr  - kernel address
90  *      - size  - region size
91  */
92 ENTRY(v3_flush_kern_dcache_area)
93         /* FALLTHROUGH */
96  *      dma_flush_range(start, end)
97  *
98  *      Clean and invalidate the specified virtual address range.
99  *
100  *      - start  - virtual start address
101  *      - end    - virtual end address
102  */
103 ENTRY(v3_dma_flush_range)
104         mov     r0, #0
105         mcr     p15, 0, r0, c7, c0, 0           @ flush ID cache
106         mov     pc, lr
109  *      dma_unmap_area(start, size, dir)
110  *      - start - kernel virtual start address
111  *      - size  - size of region
112  *      - dir   - DMA direction
113  */
114 ENTRY(v3_dma_unmap_area)
115         teq     r2, #DMA_TO_DEVICE
116         bne     v3_dma_flush_range
117         /* FALLTHROUGH */
120  *      dma_map_area(start, size, dir)
121  *      - start - kernel virtual start address
122  *      - size  - size of region
123  *      - dir   - DMA direction
124  */
125 ENTRY(v3_dma_map_area)
126         mov     pc, lr
127 ENDPROC(v3_dma_unmap_area)
128 ENDPROC(v3_dma_map_area)
130         __INITDATA
132         @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
133         define_cache_functions v3