gcdライブラリの追加。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@46 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2007-10-15 08:55:00 +00:00
parent c3871ba1fa
commit c829fd9562
22 changed files with 4597 additions and 289 deletions

View File

@ -23,6 +23,7 @@ include $(TWLFIRM_ROOT)/build/buildtools/commondefs
SUBDIRS = \
os \
gcd \
mi \
init \
pxi \
@ -31,7 +32,6 @@ SUBDIRS = \
pm \
# syscall \
# nvram \
# gcd \
# acsign \
# acsign_ecc \
# devices \

View File

@ -0,0 +1,60 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlIPL
# File: Makefile
#
# Copyright 2007 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:: 2007-10-03#$
# $Rev: 1319 $
# $Author: kitase_hirotake $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
FIRM_CODEGEN_ALL ?= True
FIRM_PROC = ARM7
SRCDIR = . ../common
SRCS = \
gcd.c \
gcd_init.c \
blowfish.c \
ds_blowfish.c \
ds_blowfish_table.c \
gcdfirm_blowfish_table.c \
TARGET_LIB = libgcd_sp$(FIRM_LIBSUFFIX).a
INCDIR = ../include
#----------------------------------------------------------------------------
# DEBUG版ビルドの場合、RELEASE版でビルドして
# DEBUG版のライブラリを装います。
ifdef NITRO_DEBUG
NITRO_BUILD_TYPE = RELEASE
endif
include $(TWLFIRM_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(FIRM_INSTALL_LIBDIR)
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLFIRM_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,65 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlIPL
# File: Makefile
#
# Copyright 2007 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:: 2007-10-03#$
# $Rev: 1319 $
# $Author: kitase_hirotake $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
FIRM_CODEGEN_ALL ?= True
SRCDIR = . ../common
SRCS = \
gcd.c \
gcd_init.c \
blowfish.c \
ds_blowfish.c \
ds_blowfish_table.c \
gcdfirm_blowfish_table.c \
TARGET_LIB = libgcd$(FIRM_LIBSUFFIX).a
INCDIR = ../include
#----------------------------------------------------------------------------
# DEBUG版ビルドの場合、RELEASE版でビルドして
# DEBUG版のライブラリを装います。
ifdef NITRO_DEBUG
NITRO_BUILD_TYPE = RELEASE
endif
include $(TWLFIRM_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(FIRM_INSTALL_LIBDIR)
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLFIRM_ROOT)/build/buildtools/modulerules
LDEPENDS_OBJ := $(MAKEFIRM_RSA_PUBKEY) \
gcd_acsign.c : $(LDEPENDS_OBJ)
touch gcd_acsign.c
#===== End of Makefile =====

View File

@ -0,0 +1,34 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlFirm - libraries - init
# File: Makefile
#
# Copyright 2007 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: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLFIRM_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = ARM9
#ifdef TWL_WITH_ARM7
SUBDIRS += ARM7
#endif
#----------------------------------------------------------------------------
include $(TWLFIRM_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,149 @@
/*---------------------------------------------------------------------------*
Project: TwlBrom - libraries - GCD
File: blowfish.c
Copyright 2007 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: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <firm/gcd/blowfish.h>
#define MAXKEYBYTES 56 /* 448 bits */
#define N 16
static u32 F(const BLOWFISH_CTX *ctx, u32 x);
void InitBlowfish(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen)
{
int i, j, k;
u32 data, datal, datar;
j = 0;
for (i = 0; i < N + 2; ++i) {
data = 0x00000000;
for (k = 0; k < 4; ++k) {
data = (data << 8) | key[j];
j = j + 1;
if (j >= keyLen)
j = 0;
}
ctx->P[i] = ctx->P[i] ^ data;
}
datal = 0x00000000;
datar = 0x00000000;
for (i = 0; i < N + 2; i += 2) {
EncryptByBlowfish(ctx, &datal, &datar);
ctx->P[i] = datal;
ctx->P[i + 1] = datar;
}
for (i = 0; i < 4; ++i) {
for (j = 0; j < 256; j += 2) {
EncryptByBlowfish(ctx, &datal, &datar);
ctx->S[i][j] = datal;
ctx->S[i][j + 1] = datar;
}
}
}
void EncryptByBlowfish(const BLOWFISH_CTX *ctx, u32 *xl, u32 *xr)
{
u32 Xl;
u32 Xr;
u32 temp;
int i;
Xl = *xl;
Xr = *xr;
for (i = 0; i < N; ++i) {
Xl = Xl ^ ctx->P[i];
Xr = F(ctx, Xl) ^ Xr;
temp = Xl;
Xl = Xr;
Xr = temp;
}
temp = Xl;
Xl = Xr;
Xr = temp;
Xr = Xr ^ ctx->P[N];
Xl = Xl ^ ctx->P[N + 1];
*xl = Xl;
*xr = Xr;
}
void DecryptByBlowfish(const BLOWFISH_CTX *ctx, u32 *xl, u32 *xr)
{
u32 Xl;
u32 Xr;
u32 temp;
int i;
Xl = *xl;
Xr = *xr;
for (i = N + 1; i > 1; --i) {
Xl = Xl ^ ctx->P[i];
Xr = F(ctx, Xl) ^ Xr;
/* Exchange Xl and Xr */
temp = Xl;
Xl = Xr;
Xr = temp;
}
/* Exchange Xl and Xr */
temp = Xl;
Xl = Xr;
Xr = temp;
Xr = Xr ^ ctx->P[1];
Xl = Xl ^ ctx->P[0];
*xl = Xl;
*xr = Xr;
}
static u32 F(const BLOWFISH_CTX *ctx, u32 x) {
u32 a, b, c, d;
u32 y;
d = x & 0x00FF;
x >>= 8;
c = x & 0x00FF;
x >>= 8;
b = x & 0x00FF;
x >>= 8;
a = x & 0x00FF;
y = ctx->S[0][a] + ctx->S[1][b];
y = y ^ ctx->S[2][c];
y = y + ctx->S[3][d];
return y;
}

View File

@ -0,0 +1,186 @@
/*---------------------------------------------------------------------------*
Project: TwlBrom - libraries - GCD
File: ds_blowfish.c
Copyright 2007 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: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <firm/gcd.h>
#include <firm/gcd/blowfish.h>
#ifdef PRINT_DEBUG
#define DBG_PRINTF vlink_dos_printf
#define DBG_CHAR vlink_dos_put_console
#else
#define DBG_PRINTF( ... ) ((void)0)
#define DBG_CHAR( c ) ((void)0)
#endif
static void my_memcopy(void *src, void *dst, int size);
// DS
static char *normal_mode_key ATTRIBUTE_ALIGN(4) = "NmMdOnly";
static char *png_off_key ATTRIBUTE_ALIGN(4) = "enPngOFF";
static char *encrypt_object_key ATTRIBUTE_ALIGN(4) = "encryObj";
extern GCDSharedWork GCDi_SharedWork[2];
extern GCDSecureWork GCDi_SecureWork[2];
static void GCDi_InitBlowfishKeyAndTableDS(BLOWFISH_CTX *ctx, u32 *keyBufp, s32 keyLen)
{
EncryptByBlowfish(ctx, &(keyBufp)[2], &(keyBufp)[1]);
EncryptByBlowfish(ctx, &(keyBufp)[1], &(keyBufp)[0]);
InitBlowfish(ctx, (u8 *)keyBufp, keyLen);
}
static void GCDi_MakeBlowfishTableDS(GCDSlot slot, BLOWFISH_CTX *tableBufp, const u32 *keyp, u32 *keyBufp, s32 keyLen)
{
const BLOWFISH_CTX *blowfishInitTablep = &GCDi_BlowfishInitTableDS;
GCDRomHeader *rh = GCDi_GetRomHeaderAddr( slot );
GCDSecureWork* sec = &GCDi_SecureWork[slot];
u32 *blowfishedKeyp;
MI_CpuCopy32((void *)blowfishInitTablep, (void *)tableBufp, sizeof(BLOWFISH_CTX));
keyBufp[0] = *keyp;
keyBufp[1] = (*keyp >> 1);
keyBufp[2] = (*keyp << 1);
GCDi_InitBlowfishKeyAndTableDS(tableBufp, keyBufp, keyLen);
*(u64 *)sec->cardNormalModeKey = *(u64 *)rh->l.romNormalModeKey;
blowfishedKeyp = sec->cardNormalModeKey;
DecryptByBlowfish(tableBufp, &(blowfishedKeyp)[1], &(blowfishedKeyp)[0]);
if (keyLen > 8) {
sec->isGenUnScrambleKey = 1;
}
GCDi_InitBlowfishKeyAndTableDS(tableBufp, keyBufp, keyLen);
}
void GCDi_InitCardOpBlowfishDS( GCDSlot slot )
{
GCDRomHeader *rh = GCDi_GetRomHeaderAddr( slot );
GCDSecureWork* sec = &GCDi_SecureWork[slot];
GCDi_MakeBlowfishTableDS(slot, &sec->blowfishCardTable, &rh->l.initialCode, sec->cardKeyBuf, 8);
}
static void GCDi_ChangeObjectTableDS(GCDSlot slot, s32 keyLen)
{
GCDSecureWork* sec = &GCDi_SecureWork[slot];
BLOWFISH_CTX *tableBufp = &sec->blowfishCardTable;
u32 *keyBufp = sec->cardKeyBuf;
keyBufp[1] = (keyBufp[1] << 1);
keyBufp[2] = (keyBufp[2] >> 1);
GCDi_InitBlowfishKeyAndTableDS(tableBufp, keyBufp, keyLen);
}
#define UNDEF_CODE 0xe7ffdeff
#define ENCRYPT_DEF_SIZE 0x800
/* あとで名前変える */
#define ENC_DESTINATION_BUF_SIZE 0x4000
static u32 encDestBuf[ENC_DESTINATION_BUF_SIZE/sizeof(u32)];
void GCDi_DecryptObjectFileDS( GCDSlot slot )
{
GCDRomHeader *rh = GCDi_GetRomHeaderAddr( slot );
GCDSecureWork* sec = &GCDi_SecureWork[slot];
GCDSharedWork* sh = &GCDi_SharedWork[slot];
BLOWFISH_CTX *tableBufp = &sec->blowfishCardTable;
u32 *encBufp = (u32 *)&sec->blowfishFlashTable;
u32 *encDestp = (u32 *)rh->l.arm9.ramAddr;
s32 size = sec->secureSize;
s32 restSize;
BOOL exist = TRUE;
int i;
sec->enableReadSecure = 1; // SECURE領域リード・イネーブル
encDestp = GCDi_SecureAreaBuf[slot];
encBufp = encDestBuf;
if (size > ENCRYPT_DEF_SIZE) {
size = ENCRYPT_DEF_SIZE;
}
restSize = size;
if (sec->enableReadSecure) {
MI_CpuCopy32(encDestp, encBufp, (u32)size);
DBG_PRINTF("%s %d\n",__FUNCTION__,__LINE__);
DecryptByBlowfish(tableBufp, &(encBufp)[1], &(encBufp)[0]);
}
GCDi_ChangeObjectTableDS( slot, 8 );
if (sec->enableReadSecure) {
DecryptByBlowfish(tableBufp, &(encBufp)[1], &(encBufp)[0]);
DBG_PRINTF("%s %d\n",__FUNCTION__,__LINE__);
#if 1
for ( i=0; i<8; i++ )
{
if ( encrypt_object_key[i] != ((char*)encBufp)[i] )
{
exist = FALSE;
break;
}
}
// 暗号化オブジェクト有効時
if ( exist )
{
#else
if ((encBufp[0] == encrypt_object_key[0]) // 暗号化オブジェクト有効時
&& (encBufp[1] == encrypt_object_key[1])) {
#endif
u32 *bufp = encBufp;
bufp[0] = UNDEF_CODE;
bufp[1] = UNDEF_CODE;
while ((restSize -= 8) > 0) {
bufp += 2; // 復号処理
DecryptByBlowfish(tableBufp, &(bufp)[1], &(bufp)[0]);
}
DBG_PRINTF("SUCCESS %s %d\n",__FUNCTION__,__LINE__);
}
else {
DBG_PRINTF("ERROR %s %d\n",__FUNCTION__,__LINE__);
// CpuClearFast32(UNDEF_CODE, encBufp, size); // 未定義コードでクリア
sh->disableEncryptedCardData = 1; // 暗号化オブジェクト無効 通知
}
MI_CpuCopy32(encBufp, encDestp, (u32)size);
DBG_PRINTF("%s %d\n",__FUNCTION__,__LINE__);
}
}
/***************************************************
utility functions
***************************************************/
static void my_memcopy(void *src, void *dst, int size)
{
u8 *s,*d;
int i;
s = (u8 *)src;
d = (u8 *)dst;
for( i = 0 ; i < size ; i++ ) {
*d++ = *s++;
}
}

View File

@ -0,0 +1,286 @@
/*---------------------------------------------------------------------------*
Project: TwlBrom - libraries - GCD
File: ds_blowfish_table.c
Copyright 2007 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: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <firm/gcd/blowfish.h>
const BLOWFISH_CTX GCDi_BlowfishInitTableDS = {
0x5f20d599, 0xb9f54457, 0xd9a4196e, 0x945a6a9e,
0xebf1aed8, 0x3ae27541, 0x32d08293, 0xd531ee33,
0x9a6157cc, 0x1ba20637, 0xf5723979, 0xbef6ae55,
0xfb691b5f, 0xe9f19de5, 0xa1d92cce, 0xe605325e,
0xcffed3fe, 0x0d0462d4 ,
0xb7ecf58b, 0xbb79602b, 0x0d319512, 0x2bda3f6e,
0xf1f08488, 0x257e123d, 0xbbf12245, 0x061a0624,
0x28dfad11, 0x3481648b, 0x2933eb2b, 0xbdf2aa99,
0x9d95149c, 0x8cf5f79f, 0x29a19772, 0xcf5fd19d,
0x1a074d66, 0x4b4ad3de, 0xa3a7c985, 0x3a059517,
0xbf0a493d, 0xa28b890a, 0xdd49824a, 0x0bf19027,
0x6a1cebe9, 0x05457683, 0x617081ba, 0xde4b3f17,
0x39abcfae, 0x563af257, 0x8aad1148, 0x3f45e140,
0x54029bfa, 0xfb93a6ca, 0x6ffe4def, 0x9c87d8a3,
0x48d5ba08, 0xfd2d8d6a, 0x74f8156e, 0x8b52bebd,
0x9e8a2218, 0x073774fb, 0x4a6c361b, 0x6242ba19,
0x109179b9, 0x9665677b, 0xe82302fe, 0x778c99ee,
0x64865c3e, 0x86786d4d, 0xe2654fa5, 0x5adfb21e,
0x087ed00a, 0xac71b014, 0x1c83dbbd, 0x62a1d7b9,
0x7c63c6cd, 0xe6c36952, 0x12ce75bf, 0x04215d44,
0x3cd3fbfa, 0xd4631138, 0x49418595, 0x08f20946,
0x1fdc1143, 0x6d15c076, 0x70633c1f, 0x6c8087ea,
0x8b63bdc3, 0x372137c2, 0x2309eedc, 0x4d6a372e,
0x50f79073, 0x921cac30, 0x91231004, 0xaa07d24f,
0x9a4f3e68, 0x6a6064c9, 0xf32114c8, 0x124122d6,
0xe6cf2444, 0x0ddd568a, 0x85e14d53, 0x5a528c1e,
0xc284199c, 0x6ff15703, 0x58be00e3, 0xd5ed4cf6,
0x1f9c6421, 0x3c0355be, 0xaaffdc4a, 0x5de0dac9,
0xdee6bf5e, 0xf8b1d8f5, 0xb9b336ff, 0xdb956762,
0xed375f31, 0x9967704c, 0x3118b590, 0x99993d6c,
0xd3da42e4, 0xa0134225, 0x6c70d7ae, 0xc7cf55b1,
0x43d546d7, 0x443d1761, 0x8533e928, 0x93a2d0d5,
0x1f1225aa, 0x460bc5fb, 0x567697f5, 0x87bea645,
0xe86b94b1, 0x9933feb1, 0x6c3e1fae, 0x091d7139,
0xe4379000, 0x74753e10, 0x3b838cff, 0xf9b0f1b0,
0x42470501, 0xacd6f195, 0x9ee6387e, 0x3f267495,
0x185068b4, 0xb43043d0, 0x68e34b4c, 0xb64de5bf,
0xa00a8b95, 0x77322574, 0x2cf7a1cf, 0x5a1371d8,
0x51c9eaab, 0xefee0de8, 0x197e93e9, 0x38431ea7,
0xa12c1681, 0xcc73e348, 0xd36c2129, 0xd9a0ce5d,
0xa0437161, 0x64b51315, 0x192acf92, 0xa5b7addc,
0xf865869f, 0xfbe79f1a, 0x13b8fdf7, 0x6fdb276c,
0xf71c35df, 0x9b5b2c8d, 0x6438ab12, 0x31decc06,
0x11754ee8, 0xeafae364, 0xc25434eb, 0xeb343fad,
0x267d2c93, 0xf3569d36, 0xb3f6e15a, 0x9e4a6398,
0x9ae48332, 0x907d6084, 0xee0e132e, 0xa2364b93,
0x3816ec85, 0x020688e8, 0x3aa0f0bf, 0x9a6ad7ed,
0xcf57e173, 0xdcb844f8, 0xd159232e, 0x715295df,
0x4ba06199, 0x786e7fd5, 0x30c5a9ba, 0x328640d3,
0x9c0c329d, 0x2f02b737, 0xa99854ba, 0xc90413c4,
0xe7c8be8d, 0x2e50975d, 0x5922d693, 0x22bc270c,
0x20a7e092, 0x7f6f930f, 0xb5d39f4c, 0x740b2aa6,
0x107d4967, 0xc5d1cb26, 0x8ce77186, 0x5be99ca0,
0x01f61ab2, 0x5e9e8cee, 0xdb1af283, 0x84eae5e6,
0x7cd27659, 0x49a58df6, 0x16c24836, 0xa383bb52,
0x0c07b974, 0x2861ff3b, 0xe4e961e1, 0xaa156eef,
0x5de8ba4e, 0x32bb9605, 0x72fbb056, 0xc80e0f52,
0x76652542, 0xdef2af89, 0x01f02710, 0x97a7744b,
0x5426d507, 0x821f0954, 0x307d860a, 0x26b30e39,
0xbb570b9b, 0xaf310636, 0xd9fc79fd, 0x0c2b1030,
0xd79be1b3, 0xef5fdc7b, 0x4513f8d2, 0xbd75474d,
0x7e3c9646, 0xb53ef375, 0x3b9ac567, 0x6b295bb0,
0xc85b80de, 0x31b10515, 0xdd49ceb6, 0xaeb584ad,
0x3167dc60, 0x4efe3034, 0xa62f80bd, 0x213963bf,
0x7f35d986, 0x05226816, 0x2690e954, 0x516c078c,
0xd75531a4, 0x3ea80709, 0xc166532e, 0xc47bf2f8,
0xf1cf58f2, 0xe7a2c587, 0x87308f27, 0x6264a058,
0x88b91823, 0xc4cefa7c, 0x17adae98, 0xf35b4acc,
0x56d548e9, 0xc8f20dd3, 0xdb8c7392, 0xac562fd7,
0x6992f981, 0xf632c64d, 0x218dc0e6, 0x618076e2,
0x6cdcbc11, 0x6919af93, 0xb9bfd09b, 0x67029f31,
0x83ee51a3, 0x0c7b2206, 0x404249ab, 0x7d01d5b8,
0x55f75ece, 0x99c53953, 0x9f87d846, 0xb464f7ba,
0xa1fa9ae3, 0x1068906d, 0x548aca30, 0xc3609fa7,
0x0d6bf519, 0xe698517a, 0xb4514398, 0x4fe935d6,
0x7b0fdfc3, 0xbd5c2fd6, 0x1961153a, 0xaacb4bf1,
0xc9646ddc, 0x561ec6d3, 0x504c38ef, 0xcc758671,
0xe94e0d0d, 0x5d06f628, 0xd3aa1b70, 0x39a8cf45,
0x2ea695ac, 0xd422e4b4, 0x5f37a874, 0xcc047a48,
0xd8404ca5, 0x0828b428, 0x52721c0d, 0x477df041,
0x4e533a19, 0x6b628458, 0x818ab593, 0xdc0d4e21,
0xc6a23fb4, 0x402bc9fc, 0xe90438da, 0x6b865a5e,
0x8525220c, 0x7c8d1168, 0x55951d92, 0xbb8eab4d,
0xb7e6a6da, 0x5a32b651, 0x05dd4105, 0x50560a2a,
0xcc471791, 0xb57ee6c9, 0x73db4a61, 0x33c85167,
0x746edaf5, 0x37c3542e, 0x08af6d0d, 0x5f8a15e8,
0xcd2159e2, 0x060cdea8, 0x5f6b775a, 0x3e6518db,
0x78de50c8, 0xb382b8e0, 0x32724e5d, 0x34c14f07,
0xb796ba23, 0x28a44e67, 0xeb62341e, 0xe9706a2d,
0x70c4422f, 0x9c315a4e, 0x28475bf9, 0x6f71daaa,
0x78b31f38, 0x1c6b92c4, 0x9a35f69e, 0xbf0e4db7,
0x412918cc, 0x5d354803, 0xc62bd055, 0x605caf29,
0x5e8e6974, 0xbdd47c9b, 0x7d64447b, 0x695d923f,
0x4b001fb6, 0xcf3583d4, 0x174e647e, 0x2ed58dae,
0x4e12289a, 0x08492b2e, 0x46c6ae5c, 0x6141ae85,
0xd2826f1e, 0x1f163751, 0xa459f60b, 0xaf5aca9a,
0x8b33d40d, 0x84f16320, 0xcfcb5c80, 0xd3b9b408,
0x62bd0516, 0x569b3183, 0xba9f9851, 0xb2aa5bb2,
0xb52c6b22, 0x63fa48d4, 0xfa585f2b, 0x0964fa61,
0xb8e038bb, 0xa860929d, 0x0e6f670d, 0x010df537,
0xd477c29f, 0x73f1ecfe, 0x7de03930, 0xe49861f5,
0x0455282c, 0x2fdb5556, 0x58e5ec6b, 0x8064b606,
0x4e1a2a6a, 0xc4d80f5b, 0x19522e0a, 0x30f562d9,
0x7b8cbe48, 0xa29b384f, 0xd3c9afc3, 0x4162c1c7,
0x2161b986, 0x4f996f57, 0x7bcebac1, 0x5e4d3bb5,
0x57448b8a, 0x705f135f, 0x47295b6d, 0xece238dc,
0x12655504, 0x4317e82a, 0x2add8ee1, 0xf794e2b3,
0xe65c6e09, 0x6df88aeb, 0x48544989, 0xbfad2ff5,
0xca4b94ea, 0x828739fc, 0xf2018a5f, 0x71e6f275,
0xde42d8d6, 0x281d2df1, 0xa37e88a6, 0x301d47a0,
0xdf71a3d9, 0x01cb1c49, 0xf2b136f8, 0x5d5822f0,
0xa0bd6b45, 0x4288b2bb, 0xce288cc7, 0x6390e893,
0x897c9008, 0xb77df53c, 0x554f2d04, 0x7efd1651,
0xc1bee879, 0xf8d412f2, 0x230584b4, 0x2bd2cca0,
0xadabe1fd, 0x6c55d10d, 0x4d944123, 0x054f3777,
0x17bf0c28, 0x6c6712b3, 0xf75ac38c, 0x6d2a8441,
0x271294d0, 0x9cedb42c, 0x8247ec4d, 0xb967d597,
0x55c09d1b, 0x8ee57e07, 0x3ee7a8e2, 0x3a0ee412,
0x3455452a, 0x5a2df9a2, 0x7c52ab1b, 0x555f1083,
0x435af1d2, 0xa4a7c62b, 0xe8951589, 0xf89d4bb4,
0x609fe375, 0xe6d65b78, 0x21e6440d, 0x2247bd06,
0xad00a453, 0x8513438d, 0xfcaaf739, 0xed7baf38,
0x542be4fc, 0xfc4c9850, 0xdff78085, 0xe122803c,
0x24deda94, 0x397ab0c6, 0xa10fdc38, 0x6ff9f4a7,
0x8b571863, 0x2e2a4184, 0xd9f253d4, 0xddd00f00,
0xa6196e99, 0x5becd00a, 0xc0ab2458, 0xec6506cb,
0x9438131a, 0x2f03670a, 0x77e3f73f, 0xc6337744,
0xe3d03914, 0x7908a2c0, 0x579940bb, 0x90010b41,
0x48cce1cd, 0xafb3db67, 0x4cf37488, 0xb1728f82,
0xc42923b5, 0xfc196c12, 0x9ca4468e, 0x876525c4,
0x8abe6dd3, 0x38031193, 0xf32b83ed, 0xea93a446,
0x1d85533b, 0x08f1d4ce, 0xfced2783, 0xbc181a9b,
0xdcae8bf9, 0x3850ab24, 0x104b72e9, 0x467b1722,
0x6459ab5d, 0xf8ae40f3, 0xf9c8e5bb, 0x554e0326,
0xfeebeb7d, 0xe0e639f7, 0x2ebe110a, 0xed98ff28,
0x5642c9c0, 0x00fdc342, 0xa287aff6, 0x323f015b,
0x9a954792, 0x3d32a572, 0x9bd06bae, 0x9249d207,
0xfa4a78e3, 0xf27d06a1, 0x7477cf41, 0x0cb21404,
0x16648486, 0xa151bbd5, 0xd1f16fe5, 0x5ff7e2f2,
0xb84d2058, 0xddcfc757, 0x76bed8c5, 0x7e5ff63d,
0x888b2ae7, 0x3f381b24, 0x7723410e, 0xd44bf0f5,
0xa4fa1f0c, 0xcf5f800b, 0xdae0f645, 0x5359342f,
0x523c20fb, 0xb5355e62, 0x608bfe62, 0x5a86e363,
0xd16e1a15, 0x32bc4547, 0x3867ebb4, 0x336ee4ab,
0xa3edb53a, 0x4ee067ad, 0x62ee9541, 0x1d267162,
0x3062ef31, 0xac82d7af, 0x0405dcc2, 0xbf0797f5,
0x07235911, 0xe80264c0, 0xaf3ee597, 0xa659ac18,
0x90334a8b, 0x9c7c6e1c, 0x3c4c7e20, 0xbb64613e,
0x7e7c6bc5, 0x4cc59f3e, 0xf573ea9f, 0x4cc089d7,
0x2df4fbf4, 0x511b14ec, 0xc812c1d5, 0x4a0bdf10,
0x93bc9c8b, 0x3e3e6a45, 0xbaa9c17d, 0x07b4c1cd,
0x8668e1e4, 0x386db243, 0x5c0cfbf3, 0xde713766,
0xa06eef56, 0xa7654010, 0xbed0f798, 0x3637c80e,
0x7cca10ec, 0x1e84ab9c, 0x02761705, 0xaa524f1c,
0xa0c6c15f, 0x04d8b956, 0xa74d4484, 0x60ded859,
0x050e38e6, 0x3be1038f, 0x3304816d, 0xce0b306f,
0x33210569, 0x89bb26fb, 0x87aeb67d, 0xe007517e,
0x0a96f7ac, 0x5cc4f96b, 0x4744e41d, 0xe3fa5eb8,
0x42558478, 0xf75e484b, 0x8635477d, 0x05432b1d,
0xb88aec03, 0x763c061e, 0x431a480c, 0xed8ab7a7,
0x43c6131e, 0xdbef10ee, 0x833cfbec, 0xef4495b2,
0x4e5154d8, 0x1d44112d, 0x1e5936fb, 0xc3c1347a,
0x610057ca, 0x16a567ea, 0x55d0559b, 0x36d97fe1,
0xae7640d2, 0xb0ce01dc, 0xcbd5837a, 0x6bec9820,
0x349272c1, 0x375782f3, 0x36328a62, 0xae43900c,
0x789b5cae, 0x0265138e, 0xc17168fd, 0xa031b0fe,
0xc3b08224, 0xa76979b1, 0xd0ebd2f5, 0xdc32c082,
0x3c26c79e, 0xc1988d6d, 0xd0d422bb, 0x3eec330f,
0xdce1ccb9, 0x36774c6a, 0xbff91c14, 0x5f289f81,
0x29328571, 0xc4487590, 0xd8ce4ab3, 0x2f148f44,
0xef5740fd, 0xd97508aa, 0x6ed6d146, 0xc31f5532,
0x1f84fe18, 0xffd584fc, 0x481b5e71, 0x0e9586c3,
0xd3270828, 0x7b718338, 0x5463804c, 0xacb0569a,
0x31ca80cf, 0xf3feef09, 0x7e24afbe, 0x3f53fea6,
0x334a8dc2, 0xa622d168, 0xea7bad66, 0xb043b6de,
0x009525a1, 0x46753fa3, 0xec441114, 0x92bc95d7,
0x16a94ff0, 0x60976253, 0xf1410f2a, 0xeebe2471,
0xcd087f94, 0x85b39360, 0x3f00075b, 0x83280fd8,
0x9f69d19a, 0xc32edad1, 0xb9a20190, 0x662a4e6b,
0xa6aeda9d, 0x68d32aea, 0x9c0c0c2f, 0xed4a8cd2,
0x65579ee2, 0xa387099d, 0x5d32c4b4, 0x2b32d4c9,
0x1e71e0b1, 0x90e64d64, 0x401ee371, 0x84f37ded,
0x78c8ed0e, 0x71c0ae76, 0x05bb7227, 0xfb6402ea,
0xb56b48f3, 0xed3f9342, 0xd253139f, 0xec2afef7,
0xdb25471d, 0xc686913c, 0xfd11f08e, 0xf7367423,
0x7a9ef5a4, 0x4450537e, 0xd3ca47d4, 0xe66d38eb,
0x7f9471d9, 0x4b69c64a, 0xea52f411, 0xb08afe22,
0x598b6736, 0x2a80e6e8, 0x130465eb, 0x9edcecee,
0x05ecb15f, 0x9fe6596a, 0x896b595e, 0xca1af7bf,
0x6a5bf944, 0xe4038571, 0x70e06229, 0xcfc4416f,
0xe3ccb1b2, 0xa807a67e, 0x847fe787, 0x4b52db93,
0xdd7eec6c, 0x104824d4, 0x60049f69, 0x1848e674,
0xb92ce4f3, 0x7a502e4f, 0x6954d4df, 0xf3a78b2b,
0xf31fffce, 0x3901263e, 0x89849517, 0x4b4cf0b0,
0xc49f9182, 0xa59dac4b, 0x2517af74, 0xd332cac9,
0x848a89bc, 0xae0dcc89, 0x9cdba27c, 0xee91786a,
0x4e5d76ea, 0x69f56087, 0x02d46715, 0x3648afcf,
0x6fbfea07, 0x8f062d66, 0xf9fe9ac4, 0x758790f6,
0x0fadf7b8, 0x3d5a1076, 0xb32eb059, 0xcc2c35c7,
0xcb2b5670, 0xc59637e3, 0x8a1b462f, 0x88c74622,
0x983226a7, 0x2286df61, 0x2f1cf48a, 0xaa09a187,
0xd3aea9cc, 0x1c4500bd, 0x8687549a, 0xffef8752,
0x8fa18f1e, 0x355c89c1, 0x3a2dda1b, 0xc2b2162c,
0x78e256f1, 0x97636bc1, 0xc98f56c5, 0xaa2c7f32,
0xaca8a6af, 0x88229120, 0x8b60e4de, 0x25424bf9,
0x9c7fe31a, 0x3a89192c, 0x36d4057e, 0xc25869cc,
0x2f8b32c1, 0x7aeb8590, 0xa1a55039, 0x66c59227,
0x584f20b0, 0x4383557e, 0x9ce2452b, 0x9012d8e4,
0x5683162c, 0xb3037916, 0x18612dad, 0x371f131a,
0x739ce1e2, 0xfdd5807b, 0xfc87512d, 0x1fd7aa7b,
0xaf8e7a2c, 0xcdbb8df4, 0x727c1195, 0xe26fee0b,
0x37deafb9, 0x8d8cde83, 0xb7670562, 0x568dc696,
0x62d70db6, 0x3646d6ba, 0xe6c88ebd, 0x106c2aea,
0x5b6bff14, 0x463c82fa, 0x464330b1, 0x9b7d8a51,
0x79833e92, 0xb25d555b, 0x90ce5e6c, 0x98538e62,
0xe56d0dc9, 0xc5cd572d, 0xe1ba5781, 0x728fb8e8,
0xdc134fe5, 0x15719dea, 0x8811b210, 0x7fd409d5,
0x2c7f655b, 0x114c383b, 0xfb8d5068, 0xbf59b09e,
0x4a898094, 0x12181ac5, 0x4ad15389, 0x8ce82910,
0xeab6ec1c, 0x8b17c746, 0xa8311525, 0xb1436ba2,
0x0bdbe29d, 0x11b09b87, 0xd2710e04, 0x82897729,
0x7f41660a, 0xff480b1d, 0xfd24bb72, 0x9ba148c2,
0xce7f7bfe, 0xd986db88, 0xb01c3b85, 0x0733a8dc,
0xe32e51bf, 0x97009a0e, 0x97c0061e, 0xb6d89d43,
0x6786c445, 0x88f8005f, 0x9e52a49a, 0x838aaac7,
0x18c5ec75, 0x2fc3ceae, 0x18f92b1a, 0xf51aaeff,
0x33b50b53, 0xe8fda751, 0x64a2e1a8, 0x431722b6,
0xd80acc80, 0x40ba3bae, 0x4a92d9d7, 0x1004df89,
0x2b189bee, 0x8a69776a, 0xb9f9f468, 0x6e1521a2,
0x033b1ee6, 0x609b3062, 0x9b257e41, 0x52c58f9e,
0xc2f80810, 0x1121a169, 0x795e3788, 0x10ff6635,
0xed6e1842, 0x1c6bb697, 0x6de5364e, 0xbfe4b47d,
0x05e0b920, 0xb8d5693a, 0xe0dcd5e3, 0x3e53acb9,
0xad57a407, 0x1848ff77, 0x49ac2a76, 0x75478e2a,
0x63679f6d, 0x398c3530, 0x6fd53905, 0xad5b3a64,
0x82bb0bca, 0xb1459952, 0x99363693, 0x442013af,
0x4402d836, 0x85923909, 0x974a4aff, 0xd763a687,
0x24b5b5c7, 0x6fb40fed, 0x1452580c, 0xd37ba6d9,
0x5838bc79, 0x843bbda1, 0x061ad806, 0xeaa86bfd,
0x0428694b, 0x9982ad37, 0x851b0efb, 0x735da8bd,
0x7558dccd, 0x6c63be0a, 0xe44ce748, 0x60042b30,
0xdad815b9, 0x8f758186, 0x1c8dd496, 0x7c85705d,
0xd57b671c, 0xcea66708, 0x70660a4b, 0xd463e5b7,
0xea828a5b, 0xe2ca6710, 0x8517eff4, 0x8a5f2a2f,
0x6af88297, 0xea1034d6, 0x3c5cc9eb, 0x46f849e1,
0xf6bddeeb, 0xaaf192a9, 0xb018a0a6, 0x1f0fd33a,
0x31ff6ff3, 0xd3444345, 0x88f79a50, 0xcec19609,
0x2cf2cc76, 0x82adba2c, 0x84188f77, 0x9c07d2c0,
0x4e839036, 0x434fa50b, 0x78ab043e, 0x09fbd64f,
0xda902401, 0x613a3c6f, 0x4a697f0d, 0x02302beb,
0x84e0dbb4, 0x35d7eca9, 0x857d37bf, 0x4ea9ce58,
0xa8c780e4, 0x486730d3, 0x2faf29eb, 0xa7b46a74,
0x923f0f3f, 0xaccaf3af, 0x94d94baf, 0x81ca43c0,
0xa1482f0d, 0xd2d527b0, 0x85054bef, 0x934ddea3,
0xbbf03c30, 0x27308f4a, 0x3ee3eb4c, 0x2f9aed64,
0xf082f13b, 0x7fcff4ba, 0xe1b0cb40, 0x57aabc7f,
0xf274c9d3, 0x220d43fa, 0x4e77f4d0, 0x7085d793,
0xb6bf991f, 0x30f135de, 0xf0715ea7, 0x7b2d016b,
0x5333f064, 0xf388390a, 0x6ba63a6b, 0x432fd235,
0xb5fd02cd, 0xaa5bbce9, 0x7e19a4d8, 0x81945d0e,
0xad776f9e, 0x93740ed6, 0x18c4e796, 0x19f5ad5f
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,288 @@
/*---------------------------------------------------------------------------*
Project: TwlBrom - libraries - GCD
File: gcdfirm_blowfish_table.c
Copyright 2007 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: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <firm/gcd/blowfish.h>
const BLOWFISH_CTX GCDi_BlowfishInitTableGCDFIRM = {
0x7595a8ee, 0x84fff32d, 0x58f8aec6, 0x6f6444c2,
0x10a6cfbc, 0xbee1b813, 0x88efabc3, 0xc72026cd,
0xc00b913a, 0x9fb074c0, 0x56d4830f, 0x69abdee5,
0xcf6e5ff2, 0xd7febe2f, 0x84f5d5e2, 0x73a1ccda,
0x44205999, 0x74278f63,
0xf0907253, 0x1c95d48f, 0x7cdbce99, 0xa8b9508a,
0x79379f9e, 0x129144fe, 0xd2b3554d, 0x72d702c6,
0xce058143, 0x72b411b8, 0x9acf2ae7, 0x62c0d195,
0x7d0861e5, 0x333ac8f6, 0xafc17b59, 0x7fabab12,
0x5a20b8df, 0x43c908e1, 0xdf057b54, 0x65237d17,
0x8988581c, 0x1d02cad9, 0xdde63c8a, 0x302fee12,
0x0abedd9d, 0x586fb574, 0x10130aad, 0x0a1ead35,
0xfe6f0870, 0x8cac4f02, 0x9c56ef2c, 0xc0ab9bcd,
0x7faf9a52, 0xef822dcd, 0x2bc0fdc2, 0xde22a557,
0xccf82867, 0x582a9d19, 0xd2790715, 0xdc8df689,
0x250ca6e2, 0xfe35236d, 0x8648e2d6, 0xaa0bf6e7,
0xd1240620, 0x413a5ea7, 0x4cf59143, 0x4f4f5472,
0xa5f29a08, 0x1fff4e8f, 0x14f0ec2d, 0x47d6f42a,
0x85b021f0, 0x7836f20a, 0xd908d0d7, 0xbdcc9dd5,
0xa6ac0bfb, 0x96fb7daf, 0xb65476ff, 0xbde99b51,
0xe8c84b8e, 0x72c88630, 0x3f8d0979, 0x5c1e45dc,
0x7555b1db, 0x3edb5a90, 0xb07fac66, 0xf7316aba,
0x84a088bd, 0xf0b2fb9d, 0x014b48e1, 0x6d0967e3,
0xa38d60e4, 0x148eedf2, 0x81898864, 0xfe0d73aa,
0x58c37bd5, 0x8ce2c345, 0x82951de7, 0x17be1aa6,
0xbfe8ad1b, 0x4d6b4176, 0x3a0da43d, 0x50a4dcac,
0x69f1282e, 0x16b49576, 0x6b521ffe, 0x67588174,
0xb3de1d28, 0x06198cbd, 0xeea240ea, 0xd13e358e,
0x3664b06c, 0x59f4e227, 0xb54122d3, 0x94bb71e3,
0x0315fb94, 0x647301d6, 0x943f1f0d, 0x7a2aaec4,
0x51bf88f7, 0x712c091a, 0x6d3b6e3e, 0x6eb24d52,
0x9fc82ca4, 0x8ffc188e, 0xbe31140a, 0x1d3e5756,
0xc574e16e, 0xb105a793, 0x94f658ec, 0x6ed4864c,
0xb2bae3cf, 0xe342cf15, 0xf2bc4d27, 0x090334b1,
0xc2632a42, 0x884f0092, 0xa59abd51, 0xe9d203f9,
0x7d122257, 0x02a709aa, 0xac9fc39b, 0x4840beed,
0x74be37a4, 0x24b9a4d3, 0x8178bca7, 0x606b85e5,
0x1dcb46b2, 0xe6112060, 0xbd44008a, 0xd1be2964,
0xcfcc5032, 0x74e10e43, 0x53fac5ab, 0x84a6e0a4,
0x9080997a, 0xa31a0100, 0xcee21c1c, 0xebcee973,
0x77e9a4c7, 0x3a261b9b, 0xce49ca16, 0xec3a432d,
0x1410c1bf, 0x8d22c824, 0xb0018266, 0x7964e2e2,
0xfcc6eb14, 0x12e6e035, 0xca689d0a, 0x5f9f39fc,
0xbf14f7e9, 0x5d7813f2, 0x87347401, 0x1a107660,
0xfeaa1bb7, 0x53ebb1a2, 0xfc47a457, 0xf71cde17,
0x25379a36, 0xb2ed205d, 0x1225bf36, 0x14536bd4,
0x31138cdf, 0xeeecb7f4, 0xbb6e5b19, 0x39877d0f,
0x4366ac24, 0xfb13893c, 0x3a7039b2, 0x3a1b8037,
0xfc668634, 0x0a3fb783, 0x50380526, 0x9c0e4b1a,
0x462b9398, 0x0e6c7d2d, 0x689a929e, 0x715701e6,
0x2e61d17d, 0x09da9145, 0xfb143ba1, 0x5b199259,
0xc4e3a5ee, 0x0b4bda9a, 0xe18c526c, 0x73171c1a,
0x1572a94b, 0x6d15b729, 0x71509e91, 0x571bc76e,
0x8c721018, 0x1fcc1742, 0xa6602c75, 0x787f88a9,
0x0598f9c4, 0x5addc61b, 0x8e9b7b41, 0x2f4daf72,
0xd9f09e2a, 0xe76054ca, 0x28bc0b4e, 0x4a320c32,
0xdf2b687e, 0x2cdffbcc, 0x77f16b69, 0x5d425665,
0xcf207fd9, 0x2e4d166d, 0x46e57957, 0x37f50f39,
0x6742b74a, 0xbb21df47, 0xe2df0964, 0x0dd6d989,
0x6f635a6e, 0x8f05a457, 0x6e5dc010, 0xeae76f43,
0x135c206a, 0x876bd938, 0x1ccbc607, 0xaf600e28,
0x0daa4fe0, 0x95e0fe33, 0x093e44b1, 0x1d16b2ad,
0x8d710ba2, 0x3ca3c1d9, 0x8f54a8e1, 0x7eb11ec8,
0xcdb82a0e, 0xde1aff6d, 0x68ae2ce2, 0x80e1ca3e,
0x67d60c2c, 0xac6ad1da, 0x5330c802, 0x5f67a04d,
0x5d6f3c9d, 0x1f4725b0, 0x094a4c69, 0x4c1dea21,
0xfd09ced5, 0x270fc341, 0xf16081f5, 0x54dcbdb4,
0x72a36bf5, 0xbeabc16a, 0xdd82bb02, 0xf0e75d20,
0xea6a64b0, 0x85cb5c2c, 0xd53a5aaa, 0x400f91d1,
0xc020695e, 0xa3d05c76, 0x8ac00446, 0xe0ebe1ce,
0x7ed2ca13, 0x7f41bbca, 0x09daffc0, 0x16d39c09,
0xd417fe9e, 0x11fc4b36, 0x87b92111, 0x581cea89,
0x6a51516d, 0xa691f994, 0x06e5c6ab, 0x81200780,
0xe6ea60b7, 0x8d0967af, 0x32f81d79, 0x1bf63b78,
0xeefe70bb, 0x74123b42, 0xf7345b16, 0x7aaa1388,
0x0152a394, 0xb5463ea1, 0xe7968633, 0xf6b00f17,
0xfee65926, 0xfac95f88, 0xf7788838, 0x404d27c8,
0x0a40725a, 0xac948618, 0xb2fb966f, 0x730b40c3,
0x3fa5b3a0, 0x2a4a7b57, 0xe2ee0994, 0xe2662b03,
0xa517c253, 0x5fcd9ac2, 0x7cf1861a, 0xfb9c6d92,
0x726cfcf6, 0x6bc20855, 0xe03c7757, 0x15f7aefc,
0x0490f4b2, 0xc5c49d9e, 0xd91bc403, 0x84799016,
0x5e8b5d2f, 0xdd8aef68, 0x4225b87a, 0xd3912770,
0x56f84df2, 0xe191d469, 0xb6306514, 0xf66b7461,
0xaa528b42, 0xd7d8d211, 0x0409e809, 0x3e995489,
0x984e2cd0, 0x21da8726, 0xa901dcce, 0xc59ed627,
0xa508a395, 0xe67e1c10, 0x7786c594, 0x7db49c12,
0xf3a048fa, 0x6c03c939, 0x5fe538b2, 0xe68d94f1,
0x74116818, 0xbc041b38, 0x37e9f59f, 0xd5f0d6b4,
0x3abedc09, 0xf2277fcf, 0xb1c090ca, 0x179fbeaf,
0x6799f269, 0x4ef2e1ba, 0x9a8530fe, 0xe629bad3,
0xef2d1806, 0xefe0d41a, 0x8fbd8038, 0xae93b3b8,
0xb96af69a, 0xe976f30a, 0x3735edf2, 0xa10aab80,
0x572bc346, 0xd9d352e5, 0xa88382fb, 0xc36d9a6a,
0x622169f5, 0x2b668147, 0xc68d8e94, 0xd83725df,
0x75ca8dc0, 0xe0fef07d, 0x3020348f, 0xd7e941c5,
0x0f18da00, 0x9909caca, 0x1b5f4c03, 0x611ba66e,
0xe3c25c8d, 0x87fe1654, 0x20ed099e, 0x2eef6251,
0xf8b62747, 0xa8863716, 0x2e654e0a, 0x17985515,
0xd121a7f0, 0xf0545a5b, 0xed9f9da3, 0xfe607b10,
0x3afc599b, 0xa3c13305, 0x9667a20a, 0xbd639f0c,
0xe647e3a0, 0x0e1304b2, 0x26a31cec, 0xd1435273,
0x33845341, 0xbe3383f5, 0x22e5e07f, 0xb516aed2,
0xe7dad3c1, 0x7e0b2eec, 0x7709d235, 0x48923397,
0x086b62a6, 0x05270843, 0x48073d32, 0x3e22db8e,
0x7b0fd2eb, 0x9199531d, 0xa47e9efc, 0x76b1bf31,
0xee7b6f31, 0xdc6de2c0, 0x120d4d2c, 0x1c7d1a8b,
0xd9192142, 0x5251ce66, 0x26dd0acf, 0x18073f04,
0x5901f0a3, 0xfc24fea0, 0xe9d4474b, 0xbbda7bdd,
0x66cb45f6, 0x66137a90, 0xa010a036, 0xa3fff96c,
0x61c8194f, 0x553e0b2b, 0x72b54de2, 0x59aeefe9,
0xda01dab4, 0xdac48b91, 0xbba66e7a, 0xa3819de2,
0x1f950fce, 0xa3c4d697, 0xc4e28dce, 0x530179ee,
0xaa7cc068, 0x1b44146a, 0xb267d209, 0x984ff1be,
0x90fd796b, 0xe0e42a5f, 0x36d033fb, 0x13c2f482,
0x3b19a86d, 0xff0ad256, 0xf06acb47, 0x0d4fbfa0,
0x53246fd3, 0xf9296dd5, 0x42bb5d4a, 0xd4d86e75,
0x96442650, 0x0bdebc51, 0xb3cee98d, 0x188c83e2,
0xbe632850, 0x9a0ce659, 0xc51250cd, 0x141b9f77,
0x292844d4, 0xa8ce50d4, 0xe6f471a3, 0xe51b7ef9,
0xece33b79, 0x1ec17a6a, 0x01a0125e, 0x09071e04,
0xbfe72df4, 0x170ed1cf, 0x2fa259ac, 0x4821704f,
0x95b82704, 0xcd1e0c6a, 0xb57a33ce, 0x057204fe,
0x7617de6b, 0xaa72f1d5, 0x4b46d61a, 0xac797378,
0x4984d9cf, 0x40726022, 0x2b425b5c, 0x4ca25dab,
0xa0e23aa3, 0x4fe1527a, 0x6fd3b7ac, 0xeb47ba60,
0xcde7c8b7, 0x9aef5d0f, 0x821674cd, 0xc258ea7d,
0xa6a813a5, 0x93e88a84, 0x8f32d2e3, 0x58ae440d,
0xc5799715, 0x425284d0, 0x1b696e64, 0x7d3ce93a,
0xdad0f25c, 0xc4b0dd14, 0x7079e2e5, 0xa9e8e61d,
0xfaf686b7, 0x1cf1b87b, 0x31ab43c7, 0xdc45d1bb,
0x386cb6ec, 0xcad283f2, 0x4dccbfaf, 0x4934f28b,
0x2fbc3dd4, 0x789b64f7, 0xb2e8918f, 0x506acbf7,
0x50a13360, 0xd128d4d3, 0xba687526, 0xc5474940,
0x6bb5dfc7, 0xef9bdf1f, 0x92cc643b, 0xfb2ad4f0,
0x4ff9410b, 0xb013c81e, 0x9fe69574, 0x5fed0d88,
0xcfe87720, 0x09cddf06, 0x9e57696f, 0xc429dfb9,
0x460c5dd2, 0x9b9e505b, 0xc012bcf6, 0xd955bdda,
0x7310ed31, 0xcdaaebe2, 0xc9761ff6, 0x5de00f45,
0x66a5e949, 0x45c5df1d, 0x96a38fab, 0x18939d5b,
0x94015083, 0xd27b1379, 0xe10107e7, 0xdaef6ef8,
0xaf8f83b3, 0xafd37029, 0x7d6803e0, 0x3a545055,
0xfd419925, 0xb49fa25f, 0x533ad3f4, 0xc49f3fe4,
0x9b9eb196, 0x2015408e, 0xd6f46485, 0xa8e66479,
0x5b8866e1, 0xc97d478d, 0xb7fcb30a, 0xddefdff0,
0x34afb94c, 0xa155d92f, 0xf53979b1, 0xf0cdd075,
0xf25accae, 0xe4208afd, 0x5b11bb77, 0x37b337e4,
0xa69da8be, 0x28a9ee86, 0xb284b30e, 0xc3527598,
0xf423936e, 0x7e2e1d51, 0xcaf2613d, 0x7505391e,
0x252d3dd5, 0x00d18203, 0x7ef4577e, 0x244e98a9,
0xb73b5840, 0xb0f9c9ed, 0xa8d4bc23, 0xb7228243,
0x241418d3, 0x39fd4429, 0xe8ab9b37, 0x3a74ecdf,
0xbf99499c, 0x70c3eb26, 0xc6ac5d10, 0x7085410a,
0x9bc5ca24, 0x37cf4d32, 0x5a407af1, 0x7f38c2af,
0x6cf95726, 0x2934cce9, 0x478e4a5e, 0x86bccd71,
0x46673804, 0x5cd7e9da, 0x601c0e47, 0x32f3c95c,
0x98f3b207, 0x2a9f09f2, 0xa68e3b9b, 0xe0a67f44,
0x8d4801eb, 0x0d650900, 0x2dbd9d8f, 0x9113fe47,
0x5a317b0e, 0x3d5a8d71, 0xfbd60e45, 0x86f6eedc,
0x3f77fec6, 0xe56a0bb2, 0x32ab5ef7, 0x2262c429,
0x7ed387c6, 0x0087c87e, 0x6570e4b7, 0x648d80e1,
0xc3bd761a, 0x5c3c0c47, 0x9ac5b07c, 0x6ecb158f,
0x73e2d323, 0x5095435e, 0x21a97ee4, 0x0c599519,
0x1f6c6441, 0xee52efd7, 0xbd886ee2, 0x66ec3c66,
0x0e42820c, 0xb4f244cb, 0xa56f2efc, 0xc0302f16,
0xf9b795aa, 0x60a00f3f, 0xa83fb0a9, 0xe9b2f724,
0xa3c3b44f, 0x8151cc80, 0x2ae0e99c, 0x0cb0ff00,
0x2e9a646d, 0x991d2cd6, 0xef2bf16b, 0x0a610ad2,
0x1674ea07, 0x567fcfe7, 0xf05ef5af, 0xdfdf47cb,
0x6c3ebb59, 0x2f052cad, 0x4701ca04, 0x0c65164a,
0xa285ecb3, 0x348fd20a, 0x7915f8ff, 0xdc269d33,
0x74578f72, 0x763ced80, 0x53275951, 0x8c51eebd,
0x6d8b4452, 0x5267c34e, 0xe9b7197b, 0x912800ab,
0x10d207a4, 0x4238eaf7, 0x2171bd12, 0x9c7eff0b,
0x251b79ff, 0x41bb7753, 0xecea6583, 0x031393e5,
0x49a58fe9, 0x83bb7587, 0x4a2a3156, 0xa3ab8da7,
0x38f774aa, 0xd3844d4e, 0x7cc81418, 0x894ca09d,
0x341ade56, 0x9574d6a5, 0xd2299751, 0xdbd43293,
0x253d53e8, 0x64005cc4, 0x813de56f, 0x631c3cda,
0x931681bd, 0x77dd0ab8, 0x15d6b56f, 0x2a3106b1,
0x603102bf, 0xfef29a3d, 0x648baa38, 0x470ae791,
0x02e625ab, 0x04904d5d, 0x3b31cea4, 0xa9a2126d,
0x76814575, 0x4c6a5511, 0xe2d7c619, 0x840d8ca5,
0x4d15e8f8, 0x59256a95, 0xf1ed6a56, 0xb996efab,
0x5da9c913, 0x7652bed8, 0xedbda0be, 0x59f81908,
0xd1d45ed7, 0x00b5f876, 0x986b97e4, 0x0bf99862,
0xf3a448c6, 0x05f92573, 0x9ab2c7c4, 0xbf92bbf2,
0xa8e5e036, 0x3030a02b, 0xab1e833b, 0x5190d039,
0x3d31eec2, 0x4eadf427, 0xea65d217, 0xafac4dd3,
0xdf5ef6fe, 0xe88cdd6c, 0xab55d1df, 0x77689e8b,
0x3ba6b081, 0x9ed37908, 0x42383678, 0xf9f221a6,
0xb6cf355d, 0x1c10aa09, 0x38645486, 0xab46320e,
0x6c01bdce, 0xaa9b77bf, 0xdc8a7085, 0x843c40c0,
0x35218b12, 0x57c15a35, 0x37a879d4, 0x41fa8671,
0xe9bae4f3, 0x9521c923, 0x2a32bab3, 0x5415b46b,
0xcb7245dd, 0x6e6407bd, 0x88477782, 0x18424ea6,
0x48214427, 0xd266b8b8, 0x70b796d4, 0xe4e48223,
0xf6a5bf45, 0xa34cc400, 0x0b62f21c, 0xf0eb6ca7,
0x4f8566a3, 0xd23e5904, 0x86eac0fd, 0x95080a7d,
0xe2926a24, 0x9983c4a1, 0x7e398b84, 0x9fccb2f1,
0xff70696b, 0xccb47af7, 0x61d3bf96, 0xf4170385,
0x0bc86fef, 0x06fb5c90, 0xce92d9fe, 0x120ca3cf,
0xdcde2f59, 0xd6fd2b38, 0x4258d974, 0x4b2c0a3c,
0x1f0967ec, 0x25987e51, 0x4e7acfc7, 0x1f7f9694,
0x18de3230, 0x85d9095d, 0x54737616, 0x6ec26956,
0x9eb3637b, 0x908a5192, 0x839fb43e, 0xefe70f2a,
0x42e168a5, 0x776e5c22, 0x736be3a9, 0xb72d66ed,
0xa4f94794, 0xb414bd55, 0x5de623d3, 0x9cd1e1a9,
0x42957f7e, 0x381cf593, 0x678a7d07, 0x158bb604,
0xe64926bd, 0x5a047438, 0x360d68cb, 0xab487a8e,
0x0d769a0b, 0xde3fc939, 0xf33ea9c0, 0x28b87455,
0xd5f6c00c, 0x853f8ffe, 0xc8d238c3, 0x3bb5473e,
0xc9779097, 0xc4af3a0c, 0x899098c0, 0x3c51c0e4,
0x7e02214e, 0xe65f85a4, 0xe7c4a857, 0x6096179e,
0x9c9eb559, 0x709a5f7d, 0x548f6fd5, 0xf1ad58cb,
0xe4bce783, 0x43ca2b6c, 0x6f43de8f, 0xa60a02f9,
0xbcdd0f35, 0x58f582b3, 0x30633b0d, 0xf17c7d49,
0x35f809f7, 0x9ee90417, 0x6360674f, 0x44375b7b,
0x72949c97, 0xff78dcd2, 0x08bff59a, 0x00b14d4e,
0xf37ef8c1, 0x6760a010, 0x87dd4dee, 0x31f5208a,
0x721c3add, 0x6eb9ab46, 0x29250341, 0x2fdcc721,
0x9d812ebb, 0x60a078a0, 0x20fcdc2d, 0xe8c594f9,
0x4956e488, 0x81873803, 0xf51a953d, 0x9b43c7e1,
0xdfd95440, 0x8dbdb07e, 0x1ecaf22f, 0xb14dceca,
0xc4c8003d, 0xdc26051b, 0x8bdc1011, 0x6df204db,
0xc72491cf, 0x9fd74623, 0xa663c57f, 0xd0f6f96d,
0x60f5d249, 0x10b66b81, 0xeeb26437, 0xe739332c,
0xeb94bdfd, 0xbfc4e0e3, 0x5d8ee7a8, 0xf676c5c3,
0x38357061, 0x8d3e4d68, 0xd560280b, 0x7a85b438,
0x00e7da19, 0x44e3021b, 0xb22bee73, 0x7af11114,
0x9a4aacd3, 0xbb5ea97a, 0x7993ac0b, 0x3dc12ed7,
0x7ac7eda8, 0x26528e57, 0xb15b78c9, 0xeae2b177,
0xa9bd7a3c, 0x03812180, 0x0ed1451f, 0x9ab1c57d,
0xa0acc3c5, 0xbf0b533d, 0x017f8413, 0x3228452a,
0x86eb48e1, 0x379cbcff, 0x3b200f75, 0x0cbbb62b,
0x7467627f, 0xc782b5e3, 0xd402c537, 0x026be842,
0x41a32d7a, 0x5910b6ff, 0x909926b4, 0x05bd811e,
0x92fd98c8, 0xcf66e980, 0x1f5eb79c, 0x4e2c31e4,
0x5f9b7f0c, 0x91972e91, 0xf70f2e5a, 0xd5b6b627,
0x3b1f243a, 0xf404cb7b, 0xe6232ec3, 0x22da8906,
0x0cb348ff, 0x0da6349d, 0x7c858b98, 0xd9b258f1,
0x623c9dd4, 0x8493c626, 0x91551f3b, 0x6ed97a53,
0xb5a10c32, 0x23d39f3e, 0x57e7da04, 0x8f0b2689,
0xebb54529, 0x0f015572, 0x2f4db833, 0x407e1d2b,
0xfd815f1a, 0xdeacbb64, 0xe8c38859, 0xde04110b,
0xb6c901ab, 0x153aee1a, 0x6b5af720, 0xc3bfe796,
0x8b412bc7, 0xe8cbe167, 0x60d83df2, 0x35506981,
0x2b8f1fc7, 0x311029cf, 0xf46fad6e, 0x7440056b,
0x61df9779, 0x693d02da, 0xe7d93ccc, 0x861bd3d3,
0xad0b85a0, 0x8bcd277a, 0xb72fceb7, 0x8ca5d84f,
0xc0847150, 0x1bd88428, 0x4673ca0d, 0xb030dbe5,
0xb51c06c1, 0x642baffb, 0xccb5043b, 0xb84aebcb,
0xbcd80352, 0x385520d6, 0x3b4518aa, 0xfed91bbe,
0x95f68932, 0x3a10ae0e, 0xd733aeaf, 0xf9f85ba7,
0x978ac3d1, 0x6a64540c, 0xc5a1575c, 0xc2adcd2b,
0xc3d45465, 0x47671f05, 0x8542fff3, 0x0f528f92,
0x3da8b9cd, 0x13e96928, 0x0ae5cb86, 0x55602423,
0x1acfb022, 0x68c9f16b, 0xbebc28a5, 0xb1d1d15e,
0xa9f54130, 0x0ebb0b93, 0xaf3ffdb9, 0x52078aad,
0xb3bf2160, 0xfb4d9d05, 0xe32785a3, 0xd05a87e5,
0x688e68a5, 0x38840376, 0x9b46ac8d, 0x23f286fd,
};

View File

@ -16,38 +16,39 @@
# $Author:$
#----------------------------------------------------------------------------
SUBDIRS =
SUBMAKES =
SUBDIRS =
SUBMAKES =
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
FIRM_CODEGEN_ALL ?= TRUE
FIRM_CODEGEN_ALL ?= TRUE
SRCDIR = .
SRCDIR = . ../common
SRCS = \
mi_init_mainMemory.c \
mi_loader.c \
SRCS = \
mi_init_mainMemory.c \
mi_loader.c \
mi_exDma.c \
TARGET_LIB = libmi$(FIRM_LIBSUFFIX).a
TARGET_LIB = libfirm_mi$(FIRM_LIBSUFFIX).a
include $(TWLFIRM_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(FIRM_INSTALL_LIBDIR)
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(FIRM_INSTALL_LIBDIR)
ifdef NITRO_CALLTRACE
CCFLAGS += -DOS_PROFILE_AVAILABLE -DOS_PROFILE_CALL_TRACE
CCFLAGS += -DOS_PROFILE_AVAILABLE -DOS_PROFILE_CALL_TRACE
endif
ifdef NITRO_FUNCTIONCOST
CCFLAGS += -DOS_PROFILE_AVAILABLE -DOS_PROFILE_FUNCTION_COST
CCFLAGS += -DOS_PROFILE_AVAILABLE -DOS_PROFILE_FUNCTION_COST
endif
ifdef NITRO_TCM_APPLY
CCFLAGS += -DSDK_TCM_APPLY
CCFLAGS += -DSDK_TCM_APPLY
endif
#----------------------------------------------------------------------------

View File

@ -0,0 +1,286 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - libraries - mi
File: mi_init_mainMemory.c
Copyright 2007 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$
*---------------------------------------------------------------------------*/
#include <firm/mi.h>
static u16 intervalTable[] =
{
1, 1, 1, 1,
};
static u32 prescaleTable[] =
{
MI_NDMA_INTERVAL_PS_1,
MI_NDMA_INTERVAL_PS_1,
MI_NDMA_INTERVAL_PS_1,
MI_NDMA_INTERVAL_PS_1,
};
//================================================================================
// memory oparation using DMA (sync)
//================================================================================
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaSendAsync
Description: send data with DMA
async version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaSendAsync( u32 dmaNo, const void *src, void *dest, u32 size )
{
u32 idx = dmaNo - MI_EXDMA_CH_MIN;
{
u32 blockSize = MI_NDMA_BWORD_8;
u32 interval = intervalTable[idx];
u32 prescale = prescaleTable[idx];
MIi_ExDmaSendAsyncCore( dmaNo, src, dest, size, size,
blockSize, interval, prescale,
MI_NDMA_CONTINUOUS_OFF, MI_NDMA_SRC_RELOAD_DISABLE, MI_NDMA_DEST_RELOAD_DISABLE,
MI_NDMA_IMM_MODE_ON );
}
}
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaRecvAsync
Description: receive data with DMA
async version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaRecvAsync( u32 dmaNo, const void *src, void *dest, u32 size )
{
u32 idx = dmaNo - MI_EXDMA_CH_MIN;
{
u32 blockSize = MI_NDMA_BWORD_8;
u32 interval = intervalTable[idx];
u32 prescale = prescaleTable[idx];
MIi_ExDmaRecvAsyncCore( dmaNo, src, dest, size, size,
blockSize, interval, prescale,
MI_NDMA_CONTINUOUS_OFF, MI_NDMA_SRC_RELOAD_DISABLE, MI_NDMA_DEST_RELOAD_DISABLE,
MI_NDMA_IMM_MODE_ON );
}
}
//----------------- internel functions -------------------
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaSendAsyncCore
Description: send data with DMA
async version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
blockSize : block size
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaSendAsyncCore( u32 dmaNo, const void *src, void *dest, u32 size, u32 oneShotSize,
u32 blockSize, u32 interval, u32 prescale,
u32 continuous, u32 srcRld, u32 destRld,
u32 timing )
{
MIi_WaitExDma( dmaNo );
MIi_SetExDmaParams( dmaNo, src, dest, size, oneShotSize,
blockSize, interval, prescale,
continuous, srcRld, destRld,
timing,
0, MI_NDMA_SRC_INC, MI_NDMA_DEST_FIX );
}
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaRecvAsyncCore
Description: receive data with DMA
async version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
blockSize : block size
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaRecvAsyncCore( u32 dmaNo, const void *src, void *dest, u32 size, u32 oneShotSize,
u32 blockSize, u32 interval, u32 prescale,
u32 continuous, u32 srcRld, u32 destRld,
u32 timing )
{
MIi_WaitExDma( dmaNo );
MIi_SetExDmaParams( dmaNo, src, dest, size, oneShotSize,
blockSize, interval, prescale,
continuous, srcRld, destRld,
timing,
0, MI_NDMA_SRC_FIX, MI_NDMA_DEST_INC );
}
/*---------------------------------------------------------------------------*
Name: MIi_SetExDmaParams
Description: set DMA
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
blockSize : block size
Returns: None
*---------------------------------------------------------------------------*/
void MIi_SetExDmaParams( u32 dmaNo, const void *src, void *dest, u32 size, u32 oneShotSize,
u32 blockSize, u32 interval, u32 prescale,
u32 continuous, u32 srcRld, u32 destRld,
u32 timing,
u32 fillData, u32 srcDir, u32 destDir )
{
u32 idx = dmaNo - MI_EXDMA_CH_MIN;
if ( idx < MI_EXDMA_CH_NUM )
{
OSIntrMode enabled = OS_DisableInterrupts();
MIExDmaChanRegs *reg = &((MIExDmaChanRegs*)REG_NDMA0SAD_ADDR)[idx];
reg->src = src;
reg->dest = dest;
reg->fillData = fillData;
reg->totalCount = size / 4;
reg->wordCount = oneShotSize / 4;
reg->blockInterval = (interval << REG_MI_NDMA0BCNT_ICNT_SHIFT) | prescale;
reg->ctrl = blockSize
| srcDir | destDir
| srcRld | destRld
| continuous
| timing
| MI_NDMA_ENABLE | MI_NDMA_IF_ENABLE;
(void)OS_RestoreInterrupts(enabled);
}
}
//================================================================================
// DMA WAIT/STOP
//================================================================================
/*---------------------------------------------------------------------------*
Name: MIi_IsExDmaBusy
Description: check whether extended DMA is busy or not
Arguments: dmaNo : DMA channel No.
Returns: TRUE if extended DMA is busy, FALSE if not
*---------------------------------------------------------------------------*/
BOOL MIi_IsExDmaBusy( u32 dmaNo )
{
u32 idx = dmaNo - MI_EXDMA_CH_MIN;
if ( idx < MI_EXDMA_CH_NUM )
{
MIExDmaChanRegs *reg = &((MIExDmaChanRegs*)REG_NDMA0SAD_ADDR)[idx];
return (BOOL)((reg->ctrl & REG_MI_NDMA0CNT_E_MASK) >> REG_MI_NDMA0CNT_E_SHIFT);
}
return FALSE;
}
/*---------------------------------------------------------------------------*
Name: MIi_WaitExDma
Description: wait while extended DMA is busy
Arguments: dmaNo : DMA channel No.
Returns: None
*---------------------------------------------------------------------------*/
void MIi_WaitExDma( u32 dmaNo )
{
u32 idx = dmaNo - MI_EXDMA_CH_MIN;
if ( idx < MI_EXDMA_CH_NUM )
{
MIExDmaChanRegs *reg = &((MIExDmaChanRegs*)REG_NDMA0SAD_ADDR)[idx];
while (reg->ctrl & REG_MI_NDMA0CNT_E_MASK)
{
}
}
}
/*---------------------------------------------------------------------------*
Name: MIi_StopDma
Description: stop extended DMA
Arguments: dmaNo : DMA channel No.
Returns: None
*---------------------------------------------------------------------------*/
void MIi_StopExDma( u32 dmaNo )
{
MIi_StopExDmaAsync( dmaNo );
MIi_WaitExDma( dmaNo );
}
/*---------------------------------------------------------------------------*
Name: MIi_StopDmaAsync
Description: stop extended DMA
async version
Arguments: dmaNo : DMA channel No.
Returns: None
*---------------------------------------------------------------------------*/
void MIi_StopExDmaAsync( u32 dmaNo )
{
OSIntrMode enabled = OS_DisableInterrupts();
u32 idx = dmaNo - MI_EXDMA_CH_MIN;
if ( idx < MI_EXDMA_CH_NUM )
{
MIExDmaChanRegs *reg = &((MIExDmaChanRegs*)REG_NDMA0SAD_ADDR)[idx];
reg->ctrl &= ~MI_NDMA_ENABLE;
}
(void)OS_RestoreInterrupts(enabled);
}

View File

@ -11,10 +11,10 @@
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev:$
$Author:$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include <twl/os/ARM9/os_cache_tag.h>
#include <firm/os/ARM9/os_cache_tag.h>
#include <nitro/code32.h>

View File

@ -18,7 +18,7 @@
#include <firm/mi.h>
#include <firm/pxi.h>
#ifdef SDK_ARM9
#include <twl/os/ARM9/os_cache_tag.h>
#include <firm/os/ARM9/os_cache_tag.h>
#else
#include <twl/aes/ARM7/lo.h>
#endif

View File

@ -765,6 +765,11 @@ extern GCDWork GCDi_Work[2];
extern const BLOWFISH_CTX GCDi_BlowfishInitTableDS;
extern const BLOWFISH_CTX GCDi_BlowfishInitTableGCDFIRM;
// ※SecondarySlotのカードロックが用意されていないので、とりあえずPrimarySlotと共用で。
s32 OS_LockExCard( u16 lockID );
s32 OS_UnlockExCard( u16 lockID );
#ifdef __cplusplus
} /* extern "C" */

View File

@ -26,24 +26,67 @@
extern "C" {
#endif
#define PXI_FIFO_TAG_GCD PXI_FIFO_TAG_USER_1
#define reg_MI_MC_DET (*(REGType8v *) REG_MC_OFFSET)
#define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC_OFFSET + 1 ) )
#define REG_MCCHAT_OFFSET 0x4012
#define REG_MCCHAT_ADDR (HW_REG_BASE + REG_MCCHAT_OFFSET)
#define reg_MI_MCCHAT (*( REGType16v *) REG_MCCHAT_ADDR)
/* MCSCRA_L */
#define REG_MCSCRA_L_OFFSET 0x1b0
#define REG_MCSCRA_L_ADDR (HW_REG_BASE + REG_MCSCRA_L_OFFSET)
#define reg_MI_MCSCRA_L (*( REGType32v *) REG_MCSCRA_L_ADDR)
/* MCSCRB_L */
#define REG_MCSCRB_L_OFFSET 0x1b4
#define REG_MCSCRB_L_ADDR (HW_REG_BASE + REG_MCSCRB_L_OFFSET)
#define reg_MI_MCSCRB_L (*( REGType32v *) REG_MCSCRB_L_ADDR)
/* MCSCRA_H */
#define REG_MCSCRA_H_OFFSET 0x1b8
#define REG_MCSCRA_H_ADDR (HW_REG_BASE + REG_MCSCRA_H_OFFSET)
#define reg_MI_MCSCRA_H (*( REGType8v *) REG_MCSCRA_H_ADDR)
/* MCSCRB_H */
#define REG_MCSCRB_H_OFFSET 0x1ba
#define REG_MCSCRB_H_ADDR (HW_REG_BASE + REG_MCSCRB_H_OFFSET)
#define reg_MI_MCSCRB_H (*( REGType8v *) REG_MCSCRB_H_ADDR)
#define REG_MI_MCCNT1_A_CSC_SHIFT 22
#define REG_MI_MCCNT1_A_CSC_SIZE 1
#define REG_MI_MCCNT1_A_CSC_MASK 0x00400000
#define REG_MI_MC_SWP_E_SHIFT 7
#define REG_MI_MC_SWP_E_SIZE 1
#define REG_MI_MC_SWP_E_MASK 0x80
typedef enum
{
GCD_PAGE_0 = 0x0UL << REG_MI_MCCNT1_PC_SHIFT,
GCD_PAGE_1 = 0x1UL << REG_MI_MCCNT1_PC_SHIFT,
GCD_PAGE_2 = 0x2UL << REG_MI_MCCNT1_PC_SHIFT,
GCD_PAGE_4 = 0x3UL << REG_MI_MCCNT1_PC_SHIFT,
GCD_PAGE_8 = 0x4UL << REG_MI_MCCNT1_PC_SHIFT,
GCD_PAGE_16 = 0x5UL << REG_MI_MCCNT1_PC_SHIFT,
GCD_PAGE_32 = 0x6UL << REG_MI_MCCNT1_PC_SHIFT,
GCD_PAGE_STAT = 0x7UL << REG_MI_MCCNT1_PC_SHIFT
GCD_PAGE_0 = 0x0UL << REG_MI_MCCNT1_A_PC_SHIFT,
GCD_PAGE_1 = 0x1UL << REG_MI_MCCNT1_A_PC_SHIFT,
GCD_PAGE_2 = 0x2UL << REG_MI_MCCNT1_A_PC_SHIFT,
GCD_PAGE_4 = 0x3UL << REG_MI_MCCNT1_A_PC_SHIFT,
GCD_PAGE_8 = 0x4UL << REG_MI_MCCNT1_A_PC_SHIFT,
GCD_PAGE_16 = 0x5UL << REG_MI_MCCNT1_A_PC_SHIFT,
GCD_PAGE_32 = 0x6UL << REG_MI_MCCNT1_A_PC_SHIFT,
GCD_PAGE_STAT = 0x7UL << REG_MI_MCCNT1_A_PC_SHIFT
}
GCDPageCount;
typedef enum
{
GCD_CKT_150NS = 0x0UL << REG_MI_MCCNT1_CT_SHIFT,
GCD_CKT_240NS = 0x1UL << REG_MI_MCCNT1_CT_SHIFT
GCD_CKT_150NS = 0x0UL << REG_MI_MCCNT1_A_CT_SHIFT,
GCD_CKT_240NS = 0x1UL << REG_MI_MCCNT1_A_CT_SHIFT
}
GCDClockType;
@ -56,15 +99,20 @@ GCDRw;
typedef enum
{
GCD_RESET_LO = 0x0UL << REG_MI_MCCNT1_RESB_SHIFT,
GCD_RESET_HI = 0x1UL << REG_MI_MCCNT1_RESB_SHIFT
GCD_RESET_LO = 0x0UL << REG_MI_MCCNT1_A_RESB_SHIFT,
GCD_RESET_HI = 0x1UL << REG_MI_MCCNT1_A_RESB_SHIFT
}
GCDReset;
typedef enum
{
GCD_LTCK_DISABLE = 0x0UL << REG_MI_MCCNT1_TRM_SHIFT,
GCD_LTCK_ENABLE = 0x1UL << REG_MI_MCCNT1_TRM_SHIFT
#ifdef SDK_ARM9
GCD_LTCK_DISABLE = 0x0UL << REG_MI_MCCNT1_A_TRM_SHIFT,
GCD_LTCK_ENABLE = 0x1UL << REG_MI_MCCNT1_A_TRM_SHIFT
#else
GCD_LTCK_DISABLE = 0x0UL << REG_MI_MCCNT1_A_RTM_SHIFT,
GCD_LTCK_ENABLE = 0x1UL << REG_MI_MCCNT1_A_RTM_SHIFT
#endif
}
GCDLtClkEnable;
@ -76,7 +124,6 @@ typedef struct
}
NGCDCtrlRegs;
// PXIでの通信プロトコル関連定義
#define GCD_PXI_COMMAND_MASK 0x0000003f // 開始ワードのコマンド部
#define GCD_PXI_COMMAND_SHIFT 0
@ -286,8 +333,8 @@ void GCDi_Disable( GCDSlot slot );
static inline BOOL GCD_IsExisting( GCDSlot slot )
{
s32 ofs = (GCD_GetPrimarySlot() ^ slot) * 4;
s32 r = ~reg_MI_MC_DET & (REG_MI_MC_DET_DET1_MASK << ofs);
return r >> (REG_MI_MC_DET_DET1_SHIFT + ofs);
s32 r = ~reg_MI_MC_DET & (REG_MI_MC_SL1_CDET_MASK << ofs);
return r >> (REG_MI_MC_SL1_CDET_SHIFT + ofs);
}
/*---------------------------------------------------------------------------*
@ -302,8 +349,8 @@ static inline BOOL GCD_IsExisting( GCDSlot slot )
static inline void GCD_SetDetectMode( GCDSlot slot, u32 mode )
{
s32 ofs = (GCD_GetPrimarySlot() ^ slot) * 4;
s32 others = reg_MI_MC_DET & ~(REG_MI_MC_DET_MODE1_MASK << ofs);
reg_MI_MC_DET = (u8)((mode << (REG_MI_MC_DET_MODE1_SHIFT + ofs)) | others);
s32 others = reg_MI_MC_DET & ~(REG_MI_MC_SL1_MODE_MASK << ofs);
reg_MI_MC_DET = (u8)((mode << (REG_MI_MC_SL1_MODE_SHIFT + ofs)) | others);
}
/*---------------------------------------------------------------------------*
@ -318,8 +365,8 @@ static inline void GCD_SetDetectMode( GCDSlot slot, u32 mode )
static inline u8 GCD_GetDetectMode( GCDSlot slot )
{
s32 ofs = (GCD_GetPrimarySlot() ^ slot) * 4;
return (u8)((reg_MI_MC_DET & (REG_MI_MC_DET_MODE1_MASK << ofs))
>> (REG_MI_MC_DET_MODE1_SHIFT + ofs));
return (u8)((reg_MI_MC_DET & (REG_MI_MC_SL1_MODE_MASK << ofs))
>> (REG_MI_MC_SL1_MODE_SHIFT + ofs));
}
/*---------------------------------------------------------------------------*
@ -333,7 +380,7 @@ static inline u8 GCD_GetDetectMode( GCDSlot slot )
*---------------------------------------------------------------------------*/
static inline void GCD_SetChatCounter( u16 value )
{
reg_MI_MC_CHT = value;
reg_MI_MCCHAT = value;
}
/*---------------------------------------------------------------------------*
@ -424,7 +471,7 @@ static inline u32 GCDi_SelectIrqMask( GCDSlot slot, u32 base_mask )
case OS_IE_CARD_IREQ:
mask = OS_IE_CARD_B_IREQ;
break;
case OS_IE_CARD_DET:
case OS_IE_CARD_A_DET:
mask = OS_IE_CARD_B_DET;
break;
}

View File

@ -20,6 +20,7 @@
#include <twl/mi.h>
#include <firm/mi/exDma.h>
#include <firm/mi/mainMemory.h>
#ifdef SDK_ARM9
#include <firm/mi/ARM9/mi_loader.h>

203
include/firm/mi/exDma.h Normal file
View File

@ -0,0 +1,203 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - libraries - mi
File: exDma.h
Copyright 2007 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 TWL_MI_EXDMA_H_
#define TWL_MI_EXDMA_H_
#include <twl/misc.h>
#include <twl/types.h>
#include <twl/memorymap.h>
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------
//---- registers
typedef struct
{
const void * src;
void * dest;
u32 totalCount;
u32 wordCount;
u32 blockInterval;
u32 fillData;
u32 ctrl;
}
t_MIExDmaChanRegs;
typedef volatile t_MIExDmaChanRegs MIExDmaChanRegs;
//================================================================================
// DMA control definition
//================================================================================
//---- DMA channel No.
#define MI_EXDMA_CH_MIN 4
#define MI_EXDMA_CH_MAX 7
#define MI_EXDMA_CH_NUM 4
//================================================================================
// DMA WAIT
//================================================================================
/*---------------------------------------------------------------------------*
Name: MIi_IsExDmaBusy
Description: check whether extended DMA is busy or not
Arguments: dmaNo : DMA channel No.
Returns: TRUE if extended DMA is busy, FALSE if not
*---------------------------------------------------------------------------*/
BOOL MIi_IsExDmaBusy( u32 dmaNo );
/*---------------------------------------------------------------------------*
Name: MIi_WaitExDma
Description: wait while extended DMA is busy
Arguments: dmaNo : DMA channel No.
Returns: None
*---------------------------------------------------------------------------*/
void MIi_WaitExDma( u32 dmaNo );
/*---------------------------------------------------------------------------*
Name: MIi_StopExDma
Description: stop extended DMA
Arguments: dmaNo : DMA channel No.
Returns: None
*---------------------------------------------------------------------------*/
void MIi_StopExDma( u32 dmaNo );
/*---------------------------------------------------------------------------*
Name: MIi_StopDmaAsync
Description: stop extended DMA
async version
Arguments: dmaNo : DMA channel No.
Returns: None
*---------------------------------------------------------------------------*/
void MIi_StopExDmaAsync( u32 dmaNo );
//================================================================================
// memory operation using DMA
//================================================================================
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaSendAsync
Description: send data with DMA
sync version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaSendAsync( u32 dmaNo, const void *src, void *dest, u32 size );
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaRecvAsync
Description: receive data with DMA
sync version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaRecvAsync( u32 dmaNo, const void *src, void *dest, u32 size );
//----------------- internel functions -------------------
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaSendAsyncCore
Description: send data with DMA
async version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
blockSize : block size
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaSendAsyncCore( u32 dmaNo, const void *src, void *dest, u32 size, u32 oneShotSize,
u32 blockSize, u32 interval, u32 prescale,
u32 continuous, u32 srcRld, u32 destRld,
u32 timing );
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaRecvAsyncCore
Description: receive data with DMA
async version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
blockSize : block size
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaRecvAsyncCore( u32 dmaNo, const void *src, void *dest, u32 size, u32 oneShotSize,
u32 blockSize, u32 interval, u32 prescale,
u32 continuous, u32 srcRld, u32 destRld,
u32 timing );
/*---------------------------------------------------------------------------*
Name: MIi_SetExDmaParams
Description: set DMA
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
blockSize : block size
Returns: None
*---------------------------------------------------------------------------*/
void MIi_SetExDmaParams( u32 dmaNo, const void *src, void *dest, u32 size, u32 oneShotSize,
u32 blockSize, u32 interval, u32 prescale,
u32 continuous, u32 srcRld, u32 destRld,
u32 timing,
u32 fillData, u32 srcDir, u32 destDir);
#ifdef __cplusplus
} /* extern "C" */
#endif
/* TWL_MI_EXDMA_H_ */
#endif

View File

@ -18,13 +18,12 @@
#ifndef FIRM_OS_H_
#define FIRM_OS_H_
#include <twl/os.h>
#include <firm/misc.h>
#include <firm/os/common/init.h>
#include <firm/os/common/tick_brom.h>
#include <firm/os/common/boot.h>
#include <firm/os/common/systemCall.h>
#include <firm/os/common/system.h>
#ifdef __cplusplus
extern "C" {

View File

@ -18,8 +18,6 @@
#ifndef FIRM_OS_SYSTEMCALL_H_
#define FIRM_OS_SYSTEMCALL_H_
#include <twl/os/common/systemCall.h>
#ifdef __cplusplus
extern "C" {
#endif
@ -86,6 +84,67 @@ typedef enum
}
OSSvcID;
int SVC_InitSignHeap(
int acmemory_pool[3],
void* heap,
unsigned int length
);
int SVC_DecryptoRSA(
const void* acmemory_pool,
const void* pData,
unsigned int* len // 出力サイズ
);
int SVC_DecryptoSign(
const void* acmemory_pool,
void* buffer, // 出力領域
const void* sgn_ptr, // データへのポインタ
const void* key_ptr // キーへのポインタ
);
int SVC_DecryptoSignDER(
const void* acmemory_pool,
void* buffer, // 出力領域
const void* sgn_ptr, // データへのポインタ
const void* key_ptr // キーへのポインタ
);
void SVC_SHA1Init( void *c );
void SVC_SHA1Update( void *c, const unsigned char *data, unsigned long len );
void SVC_SHA1GetHash( unsigned char *md, void *c );
int SVC_CalcSHA1(
void* buffer, // 出力領域
const void* buf, // データへのポインタ
unsigned int len // データの長さ
);
int SVC_CompareSHA1(
const void* decedHash, // SVC_Decrypto*の出力
const void* digest // SVC_GetDigestの出力
);
int SVC_RandomSHA1(
void* dest_ptr, // 出力データへのポインタ
unsigned int dest_len, // 出力データの長さ
const void* src_ptr, // 入力データへのポインタ
unsigned int src_len // 入力データの長さ
);
int SVC_UncompressLZ8FromDevice( const void* srcp,
void* destp,
const void* paramp,
const MIReadStreamCallbacks *callbacks
);
int SVC_UncompressLZ16FromDeviceIMG( const void* srcp,
void* destp,
const void* paramp,
const MIReadStreamCallbacks *callbacks
);
#ifdef __cplusplus
} /* extern "C" */

View File

@ -1,151 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - OS - include
File: os_cache_tag.h
Copyright 2007 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 TWL_OS_CACHE_TAG_H_
#define TWL_OS_CACHE_TAG_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <twl/misc.h>
#include <twl/types.h>
//===========================================================================
// DATA CACHE (for specified range)
//===========================================================================
/*---------------------------------------------------------------------------*
Name: DC_ClearTagAll
Description: clear tag in data cache
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
void DC_ClearTagAll( void );
/*---------------------------------------------------------------------------*
Name: DC_ClearDataAll
Description: clear data in data cache
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
void DC_ClearDataAll( void );
/*---------------------------------------------------------------------------*
Name: DC_FillTagAll
Description: clear tag in data cache
Arguments: data : fill data
Returns: None.
*---------------------------------------------------------------------------*/
void DC_FillTagAll( u32 data );
/*---------------------------------------------------------------------------*
Name: DC_FillDataAll
Description: fill data in data cache
Arguments: data : fill data
Returns: None.
*---------------------------------------------------------------------------*/
void DC_FillDataAll( u32 data );
/*---------------------------------------------------------------------------*
Name: DC_GetTagAndDataAll
Description: get tag and data in data cache
Arguments: tag tag address
data data address
Returns: None.
*---------------------------------------------------------------------------*/
void DC_GetTagAndDataAll( void* tag, void* data );
//===========================================================================
// INSTRUCTION CACHE
//===========================================================================
/*---------------------------------------------------------------------------*
Name: IC_ClearTagAll
Description: clear tag in instruction cache
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
void IC_ClearTagAll( void );
/*---------------------------------------------------------------------------*
Name: IC_ClearInstructionAll
Description: clear instruction in instruction cache
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
void IC_ClearInstructionAll( void );
/*---------------------------------------------------------------------------*
Name: IC_FillTagAll
Description: fill tag in instruction cache
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
void IC_FillTagAll( u32 data );
/*---------------------------------------------------------------------------*
Name: IC_FillInstructionAll
Description: fill instruction in instruction cache
Arguments: data : fill data
Returns: None.
*---------------------------------------------------------------------------*/
void IC_FillInstructionAll( u32 data );
/*---------------------------------------------------------------------------*
Name: IC_GetTagAndInstructionAll
Description: get tag and instruction in instruction cache
Arguments: tag tag address
inst instruction address
Returns: None.
*---------------------------------------------------------------------------*/
void IC_GetTagAndInstructionAll( void* tag, void* inst );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* TWL_OS_CACHE_TAG_H_ */
#endif

View File

@ -1,93 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - OS - include
File: systemCall.h
Copyright 2007 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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef TWL_OS_SYSTEMCALL_H_
#define TWL_OS_SYSTEMCALL_H_
#ifdef __cplusplus
extern "C" {
#endif
int SVC_InitSignHeap(
int acmemory_pool[3],
void* heap,
unsigned int length
);
int SVC_DecryptoRSA(
const void* acmemory_pool,
const void* pData,
unsigned int* len // 出力サイズ
);
int SVC_DecryptoSign(
const void* acmemory_pool,
void* buffer, // 出力領域
const void* sgn_ptr, // データへのポインタ
const void* key_ptr // キーへのポインタ
);
int SVC_DecryptoSignDER(
const void* acmemory_pool,
void* buffer, // 出力領域
const void* sgn_ptr, // データへのポインタ
const void* key_ptr // キーへのポインタ
);
void SVC_SHA1Init( void *c );
void SVC_SHA1Update( void *c, const unsigned char *data, unsigned long len );
void SVC_SHA1GetHash( unsigned char *md, void *c );
int SVC_CalcSHA1(
void* buffer, // 出力領域
const void* buf, // データへのポインタ
unsigned int len // データの長さ
);
int SVC_CompareSHA1(
const void* decedHash, // SVC_Decrypto*の出力
const void* digest // SVC_GetDigestの出力
);
int SVC_RandomSHA1(
void* dest_ptr, // 出力データへのポインタ
unsigned int dest_len, // 出力データの長さ
const void* src_ptr, // 入力データへのポインタ
unsigned int src_len // 入力データの長さ
);
int SVC_UncompressLZ8FromDevice( const void* srcp,
void* destp,
const void* paramp,
const MIReadStreamCallbacks *callbacks
);
int SVC_UncompressLZ16FromDeviceIMG( const void* srcp,
void* destp,
const void* paramp,
const MIReadStreamCallbacks *callbacks
);
#ifdef __cplusplus
} /* extern "C" */
#endif
/* TWL_OS_SYSTEMCALL_H_ */
#endif