OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [hal/] [calmrisc32/] [arch/] [v2_0/] [include/] [hal_cache.h] - Blame information for rev 174

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 unneback
#ifndef CYGONCE_HAL_CACHE_H
2
#define CYGONCE_HAL_CACHE_H
3
 
4
//=============================================================================
5
//
6
//      hal_cache.h
7
//
8
//      HAL cache control API
9
//
10
//=============================================================================
11
//####ECOSGPLCOPYRIGHTBEGIN####
12
// -------------------------------------------
13
// This file is part of eCos, the Embedded Configurable Operating System.
14
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
15
//
16
// eCos is free software; you can redistribute it and/or modify it under
17
// the terms of the GNU General Public License as published by the Free
18
// Software Foundation; either version 2 or (at your option) any later version.
19
//
20
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
21
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
22
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
23
// for more details.
24
//
25
// You should have received a copy of the GNU General Public License along
26
// with eCos; if not, write to the Free Software Foundation, Inc.,
27
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
28
//
29
// As a special exception, if other files instantiate templates or use macros
30
// or inline functions from this file, or you compile this file and link it
31
// with other works to produce a work based on this file, this file does not
32
// by itself cause the resulting work to be covered by the GNU General Public
33
// License. However the source code for this file must still be made available
34
// in accordance with section (3) of the GNU General Public License.
35
//
36
// This exception does not invalidate any other reasons why a work based on
37
// this file might be covered by the GNU General Public License.
38
//
39
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
40
// at http://sources.redhat.com/ecos/ecos-license/
41
// -------------------------------------------
42
//####ECOSGPLCOPYRIGHTEND####
43
//=============================================================================
44
//#####DESCRIPTIONBEGIN####
45
//
46
// Author(s):   nickg
47
// Contributors:        nickg
48
// Date:        1998-02-17
49
// Purpose:     Cache control API
50
// Description: The macros defined here provide the HAL APIs for handling
51
//              cache control operations.
52
// Usage:
53
//              #include <cyg/hal/hal_cache.h>
54
//              ...
55
//              
56
//
57
//####DESCRIPTIONEND####
58
//
59
//=============================================================================
60
 
61
#include <pkgconf/hal.h>
62
#include <cyg/infra/cyg_type.h>
63
 
64
#include <cyg/hal/var_cache.h>
65
 
66
 
67
//-----------------------------------------------------------------------------
68
// Cache dimensions.
69
// These really should be defined in var_cache.h. If they are not, then provide
70
// a set of numbers that are typical of many variants.
71
 
72
#ifndef HAL_DCACHE_SIZE
73
 
74
// Data cache
75
//#define HAL_DCACHE_SIZE                 0     // Size of data cache in bytes
76
//#define HAL_DCACHE_LINE_SIZE            0     // Size of a data cache line
77
//#define HAL_DCACHE_WAYS                 0     // Associativity of the cache
78
 
79
// Instruction cache
80
//#define HAL_ICACHE_SIZE                 0     // Size of cache in bytes
81
//#define HAL_ICACHE_LINE_SIZE            0     // Size of a cache line
82
//#define HAL_ICACHE_WAYS                 0     // Associativity of the cache
83
 
84
//#define HAL_DCACHE_SETS 0
85
//#define HAL_ICACHE_SETS 0
86
 
87
#endif
88
 
89
//-----------------------------------------------------------------------------
90
// Global control of data cache
91
 
92
// Enable the data cache
93
// There is no default mechanism for enabling or disabling the caches.
94
#ifndef HAL_DCACHE_ENABLE_DEFINED
95
#define HAL_DCACHE_ENABLE()
96
#endif
97
 
98
// Disable the data cache
99
#ifndef HAL_DCACHE_DISABLE_DEFINED
100
#define HAL_DCACHE_DISABLE()
101
#endif
102
 
103
#ifndef HAL_DCACHE_IS_ENABLED_DEFINED
104
#define HAL_DCACHE_IS_ENABLED(_state_) (_state_) = 1;
105
#endif
106
 
107
// Invalidate the entire cache
108
// We simply use HAL_DCACHE_SYNC() to do this. For writeback caches this
109
// is not quite what we want, but there is no index-invalidate operation
110
// available.
111
#ifndef HAL_DCACHE_INVALIDATE_ALL_DEFINED
112
#define HAL_DCACHE_INVALIDATE_ALL() HAL_DCACHE_SYNC()
113
#endif
114
 
115
// Synchronize the contents of the cache with memory.
116
// This uses the index-writeback-invalidate operation.
117
#ifndef HAL_DCACHE_SYNC_DEFINED
118
#define HAL_DCACHE_SYNC()                                               \
119
    CYG_MACRO_START                                                     \
120
    CYG_MACRO_END
121
#endif
122
 
123
// Set the data cache refill burst size
124
//#define HAL_DCACHE_BURST_SIZE(_size_)
125
 
126
// Set the data cache write mode
127
//#define HAL_DCACHE_WRITE_MODE( _mode_ )
128
 
129
//#define HAL_DCACHE_WRITETHRU_MODE       0
130
//#define HAL_DCACHE_WRITEBACK_MODE       1
131
 
132
// Load the contents of the given address range into the data cache
133
// and then lock the cache so that it stays there.
134
// This uses the fetch-and-lock cache operation.
135
#ifndef HAL_DCACHE_LOCK_DEFINED
136
#define HAL_DCACHE_LOCK(_base_, _asize_)                                  \
137
    CYG_MACRO_START                                                       \
138
    CYG_MACRO_END
139
#endif
140
 
141
// Undo a previous lock operation.
142
// Do this by flushing the cache, which is defined to clear the lock bit.
143
#ifndef HAL_DCACHE_UNLOCK_DEFINED
144
#define HAL_DCACHE_UNLOCK(_base_, _size_) \
145
        HAL_DCACHE_FLUSH( _base_, _size_ )
146
#endif
147
 
148
// Unlock entire cache
149
#ifndef HAL_DCACHE_UNLOCK_ALL_DEFINED
150
#define HAL_DCACHE_UNLOCK_ALL() \
151
        HAL_DCACHE_INVALIDATE_ALL()
152
#endif
153
 
154
//-----------------------------------------------------------------------------
155
// Data cache line control
156
 
157
// Allocate cache lines for the given address range without reading its
158
// contents from memory.
159
//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ )
160
 
161
// Write dirty cache lines to memory and invalidate the cache entries
162
// for the given address range.
163
// This uses the hit-writeback-invalidate cache operation.
164
#ifndef HAL_DCACHE_FLUSH_DEFINED
165
#define HAL_DCACHE_FLUSH( _base_ , _asize_ )                              \
166
    CYG_MACRO_START                                                       \
167
    CYG_MACRO_END
168
#endif
169
 
170
// Invalidate cache lines in the given range without writing to memory.
171
// This uses the hit-invalidate cache operation.
172
#ifndef HAL_DCACHE_INVALIDATE_DEFINED
173
#define HAL_DCACHE_INVALIDATE( _base_ , _asize_ )                       \
174
    CYG_MACRO_START                                                     \
175
    CYG_MACRO_END
176
#endif
177
 
178
// Write dirty cache lines to memory for the given address range.
179
// This uses the hit-writeback cache operation.
180
#ifndef HAL_DCACHE_STORE_DEFINED
181
#define HAL_DCACHE_STORE( _base_ , _asize_ )                              \
182
    CYG_MACRO_START                                                       \
183
    CYG_MACRO_END
184
#endif
185
 
186
// Preread the given range into the cache with the intention of reading
187
// from it later.
188
//#define HAL_DCACHE_READ_HINT( _base_ , _size_ )
189
 
190
// Preread the given range into the cache with the intention of writing
191
// to it later.
192
//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ )
193
 
194
// Allocate and zero the cache lines associated with the given range.
195
//#define HAL_DCACHE_ZERO( _base_ , _size_ )
196
 
197
//-----------------------------------------------------------------------------
198
// Global control of Instruction cache
199
 
200
// Enable the instruction cache
201
// There is no default mechanism for enabling or disabling the caches.
202
#ifndef HAL_ICACHE_ENABLE_DEFINED
203
#define HAL_ICACHE_ENABLE()
204
#endif
205
 
206
// Disable the instruction cache
207
#ifndef HAL_ICACHE_DISABLE_DEFINED
208
#define HAL_ICACHE_DISABLE()
209
#endif
210
 
211
#ifndef HAL_ICACHE_IS_ENABLED_DEFINED
212
#define HAL_ICACHE_IS_ENABLED(_state_) (_state_) = 1;
213
#endif
214
 
215
// Invalidate the entire cache
216
// This uses the index-invalidate cache operation.
217
#ifndef HAL_ICACHE_INVALIDATE_ALL_DEFINED
218
#define HAL_ICACHE_INVALIDATE_ALL()                                           \
219
    CYG_MACRO_START                                                           \
220
    CYG_MACRO_END
221
#endif
222
 
223
// Synchronize the contents of the cache with memory.
224
// Simply force the cache to reload.
225
#ifndef HAL_ICACHE_SYNC_DEFINED
226
#define HAL_ICACHE_SYNC() HAL_ICACHE_INVALIDATE_ALL()
227
#endif
228
 
229
// Set the instruction cache refill burst size
230
//#define HAL_ICACHE_BURST_SIZE(_size_)
231
 
232
// Load the contents of the given address range into the instruction cache
233
// and then lock the cache so that it stays there.
234
// This uses the fetch-and-lock cache operation.
235
#ifndef HAL_ICACHE_LOCK_DEFINED
236
#define HAL_ICACHE_LOCK(_base_, _asize_)                                  \
237
    CYG_MACRO_START                                                       \
238
    CYG_MACRO_END
239
#endif
240
 
241
// Undo a previous lock operation.
242
// Do this by invalidating the cache, which is defined to clear the lock bit.
243
#ifndef HAL_ICACHE_UNLOCK_DEFINED
244
#define HAL_ICACHE_UNLOCK(_base_, _size_) \
245
        HAL_ICACHE_INVALIDATE( _base_, _size_ )
246
#endif
247
 
248
// Unlock entire cache
249
//#define HAL_ICACHE_UNLOCK_ALL()
250
 
251
//-----------------------------------------------------------------------------
252
// Instruction cache line control
253
 
254
// Invalidate cache lines in the given range without writing to memory.
255
// This uses the hit-invalidate cache operation.
256
#ifndef HAL_ICACHE_INVALIDATE_DEFINED
257
#define HAL_ICACHE_INVALIDATE( _base_ , _asize_ )                       \
258
    CYG_MACRO_START                                                     \
259
    CYG_MACRO_END
260
#endif
261
 
262
 
263
//-----------------------------------------------------------------------------
264
#endif // ifndef CYGONCE_HAL_CACHE_H
265
// End of hal_cache.h

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.