mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1845 b08762b0-b915-fc4b-9d8c-17b2551a87ff
93 lines
3.2 KiB
C
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;
|
|
}
|
|
|