diff options
| -rw-r--r-- | arch/arm/include/asm/cacheflush.h | 38 | ||||
| -rw-r--r-- | arch/arm/include/asm/outercache.h | 61 |
2 files changed, 62 insertions, 37 deletions
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index 72da7e045c6b..0d08d4170b64 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <asm/glue.h> | 15 | #include <asm/glue.h> |
| 16 | #include <asm/shmparam.h> | 16 | #include <asm/shmparam.h> |
| 17 | #include <asm/cachetype.h> | 17 | #include <asm/cachetype.h> |
| 18 | #include <asm/outercache.h> | ||
| 18 | 19 | ||
| 19 | #define CACHE_COLOUR(vaddr) ((vaddr & (SHMLBA - 1)) >> PAGE_SHIFT) | 20 | #define CACHE_COLOUR(vaddr) ((vaddr & (SHMLBA - 1)) >> PAGE_SHIFT) |
| 20 | 21 | ||
| @@ -219,12 +220,6 @@ struct cpu_cache_fns { | |||
| 219 | void (*dma_flush_range)(const void *, const void *); | 220 | void (*dma_flush_range)(const void *, const void *); |
| 220 | }; | 221 | }; |
| 221 | 222 | ||
| 222 | struct outer_cache_fns { | ||
| 223 | void (*inv_range)(unsigned long, unsigned long); | ||
| 224 | void (*clean_range)(unsigned long, unsigned long); | ||
| 225 | void (*flush_range)(unsigned long, unsigned long); | ||
| 226 | }; | ||
| 227 | |||
| 228 | /* | 223 | /* |
| 229 | * Select the calling method | 224 | * Select the calling method |
| 230 | */ | 225 | */ |
| @@ -281,37 +276,6 @@ extern void dmac_flush_range(const void *, const void *); | |||
| 281 | 276 | ||
| 282 | #endif | 277 | #endif |
| 283 | 278 | ||
| 284 | #ifdef CONFIG_OUTER_CACHE | ||
| 285 | |||
| 286 | extern struct outer_cache_fns outer_cache; | ||
| 287 | |||
| 288 | static inline void outer_inv_range(unsigned long start, unsigned long end) | ||
| 289 | { | ||
| 290 | if (outer_cache.inv_range) | ||
| 291 | outer_cache.inv_range(start, end); | ||
| 292 | } | ||
| 293 | static inline void outer_clean_range(unsigned long start, unsigned long end) | ||
| 294 | { | ||
| 295 | if (outer_cache.clean_range) | ||
| 296 | outer_cache.clean_range(start, end); | ||
| 297 | } | ||
| 298 | static inline void outer_flush_range(unsigned long start, unsigned long end) | ||
| 299 | { | ||
| 300 | if (outer_cache.flush_range) | ||
| 301 | outer_cache.flush_range(start, end); | ||
| 302 | } | ||
| 303 | |||
| 304 | #else | ||
| 305 | |||
| 306 | static inline void outer_inv_range(unsigned long start, unsigned long end) | ||
| 307 | { } | ||
| 308 | static inline void outer_clean_range(unsigned long start, unsigned long end) | ||
| 309 | { } | ||
| 310 | static inline void outer_flush_range(unsigned long start, unsigned long end) | ||
| 311 | { } | ||
| 312 | |||
| 313 | #endif | ||
| 314 | |||
| 315 | /* | 279 | /* |
| 316 | * Copy user data from/to a page which is mapped into a different | 280 | * Copy user data from/to a page which is mapped into a different |
| 317 | * processes address space. Really, we want to allow our "user | 281 | * processes address space. Really, we want to allow our "user |
diff --git a/arch/arm/include/asm/outercache.h b/arch/arm/include/asm/outercache.h new file mode 100644 index 000000000000..c8571cbb5574 --- /dev/null +++ b/arch/arm/include/asm/outercache.h | |||
| @@ -0,0 +1,61 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/include/asm/outercache.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 ARM Ltd. | ||
| 5 | * Written by Catalin Marinas <catalin.marinas@arm.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2 as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef __ASM_OUTERCACHE_H | ||
| 22 | #define __ASM_OUTERCACHE_H | ||
| 23 | |||
| 24 | struct outer_cache_fns { | ||
| 25 | void (*inv_range)(unsigned long, unsigned long); | ||
| 26 | void (*clean_range)(unsigned long, unsigned long); | ||
| 27 | void (*flush_range)(unsigned long, unsigned long); | ||
| 28 | }; | ||
| 29 | |||
| 30 | #ifdef CONFIG_OUTER_CACHE | ||
| 31 | |||
| 32 | extern struct outer_cache_fns outer_cache; | ||
| 33 | |||
| 34 | static inline void outer_inv_range(unsigned long start, unsigned long end) | ||
| 35 | { | ||
| 36 | if (outer_cache.inv_range) | ||
| 37 | outer_cache.inv_range(start, end); | ||
| 38 | } | ||
| 39 | static inline void outer_clean_range(unsigned long start, unsigned long end) | ||
| 40 | { | ||
| 41 | if (outer_cache.clean_range) | ||
| 42 | outer_cache.clean_range(start, end); | ||
| 43 | } | ||
| 44 | static inline void outer_flush_range(unsigned long start, unsigned long end) | ||
| 45 | { | ||
| 46 | if (outer_cache.flush_range) | ||
| 47 | outer_cache.flush_range(start, end); | ||
| 48 | } | ||
| 49 | |||
| 50 | #else | ||
| 51 | |||
| 52 | static inline void outer_inv_range(unsigned long start, unsigned long end) | ||
| 53 | { } | ||
| 54 | static inline void outer_clean_range(unsigned long start, unsigned long end) | ||
| 55 | { } | ||
| 56 | static inline void outer_flush_range(unsigned long start, unsigned long end) | ||
| 57 | { } | ||
| 58 | |||
| 59 | #endif | ||
| 60 | |||
| 61 | #endif /* __ASM_OUTERCACHE_H */ | ||
