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