diff options
Diffstat (limited to 'drivers/staging/keucr/smilsub.c')
| -rw-r--r-- | drivers/staging/keucr/smilsub.c | 200 |
1 files changed, 86 insertions, 114 deletions
diff --git a/drivers/staging/keucr/smilsub.c b/drivers/staging/keucr/smilsub.c index 346c5702f41..e981f14f3bf 100644 --- a/drivers/staging/keucr/smilsub.c +++ b/drivers/staging/keucr/smilsub.c @@ -6,45 +6,16 @@ #include "smcommon.h" #include "smil.h" -void _Set_D_SsfdcRdCmd(BYTE); -void _Set_D_SsfdcRdAddr(BYTE); -void _Set_D_SsfdcRdChip(void); -void _Set_D_SsfdcRdStandby(void); -void _Start_D_SsfdcRdHwECC(void); -void _Stop_D_SsfdcRdHwECC(void); -void _Load_D_SsfdcRdHwECC(BYTE); -void _Set_D_SsfdcWrCmd(BYTE); -void _Set_D_SsfdcWrAddr(BYTE); -void _Set_D_SsfdcWrBlock(void); -void _Set_D_SsfdcWrStandby(void); -void _Start_D_SsfdcWrHwECC(void); -void _Load_D_SsfdcWrHwECC(BYTE); -int _Check_D_SsfdcBusy(WORD); -int _Check_D_SsfdcStatus(void); -void _Reset_D_SsfdcErr(void); -void _Read_D_SsfdcBuf(BYTE *); -void _Write_D_SsfdcBuf(BYTE *); -void _Read_D_SsfdcByte(BYTE *); -void _ReadRedt_D_SsfdcBuf(BYTE *); -void _WriteRedt_D_SsfdcBuf(BYTE *); -BYTE _Check_D_DevCode(BYTE); - -void _Set_D_ECCdata(BYTE, BYTE *); -void _Calc_D_ECCdata(BYTE *); - +static u8 _Check_D_DevCode(u8); +static u32 ErrXDCode; +static u8 IsSSFDCCompliance; +static u8 IsXDCompliance; struct keucr_media_info Ssfdc; struct keucr_media_address Media; struct keucr_media_area CisArea; -static BYTE EccBuf[6]; -extern PBYTE SMHostAddr; -extern DWORD ErrXDCode; - -extern WORD ReadBlock; -extern WORD WriteBlock; - - +static u8 EccBuf[6]; #define EVEN 0 /* Even Page for 256byte/page */ #define ODD 1 /* Odd Page for 256byte/page */ @@ -53,7 +24,7 @@ extern WORD WriteBlock; /* SmartMedia Redundant buffer data Control Subroutine *----- Check_D_DataBlank() -------------------------------------------- */ -int Check_D_DataBlank(BYTE *redundant) +int Check_D_DataBlank(u8 *redundant) { char i; @@ -65,7 +36,7 @@ int Check_D_DataBlank(BYTE *redundant) } /* ----- Check_D_FailBlock() -------------------------------------------- */ -int Check_D_FailBlock(BYTE *redundant) +int Check_D_FailBlock(u8 *redundant) { redundant += REDT_BLOCK; @@ -80,7 +51,7 @@ int Check_D_FailBlock(BYTE *redundant) } /* ----- Check_D_DataStatus() ------------------------------------------- */ -int Check_D_DataStatus(BYTE *redundant) +int Check_D_DataStatus(u8 *redundant) { redundant += REDT_DATA; @@ -99,14 +70,14 @@ int Check_D_DataStatus(BYTE *redundant) } /* ----- Load_D_LogBlockAddr() ------------------------------------------ */ -int Load_D_LogBlockAddr(BYTE *redundant) +int Load_D_LogBlockAddr(u8 *redundant) { - WORD addr1, addr2; + u16 addr1, addr2; - addr1 = (WORD)*(redundant + REDT_ADDR1H)*0x0100 + - (WORD)*(redundant + REDT_ADDR1L); - addr2 = (WORD)*(redundant + REDT_ADDR2H)*0x0100 + - (WORD)*(redundant + REDT_ADDR2L); + addr1 = (u16)*(redundant + REDT_ADDR1H)*0x0100 + + (u16)*(redundant + REDT_ADDR1L); + addr2 = (u16)*(redundant + REDT_ADDR2H)*0x0100 + + (u16)*(redundant + REDT_ADDR2L); if (addr1 == addr2) if ((addr1 & 0xF000) == 0x1000) { @@ -114,7 +85,7 @@ int Load_D_LogBlockAddr(BYTE *redundant) return SMSUCCESS; } - if (hweight16((WORD)(addr1^addr2)) != 0x01) + if (hweight16((u16)(addr1^addr2)) != 0x01) return ERROR; if ((addr1 & 0xF000) == 0x1000) @@ -133,7 +104,7 @@ int Load_D_LogBlockAddr(BYTE *redundant) } /* ----- Clr_D_RedundantData() ------------------------------------------ */ -void Clr_D_RedundantData(BYTE *redundant) +void Clr_D_RedundantData(u8 *redundant) { char i; @@ -142,9 +113,9 @@ void Clr_D_RedundantData(BYTE *redundant) } /* ----- Set_D_LogBlockAddr() ------------------------------------------- */ -void Set_D_LogBlockAddr(BYTE *redundant) +void Set_D_LogBlockAddr(u8 *redundant) { - WORD addr; + u16 addr; *(redundant + REDT_BLOCK) = 0xFF; *(redundant + REDT_DATA) = 0xFF; @@ -154,20 +125,21 @@ void Set_D_LogBlockAddr(BYTE *redundant) addr++; *(redundant + REDT_ADDR1H) = *(redundant + REDT_ADDR2H) = - (BYTE)(addr / 0x0100); - *(redundant + REDT_ADDR1L) = *(redundant + REDT_ADDR2L) = (BYTE)addr; + (u8)(addr / 0x0100); + *(redundant + REDT_ADDR1L) = *(redundant + REDT_ADDR2L) = (u8)addr; } /*----- Set_D_FailBlock() ---------------------------------------------- */ -void Set_D_FailBlock(BYTE *redundant) +void Set_D_FailBlock(u8 *redundant) { char i; + for (i = 0; i < REDTSIZE; i++) - *redundant++ = (BYTE)((i == REDT_BLOCK) ? 0xF0 : 0xFF); + *redundant++ = (u8)((i == REDT_BLOCK) ? 0xF0 : 0xFF); } /* ----- Set_D_DataStaus() ---------------------------------------------- */ -void Set_D_DataStaus(BYTE *redundant) +void Set_D_DataStaus(u8 *redundant) { redundant += REDT_DATA; *redundant = 0x00; @@ -183,10 +155,10 @@ void Ssfdc_D_Reset(struct us_data *us) } /* ----- Ssfdc_D_ReadCisSect() ------------------------------------------ */ -int Ssfdc_D_ReadCisSect(struct us_data *us, BYTE *buf, BYTE *redundant) +int Ssfdc_D_ReadCisSect(struct us_data *us, u8 *buf, u8 *redundant) { - BYTE zone, sector; - WORD block; + u8 zone, sector; + u16 block; zone = Media.Zone; block = Media.PhyBlock; sector = Media.Sector; Media.Zone = 0; @@ -206,11 +178,11 @@ int Ssfdc_D_ReadCisSect(struct us_data *us, BYTE *buf, BYTE *redundant) /* 6250 CMD 1 */ /* ----- Ssfdc_D_ReadSect() --------------------------------------------- */ -int Ssfdc_D_ReadSect(struct us_data *us, BYTE *buf, BYTE *redundant) +int Ssfdc_D_ReadSect(struct us_data *us, u8 *buf, u8 *redundant) { struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; int result; - WORD addr; + u16 addr; result = ENE_LoadBinCode(us, SM_RW_PATTERN); if (result != USB_STOR_XFER_GOOD) { @@ -219,8 +191,8 @@ int Ssfdc_D_ReadSect(struct us_data *us, BYTE *buf, BYTE *redundant) return USB_STOR_TRANSPORT_ERROR; } - addr = (WORD)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(WORD)Ssfdc.MaxSectors + Media.Sector; + addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; + addr = addr*(u16)Ssfdc.MaxSectors + Media.Sector; /* Read sect data */ memset(bcb, 0, sizeof(struct bulk_cb_wrap)); @@ -229,8 +201,8 @@ int Ssfdc_D_ReadSect(struct us_data *us, BYTE *buf, BYTE *redundant) bcb->Flags = 0x80; bcb->CDB[0] = 0xF1; bcb->CDB[1] = 0x02; - bcb->CDB[4] = (BYTE)addr; - bcb->CDB[3] = (BYTE)(addr / 0x0100); + bcb->CDB[4] = (u8)addr; + bcb->CDB[3] = (u8)(addr / 0x0100); bcb->CDB[2] = Media.Zone / 2; result = ENE_SendScsiCmd(us, FDIR_READ, buf, 0); @@ -244,8 +216,8 @@ int Ssfdc_D_ReadSect(struct us_data *us, BYTE *buf, BYTE *redundant) bcb->Flags = 0x80; bcb->CDB[0] = 0xF1; bcb->CDB[1] = 0x03; - bcb->CDB[4] = (BYTE)addr; - bcb->CDB[3] = (BYTE)(addr / 0x0100); + bcb->CDB[4] = (u8)addr; + bcb->CDB[3] = (u8)(addr / 0x0100); bcb->CDB[2] = Media.Zone / 2; bcb->CDB[8] = 0; bcb->CDB[9] = 1; @@ -258,12 +230,12 @@ int Ssfdc_D_ReadSect(struct us_data *us, BYTE *buf, BYTE *redundant) } /* ----- Ssfdc_D_ReadBlock() --------------------------------------------- */ -int Ssfdc_D_ReadBlock(struct us_data *us, WORD count, BYTE *buf, - BYTE *redundant) +int Ssfdc_D_ReadBlock(struct us_data *us, u16 count, u8 *buf, + u8 *redundant) { struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; int result; - WORD addr; + u16 addr; result = ENE_LoadBinCode(us, SM_RW_PATTERN); if (result != USB_STOR_XFER_GOOD) { @@ -272,8 +244,8 @@ int Ssfdc_D_ReadBlock(struct us_data *us, WORD count, BYTE *buf, return USB_STOR_TRANSPORT_ERROR; } - addr = (WORD)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(WORD)Ssfdc.MaxSectors + Media.Sector; + addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; + addr = addr*(u16)Ssfdc.MaxSectors + Media.Sector; /* Read sect data */ memset(bcb, 0, sizeof(struct bulk_cb_wrap)); @@ -282,8 +254,8 @@ int Ssfdc_D_ReadBlock(struct us_data *us, WORD count, BYTE *buf, bcb->Flags = 0x80; bcb->CDB[0] = 0xF1; bcb->CDB[1] = 0x02; - bcb->CDB[4] = (BYTE)addr; - bcb->CDB[3] = (BYTE)(addr / 0x0100); + bcb->CDB[4] = (u8)addr; + bcb->CDB[3] = (u8)(addr / 0x0100); bcb->CDB[2] = Media.Zone / 2; result = ENE_SendScsiCmd(us, FDIR_READ, buf, 0); @@ -297,8 +269,8 @@ int Ssfdc_D_ReadBlock(struct us_data *us, WORD count, BYTE *buf, bcb->Flags = 0x80; bcb->CDB[0] = 0xF1; bcb->CDB[1] = 0x03; - bcb->CDB[4] = (BYTE)addr; - bcb->CDB[3] = (BYTE)(addr / 0x0100); + bcb->CDB[4] = (u8)addr; + bcb->CDB[3] = (u8)(addr / 0x0100); bcb->CDB[2] = Media.Zone / 2; bcb->CDB[8] = 0; bcb->CDB[9] = 1; @@ -312,12 +284,12 @@ int Ssfdc_D_ReadBlock(struct us_data *us, WORD count, BYTE *buf, /* ----- Ssfdc_D_CopyBlock() -------------------------------------------- */ -int Ssfdc_D_CopyBlock(struct us_data *us, WORD count, BYTE *buf, - BYTE *redundant) +int Ssfdc_D_CopyBlock(struct us_data *us, u16 count, u8 *buf, + u8 *redundant) { struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; int result; - WORD ReadAddr, WriteAddr; + u16 ReadAddr, WriteAddr; result = ENE_LoadBinCode(us, SM_RW_PATTERN); if (result != USB_STOR_XFER_GOOD) { @@ -326,10 +298,10 @@ int Ssfdc_D_CopyBlock(struct us_data *us, WORD count, BYTE *buf, return USB_STOR_TRANSPORT_ERROR; } - ReadAddr = (WORD)Media.Zone*Ssfdc.MaxBlocks + ReadBlock; - ReadAddr = ReadAddr*(WORD)Ssfdc.MaxSectors; - WriteAddr = (WORD)Media.Zone*Ssfdc.MaxBlocks + WriteBlock; - WriteAddr = WriteAddr*(WORD)Ssfdc.MaxSectors; + ReadAddr = (u16)Media.Zone*Ssfdc.MaxBlocks + ReadBlock; + ReadAddr = ReadAddr*(u16)Ssfdc.MaxSectors; + WriteAddr = (u16)Media.Zone*Ssfdc.MaxBlocks + WriteBlock; + WriteAddr = WriteAddr*(u16)Ssfdc.MaxSectors; /* Write sect data */ memset(bcb, 0, sizeof(struct bulk_cb_wrap)); @@ -338,16 +310,16 @@ int Ssfdc_D_CopyBlock(struct us_data *us, WORD count, BYTE *buf, bcb->Flags = 0x00; bcb->CDB[0] = 0xF0; bcb->CDB[1] = 0x08; - bcb->CDB[7] = (BYTE)WriteAddr; - bcb->CDB[6] = (BYTE)(WriteAddr / 0x0100); + bcb->CDB[7] = (u8)WriteAddr; + bcb->CDB[6] = (u8)(WriteAddr / 0x0100); bcb->CDB[5] = Media.Zone / 2; bcb->CDB[8] = *(redundant + REDT_ADDR1H); bcb->CDB[9] = *(redundant + REDT_ADDR1L); bcb->CDB[10] = Media.Sector; if (ReadBlock != NO_ASSIGN) { - bcb->CDB[4] = (BYTE)ReadAddr; - bcb->CDB[3] = (BYTE)(ReadAddr / 0x0100); + bcb->CDB[4] = (u8)ReadAddr; + bcb->CDB[3] = (u8)(ReadAddr / 0x0100); bcb->CDB[2] = Media.Zone / 2; } else bcb->CDB[11] = 1; @@ -360,11 +332,11 @@ int Ssfdc_D_CopyBlock(struct us_data *us, WORD count, BYTE *buf, } /* ----- Ssfdc_D_WriteSectForCopy() ------------------------------------- */ -int Ssfdc_D_WriteSectForCopy(struct us_data *us, BYTE *buf, BYTE *redundant) +int Ssfdc_D_WriteSectForCopy(struct us_data *us, u8 *buf, u8 *redundant) { struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; int result; - WORD addr; + u16 addr; result = ENE_LoadBinCode(us, SM_RW_PATTERN); if (result != USB_STOR_XFER_GOOD) { @@ -374,8 +346,8 @@ int Ssfdc_D_WriteSectForCopy(struct us_data *us, BYTE *buf, BYTE *redundant) } - addr = (WORD)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(WORD)Ssfdc.MaxSectors + Media.Sector; + addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; + addr = addr*(u16)Ssfdc.MaxSectors + Media.Sector; /* Write sect data */ memset(bcb, 0, sizeof(struct bulk_cb_wrap)); @@ -384,8 +356,8 @@ int Ssfdc_D_WriteSectForCopy(struct us_data *us, BYTE *buf, BYTE *redundant) bcb->Flags = 0x00; bcb->CDB[0] = 0xF0; bcb->CDB[1] = 0x04; - bcb->CDB[7] = (BYTE)addr; - bcb->CDB[6] = (BYTE)(addr / 0x0100); + bcb->CDB[7] = (u8)addr; + bcb->CDB[6] = (u8)(addr / 0x0100); bcb->CDB[5] = Media.Zone / 2; bcb->CDB[8] = *(redundant + REDT_ADDR1H); bcb->CDB[9] = *(redundant + REDT_ADDR1L); @@ -403,7 +375,7 @@ int Ssfdc_D_EraseBlock(struct us_data *us) { struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; int result; - WORD addr; + u16 addr; result = ENE_LoadBinCode(us, SM_RW_PATTERN); if (result != USB_STOR_XFER_GOOD) { @@ -412,8 +384,8 @@ int Ssfdc_D_EraseBlock(struct us_data *us) return USB_STOR_TRANSPORT_ERROR; } - addr = (WORD)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(WORD)Ssfdc.MaxSectors; + addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; + addr = addr*(u16)Ssfdc.MaxSectors; memset(bcb, 0, sizeof(struct bulk_cb_wrap)); bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); @@ -421,8 +393,8 @@ int Ssfdc_D_EraseBlock(struct us_data *us) bcb->Flags = 0x80; bcb->CDB[0] = 0xF2; bcb->CDB[1] = 0x06; - bcb->CDB[7] = (BYTE)addr; - bcb->CDB[6] = (BYTE)(addr / 0x0100); + bcb->CDB[7] = (u8)addr; + bcb->CDB[6] = (u8)(addr / 0x0100); bcb->CDB[5] = Media.Zone / 2; result = ENE_SendScsiCmd(us, FDIR_READ, NULL, 0); @@ -434,12 +406,12 @@ int Ssfdc_D_EraseBlock(struct us_data *us) /* 6250 CMD 2 */ /*----- Ssfdc_D_ReadRedtData() ----------------------------------------- */ -int Ssfdc_D_ReadRedtData(struct us_data *us, BYTE *redundant) +int Ssfdc_D_ReadRedtData(struct us_data *us, u8 *redundant) { struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; int result; - WORD addr; - BYTE *buf; + u16 addr; + u8 *buf; result = ENE_LoadBinCode(us, SM_RW_PATTERN); if (result != USB_STOR_XFER_GOOD) { @@ -448,8 +420,8 @@ int Ssfdc_D_ReadRedtData(struct us_data *us, BYTE *redundant) return USB_STOR_TRANSPORT_ERROR; } - addr = (WORD)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(WORD)Ssfdc.MaxSectors + Media.Sector; + addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; + addr = addr*(u16)Ssfdc.MaxSectors + Media.Sector; memset(bcb, 0, sizeof(struct bulk_cb_wrap)); bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); @@ -457,8 +429,8 @@ int Ssfdc_D_ReadRedtData(struct us_data *us, BYTE *redundant) bcb->Flags = 0x80; bcb->CDB[0] = 0xF1; bcb->CDB[1] = 0x03; - bcb->CDB[4] = (BYTE)addr; - bcb->CDB[3] = (BYTE)(addr / 0x0100); + bcb->CDB[4] = (u8)addr; + bcb->CDB[3] = (u8)(addr / 0x0100); bcb->CDB[2] = Media.Zone / 2; bcb->CDB[8] = 0; bcb->CDB[9] = 1; @@ -475,11 +447,11 @@ int Ssfdc_D_ReadRedtData(struct us_data *us, BYTE *redundant) /* 6250 CMD 4 */ /* ----- Ssfdc_D_WriteRedtData() ---------------------------------------- */ -int Ssfdc_D_WriteRedtData(struct us_data *us, BYTE *redundant) +int Ssfdc_D_WriteRedtData(struct us_data *us, u8 *redundant) { struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; int result; - WORD addr; + u16 addr; result = ENE_LoadBinCode(us, SM_RW_PATTERN); if (result != USB_STOR_XFER_GOOD) { @@ -488,8 +460,8 @@ int Ssfdc_D_WriteRedtData(struct us_data *us, BYTE *redundant) return USB_STOR_TRANSPORT_ERROR; } - addr = (WORD)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; - addr = addr*(WORD)Ssfdc.MaxSectors + Media.Sector; + addr = (u16)Media.Zone*Ssfdc.MaxBlocks + Media.PhyBlock; + addr = addr*(u16)Ssfdc.MaxSectors + Media.Sector; memset(bcb, 0, sizeof(struct bulk_cb_wrap)); bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); @@ -497,8 +469,8 @@ int Ssfdc_D_WriteRedtData(struct us_data *us, BYTE *redundant) bcb->Flags = 0x80; bcb->CDB[0] = 0xF2; bcb->CDB[1] = 0x05; - bcb->CDB[7] = (BYTE)addr; - bcb->CDB[6] = (BYTE)(addr / 0x0100); + bcb->CDB[7] = (u8)addr; + bcb->CDB[6] = (u8)(addr / 0x0100); bcb->CDB[5] = Media.Zone / 2; bcb->CDB[8] = *(redundant + REDT_ADDR1H); bcb->CDB[9] = *(redundant + REDT_ADDR1L); @@ -521,7 +493,7 @@ int Ssfdc_D_CheckStatus(void) /* SmartMedia ID Code Check & Mode Set Subroutine * ----- Set_D_SsfdcModel() --------------------------------------------- */ -int Set_D_SsfdcModel(BYTE dcode) +int Set_D_SsfdcModel(u8 dcode) { switch (_Check_D_DevCode(dcode)) { case SSFDC1MB: @@ -629,7 +601,7 @@ int Set_D_SsfdcModel(BYTE dcode) } /* ----- _Check_D_DevCode() --------------------------------------------- */ -BYTE _Check_D_DevCode(BYTE dcode) +static u8 _Check_D_DevCode(u8 dcode) { switch (dcode) { case 0x6E: @@ -659,21 +631,21 @@ BYTE _Check_D_DevCode(BYTE dcode) /* SmartMedia ECC Control Subroutine * ----- Check_D_ReadError() ---------------------------------------------- */ -int Check_D_ReadError(BYTE *redundant) +int Check_D_ReadError(u8 *redundant) { return SMSUCCESS; } /* ----- Check_D_Correct() ---------------------------------------------- */ -int Check_D_Correct(BYTE *buf, BYTE *redundant) +int Check_D_Correct(u8 *buf, u8 *redundant) { return SMSUCCESS; } /* ----- Check_D_CISdata() ---------------------------------------------- */ -int Check_D_CISdata(BYTE *buf, BYTE *redundant) +int Check_D_CISdata(u8 *buf, u8 *redundant) { - BYTE cis[] = {0x01, 0x03, 0xD9, 0x01, 0xFF, 0x18, 0x02, + u8 cis[] = {0x01, 0x03, 0xD9, 0x01, 0xFF, 0x18, 0x02, 0xDF, 0x01, 0x20}; int cis_len = sizeof(cis); @@ -698,7 +670,7 @@ int Check_D_CISdata(BYTE *buf, BYTE *redundant) } /* ----- Set_D_RightECC() ---------------------------------------------- */ -void Set_D_RightECC(BYTE *redundant) +void Set_D_RightECC(u8 *redundant) { /* Driver ECC Check */ return; |
