diff options
Diffstat (limited to 'drivers/staging/keucr/smilmain.c')
| -rw-r--r-- | drivers/staging/keucr/smilmain.c | 197 | 
1 files changed, 86 insertions, 111 deletions
diff --git a/drivers/staging/keucr/smilmain.c b/drivers/staging/keucr/smilmain.c index 2786808fde9..42ec8a669ad 100644 --- a/drivers/staging/keucr/smilmain.c +++ b/drivers/staging/keucr/smilmain.c @@ -4,70 +4,45 @@  #include "smcommon.h"  #include "smil.h" -int         Check_D_LogCHS(WORD *, BYTE *, BYTE *); -void        Initialize_D_Media(void); -void        PowerOff_D_Media(void); -int         Check_D_MediaPower(void); -int         Check_D_MediaExist(void); -int         Check_D_MediaWP(void); -int         Check_D_MediaFmt(struct us_data *); -int         Check_D_MediaFmtForEraseAll(struct us_data *); -int         Conv_D_MediaAddr(struct us_data *, DWORD); -int         Inc_D_MediaAddr(struct us_data *); -int         Check_D_FirstSect(void); -int         Check_D_LastSect(void); -int         Media_D_ReadOneSect(struct us_data *, WORD, BYTE *); -int         Media_D_WriteOneSect(struct us_data *, WORD, BYTE *); -int         Media_D_CopyBlockHead(struct us_data *); -int         Media_D_CopyBlockTail(struct us_data *); -int         Media_D_EraseOneBlock(void); -int         Media_D_EraseAllBlock(void); - -int  Copy_D_BlockAll(struct us_data *, DWORD); -int  Copy_D_BlockHead(struct us_data *); -int  Copy_D_BlockTail(struct us_data *); -int  Reassign_D_BlockHead(struct us_data *); - -int  Assign_D_WriteBlock(void); -int  Release_D_ReadBlock(struct us_data *); -int  Release_D_WriteBlock(struct us_data *); -int  Release_D_CopySector(struct us_data *); - -int  Copy_D_PhyOneSect(struct us_data *); -int  Read_D_PhyOneSect(struct us_data *, WORD, BYTE *); -int  Write_D_PhyOneSect(struct us_data *, WORD, BYTE *); -int  Erase_D_PhyOneBlock(struct us_data *); - -int  Set_D_PhyFmtValue(struct us_data *); -int  Search_D_CIS(struct us_data *); -int  Make_D_LogTable(struct us_data *); -void Check_D_BlockIsFull(void); - -int  MarkFail_D_PhyOneBlock(struct us_data *); - -DWORD ErrXDCode; -DWORD ErrCode; -static BYTE  WorkBuf[SECTSIZE]; -static BYTE  Redundant[REDTSIZE]; -static BYTE  WorkRedund[REDTSIZE]; -/* 128 x 1000, Log2Phy[MAX_ZONENUM][MAX_LOGBLOCK]; */ -static WORD  *Log2Phy[MAX_ZONENUM]; -static BYTE  Assign[MAX_ZONENUM][MAX_BLOCKNUM / 8]; -static WORD  AssignStart[MAX_ZONENUM]; -WORD  ReadBlock; -WORD  WriteBlock; -DWORD MediaChange; -static DWORD SectCopyMode; +static int         Conv_D_MediaAddr(struct us_data *, u32); +static int         Inc_D_MediaAddr(struct us_data *); +static int         Media_D_ReadOneSect(struct us_data *, u16, u8 *); -/* BIT Control Macro */ -static BYTE BitData[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; -#define Set_D_Bit(a, b)    (a[(BYTE)((b) / 8)] |= BitData[(b) % 8]) -#define Clr_D_Bit(a, b)    (a[(BYTE)((b) / 8)] &= ~BitData[(b) % 8]) -#define Chk_D_Bit(a, b)    (a[(BYTE)((b) / 8)] & BitData[(b) % 8]) +static int  Copy_D_BlockAll(struct us_data *, u32); + +static int  Assign_D_WriteBlock(void); +static int  Release_D_ReadBlock(struct us_data *); +static int  Release_D_WriteBlock(struct us_data *); +static int  Release_D_CopySector(struct us_data *); + +static int  Copy_D_PhyOneSect(struct us_data *); +static int  Read_D_PhyOneSect(struct us_data *, u16, u8 *); +static int  Erase_D_PhyOneBlock(struct us_data *); + +static int  Set_D_PhyFmtValue(struct us_data *); +static int  Search_D_CIS(struct us_data *); +static int  Make_D_LogTable(struct us_data *); -BYTE     IsSSFDCCompliance; -BYTE     IsXDCompliance; +static int  MarkFail_D_PhyOneBlock(struct us_data *); +static u32 ErrCode; +static u8  WorkBuf[SECTSIZE]; +static u8  Redundant[REDTSIZE]; +static u8  WorkRedund[REDTSIZE]; +/* 128 x 1000, Log2Phy[MAX_ZONENUM][MAX_LOGBLOCK]; */ +static u16  *Log2Phy[MAX_ZONENUM]; +static u8  Assign[MAX_ZONENUM][MAX_BLOCKNUM / 8]; +static u16  AssignStart[MAX_ZONENUM]; +u16  ReadBlock; +u16  WriteBlock; +u32 MediaChange; +static u32 SectCopyMode; + +/* BIT Control Macro */ +static u8 BitData[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; +#define Set_D_Bit(a, b)    (a[(u8)((b) / 8)] |= BitData[(b) % 8]) +#define Clr_D_Bit(a, b)    (a[(u8)((b) / 8)] &= ~BitData[(b) % 8]) +#define Chk_D_Bit(a, b)    (a[(u8)((b) / 8)] & BitData[(b) % 8])  /* ----- SM_FreeMem() ------------------------------------------------- */  int SM_FreeMem(void) @@ -87,9 +62,9 @@ int SM_FreeMem(void)  /* SmartMedia Read/Write/Erase Function */  /* ----- Media_D_ReadSector() ------------------------------------------- */ -int Media_D_ReadSector(struct us_data *us, DWORD start, WORD count, BYTE *buf) +int Media_D_ReadSector(struct us_data *us, u32 start, u16 count, u8 *buf)  { -	WORD len, bn; +	u16 len, bn;  	if (Conv_D_MediaAddr(us, start))  		return ErrCode; @@ -122,9 +97,9 @@ int Media_D_ReadSector(struct us_data *us, DWORD start, WORD count, BYTE *buf)  }  /* here */  /* ----- Media_D_CopySector() ------------------------------------------ */ -int Media_D_CopySector(struct us_data *us, DWORD start, WORD count, BYTE *buf) +int Media_D_CopySector(struct us_data *us, u32 start, u16 count, u8 *buf)  { -	WORD len, bn; +	u16 len, bn;  	/* pr_info("Media_D_CopySector !!!\n"); */  	if (Conv_D_MediaAddr(us, start)) @@ -166,23 +141,6 @@ int Media_D_CopySector(struct us_data *us, DWORD start, WORD count, BYTE *buf)  	return NO_ERROR;  } -/* ----- Release_D_CopySector() ------------------------------------------ */ -int Release_D_CopySector(struct us_data *us) -{ -	Log2Phy[Media.Zone][Media.LogBlock] = WriteBlock; -	Media.PhyBlock = ReadBlock; - -	if (Media.PhyBlock == NO_ASSIGN) { -		Media.PhyBlock = WriteBlock; -		return SMSUCCESS; -	} - -	Clr_D_Bit(Assign[Media.Zone], Media.PhyBlock); -	Media.PhyBlock = WriteBlock; - -	return SMSUCCESS; -} -  /* SmartMedia Physical Format Test Subroutine */  /* ----- Check_D_MediaFmt() --------------------------------------------- */  int Check_D_MediaFmt(struct us_data *us) @@ -209,14 +167,31 @@ int Check_D_MediaFmt(struct us_data *us)  	return SMSUCCESS;  } +/* ----- Release_D_CopySector() ------------------------------------------ */ +static int Release_D_CopySector(struct us_data *us) +{ +	Log2Phy[Media.Zone][Media.LogBlock] = WriteBlock; +	Media.PhyBlock = ReadBlock; + +	if (Media.PhyBlock == NO_ASSIGN) { +		Media.PhyBlock = WriteBlock; +		return SMSUCCESS; +	} + +	Clr_D_Bit(Assign[Media.Zone], Media.PhyBlock); +	Media.PhyBlock = WriteBlock; + +	return SMSUCCESS; +} +  /* SmartMedia Physical Address Control Subroutine */  /* ----- Conv_D_MediaAddr() --------------------------------------------- */ -int Conv_D_MediaAddr(struct us_data *us, DWORD addr) +static int Conv_D_MediaAddr(struct us_data *us, u32 addr)  { -	DWORD temp; +	u32 temp;  	temp           = addr / Ssfdc.MaxSectors; -	Media.Zone     = (BYTE) (temp / Ssfdc.MaxLogBlocks); +	Media.Zone     = (u8) (temp / Ssfdc.MaxLogBlocks);  	if (Log2Phy[Media.Zone] == NULL) {  		if (Make_D_LogTable(us)) { @@ -225,8 +200,8 @@ int Conv_D_MediaAddr(struct us_data *us, DWORD addr)  		}  	} -	Media.Sector   = (BYTE) (addr % Ssfdc.MaxSectors); -	Media.LogBlock = (WORD) (temp % Ssfdc.MaxLogBlocks); +	Media.Sector   = (u8) (addr % Ssfdc.MaxSectors); +	Media.LogBlock = (u16) (temp % Ssfdc.MaxLogBlocks);  	if (Media.Zone < Ssfdc.MaxZones) {  		Clr_D_RedundantData(Redundant); @@ -240,9 +215,9 @@ int Conv_D_MediaAddr(struct us_data *us, DWORD addr)  }  /* ----- Inc_D_MediaAddr() ---------------------------------------------- */ -int Inc_D_MediaAddr(struct us_data *us) +static int Inc_D_MediaAddr(struct us_data *us)  { -	WORD        LogBlock = Media.LogBlock; +	u16        LogBlock = Media.LogBlock;  	if (++Media.Sector < Ssfdc.MaxSectors)  		return SMSUCCESS; @@ -290,9 +265,9 @@ int Inc_D_MediaAddr(struct us_data *us)  /* SmartMedia Read/Write Subroutine with Retry */  /* ----- Media_D_ReadOneSect() ------------------------------------------ */ -int Media_D_ReadOneSect(struct us_data *us, WORD count, BYTE *buf) +static int Media_D_ReadOneSect(struct us_data *us, u16 count, u8 *buf)  { -	DWORD err, retry; +	u32 err, retry;  	if (!Read_D_PhyOneSect(us, count, buf))  		return SMSUCCESS; @@ -334,9 +309,9 @@ int Media_D_ReadOneSect(struct us_data *us, WORD count, BYTE *buf)  /* SmartMedia Physical Sector Data Copy Subroutine */  /* ----- Copy_D_BlockAll() ---------------------------------------------- */ -int Copy_D_BlockAll(struct us_data *us, DWORD mode) +static int Copy_D_BlockAll(struct us_data *us, u32 mode)  { -	BYTE sect; +	u8 sect;  	sect = Media.Sector; @@ -371,7 +346,7 @@ int Copy_D_BlockAll(struct us_data *us, DWORD mode)  /* SmartMedia Physical Block Assign/Release Subroutine */  /* ----- Assign_D_WriteBlock() ------------------------------------------ */ -int Assign_D_WriteBlock(void) +static int Assign_D_WriteBlock(void)  {  	ReadBlock = Media.PhyBlock; @@ -404,9 +379,9 @@ int Assign_D_WriteBlock(void)  }  /* ----- Release_D_ReadBlock() ------------------------------------------ */ -int Release_D_ReadBlock(struct us_data *us) +static int Release_D_ReadBlock(struct us_data *us)  { -	DWORD mode; +	u32 mode;  	mode = SectCopyMode;  	SectCopyMode = COMPLETED; @@ -438,7 +413,7 @@ int Release_D_ReadBlock(struct us_data *us)  }  /* ----- Release_D_WriteBlock() ----------------------------------------- */ -int Release_D_WriteBlock(struct us_data *us) +static int Release_D_WriteBlock(struct us_data *us)  {  	SectCopyMode = COMPLETED;  	Media.PhyBlock = WriteBlock; @@ -452,12 +427,12 @@ int Release_D_WriteBlock(struct us_data *us)  /* SmartMedia Physical Sector Data Copy Subroutine */  /* ----- Copy_D_PhyOneSect() -------------------------------------------- */ -int Copy_D_PhyOneSect(struct us_data *us) +static int Copy_D_PhyOneSect(struct us_data *us)  {  	int           i; -	DWORD  err, retry; +	u32  err, retry; -	/* pr_info("Copy_D_PhyOneSect --- Secotr = %x\n", Media.Sector); */ +	/* pr_info("Copy_D_PhyOneSect --- Sector = %x\n", Media.Sector); */  	if (ReadBlock != NO_ASSIGN) {  		Media.PhyBlock = ReadBlock;  		for (retry = 0; retry < 2; retry++) { @@ -529,10 +504,10 @@ int Copy_D_PhyOneSect(struct us_data *us)  /* SmartMedia Physical Sector Read/Write/Erase Subroutine */  /* ----- Read_D_PhyOneSect() -------------------------------------------- */ -int Read_D_PhyOneSect(struct us_data *us, WORD count, BYTE *buf) +static int Read_D_PhyOneSect(struct us_data *us, u16 count, u8 *buf)  {  	int           i; -	DWORD  retry; +	u32  retry;  	if (Media.PhyBlock == NO_ASSIGN) {  		for (i = 0; i < SECTSIZE; i++) @@ -580,7 +555,7 @@ int Read_D_PhyOneSect(struct us_data *us, WORD count, BYTE *buf)  }  /* ----- Erase_D_PhyOneBlock() ------------------------------------------ */ -int Erase_D_PhyOneBlock(struct us_data *us) +static int Erase_D_PhyOneBlock(struct us_data *us)  {  	if (Ssfdc_D_EraseBlock(us)) {  		ErrCode = ERR_HwError; @@ -597,7 +572,7 @@ int Erase_D_PhyOneBlock(struct us_data *us)  /* SmartMedia Physical Format Check Local Subroutine */  /* ----- Set_D_PhyFmtValue() -------------------------------------------- */ -int Set_D_PhyFmtValue(struct us_data *us) +static int Set_D_PhyFmtValue(struct us_data *us)  {  	if (Set_D_SsfdcModel(us->SM_DeviceID))  		return ERROR; @@ -606,7 +581,7 @@ int Set_D_PhyFmtValue(struct us_data *us)  }  /* ----- Search_D_CIS() ------------------------------------------------- */ -int Search_D_CIS(struct us_data *us) +static int Search_D_CIS(struct us_data *us)  {  	Media.Zone = 0;  	Media.Sector = 0; @@ -660,12 +635,12 @@ int Search_D_CIS(struct us_data *us)  }  /* ----- Make_D_LogTable() ---------------------------------------------- */ -int Make_D_LogTable(struct us_data *us) +static int Make_D_LogTable(struct us_data *us)  { -	WORD  phyblock, logblock; +	u16  phyblock, logblock;  	if (Log2Phy[Media.Zone] == NULL) { -		Log2Phy[Media.Zone] = kmalloc(MAX_LOGBLOCK * sizeof(WORD), +		Log2Phy[Media.Zone] = kmalloc(MAX_LOGBLOCK * sizeof(u16),  								GFP_KERNEL);  		/* pr_info("ExAllocatePool Zone = %x, Addr = %x\n",  				Media.Zone, Log2Phy[Media.Zone]); */ @@ -718,7 +693,7 @@ int Make_D_LogTable(struct us_data *us)  		phyblock     = Media.PhyBlock;  		logblock     = Media.LogBlock; -		Media.Sector = (BYTE)(Ssfdc.MaxSectors - 1); +		Media.Sector = (u8)(Ssfdc.MaxSectors - 1);  		if (Ssfdc_D_ReadRedtData(us, Redundant)) {  			Ssfdc_D_Reset(us); @@ -761,9 +736,9 @@ int Make_D_LogTable(struct us_data *us)  }  /* ----- MarkFail_D_PhyOneBlock() --------------------------------------- */ -int MarkFail_D_PhyOneBlock(struct us_data *us) +static int MarkFail_D_PhyOneBlock(struct us_data *us)  { -	BYTE sect; +	u8 sect;  	sect = Media.Sector;  	Set_D_FailBlock(WorkRedund);  | 
