8#ifndef ZEPHYR_INCLUDE_CACHE_H_ 
    9#define ZEPHYR_INCLUDE_CACHE_H_ 
   17#include <zephyr/arch/cpu.h> 
   23#if defined(CONFIG_EXTERNAL_CACHE) 
   30#if defined(CONFIG_DCACHE) 
   32extern void cache_data_enable(
void);
 
   33extern void cache_data_disable(
void);
 
   35extern int cache_data_flush_all(
void);
 
   36extern int cache_data_invd_all(
void);
 
   37extern int cache_data_flush_and_invd_all(
void);
 
   39extern int cache_data_flush_range(
void *addr, 
size_t size);
 
   40extern int cache_data_invd_range(
void *addr, 
size_t size);
 
   41extern int cache_data_flush_and_invd_range(
void *addr, 
size_t size);
 
   43#if defined(CONFIG_DCACHE_LINE_SIZE_DETECT) 
   44extern size_t cache_data_line_size_get(
void);
 
   49#if defined(CONFIG_ICACHE) 
   51extern void cache_instr_enable(
void);
 
   52extern void cache_instr_disable(
void);
 
   54extern int cache_instr_flush_all(
void);
 
   55extern int cache_instr_invd_all(
void);
 
   56extern int cache_instr_flush_and_invd_all(
void);
 
   58extern int cache_instr_flush_range(
void *addr, 
size_t size);
 
   59extern int cache_instr_invd_range(
void *addr, 
size_t size);
 
   60extern int cache_instr_flush_and_invd_range(
void *addr, 
size_t size);
 
   62#if defined(CONFIG_ICACHE_LINE_SIZE_DETECT) 
   63extern size_t cache_instr_line_size_get(
void);
 
   75#if defined(CONFIG_DCACHE) 
   77#define cache_data_enable                       arch_dcache_enable 
   78#define cache_data_disable                      arch_dcache_disable 
   80#define cache_data_flush_all                    arch_dcache_flush_all 
   81#define cache_data_invd_all                     arch_dcache_invd_all 
   82#define cache_data_flush_and_invd_all           arch_dcache_flush_and_invd_all 
   84#define cache_data_flush_range(addr, size)      arch_dcache_flush_range(addr, size) 
   85#define cache_data_invd_range(addr, size)       arch_dcache_invd_range(addr, size) 
   86#define cache_data_flush_and_invd_range(addr, size)     \ 
   87                                                arch_dcache_flush_and_invd_range(addr, size) 
   89#if defined(CONFIG_DCACHE_LINE_SIZE_DETECT) 
   90#define cache_data_line_size_get                arch_dcache_line_size_get 
   95#if defined(CONFIG_ICACHE) 
   97#define cache_instr_enable                      arch_icache_enable 
   98#define cache_instr_disable                     arch_icache_disable 
  100#define cache_instr_flush_all                   arch_icache_flush_all 
  101#define cache_instr_invd_all                    arch_icache_invd_all 
  102#define cache_instr_flush_and_invd_all          arch_icache_flush_and_invd_all 
  104#define cache_instr_flush_range(addr, size)     arch_icache_flush_range(addr, size) 
  105#define cache_instr_invd_range(addr, size)      arch_icache_invd_range(addr, size) 
  106#define cache_instr_flush_and_invd_range(addr, size)    \ 
  107                                                arch_icache_flush_and_invd_range(addr, size) 
  109#if defined(CONFIG_ICACHE_LINE_SIZE_DETECT) 
  110#define cache_instr_line_size_get               arch_icache_line_size_get 
  127#define _CPU DT_PATH(cpus, cpu_0) 
  139#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
  152#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
  153        cache_data_disable();
 
  165#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_ICACHE) 
  166        cache_instr_enable();
 
  178#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_ICACHE) 
  179        cache_instr_disable();
 
  194#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
  195        return cache_data_flush_all();
 
  211#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_ICACHE) 
  212        return cache_instr_flush_all();
 
  228#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
  229        return cache_data_invd_all();
 
  245#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_ICACHE) 
  246        return cache_instr_invd_all();
 
  262#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
  263        return cache_data_flush_and_invd_all();
 
  279#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_ICACHE) 
  280        return cache_instr_flush_and_invd_all();
 
  298static inline int z_impl_sys_cache_data_flush_range(
void *addr, 
size_t size)
 
  300#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
  301        return cache_data_flush_range(addr, size);
 
  323#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_ICACHE) 
  324        return cache_instr_flush_range(addr, size);
 
  345static inline int z_impl_sys_cache_data_invd_range(
void *addr, 
size_t size)
 
  347#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
  348        return cache_data_invd_range(addr, size);
 
  370#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_ICACHE) 
  371        return cache_instr_invd_range(addr, size);
 
  392static inline int z_impl_sys_cache_data_flush_and_invd_range(
void *addr, 
size_t size)
 
  394#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
  395        return cache_data_flush_and_invd_range(addr, size);
 
  417#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_ICACHE) 
  418        return cache_instr_flush_and_invd_range(addr, size);
 
  444#ifdef CONFIG_DCACHE_LINE_SIZE_DETECT 
  445        return cache_data_line_size_get();
 
  446#elif (CONFIG_DCACHE_LINE_SIZE != 0) 
  447        return CONFIG_DCACHE_LINE_SIZE;
 
  449        return DT_PROP_OR(_CPU, d_cache_line_size, 0);
 
  471#ifdef CONFIG_ICACHE_LINE_SIZE_DETECT 
  472        return cache_instr_line_size_get();
 
  473#elif (CONFIG_ICACHE_LINE_SIZE != 0) 
  474        return CONFIG_ICACHE_LINE_SIZE;
 
  476        return DT_PROP_OR(_CPU, i_cache_line_size, 0);
 
  480#ifdef CONFIG_LIBMETAL 
  481static inline void sys_cache_flush(
void *addr, 
size_t size)
 
  487#include <syscalls/cache.h> 
static int sys_cache_data_invd_all(void)
Invalidate the d-cache.
Definition: cache.h:226
 
static void sys_cache_data_enable(void)
Enable the d-cache.
Definition: cache.h:137
 
static int sys_cache_instr_flush_and_invd_all(void)
Flush and Invalidate the i-cache.
Definition: cache.h:277
 
static int sys_cache_instr_invd_all(void)
Invalidate the i-cache.
Definition: cache.h:243
 
static int sys_cache_instr_flush_range(void *addr, size_t size)
Flush an address range in the i-cache.
Definition: cache.h:321
 
static void sys_cache_instr_disable(void)
Disable the i-cache.
Definition: cache.h:176
 
int sys_cache_data_flush_and_invd_range(void *addr, size_t size)
Flush and Invalidate an address range in the d-cache.
 
int sys_cache_data_invd_range(void *addr, size_t size)
Invalidate an address range in the d-cache.
 
static int sys_cache_instr_invd_range(void *addr, size_t size)
Invalidate an address range in the i-cache.
Definition: cache.h:368
 
int sys_cache_data_flush_range(void *addr, size_t size)
Flush an address range in the d-cache.
 
static int sys_cache_instr_flush_and_invd_range(void *addr, size_t size)
Flush and Invalidate an address range in the i-cache.
Definition: cache.h:415
 
static void sys_cache_instr_enable(void)
Enable the i-cache.
Definition: cache.h:163
 
static int sys_cache_data_flush_all(void)
Flush the d-cache.
Definition: cache.h:192
 
static int sys_cache_instr_flush_all(void)
Flush the i-cache.
Definition: cache.h:209
 
static size_t sys_cache_data_line_size_get(void)
Get the the d-cache line size.
Definition: cache.h:442
 
static void sys_cache_data_disable(void)
Disable the d-cache.
Definition: cache.h:150
 
static int sys_cache_data_flush_and_invd_all(void)
Flush and Invalidate the d-cache.
Definition: cache.h:260
 
static size_t sys_cache_instr_line_size_get(void)
Get the the i-cache line size.
Definition: cache.h:469
 
#define DT_PROP_OR(node_id, prop, default_value)
Like DT_PROP(), but with a fallback to default_value.
Definition: devicetree.h:753
 
#define ENOTSUP
Definition: errno.h:115