📄 usbmlun.c
字号:
else
{
//DbgPrint("NOT WP\n");
G_MLUN_Card_ucCardLock = 0;
}
}
else if (G_Card_Type == K_MEDIA_SMC)
{
UCHAR tmp;
XBYTE[0x2406] &= 0xfd;
tmp = XBYTE[0x240A];
tmp &= 0x02;
if (tmp)
{
// DbgPrint("cNOT WP\n");
G_MLUN_Card_ucCardLock = 0;
}
else
{
// DbgPrint("cWP!!!\n");
G_MLUN_Card_ucCardLock = 1;
}
}
else
{
G_MLUN_Card_ucCardLock = 0;
}
// DbgPrint("G_Card_Type = %bx\n",G_Card_Type);
DbgPrint("G_MLUN_Card_SizeMB=%d,BlockSize=%x,BlockSizeShift=%bx\n",G_MLUN_Card_SizeMB,G_Card_BlockSize,G_Card_BlockSizeShift);
//???
if (G_MLUN_Card_Present)
{
G_ucStorageType = G_Card_Type;
}
else
{
G_ucStorageType = K_MEDIA_NONE;
}
//////
G_MLUN_CurrentLUN = G_Card_Type;
G_MLUN_NextLUN = G_Card_Type;
if (G_MLUN_Card_Present)
{
#if (NANDF_OPTION == 1 && SMC_OPTION ==1)
if ((G_ucMSDC_BUILT_IN == K_MEDIA_NANDF) && (G_ucMSDC_CARD == K_MEDIA_SMC))
{
MLUN_SaveSMCData(K_MEDIA_SMC);
}
#endif
}
else
{
G_Card_Type = G_ucMSDC_BUILT_IN;
}
G_USBMSDC_ucCardLock = G_MLUN_Card_ucCardLock;
G_MLUN_CardSelected = G_Card_Type;
//*/
}
//-----------------------------------------------------------------------------
//MLUN_CheckCard
//-----------------------------------------------------------------------------
void MLUN_CheckCard(void) USING_0
{
if (G_MLUN_CardSelected == G_MLUN_NextLUN)
return;
if (G_MLUN_NextLUN == K_MEDIA_DOSRAM)
{
G_Card_Type = K_MEDIA_DOSRAM;
G_ucStorageType = G_Card_Type;
G_MLUN_CardSelected = G_Card_Type;
return;
}
if (G_MLUN_NextLUN == G_ucMSDC_BUILT_IN)
{
//SMC_MakeTable(0);
//???
if (G_MLUN_Buildin_Present)
{
G_ucStorageType = G_Card_Type;
}
else
{
G_ucStorageType = K_MEDIA_NONE;
}
#if (NANDF_OPTION == 1 && SMC_OPTION ==1)
if ((G_ucMSDC_BUILT_IN == K_MEDIA_NANDF) && (G_ucMSDC_CARD == K_MEDIA_SMC))
{
// DbgPrint("SMC-->NAND Change Card !\n");
MLUN_SaveSMCData(K_MEDIA_SMC);
MLUN_LoadSMCData(K_MEDIA_NANDF);
// DbgPrint("SMC-->NAND Change Card END!\n\n");
}
#endif
G_Card_Type = G_ucMSDC_BUILT_IN;
L2_FlashMode(G_ucMSDC_BUILT_IN,G_ucMSDC_CARD,0x01);
}
else
{
//???
if (G_MLUN_Card_Present)
{
G_ucStorageType = G_Card_Type;
}
else
{
G_ucStorageType = K_MEDIA_NONE;
}
#if (NANDF_OPTION == 1 && SMC_OPTION ==1)
if ((G_ucMSDC_BUILT_IN == K_MEDIA_NANDF) && (G_ucMSDC_CARD == K_MEDIA_SMC))
{
// DbgPrint("NAND-->SMC Change Card !\n");
MLUN_SaveSMCData(K_MEDIA_NANDF);
MLUN_LoadSMCData(K_MEDIA_SMC);
// DbgPrint("NAND-->SMC Change Card End!\n\n");
}
#endif
G_Card_Type = G_ucMSDC_CARD;
L2_FlashMode(G_ucMSDC_CARD,G_ucMSDC_BUILT_IN,0x01);
}
G_MLUN_CardSelected = G_Card_Type;
}
#if (NANDF_OPTION == 1 && SMC_OPTION ==1)
//-----------------------------------------------------------------------------
//MLUN_SaveSMCData
//-----------------------------------------------------------------------------
void MLUN_SaveSMCData(UCHAR cardType) USING_0
{
USHORT idx;
PMLUN_SAVED_XDATA pSaveGlobal;
UCHAR saveCardType;
//printf("sizeof(MLUN_SAVED_XDATA)=%d\n",(WORD)sizeof(MLUN_SAVED_XDATA));
// Save SMC globals
#if (SMC_OPTION == 1 && NANDF_OPTION ==1)
saveCardType = G_Card_Type;
G_Card_Type = cardType;
SMC_UpdateBankTableByFlash(G_Card_CurrBank, false);
G_Card_Type = saveCardType;
if (cardType == K_MEDIA_NANDF)
pSaveGlobal = (PMLUN_SAVED_XDATA)(&nand_MLUN_SAVED_XDATA);
else
pSaveGlobal = (PMLUN_SAVED_XDATA)(&smc_MLUN_SAVED_XDATA);
pSaveGlobal->mediaBehavior = G_Media_Behavior;
pSaveGlobal->smcCardTotalBank = G_Card_TotalBank;
pSaveGlobal->smcCardCurrBank = G_Card_CurrBank;
pSaveGlobal->smcCardBlackExtSize = G_Card_BlockExtSize;
pSaveGlobal->smcCardBlockWholeSize = G_Card_BlockWholeSize;
pSaveGlobal->smcCardpageperBlock = G_Card_PagePerBlock;
pSaveGlobal->smcPhysicalbanlSize = G_Card_PhysicalBankSize;
pSaveGlobal->smcAllocateTableSize = G_SMC_AllocatTableSize;
pSaveGlobal->smcEntryTAbleSize = G_SMC_EntryTableSize;
pSaveGlobal-> smcCisBlockAddr = G_SMC_CisBlockAddress;
pSaveGlobal->smcFirstCISFound = G_SMC_FirstCISFound;
pSaveGlobal->nandReserveBlockTotal = G_NAND_ReservBlockTotal;
pSaveGlobal->nandReserveBlockMax = G_NAND_ReservBlockMax;
pSaveGlobal->smcCisBlockFound = G_SMC_CisBlockFound;
pSaveGlobal->smcNewCisBlockAddr = G_SMC_NewCisBlockAddress;
#if (K_HAVE_L2)
pSaveGlobal->smcAddrMode = G_SMC_AddrMode;
#endif
pSaveGlobal->smcGoodSectorPerCard = G_SMC_GoodSectorPerCard;
pSaveGlobal->nandMakerByte = G_NANDF_Maker_Byte;
pSaveGlobal->nand3RD_Byte = G_NANDF_3RD_Byte;
pSaveGlobal->nand4TH_Byte = G_NANDF_4TH_Byte;
pSaveGlobal->nand5TH_Byte = G_NANDF_5TH_Byte;
pSaveGlobal->nandCategory = G_NANDF_Category; // 0 is old, 1 is new and SMC2_
pSaveGlobal->nandPageSize = G_NANDF_PageSize;
pSaveGlobal->nandPageExtSize = G_NANDF_PageExtSize;
pSaveGlobal->nandBlockSize = G_NANDF_BlockSize;
pSaveGlobal->nandBlockSizeShift = G_NANDF_BlockSizeShift;
for (idx = 0; idx < K_SMC_BUILD_BANK_MAP_SIZE; idx++)
pSaveGlobal->smcBuildBankMap[idx] = G_SMC_BuildBankMap[idx];
// printf(" SAVE Xdata End!\n");
#endif
}
//-----------------------------------------------------------------------------
//MLUN_LoadSMCData
//-----------------------------------------------------------------------------
void MLUN_LoadSMCData(UCHAR cardType) USING_0
{
USHORT idx;
PMLUN_SAVED_XDATA pSaveGlobal;
UCHAR saveCardType;
//printf("sizeof(MLUN_SAVED_XDATA)=%d\n",(WORD)sizeof(MLUN_SAVED_XDATA));
// Save SMC globals
#if (SMC_OPTION == 1 && NANDF_OPTION ==1)
if (cardType == K_MEDIA_NANDF)
pSaveGlobal = (PMLUN_SAVED_XDATA)(&nand_MLUN_SAVED_XDATA);
else
pSaveGlobal = (PMLUN_SAVED_XDATA)(&smc_MLUN_SAVED_XDATA);
G_Media_Behavior = pSaveGlobal->mediaBehavior;
G_Card_TotalBank = pSaveGlobal->smcCardTotalBank;
G_Card_CurrBank = pSaveGlobal->smcCardCurrBank;
G_Card_BlockExtSize = pSaveGlobal->smcCardBlackExtSize;
G_Card_BlockWholeSize = pSaveGlobal->smcCardBlockWholeSize;
G_Card_PagePerBlock = pSaveGlobal->smcCardpageperBlock;
G_Card_PhysicalBankSize = pSaveGlobal->smcPhysicalbanlSize;
G_SMC_AllocatTableSize = pSaveGlobal->smcAllocateTableSize;
G_SMC_EntryTableSize = pSaveGlobal->smcEntryTAbleSize;
G_SMC_CisBlockAddress = pSaveGlobal-> smcCisBlockAddr;
G_SMC_FirstCISFound = pSaveGlobal->smcFirstCISFound;
G_NAND_ReservBlockTotal = pSaveGlobal->nandReserveBlockTotal;
G_NAND_ReservBlockMax = pSaveGlobal->nandReserveBlockMax;
G_SMC_CisBlockFound = pSaveGlobal->smcCisBlockFound;
G_SMC_NewCisBlockAddress = pSaveGlobal->smcNewCisBlockAddr;
#if (K_HAVE_L2)
G_SMC_AddrMode = pSaveGlobal->smcAddrMode;
#endif
G_SMC_GoodSectorPerCard = pSaveGlobal->smcGoodSectorPerCard;
G_NANDF_Maker_Byte = pSaveGlobal->nandMakerByte;
G_NANDF_3RD_Byte = pSaveGlobal->nand3RD_Byte;
G_NANDF_4TH_Byte = pSaveGlobal->nand4TH_Byte;
G_NANDF_5TH_Byte = pSaveGlobal->nand5TH_Byte;
G_NANDF_Category = pSaveGlobal->nandCategory;
G_NANDF_PageSize = pSaveGlobal->nandPageSize;
G_NANDF_PageExtSize = pSaveGlobal->nandPageExtSize;
G_NANDF_BlockSize = pSaveGlobal->nandBlockSize;
G_NANDF_BlockSizeShift = pSaveGlobal->nandBlockSizeShift;
for (idx = 0; idx < K_SMC_BUILD_BANK_MAP_SIZE; idx++)
G_SMC_BuildBankMap[idx] = pSaveGlobal->smcBuildBankMap[idx];
// restore nand bank table
saveCardType = G_Card_Type;
G_Card_Type = cardType;
SMC_MakeTable(G_Card_CurrBank);
G_Card_Type = saveCardType;
#endif
}
#endif //end of nand && sme
#endif //end of define mlun
//patch4.5@richie@mlun end
#endif //end if of if MSDC2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -