⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbmlun.c

📁 凌阳MP3 spSPCA755yuanma
💻 C
📖 第 1 页 / 共 2 页
字号:
		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 + -