changeset 325:8e1210f7946a

Update ecos yaffs layer for the preceding merge
author Ross Younger <wry@ecoscentric.com>
date Fri, 30 Oct 2009 17:18:05 +0000
parents fd6ccfd7d352
children 1c56b1df53d8
files packages/fs/yaffs/current/src/ecos-yaffs-nand.c packages/fs/yaffs/current/src/ecos-yaffs-nand.h packages/fs/yaffs/current/src/ecos-yaffs.c
diffstat 3 files changed, 11 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/packages/fs/yaffs/current/src/ecos-yaffs-nand.c
+++ b/packages/fs/yaffs/current/src/ecos-yaffs-nand.c
@@ -118,8 +118,9 @@ int eyaffs_writeChunkWithTagsToNAND (str
             rv = cyg_nand_write_page(part, chunkInNAND, data, dev->totalBytesPerChunk, 0, 0);
         } else {
             yaffs_PackedTags2 pt;
-            yaffs_PackTags2(&pt, tags);
-            rv = cyg_nand_write_page(part, chunkInNAND, data, dev->nDataBytesPerChunk, &pt, PACKEDTAGS2_OOBSIZE);
+            void *packed_tags_ptr = dev->noTagsECC ? (void*) &pt.t : (void*) &pt;
+            yaffs_PackTags2(dev, &pt, tags);
+            rv = cyg_nand_write_page(part, chunkInNAND, data, dev->nDataBytesPerChunk, packed_tags_ptr, PACKEDTAGS2_OOBSIZE(dev));
         }
 #endif
     }
@@ -202,9 +203,10 @@ int eyaffs_readChunkWithTagsFromNAND (st
             }
         } else {
             yaffs_PackedTags2 pt;
-            rv = cyg_nand_read_page(part, chunkInNAND, data, data ? dev->nDataBytesPerChunk : 0, &pt, tags ? PACKEDTAGS2_OOBSIZE : 0);
+            void *packed_tags_ptr = dev->noTagsECC ? (void*) &pt.t : (void*) &pt;
+            rv = cyg_nand_read_page(part, chunkInNAND, data, data ? dev->nDataBytesPerChunk : 0, packed_tags_ptr, tags ? PACKEDTAGS2_OOBSIZE(dev) : 0);
             if (tags)
-                yaffs_UnpackTags2(tags, &pt);
+                yaffs_UnpackTags2(dev, tags, &pt);
         }
 #endif
     }
--- a/packages/fs/yaffs/current/src/ecos-yaffs-nand.h
+++ b/packages/fs/yaffs/current/src/ecos-yaffs-nand.h
@@ -53,7 +53,9 @@
 
 // If writing a yaffs_PackedTags1, we store only its eight meaningful bytes 
 #define PACKEDTAGS1_OOBSIZE 8
-#define PACKEDTAGS2_OOBSIZE ((unsigned)sizeof(yaffs_PackedTags2))
+#define PACKEDTAGS2_OOBSIZE(dev) (dev->noTagsECC ?      \
+        (unsigned)sizeof(yaffs_PackedTags2TagsPart) :   \
+        (unsigned)sizeof(yaffs_PackedTags2))
 
 int eyaffs_eraseBlockInNAND (struct yaffs_DeviceStruct * dev, int blockInNAND);
 int eyaffs_initialiseNAND (struct yaffs_DeviceStruct * dev);
--- a/packages/fs/yaffs/current/src/ecos-yaffs.c
+++ b/packages/fs/yaffs/current/src/ecos-yaffs.c
@@ -603,10 +603,10 @@ static int eyaffs_mount    ( cyg_fstab_e
 #endif
     } else {
         y->isYaffs2 = 1;
-        if (NAND_APPSPARE_PER_PAGE(nand) < PACKEDTAGS2_OOBSIZE) {
+        if (NAND_APPSPARE_PER_PAGE(nand) < PACKEDTAGS2_OOBSIZE(y)) {
             NAND_ERROR(nand,
                     "Device has %d spare per page but YAFFS2 needs %u\n",
-                    NAND_APPSPARE_PER_PAGE(nand), PACKEDTAGS2_OOBSIZE);
+                    NAND_APPSPARE_PER_PAGE(nand), PACKEDTAGS2_OOBSIZE(y));
             EG(EINVAL);
         }
     }