changeset 9:09ae5ca61698

Add patches from Nick Banes for compatability
author charles <charles>
date Wed, 16 Mar 2005 04:00:36 +0000
parents fc64cbc8d7fa
children 33edc774d5c4
files yaffs_ecc.c yaffs_fs.c yaffs_guts.c yaffs_tagscompat.c
diffstat 4 files changed, 39 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/yaffs_ecc.c
+++ b/yaffs_ecc.c
@@ -29,7 +29,7 @@
 // Bit 0 of each entry indicates whether the entry has an odd or even parity, and therefore
 // this bytes influence on the line parity.
 
-const char *yaffs_ecc_c_version = "$Id: yaffs_ecc.c,v 1.1 2004-11-03 08:14:07 charles Exp $";
+const char *yaffs_ecc_c_version = "$Id: yaffs_ecc.c,v 1.2 2005-03-16 04:00:36 charles Exp $";
 
 
 #include "yaffs_ecc.h"
@@ -265,9 +265,15 @@ int yaffs_ECCCorrectOther(unsigned char 
 		// swap the bytes to correct for the wrong order
 		unsigned char t;
 		
+#if 0 // NCB
 		t = d0;
 		d0 = d1;
 		d1 = t;
+#else
+		t = cDelta;
+		cDelta = lDelta;
+		lDelta = t;
+#endif
 #endif
 		
 		bit = 0;
--- a/yaffs_fs.c
+++ b/yaffs_fs.c
@@ -29,10 +29,11 @@
  */
 
 
-const char *yaffs_fs_c_version = "$Id: yaffs_fs.c,v 1.1 2004-12-17 04:39:04 charles Exp $";
+const char *yaffs_fs_c_version = "$Id: yaffs_fs.c,v 1.2 2005-03-16 04:00:36 charles Exp $";
 extern const char *yaffs_guts_c_version;
 
 
+
 #include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
@@ -63,7 +64,6 @@ extern const char *yaffs_guts_c_version;
 
 #endif
 
-
 #include <asm/uaccess.h>
 
 #include "yportenv.h"
@@ -72,8 +72,8 @@ extern const char *yaffs_guts_c_version;
 
 
 
-//unsigned yaffs_traceMask = YAFFS_TRACE_ALWAYS | YAFFS_TRACE_BAD_BLOCKS;
-unsigned yaffs_traceMask = 0xFFFFFFFF;
+unsigned yaffs_traceMask = YAFFS_TRACE_ALWAYS | YAFFS_TRACE_BAD_BLOCKS;
+//unsigned yaffs_traceMask = 0xFFFFFFFF;
 
 
 #ifdef CONFIG_YAFFS_RAM_ENABLED
--- a/yaffs_guts.c
+++ b/yaffs_guts.c
@@ -14,7 +14,7 @@
  */
  //yaffs_guts.c
 
-const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.4 2004-12-17 04:39:04 charles Exp $";
+const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.5 2005-03-16 04:00:36 charles Exp $";
 
 #include "yportenv.h"
 
@@ -489,7 +489,8 @@ static int yaffs_CheckChunkErased(struct
 	__u8 *data = yaffs_GetTempBuffer(dev,__LINE__);
 	yaffs_ExtendedTags tags;
 
-  	dev->readChunkWithTagsFromNAND(dev,chunkInNAND,data,&tags);
+// NCB  	dev->readChunkWithTagsFromNAND(dev,chunkInNAND,data,&tags);
+  	yaffs_ReadChunkWithTagsFromNAND(dev,chunkInNAND,data,&tags);
 	
 	if(!yaffs_CheckFF(data,dev->nBytesPerChunk) || tags.chunkUsed)
 	{
--- a/yaffs_tagscompat.c
+++ b/yaffs_tagscompat.c
@@ -10,7 +10,7 @@
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  *
- * $Id: yaffs_tagscompat.c,v 1.1 2004-11-03 08:14:07 charles Exp $
+ * $Id: yaffs_tagscompat.c,v 1.2 2005-03-16 04:00:36 charles Exp $
  */
 
 #include "yaffs_guts.h"
@@ -587,6 +587,13 @@ int yaffs_TagsCompatabilityWriteChunkWit
 		tags.byteCount = eTags->byteCount;
 		tags.serialNumber = eTags->serialNumber;
 		
+// NCB
+		if (!dev->useNANDECC && data)
+		{
+		    yaffs_CalcECC(data,&spare);
+		}
+
+// /NCB
 		 yaffs_LoadTagsIntoSpare(&spare,&tags);
 		
 	}
@@ -602,8 +609,21 @@ int yaffs_TagsCompatabilityReadChunkWith
 	yaffs_Tags tags;
 	yaffs_ECCResult eccResult;
 	
+// NCB
+     static yaffs_Spare spareFF;
+     static int init;
+     
+     if(!init)
+     {
+	     memset(&spareFF,0xFF,sizeof(spareFF));
+	     init = 1;
+     }
+// /NCB
 	if(yaffs_ReadChunkFromNAND(dev,chunkInNAND,data,&spare,&eccResult,1))
 	{
+// added NCB - eTags may be NULL
+		if (eTags) {
+
 		 int deleted = (yaffs_CountBits(spare.pageStatus) < 7) ? 1 : 0;
 			
 		 yaffs_GetTagsFromSpare(dev,&spare,&tags);
@@ -616,6 +636,10 @@ int yaffs_TagsCompatabilityReadChunkWith
 		 eTags->eccResult = eccResult;
 		 eTags->blockBad = 0; // We're reading it therefore it is not a bad block
 		 
+// NCB added 18/2/2005
+    		 eTags->chunkUsed = (memcmp(&spareFF,&spare,sizeof(spareFF)) != 0) ? 1:0;
+		}
+		 
 		 return YAFFS_OK;
 	}
 	else