projects
/
yaffs
/
.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
*** empty log message ***
[yaffs/.git]
/
yaffs_fileem.c
diff --git
a/yaffs_fileem.c
b/yaffs_fileem.c
index a03461017bd5c76de5858c572135e1511ed7db99..dbbe5f8b3a4d593d68f767e82a3ffad5fbc9094e 100644
(file)
--- a/
yaffs_fileem.c
+++ b/
yaffs_fileem.c
@@
-26,7
+26,7
@@
#include <fcntl.h>
#include <string.h>
#include <fcntl.h>
#include <string.h>
-#define FILE_SIZE_IN_MEG 2
+#define FILE_SIZE_IN_MEG
3
2
#define BLOCK_SIZE (32 * 528)
#define BLOCKS_PER_MEG ((1024*1024)/(32 * 512))
#define BLOCK_SIZE (32 * 528)
#define BLOCKS_PER_MEG ((1024*1024)/(32 * 512))
@@
-37,6
+37,21
@@
static int h;
static __u8 ffChunk[528];
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)
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);
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);
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++)
lseek(h,blockInNAND * BLOCK_SIZE,SEEK_SET);
for(i = 0; i < 32; i++)