From 4c9d8c4105241d4e3daab77a0f14e56cb66f353a Mon Sep 17 00:00:00 2001 From: yutaka Date: Fri, 7 Mar 2008 02:25:04 +0000 Subject: [PATCH] =?UTF-8?q?#ifdef=20SDK=5FSUPPORT=5FPMIC=5F2=20=E5=BF=98?= =?UTF-8?q?=E3=82=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@845 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/sysmenu_lib.c | 376 +++++++++--------- 1 file changed, 189 insertions(+), 187 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index c06a2511..bbed5d66 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -37,7 +37,7 @@ void (*SYSMi_Free )( void *ptr ); #define SYSM_DEBUG_ #ifdef SYSM_DEBUG_ -SYSM_work *pSysm; // デバッガでのSYSMワークのウォッチ用 +SYSM_work *pSysm; // デバッガでのSYSMワークのウォッチ用 ROM_Header_Short *pRomHeader; #endif // static variable------------------------------------------------------------- @@ -56,67 +56,67 @@ static TitleProperty s_bootTitleBuf; void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ) { #ifdef SYSM_DEBUG_ - pSysm = SYSMi_GetWork(); - pRomHeader = (ROM_Header_Short *)0x027fc000; + pSysm = SYSMi_GetWork(); + pRomHeader = (ROM_Header_Short *)0x027fc000; #endif /* SYSM_DEBUG_ */ - - // ARM7で使用する分の鍵を渡す - SYSMi_SendKeysToARM7(); - - // ランチャーのマウント情報セット - SYSMi_SetLauncherMountInfo(); - + + // ARM7で使用する分の鍵を渡す + SYSMi_SendKeysToARM7(); + + // ランチャーのマウント情報セット + SYSMi_SetLauncherMountInfo(); + // ARM7コンポーネント用プロテクションユニット領域変更 OS_SetProtectionRegion( 2, SYSM_OWN_ARM7_MMEM_ADDR, 512KB ); - - SYSM_SetAllocFunc( pAlloc, pFree ); - - // PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback ); - - reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット + + SYSM_SetAllocFunc( pAlloc, pFree ); + + // PXI_SetFifoRecvCallback( SYSMENU_PXI_FIFO_TAG, SYSMi_PXIFifoRecvCallback ); + + reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット } // アリーナ再設定 void SYSM_SetArena( void ) { - // ARM9用ブートコード配置のため、アリーナHi位置を下げる - OS_SetMainArenaHi( (void *)SYSM_OWN_ARM9_MMEM_ADDR_END ); + // ARM9用ブートコード配置のため、アリーナHi位置を下げる + OS_SetMainArenaHi( (void *)SYSM_OWN_ARM9_MMEM_ADDR_END ); } // システムメニューライブラリ用メモリアロケータの設定 void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) ) { - SYSMi_Alloc = pAlloc; - SYSMi_Free = pFree; + SYSMi_Alloc = pAlloc; + SYSMi_Free = pFree; } // メモリAlloc void *SYSM_Alloc( u32 size ) { - void *p = SYSMi_Alloc( size ); - OS_TPrintf( "SYSM_Alloc : %08x %xbytes\n", p, size ); - return p; + void *p = SYSMi_Alloc( size ); + OS_TPrintf( "SYSM_Alloc : %08x %xbytes\n", p, size ); + return p; } // メモリFree void SYSM_Free( void *ptr ) { - OS_TPrintf( "SYSM_Free : %08x\n", ptr ); - SYSMi_Free( ptr ); + OS_TPrintf( "SYSM_Free : %08x\n", ptr ); + SYSMi_Free( ptr ); } // ARM7で使用する分の鍵を渡す void SYSMi_SendKeysToARM7( void ) { - MI_SetWramBank(MI_WRAM_ARM9_ALL); - // DS互換BlowfishテーブルをARM7へ渡す - MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->ds_blowfish, (void *)HW_WRAM_0, sizeof(BLOWFISH_CTX) ); - MI_SetWramBank(MI_WRAM_ARM7_ALL); + MI_SetWramBank(MI_WRAM_ARM9_ALL); + // DS互換BlowfishテーブルをARM7へ渡す + MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->ds_blowfish, (void *)HW_WRAM_0, sizeof(BLOWFISH_CTX) ); + MI_SetWramBank(MI_WRAM_ARM7_ALL); } @@ -129,166 +129,168 @@ void SYSMi_SendKeysToARM7( void ) // パラメータリード TitleProperty *SYSM_ReadParameters( void ) { - TitleProperty *pBootTitle = NULL; - u8 brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX; - - // ARM7のリセットパラメータ取得が完了するのを待つ - while( !SYSMi_GetWork()->flags.common.isARM9Start ) { - SVC_WaitByLoop( 0x1000 ); - } + TitleProperty *pBootTitle = NULL; + u8 brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX; + + // ARM7のリセットパラメータ取得が完了するのを待つ + while( !SYSMi_GetWork()->flags.common.isARM9Start ) { + SVC_WaitByLoop( 0x1000 ); + } //#ifdef DEBUG_USED_CARD_SLOT_B_ - // ARM7のカードチェック完了を待つ - while( !SYSMi_GetWork()->flags.hotsw.is1stCardChecked ) { - SVC_WaitByLoop( 0x1000 ); - } + // ARM7のカードチェック完了を待つ + while( !SYSMi_GetWork()->flags.hotsw.is1stCardChecked ) { + SVC_WaitByLoop( 0x1000 ); + } //#endif - //----------------------------------------------------- - // リセットパラメータの判定(リセットパラメータが有効かどうかは、ARM7でやってくれている) - //----------------------------------------------------- - { - if( SYSM_GetLauncherParamBody()->v1.flags.isLogoSkip || // ロゴデモスキップ? - SYSMi_IsDebuggerBannerViewMode() ) { - SYSM_SetLogoDemoSkip( TRUE ); - } - - if( SYSM_GetLauncherParamBody()->v1.bootTitleID ) { // アプリ直接起動の指定があったらロゴデモを飛ばして指定アプリ起動 - s_bootTitleBuf.titleID = SYSM_GetLauncherParamBody()->v1.bootTitleID; - s_bootTitleBuf.flags = SYSM_GetLauncherParamBody()->v1.flags; - s_bootTitleBuf.pBanner = (TWLBannerFile *)(*(TWLBannerFile **)(SYSM_GetLauncherParamBody()->v1.rsv)); - pBootTitle = &s_bootTitleBuf; - } - } - - //----------------------------------------------------- - // 量産工程用ショートカットキー or - // 検査カード起動 - //----------------------------------------------------- - if( pBootTitle == NULL ) { - pBootTitle = SYSMi_CheckShortcutBoot(); - } - - //----------------------------------------------------- - // HW情報のリード - //----------------------------------------------------- - // ノーマル情報リード - if( !LCFG_ReadHWNormalInfo() ) { - OS_TPrintf( "HW Normal Info Broken!\n" ); - SYSMi_GetWork()->flags.common.isBrokenHWNormalInfo = TRUE; - SYSMi_GetWork()->flags.common.isFatalError = TRUE; - } - // セキュア情報リード - if( !LCFG_ReadHWSecureInfo() ) { - OS_TPrintf( "HW Secure Info Broken!\n" ); - SYSMi_GetWork()->flags.common.isBrokenHWSecureInfo = TRUE; - SYSMi_GetWork()->flags.common.isFatalError = TRUE; - } - - //----------------------------------------------------- - // 本体設定データのリード(※必ずHWSecureInforリード後に実行すること。LanguageBitmapを判定に使うため) - //----------------------------------------------------- - { - u8 *pBuffer = SYSM_Alloc( LCFG_READ_TEMP ); - if( pBuffer == NULL ) { - SYSMi_GetWork()->flags.common.isFatalError = TRUE; - }else if( LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ) ) { // NANDからTWL本体設定データをリード - SYSM_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。 - if ( SYSMi_GetMcuVersion() <= 1 ) - { - // X2ボード以前だけ輝度読み込み - brightness = (u8)LCFG_TSD_GetBacklightBrightness(); - } - }else { - SYSMi_GetWork()->flags.common.isInitialSettings = TRUE; // リード失敗なら初回起動シーケンスへ - } - if( pBuffer ) { - SYSM_Free( pBuffer ); - } - } - - //----------------------------------------------------- - // 各種デバイス設定 - //----------------------------------------------------- - // バックライト輝度設定 + //----------------------------------------------------- + // リセットパラメータの判定(リセットパラメータが有効かどうかは、ARM7でやってくれている) + //----------------------------------------------------- + { + if( SYSM_GetLauncherParamBody()->v1.flags.isLogoSkip || // ロゴデモスキップ? + SYSMi_IsDebuggerBannerViewMode() ) { + SYSM_SetLogoDemoSkip( TRUE ); + } + + if( SYSM_GetLauncherParamBody()->v1.bootTitleID ) { // アプリ直接起動の指定があったらロゴデモを飛ばして指定アプリ起動 + s_bootTitleBuf.titleID = SYSM_GetLauncherParamBody()->v1.bootTitleID; + s_bootTitleBuf.flags = SYSM_GetLauncherParamBody()->v1.flags; + s_bootTitleBuf.pBanner = (TWLBannerFile *)(*(TWLBannerFile **)(SYSM_GetLauncherParamBody()->v1.rsv)); + pBootTitle = &s_bootTitleBuf; + } + } + + //----------------------------------------------------- + // 量産工程用ショートカットキー or + // 検査カード起動 + //----------------------------------------------------- + if( pBootTitle == NULL ) { + pBootTitle = SYSMi_CheckShortcutBoot(); + } + + //----------------------------------------------------- + // HW情報のリード + //----------------------------------------------------- + // ノーマル情報リード + if( !LCFG_ReadHWNormalInfo() ) { + OS_TPrintf( "HW Normal Info Broken!\n" ); + SYSMi_GetWork()->flags.common.isBrokenHWNormalInfo = TRUE; + SYSMi_GetWork()->flags.common.isFatalError = TRUE; + } + // セキュア情報リード + if( !LCFG_ReadHWSecureInfo() ) { + OS_TPrintf( "HW Secure Info Broken!\n" ); + SYSMi_GetWork()->flags.common.isBrokenHWSecureInfo = TRUE; + SYSMi_GetWork()->flags.common.isFatalError = TRUE; + } + + //----------------------------------------------------- + // 本体設定データのリード(※必ずHWSecureInforリード後に実行すること。LanguageBitmapを判定に使うため) + //----------------------------------------------------- + { + u8 *pBuffer = SYSM_Alloc( LCFG_READ_TEMP ); + if( pBuffer == NULL ) { + SYSMi_GetWork()->flags.common.isFatalError = TRUE; + }else if( LCFG_ReadTWLSettings( (u8 (*)[LCFG_READ_TEMP])pBuffer ) ) { // NANDからTWL本体設定データをリード + SYSM_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。 #ifdef SDK_SUPPORT_PMIC_2 - if ( SYSMi_GetMcuVersion() <= 1 ) - { - // X2ボード以前だけ輝度設定する - SYSM_SetBackLightBrightness( brightness ); - } + if ( SYSMi_GetMcuVersion() <= 1 ) + { + // X2ボード以前だけ輝度読み込み + brightness = (u8)LCFG_TSD_GetBacklightBrightness(); + } #endif // SDK_SUPPORT_PMIC_2 - // RTC補正 - SYSMi_WriteAdjustRTC(); - // RTC値のチェック - SYSMi_CheckRTC(); - - LCFG_VerifyAndRecoveryNTRSettings(); // NTR設定データを読み出して、TWL設定データとベリファイし、必要ならリカバリ - - //NAMの初期化 - NAM_Init( SYSM_Alloc, SYSM_Free ); - - return pBootTitle; + }else { + SYSMi_GetWork()->flags.common.isInitialSettings = TRUE; // リード失敗なら初回起動シーケンスへ + } + if( pBuffer ) { + SYSM_Free( pBuffer ); + } + } + + //----------------------------------------------------- + // 各種デバイス設定 + //----------------------------------------------------- + // バックライト輝度設定 +#ifdef SDK_SUPPORT_PMIC_2 + if ( SYSMi_GetMcuVersion() <= 1 ) + { + // X2ボード以前だけ輝度設定する + SYSM_SetBackLightBrightness( brightness ); + } +#endif // SDK_SUPPORT_PMIC_2 + // RTC補正 + SYSMi_WriteAdjustRTC(); + // RTC値のチェック + SYSMi_CheckRTC(); + + LCFG_VerifyAndRecoveryNTRSettings(); // NTR設定データを読み出して、TWL設定データとベリファイし、必要ならリカバリ + + //NAMの初期化 + NAM_Init( SYSM_Alloc, SYSM_Free ); + + return pBootTitle; } // ショートカット起動のチェック static TitleProperty *SYSMi_CheckShortcutBoot( void ) { - static TitleProperty s_bootTitle; - - MI_CpuClear8( &s_bootTitle, sizeof(TitleProperty) ); - - //----------------------------------------------------- - // ISデバッガ起動 or - // 量産工程用ショートカットキー or - // 検査カード起動 - //----------------------------------------------------- - if( SYSM_IsExistCard() ) { - if( ( SYSMi_GetWork()->flags.hotsw.isOnDebugger && // ISデバッガが有効かつJTAGがまだ有効でない時 - !( *(u8 *)( HW_SYS_CONF_BUF + HWi_WSYS09_OFFSET ) & HWi_WSYS09_JTAG_CPUJE_MASK ) ) || - SYSM_IsInspectCard() || - ( ( PAD_Read() & SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) == - SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) - ) { - s_bootTitle.flags.isAppRelocate = TRUE; - s_bootTitle.flags.isAppLoadCompleted = TRUE; - s_bootTitle.flags.isInitialShortcutSkip = TRUE; // 初回起動シーケンスを飛ばす - s_bootTitle.flags.isLogoSkip = TRUE; // ロゴデモを飛ばす - s_bootTitle.flags.bootType = LAUNCHER_BOOTTYPE_ROM; - s_bootTitle.flags.isValid = TRUE; - // ROMヘッダバッファのコピー - { - u16 id = (u16)OS_GetLockID(); - (void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する - (void)SYSMi_CopyCardRomHeader(); - (void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する - OS_ReleaseLockID( id ); - } - s_bootTitle.titleID = *(u64 *)( &SYSM_GetCardRomHeader()->titleID_Lo ); - SYSM_SetLogoDemoSkip( s_bootTitle.flags.isLogoSkip ); - return &s_bootTitle; - } - } - - //----------------------------------------------------- - // TWL設定データ未入力時の初回起動シーケンス起動 - //----------------------------------------------------- + static TitleProperty s_bootTitle; + + MI_CpuClear8( &s_bootTitle, sizeof(TitleProperty) ); + + //----------------------------------------------------- + // ISデバッガ起動 or + // 量産工程用ショートカットキー or + // 検査カード起動 + //----------------------------------------------------- + if( SYSM_IsExistCard() ) { + if( ( SYSMi_GetWork()->flags.hotsw.isOnDebugger && // ISデバッガが有効かつJTAGがまだ有効でない時 + !( *(u8 *)( HW_SYS_CONF_BUF + HWi_WSYS09_OFFSET ) & HWi_WSYS09_JTAG_CPUJE_MASK ) ) || + SYSM_IsInspectCard() || + ( ( PAD_Read() & SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) == + SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ) + ) { + s_bootTitle.flags.isAppRelocate = TRUE; + s_bootTitle.flags.isAppLoadCompleted = TRUE; + s_bootTitle.flags.isInitialShortcutSkip = TRUE; // 初回起動シーケンスを飛ばす + s_bootTitle.flags.isLogoSkip = TRUE; // ロゴデモを飛ばす + s_bootTitle.flags.bootType = LAUNCHER_BOOTTYPE_ROM; + s_bootTitle.flags.isValid = TRUE; + // ROMヘッダバッファのコピー + { + u16 id = (u16)OS_GetLockID(); + (void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する + (void)SYSMi_CopyCardRomHeader(); + (void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する + OS_ReleaseLockID( id ); + } + s_bootTitle.titleID = *(u64 *)( &SYSM_GetCardRomHeader()->titleID_Lo ); + SYSM_SetLogoDemoSkip( s_bootTitle.flags.isLogoSkip ); + return &s_bootTitle; + } + } + + //----------------------------------------------------- + // TWL設定データ未入力時の初回起動シーケンス起動 + //----------------------------------------------------- #if 0 #ifdef ENABLE_INITIAL_SETTINGS_ - if( !LCFG_TSD_IsSetTP() || - !LCFG_TSD_IsSetLanguage() || - !LCFG_TSD_IsSetDateTime() || - !LCFG_TSD_IsSetUserColor() || - !LCFG_TSD_IsSetNickname() ) { - s_bootTitle.titleID = TITLE_ID_MACHINE_SETTINGS; - s_bootTitle.flags.bootType = LAUNCHER_BOOTTYPE_NAND; - s_bootTitle.flags.isValid = TRUE; - return &s_bootTitle; - } + if( !LCFG_TSD_IsSetTP() || + !LCFG_TSD_IsSetLanguage() || + !LCFG_TSD_IsSetDateTime() || + !LCFG_TSD_IsSetUserColor() || + !LCFG_TSD_IsSetNickname() ) { + s_bootTitle.titleID = TITLE_ID_MACHINE_SETTINGS; + s_bootTitle.flags.bootType = LAUNCHER_BOOTTYPE_NAND; + s_bootTitle.flags.isValid = TRUE; + return &s_bootTitle; + } #endif // ENABLE_INITIAL_SETTINGS_ #endif - - return NULL; // 「ブート内容未定」でリターン + + return NULL; // 「ブート内容未定」でリターン } @@ -296,19 +298,19 @@ static TitleProperty *SYSMi_CheckShortcutBoot( void ) static void SYSMi_CheckCardCloneBoot( void ) { #if 0 - u8 *buffp = (u8 *)&pTempBuffer; - u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000; - u32 file_offset = total_rom_size & 0xFFFFFE00; - - DC_FlushRange( buffp, BNR_IMAGE_SIZE ); - CARD_ReadRom( 4, (void *)file_offset, buffp, BNR_IMAGE_SIZE ); - - buffp += total_rom_size & 0x000001FF; - if( *buffp++ == 'a' && *buffp == 'c' ) { - SYSMi_GetWork()->flags.common.cloneBootMode = CLONE_BOOT_MODE; - }else { - SYSMi_GetWork()->flags.common.cloneBootMode = OTHER_BOOT_MODE; - } + u8 *buffp = (u8 *)&pTempBuffer; + u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000; + u32 file_offset = total_rom_size & 0xFFFFFE00; + + DC_FlushRange( buffp, BNR_IMAGE_SIZE ); + CARD_ReadRom( 4, (void *)file_offset, buffp, BNR_IMAGE_SIZE ); + + buffp += total_rom_size & 0x000001FF; + if( *buffp++ == 'a' && *buffp == 'c' ) { + SYSMi_GetWork()->flags.common.cloneBootMode = CLONE_BOOT_MODE; + }else { + SYSMi_GetWork()->flags.common.cloneBootMode = OTHER_BOOT_MODE; + } #endif }