1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*
- * Copyright (c) 2006-2025 RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2022-11-09 RT-Thread The first version
- */
- #ifndef __CACHE_H__
- #define __CACHE_H__
- #include <rtdef.h>
- /**
- * @brief These APIs may not be supported by a specified architecture
- * But we have to include to all the cases to be 'general purpose'
- */
- rt_always_inline void rt_hw_cpu_dcache_clean_local(void *addr, int size)
- {
- RT_UNUSED(addr);
- RT_UNUSED(size);
- }
- rt_always_inline void rt_hw_cpu_dcache_invalidate_local(void *addr, int size)
- {
- RT_UNUSED(addr);
- RT_UNUSED(size);
- }
- rt_always_inline void rt_hw_cpu_dcache_clean_and_invalidate_local(void *addr, int size)
- {
- RT_UNUSED(addr);
- RT_UNUSED(size);
- }
- rt_always_inline void rt_hw_cpu_dcache_clean_all_local(void)
- {
- }
- rt_always_inline void rt_hw_cpu_dcache_invalidate_all_local(void)
- {
- }
- rt_always_inline void rt_hw_cpu_dcache_clean_and_invalidate_all_local(void)
- {
- }
- /*use fence.i to invalidate all icache*/
- rt_always_inline void rt_hw_cpu_icache_invalidate_local(void *addr, int size)
- {
- __asm__ __volatile__("fence.i" ::: "memory");
- }
- /*use fence.i to invalidate all icache*/
- rt_always_inline void rt_hw_cpu_icache_invalidate_all_local(void)
- {
- __asm__ __volatile__("fence.i" ::: "memory");
- }
- /**
- * @brief Multi-core
- */
- #define rt_hw_cpu_dcache_clean rt_hw_cpu_dcache_clean_local
- #define rt_hw_cpu_dcache_invalidate rt_hw_cpu_dcache_invalidate_local
- #define rt_hw_cpu_dcache_clean_and_invalidate rt_hw_cpu_dcache_clean_and_invalidate_local
- #define rt_hw_cpu_dcache_clean_all rt_hw_cpu_dcache_clean_all_local
- #define rt_hw_cpu_dcache_invalidate_all rt_hw_cpu_dcache_invalidate_all_local
- #define rt_hw_cpu_dcache_clean_and_invalidate_all rt_hw_cpu_dcache_clean_and_invalidate_all_local
- #define rt_hw_cpu_icache_invalidate rt_hw_cpu_icache_invalidate_local
- #define rt_hw_cpu_icache_invalidate_all rt_hw_cpu_icache_invalidate_all_local
- #define rt_hw_icache_invalidate_all rt_hw_cpu_icache_invalidate_all
- /** instruction barrier */
- static inline void rt_hw_cpu_sync(void)
- {
- __asm__ __volatile__("fence.i" ::: "memory");
- }
- /**
- * @brief local cpu icahce & dcache synchronization
- *
- * @param addr
- * @param size
- */
- void rt_hw_sync_cache_local(void *addr, int size);
- #endif /* __CACHE_H__ */
|