1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2022-11-09     RT-Thread    The first version
9  */
10 #ifndef __CACHE_H__
11 #define __CACHE_H__
12 
13 #include <rtdef.h>
14 
15 /**
16  * @brief These APIs may not be supported by a specified architecture
17  * But we have to include to all the cases to be 'general purpose'
18  */
19 
rt_hw_cpu_dcache_clean_local(void * addr,int size)20 rt_always_inline void rt_hw_cpu_dcache_clean_local(void *addr, int size)
21 {
22     RT_UNUSED(addr);
23     RT_UNUSED(size);
24 }
25 
rt_hw_cpu_dcache_invalidate_local(void * addr,int size)26 rt_always_inline void rt_hw_cpu_dcache_invalidate_local(void *addr, int size)
27 {
28     RT_UNUSED(addr);
29     RT_UNUSED(size);
30 }
31 
rt_hw_cpu_dcache_clean_and_invalidate_local(void * addr,int size)32 rt_always_inline void rt_hw_cpu_dcache_clean_and_invalidate_local(void *addr, int size)
33 {
34     RT_UNUSED(addr);
35     RT_UNUSED(size);
36 }
37 
rt_hw_cpu_dcache_clean_all_local(void)38 rt_always_inline void rt_hw_cpu_dcache_clean_all_local(void)
39 {
40 }
41 
rt_hw_cpu_dcache_invalidate_all_local(void)42 rt_always_inline void rt_hw_cpu_dcache_invalidate_all_local(void)
43 {
44 }
45 
rt_hw_cpu_dcache_clean_and_invalidate_all_local(void)46 rt_always_inline void rt_hw_cpu_dcache_clean_and_invalidate_all_local(void)
47 {
48 }
49 
rt_hw_cpu_icache_invalidate_local(void * addr,int size)50 rt_always_inline void rt_hw_cpu_icache_invalidate_local(void *addr, int size)
51 {
52     RT_UNUSED(addr);
53     RT_UNUSED(size);
54 }
55 
rt_hw_cpu_icache_invalidate_all_local(void)56 rt_always_inline void rt_hw_cpu_icache_invalidate_all_local(void)
57 {
58 }
59 
60 /**
61  * @brief Multi-core
62  */
63 
64 #define rt_hw_cpu_dcache_clean rt_hw_cpu_dcache_clean_local
65 #define rt_hw_cpu_dcache_invalidate rt_hw_cpu_dcache_invalidate_local
66 #define rt_hw_cpu_dcache_clean_and_invalidate rt_hw_cpu_dcache_clean_and_invalidate_local
67 
68 #define rt_hw_cpu_dcache_clean_all rt_hw_cpu_dcache_clean_all_local
69 #define rt_hw_cpu_dcache_invalidate_all rt_hw_cpu_dcache_invalidate_all_local
70 #define rt_hw_cpu_dcache_clean_and_invalidate_all rt_hw_cpu_dcache_clean_and_invalidate_all_local
71 
72 #define rt_hw_cpu_icache_invalidate rt_hw_cpu_icache_invalidate_local
73 #define rt_hw_cpu_icache_invalidate_all rt_hw_cpu_icache_invalidate_all_local
74 
75 #define rt_hw_icache_invalidate_all rt_hw_cpu_icache_invalidate_all
76 
77 /** instruction barrier */
rt_hw_cpu_sync(void)78 static inline void rt_hw_cpu_sync(void) {}
79 
80 /**
81  * @brief local cpu icahce & dcache synchronization
82  *
83  * @param addr
84  * @param size
85  */
86 void rt_hw_sync_cache_local(void *addr, int size);
87 
88 #endif /* __CACHE_H__ */
89