Mercurial > flash_v2
diff packages/hal/powerpc/arch/current/include/hal_intr.h @ 14:01ce82f3e11a ecos-sw-1999-06-11
Merge from eCos master repository on 1999-06-11-17:05:41-BST
| author | jlarmour |
|---|---|
| date | Fri, 11 Jun 1999 09:36:56 +0000 |
| parents | d3fbcdfa1b2f |
| children | 5f5102441818 |
line wrap: on
line diff
--- a/packages/hal/powerpc/arch/current/include/hal_intr.h +++ b/packages/hal/powerpc/arch/current/include/hal_intr.h @@ -249,9 +249,11 @@ externC volatile CYG_ADDRESS hal_inte externC volatile CYG_ADDRESS hal_vsr_table[CYGNUM_HAL_VSR_COUNT]; //-------------------------------------------------------------------------- -// Default ISR +// Default ISRs externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data); +externC cyg_uint32 hal_default_decrementer_isr(CYG_ADDRWORD vector, + CYG_ADDRWORD data); //-------------------------------------------------------------------------- // Interrupt state storage @@ -343,41 +345,49 @@ externC void hal_interrupt_stack_call_pe //-------------------------------------------------------------------------- // Interrupt and VSR attachment macros -#define HAL_INTERRUPT_IN_USE( _vector_, _state_) \ - CYG_MACRO_START \ - cyg_uint32 _index_; \ - HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ - \ - if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)hal_default_isr ) \ - (_state_) = 0; \ - else \ - (_state_) = 1; \ +#define HAL_INTERRUPT_IN_USE( _vector_, _state_) \ + CYG_MACRO_START \ + cyg_uint32 _index_; \ + HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ + \ + if((hal_interrupt_handlers[_index_] \ + == (CYG_ADDRESS)hal_default_decrementer_isr) \ + || (hal_interrupt_handlers[_index_] == (CYG_ADDRESS)hal_default_isr)) \ + (_state_) = 0; \ + else \ + (_state_) = 1; \ CYG_MACRO_END -#define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ ) \ - CYG_MACRO_START \ - cyg_uint32 _index_; \ - HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ - \ - if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)hal_default_isr ) \ - { \ - hal_interrupt_handlers[_index_] = (CYG_ADDRESS)_isr_; \ - hal_interrupt_data[_index_] = (CYG_ADDRWORD) _data_; \ - hal_interrupt_objects[_index_] = (CYG_ADDRESS)_object_; \ - } \ +#define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ ) \ + CYG_MACRO_START \ + cyg_uint32 _index_; \ + HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ + \ + if((hal_interrupt_handlers[_index_] \ + == (CYG_ADDRESS)hal_default_decrementer_isr) \ + || (hal_interrupt_handlers[_index_] == (CYG_ADDRESS)hal_default_isr)) \ + { \ + hal_interrupt_handlers[_index_] = (CYG_ADDRESS)_isr_; \ + hal_interrupt_data[_index_] = (CYG_ADDRWORD) _data_; \ + hal_interrupt_objects[_index_] = (CYG_ADDRESS)_object_; \ + } \ CYG_MACRO_END -#define HAL_INTERRUPT_DETACH( _vector_, _isr_ ) \ - CYG_MACRO_START \ - cyg_uint32 _index_; \ - HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ - \ - if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)_isr_ ) \ - { \ - hal_interrupt_handlers[_index_] = (CYG_ADDRESS)hal_default_isr; \ - hal_interrupt_data[_index_] = 0; \ - hal_interrupt_objects[_index_] = 0; \ - } \ +#define HAL_INTERRUPT_DETACH( _vector_, _isr_ ) \ + CYG_MACRO_START \ + cyg_uint32 _index_; \ + HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ + \ + if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)_isr_ ) \ + { \ + if (CYGNUM_HAL_INTERRUPT_DECREMENTER == (_vector_)) \ + hal_interrupt_handlers[_index_] = \ + (CYG_ADDRESS)hal_default_decrementer_isr; \ + else \ + hal_interrupt_handlers[_index_] = (CYG_ADDRESS)hal_default_isr; \ + hal_interrupt_data[_index_] = 0; \ + hal_interrupt_objects[_index_] = 0; \ + } \ CYG_MACRO_END #define HAL_VSR_GET( _vector_, _pvsr_ ) \
