X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_nand.c;h=0a76ca020d23ef2f59c55740b09e52d7ee259fec;hp=af4215772482a2b11db0c77ad1885f75180f0712;hb=fbf2605a5dad8cf93170499d4227064996cce12f;hpb=e8cfe05cf0d057f6978c37943e51b17bb14664e3 diff --git a/yaffs_nand.c b/yaffs_nand.c index af42157..0a76ca0 100644 --- a/yaffs_nand.c +++ b/yaffs_nand.c @@ -12,7 +12,7 @@ */ const char *yaffs_nand_c_version = - "$Id: yaffs_nand.c,v 1.9 2008-05-05 07:58:58 charles Exp $"; + "$Id: yaffs_nand.c,v 1.11 2009-09-09 03:03:01 charles Exp $"; #include "yaffs_nand.h" #include "yaffs_tagscompat.h" @@ -20,17 +20,19 @@ const char *yaffs_nand_c_version = #include "yaffs_getblockinfo.h" -int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND, - __u8 * buffer, - yaffs_ExtendedTags * tags) +int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND, + __u8 *buffer, + yaffs_ExtendedTags *tags) { int result; yaffs_ExtendedTags localTags; int realignedChunkInNAND = chunkInNAND - dev->chunkOffset; + dev->nPageReads++; + /* If there are no tags provided, use local tags to get prioritised gc working */ - if(!tags) + if (!tags) tags = &localTags; if (dev->readChunkWithTagsFromNAND) @@ -41,21 +43,24 @@ int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND, realignedChunkInNAND, buffer, tags); - if(tags && - tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR){ + if (tags && + tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR) { yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock); - yaffs_HandleChunkError(dev,bi); + yaffs_HandleChunkError(dev, bi); } return result; } -int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev, +int yaffs_WriteChunkWithTagsToNAND(yaffs_Device *dev, int chunkInNAND, - const __u8 * buffer, - yaffs_ExtendedTags * tags) + const __u8 *buffer, + yaffs_ExtendedTags *tags) { + + dev->nPageWrites++; + chunkInNAND -= dev->chunkOffset; @@ -85,20 +90,20 @@ int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev, tags); } -int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo) +int yaffs_MarkBlockBad(yaffs_Device *dev, int blockNo) { blockNo -= dev->blockOffset; -; + if (dev->markNANDBlockBad) return dev->markNANDBlockBad(dev, blockNo); else return yaffs_TagsCompatabilityMarkNANDBlockBad(dev, blockNo); } -int yaffs_QueryInitialBlockState(yaffs_Device * dev, +int yaffs_QueryInitialBlockState(yaffs_Device *dev, int blockNo, - yaffs_BlockState * state, + yaffs_BlockState *state, __u32 *sequenceNumber) { blockNo -= dev->blockOffset; @@ -119,8 +124,8 @@ int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev, blockInNAND -= dev->blockOffset; - dev->nBlockErasures++; + result = dev->eraseBlockInNAND(dev, blockInNAND); return result;