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); |
