summaryrefslogtreecommitdiffstats
path: root/c/src/exec/rtems/include/rtems/rtems/cache.h
blob: 4ca0b85227d8b37cd598c4e710516cb9526a29ee (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*  cache.h
 *
 *  Cache Manager
 *
 *  COPYRIGHT (c) 1989-1999.
 *  On-Line Applications Research Corporation (OAR).
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.OARcorp.com/rtems/license.html.
 *
 *
 *  The functions in this file define the API to the RTEMS Cache Manager and
 *  are divided into data cache and instruction cache functions. Data cache
 *  functions are only meaningful if a data cache is supported. Instruction
 *  cache functions are only meaningful if an instruction cache is supported.
 *  
 *  The functions below are implemented with CPU dependent support routines
 *  implemented as part of libcpu. In the event that a CPU does not support a
 *  specific function, the CPU dependent routine does nothing (but does exist).
 *  
 *  At this point, the Cache Manager makes no considerations, and provides no
 *  support for BSP specific issues such as a secondary cache. In such a system,
 *  the CPU dependent routines would have to be modified, or a BSP layer added
 *  to this Manager.
 */

#ifndef __CACHE_h
#define __CACHE_h

#ifdef __cplusplus
extern "C" {
#endif

#include <rtems/system.h>
#include <sys/types.h>

/*
 *  These functions will ONLY do something if the
 *  libcpu support includes data cache routines AND
 *  the CPU model supports data caching.
 */

/*
 * This function is called to flush the data cache by performing cache
 * copybacks. It must determine how many cache lines need to be copied
 * back and then perform the copybacks.
 */
void rtems_cache_flush_multiple_data_lines( const void *, size_t );

/*
 * This function is responsible for performing a data cache invalidate.
 * It must determine how many cache lines need to be invalidated and then
 * perform the invalidations.
 */
void rtems_cache_invalidate_multiple_data_lines( const void *, size_t );

/*
 * This function is responsible for performing a data cache flush.
 * It flushes the entire cache.
 */
void rtems_cache_flush_entire_data( void );

/*
 * This function is responsible for performing a data cache
 * invalidate. It invalidates the entire cache.
 */
void rtems_cache_invalidate_entire_data( void );

/*
 * This function returns the data cache granularity.
 */
int rtems_cache_get_data_line_size( void );

/*
 * This function freezes the data cache.
 */
void rtems_cache_freeze_data( void );

/*
 * This function unfreezes the data cache.
 */
void rtems_cache_unfreeze_data( void );

/*
 * These functions enable/disable the data cache.
 */
void rtems_cache_enable_data( void );
void rtems_cache_disable_data( void );

/*
 *  These functions will ONLY do something if the
 *  libcpu support includes instruction cache routines AND
 *  the CPU model supports instruction caching.
 */

/*
 * This function is responsible for performing an instruction cache
 * invalidate. It must determine how many cache lines need to be invalidated
 * and then perform the invalidations.
 */
void rtems_cache_invalidate_multiple_instruction_lines( const void *, size_t );

/*
 * This function is responsible for performing an instruction cache
 * invalidate. It invalidates the entire cache.
 */
void rtems_cache_invalidate_entire_instruction( void );

/*
 * This function returns the instruction cache granularity.
 */
int rtems_cache_get_instruction_line_size( void );

/*
 * This function freezes the instruction cache.
 */
void rtems_cache_freeze_instruction( void );

/*
 * This function unfreezes the instruction cache.
 */
void rtems_cache_unfreeze_instruction( void );

/*
 * These functions enable/disable the instruction cache.
 */
void rtems_cache_enable_instruction( void );
void rtems_cache_disable_instruction( void );


#ifdef __cplusplus
}
#endif

#endif
/* end of include file */