X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_tagscompat.c;h=1ab054faf61743f8e99e600f83ce78a3f5168a57;hp=402537fb4ee1387132075c4247161bda4ab0d438;hb=f37d0b9ff0c87c1e22a5f708dbb4b455da7af59f;hpb=97f9eea27dc6b83fe55f9b86adbb5e4961ea921a diff --git a/yaffs_tagscompat.c b/yaffs_tagscompat.c index 402537f..1ab054f 100644 --- a/yaffs_tagscompat.c +++ b/yaffs_tagscompat.c @@ -15,6 +15,7 @@ #include "yaffs_tagscompat.h" #include "yaffs_ecc.h" #include "yaffs_getblockinfo.h" +#include "yaffs_trace.h" static void yaffs_HandleReadDataError(yaffs_Device *dev, int chunkInNAND); #ifdef NOTYET @@ -163,15 +164,14 @@ static int yaffs_WriteChunkToNAND(struct yaffs_DeviceStruct *dev, int chunkInNAND, const __u8 *data, yaffs_Spare *spare) { - if (chunkInNAND < dev->startBlock * dev->nChunksPerBlock) { + if (chunkInNAND < dev->param.startBlock * dev->param.nChunksPerBlock) { T(YAFFS_TRACE_ERROR, (TSTR("**>> yaffs chunk %d is not valid" TENDSTR), chunkInNAND)); return YAFFS_FAIL; } - dev->nPageWrites++; - return dev->writeChunkToNAND(dev, chunkInNAND, data, spare); + return dev->param.writeChunkToNAND(dev, chunkInNAND, data, spare); } static int yaffs_ReadChunkFromNAND(struct yaffs_DeviceStruct *dev, @@ -184,16 +184,14 @@ static int yaffs_ReadChunkFromNAND(struct yaffs_DeviceStruct *dev, int retVal; yaffs_Spare localSpare; - dev->nPageReads++; - if (!spare && data) { /* If we don't have a real spare, then we use a local one. */ /* Need this for the calculation of the ecc */ spare = &localSpare; } - if (!dev->useNANDECC) { - retVal = dev->readChunkFromNAND(dev, chunkInNAND, data, spare); + if (!dev->param.useNANDECC) { + retVal = dev->param.readChunkFromNAND(dev, chunkInNAND, data, spare); if (data && doErrorCorrection) { /* Do ECC correction */ /* Todo handle any errors */ @@ -254,7 +252,7 @@ static int yaffs_ReadChunkFromNAND(struct yaffs_DeviceStruct *dev, memset(&nspare, 0, sizeof(nspare)); - retVal = dev->readChunkFromNAND(dev, chunkInNAND, data, + retVal = dev->param.readChunkFromNAND(dev, chunkInNAND, data, (yaffs_Spare *) &nspare); memcpy(spare, &nspare, sizeof(yaffs_Spare)); if (data && doErrorCorrection) { @@ -307,10 +305,10 @@ static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev, static __u8 cmpbuf[YAFFS_BYTES_PER_CHUNK]; static __u8 data[YAFFS_BYTES_PER_CHUNK]; /* Might as well always allocate the larger size for */ - /* dev->useNANDECC == true; */ + /* dev->param.useNANDECC == true; */ static __u8 spare[sizeof(struct yaffs_NANDSpare)]; - dev->readChunkFromNAND(dev, chunkInNAND, data, (yaffs_Spare *) spare); + dev->param.readChunkFromNAND(dev, chunkInNAND, data, (yaffs_Spare *) spare); if (!init) { memset(cmpbuf, 0xff, YAFFS_BYTES_PER_CHUNK); @@ -333,7 +331,7 @@ static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev, static void yaffs_HandleReadDataError(yaffs_Device *dev, int chunkInNAND) { - int blockInNAND = chunkInNAND / dev->nChunksPerBlock; + int blockInNAND = chunkInNAND / dev->param.nChunksPerBlock; /* Mark the block for retirement */ yaffs_GetBlockInfo(dev, blockInNAND + dev->blockOffset)->needsRetiring = 1; @@ -365,7 +363,7 @@ static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND, static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND) { - int blockInNAND = chunkInNAND / dev->nChunksPerBlock; + int blockInNAND = chunkInNAND / dev->param.nChunksPerBlock; /* Mark the block for retirement */ yaffs_GetBlockInfo(dev, blockInNAND)->needsRetiring = 1; @@ -424,7 +422,7 @@ int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device *dev, tags.serialNumber = eTags->serialNumber; - if (!dev->useNANDECC && data) + if (!dev->param.useNANDECC && data) yaffs_CalcECC(data, &spare); yaffs_LoadTagsIntoSpare(&spare, &tags); @@ -498,9 +496,9 @@ int yaffs_TagsCompatabilityMarkNANDBlockBad(struct yaffs_DeviceStruct *dev, spare.blockStatus = 'Y'; - yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock, NULL, + yaffs_WriteChunkToNAND(dev, blockInNAND * dev->param.nChunksPerBlock, NULL, &spare); - yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock + 1, + yaffs_WriteChunkToNAND(dev, blockInNAND * dev->param.nChunksPerBlock + 1, NULL, &spare); return YAFFS_OK; @@ -525,9 +523,9 @@ int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev, *sequenceNumber = 0; - yaffs_ReadChunkFromNAND(dev, blockNo * dev->nChunksPerBlock, NULL, + yaffs_ReadChunkFromNAND(dev, blockNo * dev->param.nChunksPerBlock, NULL, &spare0, &dummy, 1); - yaffs_ReadChunkFromNAND(dev, blockNo * dev->nChunksPerBlock + 1, NULL, + yaffs_ReadChunkFromNAND(dev, blockNo * dev->param.nChunksPerBlock + 1, NULL, &spare1, &dummy, 1); if (yaffs_CountBits(spare0.blockStatus & spare1.blockStatus) < 7)