xref: /OK3568_Linux_fs/kernel/arch/mips/include/asm/bcache.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * This file is subject to the terms and conditions of the GNU General Public
3*4882a593Smuzhiyun  * License.  See the file "COPYING" in the main directory of this archive
4*4882a593Smuzhiyun  * for more details.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright (c) 1997, 1999 by Ralf Baechle
7*4882a593Smuzhiyun  * Copyright (c) 1999 Silicon Graphics, Inc.
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun #ifndef _ASM_BCACHE_H
10*4882a593Smuzhiyun #define _ASM_BCACHE_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <linux/types.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* Some R4000 / R4400 / R4600 / R5000 machines may have a non-dma-coherent,
15*4882a593Smuzhiyun    chipset implemented caches.	On machines with other CPUs the CPU does the
16*4882a593Smuzhiyun    cache thing itself. */
17*4882a593Smuzhiyun struct bcache_ops {
18*4882a593Smuzhiyun 	void (*bc_enable)(void);
19*4882a593Smuzhiyun 	void (*bc_disable)(void);
20*4882a593Smuzhiyun 	void (*bc_wback_inv)(unsigned long page, unsigned long size);
21*4882a593Smuzhiyun 	void (*bc_inv)(unsigned long page, unsigned long size);
22*4882a593Smuzhiyun 	void (*bc_prefetch_enable)(void);
23*4882a593Smuzhiyun 	void (*bc_prefetch_disable)(void);
24*4882a593Smuzhiyun 	bool (*bc_prefetch_is_enabled)(void);
25*4882a593Smuzhiyun };
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun extern void indy_sc_init(void);
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #ifdef CONFIG_BOARD_SCACHE
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun extern struct bcache_ops *bcops;
32*4882a593Smuzhiyun 
bc_enable(void)33*4882a593Smuzhiyun static inline void bc_enable(void)
34*4882a593Smuzhiyun {
35*4882a593Smuzhiyun 	bcops->bc_enable();
36*4882a593Smuzhiyun }
37*4882a593Smuzhiyun 
bc_disable(void)38*4882a593Smuzhiyun static inline void bc_disable(void)
39*4882a593Smuzhiyun {
40*4882a593Smuzhiyun 	bcops->bc_disable();
41*4882a593Smuzhiyun }
42*4882a593Smuzhiyun 
bc_wback_inv(unsigned long page,unsigned long size)43*4882a593Smuzhiyun static inline void bc_wback_inv(unsigned long page, unsigned long size)
44*4882a593Smuzhiyun {
45*4882a593Smuzhiyun 	bcops->bc_wback_inv(page, size);
46*4882a593Smuzhiyun }
47*4882a593Smuzhiyun 
bc_inv(unsigned long page,unsigned long size)48*4882a593Smuzhiyun static inline void bc_inv(unsigned long page, unsigned long size)
49*4882a593Smuzhiyun {
50*4882a593Smuzhiyun 	bcops->bc_inv(page, size);
51*4882a593Smuzhiyun }
52*4882a593Smuzhiyun 
bc_prefetch_enable(void)53*4882a593Smuzhiyun static inline void bc_prefetch_enable(void)
54*4882a593Smuzhiyun {
55*4882a593Smuzhiyun 	if (bcops->bc_prefetch_enable)
56*4882a593Smuzhiyun 		bcops->bc_prefetch_enable();
57*4882a593Smuzhiyun }
58*4882a593Smuzhiyun 
bc_prefetch_disable(void)59*4882a593Smuzhiyun static inline void bc_prefetch_disable(void)
60*4882a593Smuzhiyun {
61*4882a593Smuzhiyun 	if (bcops->bc_prefetch_disable)
62*4882a593Smuzhiyun 		bcops->bc_prefetch_disable();
63*4882a593Smuzhiyun }
64*4882a593Smuzhiyun 
bc_prefetch_is_enabled(void)65*4882a593Smuzhiyun static inline bool bc_prefetch_is_enabled(void)
66*4882a593Smuzhiyun {
67*4882a593Smuzhiyun 	if (bcops->bc_prefetch_is_enabled)
68*4882a593Smuzhiyun 		return bcops->bc_prefetch_is_enabled();
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun 	return false;
71*4882a593Smuzhiyun }
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun #else /* !defined(CONFIG_BOARD_SCACHE) */
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun /* Not R4000 / R4400 / R4600 / R5000.  */
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #define bc_enable() do { } while (0)
78*4882a593Smuzhiyun #define bc_disable() do { } while (0)
79*4882a593Smuzhiyun #define bc_wback_inv(page, size) do { } while (0)
80*4882a593Smuzhiyun #define bc_inv(page, size) do { } while (0)
81*4882a593Smuzhiyun #define bc_prefetch_enable() do { } while (0)
82*4882a593Smuzhiyun #define bc_prefetch_disable() do { } while (0)
83*4882a593Smuzhiyun #define bc_prefetch_is_enabled() 0
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #endif /* !defined(CONFIG_BOARD_SCACHE) */
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun #endif /* _ASM_BCACHE_H */
88