1 #include <linux/slab.h>
7 int Check_D_LogCHS (WORD *,BYTE *,BYTE *);
8 void Initialize_D_Media (void);
9 void PowerOff_D_Media (void);
10 int Check_D_MediaPower (void);
11 int Check_D_MediaExist (void);
12 int Check_D_MediaWP (void);
13 int Check_D_MediaFmt (struct us_data *);
14 int Check_D_MediaFmtForEraseAll (struct us_data *);
15 int Conv_D_MediaAddr (struct us_data *, DWORD);
16 int Inc_D_MediaAddr (struct us_data *);
17 int Check_D_FirstSect (void);
18 int Check_D_LastSect (void);
19 int Media_D_ReadOneSect (struct us_data *, WORD, BYTE *);
20 int Media_D_WriteOneSect (struct us_data *, WORD, BYTE *);
21 int Media_D_CopyBlockHead (struct us_data *);
22 int Media_D_CopyBlockTail (struct us_data *);
23 int Media_D_EraseOneBlock (void);
24 int Media_D_EraseAllBlock (void);
26 int Copy_D_BlockAll (struct us_data *, DWORD);
27 int Copy_D_BlockHead (struct us_data *);
28 int Copy_D_BlockTail (struct us_data *);
29 int Reassign_D_BlockHead (struct us_data *);
31 int Assign_D_WriteBlock (void);
32 int Release_D_ReadBlock (struct us_data *);
33 int Release_D_WriteBlock (struct us_data *);
34 int Release_D_CopySector (struct us_data *);
36 int Copy_D_PhyOneSect (struct us_data *);
37 int Read_D_PhyOneSect (struct us_data *, WORD, BYTE *);
38 int Write_D_PhyOneSect (struct us_data *, WORD, BYTE *);
39 int Erase_D_PhyOneBlock (struct us_data *);
41 int Set_D_PhyFmtValue (struct us_data *);
42 int Search_D_CIS (struct us_data *);
43 int Make_D_LogTable (struct us_data *);
44 void Check_D_BlockIsFull (void);
46 int MarkFail_D_PhyOneBlock (struct us_data *);
50 //BYTE SectBuf[SECTSIZE];
51 BYTE WorkBuf[SECTSIZE];
52 BYTE Redundant[REDTSIZE];
53 BYTE WorkRedund[REDTSIZE];
54 //WORD Log2Phy[MAX_ZONENUM][MAX_LOGBLOCK];
55 WORD *Log2Phy[MAX_ZONENUM]; // 128 x 1000, Log2Phy[MAX_ZONENUM][MAX_LOGBLOCK];
56 BYTE Assign[MAX_ZONENUM][MAX_BLOCKNUM/8];
57 WORD AssignStart[MAX_ZONENUM];
63 extern struct SSFDCTYPE Ssfdc;
64 extern struct ADDRESS Media;
65 extern struct CIS_AREA CisArea;
68 BYTE BitData[] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 } ;
69 #define Set_D_Bit(a,b) (a[(BYTE)((b)/8)]|= BitData[(b)%8])
70 #define Clr_D_Bit(a,b) (a[(BYTE)((b)/8)]&=~BitData[(b)%8])
71 #define Chk_D_Bit(a,b) (a[(BYTE)((b)/8)] & BitData[(b)%8])
73 //extern PBYTE SMHostAddr;
74 extern BYTE IsSSFDCCompliance;
75 extern BYTE IsXDCompliance;
79 ////Power Controll & Media Exist Check Function
80 ////----- Init_D_SmartMedia() --------------------------------------------
81 //int Init_D_SmartMedia(void)
85 // EMCR_Print("Init_D_SmartMedia start\n");
86 // for (i=0; i<MAX_ZONENUM; i++)
88 // if (Log2Phy[i]!=NULL)
90 // EMCR_Print("ExFreePool Zone = %x, Addr = %x\n", i, Log2Phy[i]);
91 // ExFreePool(Log2Phy[i]);
96 // Initialize_D_Media();
100 //----- SM_FreeMem() -------------------------------------------------
105 printk("SM_FreeMem start\n");
106 for (i=0; i<MAX_ZONENUM; i++)
108 if (Log2Phy[i]!=NULL)
110 printk("Free Zone = %x, Addr = %p\n", i, Log2Phy[i]);
118 ////----- Pwoff_D_SmartMedia() -------------------------------------------
119 //int Pwoff_D_SmartMedia(void)
121 // PowerOff_D_Media();
125 ////----- Check_D_SmartMedia() -------------------------------------------
126 //int Check_D_SmartMedia(void)
128 // if (Check_D_MediaExist())
134 ////----- Check_D_Parameter() --------------------------------------------
135 //int Check_D_Parameter(PFDO_DEVICE_EXTENSION fdoExt,WORD *pcyl,BYTE *phead,BYTE *psect)
137 // if (Check_D_MediaPower())
140 // if (Check_D_MediaFmt(fdoExt))
143 // if (Check_D_LogCHS(pcyl,phead,psect))
149 //SmartMedia Read/Write/Erase Function
150 //----- Media_D_ReadSector() -------------------------------------------
151 int Media_D_ReadSector(struct us_data *us, DWORD start,WORD count,BYTE *buf)
155 //if (Check_D_MediaPower()) ; ¦b 6250 don't care
157 //if (Check_D_MediaFmt(fdoExt)) ;
159 if (Conv_D_MediaAddr(us, start))
164 len = Ssfdc.MaxSectors - Media.Sector;
169 //if (Media_D_ReadOneSect(fdoExt, SectBuf))
170 //if (Media_D_ReadOneSect(fdoExt, count, buf))
171 if (Media_D_ReadOneSect(us, bn, buf))
173 ErrCode = ERR_EccReadErr;
183 buf += bn * SECTSIZE;
185 if (Inc_D_MediaAddr(us))
192 //----- Media_D_CopySector() ------------------------------------------
193 int Media_D_CopySector(struct us_data *us, DWORD start,WORD count,BYTE *buf)
198 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
199 //ADDRESS_T bb = (ADDRESS_T) &Media;
201 //printk("Media_D_CopySector !!!\n");
202 if (Conv_D_MediaAddr(us, start))
207 if (Assign_D_WriteBlock())
210 len = Ssfdc.MaxSectors - Media.Sector;
216 //if (Ssfdc_D_CopyBlock(fdoExt,count,buf,Redundant))
217 if (Ssfdc_D_CopyBlock(us,bn,buf,Redundant))
219 ErrCode = ERR_WriteFault;
224 //if (Release_D_ReadBlock(fdoExt))
225 if (Release_D_CopySector(us))
227 if (ErrCode==ERR_HwError)
229 ErrCode = ERR_WriteFault;
238 buf += bn * SECTSIZE;
240 if (Inc_D_MediaAddr(us))
247 //----- Release_D_CopySector() ------------------------------------------
248 int Release_D_CopySector(struct us_data *us)
250 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
251 //ADDRESS_T bb = (ADDRESS_T) &Media;
253 Log2Phy[Media.Zone][Media.LogBlock]=WriteBlock;
254 Media.PhyBlock=ReadBlock;
256 if (Media.PhyBlock==NO_ASSIGN)
258 Media.PhyBlock=WriteBlock;
262 Clr_D_Bit(Assign[Media.Zone],Media.PhyBlock);
263 Media.PhyBlock=WriteBlock;
268 //----- Media_D_WriteSector() ------------------------------------------
269 int Media_D_WriteSector(PFDO_DEVICE_EXTENSION fdoExt, DWORD start,WORD count,BYTE *buf)
273 SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
274 ADDRESS_T bb = (ADDRESS_T) &Media;
276 //if (Check_D_MediaPower())
279 //if (Check_D_MediaFmt(fdoExt))
282 //if (Check_D_MediaWP())
285 if (Conv_D_MediaAddr(fdoExt, start))
288 //ENE_Print("Media_D_WriteSector --- Sector = %x\n", Media.Sector);
289 if (Check_D_FirstSect())
291 if (Media_D_CopyBlockHead(fdoExt))
293 ErrCode = ERR_WriteFault;
300 if (!Check_D_FirstSect())
302 if (Assign_D_WriteBlock())
306 len = Ssfdc.MaxSectors - Media.Sector;
311 //for(i=0;i<SECTSIZE;i++)
312 // SectBuf[i]=*buf++;
314 //if (Media_D_WriteOneSect(fdoExt, SectBuf))
315 if (Media_D_WriteOneSect(fdoExt, bn, buf))
317 ErrCode = ERR_WriteFault;
321 Media.Sector += bn - 1;
323 if (!Check_D_LastSect())
325 if (Release_D_ReadBlock(fdoExt))
327 { if (ErrCode==ERR_HwError)
329 ErrCode = ERR_WriteFault;
340 buf += bn * SECTSIZE;
345 if (Inc_D_MediaAddr(fdoExt))
349 if (!Check_D_LastSect())
352 if (Inc_D_MediaAddr(fdoExt))
355 if (Media_D_CopyBlockTail(fdoExt))
357 ErrCode = ERR_WriteFault;
364 ////----- Media_D_EraseBlock() -------------------------------------------
365 //int Media_D_EraseBlock(PFDO_DEVICE_EXTENSION fdoExt, DWORD start,WORD count)
367 // if (Check_D_MediaPower())
370 // if (Check_D_MediaFmt(fdoExt))
373 // if (Check_D_MediaWP())
376 // if (Conv_D_MediaAddr(start))
379 // while(Check_D_FirstSect()) {
380 // if (Inc_D_MediaAddr(fdoExt))
388 // if (!Check_D_LastSect())
389 // if (Media_D_EraseOneBlock())
390 // if (ErrCode==ERR_HwError)
392 // ErrCode = ERR_WriteFault;
396 // if (Inc_D_MediaAddr(fdoExt))
404 ////----- Media_D_EraseAll() ---------------------------------------------
405 //int Media_D_EraseAll(PFDO_DEVICE_EXTENSION fdoExt)
407 // if (Check_D_MediaPower())
410 // if (Check_D_MediaFmtForEraseAll(fdoExt))
413 // if (Check_D_MediaWP())
416 // if (Media_D_EraseAllBlock())
422 //SmartMedia Write Function for One Sector Write Mode
423 //----- Media_D_OneSectWriteStart() ------------------------------------
424 int Media_D_OneSectWriteStart(PFDO_DEVICE_EXTENSION fdoExt,DWORD start,BYTE *buf)
427 // SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
428 // ADDRESS_T bb = (ADDRESS_T) &Media;
430 // //if (Check_D_MediaPower())
431 // // return(ErrCode);
432 // //if (Check_D_MediaFmt(fdoExt))
433 // // return(ErrCode);
434 // //if (Check_D_MediaWP())
435 // // return(ErrCode);
436 // if (Conv_D_MediaAddr(fdoExt, start))
439 // if (Check_D_FirstSect())
440 // if (Media_D_CopyBlockHead(fdoExt))
442 // ErrCode = ERR_WriteFault;
446 // if (!Check_D_FirstSect())
447 // if (Assign_D_WriteBlock())
450 // //for(i=0;i<SECTSIZE;i++)
451 // // SectBuf[i]=*buf++;
453 // //if (Media_D_WriteOneSect(fdoExt, SectBuf))
454 // if (Media_D_WriteOneSect(fdoExt, buf))
456 // ErrCode = ERR_WriteFault;
460 // if (!Check_D_LastSect())
462 // if (Release_D_ReadBlock(fdoExt))
463 // if (ErrCode==ERR_HwError)
465 // ErrCode = ERR_WriteFault;
473 //----- Media_D_OneSectWriteNext() -------------------------------------
474 int Media_D_OneSectWriteNext(PFDO_DEVICE_EXTENSION fdoExt, BYTE *buf)
477 // SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
478 // ADDRESS_T bb = (ADDRESS_T) &Media;
480 // if (Inc_D_MediaAddr(fdoExt))
483 // if (!Check_D_FirstSect())
484 // if (Assign_D_WriteBlock())
487 // //for(i=0;i<SECTSIZE;i++)
488 // // SectBuf[i]=*buf++;
490 // //if (Media_D_WriteOneSect(fdoExt, SectBuf))
491 // if (Media_D_WriteOneSect(fdoExt, buf))
493 // ErrCode = ERR_WriteFault;
497 // if (!Check_D_LastSect())
499 // if (Release_D_ReadBlock(fdoExt))
500 // if (ErrCode==ERR_HwError)
502 // ErrCode = ERR_WriteFault;
510 //----- Media_D_OneSectWriteFlush() ------------------------------------
511 int Media_D_OneSectWriteFlush(PFDO_DEVICE_EXTENSION fdoExt)
513 if (!Check_D_LastSect())
516 if (Inc_D_MediaAddr(fdoExt))
519 if (Media_D_CopyBlockTail(fdoExt))
521 ErrCode = ERR_WriteFault;
528 ////LED Tern On/Off Subroutine
529 ////----- SM_EnableLED() -----------------------------------------------
530 //void SM_EnableLED(PFDO_DEVICE_EXTENSION fdoExt, BOOLEAN enable)
532 // if (fdoExt->Drive_IsSWLED)
541 ////----- Led_D_TernOn() -------------------------------------------------
542 //void Led_D_TernOn(void)
544 // if (Check_D_CardStsChg())
545 // MediaChange=ERROR;
550 ////----- Led_D_TernOff() ------------------------------------------------
551 //void Led_D_TernOff(void)
553 // if (Check_D_CardStsChg())
554 // MediaChange=ERROR;
559 ////SmartMedia Logical Format Subroutine
560 ////----- Check_D_LogCHS() -----------------------------------------------
561 //int Check_D_LogCHS(WORD *c,BYTE *h,BYTE *s)
563 // switch(Ssfdc.Model) {
564 // case SSFDC1MB: *c=125; *h= 4; *s= 4; break;
565 // case SSFDC2MB: *c=125; *h= 4; *s= 8; break;
566 // case SSFDC4MB: *c=250; *h= 4; *s= 8; break;
567 // case SSFDC8MB: *c=250; *h= 4; *s=16; break;
568 // case SSFDC16MB: *c=500; *h= 4; *s=16; break;
569 // case SSFDC32MB: *c=500; *h= 8; *s=16; break;
570 // case SSFDC64MB: *c=500; *h= 8; *s=32; break;
571 // case SSFDC128MB: *c=500; *h=16; *s=32; break;
572 // default: *c= 0; *h= 0; *s= 0; ErrCode = ERR_NoSmartMedia; return(ERROR);
578 ////Power Controll & Media Exist Check Subroutine
579 ////----- Initialize_D_Media() -------------------------------------------
580 //void Initialize_D_Media(void)
582 // ErrCode = NO_ERROR;
583 // MediaChange = ERROR;
584 // SectCopyMode = COMPLETED;
588 ////----- PowerOff_D_Media() ---------------------------------------------
589 //void PowerOff_D_Media(void)
594 ////----- Check_D_MediaPower() -------------------------------------------
595 //int Check_D_MediaPower(void)
597 // //usleep(56*1024);
598 // if (Check_D_CardStsChg())
599 // MediaChange = ERROR;
600 // //usleep(56*1024);
601 // if ((!Check_D_CntPower())&&(!MediaChange)) // ¦³ power & Media ¨S³Q change, «h return success
603 // //usleep(56*1024);
605 // if (Check_D_CardExist()) // Check if card is not exist, return err
607 // ErrCode = ERR_NoSmartMedia;
608 // MediaChange = ERROR;
611 // //usleep(56*1024);
612 // if (Cnt_D_PowerOn())
614 // ErrCode = ERR_NoSmartMedia;
615 // MediaChange = ERROR;
618 // //usleep(56*1024);
619 // Ssfdc_D_Reset(fdoExt);
620 // //usleep(56*1024);
624 ////-----Check_D_MediaExist() --------------------------------------------
625 //int Check_D_MediaExist(void)
627 // if (Check_D_CardStsChg())
628 // MediaChange = ERROR;
630 // if (!Check_D_CardExist())
635 // ErrCode = ERR_ChangedMedia;
639 // ErrCode = ERR_NoSmartMedia;
644 ////----- Check_D_MediaWP() ----------------------------------------------
645 //int Check_D_MediaWP(void)
647 // if (Ssfdc.Attribute &MWP)
649 // ErrCode = ERR_WrtProtect;
656 //SmartMedia Physical Format Test Subroutine
657 //----- Check_D_MediaFmt() ---------------------------------------------
658 int Check_D_MediaFmt(struct us_data *us)
660 printk("Check_D_MediaFmt\n");
661 //ULONG i,j, result=FALSE, zone,block;
668 SectCopyMode = COMPLETED;
671 if (Set_D_PhyFmtValue(us))
673 ErrCode = ERR_UnknownMedia;
678 if (Search_D_CIS(us))
680 ErrCode = ERR_IllegalFmt;
685 MediaChange = SUCCESS;
689 ////----- Check_D_BlockIsFull() ----------------------------------
690 //void Check_D_BlockIsFull()
694 // if (IsXDCompliance || IsSSFDCCompliance)
696 // // If the blocks are full then return write-protect.
697 // block = Ssfdc.MaxBlocks/8;
698 // for (Media.Zone=0; Media.Zone<Ssfdc.MaxZones; Media.Zone++)
700 // if (Log2Phy[Media.Zone]==NULL)
702 // if (Make_D_LogTable())
704 // ErrCode = ERR_IllegalFmt;
709 // for (i=0; i<block; i++)
711 // if (Assign[Media.Zone][i] != 0xFF)
715 // Ssfdc.Attribute |= WP;
720 ////----- Check_D_MediaFmtForEraseAll() ----------------------------------
721 //int Check_D_MediaFmtForEraseAll(PFDO_DEVICE_EXTENSION fdoExt)
723 // MediaChange = ERROR;
724 // SectCopyMode = COMPLETED;
726 // if (Set_D_PhyFmtValue(fdoExt))
728 // ErrCode = ERR_UnknownMedia;
732 // if (Search_D_CIS(fdoExt))
734 // ErrCode = ERR_IllegalFmt;
741 //SmartMedia Physical Address Controll Subroutine
742 //----- Conv_D_MediaAddr() ---------------------------------------------
743 int Conv_D_MediaAddr(struct us_data *us, DWORD addr)
747 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
748 //ADDRESS_T bb = (ADDRESS_T) &Media;
750 temp = addr/Ssfdc.MaxSectors;
751 Media.Zone = (BYTE) (temp/Ssfdc.MaxLogBlocks);
753 if (Log2Phy[Media.Zone]==NULL)
755 if (Make_D_LogTable(us))
757 ErrCode = ERR_IllegalFmt;
762 Media.Sector = (BYTE) (addr%Ssfdc.MaxSectors);
763 Media.LogBlock = (WORD) (temp%Ssfdc.MaxLogBlocks);
765 if (Media.Zone<Ssfdc.MaxZones)
767 Clr_D_RedundantData(Redundant);
768 Set_D_LogBlockAddr(Redundant);
769 Media.PhyBlock = Log2Phy[Media.Zone][Media.LogBlock];
773 ErrCode = ERR_OutOfLBA;
777 //----- Inc_D_MediaAddr() ----------------------------------------------
778 int Inc_D_MediaAddr(struct us_data *us)
780 WORD LogBlock = Media.LogBlock;
781 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
782 //ADDRESS_T bb = (ADDRESS_T) &Media;
784 if (++Media.Sector<Ssfdc.MaxSectors)
787 if (Log2Phy[Media.Zone]==NULL)
789 if (Make_D_LogTable(us))
791 ErrCode = ERR_IllegalFmt;
797 Media.LogBlock = LogBlock;
799 if (++Media.LogBlock<Ssfdc.MaxLogBlocks)
801 Clr_D_RedundantData(Redundant);
802 Set_D_LogBlockAddr(Redundant);
803 Media.PhyBlock=Log2Phy[Media.Zone][Media.LogBlock];
809 if (++Media.Zone<Ssfdc.MaxZones)
811 if (Log2Phy[Media.Zone]==NULL)
813 if (Make_D_LogTable(us))
815 ErrCode = ERR_IllegalFmt;
822 Clr_D_RedundantData(Redundant);
823 Set_D_LogBlockAddr(Redundant);
824 Media.PhyBlock=Log2Phy[Media.Zone][Media.LogBlock];
829 ErrCode = ERR_OutOfLBA;
834 //----- Check_D_FirstSect() --------------------------------------------
835 int Check_D_FirstSect(void)
837 SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
838 ADDRESS_T bb = (ADDRESS_T) &Media;
846 //----- Check_D_LastSect() ---------------------------------------------
847 int Check_D_LastSect(void)
849 SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
850 ADDRESS_T bb = (ADDRESS_T) &Media;
852 if (Media.Sector<(Ssfdc.MaxSectors-1))
858 //SmartMedia Read/Write Subroutine with Retry
859 //----- Media_D_ReadOneSect() ------------------------------------------
860 int Media_D_ReadOneSect(struct us_data *us, WORD count, BYTE *buf)
864 if (!Read_D_PhyOneSect(us, count, buf))
866 if (ErrCode==ERR_HwError)
868 if (ErrCode==ERR_DataStatus)
871 #ifdef RDERR_REASSIGN
872 if (Ssfdc.Attribute &MWP)
874 if (ErrCode==ERR_CorReadErr)
880 for(retry=0; retry<2; retry++)
882 if (Copy_D_BlockAll(us, (err==ERR_EccReadErr)?REQ_FAIL:REQ_ERASE))
884 if (ErrCode==ERR_HwError)
890 if (ErrCode==ERR_CorReadErr)
897 if (ErrCode==ERR_CorReadErr) return(SUCCESS);
903 //----- Media_D_WriteOneSect() -----------------------------------------
904 int Media_D_WriteOneSect(PFDO_DEVICE_EXTENSION fdoExt, WORD count, BYTE *buf)
907 SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
908 ADDRESS_T bb = (ADDRESS_T) &Media;
910 if (!Write_D_PhyOneSect(fdoExt, count, buf))
912 if (ErrCode==ERR_HwError)
915 for(retry=1; retry<2; retry++)
917 if (Reassign_D_BlockHead(fdoExt))
919 if (ErrCode==ERR_HwError)
924 if (!Write_D_PhyOneSect(fdoExt, count, buf))
926 if (ErrCode==ERR_HwError)
930 if (Release_D_WriteBlock(fdoExt))
933 ErrCode = ERR_WriteFault;
938 //SmartMedia Data Copy Subroutine with Retry
939 //----- Media_D_CopyBlockHead() ----------------------------------------
940 int Media_D_CopyBlockHead(PFDO_DEVICE_EXTENSION fdoExt)
944 for(retry=0; retry<2; retry++)
946 if (!Copy_D_BlockHead(fdoExt))
948 if (ErrCode==ERR_HwError)
956 //----- Media_D_CopyBlockTail() ----------------------------------------
957 int Media_D_CopyBlockTail(PFDO_DEVICE_EXTENSION fdoExt)
961 if (!Copy_D_BlockTail(fdoExt))
963 if (ErrCode==ERR_HwError)
966 for(retry=1; retry<2; retry++)
968 if (Reassign_D_BlockHead(fdoExt))
970 if (ErrCode==ERR_HwError)
975 if (!Copy_D_BlockTail(fdoExt))
977 if (ErrCode==ERR_HwError)
981 if (Release_D_WriteBlock(fdoExt))
984 ErrCode = ERR_WriteFault;
989 ////----- Media_D_EraseOneBlock() ----------------------------------------
990 //int Media_D_EraseOneBlock(void)
992 // WORD LogBlock = Media.LogBlock;
993 // WORD PhyBlock = Media.PhyBlock;
994 // SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
995 // ADDRESS_T bb = (ADDRESS_T) &Media;
997 // if (Media.PhyBlock==NO_ASSIGN)
1000 // if (Log2Phy[Media.Zone]==NULL)
1002 // if (Make_D_LogTable())
1004 // ErrCode = ERR_IllegalFmt;
1008 // Media.LogBlock = LogBlock;
1009 // Media.PhyBlock = PhyBlock;
1011 // Log2Phy[Media.Zone][Media.LogBlock]=NO_ASSIGN;
1013 // if (Erase_D_PhyOneBlock(fdoExt))
1015 // if (ErrCode==ERR_HwError)
1017 // if (MarkFail_D_PhyOneBlock())
1020 // ErrCode = ERR_WriteFault;
1024 // Clr_D_Bit(Assign[Media.Zone],Media.PhyBlock);
1025 // Media.PhyBlock=NO_ASSIGN;
1029 ////SmartMedia Erase Subroutine
1030 ////----- Media_D_EraseAllBlock() ----------------------------------------
1031 //int Media_D_EraseAllBlock(void)
1035 // SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1036 // ADDRESS_T bb = (ADDRESS_T) &Media;
1038 // MediaChange = ERROR;
1039 // Media.Sector = 0;
1041 // for(Media.Zone=0; Media.Zone<Ssfdc.MaxZones; Media.Zone++)
1042 // for(Media.PhyBlock=0; Media.PhyBlock<Ssfdc.MaxBlocks; Media.PhyBlock++) {
1043 // if (Ssfdc_D_ReadRedtData(Redundant))
1045 // Ssfdc_D_Reset(fdoExt);
1049 // Ssfdc_D_Reset(fdoExt);
1050 // if (!Check_D_FailBlock(Redundant))
1054 // if (Ssfdc_D_EraseBlock(fdoExt))
1056 // ErrCode = ERR_HwError;
1060 // if (Ssfdc_D_CheckStatus())
1062 // if (MarkFail_D_PhyOneBlock())
1069 // if (Media.PhyBlock!=CisArea.PhyBlock)
1071 // ErrCode = ERR_IllegalFmt;
1082 //SmartMedia Physical Sector Data Copy Subroutine
1083 //----- Copy_D_BlockAll() ----------------------------------------------
1084 int Copy_D_BlockAll(struct us_data *us, DWORD mode)
1087 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1088 //ADDRESS_T bb = (ADDRESS_T) &Media;
1092 if (Assign_D_WriteBlock())
1095 SectCopyMode=REQ_FAIL;
1097 for(Media.Sector=0; Media.Sector<Ssfdc.MaxSectors; Media.Sector++)
1099 if (Copy_D_PhyOneSect(us))
1101 if (ErrCode==ERR_HwError)
1103 if (Release_D_WriteBlock(us))
1106 ErrCode = ERR_WriteFault;
1107 Media.PhyBlock=ReadBlock;
1114 if (Release_D_ReadBlock(us))
1117 Media.PhyBlock=WriteBlock;
1122 //----- Copy_D_BlockHead() ---------------------------------------------
1123 int Copy_D_BlockHead(PFDO_DEVICE_EXTENSION fdoExt)
1126 SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1127 ADDRESS_T bb = (ADDRESS_T) &Media;
1130 if (Assign_D_WriteBlock())
1133 for(Media.Sector=0; Media.Sector<sect; Media.Sector++)
1135 if (Copy_D_PhyOneSect(fdoExt))
1137 if (ErrCode==ERR_HwError)
1139 if (Release_D_WriteBlock(fdoExt))
1142 ErrCode = ERR_WriteFault;
1143 Media.PhyBlock=ReadBlock;
1150 Media.PhyBlock=WriteBlock;
1155 //----- Copy_D_BlockTail() ---------------------------------------------
1156 int Copy_D_BlockTail(PFDO_DEVICE_EXTENSION fdoExt)
1159 SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1160 ADDRESS_T bb = (ADDRESS_T) &Media;
1162 for(sect=Media.Sector; Media.Sector<Ssfdc.MaxSectors; Media.Sector++)
1164 if (Copy_D_PhyOneSect(fdoExt))
1166 if (ErrCode==ERR_HwError)
1169 Media.PhyBlock=WriteBlock;
1176 if (Release_D_ReadBlock(fdoExt))
1179 Media.PhyBlock=WriteBlock;
1184 //----- Reassign_D_BlockHead() -----------------------------------------
1185 int Reassign_D_BlockHead(PFDO_DEVICE_EXTENSION fdoExt)
1190 SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1191 ADDRESS_T bb = (ADDRESS_T) &Media;
1197 if (Assign_D_WriteBlock())
1200 SectCopyMode=REQ_FAIL;
1202 for(Media.Sector=0; Media.Sector<sect; Media.Sector++)
1204 if (Copy_D_PhyOneSect(fdoExt))
1206 if (ErrCode==ERR_HwError)
1208 if (Release_D_WriteBlock(fdoExt))
1211 ErrCode = ERR_WriteFault;
1213 WriteBlock=ReadBlock;
1216 Media.PhyBlock=WriteBlock;
1222 if (Release_D_ReadBlock(fdoExt))
1228 Media.PhyBlock=WriteBlock;
1232 //SmartMedia Physical Block Assign/Release Subroutine
1233 //----- Assign_D_WriteBlock() ------------------------------------------
1234 int Assign_D_WriteBlock(void)
1236 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1237 //ADDRESS_T bb = (ADDRESS_T) &Media;
1238 ReadBlock=Media.PhyBlock;
1240 for(WriteBlock=AssignStart[Media.Zone]; WriteBlock<Ssfdc.MaxBlocks; WriteBlock++)
1242 if (!Chk_D_Bit(Assign[Media.Zone],WriteBlock))
1244 Set_D_Bit(Assign[Media.Zone],WriteBlock);
1245 AssignStart[Media.Zone]=WriteBlock+1;
1246 Media.PhyBlock=WriteBlock;
1247 SectCopyMode=REQ_ERASE;
1248 //ErrXDCode = NO_ERROR;
1253 for(WriteBlock=0; WriteBlock<AssignStart[Media.Zone]; WriteBlock++)
1255 if (!Chk_D_Bit(Assign[Media.Zone],WriteBlock))
1257 Set_D_Bit(Assign[Media.Zone],WriteBlock);
1258 AssignStart[Media.Zone]=WriteBlock+1;
1259 Media.PhyBlock=WriteBlock;
1260 SectCopyMode=REQ_ERASE;
1261 //ErrXDCode = NO_ERROR;
1266 WriteBlock=NO_ASSIGN;
1267 ErrCode = ERR_WriteFault;
1269 //Ssfdc.Attribute |= WP;
1270 //ErrXDCode = ERR_WrtProtect;
1274 //----- Release_D_ReadBlock() ------------------------------------------
1275 int Release_D_ReadBlock(struct us_data *us)
1278 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1279 //ADDRESS_T bb = (ADDRESS_T) &Media;
1282 SectCopyMode=COMPLETED;
1284 if (mode==COMPLETED)
1287 Log2Phy[Media.Zone][Media.LogBlock]=WriteBlock;
1288 Media.PhyBlock=ReadBlock;
1290 if (Media.PhyBlock==NO_ASSIGN)
1292 Media.PhyBlock=WriteBlock;
1296 if (mode==REQ_ERASE)
1298 if (Erase_D_PhyOneBlock(us))
1300 if (ErrCode==ERR_HwError) return(ERROR);
1301 if (MarkFail_D_PhyOneBlock(us)) return(ERROR);
1304 Clr_D_Bit(Assign[Media.Zone],Media.PhyBlock);
1306 else if (MarkFail_D_PhyOneBlock(us))
1309 Media.PhyBlock=WriteBlock;
1313 //----- Release_D_WriteBlock() -----------------------------------------
1314 int Release_D_WriteBlock(struct us_data *us)
1316 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1317 //ADDRESS_T bb = (ADDRESS_T) &Media;
1318 SectCopyMode=COMPLETED;
1319 Media.PhyBlock=WriteBlock;
1321 if (MarkFail_D_PhyOneBlock(us))
1324 Media.PhyBlock=ReadBlock;
1328 //SmartMedia Physical Sector Data Copy Subroutine
1329 //----- Copy_D_PhyOneSect() --------------------------------------------
1330 int Copy_D_PhyOneSect(struct us_data *us)
1334 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1335 //ADDRESS_T bb = (ADDRESS_T) &Media;
1337 //printk("Copy_D_PhyOneSect --- Secotr = %x\n", Media.Sector);
1338 if (ReadBlock!=NO_ASSIGN)
1340 Media.PhyBlock=ReadBlock;
1341 for(retry=0; retry<2; retry++)
1346 if (Ssfdc_D_ReadCisSect(us,WorkBuf,WorkRedund))
1347 { ErrCode = ERR_HwError; MediaChange=ERROR; return(ERROR); }
1349 if (Check_D_CISdata(WorkBuf,WorkRedund))
1350 { ErrCode = ERR_HwError; MediaChange=ERROR; return(ERROR); }
1353 if (Ssfdc_D_ReadSect(us,WorkBuf,WorkRedund))
1354 { ErrCode = ERR_HwError; MediaChange=ERROR; return(ERROR); }
1355 if (Check_D_DataStatus(WorkRedund))
1356 { err=ERROR; break; }
1357 if (!Check_D_ReadError(WorkRedund))
1358 { err=SUCCESS; break; }
1359 if (!Check_D_Correct(WorkBuf,WorkRedund))
1360 { err=SUCCESS; break; }
1363 SectCopyMode=REQ_FAIL;
1369 for(i=0; i<SECTSIZE; i++)
1370 WorkBuf[i]=DUMMY_DATA;
1371 Clr_D_RedundantData(WorkRedund);
1374 Set_D_LogBlockAddr(WorkRedund);
1377 Set_D_RightECC(WorkRedund);
1378 Set_D_DataStaus(WorkRedund);
1381 Media.PhyBlock=WriteBlock;
1383 if (Ssfdc_D_WriteSectForCopy(us, WorkBuf, WorkRedund))
1384 { ErrCode = ERR_HwError; MediaChange=ERROR; return(ERROR); }
1385 if (Ssfdc_D_CheckStatus())
1386 { ErrCode = ERR_WriteFault; return(ERROR); }
1388 Media.PhyBlock=ReadBlock;
1392 //SmartMedia Physical Sector Read/Write/Erase Subroutine
1393 //----- Read_D_PhyOneSect() --------------------------------------------
1394 int Read_D_PhyOneSect(struct us_data *us, WORD count, BYTE *buf)
1398 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1399 //ADDRESS_T bb = (ADDRESS_T) &Media;
1401 if (Media.PhyBlock==NO_ASSIGN)
1403 for(i=0; i<SECTSIZE; i++)
1408 for(retry=0; retry<2; retry++)
1414 if (Ssfdc_D_ReadCisSect(us,WorkBuf,WorkRedund))
1415 { ErrCode = ERR_HwError; MediaChange=ERROR; return(ERROR); }
1416 if (Check_D_CISdata(WorkBuf,WorkRedund))
1417 { ErrCode = ERR_HwError; MediaChange=ERROR; return(ERROR); }
1420 //if (Ssfdc_D_ReadSect(fdoExt,buf,Redundant))
1421 if (Ssfdc_D_ReadBlock(us,count,buf,Redundant))
1422 { ErrCode = ERR_HwError; MediaChange=ERROR; return(ERROR); }
1423 if (Check_D_DataStatus(Redundant))
1424 { ErrCode = ERR_DataStatus; return(ERROR); }
1426 if (!Check_D_ReadError(Redundant))
1429 if (!Check_D_Correct(buf,Redundant))
1430 { ErrCode = ERR_CorReadErr; return(ERROR); }
1433 ErrCode = ERR_EccReadErr;
1437 //----- Write_D_PhyOneSect() -------------------------------------------
1438 int Write_D_PhyOneSect(PFDO_DEVICE_EXTENSION fdoExt, WORD count, BYTE *buf)
1440 SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1441 ADDRESS_T bb = (ADDRESS_T) &Media;
1443 //if (Ssfdc_D_WriteSect(fdoExt,buf,Redundant))
1444 if (Ssfdc_D_WriteBlock(fdoExt,count,buf,Redundant))
1445 { ErrCode = ERR_HwError; MediaChange=ERROR; return(ERROR); }
1446 if (Ssfdc_D_CheckStatus())
1447 { ErrCode = ERR_WriteFault; return(ERROR); }
1452 //----- Erase_D_PhyOneBlock() ------------------------------------------
1453 int Erase_D_PhyOneBlock(struct us_data *us)
1455 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1456 //ADDRESS_T bb = (ADDRESS_T) &Media;
1458 if (Ssfdc_D_EraseBlock(us))
1459 { ErrCode = ERR_HwError; MediaChange=ERROR; return(ERROR); }
1460 if (Ssfdc_D_CheckStatus())
1461 { ErrCode = ERR_WriteFault; return(ERROR); }
1466 //SmartMedia Physical Format Check Local Subroutine
1467 //----- Set_D_PhyFmtValue() --------------------------------------------
1468 int Set_D_PhyFmtValue(struct us_data *us)
1470 // PPDO_DEVICE_EXTENSION pdoExt;
1472 // DWORD UserDefData_1, UserDefData_2, Data, mask;
1474 // //if (!fdoExt->ChildDeviceObject) return(ERROR);
1475 // //pdoExt = fdoExt->ChildDeviceObject->DeviceExtension;
1477 // Ssfdc_D_ReadID(idcode, READ_ID_1);
1479 //if (Set_D_SsfdcModel(idcode[1]))
1480 if (Set_D_SsfdcModel(us->SM_DeviceID))
1483 // //Use Multi-function pin to differentiate SM and xD.
1484 // UserDefData_1 = ReadPCIReg(fdoExt->BusID, fdoExt->DevID, fdoExt->FuncID, PCI_REG_USER_DEF) & 0x80;
1485 // if (UserDefData_1)
1487 // if ( READ_PORT_BYTE(SM_REG_INT_STATUS) & 0x80 ) fdoExt->DiskType = DISKTYPE_XD;
1488 // if ( READ_PORT_BYTE(SM_REG_INT_STATUS) & 0x40 ) fdoExt->DiskType = DISKTYPE_SM;
1490 // if ( IsXDCompliance && (fdoExt->DiskType == DISKTYPE_XD) )
1492 // Ssfdc_D_ReadID(idcode, READ_ID_3);
1493 // if (idcode[2] != 0xB5)
1498 // //Use GPIO to differentiate SM and xD.
1499 // UserDefData_2 = ReadPCIReg(fdoExt->BusID, fdoExt->DevID, fdoExt->FuncID, PCI_REG_USER_DEF) >> 8;
1500 // if ( UserDefData_2 )
1502 // Data = ReadPCIReg(fdoExt->BusID, fdoExt->DevID, 0, 0xAC);
1504 // mask = 1 << (UserDefData_2-1);
1505 // // 1 : xD , 0 : SM
1506 // if ( Data & mask)
1507 // fdoExt->DiskType = DISKTYPE_XD;
1509 // fdoExt->DiskType = DISKTYPE_SM;
1511 // if ( IsXDCompliance && (fdoExt->DiskType == DISKTYPE_XD) )
1513 // Ssfdc_D_ReadID(idcode, READ_ID_3);
1514 // if (idcode[2] != 0xB5)
1519 // if ( !(UserDefData_1 | UserDefData_2) )
1521 // // Use UserDefine Register to differentiate SM and xD.
1522 // Ssfdc_D_ReadID(idcode, READ_ID_3);
1524 // if (idcode[2] == 0xB5)
1525 // fdoExt->DiskType = DISKTYPE_XD;
1528 // if (!IsXDCompliance)
1529 // fdoExt->DiskType = DISKTYPE_SM;
1534 // if (fdoExt->UserDef_DiskType == 0x04) fdoExt->DiskType = DISKTYPE_XD;
1535 // if (fdoExt->UserDef_DiskType == 0x08) fdoExt->DiskType = DISKTYPE_SM;
1538 // if (!fdoExt->UserDef_DisableWP)
1540 // if (fdoExt->DiskType == DISKTYPE_SM)
1542 // if (Check_D_SsfdcWP())
1543 // Ssfdc.Attribute|=WP;
1550 //----- Search_D_CIS() -------------------------------------------------
1551 int Search_D_CIS(struct us_data *us)
1553 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1554 //ADDRESS_T bb = (ADDRESS_T) &Media;
1556 Media.Zone=0; Media.Sector=0;
1558 for (Media.PhyBlock=0; Media.PhyBlock<(Ssfdc.MaxBlocks-Ssfdc.MaxLogBlocks-1); Media.PhyBlock++)
1560 if (Ssfdc_D_ReadRedtData(us, Redundant))
1566 if (!Check_D_FailBlock(Redundant))
1570 if (Media.PhyBlock==(Ssfdc.MaxBlocks-Ssfdc.MaxLogBlocks-1))
1576 while (Media.Sector<CIS_SEARCH_SECT)
1580 if (Ssfdc_D_ReadRedtData(us, Redundant))
1586 if (!Check_D_DataStatus(Redundant))
1588 if (Ssfdc_D_ReadSect(us,WorkBuf,Redundant))
1594 if (Check_D_CISdata(WorkBuf,Redundant))
1600 CisArea.PhyBlock=Media.PhyBlock;
1601 CisArea.Sector=Media.Sector;
1613 //----- Make_D_LogTable() ----------------------------------------------
1614 int Make_D_LogTable(struct us_data *us)
1616 WORD phyblock,logblock;
1617 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1618 //ADDRESS_T bb = (ADDRESS_T) &Media;
1620 if (Log2Phy[Media.Zone]==NULL)
1622 Log2Phy[Media.Zone] = kmalloc(MAX_LOGBLOCK*sizeof(WORD), GFP_KERNEL);
1623 //printk("ExAllocatePool Zone = %x, Addr = %x\n", Media.Zone, Log2Phy[Media.Zone]);
1624 if (Log2Phy[Media.Zone]==NULL)
1630 //for(Media.Zone=0; Media.Zone<MAX_ZONENUM; Media.Zone++)
1631 //for(Media.Zone=0; Media.Zone<Ssfdc.MaxZones; Media.Zone++)
1633 //printk("Make_D_LogTable --- MediaZone = 0x%x\n", Media.Zone);
1634 for(Media.LogBlock=0; Media.LogBlock<Ssfdc.MaxLogBlocks; Media.LogBlock++)
1635 Log2Phy[Media.Zone][Media.LogBlock]=NO_ASSIGN;
1637 for(Media.PhyBlock=0; Media.PhyBlock<(MAX_BLOCKNUM/8); Media.PhyBlock++)
1638 Assign[Media.Zone][Media.PhyBlock]=0x00;
1640 for(Media.PhyBlock=0; Media.PhyBlock<Ssfdc.MaxBlocks; Media.PhyBlock++)
1642 if ((!Media.Zone) && (Media.PhyBlock<=CisArea.PhyBlock))
1644 Set_D_Bit(Assign[Media.Zone],Media.PhyBlock);
1648 if (Ssfdc_D_ReadRedtData(us, Redundant))
1649 { Ssfdc_D_Reset(us); return(ERROR); }
1651 if (!Check_D_DataBlank(Redundant))
1654 Set_D_Bit(Assign[Media.Zone],Media.PhyBlock);
1656 if (Check_D_FailBlock(Redundant))
1659 //if (Check_D_DataStatus(Redundant))
1662 if (Load_D_LogBlockAddr(Redundant))
1665 if (Media.LogBlock>=Ssfdc.MaxLogBlocks)
1668 if (Log2Phy[Media.Zone][Media.LogBlock]==NO_ASSIGN)
1670 Log2Phy[Media.Zone][Media.LogBlock]=Media.PhyBlock;
1674 phyblock = Media.PhyBlock;
1675 logblock = Media.LogBlock;
1676 Media.Sector = (BYTE)(Ssfdc.MaxSectors-1);
1678 if (Ssfdc_D_ReadRedtData(us, Redundant))
1679 { Ssfdc_D_Reset(us); return(ERROR); }
1681 if (!Load_D_LogBlockAddr(Redundant))
1683 if (Media.LogBlock==logblock)
1685 Media.PhyBlock=Log2Phy[Media.Zone][logblock];
1687 if (Ssfdc_D_ReadRedtData(us, Redundant))
1688 { Ssfdc_D_Reset(us); return(ERROR); }
1690 Media.PhyBlock=phyblock;
1692 if (!Load_D_LogBlockAddr(Redundant))
1694 if (Media.LogBlock!=logblock)
1696 Media.PhyBlock=Log2Phy[Media.Zone][logblock];
1697 Log2Phy[Media.Zone][logblock]=phyblock;
1702 Media.PhyBlock=Log2Phy[Media.Zone][logblock];
1703 Log2Phy[Media.Zone][logblock]=phyblock;
1711 //#ifdef L2P_ERR_ERASE
1712 // if (!(Ssfdc.Attribute &MWP))
1714 // Ssfdc_D_Reset(fdoExt);
1715 // if (Ssfdc_D_EraseBlock(fdoExt))
1718 // if (Ssfdc_D_CheckStatus())
1720 // if (MarkFail_D_PhyOneBlock())
1724 // Clr_D_Bit(Assign[Media.Zone],Media.PhyBlock);
1727 // Ssfdc.Attribute|=MWP;
1729 Media.PhyBlock=phyblock;
1731 } // End for (Media.PhyBlock<Ssfdc.MaxBlocks)
1733 AssignStart[Media.Zone]=0;
1735 } // End for (Media.Zone<MAX_ZONENUM)
1741 //----- MarkFail_D_PhyOneBlock() ---------------------------------------
1742 int MarkFail_D_PhyOneBlock(struct us_data *us)
1745 //SSFDCTYPE_T aa = (SSFDCTYPE_T ) &Ssfdc;
1746 //ADDRESS_T bb = (ADDRESS_T) &Media;
1749 Set_D_FailBlock(WorkRedund);
1750 //Ssfdc_D_WriteRedtMode();
1752 for(Media.Sector=0; Media.Sector<Ssfdc.MaxSectors; Media.Sector++)
1754 if (Ssfdc_D_WriteRedtData(us, WorkRedund))
1757 Media.Sector = sect;
1758 ErrCode = ERR_HwError;
1759 MediaChange = ERROR;
1761 } // NO Status Check
1770 ////----- SM_Init() ----------------------------------------------------
1771 //void SM_Init(void)
1773 // _Hw_D_ClrIntCardChg();
1774 // _Hw_D_SetIntMask();
1775 // // For DMA Interrupt
1776 // _Hw_D_ClrDMAIntCardChg();
1777 // _Hw_D_SetDMAIntMask();
1780 ////----- Media_D_EraseAllRedtData() -----------------------------------
1781 //int Media_D_EraseAllRedtData(DWORD Index, BOOLEAN CheckBlock)
1785 // if (Check_D_MediaPower())
1788 // if (Check_D_MediaWP())
1791 // for (i=0; i<REDTSIZE; i++)
1792 // WorkRedund[i] = 0xFF;
1794 // Media.Zone = (BYTE)Index;
1795 // for (Media.PhyBlock=0; Media.PhyBlock<Ssfdc.MaxBlocks; Media.PhyBlock++)
1797 // if ((!Media.Zone) && (Media.PhyBlock<=CisArea.PhyBlock))
1800 // if (Ssfdc_D_EraseBlock(fdoExt))
1802 // ErrCode = ERR_HwError;
1806 // for(Media.Sector=0; Media.Sector<Ssfdc.MaxSectors; Media.Sector++)
1808 // Ssfdc_D_WriteRedtMode();
1810 // if (Ssfdc_D_WriteRedtData(WorkRedund))
1812 // Ssfdc_D_Reset(fdoExt);
1813 // ErrCode = ERR_HwError;
1814 // MediaChange = ERROR;
1816 // } // NO Status Check
1819 // Ssfdc_D_Reset(fdoExt);
1822 // Ssfdc_D_Reset(fdoExt);
1827 ////----- Media_D_GetMediaInfo() ---------------------------------------
1828 //DWORD Media_D_GetMediaInfo(PFDO_DEVICE_EXTENSION fdoExt, PIOCTL_MEDIA_INFO_IN pParamIn, PIOCTL_MEDIA_INFO_OUT pParamOut)
1830 // pParamOut->ErrCode = STATUS_CMD_FAIL;
1832 // Init_D_SmartMedia();
1834 // if (Check_D_MediaPower())
1835 // return (ErrCode==ERR_NoSmartMedia) ? STATUS_CMD_NO_MEDIA : STATUS_CMD_FAIL;
1837 // if (Set_D_PhyFmtValue(fdoExt))
1838 // return STATUS_CMD_FAIL;
1840 // //usleep(56*1024);
1841 // if (Search_D_CIS(fdoExt))
1842 // return STATUS_CMD_FAIL;
1844 // if (Check_D_MediaWP())
1845 // return STATUS_CMD_MEDIA_WP;
1847 // pParamOut->PageSize = Ssfdc.MaxSectors;
1848 // pParamOut->BlockSize = Ssfdc.MaxBlocks;
1849 // pParamOut->ZoneSize = Ssfdc.MaxZones;
1851 // return STATUS_CMD_SUCCESS;