TwlIPL/build/systemMenu_tools/common/ARM9/src/debugger_card_rom.c
kamikawa 4d3b58efc7 コミットし忘れ。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1845 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2008-07-11 00:37:41 +00:00

93 lines
3.2 KiB
C

/*---------------------------------------------------------------------------*
Project: SystemUpdater
File: debugger_card_rom.c
Copyright 2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include "debugger_card_rom.h"
/*---------------------------------------------------------------------------*/
/* constants */
#define CARD_COMMAND_ID 0x07000000
#define CARD_COMMAND_MASK 0x07000000
#define CARD_RESET_HI 0x20000000
#define CARD_COMMAND_OP_G_READID 0xB8
/*---------------------------------------------------------------------------*
Name: CARDi_GetRomFlag
Description: カードコマンドコントロールパラメータを取得
Arguments: flag カードデバイスへ発行するコマンドのタイプ
(CARD_COMMAND_PAGE / CARD_COMMAND_ID /
CARD_COMMAND_STAT / CARD_COMMAND_REFRESH)
Returns: カードコマンドコントロールパラメータ
*---------------------------------------------------------------------------*/
SDK_INLINE u32 CARDi_GetRomFlag(u32 flag)
{
u32 rom_ctrl = *(vu32 *)(HW_CARD_ROM_HEADER + 0x60);
return (u32)(flag | REG_MI_MCCNT1_START_MASK | CARD_RESET_HI | (rom_ctrl & ~CARD_COMMAND_MASK));
}
/*---------------------------------------------------------------------------*
Name: CARDi_SetRomOp
Description: カードコマンド設定
Arguments: command コマンド
offset 転送ページ数
Returns: None.
*---------------------------------------------------------------------------*/
static void CARDi_SetRomOp(u32 command, u32 offset)
{
u32 cmd1 = (u32)((offset >> 8) | (command << 24));
u32 cmd2 = (u32)((offset << 24));
// 念のため前回のROMコマンドの完了待ち。
while ((reg_MI_MCCNT1 & REG_MI_MCCNT1_START_MASK) != 0)
{
}
// マスターイネーブル。
reg_MI_MCCNT0 = (u16)(REG_MI_MCCNT0_E_MASK | REG_MI_MCCNT0_I_MASK |
(reg_MI_MCCNT0 & ~REG_MI_MCCNT0_SEL_MASK));
// コマンド設定。
reg_MI_MCCMD0 = MI_HToBE32(cmd1);
reg_MI_MCCMD1 = MI_HToBE32(cmd2);
}
/*---------------------------------------------------------------------------*
Name: CARDi_ReadRomIDCoreEx
Description: カード ID の読み出し。
Arguments: dontCare : gRD_IDの don't care ビットにセットする値
Returns: カード ID
*---------------------------------------------------------------------------*/
u32 CARDi_ReadRomIDCoreEx(u32 dontCare)
{
u8 op = CARD_COMMAND_OP_G_READID;
CARDi_SetRomOp(op, dontCare);
reg_MI_MCCNT1 = (u32)(CARDi_GetRomFlag(CARD_COMMAND_ID) & ~REG_MI_MCCNT1_L1_MASK);
while ((reg_MI_MCCNT1 & REG_MI_MCCNT1_RDY_MASK) == 0)
{
}
return reg_MI_MCD1;
}