X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_nand.c;h=883a4a788079a6dc8c6b47c2494a2b690e64ef79;hp=bd815cb7af92b7dea0940e25ecd0daf9c19ebb58;hb=06f8628f9290bd967b8374c992a11dd06caa8747;hpb=3e5718ec7f0df7b76837d10583419b745cb27474 diff --git a/yaffs_nand.c b/yaffs_nand.c index bd815cb..883a4a7 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.10 2009-03-06 17:20:54 wookey Exp $"; + "$Id: yaffs_nand.c,v 1.13 2010-02-19 01:05:48 charles Exp $"; #include "yaffs_nand.h" #include "yaffs_tagscompat.h" @@ -29,12 +29,14 @@ int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND, int realignedChunkInNAND = chunkInNAND - dev->chunkOffset; + dev->nPageReads++; + /* If there are no tags provided, use local tags to get prioritised gc working */ if (!tags) tags = &localTags; - if (dev->readChunkWithTagsFromNAND) - result = dev->readChunkWithTagsFromNAND(dev, realignedChunkInNAND, buffer, + if (dev->param.readChunkWithTagsFromNAND) + result = dev->param.readChunkWithTagsFromNAND(dev, realignedChunkInNAND, buffer, tags); else result = yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(dev, @@ -44,7 +46,7 @@ int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND, if (tags && tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR) { - yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock); + yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->param.nChunksPerBlock); yaffs_HandleChunkError(dev, bi); } @@ -56,6 +58,9 @@ int yaffs_WriteChunkWithTagsToNAND(yaffs_Device *dev, const __u8 *buffer, yaffs_ExtendedTags *tags) { + + dev->nPageWrites++; + chunkInNAND -= dev->chunkOffset; @@ -75,8 +80,8 @@ int yaffs_WriteChunkWithTagsToNAND(yaffs_Device *dev, YBUG(); } - if (dev->writeChunkWithTagsToNAND) - return dev->writeChunkWithTagsToNAND(dev, chunkInNAND, buffer, + if (dev->param.writeChunkWithTagsToNAND) + return dev->param.writeChunkWithTagsToNAND(dev, chunkInNAND, buffer, tags); else return yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(dev, @@ -89,9 +94,9 @@ int yaffs_MarkBlockBad(yaffs_Device *dev, int blockNo) { blockNo -= dev->blockOffset; -; - if (dev->markNANDBlockBad) - return dev->markNANDBlockBad(dev, blockNo); + + if (dev->param.markNANDBlockBad) + return dev->param.markNANDBlockBad(dev, blockNo); else return yaffs_TagsCompatabilityMarkNANDBlockBad(dev, blockNo); } @@ -103,8 +108,8 @@ int yaffs_QueryInitialBlockState(yaffs_Device *dev, { blockNo -= dev->blockOffset; - if (dev->queryNANDBlock) - return dev->queryNANDBlock(dev, blockNo, state, sequenceNumber); + if (dev->param.queryNANDBlock) + return dev->param.queryNANDBlock(dev, blockNo, state, sequenceNumber); else return yaffs_TagsCompatabilityQueryNANDBlock(dev, blockNo, state, @@ -119,16 +124,18 @@ int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev, blockInNAND -= dev->blockOffset; - dev->nBlockErasures++; - result = dev->eraseBlockInNAND(dev, blockInNAND); + + result = dev->param.eraseBlockInNAND(dev, blockInNAND); return result; } int yaffs_InitialiseNAND(struct yaffs_DeviceStruct *dev) { - return dev->initialiseNAND(dev); + if(dev->param.initialiseNAND) + return dev->param.initialiseNAND(dev); + return YAFFS_OK; }