ctr_firmware/trunk/bootrom/build/libraries/os/common/os_boot.c
nakasima c087e62b84 MMUライブラリ追加。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@181 b871894f-2f95-9b40-918c-086798483c85
2009-01-19 03:08:19 +00:00

105 lines
2.5 KiB
C

/*---------------------------------------------------------------------------*
Project: CtrBrom - OS
File: os_boot.c
Copyright 2009 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 <brom/os.h>
#include <brom/mi.h>
void i_osBootCore( OSEntryPoint p );
/*---------------------------------------------------------------------------*
Name: i_osFinalize
Description: finalize
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void i_osFinalize(void)
{
(void)osDisableInterrupts();
osDisableDCache();
osFlushDCacheAll();
osWaitWriteBufferEmpty();
osDisableICache();
osInvalidateICacheAll();
#ifdef SDK_ARM11
osInvalidateInstPrefetchBuffer();
osInvalidateBCacheAll();
#else // SDK_ARM9
reg_OS_IE = 0;
reg_OS_IF = 0xffffffff;
i_osFinalizeProtectionUnit();
#endif // SDK_ARM9
}
/*---------------------------------------------------------------------------*
Name: i_osClearWorkArea
Description: clear work area
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
asm void i_osClearWorkArea( void )
{
INASM_EXTERN( |Image$$RW$$Base| )
INASM_EXTERN( |Image$$ZI$$ZI$$Limit| )
CODE32
mov r11, lr
// clear stack with r4-r9
mov r0, #0
ldr r1, =|Image$$RW$$Base|
ldr r2, =|Image$$ZI$$ZI$$Limit|
sub r2, r2, r1
bl i_miCpuClearFast
bx r11
}
// internal
asm void i_osBootCore( OSEntryPoint p )
{
INASM_EXTERN( i_miCpuClearFast )
CODE32
mov r11, r0
// clear stack with r4-r9
mov r0, #0
ldr r1, =HW_BROM_STACK
ldr r2, =HW_BROM_STACK_SIZE
bl i_miCpuClearFast
mov lr, r11
// clear registers
ldr sp, =HW_BROM_STACK
ldmia sp, {r0-r12,sp}
bx lr
}