*** empty log message ***
[yaffs/.git] / yaffs_fileem.c
index a03461017bd5c76de5858c572135e1511ed7db99..dbbe5f8b3a4d593d68f767e82a3ffad5fbc9094e 100644 (file)
@@ -26,7 +26,7 @@
 #include <fcntl.h>
 #include <string.h>
 
-#define FILE_SIZE_IN_MEG 2
+#define FILE_SIZE_IN_MEG 32
 
 #define BLOCK_SIZE (32 * 528)
 #define BLOCKS_PER_MEG ((1024*1024)/(32 * 512))
 static int h;
 static __u8 ffChunk[528];
 
+static int eraseDisplayEnabled;
+
+static int markedBadBlocks[] = { 1, 4, -1};
+
+static int IsAMarkedBadBlock(int blk)
+{
+       int *m = markedBadBlocks;
+       
+       while(*m >= 0)
+       {
+               if(*m == blk) return 1;
+               m++;
+       }
+       return 0;
+}
 
 
 static void  CheckInit(yaffs_Device *dev)
@@ -68,8 +83,18 @@ static void  CheckInit(yaffs_Device *dev)
                        for(i = 0; i < FILE_SIZE_IN_BLOCKS; i++)
                        {
                                yaffs_FEEraseBlockInNAND(dev,i);
+                               
+                               if(IsAMarkedBadBlock(i))
+                               {
+                                       yaffs_Spare spare;
+                                       memset(&spare,0xff,sizeof(spare));
+                                       spare.blockStatus = 1;
+                                       
+                                       yaffs_FEWriteChunkToNAND(dev, i * 32,NULL,&spare);
+                               }
                        }
                }
+               eraseDisplayEnabled = 1;
        }
 }
 
@@ -133,7 +158,10 @@ int yaffs_FEEraseBlockInNAND(yaffs_Device *dev,int blockInNAND)
        
        CheckInit(dev);
        
-       printf("Erasing block %d\n",blockInNAND);
+       if(eraseDisplayEnabled)
+       {
+               printf("Erasing block %d\n",blockInNAND);
+       }
        
        lseek(h,blockInNAND * BLOCK_SIZE,SEEK_SET);
        for(i = 0; i < 32; i++)