X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_tagscompat.c;h=ace4b28af49dea04c39df9c1dbc7dfbd36e32684;hp=98b7b0420a89b1d072ab7d163cdcf92ae7161eb1;hb=68f0159122cfb94e6912dd99d6398ba72e578a72;hpb=dccf947cb075996a9f2d833c55760af7d5e42be9 diff --git a/yaffs_tagscompat.c b/yaffs_tagscompat.c index 98b7b04..ace4b28 100644 --- a/yaffs_tagscompat.c +++ b/yaffs_tagscompat.c @@ -10,7 +10,7 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * - * $Id: yaffs_tagscompat.c,v 1.2 2005-03-16 04:00:36 charles Exp $ + * $Id: yaffs_tagscompat.c,v 1.5 2005-08-10 20:34:40 charles Exp $ */ #include "yaffs_guts.h" @@ -18,11 +18,12 @@ #include "yaffs_ecc.h" static void yaffs_HandleReadDataError(yaffs_Device *dev,int chunkInNAND); +#ifdef NOTYET static void yaffs_CheckWrittenBlock(yaffs_Device *dev,int chunkInNAND); static void yaffs_HandleWriteChunkOk(yaffs_Device *dev,int chunkInNAND,const __u8 *data, const yaffs_Spare *spare); static void yaffs_HandleUpdateChunk(yaffs_Device *dev,int chunkInNAND, const yaffs_Spare *spare); static void yaffs_HandleWriteChunkError(yaffs_Device *dev,int chunkInNAND); - +#endif static const char yaffs_countBitsTable[256] = @@ -305,8 +306,7 @@ static int yaffs_ReadChunkFromNAND(struct yaffs_DeviceStruct *dev, return retVal; } - - +#ifdef NOTYET static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,int chunkInNAND) { @@ -331,139 +331,14 @@ static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,int chunkInNAND return YAFFS_OK; } - - -#if 0 -int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,int blockInNAND) -{ - dev->nBlockErasures++; - return dev->eraseBlockInNAND(dev,blockInNAND); -} - -int yaffs_InitialiseNAND(struct yaffs_DeviceStruct *dev) -{ - return dev->initialiseNAND(dev); -} - #endif -#if 0 -static int yaffs_WriteNewChunkToNAND(struct yaffs_DeviceStruct *dev, const __u8 *data, yaffs_Spare *spare,int useReserve) -{ - int chunk; - - int writeOk = 1; - int attempts = 0; - - unsigned char rbData[YAFFS_BYTES_PER_CHUNK]; - yaffs_Spare rbSpare; - do{ - chunk = yaffs_AllocateChunk(dev,useReserve); - - if(chunk >= 0) - { - - // First check this chunk is erased... -#ifndef CONFIG_YAFFS_DISABLE_CHUNK_ERASED_CHECK - writeOk = yaffs_CheckChunkErased(dev,chunk); -#endif - if(!writeOk) - { - T(YAFFS_TRACE_ERROR,(TSTR("**>> yaffs chunk %d was not erased" TENDSTR),chunk)); - } - else - { - writeOk = yaffs_WriteChunkToNAND(dev,chunk,data,spare); - } - attempts++; - if(writeOk) - { - // Readback & verify - // If verify fails, then delete this chunk and try again - // To verify we compare everything except the block and - // page status bytes. - // NB We check a raw read without ECC correction applied - yaffs_ReadChunkFromNAND(dev,chunk,rbData,&rbSpare,0); - -#ifndef CONFIG_YAFFS_DISABLE_WRITE_VERIFY - if(!yaffs_VerifyCompare(data,rbData,spare,&rbSpare)) - { - // Didn't verify - T(YAFFS_TRACE_ERROR,(TSTR("**>> yaffs write verify failed on chunk %d" TENDSTR), chunk)); - - writeOk = 0; - } -#endif - - } - if(writeOk) - { - // Copy the data into the write buffer. - // NB We do this at the end to prevent duplicates in the case of a write error. - //Todo - yaffs_HandleWriteChunkOk(dev,chunk,data,spare); - } - else - { - yaffs_HandleWriteChunkError(dev,chunk); - } - } - - } while(chunk >= 0 && ! writeOk); - - if(attempts > 1) - { - T(YAFFS_TRACE_ERROR,(TSTR("**>> yaffs write required %d attempts" TENDSTR),attempts)); - dev->nRetriedWrites+= (attempts - 1); - } - - return chunk; -} - -#endif /// // Functions for robustisizing // // -#if 0 - -static void yaffs_RetireBlock(yaffs_Device *dev,int blockInNAND) -{ - // Ding the blockStatus in the first two pages of the block. - - yaffs_Spare spare; - - memset(&spare, 0xff,sizeof(yaffs_Spare)); - - spare.blockStatus = 0; - - // TODO change this retirement marking for other NAND types - yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock, NULL , &spare); - yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock + 1, NULL , &spare); - - yaffs_GetBlockInfo(dev,blockInNAND)->blockState = YAFFS_BLOCK_STATE_DEAD; - dev->nRetiredBlocks++; -} - -#endif - -#if 0 -static int yaffs_RewriteBufferedBlock(yaffs_Device *dev) -{ - dev->doingBufferedBlockRewrite = 1; - // - // Remove erased chunks - // Rewrite existing chunks to a new block - // Set current write block to the new block - - dev->doingBufferedBlockRewrite = 0; - - return 1; -} - -#endif static void yaffs_HandleReadDataError(yaffs_Device *dev,int chunkInNAND) { @@ -480,6 +355,7 @@ static void yaffs_HandleReadDataError(yaffs_Device *dev,int chunkInNAND) } +#ifdef NOTYET static void yaffs_CheckWrittenBlock(yaffs_Device *dev,int chunkInNAND) { } @@ -530,45 +406,10 @@ static int yaffs_VerifyCompare(const __u8 *d0, const __u8 * d1, const yaffs_Spar return 1; } +#endif /* NOTYET */ -#if 0 -typedef struct -{ - - unsigned validMarker0; - unsigned chunkUsed; // Status of the chunk: used or unused - unsigned objectId; // If 0 then this is not part of an object (unused) - unsigned chunkId; // If 0 then this is a header - unsigned byteCount; // Only valid for data chunks - // The following stuff only has meaning when we read - yaffs_ECCResult eccResult; // Only valid when we read. - unsigned blockBad; // Only valid on reading - - // YAFFS 1 stuff - unsigned chunkDeleted; // The chunk is marked deleted - unsigned serialNumber; // Yaffs1 2-bit serial number - - // YAFFS2 stuff - unsigned sequenceNumber; // The sequence number of this block - - unsigned validMarker1; - -} yaffs_ExtendedTags; -typedef struct -{ - unsigned chunkId:20; - unsigned serialNumber:2; - unsigned byteCount:10; - unsigned objectId:18; - unsigned ecc:12; - unsigned unusedStuff:2; -} yaffs_Tags; - - -#endif - int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u8 *data, const yaffs_ExtendedTags *eTags) { yaffs_Spare spare; @@ -655,7 +496,7 @@ int yaffs_TagsCompatabilityMarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int memset(&spare, 0xff,sizeof(yaffs_Spare)); - spare.blockStatus = 0; + spare.blockStatus = 'Y'; yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock, NULL , &spare); yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock + 1, NULL , &spare);