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@181 b871894f-2f95-9b40-918c-086798483c85
548 lines
18 KiB
C
548 lines
18 KiB
C
/*---------------------------------------------------------------------------*
|
|
Project: CtrBrom - OS - include
|
|
File: cache.h
|
|
|
|
Copyright 2008 Nintendo. All rights reserved.
|
|
|
|
These coded instructions, statements, and computer programs contain
|
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
Company Ltd., and are protected by Federal copyright law. They may
|
|
not be disclosed to third parties or copied or duplicated in any form,
|
|
in whole or in part, without the prior written consent of Nintendo.
|
|
|
|
$Date:: $
|
|
$Rev$
|
|
$Author$
|
|
*---------------------------------------------------------------------------*/
|
|
#ifndef BROM_OS_CACHE_H_
|
|
#define BROM_OS_CACHE_H_
|
|
|
|
#include <brom/misc.h>
|
|
#include <brom/types.h>
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
//===========================================================================
|
|
// DATA CACHE CONTROL
|
|
//===========================================================================
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osEnableDCache
|
|
|
|
Description: enable data cache
|
|
|
|
Arguments: None
|
|
|
|
Returns: previous state
|
|
*---------------------------------------------------------------------------*/
|
|
BOOL osEnableDCache( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osDisableDCache
|
|
|
|
Description: disable data cache
|
|
|
|
Arguments: None
|
|
|
|
Returns: previous stats
|
|
*---------------------------------------------------------------------------*/
|
|
BOOL osDisableDCache( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osRestoreDCache
|
|
|
|
Description: set state of data cache
|
|
|
|
Arguments: data cache state to be set
|
|
|
|
Returns: previous state
|
|
*---------------------------------------------------------------------------*/
|
|
BOOL osRestoreDCache( BOOL enable );
|
|
|
|
|
|
//===========================================================================
|
|
// DATA CACHE (for all range)
|
|
//===========================================================================
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osInvalidateDCacheAll
|
|
|
|
Description: invalidate all data cache
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osInvalidateDCacheAll( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osStoreDCacheAll
|
|
|
|
Description: clean all data cache
|
|
(write cache data to memory)
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osStoreDCacheAll( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osFlushDCacheAll
|
|
|
|
Description: clean and invalidate all data cache
|
|
(write cache data to memory, and invalidate cache)
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osFlushDCacheAll( void );
|
|
|
|
|
|
//===========================================================================
|
|
// DATA CACHE (for specified range)
|
|
//===========================================================================
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osInvalidateDCacheRange
|
|
|
|
Description: invalidate data cache in specified range
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osInvalidateDCacheRange( void *startAddr, u32 nBytes );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osStoreDCacheRange
|
|
|
|
Description: clean data cache in specified range
|
|
(write cache data to memory)
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osStoreDCacheRange( void *startAddr, u32 nBytes );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osFlushDCacheRange
|
|
|
|
Description: clean and invalidate data cache in specified range
|
|
(write cache data to memory, and invalidate cache)
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osFlushDCacheRange( void *startAddr, u32 nBytes );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osInvalidateDCacheRangeOrAll
|
|
|
|
Description: invalidate data cache in specified range or all
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osInvalidateDCacheRangeOrAll( void* startAddr, u32 nBytes );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osStoreDCacheRangeOrAll
|
|
|
|
Description: clean data cache in specified range or all
|
|
(write cache data to memory)
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osStoreDCacheRangeOrAll( void* startAddr, u32 nBytes );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osFlushDCacheRangeOrAll
|
|
|
|
Description: clean data cache in specified range or all
|
|
(write cache data to memory)
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osFlushDCacheRangeOrAll( void* startAddr, u32 nBytes );
|
|
|
|
//===========================================================================
|
|
// DATA CACHE (for specified range)
|
|
//===========================================================================
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osLockdownDCacheRange
|
|
|
|
Description: lock specified area to prevent not to release data cache
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osLockdownDCacheRange( void *startAddr, u32 nBytes );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osUnlockdownDCacheAll
|
|
|
|
Description: unlock all data cache to enable to release
|
|
|
|
Arguments: none.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osUnlockdownDCacheAll( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: dcUnlockdown
|
|
|
|
Description: unlock any data cache to enable to release
|
|
|
|
Arguments: num - specify number of datablock to unlock.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osUnlockdownDCache( u32 num );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osWaitWriteBufferEmpty
|
|
|
|
Description: wait till write buffer becomes to be empty
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osWaitWriteBufferEmpty( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osTouchDCacheRange
|
|
|
|
Description: include specified area to data cache in advance
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osTouchDCacheRange( void *startAddr, u32 nBytes );
|
|
|
|
#ifdef SDK_ARM11
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osKeepDataAccessOrder
|
|
|
|
Description: keep data access order
|
|
|
|
Arguments: None
|
|
|
|
Returns: None
|
|
*---------------------------------------------------------------------------*/
|
|
void osKeepDataAccessOrder( void );
|
|
|
|
#endif // SDK_ARM11
|
|
|
|
|
|
//===========================================================================
|
|
// ALIAS OF DATA CACHE function
|
|
//===========================================================================
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osCleanDCacheAll
|
|
|
|
Description: alias for osStoreDcacheAll
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void osCleanDCacheAll( void )
|
|
{
|
|
osStoreDCacheAll();
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osCleanAndInvalidateDCacheAll
|
|
|
|
Description: alias for osFlushDCacheAll
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void osCleanAndInvalidateDCacheAll( void )
|
|
{
|
|
osFlushDCacheAll();
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osCleanDCacheRange
|
|
|
|
Description: alias for osStoreDCacheRange
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void osCleanDCacheRange( void *startAddr, u32 nBytes )
|
|
{
|
|
osStoreDCacheRange( startAddr, nBytes );
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osCleanAndInvalidateDCacheRange
|
|
|
|
Description: alias for osFlushDCacheRange
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void osCleanAndInvalidateDCacheRange( void *startAddr, u32 nBytes )
|
|
{
|
|
osFlushDCacheRange( startAddr, nBytes );
|
|
}
|
|
|
|
#ifdef SDK_ARM11
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osPreloadDCacheRange
|
|
|
|
Description: alias for osTouchDCacheRange
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void osPreloadDCacheRange( void *startAddr, u32 nBytes )
|
|
{
|
|
osTouchDCacheRange( startAddr, nBytes );
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osDoDataMemoryBarrier
|
|
|
|
Description: Do Data Memory Barrier
|
|
|
|
Arguments: None
|
|
|
|
Returns: None
|
|
*---------------------------------------------------------------------------*/
|
|
static inline void osDoDataMemoryBarrier( void )
|
|
{
|
|
osKeepDataAccessOrder();
|
|
}
|
|
|
|
#endif // SDK_ARM11
|
|
|
|
//===========================================================================
|
|
// INSTRUCTION CACHE CONTROL
|
|
//===========================================================================
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osEnableICache
|
|
|
|
Description: enable instruction cache
|
|
|
|
Arguments: None
|
|
|
|
Returns: previous state
|
|
*---------------------------------------------------------------------------*/
|
|
BOOL osEnableICache( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osDisableICache
|
|
|
|
Description: disable instruction cache
|
|
|
|
Arguments: None
|
|
|
|
Returns: previous stats
|
|
*---------------------------------------------------------------------------*/
|
|
BOOL osDisableICache( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osRestoreICache
|
|
|
|
Description: set state of instruction cache
|
|
|
|
Arguments: instruction cache state to be set
|
|
|
|
Returns: previous stats
|
|
*---------------------------------------------------------------------------*/
|
|
BOOL osRestoreICache( BOOL enable );
|
|
|
|
|
|
//===========================================================================
|
|
// INSTRUCTION CACHE
|
|
//===========================================================================
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osInvalidateICacheAll
|
|
|
|
Description: invalidate all instruction cache
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osInvalidateICacheAll( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osInvalidateICacheRange
|
|
|
|
Description: invalidate instruction cache in specified range
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osInvalidateICacheRange( void *startAddr, u32 nBytes );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osInvalidateICacheRangeOrAll
|
|
|
|
Description: invalidate instruction cache in specified range or all
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osInvalidateICacheRangeOrAll( void* startAddr, u32 nBytes );
|
|
|
|
#ifdef SDK_ARM9
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osLockdownICacheRange
|
|
|
|
Description: lock specified area to prevent not to release instruction cache
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osLockdownICacheRange( void *startAddr, u32 nBytes );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osUnlockdownICache
|
|
|
|
Description: unlock any instruction cache to enable to release
|
|
|
|
Arguments: num - specify number of datablock to unlock.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osUnlockdownICache( u32 num );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osUnlockdownICacheAll
|
|
|
|
Description: unlock all instruction cache to enable to release
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osUnlockdownICacheAll( void );
|
|
|
|
#else // SDK_ARM11
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osPrefetchICacheRange
|
|
|
|
Description: include specified area to instruction cache in advance
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osPrefetchICacheRange( void *startAddr, u32 nBytes );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osInvalidateInstPrefetchBuffer
|
|
|
|
Description: invalidate instruction prefetch buffer
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osInvalidateInstPrefetchBuffer( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osDoInstMemoryBarrierAll
|
|
|
|
Description: do all Instruction Memory Barrier
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osDoInstMemoryBarrierAll( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osDoInstMemoryBarrierRange
|
|
|
|
Description: do Instruction Memory Barrier in specified range
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osDoInstMemoryBarrierRange( void* startAddr, u32 nBytes );
|
|
|
|
|
|
//===========================================================================
|
|
// BRANCH TARGET ADDRESS CACHE
|
|
//===========================================================================
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osInvalidateBCacheAll
|
|
|
|
Description: invalidate all branch target address cache
|
|
|
|
Arguments: None.
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osInvalidateBCacheAll( void );
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: osInvalidateBCacheRange
|
|
|
|
Description: invalidate branch target address cache in specified range
|
|
|
|
Arguments: startAddr start address
|
|
nBytes size (in byte)
|
|
|
|
Returns: None.
|
|
*---------------------------------------------------------------------------*/
|
|
void osInvalidateBCacheRange( void* startAddr, u32 nBytes );
|
|
|
|
#endif // SDK_ARM11
|
|
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif // BROM_OS_CACHE_H_
|