diff --git a/trunk/bootrom/build/libraries/os/common/os_interrupt.c b/trunk/bootrom/build/libraries/os/common/os_interrupt.c index 07ad519..3c2aaf0 100644 --- a/trunk/bootrom/build/libraries/os/common/os_interrupt.c +++ b/trunk/bootrom/build/libraries/os/common/os_interrupt.c @@ -110,84 +110,6 @@ asm void i_osIrqVeneer( void ) //================================================================================ // InterruptMask //================================================================================ -/*---------------------------------------------------------------------------* - Name: osSetInterruptMask - - Description: set interrupt factor - - Arguments: mask interrupt factor - - Returns: previous factors - *---------------------------------------------------------------------------*/ -OSIntrMask osSetInterruptMask( OSIntrMask mask ) -{ - OSIntrMode enabled = osDisableInterrupts(); -#ifdef SDK_ARM11 - OSIntrMask prep = reg_OS_IDR_SET_IE_ALL; - reg_OS_IDR_CLR_IE[0] = HW_IDR_WORD_MASK; - reg_OS_IDR_CLR_IE[1] = HW_IDR_WORD_MASK; - reg_OS_IDR_CLR_IE[2] = HW_IDR_WORD_MASK; - reg_OS_IDR_CLR_IE[3] = HW_IDR_WORD_MASK; - reg_OS_IDR_SET_IE_ALL = mask; -#else // SDK_ARM9 - OSIntrMask prep = reg_OS_IE; - reg_OS_IE = mask; -#endif // SDK_ARM9 - (void)osRestoreInterrupts( enabled ); - - return prep; -} - -/*---------------------------------------------------------------------------* - Name: osEnableInterruptMask - - Description: set specified interrupt factor - - Arguments: mask interrupt factor - - Returns: previous factors - *---------------------------------------------------------------------------*/ - -OSIntrMask osEnableInterruptMask( OSIntrMask mask ) -{ - OSIntrMode enabled = osDisableInterrupts(); -#ifdef SDK_ARM11 - OSIntrMask prep = reg_OS_IDR_SET_IE_ALL; - reg_OS_IDR_SET_IE_ALL = mask; -#else // SDK_ARM9 - OSIntrMask prep = reg_OS_IE; - reg_OS_IE = prep | mask; -#endif // SDK_ARM9 - (void)osRestoreInterrupts( enabled ); - - return prep; -} - -/*---------------------------------------------------------------------------* - Name: osDisableInterruptMask - - Description: unset specified interrupt factor - - Arguments: mask interrupt factor - - Returns: previous factors - *---------------------------------------------------------------------------*/ - -OSIntrMask osDisableInterruptMask( OSIntrMask mask ) -{ - OSIntrMode enabled = osDisableInterrupts(); -#ifdef SDK_ARM11 - OSIntrMask prep = reg_OS_IDR_SET_IE_ALL; - reg_OS_IDR_CLR_IE_ALL = mask; -#else // SDK_ARM9 - OSIntrMask prep = reg_OS_IE; - reg_OS_IE = prep & ~mask; -#endif // SDK_ARM9 - (void)osRestoreInterrupts( enabled ); - - return prep; -} - /*---------------------------------------------------------------------------* Name: osEnableInterruptID @@ -220,6 +142,31 @@ BOOL osEnableInterruptID( OSIntrID id ) return retval; } +/*---------------------------------------------------------------------------* + Name: osEnableInterruptMask + + Description: set specified interrupt factor + + Arguments: mask interrupt factor + + Returns: previous factors + *---------------------------------------------------------------------------*/ + +OSIntrMask osEnableInterruptMask( OSIntrMask mask ) +{ + OSIntrMode enabled = osDisableInterrupts(); +#ifdef SDK_ARM11 + OSIntrMask prep = reg_OS_IDR_SET_IE_ALL; + reg_OS_IDR_SET_IE_ALL = mask; +#else // SDK_ARM9 + OSIntrMask prep = reg_OS_IE; + reg_OS_IE = prep | mask; +#endif // SDK_ARM9 + (void)osRestoreInterrupts( enabled ); + + return prep; +} + /*---------------------------------------------------------------------------* Name: osDisableInterruptID @@ -252,6 +199,31 @@ BOOL osDisableInterruptID( OSIntrID id ) return retval; } +/*---------------------------------------------------------------------------* + Name: osDisableInterruptMask + + Description: unset specified interrupt factor + + Arguments: mask interrupt factor + + Returns: previous factors + *---------------------------------------------------------------------------*/ + +OSIntrMask osDisableInterruptMask( OSIntrMask mask ) +{ + OSIntrMode enabled = osDisableInterrupts(); +#ifdef SDK_ARM11 + OSIntrMask prep = reg_OS_IDR_SET_IE_ALL; + reg_OS_IDR_CLR_IE_ALL = mask; +#else // SDK_ARM9 + OSIntrMask prep = reg_OS_IE; + reg_OS_IE = prep & ~mask; +#endif // SDK_ARM9 + (void)osRestoreInterrupts( enabled ); + + return prep; +} + /*---------------------------------------------------------------------------* Name: osRestoreInterruptID @@ -299,35 +271,37 @@ BOOL osRestoreInterruptID( OSIntrID id, BOOL state ) return retval; } -//================================================================================ -// INTERRUPT PENDING -//================================================================================ /*---------------------------------------------------------------------------* - Name: osClearInterruptPendingMask + Name: osSetInterruptMask - Description: reset IF bit - (setting bit causes to clear bit for interrupt) + Description: set interrupt factor Arguments: mask interrupt factor Returns: previous factors *---------------------------------------------------------------------------*/ - -OSIntrMask osClearInterruptPendingMask( OSIntrMask mask ) +OSIntrMask osSetInterruptMask( OSIntrMask mask ) { OSIntrMode enabled = osDisableInterrupts(); #ifdef SDK_ARM11 - OSIntrMask prep = reg_OS_IDR_SET_PND_ALL; - reg_OS_IDR_CLR_PND_ALL = mask; + OSIntrMask prep = reg_OS_IDR_SET_IE_ALL; + reg_OS_IDR_CLR_IE[0] = HW_IDR_WORD_MASK; + reg_OS_IDR_CLR_IE[1] = HW_IDR_WORD_MASK; + reg_OS_IDR_CLR_IE[2] = HW_IDR_WORD_MASK; + reg_OS_IDR_CLR_IE[3] = HW_IDR_WORD_MASK; + reg_OS_IDR_SET_IE_ALL = mask; #else // SDK_ARM9 - OSIntrMask prep = reg_OS_IF; - reg_OS_IF = mask; + OSIntrMask prep = reg_OS_IE; + reg_OS_IE = mask; #endif // SDK_ARM9 (void)osRestoreInterrupts( enabled ); return prep; } +//================================================================================ +// INTERRUPT PENDING +//================================================================================ /*---------------------------------------------------------------------------* Name: osClearInterruptPendingID @@ -360,6 +334,32 @@ BOOL osClearInterruptPendingID( OSIntrID id ) return retval; } +/*---------------------------------------------------------------------------* + Name: osClearInterruptPendingMask + + Description: reset IF bit + (setting bit causes to clear bit for interrupt) + + Arguments: mask interrupt factor + + Returns: previous factors + *---------------------------------------------------------------------------*/ + +OSIntrMask osClearInterruptPendingMask( OSIntrMask mask ) +{ + OSIntrMode enabled = osDisableInterrupts(); +#ifdef SDK_ARM11 + OSIntrMask prep = reg_OS_IDR_SET_PND_ALL; + reg_OS_IDR_CLR_PND_ALL = mask; +#else // SDK_ARM9 + OSIntrMask prep = reg_OS_IF; + reg_OS_IF = mask; +#endif // SDK_ARM9 + (void)osRestoreInterrupts( enabled ); + + return prep; +} + #ifdef SDK_ARM11 /*---------------------------------------------------------------------------* @@ -468,6 +468,30 @@ OSIntrID i_osReadInterruptAcknowledgeRegister( void ) #endif // SDK_ARM11 +/*---------------------------------------------------------------------------* + Name: osIsInterruptPendingID + + Description: set Interrupt Clear Pending Register + + Arguments: Interrupt Distributor ID + + Returns: TRUE if last state is pending + *---------------------------------------------------------------------------*/ +BOOL osIsInterruptPendingID( OSIntrID id ) +{ + BOOL retval; +#ifdef SDK_ARM11 + u32 ofs = id/32; + u32 sft = id%32; + + retval = TRUE & (reg_OS_IDR_SET_PND[ofs] >> sft); +#else // SDK_ARM9 + retval = TRUE & (BOOL)(reg_OS_IF >> id); +#endif // SDK_ARM9 + + return retval; +} + //================================================================================ // IRQ CHEKE BUFFER diff --git a/trunk/bootrom/build/libraries/os/common/os_tick.c b/trunk/bootrom/build/libraries/os/common/os_tick.c index 599ca30..866f412 100644 --- a/trunk/bootrom/build/libraries/os/common/os_tick.c +++ b/trunk/bootrom/build/libraries/os/common/os_tick.c @@ -161,7 +161,7 @@ u64 osGetTick(void) countH = i_osTickCounter; //---- check if timer interrupt bit is on - if (osIsInterruptPending(OSi_TICK_IE_TIMER_ID) && + if (osIsInterruptPendingID(OSi_TICK_IE_TIMER_ID) && // countLが0xFFFFで直後に割り込み要求が来た場合の対策 #ifdef SDK_ARM11 // ダウンカウンタなので diff --git a/trunk/bootrom/include/brom/os.h b/trunk/bootrom/include/brom/os.h index 7516a72..14de3f6 100644 --- a/trunk/bootrom/include/brom/os.h +++ b/trunk/bootrom/include/brom/os.h @@ -36,11 +36,7 @@ extern "C" { #include #include #include -#ifdef SDK_ARM11 -#include -#else // SDK_ARM9 #include -#endif // SDK_ARM9 #if 0 #include #include diff --git a/trunk/bootrom/include/brom/os/ARM11/interrupt.h b/trunk/bootrom/include/brom/os/ARM11/interrupt.h deleted file mode 100644 index 8e91a03..0000000 --- a/trunk/bootrom/include/brom/os/ARM11/interrupt.h +++ /dev/null @@ -1,238 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: CtrBrom - OS - include - File: interrupt.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef BROM_OS_INTERRUPT_H_ -#define BROM_OS_INTERRUPT_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define OS_IDR_CPU0_TARGET_ENABLE HW_IDR_CPU0_TARGET_ENABLE -#define OS_IDR_INTR_PRIO_DEFAULT 8 // Interrupt priority default (0-15) - - -OSIntrID i_osReadHighestPendingInterruptRegister( void ); -OSIntrID i_osReadInterruptAcknowledgeRegister( void ); - - -/*---------------------------------------------------------------------------* - Name: osInitInterrupts - - Description: Initialize Interrupts - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void osInitInterrupt( void ); - -/*---------------------------------------------------------------------------* - Name: osEnableInterruptID - - Description: set Interrupt Set Enable Register - - Arguments: Interrupt Distributor ID - - Returns: TRUE if last state is pending - *---------------------------------------------------------------------------*/ -BOOL osEnableInterruptID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osDisableInterruptID - - Description: set Interrupt Clear Enable Register - - Arguments: Interrupt Distributor ID - - Returns: TRUE if last state is pending - *---------------------------------------------------------------------------*/ -BOOL osDisableInterruptID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osRestoreInterruptID - - Description: set Interrupt Clear Enable Register - - Arguments: id : Interrupt Distributor ID - state : state whether interrupt is enabled - - Returns: TRUE if last state is enabled - *---------------------------------------------------------------------------*/ -BOOL osRestoreInterruptID( OSIntrID id, BOOL state ); - -/*---------------------------------------------------------------------------* - Name: osIsInterruptIDPending - - Description: set Interrupt Clear Pending Register - - Arguments: Interrupt Distributor ID - - Returns: TRUE if last state is pending - *---------------------------------------------------------------------------*/ -static inline BOOL osIsInterruptPending( OSIntrID id ) -{ -#ifdef SDK_ARM11 - u32 ofs = id/32; - u32 sft = id%32; - BOOL retval; - - retval = TRUE & (reg_OS_IDR_SET_PND[ofs] >> sft); -#else // SDK_ARM9 - OSIntrMask prep = reg_OS_IF; - BOOL retval; - - retval = TRUE & (BOOL)(prep >> id); -#endif // SDK_ARM9 - - return retval; -} - -/*---------------------------------------------------------------------------* - Name: osSetInterruptPendingID - - Description: set Interrupt Set Pending Register - - Arguments: Interrupt Distributor ID - - Returns: TRUE if last state is pending - *---------------------------------------------------------------------------*/ -BOOL osSetInterruptPendingID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osClearInterruptPendingID - - Description: set Interrupt Clear Pending Register - - Arguments: Interrupt Distributor ID - - Returns: TRUE if last state is pending - *---------------------------------------------------------------------------*/ -BOOL osClearInterruptPendingID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osRestoreInterruptPendingID - - Description: restore Interrupt Pending - - Arguments: id : Interrupt Distributor ID - state : state whether interrupt is enabled - - Returns: TRUE if last state is pending - *---------------------------------------------------------------------------*/ -BOOL osRestoreInterruptPendingID( OSIntrID id, BOOL state ); - -/*---------------------------------------------------------------------------* - Name: osSetEndOfInterruptRegister - - Description: set ID to End of Interrupt Register - - change state to Inactive. - - Arguments: Interrupt Distributor ID - - Returns: None - *---------------------------------------------------------------------------*/ -void osSetEndOfInterruptRegister( OSIntrID id ); - -//================================================================================ -// WAIT FOR INTERRUPT -//================================================================================ -/*---------------------------------------------------------------------------* - Name: osWaitInterruptID - - Description: wait specifiled interrupt. - OS_WaitInterrupt doesn't switch thread. - OS_WaitInterrupt wait by using OS_Halt(). - - Arguments: clear TRUE if want to clear interrupt flag before wait. - FALSE if not. - irqFlags bit of interrupts to wait for - - Returns: None - *---------------------------------------------------------------------------*/ -void osWaitInterruptID( BOOL clear, OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osWaitInterruptMask - - Description: wait specifiled interrupt. - OS_WaitInterrupt doesn't switch thread. - OS_WaitInterrupt wait by using OS_Halt(). - - Arguments: clear TRUE if want to clear interrupt flag before wait. - FALSE if not. - irqFlags bit of interrupts to wait for - - Returns: None - *---------------------------------------------------------------------------*/ -void osWaitInterruptMask( BOOL clear, OSIntrMask irqFlags ); - -//================================================================================ -// INTERRUPT FLAG (INCLUDING TO WAIT FOR INTERRUPT) -//================================================================================ -/*---------------------------------------------------------------------------* - Name: osSetInterruptCheckID - - Description: set irq flag to check being called - - Arguments: irq factors to be set - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL osSetInterruptCheckID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osClearInterruptCheckID - - Description: clear irq flag stored in HW_INTR_CHECK_BUF - - Arguments: irq factors to be set - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL osClearInterruptCheckID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osIsInterruptCheckID - - Description: check irq flag stored in HW_INTR_CHECK_BUF - - Arguments: irq factors to be set - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL osIsInterruptCheckID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osIsInterruptCheckMask - - Description: check irq flag stored in HW_INTR_CHECK_BUF - - Arguments: irq factors to be cleared - - Returns: TRUE if irq flag exists - *---------------------------------------------------------------------------*/ -BOOL osIsInterruptCheckMask( OSIntrMask mask ); - - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // BROM_OS_INTERRUPT_H_ diff --git a/trunk/bootrom/include/brom/os/common/interrupt.h b/trunk/bootrom/include/brom/os/common/interrupt.h index 098c62f..88b9086 100644 --- a/trunk/bootrom/include/brom/os/common/interrupt.h +++ b/trunk/bootrom/include/brom/os/common/interrupt.h @@ -23,34 +23,41 @@ extern "C" { #endif +#ifdef SDK_ARM11 + +#define OS_IDR_CPU0_TARGET_ENABLE HW_IDR_CPU0_TARGET_ENABLE +#define OS_IDR_INTR_PRIO_DEFAULT 8 // Interrupt priority default (0-15) + +OSIntrID i_osReadHighestPendingInterruptRegister( void ); +OSIntrID i_osReadInterruptAcknowledgeRegister( void ); + +#endif // SDK_ARM11 + + +/*---------------------------------------------------------------------------* + Name: osInitInterrupts + + Description: Initialize Interrupts + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void osInitInterrupt( void ); //================================================================================ // INTERRUPT MASK //================================================================================ /*---------------------------------------------------------------------------* - Name: osSetInterruptMask + Name: osEnableInterruptID - Description: set irq factor + Description: set Interrupt Set Enable Register - Arguments: mask irq factor + Arguments: Interrupt Distributor ID - Returns: previous factors + Returns: TRUE if last state is pending *---------------------------------------------------------------------------*/ -OSIntrMask osSetInterruptMask( OSIntrMask mask ); - -/*---------------------------------------------------------------------------* - Name: osGetInterruptMask - - Description: get irq factor - - Arguments: None - - Returns: irq factor which is set now - *---------------------------------------------------------------------------*/ -static inline OSIntrMask osGetInterruptMask(void) -{ - return reg_OS_IE; -} +BOOL osEnableInterruptID( OSIntrID id ); /*---------------------------------------------------------------------------* Name: osEnableInterruptMask @@ -63,6 +70,17 @@ static inline OSIntrMask osGetInterruptMask(void) *---------------------------------------------------------------------------*/ OSIntrMask osEnableInterruptMask( OSIntrMask mask ); +/*---------------------------------------------------------------------------* + Name: osDisableInterruptID + + Description: set Interrupt Clear Enable Register + + Arguments: Interrupt Distributor ID + + Returns: TRUE if last state is pending + *---------------------------------------------------------------------------*/ +BOOL osDisableInterruptID( OSIntrID id ); + /*---------------------------------------------------------------------------* Name: osDisableInterruptMask @@ -74,6 +92,29 @@ OSIntrMask osEnableInterruptMask( OSIntrMask mask ); *---------------------------------------------------------------------------*/ OSIntrMask osDisableInterruptMask( OSIntrMask mask ); +/*---------------------------------------------------------------------------* + Name: osRestoreInterruptID + + Description: set Interrupt Clear Enable Register + + Arguments: id : Interrupt Distributor ID + state : state whether interrupt is enabled + + Returns: TRUE if last state is enabled + *---------------------------------------------------------------------------*/ +BOOL osRestoreInterruptID( OSIntrID id, BOOL state ); + +/*---------------------------------------------------------------------------* + Name: osSetInterruptMask + + Description: set irq factor + + Arguments: mask irq factor + + Returns: previous factors + *---------------------------------------------------------------------------*/ +OSIntrMask osSetInterruptMask( OSIntrMask mask ); + /*---------------------------------------------------------------------------* Name: osRestoreInterruptMask @@ -89,72 +130,26 @@ static inline OSIntrMask osRestoreInterruptMask( OSIntrMask mask ) } /*---------------------------------------------------------------------------* - Name: osEnableInterruptID + Name: osGetInterruptMask - Description: set Interrupt Set Enable Register + Description: get irq factor - Arguments: Interrupt Distributor ID + Arguments: None - Returns: TRUE if last state is pending + Returns: irq factor which is set now *---------------------------------------------------------------------------*/ -BOOL osEnableInterruptID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osDisableInterruptID - - Description: set Interrupt Clear Enable Register - - Arguments: Interrupt Distributor ID - - Returns: TRUE if last state is pending - *---------------------------------------------------------------------------*/ -BOOL osDisableInterruptID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osRestoreInterruptID - - Description: set Interrupt Clear Enable Register - - Arguments: id : Interrupt Distributor ID - state : state whether interrupt is enabled - - Returns: TRUE if last state is enabled - *---------------------------------------------------------------------------*/ -BOOL osRestoreInterruptID( OSIntrID id, BOOL state ); +static inline OSIntrMask osGetInterruptMask(void) +{ +#ifdef SDK_ARM11 + return reg_OS_IDR_SET_IE_ALL; +#else // SDK_ARM9 + return reg_OS_IE; +#endif // SDK_ARM9 +} //================================================================================ // INTERRUPT PENDING //================================================================================ -/*---------------------------------------------------------------------------* - Name: osClearInterruptPendingMask - - Description: reset IF bit - (setting bit causes to clear bit for interrupt) - - Arguments: intr irq factor - - Returns: previous factors - *---------------------------------------------------------------------------*/ -OSIntrMask osClearInterruptPendingMask( OSIntrMask mask ); - -/*---------------------------------------------------------------------------* - Name: osGetInterruptPendingMask - - Description: get IF bit - - Arguments: None - - Returns: value of IF - *---------------------------------------------------------------------------*/ -static inline OSIntrMask osGetInterruptPendingMask( void ) -{ -#ifdef SDK_ARM9 - return reg_OS_IF; -#else // MPCORE - return reg_OS_IDR_SET_PENDING_ST; -#endif // MPCORE -} - /*---------------------------------------------------------------------------* Name: osClearInterruptPendingID @@ -167,7 +162,83 @@ static inline OSIntrMask osGetInterruptPendingMask( void ) BOOL osClearInterruptPendingID( OSIntrID id ); /*---------------------------------------------------------------------------* - Name: osIsInterruptIDPending + Name: osClearInterruptPendingMask + + Description: reset IF bit + (setting bit causes to clear bit for interrupt) + + Arguments: intr irq factor + + Returns: previous factors + *---------------------------------------------------------------------------*/ +OSIntrMask osClearInterruptPendingMask( OSIntrMask mask ); + +#ifdef SDK_ARM11 + +/*---------------------------------------------------------------------------* + Name: osSetInterruptPendingID + + Description: set Interrupt Set Pending Register + + Arguments: Interrupt Distributor ID + + Returns: TRUE if last state is pending + *---------------------------------------------------------------------------*/ +BOOL osSetInterruptPendingID( OSIntrID id ); + +/*---------------------------------------------------------------------------* + Name: osRestoreInterruptPendingID + + Description: restore Interrupt Pending + + Arguments: id : Interrupt Distributor ID + state : state whether interrupt is enabled + + Returns: TRUE if last state is pending + *---------------------------------------------------------------------------*/ +BOOL osRestoreInterruptPendingID( OSIntrID id, BOOL state ); + +/*---------------------------------------------------------------------------* + Name: osSetEndOfInterruptRegister + + Description: set ID to End of Interrupt Register + + change state to Inactive. + + Arguments: Interrupt Distributor ID + + Returns: None + *---------------------------------------------------------------------------*/ +void osSetEndOfInterruptRegister( OSIntrID id ); + +/*---------------------------------------------------------------------------* + Name: i_osReadHighestPendingInterruptRegister + + Description: read ID from Highest Pending Interrupt Register + + Arguments: None + + Returns: Interrupt Distributor ID + *---------------------------------------------------------------------------*/ +OSIntrID i_osReadHighestPendingInterruptRegister( void ); + +/*---------------------------------------------------------------------------* + Name: i_osReadInterruptAcknowledgeRegister + + Description: read ID from Interrupt Acknowledge Register + + get interrupt ID and change state to NotPending and Active. + + Arguments: None + + Returns: Interrupt Distributor ID + *---------------------------------------------------------------------------*/ +OSIntrID i_osReadInterruptAcknowledgeRegister( void ); + +#endif // SDK_ARM11 + +/*---------------------------------------------------------------------------* + Name: osIsInterruptPendingID Description: set Interrupt Clear Pending Register @@ -175,24 +246,27 @@ BOOL osClearInterruptPendingID( OSIntrID id ); Returns: TRUE if last state is pending *---------------------------------------------------------------------------*/ -static inline BOOL osIsInterruptPending( OSIntrID id ) +BOOL osIsInterruptPendingID( OSIntrID id ); + +/*---------------------------------------------------------------------------* + Name: osGetInterruptPendingMask + + Description: get IF bit + + Arguments: None + + Returns: value of IF + *---------------------------------------------------------------------------*/ +static inline OSIntrMask osGetInterruptPendingMask( void ) { #ifdef SDK_ARM11 - u32 ofs = id/32; - u32 sft = id%32; - BOOL retval; - - retval = TRUE & (reg_OS_IDR_SET_PND[ofs] >> sft); + return reg_OS_IDR_SET_PND_ALL; #else // SDK_ARM9 - OSIntrMask prep = reg_OS_IF; - BOOL retval; - - retval = TRUE & (BOOL)(prep >> id); + return reg_OS_IF; #endif // SDK_ARM9 - - return retval; } + //================================================================================ // INTERRUPT HANDLER //================================================================================ @@ -233,7 +307,7 @@ void osSetInterruptHandler( OSIntrID id, OSIntrFunction function ); OSIntrFunction osGetInterruptHandler( OSIntrID id ); //================================================================================ -// INTERRUPT CHECK +// INTERRUPT FLAG (INCLUDING TO WAIT FOR INTERRUPT) //================================================================================ /*---------------------------------------------------------------------------* Name: osSetInterruptCheckID @@ -246,28 +320,6 @@ OSIntrFunction osGetInterruptHandler( OSIntrID id ); *---------------------------------------------------------------------------*/ BOOL osSetInterruptCheckID( OSIntrID id ); -/*---------------------------------------------------------------------------* - Name: osClearInterruptCheckID - - Description: clear irq flag stored in HW_INTR_CHECK_BUF - - Arguments: irq factors to be set - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL osClearInterruptCheckID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osIsInterruptCheckID - - Description: check irq flag stored in HW_INTR_CHECK_BUF - - Arguments: irq factors to be set - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL osIsInterruptCheckID( OSIntrID id ); - /*---------------------------------------------------------------------------* Name: osSetInterruptCheckMask @@ -279,6 +331,17 @@ BOOL osIsInterruptCheckID( OSIntrID id ); *---------------------------------------------------------------------------*/ void osSetInterruptCheckMask( OSIntrMask intr ); +/*---------------------------------------------------------------------------* + Name: osClearInterruptCheckID + + Description: clear irq flag stored in HW_INTR_CHECK_BUF + + Arguments: irq factors to be set + + Returns: None + *---------------------------------------------------------------------------*/ +BOOL osClearInterruptCheckID( OSIntrID id ); + /*---------------------------------------------------------------------------* Name: osClearInterruptCheckMask @@ -290,6 +353,28 @@ void osSetInterruptCheckMask( OSIntrMask intr ); *---------------------------------------------------------------------------*/ void osClearInterruptCheckMask( OSIntrMask mask ); +/*---------------------------------------------------------------------------* + Name: osIsInterruptCheckID + + Description: check irq flag stored in HW_INTR_CHECK_BUF + + Arguments: irq factors to be set + + Returns: None + *---------------------------------------------------------------------------*/ +BOOL osIsInterruptCheckID( OSIntrID id ); + +/*---------------------------------------------------------------------------* + Name: osIsInterruptCheckMask + + Description: check irq flag stored in HW_INTR_CHECK_BUF + + Arguments: irq factors to be cleared + + Returns: TRUE if irq flag exists + *---------------------------------------------------------------------------*/ +BOOL osIsInterruptCheckMask( OSIntrMask mask ); + /*---------------------------------------------------------------------------* Name: osGetInterruptCheckMask @@ -301,7 +386,11 @@ void osClearInterruptCheckMask( OSIntrMask mask ); *---------------------------------------------------------------------------*/ static inline OSIntrMask osGetInterruptCheckMask( void ) { +#ifdef SDK_ARM11 + return *(OSIntrMask *)HW_INTR_CHECK0_BUF; +#else // SDK_ARM9 return *(OSIntrMask *)HW_INTR_CHECK_BUF; +#endif // SDK_ARM9 } //================================================================================ @@ -337,53 +426,6 @@ void osWaitInterruptID( BOOL clear, OSIntrID id ); *---------------------------------------------------------------------------*/ void osWaitInterruptMask( BOOL clear, OSIntrMask irqFlags ); -//================================================================================ -// INTERRUPT FLAG (INCLUDING TO WAIT FOR INTERRUPT) -//================================================================================ -/*---------------------------------------------------------------------------* - Name: osSetInterruptCheckID - - Description: set irq flag to check being called - - Arguments: irq factors to be set - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL osSetInterruptCheckID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osClearInterruptCheckID - - Description: clear irq flag stored in HW_INTR_CHECK_BUF - - Arguments: irq factors to be set - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL osClearInterruptCheckID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osIsInterruptCheckID - - Description: check irq flag stored in HW_INTR_CHECK_BUF - - Arguments: irq factors to be set - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL osIsInterruptCheckID( OSIntrID id ); - -/*---------------------------------------------------------------------------* - Name: osIsInterruptCheckMask - - Description: check irq flag stored in HW_INTR_CHECK_BUF - - Arguments: irq factors to be cleared - - Returns: TRUE if irq flag exists - *---------------------------------------------------------------------------*/ -BOOL osIsInterruptCheckMask( OSIntrMask mask ); - #ifdef __cplusplus } /* extern "C" */