AtaError ATA_setDateTime(AtaFile *pAtaFile) { AtaUint16 jj; AtaUint32 ll; AtaState *pAtaDrive=pAtaFile->pDrive; AtaError ret_stat = ATA_ERROR_NONE; AtaUint16 *_AtaWriteBuffer = pAtaDrive->_AtaWriteBuffer; if (pAtaFile==NULL) return(ATA_ERROR_INVALID_PARAM); //KR042610 ll = _AtaCalculatePhySectorAndOffsetFromDirEntry((AtaUint32)pAtaFile->CurrentDirEntry, (AtaUint16 *)&jj, pAtaFile, &ret_stat); if(ret_stat) return(ret_stat); ret_stat = _AtaReadSector(ll, pAtaDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); /* Update directory entry*/ jj+=11; _AtaWriteBuffer[jj++] = pAtaFile->Time = pAtaDrive->get_mod_time(); _AtaWriteBuffer[jj] = pAtaFile->Date = pAtaDrive->get_mod_date(); /* Commit replacement directory entry sector to disk*/ ret_stat = _AtaFlush(pAtaDrive); if(ret_stat) return(ret_stat); ret_stat = pAtaDrive->AtaWriteSector(ll, pAtaDrive->pAtaMediaState, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pAtaDrive->AtaWriteSectorFlush(pAtaDrive->pAtaMediaState); return(ret_stat); }
AtaError ATA_setAttr(AtaFile *pAtaFile, AtaUint16 Attr) { AtaUint16 jj; AtaUint32 ll; AtaState *pAtaDrive=pAtaFile->pDrive; AtaError ret_stat = ATA_ERROR_NONE; AtaUint16 *_AtaWriteBuffer = pAtaDrive->_AtaWriteBuffer; if (pAtaFile==NULL) return(ATA_ERROR_INVALID_PARAM); //KR042610 ll = _AtaCalculatePhySectorAndOffsetFromDirEntry((AtaUint32)pAtaFile->CurrentDirEntry, (AtaUint16 *)&jj, pAtaFile, &ret_stat); if(ret_stat) return(ret_stat); ret_stat = _AtaReadSector(ll, pAtaDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); /* Update directory entry*/ jj+=5; /* _AtaWriteBuffer[jj] |= Attr << 8;*/ /*SUSMIT - Absolute attribute setting BUGGIX*/ _AtaWriteBuffer[jj] &= 0x00ff; _AtaWriteBuffer[jj] |= Attr << 8; pAtaFile->Attributes = Attr; /* Commit replacement directory entry sector to disk*/ ret_stat = _AtaFlush(pAtaDrive); if(ret_stat) return(ret_stat); ret_stat = pAtaDrive->AtaWriteSector(ll, pAtaDrive->pAtaMediaState, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pAtaDrive->AtaWriteSectorFlush(pAtaDrive->pAtaMediaState); return(ret_stat); }
AtaUint32 ATA_diskUsed(AtaState *pAtaState, AtaError *ret_stat) { /*returns in KB.*/ int i,j, LastCluster = 0; AtaUint32 size=0; AtaUint32 tempsize, fatmarker = 0; AtaCluster NumClusters = 0, tempCluster = 0;AtaSector PhySector = 0; AtaUint16 FatEntryOffset = 0, FatEntryAlignment = 0; AtaSector firstFat=pAtaState->FirstFatSector; AtaUint16 *_AtaWriteBuffer = pAtaState->_AtaWriteBuffer; if (pAtaState==NULL) *ret_stat = ATA_ERROR_INVALID_PARAM; //KR042610 else *ret_stat = ATA_ERROR_NONE; *ret_stat = ATA_ERROR_NONE; switch(pAtaState->FatType) { case ATA_FAT_TYPE_12: NumClusters = (AtaCluster)((pAtaState->TotalSectors-pAtaState->RootDirSector)/pAtaState->LogSectorsPerCluster); for(i=0;i<NumClusters;i++) { PhySector = _AtaCalculatePhySectorAndOffsetOfFatEntry((AtaCluster)i, pAtaState, &FatEntryOffset, &FatEntryAlignment); *ret_stat = _AtaReadFatEntryAtPhySector(PhySector, pAtaState, FatEntryOffset, FatEntryAlignment, &LastCluster, &tempCluster); if(tempCluster!=0) size++; } break; case ATA_FAT_TYPE_16: for(i=0;i<pAtaState->LogSectorsPerFat;i++) { *ret_stat = _AtaReadSector(firstFat++, pAtaState, &_AtaWriteBuffer[0], 0); tempsize=0; for(j=0;j<ATA_WORDS_PER_PHY_SECTOR;j++) if(_AtaWriteBuffer[j]!=0) tempsize++; size+=tempsize; } break; case ATA_FAT_TYPE_32: for(i=0;i<pAtaState->LogSectorsPerFat;i++) { *ret_stat = _AtaReadSector(firstFat++, pAtaState, &_AtaWriteBuffer[0], 0); tempsize=0; for(j=0;j<ATA_WORDS_PER_PHY_SECTOR;j+=2) { fatmarker = (AtaUint32)_AtaWriteBuffer[j]; fatmarker = (fatmarker&0x0000ffff) << 16; fatmarker |= (AtaUint32)_AtaWriteBuffer[j+1]; if(fatmarker!=0) tempsize++; } size+=tempsize; } break; default: break; } /* return ((size*pAtaState->WordsPerCluster)/512);*/ /*SUSMIT - Original Implementation*/ /* return (size*(pAtaState->WordsPerCluster/512));*//*SUSMIT - Fails for disks with cluster size of 512 bytes*/ return ((size*(pAtaState->WordsPerCluster/256))/2); }
AtaUint32 ATA_diskUsed(AtaState *pAtaState, AtaError *ret_stat) { /*returns in KB.*/ int i,j; AtaUint32 size=0; AtaUint32 tempsize; AtaSector firstFat=pAtaState->FirstFatSector; AtaUint16 *_AtaWriteBuffer = pAtaState->_AtaWriteBuffer; if (pAtaState==NULL) *ret_stat = ATA_ERROR_INVALID_PARAM; //KR042610 else *ret_stat = ATA_ERROR_NONE; for(i=0;i<pAtaState->LogSectorsPerFat;i++) { *ret_stat = _AtaReadSector(firstFat++, pAtaState, &_AtaWriteBuffer[0], 0); tempsize=0; for(j=0;j<ATA_WORDS_PER_PHY_SECTOR;j++) if(_AtaWriteBuffer[j]!=0) tempsize++; size+=tempsize; } /* return ((size*pAtaState->WordsPerCluster)/512);*/ /*SUSMIT - Original Implementation*/ /* return (size*(pAtaState->WordsPerCluster/512));*//*SUSMIT - Fails for disks with cluster size of 512 bytes*/ return ((size*(pAtaState->WordsPerCluster/256))/2); }
AtaError ATA_format(AtaState *pDrive, int flag) { AtaSector testsector, testsector1; int x; AtaError ret_stat = ATA_ERROR_NONE; AtaUint16 *_AtaWriteBuffer = pDrive->_AtaWriteBuffer; AtaUint16 _AtaWriteBuffer1[256]; /*SUSMIT - FAT32 format fix*/ AtaSector PhySector; AtaUint16 fOffset, fAlign; AtaCluster write_cluster, RootCluster; int LastCluster = 0; unsigned short FatNo; /*SUSMIT - FAT32 format fix*/ if (pDrive==NULL) return(ATA_ERROR_INVALID_PARAM); //KR042810 for(x=0; x< 256; x++) _AtaWriteBuffer1[x] = 0; /*Removed this on order to reduce memory, we won't remember boot records so, our format won't be able to fix disks with Bad MBR/BR but will be able to format*/ #if 0 switch(pDrive->FatType) { case ATA_FAT_TYPE_12: /*write MBR*/ ret_stat = _AtaReadSector((AtaSector)0, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSector((AtaSector)0, pDrive->pAtaMediaState, &MBR_8MB_FAT12_MMC[0], 0); if(ret_stat) return(ret_stat); /*Write BR*/ ret_stat = _AtaReadSector((AtaSector)pDrive->BootPhySector, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSector((AtaSector)pDrive->BootPhySector, pDrive->pAtaMediaState, &BR_8MB_FAT12_MMC[0], 0); if(ret_stat) return(ret_stat); break; case ATA_FAT_TYPE_16: /*Write MBR*/ ret_stat = _AtaReadSector((AtaSector)0, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSector((AtaSector)0, pDrive->pAtaMediaState, &MBR_32MB_FAT16_MMC[0], 0); if(ret_stat) return(ret_stat); /*Write BR*/ ret_stat = _AtaReadSector((AtaSector)pDrive->BootPhySector, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSector((AtaSector)pDrive->BootPhySector, pDrive->pAtaMediaState, &BR_32MB_FAT16_MMC[0], 0); if(ret_stat) return(ret_stat); break; case ATA_FAT_TYPE_32: /*Write MBR*/ ret_stat = _AtaReadSector((AtaSector)0, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSector((AtaSector)0, pDrive->pAtaMediaState, &MBR_32MB_FAT16_MMC[0], 0); if(ret_stat) return(ret_stat); /*Write BR*/ ret_stat = _AtaReadSector((AtaSector)pDrive->BootPhySector, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSector((AtaSector)pDrive->BootPhySector, pDrive->pAtaMediaState, &BR_32MB_FAT16_MMC[0], 0); if(ret_stat) return(ret_stat); break; default: return(ATA_ERROR_BAD_MEDIA); } #endif /*Clear FAT*/ if(pDrive->FatType == ATA_FAT_TYPE_32) { /*SUSMIT - FAT32 format fix*/ RootCluster = _AtaReadDoubleWord(pDrive->BootPhySector, pDrive, 44); /* Fat Size/Sector Count byte 36 - 39 */ ret_stat = _AtaReadSector((AtaSector)pDrive->RootDirSector, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); _AtaWriteBuffer1[0] = 0xFFF8; _AtaWriteBuffer1[1] = 0xFFFF; _AtaWriteBuffer1[2] = 0xFFF8; _AtaWriteBuffer1[3] = 0xFFFF; _AtaWriteBuffer1[4] = 0xFFF8; _AtaWriteBuffer1[5] = 0xFFFF; ret_stat = pDrive->AtaWriteSector((AtaSector)pDrive->RootDirSector, pDrive->pAtaMediaState, &_AtaWriteBuffer1[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSectorFlush(pDrive->pAtaMediaState); if(ret_stat) return(ret_stat); for(FatNo=0; FatNo<pDrive->NumberOfFats; FatNo++) { PhySector = _AtaCalculatePhySectorAndOffsetOfFatEntry(RootCluster, pDrive, &fOffset, &fAlign); PhySector += ( (unsigned long)FatNo * pDrive->LogSectorsPerFat * (unsigned long)(pDrive->WordsPerLogSector/ATA_WORDS_PER_PHY_SECTOR) ); ret_stat = _AtaReadFatEntryAtPhySector(PhySector, pDrive, fOffset, fAlign, &LastCluster, &write_cluster); if(ret_stat) return(ret_stat); ret_stat = _AtaWriteFatEntryAtPhySector(PhySector, pDrive, 0x0FFFFFFF, fOffset, fAlign, 1,1); if(ret_stat) return(ret_stat); } /*SUSMIT - FAT32 format fix*/ } else { testsector=pDrive->FirstFatSector; ret_stat = _AtaReadSector((AtaSector)testsector, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); _AtaWriteBuffer1[0] = 0xFFF8; _AtaWriteBuffer1[1] = 0xFFFF; ret_stat = pDrive->AtaWriteSector((AtaSector)testsector++, pDrive->pAtaMediaState, &_AtaWriteBuffer1[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSectorFlush(pDrive->pAtaMediaState); if(ret_stat) return(ret_stat); _AtaWriteBuffer1[0] = 0; _AtaWriteBuffer1[1] = 0; testsector1 = pDrive->FirstFatSector+pDrive->LogSectorsPerFat; while(testsector<testsector1) { ret_stat = _AtaReadSector((AtaSector)testsector, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSector((AtaSector)testsector++, pDrive->pAtaMediaState, &_AtaWriteBuffer1[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSectorFlush(pDrive->pAtaMediaState); if(ret_stat) return(ret_stat); } ret_stat = _AtaReadSector((AtaSector)testsector, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); _AtaWriteBuffer1[0] = 0xFFF8; _AtaWriteBuffer1[1] = 0xFFFF; ret_stat = pDrive->AtaWriteSector((AtaSector)testsector++, pDrive->pAtaMediaState, &_AtaWriteBuffer1[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSectorFlush(pDrive->pAtaMediaState); if(ret_stat) return(ret_stat); _AtaWriteBuffer1[0] = 0; _AtaWriteBuffer1[1] = 0; testsector1 = pDrive->FirstDataSector; while(testsector<testsector1) { ret_stat = _AtaReadSector((AtaSector)testsector, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSector((AtaSector)testsector++, pDrive->pAtaMediaState, &_AtaWriteBuffer1[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSectorFlush(pDrive->pAtaMediaState); if(ret_stat) return(ret_stat); } } /*only for full format*/ if (flag) { testsector = pDrive->FirstDataSector; while(testsector<=pDrive->TotalSectors) { ret_stat = _AtaReadSector((AtaSector)testsector, pDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSector((AtaSector)testsector++, pDrive->pAtaMediaState, &_AtaWriteBuffer1[0], 0); if(ret_stat) return(ret_stat); ret_stat = pDrive->AtaWriteSectorFlush(pDrive->pAtaMediaState); if(ret_stat) return(ret_stat); } } /* SUSMIT - 25 FEB 2003 - NMP*/ /* ret_stat = ATA_systemInit(pDrive);*/ ret_stat = ATA_systemInit(pDrive,0); /* SUSMIT - 25 FEB 2003 - NMP*/ return(ret_stat); }
AtaError ATA_getLongName(AtaFile *pAtaFile, char *LongName, AtaUint16 StartOffset, AtaUint16 Length) { register char *cc; AtaError ret_stat = ATA_ERROR_NONE; AtaUint32 ll;AtaUint16 kk; short jj = 0;long lll; AtaState *pAtaDrive = pAtaFile->pDrive; AtaUint16 *_AtaWriteBuffer = pAtaDrive->_AtaWriteBuffer; AtaUint16 exit_flag = 0; AtaUint16 NumLFNEntry = 0; int i,j;AtaUint16 icnt = 0; AtaUint16 file_cksum = _Ata_lfn_checksum(pAtaFile); if ((pAtaFile==NULL)||(pAtaDrive==NULL)) return(ATA_ERROR_INVALID_PARAM); //KR042610 file_cksum = file_cksum<<8; file_cksum &= 0xff00; ll = _AtaCalculatePhySectorAndOffsetFromDirEntry((AtaUint32)pAtaFile->CurrentDirEntry, (AtaUint16 *)&jj, pAtaFile, &ret_stat); if(ret_stat) return(ret_stat); ret_stat = _AtaReadSector(ll, pAtaDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); kk=jj; jj-=16; /*SUSMIT - Fix for UNICODE*/ /* while(((_AtaWriteBuffer[jj+5] == 0x0F00)||(_AtaWriteBuffer[jj+5] == 0x0FFF))&&(jj>=0)&&(!exit_flag)&&(_AtaWriteBuffer[jj+6] == file_cksum)) {*/ while((((_AtaWriteBuffer[jj+5]&0xff00) == 0x0F00)||(_AtaWriteBuffer[jj+5] == 0x0FFF))&&(jj>=0)&&(!exit_flag)&&(_AtaWriteBuffer[jj+6] == file_cksum)) { /*SUSMIT - Fix for UNICODE*/ if(_AtaWriteBuffer[jj]&0x0040) exit_flag = 1; NumLFNEntry++; jj-=16; } /*SUSMIT - Code to check for corner cases*/ if((!exit_flag)&&((NumLFNEntry)||(kk==0))) { ret_stat = AtaGetLFN(ll, pAtaDrive, LongName, &icnt, kk, jj, Length, NumLFNEntry); NumLFNEntry = 0; if(ret_stat) return(ret_stat); /*Susmit - Fix for .*/ lll = (AtaUint32)pAtaFile->CurrentDirEntry-16-(AtaUint16)(kk%16); if(lll<0) lll = (AtaUint32)pAtaFile->CurrentDirEntry; ll = _AtaCalculatePhySectorAndOffsetFromDirEntry((AtaUint32)(lll), (AtaUint16 *)&jj, pAtaFile, &ret_stat); /*Susmit - Fix for .*/ /* ll = _AtaCalculatePhySectorAndOffsetFromDirEntry(((AtaUint32)pAtaFile->CurrentDirEntry-16-(AtaUint16)(kk%16)), (AtaUint16 *)&jj, pAtaFile, &ret_stat);*/ if(ret_stat) return(ret_stat); ret_stat = _AtaReadSector(ll, pAtaDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); jj = 256; kk=jj; jj-=16; /*SUSMIT - Fix for UNICODE*/ /* while(((_AtaWriteBuffer[jj+5] == 0x0F00)||(_AtaWriteBuffer[jj+5] == 0x0FFF))&&(jj>=0)&&(!exit_flag)&&(_AtaWriteBuffer[jj+6] == file_cksum)) {*/ while((((_AtaWriteBuffer[jj+5]&0xff00) == 0x0F00)||(_AtaWriteBuffer[jj+5] == 0x0FFF))&&(jj>=0)&&(!exit_flag)&&(_AtaWriteBuffer[jj+6] == file_cksum)) { /*SUSMIT - Fix for UNICODE*/ if(_AtaWriteBuffer[jj]&0x0040) exit_flag = 1; NumLFNEntry++; jj-=16; } } /*SUSMIT - Code to check for corner cases*/ if(NumLFNEntry) { ret_stat = AtaGetLFN(ll, pAtaDrive, LongName, &icnt, kk, jj, Length, NumLFNEntry); NumLFNEntry = 0; if(ret_stat) return(ret_stat); /*End of filename collection, now need to put '\0' at proper place - SUSMIT*/ /*SUSMIT - Fix for UNICODE of more than 208 characters*/ if(!exit_flag) { ll = _AtaCalculatePhySectorAndOffsetFromDirEntry((AtaUint32)(lll-16), (AtaUint16 *)&jj, pAtaFile, &ret_stat); if(ret_stat) return(ret_stat); ret_stat = _AtaReadSector(ll, pAtaDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); jj = 256; kk=jj; jj-=16; /*SUSMIT - Fix for UNICODE*/ /* while(((_AtaWriteBuffer[jj+5] == 0x0F00)||(_AtaWriteBuffer[jj+5] == 0x0FFF))&&(jj>=0)&&(!exit_flag)&&(_AtaWriteBuffer[jj+6] == file_cksum)) {*/ while((((_AtaWriteBuffer[jj+5]&0xff00) == 0x0F00)||(_AtaWriteBuffer[jj+5] == 0x0FFF))&&(jj>=0)&&(!exit_flag)&&(_AtaWriteBuffer[jj+6] == file_cksum)) { /*SUSMIT - Fix for UNICODE*/ if(_AtaWriteBuffer[jj]&0x0040) exit_flag = 1; NumLFNEntry++; jj-=16; } } /*SUSMIT - Code to check for corner cases*/ if(NumLFNEntry) { ret_stat = AtaGetLFN(ll, pAtaDrive, LongName, &icnt, kk, jj, Length, NumLFNEntry); NumLFNEntry = 0; if(ret_stat) return(ret_stat); } /*SUSMIT - Fix for UNICODE of more than 208 characters*/ if(icnt < Length) LongName[icnt] = '\0'; /*SUSMIT - No need to worry about zeroes if we get the full LFN, they will come automatically from LFN entries*/ } else { cc = pAtaFile->Filename; i = 0;j = 0; while((*cc!=' ')&&(i<Length)&&(*cc!='\0')) {LongName[i++] = pAtaFile->Filename[j++];cc++;} cc = pAtaFile->Ext; j = 0; if((i<Length)&&(*cc!=' ')&&(*cc!='\0')) LongName[i++] = '.'; while((*cc!=' ')&&(i<Length)&&(*cc!='\0')) {LongName[i++] = pAtaFile->Ext[j++];cc++;} if(i<Length) LongName[i] = '\0'; } return(ret_stat); }
AtaError ATA_deleteLong(AtaFile *pAtaFile) { int last_cluster; AtaError ret_stat = ATA_ERROR_NONE; AtaUint32 ll; unsigned short jj = 0; /*SUSMIT - New LFN Fix*/ AtaUint16 deleteflag = 0; /*SUSMIT - New LFN Fix*/ AtaState *pAtaDrive = pAtaFile->pDrive; AtaUint16 *_AtaWriteBuffer = pAtaDrive->_AtaWriteBuffer; AtaUint32 direntrycounter, dircounterstart = 0; AtaUint16 entriespersector = pAtaDrive->WordsPerLogSector/16; AtaUint16 file_cksum = _Ata_lfn_checksum(pAtaFile); if (pAtaFile==NULL) return(ATA_ERROR_INVALID_PARAM); //KR042610 file_cksum = file_cksum<<8; file_cksum &= 0xff00; if(pAtaFile->CurrentDirEntry>20) {dircounterstart = (AtaUint32)(pAtaFile->CurrentDirEntry-20); dircounterstart-=(AtaUint32)(dircounterstart%entriespersector);} /*SUSMIT - This magic number 20 comes from the limitation that an LFN can contain max 255 characters & all the entries are contiguous*/ for(direntrycounter = dircounterstart; direntrycounter <= pAtaFile->CurrentDirEntry; direntrycounter += entriespersector) { ll = _AtaCalculatePhySectorAndOffsetFromDirEntry((AtaUint32)direntrycounter, (AtaUint16 *)&jj, pAtaFile, &ret_stat); if(ret_stat) return(ret_stat); ret_stat = _AtaReadSector(ll, pAtaDrive, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); while(jj<256) { if((((_AtaWriteBuffer[jj+5]&0xff00) == 0x0F00)||(_AtaWriteBuffer[jj+5] == 0x0FFF))&&(_AtaWriteBuffer[jj+6] == file_cksum)) /*SUSMIT - New LFN Fix*/ { if(((_AtaWriteBuffer[jj]&0x0040)==0x0040)&&((_AtaWriteBuffer[jj]&0x000f)==(pAtaFile->CurrentDirEntry-(direntrycounter+jj/entriespersector)))) deleteflag = 1; /*SUSMIT - New LFN deletion modification to save characters*/ /* if(deleteflag){ _AtaWriteBuffer[jj] = '\xE5'; }*/ if(deleteflag){ _AtaWriteBuffer[jj] = (_AtaWriteBuffer[jj]&0xff00)|0x00E5; } /*SUSMIT - New LFN deletion modification to save characters*/ } jj+=16; /*SUSMIT - New LFN Fix*/ } ret_stat = _AtaFlush(pAtaDrive); if(ret_stat) return(ret_stat); ret_stat = pAtaDrive->AtaWriteSector(ll, pAtaDrive->pAtaMediaState, &_AtaWriteBuffer[0], 0); if(ret_stat) return(ret_stat); ret_stat = pAtaDrive->AtaWriteSectorFlush(pAtaDrive->pAtaMediaState); if(ret_stat) return(ret_stat); } /*Deletion of 8.3 directory entry & actual file - Susmit*/ pAtaFile->PrevBrokenCluster = pAtaFile->NextBrokenCluster = pAtaFile->Cluster = pAtaFile->StartCluster; pAtaFile->Filename[0] = '\xE5'; if(_AtaCreate(pAtaFile,2,0)) { return(1); } /*SUSMIT - Directory Delete FAT Updation Bug Fix*/ /* if(pAtaFile->Size!=0) {*/ /* if((pAtaFile->Size!=0)||(pAtaFile->Attributes == ATA_ATTR_DIRECTORY)) *//*SUSMIT - Directory Attribute Fix*/ if((pAtaFile->Size!=0)||(ATA_isDir(pAtaFile))) /*SUSMIT - Directory Delete FAT Updation Bug Fix*/ { do { /*SUSMIT - New delete change due to modification in _AtaFindNextBrokenCluster*/ /* ret_stat = _AtaFindNextBrokenCluster(pAtaFile,1);*/ ret_stat = _AtaFindNextBrokenCluster(pAtaFile,0); /*SUSMIT - New delete change due to modification in _AtaFindNextBrokenCluster*/ if(ret_stat == ATA_ERROR_EOF) ret_stat = ATA_ERROR_NONE; if(ret_stat) return(ret_stat); ret_stat = _AtaReadFatEntry(pAtaFile->NextBrokenCluster, pAtaDrive, &last_cluster, &pAtaFile->Cluster); if(ret_stat) return(ret_stat); ret_stat = _AtaWriteFatEntry(pAtaFile,1); if(ret_stat) return(ret_stat); } while(!last_cluster); } return(ret_stat); }