86 #if defined(RTEMS_SMP) && defined(CPU_CACHE_NO_INSTRUCTION_CACHE_SNOOPING) 90 #if CPU_DATA_CACHE_ALIGNMENT > CPU_CACHE_LINE_BYTES 91 #error "CPU_DATA_CACHE_ALIGNMENT is greater than CPU_CACHE_LINE_BYTES" 94 #if CPU_INSTRUCTION_CACHE_ALIGNMENT > CPU_CACHE_LINE_BYTES 95 #error "CPU_INSTRUCTION_CACHE_ALIGNMENT is greater than CPU_CACHE_LINE_BYTES" 110 #if defined(CPU_DATA_CACHE_ALIGNMENT) 111 #if defined(CPU_CACHE_SUPPORT_PROVIDES_RANGE_FUNCTIONS) 112 _CPU_cache_flush_data_range( d_addr, n_bytes );
114 const void * final_address;
126 final_address = (
void *)((
size_t)d_addr + n_bytes - 1);
128 while( d_addr <= final_address ) {
129 _CPU_cache_flush_1_data_line( d_addr );
144 #if defined(CPU_DATA_CACHE_ALIGNMENT) 145 #if defined(CPU_CACHE_SUPPORT_PROVIDES_RANGE_FUNCTIONS) 146 _CPU_cache_invalidate_data_range( d_addr, n_bytes );
148 const void * final_address;
160 final_address = (
void *)((
size_t)d_addr + n_bytes - 1);
162 while( final_address >= d_addr ) {
163 _CPU_cache_invalidate_1_data_line( d_addr );
177 #if defined(CPU_DATA_CACHE_ALIGNMENT) 181 _CPU_cache_flush_entire_data();
192 #if defined(CPU_DATA_CACHE_ALIGNMENT) 197 _CPU_cache_invalidate_entire_data();
207 #if defined(CPU_DATA_CACHE_ALIGNMENT) 217 #if defined(CPU_CACHE_SUPPORT_PROVIDES_CACHE_SIZE_FUNCTIONS) 218 return _CPU_cache_get_data_cache_size( level );
231 #if defined(CPU_DATA_CACHE_ALIGNMENT) 232 _CPU_cache_freeze_data();
238 #if defined(CPU_DATA_CACHE_ALIGNMENT) 239 _CPU_cache_unfreeze_data();
246 #if defined(CPU_DATA_CACHE_ALIGNMENT) 247 _CPU_cache_enable_data();
251 #if !defined(CPU_CACHE_SUPPORT_PROVIDES_DISABLE_DATA) 255 #if defined(CPU_DATA_CACHE_ALIGNMENT) 256 _CPU_cache_disable_data();
265 #if defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) \ 266 && defined(RTEMS_SMP) \ 267 && defined(CPU_CACHE_NO_INSTRUCTION_CACHE_SNOOPING) 274 static void smp_cache_inst_inv(
void *arg)
276 smp_cache_area *area = arg;
278 _CPU_cache_invalidate_instruction_range(area->addr, area->size);
281 static void smp_cache_inst_inv_all(
void *arg)
283 _CPU_cache_invalidate_entire_instruction();
293 #if defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) \ 294 && !defined(CPU_CACHE_SUPPORT_PROVIDES_RANGE_FUNCTIONS) 296 _CPU_cache_invalidate_instruction_range(
301 const void * final_address;
313 final_address = (
void *)((
size_t)i_addr + n_bytes - 1);
314 i_addr = (
void *)((
size_t)i_addr & ~(CPU_INSTRUCTION_CACHE_ALIGNMENT - 1));
315 while( final_address >= i_addr ) {
316 _CPU_cache_invalidate_1_instruction_line( i_addr );
317 i_addr = (
void *)((
size_t)i_addr + CPU_INSTRUCTION_CACHE_ALIGNMENT);
328 #if defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) 329 #if defined(RTEMS_SMP) && defined(CPU_CACHE_NO_INSTRUCTION_CACHE_SNOOPING) 330 smp_cache_area area = { i_addr, n_bytes };
332 _SMP_Multicast_action( 0,
NULL, smp_cache_inst_inv, &area );
334 _CPU_cache_invalidate_instruction_range( i_addr, n_bytes );
346 #if defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) 347 #if defined(RTEMS_SMP) && defined(CPU_CACHE_NO_INSTRUCTION_CACHE_SNOOPING) 348 _SMP_Multicast_action( 0,
NULL, smp_cache_inst_inv_all,
NULL );
350 _CPU_cache_invalidate_entire_instruction();
361 #if defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) 362 return CPU_INSTRUCTION_CACHE_ALIGNMENT;
371 #if defined(CPU_CACHE_SUPPORT_PROVIDES_CACHE_SIZE_FUNCTIONS) 372 return _CPU_cache_get_instruction_cache_size( level );
385 #if defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) 386 _CPU_cache_freeze_instruction();
392 #if defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) 393 _CPU_cache_unfreeze_instruction();
400 #if defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) 401 _CPU_cache_enable_instruction();
408 #if defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) 409 _CPU_cache_disable_instruction();
416 #if defined(CPU_MAXIMAL_CACHE_ALIGNMENT) 417 return CPU_MAXIMAL_CACHE_ALIGNMENT;
419 size_t max_line_size = 0;
420 #if defined(CPU_DATA_CACHE_ALIGNMENT) 423 if ( max_line_size < data_line_size )
424 max_line_size = data_line_size;
427 #if defined(CPU_INSTRUCTION_CACHE_ALIGNMENT) 429 size_t instruction_line_size = CPU_INSTRUCTION_CACHE_ALIGNMENT;
430 if ( max_line_size < instruction_line_size )
431 max_line_size = instruction_line_size;
434 return max_line_size;
445 const void *code_addr,
449 #if defined(CPU_CACHE_SUPPORT_PROVIDES_INSTRUCTION_SYNC_FUNCTION) 450 _CPU_cache_instruction_sync_after_code_change( code_addr, n_bytes );
void rtems_cache_enable_instruction(void)
Definition: cacheimpl.h:398
void rtems_cache_instruction_sync_after_code_change(const void *code_addr, size_t n_bytes)
Ensure necessary synchronization required after code changes.
Definition: cacheimpl.h:444
void rtems_cache_invalidate_entire_data(void)
Definition: cacheimpl.h:190
void rtems_cache_disable_instruction(void)
Definition: cacheimpl.h:406
void rtems_cache_freeze_data(void)
Definition: cacheimpl.h:229
void rtems_cache_enable_data(void)
Definition: cacheimpl.h:244
void rtems_cache_invalidate_multiple_instruction_lines(const void *i_addr, size_t n_bytes)
Invalidates multiple instruction cache lines.
Definition: cacheimpl.h:323
void rtems_cache_flush_multiple_data_lines(const void *d_addr, size_t n_bytes)
Flushes multiple data cache lines.
Definition: cacheimpl.h:108
#define CPU_DATA_CACHE_ALIGNMENT
Cache definitions and functions.
Definition: cache-l2c-310.c:65
void rtems_cache_invalidate_multiple_data_lines(const void *d_addr, size_t n_bytes)
Invalidates multiple data cache lines.
Definition: cacheimpl.h:142
void rtems_cache_disable_data(void)
Definition: cacheimpl.h:253
size_t rtems_cache_get_data_cache_size(uint32_t level)
Returns the data cache size in bytes.
Definition: cacheimpl.h:215
size_t rtems_cache_get_data_line_size(void)
Returns the data cache line size in bytes.
Definition: cacheimpl.h:205
void rtems_cache_unfreeze_instruction(void)
Definition: cacheimpl.h:390
size_t rtems_cache_get_maximal_line_size(void)
Returns the maximal cache line size of all cache kinds in bytes.
Definition: cacheimpl.h:414
void rtems_cache_freeze_instruction(void)
Definition: cacheimpl.h:383
void rtems_cache_unfreeze_data(void)
Definition: cacheimpl.h:236
size_t rtems_cache_get_instruction_line_size(void)
Returns the instruction cache line size in bytes.
Definition: cacheimpl.h:359
void rtems_cache_invalidate_entire_instruction(void)
Invalidates the entire instruction cache.
Definition: cacheimpl.h:344
void rtems_cache_flush_entire_data(void)
Flushes the entire data cache.
Definition: cacheimpl.h:175
unsigned size
Definition: tte.h:74
size_t rtems_cache_get_instruction_cache_size(uint32_t level)
Returns the instruction cache size in bytes.
Definition: cacheimpl.h:369
SuperCore SMP Implementation.
#define NULL
Requests a GPIO pin group configuration.
Definition: bestcomm_api.h:77