Mercurial > flash_v2
diff packages/hal/sh/arch/current/include/hal_cache.h @ 84:489eb5632bc3 ecos-sw-2000-04-28
Merge from eCos master repository on 2000-04-28-18:44:39-BST
| author | jlarmour |
|---|---|
| date | Fri, 28 Apr 2000 18:18:36 +0000 |
| parents | 59d97b6ba612 |
| children | 0c2b7be0d798 |
line wrap: on
line diff
--- a/packages/hal/sh/arch/current/include/hal_cache.h +++ b/packages/hal/sh/arch/current/include/hal_cache.h @@ -61,6 +61,8 @@ //----------------------------------------------------------------------------- // Cache dimensions - one unified cache +#define HAL_CACHE_UNIFIED + #define HAL_UCACHE_SIZE CYGARC_SH_MOD_CAC_SIZE #define HAL_UCACHE_LINE_SIZE CYGARC_SH_MOD_CAC_LINE_SIZE #define HAL_UCACHE_WAYS CYGARC_SH_MOD_CAC_WAYS @@ -79,48 +81,28 @@ //----------------------------------------------------------------------------- // Global control of cache +// This is all handled in assembly (see vectors.S) due to a requirement about +// not fiddling the cache from cachable memory. + +externC void cyg_hal_cache_enable(void); +externC void cyg_hal_cache_disable(void); +externC void cyg_hal_cache_invalidate_all(void); +externC void cyg_hal_cache_sync(void); +externC void cyg_hal_cache_write_mode(int mode); // Enable the cache -#define HAL_UCACHE_ENABLE() \ - CYG_MACRO_START \ - register cyg_uint32 __tmp; \ - HAL_READ_UINT32(CYGARC_REG_CCR, __tmp); \ - __tmp |= CYGARC_REG_CCR_CE; \ - HAL_WRITE_UINT32(CYGARC_REG_CCR, __tmp); \ - CYG_MACRO_END +#define HAL_UCACHE_ENABLE() cyg_hal_cache_enable() // Disable the cache -#define HAL_UCACHE_DISABLE() \ - CYG_MACRO_START \ - register cyg_uint32 __tmp; \ - HAL_READ_UINT32(CYGARC_REG_CCR, __tmp); \ - __tmp &= ~CYGARC_REG_CCR_CE; \ - HAL_WRITE_UINT32(CYGARC_REG_CCR, __tmp); \ - CYG_MACRO_END +#define HAL_UCACHE_DISABLE() cyg_hal_cache_disable() // Invalidate the entire cache -// Note: The CF bit does not cause any data to be written back before -// invalidation of the cache. -#define HAL_UCACHE_INVALIDATE_ALL() \ - CYG_MACRO_START \ - register cyg_uint32 __tmp; \ - HAL_READ_UINT32(CYGARC_REG_CCR, __tmp); \ - __tmp |= CYGARC_REG_CCR_CF; \ - HAL_WRITE_UINT32(CYGARC_REG_CCR, __tmp); \ - CYG_MACRO_END +#define HAL_UCACHE_INVALIDATE_ALL() cyg_hal_cache_invalidate_all() // Synchronize the contents of the cache with memory. -#define HAL_UCACHE_SYNC() \ - CYG_MACRO_START \ - register cyg_uint32* __p; \ - register cyg_uint32* __top = (cyg_uint32*)CYGARC_REG_CACHE_ADDRESS_TOP; \ - for (__p = (cyg_uint32*)CYGARC_REG_CACHE_ADDRESS_BASE; \ - __p < __top; \ - __p += CYGARC_REG_CACHE_ADDRESS_STEP/sizeof(cyg_uint32)) \ - *__p = CYGARC_REG_CACHE_ADDRESS_FLUSH; \ - CYG_MACRO_END +#define HAL_UCACHE_SYNC() cyg_hal_cache_sync() -// Query the state of the cache +// Query the state of the cache (does not affect the caching) #define HAL_UCACHE_IS_ENABLED(_state_) \ CYG_MACRO_START \ HAL_READ_UINT32(CYGARC_REG_CCR, (_state_)); \ @@ -131,15 +113,7 @@ //#define HAL_UCACHE_BURST_SIZE(_size_) // Set the cache write mode -#define HAL_UCACHE_WRITE_MODE( _mode_ ) \ - CYG_MACRO_START \ - register cyg_uint32 __tmp; \ - HAL_READ_UINT32(CYGARC_REG_CCR, __tmp); \ - __tmp &= ~CYGARC_REG_CCR_CB; \ - if (HAL_UCACHE_WRITEBACK_MODE == (_mode_)) \ - __tmp |= CYGARC_REG_CCR_CB; \ - HAL_WRITE_UINT32(CYGARC_REG_CCR, __tmp); \ - CYG_MACRO_END +#define HAL_UCACHE_WRITE_MODE( _mode_ ) cyg_hal_cache_write_mode(_mode_) #define HAL_UCACHE_WRITETHRU_MODE 0 #define HAL_UCACHE_WRITEBACK_MODE 1
