summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/include/rtems/rtems/cache.h
blob: 7cfd362fd924c2774755abdf1f09c83892043952 (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_flush_multiple_data_cache_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_invalidate_multiple_data_cache_lines( const void *, size_t );

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

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

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

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

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

/*
 * These functions enable/disable the data cache.
 */
void rtems_enable_data_cache( void );
void rtems_disable_data_cache( 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_invalidate_multiple_inst_cache_lines( const void *, size_t );

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

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

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

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

/*
 * These functions enable/disable the instruction cache.
 */
void rtems_enable_inst_cache( void );
void rtems_disable_inst_cache( void );


#ifdef __cplusplus
}
#endif

#endif
/* end of include file */