mirror of
https://github.com/rvtr/twl_wrapsdk.git
synced 2025-10-31 06:11:10 -04:00
fix protection region.
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@46 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
parent
83f32093bc
commit
86a9a4fd0e
@ -428,22 +428,22 @@ static asm void init_cp15(void)
|
|||||||
mcr p15, 0, r0, c7, c10, 4
|
mcr p15, 0, r0, c7, c10, 4
|
||||||
|
|
||||||
/*
|
/*
|
||||||
; Region G: BACK_GROUND: Base = 0x0, Size = 4GB, I:NC NB / D:NC NB, I:NA / D:NA
|
; Region G: BACK_GROUND: Base = 0x0, Size = 4GB, I:NC NB / D:NC NB, I:NA / D:NA
|
||||||
; Region 0: IO_VRAM: Base = 0x04000000, Size = 64MB, I:NC NB / D:NC NB, I:RW / D:RW
|
; Region 0: IO_VRAM: Base = 0x04000000, Size = 64MB, I:NC NB / D:NC NB, I:RW / D:RW
|
||||||
; Region 1Rel: MAIN_MEM: Base = 0x02000000, Size = 16MB*, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
; Region 1Rel: MAIN_MEM+WRAM: Base = 0x02000000, Size = 32MB*, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
||||||
; Region 1Dbg: MAIN_MEM: Base = 0x02000000, Size = 16MB, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
; Region 1Dbg: MAIN_MEM+WRAM: Base = 0x02000000, Size = 32MB, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
||||||
; (* Size will be arranged in OS_InitArena(). )
|
; (* Size will be arranged in OS_InitArena(). )
|
||||||
; Region 2Rel: SOUND_DATA: Base = 0x02380000, Size = 512KB, I:NC NB / D:NC NB, I:NA / D:NA
|
; Region 2Rel: SOUND_DATA: Base = 0x02380000, Size = 512KB, I:NC NB / D:NC NB, I:NA / D:NA
|
||||||
; Region 2D4M: SOUND_DATA: Base = 0x02300000, Size = 1MB, I:NC NB / D:NC NB, I:NA / D:NA
|
; Region 2D4M: SOUND_DATA: Base = 0x02300000, Size = 1MB, I:NC NB / D:NC NB, I:NA / D:NA
|
||||||
; Region 2D8M: SOUND_DATA: Base = 0x02600000, Size = 2MB, I:NC NB / D:NC NB, I:NA / D:NA
|
; Region 2D8M: SOUND_DATA: Base = 0x02600000, Size = 2MB, I:NC NB / D:NC NB, I:NA / D:NA
|
||||||
; Region 3: MAIN_MEM_HI: Base = 0x08000000, Size = 256MB, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
; Region 3: MAIN_MEM_HI: Base = 0x08000000, Size = 256MB, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
||||||
; Region 3: CARTRIDGE: Base = 0x08000000, Size = 128MB, I:NC NB / D:NC NB, I:NA / D:RW
|
; Region 3: CARTRIDGE: Base = 0x08000000, Size = 128MB, I:NC NB / D:NC NB, I:NA / D:RW
|
||||||
; Region 4: DTCM: Base = SOUND_DATA, Size = 16KB, I:NC NB / D:NC NB, I:NA / D:RW
|
; Region 4: DTCM: Base = SOUND_DATA, Size = 16KB, I:NC NB / D:NC NB, I:NA / D:RW
|
||||||
; Region 5: ITCM: Base = 0x01000000, Size = 16MB, I:NC NB / D:NC NB, I:RW / D:RW
|
; Region 5: ITCM: Base = 0x01000000, Size = 16MB, I:NC NB / D:NC NB, I:RW / D:RW
|
||||||
|
|
||||||
; Region 6: BIOS: Base = 0xffff0000, Size = 32KB, I:Cach NB / D:Cach NB, I:RO / D:RO
|
; Region 6: BIOS: Base = 0xffff0000, Size = 32KB, I:Cach NB / D:Cach NB, I:RO / D:RO
|
||||||
; Region 7: SHARE_WORK: Base = 0x027ff000, Size = 4KB, I:NC NB / D:NC NB, I:NA / D:RW
|
; Region 7: SHARE_WORK: Base = 0x027ff000, Size = 4KB, I:NC NB / D:NC NB, I:NA / D:RW
|
||||||
;(Region 7: DBG_RESERVE: Base = 0x02700000, Size = 1MB, I:NC NB / D:NC NB, I:RW / D:RW)
|
;(Region 7: DBG_RESERVE: Base = 0x02700000, Size = 1MB, I:NC NB / D:NC NB, I:RW / D:RW)
|
||||||
*/
|
*/
|
||||||
#define SET_PROTECTION_A( id, adr, siz ) ldr r0, =(adr|HW_C6_PR_##siz|HW_C6_PR_ENABLE)
|
#define SET_PROTECTION_A( id, adr, siz ) ldr r0, =(adr|HW_C6_PR_##siz|HW_C6_PR_ENABLE)
|
||||||
#define SET_PROTECTION_B( id, adr, siz ) mcr p15, 0, r0, c6, id, 0
|
#define SET_PROTECTION_B( id, adr, siz ) mcr p15, 0, r0, c6, id, 0
|
||||||
@ -462,8 +462,8 @@ static asm void init_cp15(void)
|
|||||||
SET_PROTECTION_B( c0, HW_IOREG, 64MB )
|
SET_PROTECTION_B( c0, HW_IOREG, 64MB )
|
||||||
|
|
||||||
//---- メインメモリ
|
//---- メインメモリ
|
||||||
SET_PROTECTION_A( c1, HW_MAIN_MEM_MAIN, 16MB )
|
SET_PROTECTION_A( c1, HW_MAIN_MEM_MAIN, 32MB )
|
||||||
SET_PROTECTION_B( c1, HW_MAIN_MEM_MAIN, 16MB )
|
SET_PROTECTION_B( c1, HW_MAIN_MEM_MAIN, 32MB )
|
||||||
|
|
||||||
//---- サウンドデータ領域
|
//---- サウンドデータ領域
|
||||||
#if HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x1000
|
#if HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x1000
|
||||||
|
|||||||
@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
#include <twl/mi.h>
|
#include <twl/mi.h>
|
||||||
|
|
||||||
static BOOL isArbitrated = FALSE;
|
|
||||||
|
|
||||||
static u32 intervalTable[] =
|
static u32 intervalTable[] =
|
||||||
{
|
{
|
||||||
1, 1, 1, 1,
|
1, 1, 1, 1,
|
||||||
@ -42,8 +40,6 @@ void MIi_SetExDmaArbiter( MIExDmaArbitration arb, MIExDmaYieldCycles yld )
|
|||||||
|
|
||||||
reg_MI_DMAGBL = (u32)(arb | yld);
|
reg_MI_DMAGBL = (u32)(arb | yld);
|
||||||
|
|
||||||
isArbitrated = TRUE;
|
|
||||||
|
|
||||||
(void)OS_RestoreInterrupts(enabled);
|
(void)OS_RestoreInterrupts(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
752
build/libraries/os/common/os_arena.c
Normal file
752
build/libraries/os/common/os_arena.c
Normal file
@ -0,0 +1,752 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: NitroSDK - OS
|
||||||
|
File: os_arena.c
|
||||||
|
|
||||||
|
Copyright 2003-2006 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.
|
||||||
|
|
||||||
|
$Log: os_arena.c,v $
|
||||||
|
Revision 1.44 2006/01/18 05:46:04 okubata_ryoma
|
||||||
|
do-indentの修正
|
||||||
|
|
||||||
|
Revision 1.43 2006/01/18 02:11:30 kitase_hirotake
|
||||||
|
do-indent
|
||||||
|
|
||||||
|
Revision 1.42 2005/10/18 10:42:36 yada
|
||||||
|
modified about getting arena HI of PREV_WRAM in ARM7
|
||||||
|
|
||||||
|
Revision 1.41 2005/09/06 04:57:41 yada
|
||||||
|
fix arena default hi address on DTCM
|
||||||
|
|
||||||
|
Revision 1.40 2005/08/26 11:49:31 yada
|
||||||
|
ARENALO is considered for DTCM, ITCM, MAINEX autoload
|
||||||
|
|
||||||
|
Revision 1.39 2005/05/25 04:03:05 terui
|
||||||
|
MB 子機の場合でもメインメモリを8MBに設定できるように修正
|
||||||
|
|
||||||
|
Revision 1.38 2005/04/14 06:46:13 yasu
|
||||||
|
Multiboot 子機の場合、使用可能メモリを 4MB に制限するようにした
|
||||||
|
|
||||||
|
Revision 1.37 2005/04/13 13:00:10 terui
|
||||||
|
OS_InitArenaEx関数内で、4M設定時にARM7専用リージョンの位置を0x027e0000 から 0x023e0000に変更するように修正。
|
||||||
|
|
||||||
|
Revision 1.36 2005/02/28 09:57:43 seiki_masashi
|
||||||
|
fix a debug message.
|
||||||
|
|
||||||
|
Revision 1.35 2005/02/28 05:26:28 yosizaki
|
||||||
|
do-indent.
|
||||||
|
|
||||||
|
Revision 1.34 2004/12/21 11:24:27 yada
|
||||||
|
add OS_EnableMainExArena() / OS_DisableMainExArena()
|
||||||
|
|
||||||
|
Revision 1.33 2004/11/02 11:58:22 yada
|
||||||
|
fix a little
|
||||||
|
|
||||||
|
Revision 1.32 2004/10/04 06:16:53 yada
|
||||||
|
protection region for MainRAM is set to 4MB if specified
|
||||||
|
|
||||||
|
Revision 1.31 2004/08/31 01:02:51 yada
|
||||||
|
add functions to get/set initial setting in specified arena
|
||||||
|
|
||||||
|
Revision 1.30 2004/08/18 02:45:44 yada
|
||||||
|
change sub-processor private arena of mainRAM
|
||||||
|
|
||||||
|
Revision 1.29 2004/07/29 07:25:56 yada
|
||||||
|
remove OS_Printf() in OS_GetArenaLo()
|
||||||
|
|
||||||
|
Revision 1.28 2004/07/20 11:41:23 yada
|
||||||
|
in case sysStack=0 (means maximum size), DTCM arena lo
|
||||||
|
was set to HW_DTCM. fix to SDK_AUTOLOAD_DTCM_BSS_END.
|
||||||
|
|
||||||
|
Revision 1.27 2004/07/12 12:25:21 yasu
|
||||||
|
Fix arena setting
|
||||||
|
|
||||||
|
Revision 1.26 2004/07/10 04:07:56 yasu
|
||||||
|
Add short comment
|
||||||
|
|
||||||
|
Revision 1.25 2004/07/08 02:22:21 yada
|
||||||
|
add OS_InitArenaEx(), setting for extended mainRam arena
|
||||||
|
|
||||||
|
Revision 1.24 2004/07/01 09:40:31 yasu
|
||||||
|
add TARGET_ROM
|
||||||
|
|
||||||
|
Revision 1.23 2004/05/27 04:40:25 yada
|
||||||
|
change setting arena rule for ARM7
|
||||||
|
|
||||||
|
Revision 1.22 2004/04/14 00:07:33 yada
|
||||||
|
add checkcode in allocation memory from arena
|
||||||
|
|
||||||
|
Revision 1.21 2004/02/20 12:23:47 yada
|
||||||
|
初期化バグ修正
|
||||||
|
|
||||||
|
Revision 1.20 2004/02/19 08:41:41 yada
|
||||||
|
ARM7 と ARM9 の初期化を分けた
|
||||||
|
|
||||||
|
Revision 1.19 2004/02/16 09:39:46 yada
|
||||||
|
Sysスタック修正
|
||||||
|
|
||||||
|
Revision 1.18 2004/02/14 08:23:12 yasu
|
||||||
|
comment out TCM arena setting code on ARM7 due to pass nightly build
|
||||||
|
|
||||||
|
Revision 1.17 2004/02/14 07:05:47 yasu
|
||||||
|
fix indent level
|
||||||
|
|
||||||
|
Revision 1.16 2004/02/13 10:38:26 yada
|
||||||
|
ARENAを6個から9個に
|
||||||
|
|
||||||
|
Revision 1.15 2004/02/13 04:05:36 yada
|
||||||
|
ARM9とAMR7 の場合わけ考慮
|
||||||
|
|
||||||
|
Revision 1.14 2004/02/05 07:09:02 yasu
|
||||||
|
change SDK prefix iris -> nitro
|
||||||
|
|
||||||
|
Revision 1.13 2004/01/18 01:25:40 yada
|
||||||
|
インデント等の整形のみ
|
||||||
|
|
||||||
|
Revision 1.12 2004/01/16 11:47:20 yada
|
||||||
|
arena情報の位置を動かしたことによる修正
|
||||||
|
|
||||||
|
Revision 1.11 2004/01/16 08:10:03 yada
|
||||||
|
DTCMアリーナ設定のASSERT修正
|
||||||
|
|
||||||
|
Revision 1.10 2004/01/16 07:25:26 yada
|
||||||
|
arena の initialized フラグ位置修正
|
||||||
|
|
||||||
|
Revision 1.9 2004/01/16 04:07:39 yada
|
||||||
|
idle Thread のスタックを lcf定義から取るように変更
|
||||||
|
|
||||||
|
Revision 1.8 2004/01/15 12:13:55 yada
|
||||||
|
SystemWork にアリーナ構造体を取るようにした
|
||||||
|
|
||||||
|
Revision 1.7 2004/01/15 10:07:25 yasu
|
||||||
|
Use SDK_MAIN_ARENA_LO from LCF to resolve arena region
|
||||||
|
|
||||||
|
Revision 1.6 2004/01/07 02:52:04 yada
|
||||||
|
小変更
|
||||||
|
|
||||||
|
Revision 1.5 2004/01/07 01:42:40 yada
|
||||||
|
arena初期化部分の変更
|
||||||
|
|
||||||
|
Revision 1.4 2004/01/05 04:28:24 yada
|
||||||
|
各アリーナの仮初期化を入れた
|
||||||
|
|
||||||
|
Revision 1.3 2003/12/26 08:21:13 yada
|
||||||
|
Assert 中の不具合修正
|
||||||
|
|
||||||
|
Revision 1.2 2003/12/26 08:11:35 yada
|
||||||
|
IDの型を int -> OSArenaId に
|
||||||
|
|
||||||
|
Revision 1.1 2003/12/26 06:42:33 yada
|
||||||
|
初版
|
||||||
|
|
||||||
|
|
||||||
|
$NoKeywords: $
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#include <nitro.h>
|
||||||
|
|
||||||
|
#define OSi_TRUNC(n, a) (((u32) (n)) & ~((a) - 1))
|
||||||
|
#define OSi_ROUND(n, a) (((u32) (n) + (a) - 1) & ~((a) - 1))
|
||||||
|
|
||||||
|
#define OS_ERR_GETARENAHI_INIT "OS_GetArenaHi: init in advance"
|
||||||
|
#define OS_ERR_GETARENAHI_INVALID "OS_GetArenaHi: invalid arena (hi<lo)"
|
||||||
|
#define OS_ERR_GETARENALO_INIT "OS_GetArenaLo: init in advance"
|
||||||
|
#define OS_ERR_GETARENALO_INVALID "OS_GetArenaLo: invalid arena (hi<lo)"
|
||||||
|
|
||||||
|
#define SDK_ARENAID_ASSERT( id ) SDK_ASSERT( (u32)id < OS_ARENA_MAX )
|
||||||
|
|
||||||
|
|
||||||
|
//---- Arena infomation Address ( allocated in Shared Memory )
|
||||||
|
#define OSi_GetArenaInfo() (*(OSArenaInfo*)HW_ARENA_INFO_BUF)
|
||||||
|
|
||||||
|
|
||||||
|
//---- default Main Arena Address (for arm9)
|
||||||
|
extern void SDK_MAIN_ARENA_LO(void);
|
||||||
|
#define OSi_MAIN_ARENA_LO_DEFAULT ((u32)SDK_MAIN_ARENA_LO) // Defined by LCF
|
||||||
|
#define OSi_MAIN_ARENA_HI_DEFAULT HW_MAIN_MEM_MAIN_END
|
||||||
|
|
||||||
|
//---- default Main Arena Address (for arm7)
|
||||||
|
#ifdef SDK_ARM7
|
||||||
|
extern void SDK_SUBPRIV_ARENA_LO(void);
|
||||||
|
#define OSi_MAIN_SUBPRIV_ARENA_LO_DEFAULT ((u32)SDK_SUBPRIV_ARENA_LO) // Defined by LCF
|
||||||
|
#define OSi_MAIN_SUBPRIV_ARENA_HI_DEFAULT HW_MAIN_MEM_SUB_END
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//---- default Extended Main Arena Address (for arm9)
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
extern void SDK_SECTION_ARENA_EX_START(void);
|
||||||
|
#define OSi_MAINEX_ARENA_LO_DEFAULT ((u32)SDK_SECTION_ARENA_EX_START) // Defined by LCF
|
||||||
|
#define OSi_MAINEX_ARENA_HI_DEFAULT HW_MAIN_MEM_DEBUGGER
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
//---- default DTCM Arena Address (for arm9)
|
||||||
|
extern void SDK_SECTION_ARENA_DTCM_START(void);
|
||||||
|
#define OSi_DTCM_ARENA_LO_DEFAULT ((u32)SDK_SECTION_ARENA_DTCM_START) // Defined by LCF
|
||||||
|
|
||||||
|
//---- default ITCM Arena Address (for arm9)
|
||||||
|
extern void SDK_SECTION_ARENA_ITCM_START(void);
|
||||||
|
#define OSi_ITCM_ARENA_LO_DEFAULT ((u32)SDK_SECTION_ARENA_ITCM_START) // Defined by LCF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//---- default common WorkRAM (for Main-Proc) Arena Address
|
||||||
|
#define OSi_WRAM_MAIN_ARENA_LO_DEFAULT HW_WRAM
|
||||||
|
#define OSi_WRAM_MAIN_ARENA_HI_DEFAULT HW_WRAM
|
||||||
|
|
||||||
|
//---- default common WorkRAM (for Sub-Proc) Arena Address
|
||||||
|
#ifdef SDK_ARM7
|
||||||
|
extern void SDK_WRAM_ARENA_LO(void);
|
||||||
|
#define OSi_WRAM_SUB_ARENA_LO_DEFAULT ((u32)SDK_WRAM_ARENA_LO) // Defined by LCF
|
||||||
|
#define OSi_WRAM_SUB_ARENA_HI_DEFAULT HW_WRAM_END
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//---- default Sub-Proc Private WorkRAM Arena Address (for from ARM9)
|
||||||
|
#ifdef SDK_ARM7
|
||||||
|
#define OSi_WRAM_SUBPRIV_ARENA_LO_DEFAULT HW_PRV_WRAM
|
||||||
|
#define OSi_WRAM_SUBPRIV_ARENA_HI_DEFAULT HW_PRV_WRAM_END
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//---- stack size indication from LCF
|
||||||
|
extern void SDK_SYS_STACKSIZE(void);
|
||||||
|
#define OSi_SYS_STACKSIZE ((int)SDK_SYS_STACKSIZE)
|
||||||
|
extern void SDK_IRQ_STACKSIZE(void);
|
||||||
|
#define OSi_IRQ_STACKSIZE ((int)SDK_IRQ_STACKSIZE)
|
||||||
|
|
||||||
|
static BOOL OSi_Initialized = FALSE;
|
||||||
|
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
#ifdef SDK_4M
|
||||||
|
BOOL OSi_MainExArenaEnabled = FALSE;
|
||||||
|
#else
|
||||||
|
BOOL OSi_MainExArenaEnabled = TRUE;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
// INIT
|
||||||
|
//================================================================================
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_InitArena
|
||||||
|
|
||||||
|
Description: Initialize Arena
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: None.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void OS_InitArena(void)
|
||||||
|
{
|
||||||
|
//---- check if arena initialized
|
||||||
|
if (OSi_Initialized)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
OSi_Initialized = TRUE;
|
||||||
|
|
||||||
|
//---------------- set Arena Lo/Hi addresses
|
||||||
|
//---- MainRam, Main-Processor private
|
||||||
|
OS_InitArenaHiAndLo(OS_ARENA_MAIN);
|
||||||
|
|
||||||
|
//---- Extended MainRam (temporary. set in OS_InitArenaEx later.)
|
||||||
|
OS_SetArenaLo(OS_ARENA_MAINEX, (void *)0);
|
||||||
|
OS_SetArenaHi(OS_ARENA_MAINEX, (void *)0);
|
||||||
|
|
||||||
|
//---- ITCM
|
||||||
|
OS_InitArenaHiAndLo(OS_ARENA_ITCM);
|
||||||
|
|
||||||
|
//---- DTCM
|
||||||
|
OS_InitArenaHiAndLo(OS_ARENA_DTCM);
|
||||||
|
|
||||||
|
//---- set Shared Memory Arena
|
||||||
|
OS_InitArenaHiAndLo(OS_ARENA_SHARED);
|
||||||
|
|
||||||
|
//---- Work RAM, for Main-Processor
|
||||||
|
OS_InitArenaHiAndLo(OS_ARENA_WRAM_MAIN);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SDK_ARM7
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_InitArena
|
||||||
|
|
||||||
|
Description: Initialize WRAM_SUBPRIV_ARENA
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: None.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void OS_InitArena(void)
|
||||||
|
{
|
||||||
|
//---- check if arena initialized
|
||||||
|
if (OSi_Initialized)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
OSi_Initialized = TRUE;
|
||||||
|
|
||||||
|
//---------------- set Arena Lo/Hi addresses
|
||||||
|
//---- MainRam, Sub-Processor private
|
||||||
|
OS_InitArenaHiAndLo(OS_ARENA_MAIN_SUBPRIV);
|
||||||
|
|
||||||
|
//---- Work RAM, for Sub-Processor
|
||||||
|
OS_InitArenaHiAndLo(OS_ARENA_WRAM_SUB);
|
||||||
|
|
||||||
|
//---- Sub-Processor private Work RAM
|
||||||
|
OS_InitArenaHiAndLo(OS_ARENA_WRAM_SUBPRIV);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_InitArenaEx
|
||||||
|
|
||||||
|
Description: Initialize extended MainRam Arena
|
||||||
|
OS_InitArena() must be called before
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: None.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void OS_InitArenaEx(void)
|
||||||
|
{
|
||||||
|
OS_InitArenaHiAndLo(OS_ARENA_MAINEX);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MB 子機の場合でも、デバッグ目的でメインメモリを 8M に拡張して
|
||||||
|
* メインメモリ上の拡張アリーナを使用できるように修正。
|
||||||
|
* MB 子機において、オートロードが実行される前の段階で
|
||||||
|
* 重要な情報が格納されている 0x023fe000周辺のメモリ領域から本当に必要な
|
||||||
|
* 情報を抽出しつつ 0x027ffa80 周辺に退避するという対策が入ったため
|
||||||
|
* 0x023fe000 周辺を保護する必要がなくなった事を受けての修正です。
|
||||||
|
*/
|
||||||
|
if (!OSi_MainExArenaEnabled ||
|
||||||
|
((OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB))
|
||||||
|
{
|
||||||
|
//---- no Extended MainRam arena
|
||||||
|
// OS_SetProtectionRegion(1, HW_MAIN_MEM_MAIN, 4MB);
|
||||||
|
//---- Move exclusive area for ARM7
|
||||||
|
#if HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x1000
|
||||||
|
OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 4KB);
|
||||||
|
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x2000
|
||||||
|
OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 8KB);
|
||||||
|
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x4000
|
||||||
|
OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 16KB);
|
||||||
|
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x8000
|
||||||
|
OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 32KB);
|
||||||
|
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x10000
|
||||||
|
OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 64KB);
|
||||||
|
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x20000
|
||||||
|
OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 128KB);
|
||||||
|
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x40000
|
||||||
|
OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 256KB);
|
||||||
|
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x80000
|
||||||
|
OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 512KB);
|
||||||
|
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x100000
|
||||||
|
OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 1MB);
|
||||||
|
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x200000
|
||||||
|
OS_SetProtectionRegion(2, HW_MAIN_MEM_MAIN_END, 2MB);
|
||||||
|
#else
|
||||||
|
#pragma message(ERROR: Size unmatch HW_MAIN_MEM_MAIN_END)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // ifdef SDK_ARM9
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
// GET ARENA INFO
|
||||||
|
//================================================================================
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_GetArenaInfo
|
||||||
|
|
||||||
|
Description: Get the pointer of Arena structure
|
||||||
|
|
||||||
|
Arguments: None.
|
||||||
|
|
||||||
|
Returns: the pointer of Arena structure
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void *OS_GetArenaInfo(void)
|
||||||
|
{
|
||||||
|
return (void *)&OSi_GetArenaInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_GetArenaHi
|
||||||
|
|
||||||
|
Description: Get the high boundary of the arena
|
||||||
|
|
||||||
|
Arguments: id : arena ID
|
||||||
|
|
||||||
|
Returns: the high boundary of the arena
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void *OS_GetArenaHi(OSArenaId id)
|
||||||
|
{
|
||||||
|
SDK_ASSERT(OSi_Initialized);
|
||||||
|
SDK_ARENAID_ASSERT(id);
|
||||||
|
SDK_ASSERTMSG((u32)OSi_GetArenaInfo().lo[id] != 0xffffffff, OS_ERR_GETARENALO_INIT);
|
||||||
|
SDK_ASSERTMSG((u32)OSi_GetArenaInfo().lo[id] <= (u32)OSi_GetArenaInfo().hi[id],
|
||||||
|
OS_ERR_GETARENALO_INVALID);
|
||||||
|
|
||||||
|
return OSi_GetArenaInfo().hi[id];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_GetArenaLo
|
||||||
|
|
||||||
|
Description: Get the low boundary of the arena
|
||||||
|
|
||||||
|
Arguments: id : arena ID
|
||||||
|
|
||||||
|
Returns: the low boundary of the arena
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void *OS_GetArenaLo(OSArenaId id)
|
||||||
|
{
|
||||||
|
SDK_ASSERT(OSi_Initialized);
|
||||||
|
SDK_ARENAID_ASSERT(id);
|
||||||
|
SDK_ASSERTMSG((u32)OSi_GetArenaInfo().lo[id] != 0xffffffff, OS_ERR_GETARENALO_INIT);
|
||||||
|
SDK_ASSERTMSG((u32)OSi_GetArenaInfo().lo[id] <= (u32)OSi_GetArenaInfo().hi[id],
|
||||||
|
OS_ERR_GETARENALO_INVALID);
|
||||||
|
|
||||||
|
return OSi_GetArenaInfo().lo[id];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_GetInitArenaHi
|
||||||
|
|
||||||
|
Description: Get the initial high boundary of the arena
|
||||||
|
|
||||||
|
Arguments: id : arena ID
|
||||||
|
|
||||||
|
Returns: the initial high boundary of the arena
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void *OS_GetInitArenaHi(OSArenaId id)
|
||||||
|
{
|
||||||
|
SDK_ASSERT(OSi_Initialized);
|
||||||
|
SDK_ARENAID_ASSERT(id);
|
||||||
|
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
case OS_ARENA_MAIN:
|
||||||
|
return (void *)OSi_MAIN_ARENA_HI_DEFAULT;
|
||||||
|
case OS_ARENA_MAINEX:
|
||||||
|
if (!OSi_MainExArenaEnabled ||
|
||||||
|
((OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB))
|
||||||
|
{
|
||||||
|
return (void *)0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (void *)OSi_MAINEX_ARENA_HI_DEFAULT;
|
||||||
|
}
|
||||||
|
case OS_ARENA_ITCM:
|
||||||
|
return (void *)HW_ITCM_ARENA_HI_DEFAULT;
|
||||||
|
case OS_ARENA_DTCM:
|
||||||
|
{
|
||||||
|
u32 irqStackLo;
|
||||||
|
u32 sysStackLo;
|
||||||
|
|
||||||
|
irqStackLo = (u32)HW_DTCM_IRQ_STACK_END - OSi_IRQ_STACKSIZE;
|
||||||
|
|
||||||
|
if (OSi_SYS_STACKSIZE == 0) // maximum SysStack in DTCM
|
||||||
|
{
|
||||||
|
sysStackLo = HW_DTCM;
|
||||||
|
if (sysStackLo < OSi_DTCM_ARENA_LO_DEFAULT)
|
||||||
|
{
|
||||||
|
sysStackLo = OSi_DTCM_ARENA_LO_DEFAULT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (OSi_SYS_STACKSIZE < 0)
|
||||||
|
{
|
||||||
|
sysStackLo = OSi_DTCM_ARENA_LO_DEFAULT - OSi_SYS_STACKSIZE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sysStackLo = irqStackLo - OSi_SYS_STACKSIZE;
|
||||||
|
}
|
||||||
|
SDK_ASSERT((u32)OSi_DTCM_ARENA_LO_DEFAULT <= sysStackLo && sysStackLo < irqStackLo);
|
||||||
|
return (void *)sysStackLo;
|
||||||
|
}
|
||||||
|
case OS_ARENA_SHARED:
|
||||||
|
return (void *)HW_SHARED_ARENA_HI_DEFAULT;
|
||||||
|
case OS_ARENA_WRAM_MAIN:
|
||||||
|
return (void *)(void *)OSi_WRAM_MAIN_ARENA_HI_DEFAULT;
|
||||||
|
#else
|
||||||
|
case OS_ARENA_MAIN_SUBPRIV:
|
||||||
|
return (void *)OSi_MAIN_SUBPRIV_ARENA_HI_DEFAULT;
|
||||||
|
case OS_ARENA_WRAM_SUB:
|
||||||
|
return (void *)OSi_WRAM_SUB_ARENA_HI_DEFAULT;
|
||||||
|
case OS_ARENA_WRAM_SUBPRIV:
|
||||||
|
{
|
||||||
|
u32 irqStackLo;
|
||||||
|
u32 sysStackLo;
|
||||||
|
|
||||||
|
// ---- Sub-Processor private Work RAM
|
||||||
|
// decide sysStackLo
|
||||||
|
irqStackLo = (u32)HW_PRV_WRAM_IRQ_STACK_END - OSi_IRQ_STACKSIZE;
|
||||||
|
sysStackLo = (u32)HW_PRV_WRAM;
|
||||||
|
|
||||||
|
//---- if program area is larger than the size of common wram
|
||||||
|
if ((u32)SDK_WRAM_ARENA_LO > (u32)HW_PRV_WRAM)
|
||||||
|
{
|
||||||
|
sysStackLo = (u32)SDK_WRAM_ARENA_LO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (OSi_SYS_STACKSIZE == 0) // maximum SysStack in SURPRIV-WRAM
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
else if (OSi_SYS_STACKSIZE < 0)
|
||||||
|
{
|
||||||
|
sysStackLo -= OSi_SYS_STACKSIZE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sysStackLo = irqStackLo - OSi_SYS_STACKSIZE;
|
||||||
|
}
|
||||||
|
SDK_ASSERT((u32)HW_PRV_WRAM <= sysStackLo && sysStackLo < irqStackLo);
|
||||||
|
return (void *)sysStackLo;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
SDK_WARNING(0, "Bad arena id");
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_GetInitArenaLo
|
||||||
|
|
||||||
|
Description: Get the initial low boundary of the arena
|
||||||
|
|
||||||
|
Arguments: id : arena ID
|
||||||
|
|
||||||
|
Returns: the initial low boundary of the arena
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void *OS_GetInitArenaLo(OSArenaId id)
|
||||||
|
{
|
||||||
|
SDK_ASSERT(OSi_Initialized);
|
||||||
|
SDK_ARENAID_ASSERT(id);
|
||||||
|
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
case OS_ARENA_MAIN:
|
||||||
|
return (void *)OSi_MAIN_ARENA_LO_DEFAULT;
|
||||||
|
case OS_ARENA_MAINEX:
|
||||||
|
if (!OSi_MainExArenaEnabled ||
|
||||||
|
((OS_GetConsoleType() & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_4MB))
|
||||||
|
{
|
||||||
|
return (void *)0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (void *)OSi_MAINEX_ARENA_LO_DEFAULT;
|
||||||
|
}
|
||||||
|
case OS_ARENA_ITCM:
|
||||||
|
return (void *)OSi_ITCM_ARENA_LO_DEFAULT;
|
||||||
|
case OS_ARENA_DTCM:
|
||||||
|
return (void *)OSi_DTCM_ARENA_LO_DEFAULT;
|
||||||
|
case OS_ARENA_SHARED:
|
||||||
|
return (void *)HW_SHARED_ARENA_LO_DEFAULT;
|
||||||
|
case OS_ARENA_WRAM_MAIN:
|
||||||
|
return (void *)OSi_WRAM_MAIN_ARENA_LO_DEFAULT;
|
||||||
|
#else
|
||||||
|
case OS_ARENA_MAIN_SUBPRIV:
|
||||||
|
return (void *)OSi_MAIN_SUBPRIV_ARENA_LO_DEFAULT;
|
||||||
|
case OS_ARENA_WRAM_SUB:
|
||||||
|
{
|
||||||
|
u32 wramSubLo = OSi_WRAM_SUB_ARENA_LO_DEFAULT;
|
||||||
|
if ((u32)HW_WRAM_END < (u32)wramSubLo)
|
||||||
|
{
|
||||||
|
wramSubLo = (u32)HW_WRAM_END;
|
||||||
|
}
|
||||||
|
return (void *)wramSubLo;
|
||||||
|
}
|
||||||
|
case OS_ARENA_WRAM_SUBPRIV:
|
||||||
|
{
|
||||||
|
u32 privWramLo = OSi_WRAM_SUBPRIV_ARENA_LO_DEFAULT;
|
||||||
|
if ((u32)SDK_WRAM_ARENA_LO > (u32)privWramLo)
|
||||||
|
{
|
||||||
|
privWramLo = (u32)SDK_WRAM_ARENA_LO;
|
||||||
|
}
|
||||||
|
return (void *)privWramLo;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
SDK_WARNING(0, "Bad arena id");
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
// SET ARENA INFO
|
||||||
|
//================================================================================
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_SetArenaHi
|
||||||
|
|
||||||
|
Description: Set the high boundary of the arena
|
||||||
|
|
||||||
|
Arguments: id : arena ID
|
||||||
|
newHi : New high boundary of the arena.
|
||||||
|
|
||||||
|
Returns: None.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void OS_SetArenaHi(OSArenaId id, void *newHi)
|
||||||
|
{
|
||||||
|
SDK_ASSERT(OSi_Initialized);
|
||||||
|
SDK_ARENAID_ASSERT(id);
|
||||||
|
|
||||||
|
OSi_GetArenaInfo().hi[id] = newHi;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_GetArenaLo
|
||||||
|
|
||||||
|
Description: Set the low boundary of the arena
|
||||||
|
|
||||||
|
Arguments: id : arena ID
|
||||||
|
newLo : New low boundary of the arena.
|
||||||
|
|
||||||
|
Returns: None.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void OS_SetArenaLo(OSArenaId id, void *newLo)
|
||||||
|
{
|
||||||
|
SDK_ASSERT(OSi_Initialized);
|
||||||
|
SDK_ARENAID_ASSERT(id);
|
||||||
|
|
||||||
|
OSi_GetArenaInfo().lo[id] = newLo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
// ALLOC
|
||||||
|
//================================================================================
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_AllocFromArenaLo
|
||||||
|
|
||||||
|
Description: Allocates /size/ bytes from the low boundary of the arena.
|
||||||
|
Some additional memory will also be consumed from arena for
|
||||||
|
the alignment.
|
||||||
|
|
||||||
|
Arguments: id : arena ID
|
||||||
|
size : Size of object to be allocated
|
||||||
|
align : Alignment of object and new arena boundary to
|
||||||
|
be set (must be power of 2).
|
||||||
|
|
||||||
|
Returns: a pointer to the allocated space aligned with /align/ bytes
|
||||||
|
boundaries. The new low boundary of the arena is also
|
||||||
|
aligned with /align/ bytes boundaries.
|
||||||
|
|
||||||
|
NULL if cannot allocate.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void *OS_AllocFromArenaLo(OSArenaId id, u32 size, u32 align)
|
||||||
|
{
|
||||||
|
void *ptr;
|
||||||
|
u8 *arenaLo;
|
||||||
|
|
||||||
|
ptr = OS_GetArenaLo(id);
|
||||||
|
if (!ptr)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
arenaLo = ptr = (void *)OSi_ROUND(ptr, align);
|
||||||
|
arenaLo += size;
|
||||||
|
arenaLo = (u8 *)OSi_ROUND(arenaLo, align);
|
||||||
|
|
||||||
|
if (arenaLo > OS_GetArenaHi(id))
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
OS_SetArenaLo(id, arenaLo);
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_AllocFromArenaHi
|
||||||
|
|
||||||
|
Description: Allocates /size/ bytes from the high boundary of the arena.
|
||||||
|
Some additional memory will also be consumed from arena for
|
||||||
|
the alignment.
|
||||||
|
|
||||||
|
Arguments: id : arena ID
|
||||||
|
size : Size of object to be allocated
|
||||||
|
align : Alignment of object and new arena boundary to
|
||||||
|
be set (must be power of 2).
|
||||||
|
|
||||||
|
Returns: a pointer to the allocated space aligned with /align/ bytes
|
||||||
|
boundaries. The new high boundary of the arena is also
|
||||||
|
aligned with /align/ bytes boundaries.
|
||||||
|
|
||||||
|
NULL if cannot allocate.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void *OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align)
|
||||||
|
{
|
||||||
|
void *ptr;
|
||||||
|
u8 *arenaHi;
|
||||||
|
|
||||||
|
arenaHi = OS_GetArenaHi(id);
|
||||||
|
if (!arenaHi)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
arenaHi = (u8 *)OSi_TRUNC(arenaHi, align);
|
||||||
|
arenaHi -= size;
|
||||||
|
arenaHi = ptr = (void *)OSi_TRUNC(arenaHi, align);
|
||||||
|
|
||||||
|
if (arenaHi < OS_GetArenaLo(id))
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
OS_SetArenaHi(id, arenaHi);
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_EnableMainExArena
|
||||||
|
|
||||||
|
Description: Set extended main memory arena enable.
|
||||||
|
This function should be called before OS_Init().
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void OS_EnableMainExArena(void)
|
||||||
|
{
|
||||||
|
SDK_ASSERT(!OSi_Initialized);
|
||||||
|
|
||||||
|
OSi_MainExArenaEnabled = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: OS_DisableMainExArena
|
||||||
|
|
||||||
|
Description: Set extended main memory arena disable.
|
||||||
|
This function should be called before OS_Init().
|
||||||
|
|
||||||
|
Arguments: None
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
void OS_DisableMainExArena(void)
|
||||||
|
{
|
||||||
|
SDK_ASSERT(!OSi_Initialized);
|
||||||
|
|
||||||
|
OSi_MainExArenaEnabled = FALSE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@ -16,7 +16,7 @@
|
|||||||
#ifndef TWL_MI_EXDMA_H_
|
#ifndef TWL_MI_EXDMA_H_
|
||||||
#define TWL_MI_EXDMA_H_
|
#define TWL_MI_EXDMA_H_
|
||||||
|
|
||||||
#include <nitro/misc.h>
|
#include <twl/misc.h>
|
||||||
#include <twl/types.h>
|
#include <twl/types.h>
|
||||||
#include <twl/memorymap.h>
|
#include <twl/memorymap.h>
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user