mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@181 b871894f-2f95-9b40-918c-086798483c85
105 lines
2.5 KiB
C
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
|
|
}
|
|
|
|
|