mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei)
・SYSM共有ワーク構造体を整理して、hotsw用のフラグを分離 ・カードアクセス可能かを判定する関数追加 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@742 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
7d66e926a8
commit
9d655b885c
@ -212,10 +212,10 @@ TwlSpMain(void)
|
||||
( SYSM_GetLauncherParamBody()->v1.bootTitleID )
|
||||
) {
|
||||
// ランチャーパラメータでダイレクトカードブート以外の指定がある時は、活線挿抜をOFFにする。
|
||||
SYSMi_GetWork()->flags.common.isEnableHotSW = 0;
|
||||
SYSMi_GetWork()->flags.hotsw.isEnableHotSW = 0;
|
||||
}else {
|
||||
// それ以外の時は活線挿抜ON
|
||||
SYSMi_GetWork()->flags.common.isEnableHotSW = 1;
|
||||
SYSMi_GetWork()->flags.hotsw.isEnableHotSW = 1;
|
||||
}
|
||||
|
||||
HOTSW_Init();
|
||||
|
||||
@ -36,7 +36,7 @@ static void SetMCSCR(void);
|
||||
*---------------------------------------------------------------------------*/
|
||||
HotSwState ReadBootSegNormal_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -71,7 +71,7 @@ HotSwState ChangeModeNormal_DSType1(CardBootData *cbd)
|
||||
GCDCmd64 tempCnd, cnd;
|
||||
u64 vae64 = cbd->vae;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -176,7 +176,7 @@ static void SetSecureCommand(SecureCommandType type, CardBootData *cbd)
|
||||
*---------------------------------------------------------------------------*/
|
||||
HotSwState ReadIDSecure_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -213,7 +213,7 @@ HotSwState ReadSegSecure_DSType1(CardBootData *cbd)
|
||||
GCDCmd64 cndLE, cndBE;
|
||||
|
||||
for(i=0; i<4; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -269,7 +269,7 @@ HotSwState ReadSegSecure_DSType1(CardBootData *cbd)
|
||||
*---------------------------------------------------------------------------*/
|
||||
HotSwState SwitchONPNGSecure_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -296,7 +296,7 @@ HotSwState SwitchONPNGSecure_DSType1(CardBootData *cbd)
|
||||
*---------------------------------------------------------------------------*/
|
||||
HotSwState SwitchOFFPNGSecure_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -325,7 +325,7 @@ HotSwState SwitchOFFPNGSecure_DSType1(CardBootData *cbd)
|
||||
*---------------------------------------------------------------------------*/
|
||||
HotSwState ChangeModeSecure_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -356,7 +356,7 @@ HotSwState ChangeModeSecure_DSType1(CardBootData *cbd)
|
||||
*---------------------------------------------------------------------------*/
|
||||
HotSwState ReadIDGame_DSType1(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -396,7 +396,7 @@ HotSwState ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u3
|
||||
// OS_TPrintf("Read Game Segment Page Count : %d size : %x\n", loop, size);
|
||||
|
||||
for(i=0; i<loop; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
|
||||
@ -48,7 +48,7 @@ HotSwState ReadBootSegNormal_DSType2(CardBootData *cbd)
|
||||
GCDCmd64 cndLE, cndBE;
|
||||
|
||||
for(i=0; i<ONE_SEGMENT_PAGE_NUM; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -169,7 +169,7 @@ HotSwState ReadIDSecure_DSType2(CardBootData *cbd)
|
||||
{
|
||||
u32 scrambleMask;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -222,7 +222,7 @@ HotSwState ReadSegSecure_DSType2(CardBootData *cbd)
|
||||
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SECURE_COMMAND_SCRAMBLE_MASK & ~CS_MASK);
|
||||
|
||||
for(i=0; i<SECURE_SEGMENT_NUM; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -296,7 +296,7 @@ HotSwState SwitchONPNGSecure_DSType2(CardBootData *cbd)
|
||||
{
|
||||
u32 scrambleMask;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -339,7 +339,7 @@ HotSwState SwitchOFFPNGSecure_DSType2(CardBootData *cbd)
|
||||
{
|
||||
u32 scrambleMask;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -382,7 +382,7 @@ HotSwState ChangeModeSecure_DSType2(CardBootData *cbd)
|
||||
{
|
||||
u32 scrambleMask;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -447,7 +447,7 @@ HotSwState ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u3
|
||||
// OS_TPrintf("Read Game Segment Page Count : %d size : %x\n", loop, size);
|
||||
|
||||
for(i=0; i<loop; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
|
||||
@ -251,7 +251,7 @@ void HOTSW_Init(void)
|
||||
|
||||
|
||||
// カードが挿さってあったらスレッドを起動する
|
||||
if(HOTSW_IsCardExist()){
|
||||
if(HOTSW_IsCardAccessible()){
|
||||
// メッセージ送信
|
||||
OS_SendMessage(&s_ctData.hotswQueue, (OSMessage)&s_ctData.hotswInsertMsg[s_ctData.idx_insert], OS_MESSAGE_NOBLOCK);
|
||||
|
||||
@ -259,7 +259,7 @@ void HOTSW_Init(void)
|
||||
s_ctData.idx_insert = (s_ctData.idx_insert+1) % HOTSW_INSERT_MSG_NUM;
|
||||
}
|
||||
else{
|
||||
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
|
||||
SYSMi_GetWork()->flags.hotsw.is1stCardChecked = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -306,7 +306,7 @@ static HotSwState LoadCardData(void)
|
||||
MI_CpuClearFast(s_pSecureSegBuffer, s_SecureSegBufSize);
|
||||
|
||||
// ブート処理開始
|
||||
if(HOTSW_IsCardExist()){
|
||||
if(HOTSW_IsCardAccessible()){
|
||||
// Arm9との排他制御用ロックIDを取得する
|
||||
u16 id = (u16)OS_GetLockID();
|
||||
|
||||
@ -516,18 +516,18 @@ static HotSwState LoadBannerData(void)
|
||||
}
|
||||
else{
|
||||
// バナーデータが登録されていない場合 (この関数の外で排他制御されているからここでは排他制御しないでOK)
|
||||
SYSMi_GetWork()->flags.common.isValidCardBanner = FALSE;
|
||||
SYSMi_GetWork()->flags.common.isCardStateChanged = TRUE;
|
||||
SYSMi_GetWork()->flags.common.isExistCard = TRUE;
|
||||
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = FALSE;
|
||||
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
|
||||
SYSMi_GetWork()->flags.hotsw.isExistCard = TRUE;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
// バナーリードが成功していたら各種フラグTRUE その他の場合はFALSE (この関数の外で排他制御されているからここでは排他制御しないでOK)
|
||||
state = (retval == HOTSW_SUCCESS) ? TRUE : FALSE;
|
||||
SYSMi_GetWork()->flags.common.isValidCardBanner = state;
|
||||
SYSMi_GetWork()->flags.common.isCardStateChanged = state;
|
||||
SYSMi_GetWork()->flags.common.isExistCard = state;
|
||||
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = state;
|
||||
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = state;
|
||||
SYSMi_GetWork()->flags.hotsw.isExistCard = state;
|
||||
|
||||
return retval;
|
||||
}
|
||||
@ -668,7 +668,7 @@ static HotSwState CheckCardAuthCode(void)
|
||||
|
||||
u8 *p = (u8 *)authBuf;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -962,6 +962,29 @@ static void UnlockHotSwRsc(OSLockWord* word)
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* HOTSW_IsCardAccessible関数
|
||||
*
|
||||
* カードスロットにアクセスできる状態か判定する
|
||||
*
|
||||
* ※SCFG_MC1のCDETフラグとM(モード)を見ている
|
||||
* ----------------------------------------------------------------- */
|
||||
BOOL HOTSW_IsCardAccessible(void)
|
||||
{
|
||||
#ifndef DEBUG_USED_CARD_SLOT_B_
|
||||
u32 mask = (u32)(REG_MI_MC_SL1_CDET_MASK << GetMcSlotShift());
|
||||
#else
|
||||
u32 mask = (u32)(REG_MI_MC_SL2_CDET_MASK >> GetMcSlotShift());
|
||||
#endif
|
||||
|
||||
if( !(reg_MI_MC1 & mask) && CmpMcSlotMode(SLOT_STATUS_MODE_10) == TRUE){
|
||||
return TRUE;
|
||||
}
|
||||
else{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* IsSwap関数
|
||||
*
|
||||
@ -1143,13 +1166,13 @@ static void McThread(void *arg)
|
||||
OS_ReceiveMessage(&s_ctData.hotswQueue, (OSMessage *)&msg, OS_MESSAGE_BLOCK);
|
||||
|
||||
// カードデータロード完了フラグを下ろす
|
||||
SYSMi_GetWork()->flags.common.isCardLoadCompleted = FALSE;
|
||||
SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted = FALSE;
|
||||
|
||||
while(1){
|
||||
// 活線挿抜抑制フラグが立っていたら処理しない
|
||||
if( !SYSMi_GetWork()->flags.common.isEnableHotSW ) {
|
||||
if( !SYSMi_GetWork()->flags.hotsw.isEnableHotSW ) {
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
|
||||
SYSMi_GetWork()->flags.hotsw.is1stCardChecked = TRUE;
|
||||
//#endif
|
||||
break;
|
||||
}
|
||||
@ -1162,10 +1185,10 @@ static void McThread(void *arg)
|
||||
if(CARDi_IsPulledOutEx(hotswCount)){
|
||||
u16 id = (u16)OS_GetLockID();
|
||||
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
|
||||
if( SYSMi_GetWork()->flags.arm9.reqChangeHotSW ) {
|
||||
SYSMi_GetWork()->flags.common.isEnableHotSW = SYSMi_GetWork()->flags.arm9.nextHotSWStatus;
|
||||
SYSMi_GetWork()->flags.arm9.reqChangeHotSW = 0;
|
||||
SYSMi_GetWork()->flags.arm9.nextHotSWStatus = 0;
|
||||
if( SYSMi_GetWork()->flags.hotsw.reqChangeHotSW ) {
|
||||
SYSMi_GetWork()->flags.hotsw.isEnableHotSW = SYSMi_GetWork()->flags.hotsw.nextHotSWStatus;
|
||||
SYSMi_GetWork()->flags.hotsw.reqChangeHotSW = 0;
|
||||
SYSMi_GetWork()->flags.hotsw.nextHotSWStatus = 0;
|
||||
// HOTSW_Finalize();
|
||||
}
|
||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
|
||||
@ -1175,8 +1198,8 @@ static void McThread(void *arg)
|
||||
{
|
||||
u16 id = (u16)OS_GetLockID();
|
||||
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL );
|
||||
SYSMi_GetWork()->flags.common.isExistCard = TRUE;
|
||||
SYSMi_GetWork()->flags.common.isCardStateChanged = TRUE;
|
||||
SYSMi_GetWork()->flags.hotsw.isExistCard = TRUE;
|
||||
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
|
||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL );
|
||||
OS_ReleaseLockID( id );
|
||||
}
|
||||
@ -1189,7 +1212,7 @@ static void McThread(void *arg)
|
||||
SYSMi_GetWork()->flags.common.isOnDebugger = s_cbData.debuggerFlg;
|
||||
|
||||
// カードデータロード完了フラグ
|
||||
SYSMi_GetWork()->flags.common.isCardLoadCompleted = TRUE;
|
||||
SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted = TRUE;
|
||||
|
||||
OS_PutString("ok!\n");
|
||||
|
||||
@ -1220,9 +1243,9 @@ static void McThread(void *arg)
|
||||
{
|
||||
u16 id = (u16)OS_GetLockID();
|
||||
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
|
||||
SYSMi_GetWork()->flags.common.isExistCard = FALSE;
|
||||
SYSMi_GetWork()->flags.common.isValidCardBanner = FALSE;
|
||||
SYSMi_GetWork()->flags.common.isCardStateChanged = TRUE;
|
||||
SYSMi_GetWork()->flags.hotsw.isExistCard = FALSE;
|
||||
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = FALSE;
|
||||
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
|
||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
|
||||
OS_ReleaseLockID( id );
|
||||
}
|
||||
@ -1237,7 +1260,7 @@ static void McThread(void *arg)
|
||||
}
|
||||
}
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
|
||||
SYSMi_GetWork()->flags.hotsw.is1stCardChecked = TRUE;
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
@ -1297,7 +1320,7 @@ static void SetHotSwState(BOOL busy)
|
||||
{
|
||||
LockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
|
||||
|
||||
SYSMi_GetWork()->flags.common.isBusyHotSW = busy ? 1 : 0;
|
||||
SYSMi_GetWork()->flags.hotsw.isBusyHotSW = busy ? 1 : 0;
|
||||
|
||||
UnlockHotSwRsc(&SYSMi_GetWork()->lockHotSW);
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ HotSwState ReadBootSegNormal_ROMEMU(CardBootData *cbd)
|
||||
// u32 n = 0;
|
||||
|
||||
for(i=0; i<BOOT_PAGE_NUM; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -94,7 +94,7 @@ HotSwState ChangeModeNormal_ROMEMU(CardBootData *cbd)
|
||||
|
||||
GCDCmd64 tempCnd, cnd;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -138,7 +138,7 @@ HotSwState ChangeModeNormal_ROMEMU(CardBootData *cbd)
|
||||
*---------------------------------------------------------------------------*/
|
||||
HotSwState ReadIDSecure_ROMEMU(CardBootData *cbd)
|
||||
{
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -174,7 +174,7 @@ HotSwState ReadSegSecure_ROMEMU(CardBootData *cbd)
|
||||
u32 n = 0;
|
||||
|
||||
for(i=0; i<SECURE_PAGE_NUM; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -250,7 +250,7 @@ HotSwState ChangeModeSecure_ROMEMU(CardBootData *cbd)
|
||||
|
||||
GCDCmd64 tempCnd, cnd;
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -296,7 +296,7 @@ HotSwState ReadIDGame_ROMEMU(CardBootData *cbd)
|
||||
{
|
||||
#pragma unused( cbd )
|
||||
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
@ -340,7 +340,7 @@ HotSwState ReadPageGame_ROMEMU(CardBootData *cbd, u32 start_addr, void* buf, u32
|
||||
OS_TPrintf("Read Game Segment Page Count : %d size : %x\n", loop, size);
|
||||
|
||||
for(i=0; i<loop; i++){
|
||||
if(!HOTSW_IsCardExist()){
|
||||
if(!HOTSW_IsCardAccessible()){
|
||||
return HOTSW_PULLED_OUT_ERROR;
|
||||
}
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@ BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
|
||||
{
|
||||
#pragma unused(bannerOffset)
|
||||
BOOL isRead;
|
||||
if( SYSMi_GetWork()->flags.common.isValidCardBanner ) {
|
||||
if( SYSMi_GetWork()->flags.hotsw.isValidCardBanner ) {
|
||||
DC_InvalidateRange( (void *)SYSM_CARD_BANNER_BUF, 0x3000 );
|
||||
MI_CpuCopyFast( (void *)SYSM_CARD_BANNER_BUF, pBanner, sizeof(TWLBannerFile) );
|
||||
}
|
||||
|
||||
@ -121,7 +121,7 @@ TitleProperty *SYSM_ReadParameters( void )
|
||||
}
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
// ARM7のカードチェック完了を待つ
|
||||
while( !SYSMi_GetWork()->flags.common.is1stCardChecked ) {
|
||||
while( !SYSMi_GetWork()->flags.hotsw.is1stCardChecked ) {
|
||||
SVC_WaitByLoop( 0x1000 );
|
||||
}
|
||||
//#endif
|
||||
|
||||
@ -144,7 +144,7 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
||||
// region_codeが本体情報と違うもの
|
||||
// の場合は、正常に認識できないタイトルであることを示す。
|
||||
|
||||
if( SYSMi_GetWork()->flags.common.isCardStateChanged ) {
|
||||
if( SYSMi_GetWork()->flags.hotsw.isCardStateChanged ) {
|
||||
|
||||
MI_CpuClear32( pTitleList_Card, sizeof(TitleProperty) );
|
||||
|
||||
@ -162,7 +162,7 @@ BOOL SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
||||
SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ CARD_BANNER_INDEX ] );
|
||||
pTitleList_Card->pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ];
|
||||
|
||||
SYSMi_GetWork()->flags.common.isCardStateChanged = FALSE; // カード情報更新フラグを落とす
|
||||
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = FALSE; // カード情報更新フラグを落とす
|
||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockCardRsc, NULL ); // ARM7と排他制御する
|
||||
OS_ReleaseLockID( id );
|
||||
|
||||
@ -1049,27 +1049,27 @@ void SYSMi_EnableHotSW( BOOL enable )
|
||||
enable = enable ? 1 : 0;
|
||||
|
||||
// 現在の値と同じなら何もせずリターン
|
||||
if( SYSMi_GetWork()->flags.common.isEnableHotSW == enable ) {
|
||||
if( SYSMi_GetWork()->flags.hotsw.isEnableHotSW == enable ) {
|
||||
return;
|
||||
}
|
||||
|
||||
{
|
||||
u16 id = (u16)OS_GetLockID();
|
||||
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
|
||||
if( !SYSMi_GetWork()->flags.common.isBusyHotSW ) {
|
||||
if( !SYSMi_GetWork()->flags.hotsw.isBusyHotSW ) {
|
||||
// ARM7側がビジーでなければ、直接書き換え
|
||||
SYSMi_GetWork()->flags.common.isEnableHotSW = enable;
|
||||
SYSMi_GetWork()->flags.hotsw.isEnableHotSW = enable;
|
||||
}else {
|
||||
// ARM7側がビジーなら、変更要求をしてARM7が値を書き換えてくれるのを待つ。
|
||||
SYSMi_GetWork()->flags.arm9.reqChangeHotSW = 1;
|
||||
SYSMi_GetWork()->flags.arm9.nextHotSWStatus = enable;
|
||||
SYSMi_GetWork()->flags.hotsw.reqChangeHotSW = 1;
|
||||
SYSMi_GetWork()->flags.hotsw.nextHotSWStatus = enable;
|
||||
}
|
||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
|
||||
OS_ReleaseLockID( id );
|
||||
}
|
||||
|
||||
// 値が変化するまでスリープして待つ。
|
||||
while( SYSMi_GetWork()->flags.common.isEnableHotSW != enable ) {
|
||||
while( SYSMi_GetWork()->flags.hotsw.isEnableHotSW != enable ) {
|
||||
OS_Sleep( 2 );
|
||||
}
|
||||
}
|
||||
|
||||
@ -86,7 +86,7 @@ BOOL SYSM_IsValidTSD( void )
|
||||
// 有効なTWL/NTRカードが差さっているか?
|
||||
BOOL SYSM_IsExistCard( void )
|
||||
{
|
||||
return (BOOL)SYSMi_GetWork()->flags.common.isExistCard;
|
||||
return (BOOL)SYSMi_GetWork()->flags.hotsw.isExistCard;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -30,7 +30,10 @@ extern "C" {
|
||||
void HOTSW_Init(void);
|
||||
|
||||
// カードの存在判定
|
||||
BOOL HOTSW_IsCardExist(void);
|
||||
BOOL HOTSW_IsCardExist(void);
|
||||
|
||||
// カードにアクセスできる状態か判定
|
||||
BOOL HOTSW_IsCardAccessible(void);
|
||||
|
||||
// Boot Segment バッファの指定
|
||||
void HOTSW_SetBootSegmentBuffer(void* buf, u32 size);
|
||||
|
||||
@ -87,37 +87,31 @@ typedef struct SYSM_work {
|
||||
vu32 isValidTSD :1; // NITRO設定データ無効フラグ
|
||||
vu32 isLogoSkip :1; // ロゴデモスキップ
|
||||
vu32 isOnDebugger :1; // デバッガ動作か?
|
||||
vu32 isExistCard :1; // 有効なNTR/TWLカードが存在するか?
|
||||
vu32 isCardStateChanged :1; // カード状態更新フラグ
|
||||
vu32 isLoadSucceeded :1; // アプリロード完了?
|
||||
vu32 isCardBoot :1; // カードブートか?
|
||||
vu32 isBrokenHWNormalInfo :1; // HWノーマル情報が破損している。
|
||||
vu32 isBrokenHWSecureInfo :1; // HWセキュア情報が破損している。
|
||||
vu32 isResetRTC :1; // RTCリセット発生
|
||||
vu32 :0;
|
||||
|
||||
vu32 isEnableHotSW :1; // 活線挿抜有効?
|
||||
vu32 isBusyHotSW :1; // 活線挿抜処理中?
|
||||
vu32 isCardLoadCompleted :1; // カードからデータロード完了?
|
||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
||||
vu32 isValidCardBanner :1;
|
||||
vu32 is1stCardChecked :1;
|
||||
//#endif
|
||||
vu32 :0;
|
||||
}common;
|
||||
struct {
|
||||
vu16 reqChangeHotSW :1;
|
||||
vu16 nextHotSWStatus :1;
|
||||
vu16 :0;
|
||||
}arm9;
|
||||
struct {
|
||||
vu16 rsv:16;
|
||||
}arm7;
|
||||
}flags; // 12B
|
||||
|
||||
struct {
|
||||
vu16 isExistCard :1; // 有効なNTR/TWLカードが存在するか?
|
||||
vu16 isEnableHotSW :1; // 活線挿抜有効?
|
||||
vu16 isBusyHotSW :1; // 活線挿抜処理中?
|
||||
vu16 isCardLoadCompleted :1; // カードからデータロード完了?
|
||||
vu16 isValidCardBanner :1;
|
||||
vu16 is1stCardChecked :1;
|
||||
vu16 reqChangeHotSW :1; // 削除予定
|
||||
vu16 nextHotSWStatus :1; // 削除予定
|
||||
vu16 :8;
|
||||
vu8 isCardStateChanged; // カード状態更新フラグ
|
||||
}hotsw;
|
||||
}flags; // 7B
|
||||
|
||||
u16 cardHeaderCrc16; // カード検出時に算出したROMヘッダCRC16(ARM9側でコピーして使用する側)
|
||||
u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16(ARM7側ライブラリでダイレクトに書き換わる側)
|
||||
OSLockWord lockCardRsc; // カードリソース排他制御用
|
||||
|
||||
OSLockWord lockCardRsc ATTRIBUTE_ALIGN(8); // カードリソース排他制御用
|
||||
OSLockWord lockHotSW; // カードリソース排他制御用
|
||||
u32 nCardID; // カードID
|
||||
u32 gameCommondParam; // NTRのゲームコマンドパラメータ(NTRのROMヘッダのゲームコマンドパラメータに上書きする)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user