changeset 356:531f5810eaf7

update to NAND app interface v2
author Ross Younger <wry@ecoscentric.com>
date Thu, 19 Nov 2009 16:10:26 +0000
parents 932988fb7f38
children 9f250509e64c
files packages/fs/yaffs/current/ChangeLog packages/fs/yaffs/current/cdl/yaffs.cdl packages/fs/yaffs/current/src/ecos-yaffs-nand.c packages/fs/yaffs/current/src/ecos-yaffs.c
diffstat 4 files changed, 36 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/packages/fs/yaffs/current/ChangeLog
+++ b/packages/fs/yaffs/current/ChangeLog
@@ -1,3 +1,9 @@
+2009-11-19  Ross Younger  <wry@ecoscentric.com>
+
+	* ecos-yaffs.c, ecos-yaffs-nand.c: Update to NAND interface v2.
+	* yaffs.cdl: Require CYGSEM_IO_NAND_APPINTERFACE_VERSION > 1.
+	Declare CYGSEM_FS_YAFFS_NAND_APPINTERFACE to satisfy the two-way check.
+
 2009-11-17  Ross Younger  <wry@ecoscentric.com>
 
 	* yaffs_guts.c: Tweak last upstream merge. Be noisy if
--- a/packages/fs/yaffs/current/cdl/yaffs.cdl
+++ b/packages/fs/yaffs/current/cdl/yaffs.cdl
@@ -54,6 +54,7 @@ cdl_package CYGPKG_FS_YAFFS {
 
 	requires		CYGPKG_IO_FILEIO
 	requires		CYGPKG_IO_NAND
+    requires        ( CYGSEM_IO_NAND_APPINTERFACE_VERSION > 1 )
 	requires        CYGPKG_ISOINFRA
 	requires        CYGINT_ISO_ERRNO
 	requires        CYGINT_ISO_ERRNO_CODES
@@ -286,4 +287,14 @@ cdl_package CYGPKG_FS_YAFFS {
 
     }
 
+    cdl_option CYGSEM_FS_YAFFS_NAND_APPINTERFACE {
+        display     "NAND application interface version required"
+        flavor      data
+        calculated  2
+        no_define
+        description "This is the version of the NAND application
+            interface which this package requires. It exists to flag
+            up changes at the CDL level."
+    }
+
 }
--- a/packages/fs/yaffs/current/src/ecos-yaffs-nand.c
+++ b/packages/fs/yaffs/current/src/ecos-yaffs-nand.c
@@ -69,7 +69,7 @@ int eyaffs_deinitialiseNAND (struct yaff
 int eyaffs_eraseBlockInNAND (struct yaffs_DeviceStruct * dev, int blockInNAND)
 {
     cyg_nand_partition *part = (cyg_nand_partition*) dev->genericDevice;
-    int rv = cyg_nand_erase_block(part, blockInNAND);
+    int rv = cyg_nandp_erase_block(part, blockInNAND);
     return rv==0 ? YAFFS_OK : YAFFS_FAIL;
 }
 
@@ -94,7 +94,7 @@ int eyaffs_writeChunkWithTagsToNAND (str
             yaffs_PackTags1(&pt1, tags);
             yaffs_CalcTagsECC((yaffs_Tags *)&pt1);
         }
-        rv = cyg_nand_write_page(part, chunkInNAND, data, &pt1, PACKEDTAGS1_OOBSIZE);
+        rv = cyg_nandp_write_page(part, chunkInNAND, data, &pt1, PACKEDTAGS1_OOBSIZE);
 #endif
     } else {
 #ifdef CYGSEM_FS_YAFFS_OMIT_YAFFS2_CODE
@@ -115,12 +115,12 @@ int eyaffs_writeChunkWithTagsToNAND (str
             yaffs_PackedTags2TagsPart *pt2tp;
             pt2tp = (yaffs_PackedTags2TagsPart *)(data + dev->nDataBytesPerChunk);
             yaffs_PackTags2TagsPart(pt2tp, tags);
-            rv = cyg_nand_write_page(part, chunkInNAND, data, 0, 0);
+            rv = cyg_nandp_write_page(part, chunkInNAND, data, 0, 0);
         } else {
             yaffs_PackedTags2 pt;
             void *packed_tags_ptr = dev->noTagsECC ? (void*) &pt.t : (void*) &pt;
             yaffs_PackTags2(dev, &pt, tags);
-            rv = cyg_nand_write_page(part, chunkInNAND, data, packed_tags_ptr, PACKEDTAGS2_OOBSIZE(dev));
+            rv = cyg_nandp_write_page(part, chunkInNAND, data, packed_tags_ptr, PACKEDTAGS2_OOBSIZE(dev));
         }
 #endif
     }
@@ -144,7 +144,7 @@ int eyaffs_readChunkWithTagsFromNAND (st
         yaffs_PackedTags1 pt1;
         memset(&pt1, 0xff, sizeof(yaffs_PackedTags1));
 
-        rv = cyg_nand_read_page(part, chunkInNAND, data, &pt1, PACKEDTAGS1_OOBSIZE);
+        rv = cyg_nandp_read_page(part, chunkInNAND, data, &pt1, PACKEDTAGS1_OOBSIZE);
 
         if (rv == 0) {
             if (yaffs_CheckFF((CYG_BYTE*)&pt1, 8)) {
@@ -195,7 +195,7 @@ int eyaffs_readChunkWithTagsFromNAND (st
                 data = yaffs_GetTempBuffer(dev, __LINE__);
             }
 
-            rv = cyg_nand_read_page(part, chunkInNAND, data, 0, 0);
+            rv = cyg_nandp_read_page(part, chunkInNAND, data, 0, 0);
             if (tags) {
                 yaffs_PackedTags2TagsPart *pt2tp;
                 pt2tp = (yaffs_PackedTags2TagsPart *)&data[dev->nDataBytesPerChunk];
@@ -204,7 +204,7 @@ int eyaffs_readChunkWithTagsFromNAND (st
         } else {
             yaffs_PackedTags2 pt;
             void *packed_tags_ptr = dev->noTagsECC ? (void*) &pt.t : (void*) &pt;
-            rv = cyg_nand_read_page(part, chunkInNAND, data, packed_tags_ptr, tags ? PACKEDTAGS2_OOBSIZE(dev) : 0);
+            rv = cyg_nandp_read_page(part, chunkInNAND, data, packed_tags_ptr, tags ? PACKEDTAGS2_OOBSIZE(dev) : 0);
             if (tags)
                 yaffs_UnpackTags2(dev, tags, &pt);
         }
@@ -231,7 +231,7 @@ int eyaffs_readChunkWithTagsFromNAND (st
 int eyaffs_markNANDBlockBad (struct yaffs_DeviceStruct * dev, int blockNo)
 {
     cyg_nand_partition *part = (cyg_nand_partition*) dev->genericDevice;
-    int rv = cyg_nand_bbt_markbad(part, blockNo);
+    int rv = cyg_nandp_bbt_markbad(part, blockNo);
     return rv==0 ? YAFFS_OK : YAFFS_FAIL;
 }
 
@@ -242,7 +242,7 @@ int eyaffs_queryNANDBlock (struct yaffs_
     cyg_nand_page_addr pg;
     cyg_nand_partition *part = (cyg_nand_partition*) dev->genericDevice;
 
-    int rv = cyg_nand_bbt_query(part, blockNo);
+    int rv = cyg_nandp_bbt_query(part, blockNo);
     if (rv < 0) return YAFFS_FAIL;
 
     switch(rv) {
@@ -255,7 +255,7 @@ int eyaffs_queryNANDBlock (struct yaffs_
             // reads in the NAND layer where this can be efficiently done.
             int rv2 = eyaffs_readChunkWithTagsFromNAND(dev, pg, 0, &tags);
             if (rv2 == YAFFS_FAIL) {
-                (void) cyg_nand_bbt_markbad(part, blockNo);
+                (void) cyg_nandp_bbt_markbad(part, blockNo);
                 goto deadblock;
             }
             if (tags.chunkUsed) {
--- a/packages/fs/yaffs/current/src/ecos-yaffs.c
+++ b/packages/fs/yaffs/current/src/ecos-yaffs.c
@@ -576,23 +576,23 @@ static int eyaffs_mount    ( cyg_fstab_e
     y->genericDevice = (void*) part;
 
     y->nDataBytesPerChunk =
-        y->totalBytesPerChunk = NAND_BYTES_PER_PAGE(nand);
+        y->totalBytesPerChunk = CYG_NAND_BYTES_PER_PAGE(nand);
     y->inbandTags = 0;
 
-    y->nChunksPerBlock = NAND_PAGES_PER_BLOCK(nand);
+    y->nChunksPerBlock = CYG_NAND_PAGES_PER_BLOCK(nand);
     y->nReservedBlocks = o_nReserved;
-    y->startBlock = part->first;
-    y->endBlock = part->last;
+    y->startBlock = 0;
+    y->endBlock = CYG_NAND_PARTITION_NBLOCKS(part)-1;
     y->useNANDECC = 1;
     y->nShortOpCaches = o_nShortOpCaches;
 
-    if (NAND_BYTES_PER_PAGE(nand) == 512) {
+    if (CYG_NAND_BYTES_PER_PAGE(nand) == 512) {
 #ifdef CYGSEM_FS_YAFFS_SMALLPAGE_MODE_YAFFS1
         y->isYaffs2 = 0;
-        if (NAND_APPSPARE_PER_PAGE(nand) < PACKEDTAGS1_OOBSIZE) {
+        if (CYG_NAND_APPSPARE_PER_PAGE(nand) < PACKEDTAGS1_OOBSIZE) {
             NAND_ERROR(nand,
                     "Device has %d spare per page but YAFFS1 needs %d\n",
-                    NAND_APPSPARE_PER_PAGE(nand), PACKEDTAGS1_OOBSIZE);
+                    CYG_NAND_APPSPARE_PER_PAGE(nand), PACKEDTAGS1_OOBSIZE);
             EG(EINVAL);
         }
 #else // CYGSEM_FS_YAFFS_SMALLPAGE_MODE_YAFFS2
@@ -603,10 +603,10 @@ static int eyaffs_mount    ( cyg_fstab_e
 #endif
     } else {
         y->isYaffs2 = 1;
-        if (NAND_APPSPARE_PER_PAGE(nand) < PACKEDTAGS2_OOBSIZE(y)) {
+        if (CYG_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(y));
+                    CYG_NAND_APPSPARE_PER_PAGE(nand), PACKEDTAGS2_OOBSIZE(y));
             EG(EINVAL);
         }
     }