mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
スピンロックを8バイト単位から2バイト単位へ変更。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@166 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
83bec6addb
commit
ec8097d404
@ -24,15 +24,15 @@ void _ISTDbgLib_Initialize(void);
|
||||
void _ISTDbgLib_AllocateEmualtor(void);
|
||||
void _ISTDbgLib_FreeEmulator(void);
|
||||
|
||||
s32 osLockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void));
|
||||
s32 osUnlockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void));
|
||||
s32 osTryLockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*crtlFuncp) (void));
|
||||
s32 osLockByWord_IrqAndFiq(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void));
|
||||
s32 osUnlockByByte_IrqAndFiq(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void));
|
||||
s32 osTryLockByByte_IrqAndFiq(u8 lockID, OSLockByte *lockp, void (*crtlFuncp) (void));
|
||||
|
||||
static s32 i_osDoLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
|
||||
static s32 i_osDoLockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void),
|
||||
BOOL disableFiq);
|
||||
static s32 i_osDoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
|
||||
static s32 i_osDoUnlockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void),
|
||||
BOOL disableFIQ);
|
||||
static s32 i_osDoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
|
||||
static s32 i_osDoTryLockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void),
|
||||
BOOL disableFIQ);
|
||||
|
||||
static void i_osAllocateCartridgeBus(void);
|
||||
@ -164,7 +164,7 @@ void osInitLock(void)
|
||||
{
|
||||
static BOOL isInitialized = FALSE;
|
||||
#ifdef SDK_NITRO
|
||||
OSLockWord *lockp;
|
||||
OSLockByte *lockp;
|
||||
#endif
|
||||
|
||||
if (isInitialized)
|
||||
@ -189,7 +189,7 @@ void osInitLock(void)
|
||||
i_osSyncWithOtherProc( OSi_SYNCTYPE_RECVER, (void*)HW_INIT_LOCK_BUF );
|
||||
|
||||
//lockp->lockFlag = 0;
|
||||
//(void)osLockByWord(OS_MAINP_SYSTEM_LOCK_ID, lockp, NULL);
|
||||
//(void)osLockByByte(OS_MAINP_SYSTEM_LOCK_ID, lockp, NULL);
|
||||
|
||||
#else // SDK_ARM9
|
||||
// ロックIDカウンタ用フラグ 初期化
|
||||
@ -207,7 +207,7 @@ void osInitLock(void)
|
||||
// LOCK
|
||||
//======================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osDoLockByWord
|
||||
Name: i_osDoLockByByte
|
||||
|
||||
Description: do spinlock. keep to try till success
|
||||
|
||||
@ -218,13 +218,13 @@ void osInitLock(void)
|
||||
|
||||
Returns: OS_LOCK_SUCCESS success to lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
static s32 i_osDoLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
|
||||
static s32 i_osDoLockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void),
|
||||
BOOL disableFiq)
|
||||
{
|
||||
s32 lastLockFlag;
|
||||
|
||||
while ((lastLockFlag =
|
||||
i_osDoTryLockByWord(lockID, lockp, ctrlFuncp, disableFiq)) > OS_LOCK_SUCCESS)
|
||||
i_osDoTryLockByByte(lockID, lockp, ctrlFuncp, disableFiq)) > OS_LOCK_SUCCESS)
|
||||
{
|
||||
i_osWaitByLoop();
|
||||
}
|
||||
@ -233,7 +233,7 @@ static s32 i_osDoLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (vo
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osLockByWord
|
||||
Name: osLockByByte
|
||||
|
||||
Description: do spinlock. keep to try till success.
|
||||
|
||||
@ -243,13 +243,13 @@ static s32 i_osDoLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (vo
|
||||
|
||||
Returns: OS_LOCK_SUCCESS success to lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
s32 osLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
|
||||
s32 osLockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void))
|
||||
{
|
||||
return i_osDoLockByWord(lockID, lockp, ctrlFuncp, FALSE);
|
||||
return i_osDoLockByByte(lockID, lockp, ctrlFuncp, FALSE);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osLockByWord_IrqAndFiq
|
||||
Name: osLockByByte_IrqAndFiq
|
||||
|
||||
Description: do spinlock. keep to try till success.
|
||||
disable irq and fiq
|
||||
@ -260,9 +260,9 @@ s32 osLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
|
||||
|
||||
Returns: OS_LOCK_SUCCESS success to lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
s32 osLockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
|
||||
s32 osLockByByte_IrqAndFiq(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void))
|
||||
{
|
||||
return i_osDoLockByWord(lockID, lockp, ctrlFuncp, TRUE);
|
||||
return i_osDoLockByByte(lockID, lockp, ctrlFuncp, TRUE);
|
||||
}
|
||||
|
||||
|
||||
@ -270,7 +270,7 @@ s32 osLockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (voi
|
||||
// UNLOCK
|
||||
//======================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osDoUnlockByWord
|
||||
Name: i_osDoUnlockByByte
|
||||
|
||||
Description: do unlock lock.
|
||||
|
||||
@ -282,7 +282,7 @@ s32 osLockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (voi
|
||||
Returns: OS_UNLOCK_SUCCESS success
|
||||
OS_UNLOCK_ERROR error of unlocking lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
static s32 i_osDoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
|
||||
static s32 i_osDoUnlockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void),
|
||||
BOOL disableFIQ)
|
||||
{
|
||||
OSIntrMode lastInterrupts;
|
||||
@ -318,7 +318,7 @@ static s32 i_osDoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osUnlockByWord
|
||||
Name: osUnlockByByte
|
||||
|
||||
Description: do unlock lock.
|
||||
disable irq and fiq
|
||||
@ -330,19 +330,13 @@ static s32 i_osDoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (
|
||||
Returns: OS_UNLOCK_SUCCESS success
|
||||
OS_UNLOCK_ERROR error of unlocking lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
s32 osUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
|
||||
s32 osUnlockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void))
|
||||
{
|
||||
return i_osDoUnlockByWord(lockID, lockp, ctrlFuncp, FALSE);
|
||||
}
|
||||
|
||||
//---- for compatibility to old name ('UnLock' <-> 'Unlock')
|
||||
s32 osUnLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
|
||||
{
|
||||
return i_osDoUnlockByWord(lockID, lockp, ctrlFuncp, FALSE);
|
||||
return i_osDoUnlockByByte(lockID, lockp, ctrlFuncp, FALSE);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osUnlockByWord_IrqAndFiq
|
||||
Name: osUnlockByByte_IrqAndFiq
|
||||
|
||||
Description: do unlock lock.
|
||||
|
||||
@ -353,9 +347,9 @@ s32 osUnLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
|
||||
Returns: OS_UNLOCK_SUCCESS success
|
||||
OS_UNLOCK_ERROR error of unlocking lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
s32 osUnlockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
|
||||
s32 osUnlockByByte_IrqAndFiq(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void))
|
||||
{
|
||||
return i_osDoUnlockByWord(lockID, lockp, ctrlFuncp, TRUE);
|
||||
return i_osDoUnlockByByte(lockID, lockp, ctrlFuncp, TRUE);
|
||||
}
|
||||
|
||||
|
||||
@ -363,7 +357,7 @@ s32 osUnlockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (v
|
||||
// TRY LOCK
|
||||
//======================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osDoTryLockByWord
|
||||
Name: i_osDoTryLockByByte
|
||||
|
||||
Description: try to lock spinlock only once.
|
||||
|
||||
@ -375,7 +369,7 @@ s32 osUnlockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (v
|
||||
Returns: >0 value previous locked id
|
||||
OS_LOCK_SUCCESS success to lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
static s32 i_osDoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
|
||||
static s32 i_osDoTryLockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void),
|
||||
BOOL disableFIQ)
|
||||
{
|
||||
s32 lastLockFlag;
|
||||
@ -386,7 +380,7 @@ static s32 i_osDoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp)
|
||||
//---- Disable irq/fiq or irq
|
||||
lastInterrupts = (disableFIQ) ? osDisableInterrupts_IrqAndFiq() : osDisableInterrupts();
|
||||
|
||||
lastLockFlag = (s32)miSwapWord(lockID, &lockp->lockFlag);
|
||||
lastLockFlag = (s32)miSwapByte(lockID, &lockp->lockFlag);
|
||||
|
||||
if (lastLockFlag == OS_LOCK_SUCCESS)
|
||||
{
|
||||
@ -411,7 +405,7 @@ static s32 i_osDoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp)
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osTryLockByWord
|
||||
Name: osTryLockByByte
|
||||
|
||||
Description: try to lock spinlock only once.
|
||||
|
||||
@ -422,13 +416,13 @@ static s32 i_osDoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp)
|
||||
Returns: >0 value previous locked id
|
||||
OS_LOCK_SUCCESS success to lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
s32 osTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
|
||||
s32 osTryLockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void))
|
||||
{
|
||||
return i_osDoTryLockByWord(lockID, lockp, ctrlFuncp, FALSE);
|
||||
return i_osDoTryLockByByte(lockID, lockp, ctrlFuncp, FALSE);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osTryLockByWord_IrqAndFiq
|
||||
Name: osTryLockByByte_IrqAndFiq
|
||||
|
||||
Description: try to lock spinlock only once.
|
||||
|
||||
@ -439,9 +433,9 @@ s32 osTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
|
||||
Returns: >0 value previous locked id
|
||||
OS_LOCK_SUCCESS success to lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
s32 osTryLockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
|
||||
s32 osTryLockByByte_IrqAndFiq(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void))
|
||||
{
|
||||
return i_osDoTryLockByWord(lockID, lockp, ctrlFuncp, TRUE);
|
||||
return i_osDoTryLockByByte(lockID, lockp, ctrlFuncp, TRUE);
|
||||
}
|
||||
|
||||
|
||||
@ -457,11 +451,11 @@ s32 osTryLockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (
|
||||
|
||||
Returns: OS_LOCK_SUCCESS success to lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
s32 osLockCard(u16 lockID)
|
||||
s32 osLockCard(u8 lockID)
|
||||
{
|
||||
OSi_ASSERT_ID(lockID);
|
||||
|
||||
return osLockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, i_osAllocateCardBus);
|
||||
return osLockByByte(lockID, (OSLockByte *)HW_CARD_LOCK_BUF, i_osAllocateCardBus);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -474,11 +468,11 @@ s32 osLockCard(u16 lockID)
|
||||
Returns: OS_UNLOCK_SUCCESS success
|
||||
OS_UNLOCK_ERROR error of unlocking lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
s32 osUnlockCard(u16 lockID)
|
||||
s32 osUnlockCard(u8 lockID)
|
||||
{
|
||||
OSi_ASSERT_ID(lockID);
|
||||
|
||||
return osUnlockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, i_osFreeCardBus);
|
||||
return osUnlockByByte(lockID, (OSLockByte *)HW_CARD_LOCK_BUF, i_osFreeCardBus);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -491,9 +485,9 @@ s32 osUnlockCard(u16 lockID)
|
||||
Returns: >0 value previous locked id
|
||||
OS_LOCK_SUCCESS success to lock
|
||||
*---------------------------------------------------------------------------*/
|
||||
s32 osTryLockCard(u16 lockID)
|
||||
s32 osTryLockCard(u8 lockID)
|
||||
{
|
||||
return osTryLockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, i_osAllocateCardBus);
|
||||
return osTryLockByByte(lockID, (OSLockByte *)HW_CARD_LOCK_BUF, i_osAllocateCardBus);
|
||||
}
|
||||
|
||||
//----------------
|
||||
@ -501,7 +495,7 @@ static void i_osAllocateCardBus(void)
|
||||
{
|
||||
#ifdef SDK_ARM11
|
||||
#ifdef SDK_TWL
|
||||
// preset reset flag with status of disable interrupts in i_osDoTryLockByWord
|
||||
// preset reset flag with status of disable interrupts in i_osDoTryLockByByte
|
||||
if ( ((reg_MI_MC & REG_MI_MC_SL1_MODE_MASK) >> REG_MI_MC_SL1_MODE_SHIFT) == 0x2 )
|
||||
{
|
||||
reg_MI_MCCNT1 |= REG_MI_MCCNT1_RESB_MASK;
|
||||
@ -539,7 +533,7 @@ static void i_osFreeCardBus(void)
|
||||
|
||||
Returns: owner id
|
||||
*---------------------------------------------------------------------------*/
|
||||
u16 osReadOwnerOfLockWord(OSLockWord *lockp)
|
||||
u8 osReadOwnerOfLockWord(OSLockByte *lockp)
|
||||
{
|
||||
return lockp->ownerID;
|
||||
}
|
||||
@ -648,7 +642,7 @@ LSYM(10)
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm void osReleaseLockID( register u16 lockID )
|
||||
asm void osReleaseLockID( register u8 lockID )
|
||||
{
|
||||
//#pragma unused( lockID )
|
||||
|
||||
|
||||
@ -58,13 +58,12 @@ extern "C" {
|
||||
|
||||
|
||||
//---- structure of lock variable
|
||||
typedef volatile struct OSLockWord
|
||||
typedef volatile struct OSLockByte
|
||||
{
|
||||
u32 lockFlag;
|
||||
u16 ownerID;
|
||||
u16 extension;
|
||||
u8 lockFlag;
|
||||
u8 ownerID;
|
||||
}
|
||||
OSLockWord;
|
||||
OSLockByte;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osInitLock
|
||||
@ -99,8 +98,8 @@ void osInitLock(void);
|
||||
//・戻り値:
|
||||
// OS_LOCK_SUCCESS ロック成功
|
||||
//----------------------------------------------------------------------
|
||||
s32 osLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void));
|
||||
s32 osLockCard(u16 lockID);
|
||||
s32 osLockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void));
|
||||
s32 osLockCard(u8 lockID);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ロックの解除
|
||||
@ -117,13 +116,8 @@ s32 osLockCard(u16 lockID);
|
||||
// OS_UNLOCK_SUCCESS ロック解除成功
|
||||
// OS_UNLOCK_ERROR ロック解除エラー
|
||||
//----------------------------------------------------------------------
|
||||
s32 osUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void));
|
||||
s32 osUnlockCard(u16 lockID);
|
||||
|
||||
//---- for compatibility to old name ('UnLock' <-> 'Unlock')
|
||||
// because isd lib calls osUnLock*, these cannot be inline.
|
||||
s32 osUnLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void));
|
||||
s32 osUnLockCard(u16 lockID);
|
||||
s32 osUnlockByByte(u8 lockID, OSLockByte *lockp, void (*ctrlFuncp) (void));
|
||||
s32 osUnlockCard(u8 lockID);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ロックの試行
|
||||
@ -143,8 +137,8 @@ s32 osUnLockCard(u16 lockID);
|
||||
// 正 ロック中(直前に格納されていたID)
|
||||
// OS_LOCK_SUCCESS ロック成功
|
||||
//----------------------------------------------------------------------
|
||||
s32 osTryLockByWord(u16 lockID, OSLockWord *lockp, void (*crtlFuncp) (void));
|
||||
s32 osTryLockCard(u16 lockID);
|
||||
s32 osTryLockByByte(u8 lockID, OSLockByte *lockp, void (*crtlFuncp) (void));
|
||||
s32 osTryLockCard(u8 lockID);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// ロック変数の所有モジュールIDの読み込み
|
||||
@ -166,8 +160,8 @@ s32 osTryLockCard(u16 lockID);
|
||||
// バイトアクセスはできないことに注意して下さい。
|
||||
// ですので、メインメモリ上では基本的に osReadOwnerOfLockWord() を使用して下さい。
|
||||
//----------------------------------------------------------------------
|
||||
u16 osReadOwnerOfLockWord(OSLockWord *lockp);
|
||||
#define osReadOwnerOfLockCard() osReadOwnerOfLockWord( (OSLockWord *)HW_CARD_LOCK_BUF )
|
||||
u8 osReadOwnerOfLockWord(OSLockByte *lockp);
|
||||
#define osReadOwnerOfLockCard() osReadOwnerOfLockWord( (OSLockByte *)HW_CARD_LOCK_BUF )
|
||||
|
||||
|
||||
|
||||
@ -201,7 +195,7 @@ s32 osGetLockID(void);
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osReleaseLockID(u16 lockID);
|
||||
void osReleaseLockID(u8 lockID);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -39,7 +39,7 @@ extern "C" {
|
||||
#define HW_AXI_WRAM_SYSRV_OFS_DABT_VENEER 0x28
|
||||
#endif // SDK_ARM11
|
||||
#define HW_AXI_WRAM_SYSRV_INIT_LOCK_BUF 0x30
|
||||
#define HW_AXI_WRAM_SYSRV_CARD_LOCK_BUF 0x38
|
||||
#define HW_AXI_WRAM_SYSRV_CARD_LOCK_BUF 0x34
|
||||
#ifdef SDK_ARM11
|
||||
#define HW_AXI_WRAM_SYSRV_OFS_START_VECTOR1 0x3c
|
||||
#define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK1 0x40
|
||||
|
||||
Loading…
Reference in New Issue
Block a user