projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
yaffs Fix scan problem for corrupted tags
[yaffs2.git]
/
yaffs_tagscompat.c
diff --git
a/yaffs_tagscompat.c
b/yaffs_tagscompat.c
index 1e0a1a1b195d583316b8e414e9642e80c2e779cb..e9ac51d7f94bb0127b681392d116fcb4311c705a 100644
(file)
--- a/
yaffs_tagscompat.c
+++ b/
yaffs_tagscompat.c
@@
-1,7
+1,7
@@
/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-20
07
Aleph One Ltd.
+ * Copyright (C) 2002-20
10
Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@
-15,6
+15,7
@@
#include "yaffs_tagscompat.h"
#include "yaffs_ecc.h"
#include "yaffs_getblockinfo.h"
#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
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)
{
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;
}
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,
}
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;
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 (!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 */
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));
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) {
(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 */
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)];
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);
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)
{
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;
/* 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)
{
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;
/* Mark the block for retirement */
yaffs_GetBlockInfo(dev, blockInNAND)->needsRetiring = 1;
@@
-408,26
+406,25
@@
int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device *dev,
yaffs_SpareInitialise(&spare);
yaffs_SpareInitialise(&spare);
- if (eTags->chunkDeleted)
{
+ if (eTags->chunkDeleted)
spare.pageStatus = 0;
spare.pageStatus = 0;
-
}
else {
+ else {
tags.objectId = eTags->objectId;
tags.chunkId = eTags->chunkId;
tags.byteCountLSB = eTags->byteCount & 0x3ff;
tags.objectId = eTags->objectId;
tags.chunkId = eTags->chunkId;
tags.byteCountLSB = eTags->byteCount & 0x3ff;
- if (dev->nDataBytesPerChunk >= 1024)
{
+ if (dev->nDataBytesPerChunk >= 1024)
tags.byteCountMSB = (eTags->byteCount >> 10) & 3;
tags.byteCountMSB = (eTags->byteCount >> 10) & 3;
- } else {
+ else
tags.byteCountMSB = 3;
tags.byteCountMSB = 3;
- }
tags.serialNumber = eTags->serialNumber;
tags.serialNumber = eTags->serialNumber;
- if (!dev->
useNANDECC && data) {
+ if (!dev->
param.useNANDECC && data)
yaffs_CalcECC(data, &spare);
yaffs_CalcECC(data, &spare);
- }
+
yaffs_LoadTagsIntoSpare(&spare, &tags);
}
yaffs_LoadTagsIntoSpare(&spare, &tags);
}
@@
-499,9
+496,9
@@
int yaffs_TagsCompatabilityMarkNANDBlockBad(struct yaffs_DeviceStruct *dev,
spare.blockStatus = 'Y';
spare.blockStatus = 'Y';
- yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock, NULL,
+ yaffs_WriteChunkToNAND(dev, blockInNAND * dev->
param.
nChunksPerBlock, NULL,
&spare);
&spare);
- yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock + 1,
+ yaffs_WriteChunkToNAND(dev, blockInNAND * dev->
param.
nChunksPerBlock + 1,
NULL, &spare);
return YAFFS_OK;
NULL, &spare);
return YAFFS_OK;
@@
-526,9
+523,9
@@
int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
*sequenceNumber = 0;
*sequenceNumber = 0;
- yaffs_ReadChunkFromNAND(dev, blockNo * dev->nChunksPerBlock, NULL,
+ yaffs_ReadChunkFromNAND(dev, blockNo * dev->
param.
nChunksPerBlock, NULL,
&spare0, &dummy, 1);
&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)
&spare1, &dummy, 1);
if (yaffs_CountBits(spare0.blockStatus & spare1.blockStatus) < 7)