mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-06-18 16:55:31 -04:00
排他アクセス関数を追加。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@296 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
575fbfb58c
commit
7700918ac6
@ -37,7 +37,7 @@
|
||||
|
||||
Returns: swapped memory data
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm u8 miSwapByte( register u32 setData, register vu8* destp )
|
||||
asm u8 miSwapByte( u8 setData, u8* destp )
|
||||
{
|
||||
swpb r0, r0, [r1]
|
||||
bx lr
|
||||
@ -53,11 +53,162 @@ asm u8 miSwapByte( register u32 setData, register vu8* destp )
|
||||
|
||||
Returns: swapped memory data
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm u32 miSwapWord( register u32 setData, register vu32* destp )
|
||||
asm u32 miSwapWord( u32 setData, u32* destp )
|
||||
{
|
||||
swp r0, r0, [r1]
|
||||
bx lr
|
||||
}
|
||||
|
||||
#ifdef SDK_ARM11
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miLoadExclusiveByte
|
||||
|
||||
Description: load exclusive data and memory
|
||||
|
||||
Arguments: destp memory address to load exclusive
|
||||
|
||||
Returns: loaded memory data
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm u8 miLoadExclusiveByte( u8* destp )
|
||||
{
|
||||
ldrexb r0, [r0]
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miLoadExclusiveHalfWord
|
||||
|
||||
Description: load exclusive data and memory
|
||||
|
||||
Arguments: destp memory address to load exclusive
|
||||
|
||||
Returns: loaded memory data
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm u16 miLoadExclusiveHalfWord( u16* destp )
|
||||
{
|
||||
ldrexh r0, [r0]
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miLoadExclusiveWord
|
||||
|
||||
Description: load exclusive data and memory
|
||||
|
||||
Arguments: destp memory address to load exclusive
|
||||
|
||||
Returns: loaded memory data
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm u32 miLoadExclusiveWord( u32* destp )
|
||||
{
|
||||
ldrex r0, [r0]
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miLoadExclusiveDoubleWord
|
||||
|
||||
Description: load exclusive data and memory
|
||||
|
||||
Arguments: destp memory address to load exclusive
|
||||
|
||||
Returns: loaded memory data
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm u64 miLoadExclusiveDoubleWord( u64* destp )
|
||||
{
|
||||
ldrexd r0, [r0]
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miStoreExclusiveByte
|
||||
|
||||
Description: store exclusive data and memory
|
||||
|
||||
Arguments: setData data to store exclusive
|
||||
destp memory address to store exclusive
|
||||
|
||||
Returns: MI_STREX_SUCCESS success
|
||||
MI_STREX_ERROR error of store exclusive
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm MIStrExErr miStoreExclusiveByte( u8 setData, u8* destp )
|
||||
{
|
||||
strexb r2, r0, [r1]
|
||||
mov r0, r2
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miStoreExclusiveHalfWord
|
||||
|
||||
Description: store exclusive data and memory
|
||||
|
||||
Arguments: setData data to store exclusive
|
||||
destp memory address to store exclusive
|
||||
|
||||
Returns: MI_STREX_SUCCESS success
|
||||
MI_STREX_ERROR error of store exclusive
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm MIStrExErr miStoreExclusiveHalfWord( u16 setData, u16* destp )
|
||||
{
|
||||
strexh r2, r0, [r1]
|
||||
mov r0, r2
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miStoreExclusiveWord
|
||||
|
||||
Description: store exclusive data and memory
|
||||
|
||||
Arguments: setData data to store exclusive
|
||||
destp memory address to store exclusive
|
||||
|
||||
Returns: MI_STREX_SUCCESS success
|
||||
MI_STREX_ERROR error of store exclusive
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm MIStrExErr miStoreExclusiveWord( u32 setData, u32* destp )
|
||||
{
|
||||
strex r2, r0, [r1]
|
||||
mov r0, r2
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miStoreExclusiveDoubleWord
|
||||
|
||||
Description: store exclusive data and memory
|
||||
|
||||
Arguments: setData data to store exclusive
|
||||
destp memory address to store exclusive
|
||||
|
||||
Returns: MI_STREX_SUCCESS success
|
||||
MI_STREX_ERROR error of store exclusive
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm MIStrExErr miStoreExclusiveDoubleWord( u64 setData, u64* destp )
|
||||
{
|
||||
strexd r3, r0, [r2]
|
||||
mov r0, r3
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miClearExclusiveAccess
|
||||
|
||||
Description: clear exclusive access
|
||||
|
||||
Arguments: None.
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm void miClearExclusiveAccess( void )
|
||||
{
|
||||
clrex
|
||||
bx lr
|
||||
}
|
||||
|
||||
#endif // SDK_ARM11
|
||||
|
||||
//---- end limitation of ARM-Mode
|
||||
#include <brom/codereset.h>
|
||||
|
@ -56,7 +56,6 @@ void osInitInterrupt( void )
|
||||
{
|
||||
u32 num = OS_INTR_ID_NUM;
|
||||
u32 conf = 0;
|
||||
u32 ack;
|
||||
int i;
|
||||
|
||||
for ( i=0; i<num; i++ )
|
||||
@ -72,7 +71,7 @@ void osInitInterrupt( void )
|
||||
{
|
||||
reg_OS_IDR_CFG[i] = conf;
|
||||
}
|
||||
while ( (ack = (reg_OS_CPUI_ACK & REG_OS_CPUI_ACK_ID_MASK)) != REG_OS_CPUI_ACK_ID_MASK )
|
||||
while ( (reg_OS_CPUI_ACK & REG_OS_CPUI_ACK_ID_MASK) != REG_OS_CPUI_ACK_ID_MASK )
|
||||
{
|
||||
}
|
||||
// reg_OS_IDR_CLR_PNDではクリアできないビット
|
||||
|
@ -24,8 +24,15 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MI_STREX_SUCCESS = 0, // 排他ストア成功
|
||||
MI_STREX_ERROR = 1 // 排他ストアエラー
|
||||
}
|
||||
MIStrExErr;
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miSwapWord / miSwapByte
|
||||
Name: miSwap[Byte|Word]
|
||||
|
||||
Description: swap data and memory
|
||||
|
||||
@ -38,11 +45,51 @@ extern "C" {
|
||||
Use miSwapByte() not miSwapWord() basically.
|
||||
*---------------------------------------------------------------------------*/
|
||||
//---- by byte
|
||||
u8 miSwapByte(u32 setData, volatile u8 *destp);
|
||||
u8 miSwapByte(u8 setData, u8 *destp);
|
||||
|
||||
//---- by word
|
||||
u32 miSwapWord(u32 setData, volatile u32 *destp);
|
||||
u32 miSwapWord(u32 setData, u32 *destp);
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miLoadExclusive[Byte|HalfWord|Word|DoubleWord]
|
||||
|
||||
Description: load exclusive data and memory
|
||||
|
||||
Arguments: destp memory address to load exclusive
|
||||
|
||||
Returns: loaded memory data
|
||||
*---------------------------------------------------------------------------*/
|
||||
u8 miLoadExclusiveByte( u8* destp );
|
||||
u16 miLoadExclusiveHalfWord( u16* destp );
|
||||
u32 miLoadExclusiveWord( u32* destp );
|
||||
u64 miLoadExclusiveDoubleWord( u64* destp );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miStoreExclusive[Byte|HalfWord|Word|DoubleWord]
|
||||
|
||||
Description: store exclusive data and memory
|
||||
|
||||
Arguments: setData data to store exclusive
|
||||
destp memory address to store exclusive
|
||||
|
||||
Returns: MI_STREX_SUCCESS success
|
||||
MI_STREX_ERROR error of store exclusive
|
||||
*---------------------------------------------------------------------------*/
|
||||
MIStrExErr miStoreExclusiveByte( u8 setData, u8* destp );
|
||||
MIStrExErr miStoreExclusiveHalfWord( u16 setData, u16* destp );
|
||||
MIStrExErr miStoreExclusiveWord( u32 setData, u32* destp );
|
||||
MIStrExErr miStoreExclusiveDoubleWord( u64 setData, u64* destp );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: miClearExclusiveAccess
|
||||
|
||||
Description: clear exclusive access
|
||||
|
||||
Arguments: None.
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void miClearExclusiveAccess( void );
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
|
Loading…
Reference in New Issue
Block a user