Mercurial > nand-ecoscentric
diff packages/hal/mips/arch/current/include/hal_cache.h @ 10:d3fbcdfa1b2f ecos-sw-1999-05-29
Merge from eCos master repository on 1999-05-29-00:13:11-BST
| author | jlarmour |
|---|---|
| date | Fri, 28 May 1999 16:43:09 +0000 |
| parents | d376b777e2ce |
| children | 7253dcc42a09 |
line wrap: on
line diff
--- a/packages/hal/mips/arch/current/include/hal_cache.h +++ b/packages/hal/mips/arch/current/include/hal_cache.h @@ -93,6 +93,10 @@ #define HAL_DCACHE_DISABLE() #endif +#ifndef HAL_DCACHE_IS_ENABLED_DEFINED +#define HAL_DCACHE_IS_ENABLED(_state_) (_state_) = 1; +#endif + // Invalidate the entire cache // We simply use HAL_DCACHE_SYNC() to do this. For writeback caches this // is not quite what we want, but there is no index-invalidate operation @@ -109,12 +113,14 @@ register CYG_ADDRESS _baddr_ = 0x80000000; \ register CYG_ADDRESS _addr_ = 0x80000000; \ register CYG_WORD _size_ = HAL_DCACHE_SIZE; \ + register CYG_WORD _state_; \ + HAL_DCACHE_IS_ENABLED(_state_); \ HAL_DCACHE_DISABLE(); \ for( ; _addr_ <= _baddr_+_size_; _addr_ += HAL_DCACHE_LINE_SIZE ) \ { \ asm volatile ("cache 0x01,0(%0)" : : "r"(_addr_) ); \ } \ - HAL_DCACHE_ENABLE(); \ + if( _state_ ) HAL_DCACHE_ENABLE(); \ } #endif @@ -136,12 +142,14 @@ CYG_MACRO_START register CYG_ADDRESS _baddr_ = (CYG_ADDRESS)(_base_); \ register CYG_ADDRESS _addr_ = (CYG_ADDRESS)(_base_); \ register CYG_WORD _size_ = (_asize_); \ + register CYG_WORD _state_; \ + HAL_DCACHE_IS_ENABLED(_state_); \ HAL_DCACHE_DISABLE(); \ for( ; _addr_ <= _baddr_+_size_; _addr_ += HAL_DCACHE_LINE_SIZE ) \ { \ asm volatile ("cache 0x1d,0(%0)" : : "r"(_addr_) ); \ } \ - HAL_DCACHE_ENABLE(); \ + if( _state_ ) HAL_DCACHE_ENABLE(); \ CYG_MACRO_END #endif @@ -174,12 +182,14 @@ CYG_MACRO_END register CYG_ADDRESS _baddr_ = (CYG_ADDRESS)(_base_); \ register CYG_ADDRESS _addr_ = (CYG_ADDRESS)(_base_); \ register CYG_WORD _size_ = (_asize_); \ + register CYG_WORD _state_; \ + HAL_DCACHE_IS_ENABLED(_state_); \ HAL_DCACHE_DISABLE(); \ for( ; _addr_ <= _baddr_+_size_; _addr_ += HAL_DCACHE_LINE_SIZE ) \ { \ asm volatile ("cache 0x15,0(%0)" : : "r"(_addr_) ); \ } \ - HAL_DCACHE_ENABLE(); \ + if( _state_ ) HAL_DCACHE_ENABLE(); \ } #endif @@ -191,12 +201,14 @@ CYG_MACRO_END register CYG_ADDRESS _baddr_ = (CYG_ADDRESS)(_base_); \ register CYG_ADDRESS _addr_ = (CYG_ADDRESS)(_base_); \ register CYG_WORD _size_ = (_asize_); \ + register CYG_WORD _state_; \ + HAL_DCACHE_IS_ENABLED(_state_); \ HAL_DCACHE_DISABLE(); \ for( ; _addr_ <= _baddr_+_size_; _addr_ += HAL_DCACHE_LINE_SIZE ) \ { \ asm volatile ("cache 0x11,0(%0)" : : "r"(_addr_) ); \ } \ - HAL_DCACHE_ENABLE(); \ + if( _state_ ) HAL_DCACHE_ENABLE(); \ } #endif @@ -208,12 +220,14 @@ CYG_MACRO_END register CYG_ADDRESS _baddr_ = (CYG_ADDRESS)(_base_); \ register CYG_ADDRESS _addr_ = (CYG_ADDRESS)(_base_); \ register CYG_WORD _size_ = (_asize_); \ + register CYG_WORD _state_; \ + HAL_DCACHE_IS_ENABLED(_state_); \ HAL_DCACHE_DISABLE(); \ for( ; _addr_ <= _baddr_+_size_; _addr_ += HAL_DCACHE_LINE_SIZE ) \ { \ asm volatile ("cache 0x19,0(%0)" : : "r"(_addr_) ); \ } \ - HAL_DCACHE_ENABLE(); \ + if( _state_ ) HAL_DCACHE_ENABLE(); \ } #endif @@ -242,6 +256,10 @@ CYG_MACRO_END #define HAL_ICACHE_DISABLE() #endif +#ifndef HAL_ICACHE_IS_ENABLED_DEFINED +#define HAL_ICACHE_IS_ENABLED(_state_) (_state_) = 1; +#endif + // Invalidate the entire cache // This uses the index-invalidate cache operation. #ifndef HAL_ICACHE_INVALIDATE_ALL_DEFINED @@ -249,12 +267,14 @@ CYG_MACRO_END { \ register CYG_ADDRESS _baddr_ = 0x80000000; \ register CYG_ADDRESS _addr_ = 0x80000000; \ + register CYG_WORD _state_; \ + HAL_ICACHE_IS_ENABLED(_state_); \ HAL_ICACHE_DISABLE(); \ for( ; _addr_ < _baddr_+HAL_ICACHE_SIZE; _addr_ += HAL_ICACHE_LINE_SIZE ) \ { \ asm volatile ("cache 0x00,0(%0)" : : "r"(_addr_) ); \ } \ - HAL_ICACHE_ENABLE(); \ + if( _state_ ) HAL_ICACHE_ENABLE(); \ } #endif @@ -276,12 +296,14 @@ CYG_MACRO_START register CYG_ADDRESS _baddr_ = (CYG_ADDRESS)(_base_); \ register CYG_ADDRESS _addr_ = (CYG_ADDRESS)(_base_); \ register CYG_WORD _size_ = (_asize_); \ - HAL_DCACHE_DISABLE(); \ + register CYG_WORD _state_; \ + HAL_ICACHE_IS_ENABLED(_state_); \ + HAL_ICACHE_DISABLE(); \ for( ; _addr_ <= _baddr_+_size_; _addr_ += HAL_DCACHE_LINE_SIZE ) \ { \ asm volatile ("cache 0x1c,0(%0)" : : "r"(_addr_) ); \ } \ - HAL_DCACHE_ENABLE(); \ + if( _state_ ) HAL_ICACHE_ENABLE(); \ CYG_MACRO_END #endif @@ -306,12 +328,14 @@ CYG_MACRO_END register CYG_ADDRESS _baddr_ = (CYG_ADDRESS)(_base_); \ register CYG_ADDRESS _addr_ = (CYG_ADDRESS)(_base_); \ register CYG_WORD _size_ = (_asize_); \ - HAL_DCACHE_DISABLE(); \ - for( ; _addr_ <= _baddr_+_size_; _addr_ += HAL_DCACHE_LINE_SIZE ) \ + register CYG_WORD _state_; \ + HAL_ICACHE_IS_ENABLED(_state_); \ + HAL_ICACHE_DISABLE(); \ + for( ; _addr_ <= _baddr_+_size_; _addr_ += HAL_ICACHE_LINE_SIZE ) \ { \ asm volatile ("cache 0x10,0(%0)" : : "r"(_addr_) ); \ } \ - HAL_DCACHE_ENABLE(); \ + HAL_ICACHE_ENABLE(); \ } #endif
