diff --git a/trunk/bootrom/build/libraries/os/ARM11/Makefile b/trunk/bootrom/build/libraries/os/ARM11/Makefile index 6d0dce3..fb5a5cc 100644 --- a/trunk/bootrom/build/libraries/os/ARM11/Makefile +++ b/trunk/bootrom/build/libraries/os/ARM11/Makefile @@ -36,7 +36,6 @@ SRCS = \ os_alarm.c \ os_irqHandler.c \ os_interrupt.c \ - os_interrupt_common.c \ os_thread.c \ os_context.c \ diff --git a/trunk/bootrom/build/libraries/os/ARM9/Makefile b/trunk/bootrom/build/libraries/os/ARM9/Makefile index 489bff3..c46cf5f 100644 --- a/trunk/bootrom/build/libraries/os/ARM9/Makefile +++ b/trunk/bootrom/build/libraries/os/ARM9/Makefile @@ -39,7 +39,6 @@ SRCS = \ os_alarm.c \ os_irqHandler.c \ os_interrupt.c \ - os_interrupt_common.c \ os_thread.c \ os_context.c \ diff --git a/trunk/bootrom/build/libraries/os/common/os_interrupt.c b/trunk/bootrom/build/libraries/os/common/os_interrupt.c index 3c2aaf0..5295058 100644 --- a/trunk/bootrom/build/libraries/os/common/os_interrupt.c +++ b/trunk/bootrom/build/libraries/os/common/os_interrupt.c @@ -17,6 +17,13 @@ #include +#ifdef SDK_ARM11 +OSIntrFunction osIntrTable[OS_INTR_ID_NUM]; +#else // SDK_ARM9 +OSIntrFunction osIntrTable[OS_INTR_ID_NUM] ATTRIBUTE_SECTION(.dtcm); +#endif // SDK_ARM9 + + asm void i_osIrqVeneer( void ); /*---------------------------------------------------------------------------* @@ -28,7 +35,6 @@ asm void i_osIrqVeneer( void ); Returns: None *---------------------------------------------------------------------------*/ - void osInitInterrupt( void ) { static BOOL isInit; @@ -96,7 +102,6 @@ void osInitInterrupt( void ) Returns: None *---------------------------------------------------------------------------*/ #include - asm void i_osIrqVeneer( void ) { INASM_EXTERN( osIrqHandler ) @@ -107,6 +112,308 @@ asm void i_osIrqVeneer( void ) #include +/*---------------------------------------------------------------------------* + Name: i_osInitInterruptTable + + Description: Initialize InterruptTable + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void i_osInitInterruptTable( void ) +{ + int i; + + for (i=0; i + +/*---------------------------------------------------------------------------* + Name: osEnableIrq + + Description: Set CPSR to enable irq interrupt + + Arguments: None. + + Returns: last state of HW_PSR_IRQ_DISABLE + *---------------------------------------------------------------------------*/ +ASM OSIntrMode osEnableIrq( void ) +{ + mrs r0, cpsr + +#ifdef SDK_USE_MPCORE_EXTEND_OP + cpsie i +#else + bic r1, r0, #HW_PSR_IRQ_DISABLE + msr cpsr_c, r1 +#endif + and r0, r0, #HW_PSR_IRQ_DISABLE + bx lr +} + +/*---------------------------------------------------------------------------* + Name: osDisableIrq + + Description: Set CPSR to disable irq interrupt + + Arguments: None. + + Returns: last state of HW_PSR_IRQ_DISABLE + *---------------------------------------------------------------------------*/ +ASM OSIntrMode osDisableIrq( void ) +{ + mrs r0, cpsr + +#ifdef SDK_USE_MPCORE_EXTEND_OP + cpsid i +#else + orr r1, r0, #HW_PSR_IRQ_DISABLE + msr cpsr_c, r1 +#endif + and r0, r0, #HW_PSR_IRQ_DISABLE + + bx lr +} + +/*---------------------------------------------------------------------------* + Name: osRestoreIrq + + Description: Restore CPSR irq interrupt + + Arguments: state of irq and fiq interrupt bit + + Returns: last state of HW_PSR_IRQ_DISABLE + *---------------------------------------------------------------------------*/ +ASM OSIntrMode osRestoreIrq( OSIntrMode state ) +{ + mrs r1, cpsr + bic r2, r1, #HW_PSR_IRQ_DISABLE + orr r2, r2, r0 + msr cpsr_c, r2 + and r0, r1, #HW_PSR_IRQ_DISABLE + + bx lr +} + +/*---------------------------------------------------------------------------* + Name: osEnableFiq + + Description: Set CPSR to enable fiq interrupt + + Arguments: None. + + Returns: last state of HW_PSR_FIQ_DISABLE + *---------------------------------------------------------------------------*/ +ASM OSIntrMode osEnableFiq( void ) +{ + mrs r0, cpsr + +#ifdef SDK_USE_MPCORE_EXTEND_OP + cpsie f +#else + bic r1, r0, #HW_PSR_FIQ_DISABLE + msr cpsr_c, r1 +#endif + and r0, r0, #HW_PSR_FIQ_DISABLE + + bx lr +} + +/*---------------------------------------------------------------------------* + Name: osDisableFiq + + Description: Set CPSR to disable fiq interrupt + + Arguments: None. + + Returns: last state of HW_PSR_FIQ_DISABLE + *---------------------------------------------------------------------------*/ +ASM OSIntrMode osDisableFiq( void ) +{ + mrs r0, cpsr + +#ifdef SDK_USE_MPCORE_EXTEND_OP + cpsid f +#else + orr r1, r0, #HW_PSR_FIQ_DISABLE + msr cpsr_c, r1 +#endif + and r0, r0, #HW_PSR_FIQ_DISABLE + + bx lr +} + +/*---------------------------------------------------------------------------* + Name: osRestoreFiq + + Description: Restore CPSR fiq interrupt + + Arguments: state of fiq interrupt bit + + Returns: last state of HW_PSR_FIQ_DISABLE + *---------------------------------------------------------------------------*/ +ASM OSIntrMode osRestoreFiq( OSIntrMode state ) +{ + mrs r1, cpsr + bic r2, r1, #HW_PSR_FIQ_DISABLE + orr r2, r2, r0 + msr cpsr_c, r2 + and r0, r1, #HW_PSR_FIQ_DISABLE + + bx lr +} + +/*---------------------------------------------------------------------------* + Name: osEnableIrqAndFiq + + Description: Set CPSR to enable irq and fiq interrupts + + Arguments: None. + + Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE + *---------------------------------------------------------------------------*/ +ASM OSIntrMode osEnableIrqAndFiq( void ) +{ + mrs r0, cpsr + +#ifdef SDK_USE_MPCORE_EXTEND_OP + cpsie if +#else + bic r1, r0, #HW_PSR_IRQ_FIQ_DISABLE + msr cpsr_c, r1 +#endif + and r0, r0, #HW_PSR_IRQ_FIQ_DISABLE + + bx lr +} + +/*---------------------------------------------------------------------------* + Name: osDisableIrqAndFiq + + Description: Set CPSR to disable irq and fiq interrupts + + Arguments: None. + + Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE + *---------------------------------------------------------------------------*/ +ASM OSIntrMode osDisableIrqAndFiq( void ) +{ + mrs r0, cpsr + +#ifdef SDK_USE_MPCORE_EXTEND_OP + cpsid if +#else + orr r1, r0, #HW_PSR_IRQ_FIQ_DISABLE + msr cpsr_c, r1 +#endif + and r0, r0, #HW_PSR_IRQ_FIQ_DISABLE + + bx lr +} + +/*---------------------------------------------------------------------------* + Name: osRestoreIrqAndFiq + + Description: Restore CPSR irq and fiq interrupts + + Arguments: state of irq and fiq interrupt bit + + Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE + *---------------------------------------------------------------------------*/ +ASM OSIntrMode osRestoreIrqAndFiq( OSIntrMode state ) +{ + mrs r1, cpsr + bic r2, r1, #HW_PSR_IRQ_FIQ_DISABLE + orr r2, r2, r0 + msr cpsr_c, r2 + and r0, r1, #HW_PSR_IRQ_FIQ_DISABLE + + bx lr +} + +#include + //================================================================================ // InterruptMask //================================================================================ @@ -119,7 +426,6 @@ asm void i_osIrqVeneer( void ) Returns: TRUE if last state is enabled *---------------------------------------------------------------------------*/ - BOOL osEnableInterruptID( OSIntrID id ) { BOOL retval; @@ -151,7 +457,6 @@ BOOL osEnableInterruptID( OSIntrID id ) Returns: previous factors *---------------------------------------------------------------------------*/ - OSIntrMask osEnableInterruptMask( OSIntrMask mask ) { OSIntrMode enabled = osDisableInterrupts(); @@ -176,7 +481,6 @@ OSIntrMask osEnableInterruptMask( OSIntrMask mask ) Returns: TRUE if last state is enabled *---------------------------------------------------------------------------*/ - BOOL osDisableInterruptID( OSIntrID id ) { BOOL retval; @@ -208,7 +512,6 @@ BOOL osDisableInterruptID( OSIntrID id ) Returns: previous factors *---------------------------------------------------------------------------*/ - OSIntrMask osDisableInterruptMask( OSIntrMask mask ) { OSIntrMode enabled = osDisableInterrupts(); @@ -234,7 +537,6 @@ OSIntrMask osDisableInterruptMask( OSIntrMask mask ) Returns: TRUE if last state is enabled *---------------------------------------------------------------------------*/ - BOOL osRestoreInterruptID( OSIntrID id, BOOL state ) { BOOL retval; @@ -311,7 +613,6 @@ OSIntrMask osSetInterruptMask( OSIntrMask mask ) Returns: TRUE if last state is pending *---------------------------------------------------------------------------*/ - BOOL osClearInterruptPendingID( OSIntrID id ) { OSIntrMode enabled = osDisableInterrupts(); @@ -344,7 +645,6 @@ BOOL osClearInterruptPendingID( OSIntrID id ) Returns: previous factors *---------------------------------------------------------------------------*/ - OSIntrMask osClearInterruptPendingMask( OSIntrMask mask ) { OSIntrMode enabled = osDisableInterrupts(); @@ -371,7 +671,6 @@ OSIntrMask osClearInterruptPendingMask( OSIntrMask mask ) Returns: TRUE if last state is pending *---------------------------------------------------------------------------*/ - BOOL osSetInterruptPendingID( OSIntrID id ) { u32 ofs = id/32; @@ -395,7 +694,6 @@ BOOL osSetInterruptPendingID( OSIntrID id ) Returns: TRUE if last state is pending *---------------------------------------------------------------------------*/ - BOOL osRestoreInterruptPendingID( OSIntrID id, BOOL state ) { u32 ofs = id/32; @@ -427,13 +725,11 @@ BOOL osRestoreInterruptPendingID( OSIntrID id, BOOL state ) Returns: None *---------------------------------------------------------------------------*/ - void osSetEndOfInterruptRegister( OSIntrID id ) { reg_OS_CPUI_EOI = id; } - /*---------------------------------------------------------------------------* Name: i_osReadHighestPendingInterruptRegister @@ -443,7 +739,6 @@ void osSetEndOfInterruptRegister( OSIntrID id ) Returns: Interrupt Distributor ID *---------------------------------------------------------------------------*/ - OSIntrID i_osReadHighestPendingInterruptRegister( void ) { return (OSIntrID)(reg_OS_CPUI_HI_PND & REG_OS_CPUI_HI_PND_ID_MASK); @@ -460,7 +755,6 @@ OSIntrID i_osReadHighestPendingInterruptRegister( void ) Returns: Interrupt Distributor ID *---------------------------------------------------------------------------*/ - OSIntrID i_osReadInterruptAcknowledgeRegister( void ) { return (OSIntrID)(reg_OS_CPUI_ACK & REG_OS_CPUI_ACK_ID_MASK); diff --git a/trunk/bootrom/build/libraries/os/common/os_interrupt_common.c b/trunk/bootrom/build/libraries/os/common/os_interrupt_common.c deleted file mode 100644 index 8d078f1..0000000 --- a/trunk/bootrom/build/libraries/os/common/os_interrupt_common.c +++ /dev/null @@ -1,400 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: CtrBrom - libraries - OS - File: os_interrupt_common.c - - 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$ - *---------------------------------------------------------------------------*/ -#include - - -#ifdef SDK_ARM11 -OSIntrFunction osIntrTable[OS_INTR_ID_NUM]; -#else // SDK_ARM9 -OSIntrFunction osIntrTable[OS_INTR_ID_NUM] ATTRIBUTE_SECTION(.dtcm); -#endif // SDK_ARM9 - - -/*---------------------------------------------------------------------------* - Name: i_osInitInterruptTable - - Description: Initialize InterruptTable - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ - -void i_osInitInterruptTable( void ) -{ - int i; - - for (i=0; i - -/*---------------------------------------------------------------------------* - Name: osHaltUntilInterrupt - - Description: Halt CPU Core until Interrupt - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ - -ASM void osHaltUntilInterrupt( void ) -{ - PRESERVE8 - - mov r0, #0 - mcr p15, 0, r0, c7, c0, 4 - bx lr -} - - -#ifdef SDK_ARM11 - -/*---------------------------------------------------------------------------* - Name: osHaltUntilEvent - - Description: Halt CPU Core until Event - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ - -ASM void osHaltUntilEvent( void ) -{ - wfe - bx lr -} - -#endif // SDK_ARM11 - - -//============================================================================ -// Control the master of all interrupts -//============================================================================ -/*---------------------------------------------------------------------------* - Name: osEnableIrq - - Description: Set CPSR to enable irq interrupt - - Arguments: None. - - Returns: last state of HW_PSR_IRQ_DISABLE - *---------------------------------------------------------------------------*/ - -ASM OSIntrMode osEnableIrq( void ) -{ - mrs r0, cpsr - -#ifdef SDK_USE_MPCORE_EXTEND_OP - cpsie i -#else - bic r1, r0, #HW_PSR_IRQ_DISABLE - msr cpsr_c, r1 -#endif - - and r0, r0, #HW_PSR_IRQ_DISABLE - - bx lr -} - - -/*---------------------------------------------------------------------------* - Name: osDisableIrq - - Description: Set CPSR to disable irq interrupt - - Arguments: None. - - Returns: last state of HW_PSR_IRQ_DISABLE - *---------------------------------------------------------------------------*/ - -ASM OSIntrMode osDisableIrq( void ) -{ - mrs r0, cpsr - -#ifdef SDK_USE_MPCORE_EXTEND_OP - cpsid i -#else - orr r1, r0, #HW_PSR_IRQ_DISABLE - msr cpsr_c, r1 -#endif - - and r0, r0, #HW_PSR_IRQ_DISABLE - - bx lr -} - - -/*---------------------------------------------------------------------------* - Name: osRestoreIrq - - Description: Restore CPSR irq interrupt - - Arguments: state of irq and fiq interrupt bit - - Returns: last state of HW_PSR_IRQ_DISABLE - *---------------------------------------------------------------------------*/ - -ASM OSIntrMode osRestoreIrq( OSIntrMode state ) -{ - mrs r1, cpsr - bic r2, r1, #HW_PSR_IRQ_DISABLE - orr r2, r2, r0 - msr cpsr_c, r2 - and r0, r1, #HW_PSR_IRQ_DISABLE - - bx lr -} - - -/*---------------------------------------------------------------------------* - Name: osEnableFiq - - Description: Set CPSR to enable fiq interrupt - - Arguments: None. - - Returns: last state of HW_PSR_FIQ_DISABLE - *---------------------------------------------------------------------------*/ - -ASM OSIntrMode osEnableFiq( void ) -{ - mrs r0, cpsr - -#ifdef SDK_USE_MPCORE_EXTEND_OP - cpsie f -#else - bic r1, r0, #HW_PSR_FIQ_DISABLE - msr cpsr_c, r1 -#endif - - and r0, r0, #HW_PSR_FIQ_DISABLE - - bx lr -} - - -/*---------------------------------------------------------------------------* - Name: osDisableFiq - - Description: Set CPSR to disable fiq interrupt - - Arguments: None. - - Returns: last state of HW_PSR_FIQ_DISABLE - *---------------------------------------------------------------------------*/ - -ASM OSIntrMode osDisableFiq( void ) -{ - mrs r0, cpsr - -#ifdef SDK_USE_MPCORE_EXTEND_OP - cpsid f -#else - orr r1, r0, #HW_PSR_FIQ_DISABLE - msr cpsr_c, r1 -#endif - - and r0, r0, #HW_PSR_FIQ_DISABLE - - bx lr -} - - -/*---------------------------------------------------------------------------* - Name: osRestoreFiq - - Description: Restore CPSR fiq interrupt - - Arguments: state of fiq interrupt bit - - Returns: last state of HW_PSR_FIQ_DISABLE - *---------------------------------------------------------------------------*/ - -ASM OSIntrMode osRestoreFiq( OSIntrMode state ) -{ - mrs r1, cpsr - bic r2, r1, #HW_PSR_FIQ_DISABLE - orr r2, r2, r0 - msr cpsr_c, r2 - and r0, r1, #HW_PSR_FIQ_DISABLE - - bx lr -} - - -/*---------------------------------------------------------------------------* - Name: osEnableIrqAndFiq - - Description: Set CPSR to enable irq and fiq interrupts - - Arguments: None. - - Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE - *---------------------------------------------------------------------------*/ - -ASM OSIntrMode osEnableIrqAndFiq( void ) -{ - mrs r0, cpsr - -#ifdef SDK_USE_MPCORE_EXTEND_OP - cpsie if -#else - bic r1, r0, #HW_PSR_IRQ_FIQ_DISABLE - msr cpsr_c, r1 -#endif - - and r0, r0, #HW_PSR_IRQ_FIQ_DISABLE - - bx lr -} - - -/*---------------------------------------------------------------------------* - Name: osDisableIrqAndFiq - - Description: Set CPSR to disable irq and fiq interrupts - - Arguments: None. - - Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE - *---------------------------------------------------------------------------*/ - -ASM OSIntrMode osDisableIrqAndFiq( void ) -{ - mrs r0, cpsr - -#ifdef SDK_USE_MPCORE_EXTEND_OP - cpsid if -#else - orr r1, r0, #HW_PSR_IRQ_FIQ_DISABLE - msr cpsr_c, r1 -#endif - - and r0, r0, #HW_PSR_IRQ_FIQ_DISABLE - - bx lr -} - - -/*---------------------------------------------------------------------------* - Name: osRestoreIrqAndFiq - - Description: Restore CPSR irq and fiq interrupts - - Arguments: state of irq and fiq interrupt bit - - Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE - *---------------------------------------------------------------------------*/ - -ASM OSIntrMode osRestoreIrqAndFiq( OSIntrMode state ) -{ - mrs r1, cpsr - bic r2, r1, #HW_PSR_IRQ_FIQ_DISABLE - orr r2, r2, r0 - msr cpsr_c, r2 - and r0, r1, #HW_PSR_IRQ_FIQ_DISABLE - - bx lr -} - -#include - diff --git a/trunk/bootrom/build/libraries/os/common/os_system.c b/trunk/bootrom/build/libraries/os/common/os_system.c index a99c37b..88a32e7 100644 --- a/trunk/bootrom/build/libraries/os/common/os_system.c +++ b/trunk/bootrom/build/libraries/os/common/os_system.c @@ -85,6 +85,8 @@ void osTerminate(void) } } +#include + /*---------------------------------------------------------------------------* Name: osHalt @@ -94,13 +96,37 @@ void osTerminate(void) Returns: None *---------------------------------------------------------------------------*/ -#include ASM void osHalt( void ) { +#ifdef SDK_ARM11 + wfi +#else // SDK_ARM9 mov r0, #0 mcr p15, 0, r0, c7, c0, 4 +#endif // SDK_ARM9 bx lr } + +#ifdef SDK_ARM11 + +/*---------------------------------------------------------------------------* + Name: osHaltUntilEvent + + Description: Halt CPU Core until Event + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ + +ASM void osHaltUntilEvent( void ) +{ + wfe + bx lr +} + +#endif // SDK_ARM11 + #include /*---------------------------------------------------------------------------*