diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-24 10:48:13 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-28 09:06:19 +0100 |
commit | 64f4ac28a612880a0dfb723e19bff7f06519be31 (patch) | |
tree | d5e1f57692f88eb97b2ef35b2165f8b0e5fe544f /c/src/lib/libbsp/sparc/leon3/include | |
parent | bsp/leon3: Add and use cache register functions (diff) | |
download | rtems-64f4ac28a612880a0dfb723e19bff7f06519be31.tar.bz2 |
bsp/leon3: Add new cache manager implementation
The previous implementation used an instruction cache line size of 0,
this is a bogus value. Use a instruction cache line size of 64 since
the L2 cache may have a line size of 32 or 64. A greater value should
cause no harm.
Use a FLUSH operation for _CPU_cache_invalidate_instruction_range().
This is a preperation step to support the L2 cache.
Diffstat (limited to 'c/src/lib/libbsp/sparc/leon3/include')
-rw-r--r-- | c/src/lib/libbsp/sparc/leon3/include/cache_.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/leon3/include/cache_.h b/c/src/lib/libbsp/sparc/leon3/include/cache_.h new file mode 100644 index 0000000000..eafbb48b31 --- /dev/null +++ b/c/src/lib/libbsp/sparc/leon3/include/cache_.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#ifndef LEON3_CACHE_H +#define LEON3_CACHE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define CPU_CACHE_SUPPORT_PROVIDES_RANGE_FUNCTIONS + +#define CPU_INSTRUCTION_CACHE_ALIGNMENT 64 + +static inline void _CPU_cache_flush_data_range( + const void *d_addr, + size_t n_bytes +) +{ + /* TODO */ +} + +static inline void _CPU_cache_invalidate_data_range( + const void *d_addr, + size_t n_bytes +) +{ + /* TODO */ +} + +static inline void _CPU_cache_freeze_data(void) +{ + /* TODO */ +} + +static inline void _CPU_cache_unfreeze_data(void) +{ + /* TODO */ +} + +static inline void _CPU_cache_invalidate_entire_instruction(void) +{ + __asm__ volatile ("flush"); +} + +static inline void _CPU_cache_invalidate_instruction_range( + const void *i_addr, + size_t n_bytes +) +{ + _CPU_cache_invalidate_entire_instruction(); +} + +static inline void _CPU_cache_freeze_instruction(void) +{ + /* TODO */ +} + +static inline void _CPU_cache_unfreeze_instruction(void) +{ + /* TODO */ +} + +static inline void _CPU_cache_flush_entire_data(void) +{ + /* TODO */ +} + +static inline void _CPU_cache_invalidate_entire_data(void) +{ + /* TODO */ +} + +static inline void _CPU_cache_enable_data(void) +{ + /* TODO */ +} + +static inline void _CPU_cache_disable_data(void) +{ + /* TODO */ +} + +static inline void _CPU_cache_enable_instruction(void) +{ + /* TODO */ +} + +static inline void _CPU_cache_disable_instruction(void) +{ + /* TODO */ +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LEON3_CACHE_H */ |