From 96450e2d06eec6caa25b43319420883691b1732d Mon Sep 17 00:00:00 2001 From: sato_masaki Date: Fri, 15 Feb 2008 02:26:44 +0000 Subject: [PATCH] =?UTF-8?q?=E7=84=A1=E7=B7=9A=E3=83=95=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E5=9B=B3=E5=A4=89=E6=9B=B4=E3=81=AB=E3=82=88=E3=82=8A=E3=80=81?= =?UTF-8?q?=E7=84=A1=E7=B7=9A=E3=83=95=E3=82=A1=E3=83=BC=E3=83=A0=E3=82=A6?= =?UTF-8?q?=E3=82=A7=E3=82=A2=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=89=E7=94=A8=E9=96=A2=E6=95=B0=E3=82=92=E3=83=AA=E3=83=8D?= =?UTF-8?q?=E3=83=BC=E3=83=A0/=E6=9B=B4=E6=96=B0=E3=80=82=20=E7=84=A1?= =?UTF-8?q?=E7=B7=9A=E7=B5=82=E4=BA=86=E3=83=A9=E3=83=83=E3=83=91=E3=83=BC?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E5=89=8A=E9=99=A4=E3=80=82?= 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@670 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../Launcher/ARM9/src/loadWlanFirm.c | 106 +++++++++--------- .../Launcher/ARM9/src/loadWlanFirm.h | 3 +- build/systemMenu_RED/Launcher/ARM9/src/main.c | 7 +- 3 files changed, 57 insertions(+), 59 deletions(-) diff --git a/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c b/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c index 66fa95b7..29f8d63f 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c @@ -20,47 +20,51 @@ #include #include - +#include #include "loadWlanFirm.h" /* LCFGの無線ファームバージョンをタイトルIDとしてそのまま使う場合 */ -#define USE_LCFG_STRING 0 +#define USE_LCFG_STRING 0 -#define WLANFIRM_PUBKEY_INDEX 1 +#define WLANFIRM_PUBKEY_INDEX 1 + +#define MEASURE_WIRELESS_INITTIME 1 -static int isNwmActive; static u32 nwmBuf[NWM_SYSTEM_BUF_SIZE/sizeof(u32)] ATTRIBUTE_ALIGN(32); static u32 fwBuffer[256*1024/sizeof(u32)] ATTRIBUTE_ALIGN(32); +#if (MEASURE_WIRELESS_INITTIME == 1) +static OSTick startTick; +#endif static s32 readFirmwareBinary(u8 *buffer, s32 bufSize); static BOOL verifyWlanfirmSignature(u8* buffer); -/* [TODO:] HotStart/ColdStartを判別するためのもの。ランチャーでの定義ができたら削除? */ -typedef enum { - COLD_START, - HOT_START -} BOOT_POLICY; static void nwmcallback(void* arg) { - NWMCallback *cb = (NWMCallback*)arg; - switch (cb->apiid) + NWMCallback *cb = (NWMCallback*)arg; + switch (cb->apiid) { case NWM_APIID_LOAD_DEVICE: - if (cb->retcode == NWM_RETCODE_SUCCESS) { - isNwmActive = 1; - /* osSendMessage */ - OS_TPrintf("Wlan firm:Load Device success!\n"); - } else { - OS_TPrintf("Wlan firm:Load Device Timeout Error!\n"); - } - break; + if (cb->retcode == NWM_RETCODE_SUCCESS) { + NWMRetCode err; + OS_TPrintf("Wlan firm:Load Device success!\n"); + err = NWM_UnloadDevice(nwmcallback); + } else { + OS_TPrintf("Wlan firm:Load Device Timeout Error!\n"); + } + break; case NWM_APIID_UNLOAD_DEVICE: - OS_TPrintf("Wlan firm:Unload Device success!\n"); - break; + OS_TPrintf("Wlan firm:Unload Device success!\n"); +#if (MEASURE_WIRELESS_INITTIME == 1) + OS_TPrintf("Wlan firm:LoadTime=%dmsec\n", OS_TicksToMilliSeconds(OS_GetTick() - startTick)); +#endif + OS_TPrintf("Wlan firm:Wlan firmware has been installed successfully!\n"); + /* [TODO:] osSendMessage */ + break; default: - OS_TPrintf("Wlan firm:Error(apiid=default)!\n"); - break; + OS_TWarning("Wlan firm:Error(invalid apiid=0x%04X)!\n", cb->apiid); + break; } } @@ -157,48 +161,45 @@ BOOL verifyWlanfirmSignature(u8* buffer) } -BOOL StartupWireless(void) +BOOL InstallWirelessFirmware(void) { s32 flen = 0; NWMRetCode err; - u8 boot_policy = COLD_START; - /* [TODO:] HotStart/ColdStartのチェック */ - - - if (boot_policy == COLD_START) + /* ColdStartのチェック(HotStartでは呼ばれない筈だが) */ + if (TRUE == SYSMi_GetWork()->flags.common.isHotStart) { - /* [TODO:] fwBuffer should be allocated from heap. */ - - flen = readFirmwareBinary((u8*)fwBuffer, sizeof(fwBuffer)); - - if ( 0 > flen ) - { - OS_TWarning("Couldn't read wlan firmware.\n"); - return FALSE; - } - - /* - [TODO:] check signature data - */ - + OS_TWarning("It isn't Cold start.\n"); + return FALSE; } - isNwmActive = 0; - + /* [TODO:] fwBuffer should be allocated from heap. */ + + flen = readFirmwareBinary((u8*)fwBuffer, sizeof(fwBuffer)); + + if ( 0 > flen ) + { + OS_TWarning("Couldn't read wlan firmware.\n"); + return FALSE; + } + + /* + [TODO:] check signature data + */ + /*************************************************************/ NWM_Init(nwmBuf, sizeof(nwmBuf), 3); /* 3 -> DMA no. */ /* In the case of cold start, should register appropriate firmware. */ - if (boot_policy == COLD_START) + if ( 0 < flen ) { - if ( 0 < flen ) - { - (void)NWMi_InstallFirmware(fwBuffer, (u32)flen); - } + (void)NWMi_InstallFirmware(fwBuffer, (u32)flen); } +#if (MEASURE_WIRELESS_INITTIME == 1) + startTick = OS_GetTick(); +#endif err = NWM_LoadDevice(nwmcallback); /* osRecvMessage */ @@ -209,8 +210,3 @@ BOOL StartupWireless(void) return TRUE; } -BOOL CleanupWireless(void) -{ - /* [TBD]*/ - return TRUE; -} diff --git a/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.h b/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.h index 15f8af84..dabfa3ef 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.h +++ b/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.h @@ -24,8 +24,7 @@ extern "C" { #endif -BOOL StartupWireless(void); -BOOL CleanupWireless(void); +BOOL InstallWirelessFirmware(void); #ifdef __cplusplus } diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index b6234a1e..17290408 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -189,8 +189,11 @@ void TwlMain( void ) // 無線ファームウェアを無線モジュールにダウンロードする。 #if( WIRELESS_FIRM_LOADING == 1 ) - if( FALSE == StartupWireless() ) { - OS_TPrintf( "ERROR: Wireless firmware download failed!\n" ); + if (SYSMi_GetWork()->flags.common.isHotStart == FALSE) + { + if( FALSE == InstallWirelessFirmware() ) { + OS_TPrintf( "ERROR: Wireless firmware download failed!\n" ); + } } #endif