mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -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
|
Returns: swapped memory data
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
asm u8 miSwapByte( register u32 setData, register vu8* destp )
|
asm u8 miSwapByte( u8 setData, u8* destp )
|
||||||
{
|
{
|
||||||
swpb r0, r0, [r1]
|
swpb r0, r0, [r1]
|
||||||
bx lr
|
bx lr
|
||||||
@ -53,11 +53,162 @@ asm u8 miSwapByte( register u32 setData, register vu8* destp )
|
|||||||
|
|
||||||
Returns: swapped memory data
|
Returns: swapped memory data
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
asm u32 miSwapWord( register u32 setData, register vu32* destp )
|
asm u32 miSwapWord( u32 setData, u32* destp )
|
||||||
{
|
{
|
||||||
swp r0, r0, [r1]
|
swp r0, r0, [r1]
|
||||||
bx lr
|
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
|
//---- end limitation of ARM-Mode
|
||||||
#include <brom/codereset.h>
|
#include <brom/codereset.h>
|
||||||
|
|||||||
@ -56,7 +56,6 @@ void osInitInterrupt( void )
|
|||||||
{
|
{
|
||||||
u32 num = OS_INTR_ID_NUM;
|
u32 num = OS_INTR_ID_NUM;
|
||||||
u32 conf = 0;
|
u32 conf = 0;
|
||||||
u32 ack;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for ( i=0; i<num; i++ )
|
for ( i=0; i<num; i++ )
|
||||||
@ -72,7 +71,7 @@ void osInitInterrupt( void )
|
|||||||
{
|
{
|
||||||
reg_OS_IDR_CFG[i] = conf;
|
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ではクリアできないビット
|
// reg_OS_IDR_CLR_PNDではクリアできないビット
|
||||||
|
|||||||
@ -24,8 +24,15 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
MI_STREX_SUCCESS = 0, // 排他ストア成功
|
||||||
|
MI_STREX_ERROR = 1 // 排他ストアエラー
|
||||||
|
}
|
||||||
|
MIStrExErr;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: miSwapWord / miSwapByte
|
Name: miSwap[Byte|Word]
|
||||||
|
|
||||||
Description: swap data and memory
|
Description: swap data and memory
|
||||||
|
|
||||||
@ -38,11 +45,51 @@ extern "C" {
|
|||||||
Use miSwapByte() not miSwapWord() basically.
|
Use miSwapByte() not miSwapWord() basically.
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
//---- by byte
|
//---- by byte
|
||||||
u8 miSwapByte(u32 setData, volatile u8 *destp);
|
u8 miSwapByte(u8 setData, u8 *destp);
|
||||||
|
|
||||||
//---- by word
|
//---- 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
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user