}
+static __u8 yaffs_WriteFailCorruption(int chunkInNAND)
+{
+ switch(chunkInNAND)
+ {
+ case 2000:
+ case 2003:
+ case 3000:
+ case 3001:
+ return 3;// ding two bits
+ case 2001:
+ case 3003:
+ case 3004:
+ case 3005:
+ case 3006:
+ case 3007: return 1;// ding one bit
+
+ default: return 0;
+
+ }
+}
+
+static void yaffs_ModifyWriteData(int chunkInNAND,__u8 *data)
+{
+ if(data)
+ {
+ *data ^= yaffs_WriteFailCorruption(chunkInNAND);
+ }
+}
+
+static __u8 yaffs_ReadFailCorruption(int chunkInNAND)
+{
+ switch(chunkInNAND)
+ {
+ case 500:
+ return 3;// ding two bits
+ case 700:
+ case 750:
+ return 1;// ding one bit
+
+ default: return 0;
+
+ }
+}
+
+static void yaffs_ModifyReadData(int chunkInNAND,__u8 *data)
+{
+ if(data)
+ {
+ *data ^= yaffs_ReadFailCorruption(chunkInNAND);
+ }
+}
+
+
+
+
+
static void CheckInit(yaffs_Device *dev)
{
static int initialised = 0;
int yaffs_FEWriteChunkToNAND(yaffs_Device *dev,int chunkInNAND,const __u8 *data, yaffs_Spare *spare)
{
+ __u8 localData[512];
+
int pos;
pos = chunkInNAND * 528;
if(data)
{
+ memcpy(localData,data,512);
+ yaffs_ModifyWriteData(chunkInNAND,localData);
lseek(h,pos,SEEK_SET);
- write(h,data,512);
+ write(h,localData,512);
}
pos += 512;
{
lseek(h,pos,SEEK_SET);
read(h,data,512);
+ yaffs_ModifyReadData(chunkInNAND,data);
}
pos += 512;
{
write(h,ffChunk,528);
}
+
+ switch(blockInNAND)
+ {
+ case 10:
+ case 15: return YAFFS_FAIL;
+
+ }
return YAFFS_OK;
}