projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Adding HowYaffsWorks.pdf for users
[yaffs2.git]
/
direct
/
yaffs_fileem2k.c
diff --git
a/direct/yaffs_fileem2k.c
b/direct/yaffs_fileem2k.c
index a4baaa3c7e7825ab8436fb4b8277898436a7a19c..4f58e981f6accae78ee2adf84934cf0ef1408627 100644
(file)
--- a/
direct/yaffs_fileem2k.c
+++ b/
direct/yaffs_fileem2k.c
@@
-16,10
+16,11
@@
* This is only intended as test code to test persistence etc.
*/
* This is only intended as test code to test persistence etc.
*/
-const char *yaffs_flashif2_c_version = "$Id: yaffs_fileem2k.c,v 1.
17 2009-01-16 00:46:59
charles Exp $";
+const char *yaffs_flashif2_c_version = "$Id: yaffs_fileem2k.c,v 1.
24 2010-02-18 01:18:04
charles Exp $";
#include "yportenv.h"
#include "yportenv.h"
+#include "yaffs_trace.h"
#include "yaffs_flashif2.h"
#include "yaffs_guts.h"
#include "yaffs_flashif2.h"
#include "yaffs_guts.h"
@@
-72,7
+73,7
@@
static int nops_so_far;
int ops_multiplier;
int ops_multiplier;
-static void yflash2_MaybePowerFail(
void
)
+static void yflash2_MaybePowerFail(
unsigned int chunkInNAND, int failPoint
)
{
nops_so_far++;
{
nops_so_far++;
@@
-82,6
+83,8
@@
static void yflash2_MaybePowerFail(void)
if(simulate_power_failure &&
remaining_ops < 1){
printf("Simulated power failure after %d operations\n",nops_so_far);
if(simulate_power_failure &&
remaining_ops < 1){
printf("Simulated power failure after %d operations\n",nops_so_far);
+ printf(" power failed on chunkInNAND %d, at fail point %d\n",
+ chunkInNAND, failPoint);
exit(0);
}
}
exit(0);
}
}
@@
-143,7
+146,7
@@
static int CheckInit(void)
srand(random_seed);
srand(random_seed);
- remaining_ops = (rand() % 1000) *
2
;
+ remaining_ops = (rand() % 1000) *
5
;
memset(dummyBuffer,0xff,sizeof(dummyBuffer));
memset(dummyBuffer,0xff,sizeof(dummyBuffer));
@@
-182,7
+185,7
@@
int yflash2_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u
CheckInit();
CheckInit();
- if(dev->inbandTags){
+ if(dev->
param.
inbandTags){
yaffs_PackedTags2TagsPart * pt2tp;
pt2tp = (yaffs_PackedTags2TagsPart *)&data[dev->nDataBytesPerChunk];
yaffs_PackedTags2TagsPart * pt2tp;
pt2tp = (yaffs_PackedTags2TagsPart *)&data[dev->nDataBytesPerChunk];
@@
-192,7
+195,7
@@
int yflash2_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u
h = filedisk.handle[(chunkInNAND / (PAGES_PER_BLOCK * BLOCKS_PER_HANDLE))];
lseek(h,pos,SEEK_SET);
h = filedisk.handle[(chunkInNAND / (PAGES_PER_BLOCK * BLOCKS_PER_HANDLE))];
lseek(h,pos,SEEK_SET);
- written = write(h,data,dev->totalBytesPerChunk);
+ written = write(h,data,dev->
param.
totalBytesPerChunk);
if(yaffs_testPartialWrite){
if(yaffs_testPartialWrite){
@@
-200,7
+203,7
@@
int yflash2_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u
exit(1);
}
exit(1);
}
- if(written != dev->totalBytesPerChunk) return YAFFS_FAIL;
+ if(written != dev->
param.
totalBytesPerChunk) return YAFFS_FAIL;
}
}
@@
-240,7
+243,7
@@
int yflash2_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u
if(written != dev->nDataBytesPerChunk) return YAFFS_FAIL;
}
if(written != dev->nDataBytesPerChunk) return YAFFS_FAIL;
}
-
yflash2_MaybePowerFail(
);
+
// yflash2_MaybePowerFail(chunkInNAND,1
);
if(tags)
{
if(tags)
{
@@
-249,7
+252,7
@@
int yflash2_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u
lseek(h,pos,SEEK_SET);
lseek(h,pos,SEEK_SET);
- if( 0 && dev->isYaffs2)
+ if( 0 && dev->
param.
isYaffs2)
{
written = write(h,tags,sizeof(yaffs_ExtendedTags));
{
written = write(h,tags,sizeof(yaffs_ExtendedTags));
@@
-258,7
+261,7
@@
int yflash2_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u
else
{
yaffs_PackedTags2 pt;
else
{
yaffs_PackedTags2 pt;
- yaffs_PackTags2(&pt,tags);
+ yaffs_PackTags2(&pt,tags
, !dev->param.noTagsECC
);
__u8 * ptab = (__u8 *)&pt;
nRead = read(h,localBuffer,sizeof(pt));
__u8 * ptab = (__u8 *)&pt;
nRead = read(h,localBuffer,sizeof(pt));
@@
-291,7
+294,7
@@
int yflash2_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u
}
}
}
}
- //yflash2_MaybePowerFail();
+ //yflash2_MaybePowerFail(
chunkInNAND,2
);
/* Next do the whole write */
if(data)
/* Next do the whole write */
if(data)
@@
-327,7
+330,7
@@
int yflash2_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u
lseek(h,pos,SEEK_SET);
lseek(h,pos,SEEK_SET);
- if( 0 && dev->isYaffs2)
+ if( 0 && dev->
param.
isYaffs2)
{
written = write(h,tags,sizeof(yaffs_ExtendedTags));
{
written = write(h,tags,sizeof(yaffs_ExtendedTags));
@@
-336,7
+339,7
@@
int yflash2_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u
else
{
yaffs_PackedTags2 pt;
else
{
yaffs_PackedTags2 pt;
- yaffs_PackTags2(&pt,tags);
+ yaffs_PackTags2(&pt,tags
,!dev->param.noTagsECC
);
__u8 * ptab = (__u8 *)&pt;
nRead = read(h,localBuffer,sizeof(pt));
__u8 * ptab = (__u8 *)&pt;
nRead = read(h,localBuffer,sizeof(pt));
@@
-361,7
+364,7
@@
int yflash2_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u
}
}
}
}
- yflash2_MaybePowerFail();
+ yflash2_MaybePowerFail(
chunkInNAND,3
);
}
return YAFFS_OK;
}
return YAFFS_OK;
@@
-401,7
+404,7
@@
int yflash2_ReadChunkWithTagsFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *d
- if(dev->inbandTags){
+ if(dev->
param.
inbandTags){
/* Got to suck the tags out of the data area */
if(!data) {
localData=1;
/* Got to suck the tags out of the data area */
if(!data) {
localData=1;
@@
-418,11
+421,11
@@
int yflash2_ReadChunkWithTagsFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *d
lseek(h,pos,SEEK_SET);
lseek(h,pos,SEEK_SET);
- nRead = read(h, data,dev->totalBytesPerChunk);
+ nRead = read(h, data,dev->
param.
totalBytesPerChunk);
yaffs_UnpackTags2TagsPart(tags,pt2tp);
yaffs_UnpackTags2TagsPart(tags,pt2tp);
- if(nread != dev->totalBytesPerChunk)
+ if(nread != dev->
param.
totalBytesPerChunk)
retval = YAFFS_FAIL;
if(localData)
retval = YAFFS_FAIL;
if(localData)
@@
-453,7
+456,7
@@
int yflash2_ReadChunkWithTagsFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *d
h = filedisk.handle[(chunkInNAND / (PAGES_PER_BLOCK * BLOCKS_PER_HANDLE))];
lseek(h,pos,SEEK_SET);
h = filedisk.handle[(chunkInNAND / (PAGES_PER_BLOCK * BLOCKS_PER_HANDLE))];
lseek(h,pos,SEEK_SET);
- if(0 && dev->isYaffs2)
+ if(0 && dev->
param.
isYaffs2)
{
nread= read(h,tags,sizeof(yaffs_ExtendedTags));
if(nread != sizeof(yaffs_ExtendedTags))
{
nread= read(h,tags,sizeof(yaffs_ExtendedTags));
if(nread != sizeof(yaffs_ExtendedTags))
@@
-471,7
+474,7
@@
int yflash2_ReadChunkWithTagsFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *d
{
yaffs_PackedTags2 pt;
nread= read(h,&pt,sizeof(pt));
{
yaffs_PackedTags2 pt;
nread= read(h,&pt,sizeof(pt));
- yaffs_UnpackTags2(tags,&pt);
+ yaffs_UnpackTags2(tags,&pt
, !dev->param.noTagsECC
);
#ifdef SIMULATE_FAILURES
if((chunkInNAND >> 6) == 100) {
if(fail300 && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR){
#ifdef SIMULATE_FAILURES
if((chunkInNAND >> 6) == 100) {
if(fail300 && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR){
@@
-516,7
+519,7
@@
int yflash2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo)
memset(&pt,0,sizeof(pt));
h = filedisk.handle[(blockNo / ( BLOCKS_PER_HANDLE))];
memset(&pt,0,sizeof(pt));
h = filedisk.handle[(blockNo / ( BLOCKS_PER_HANDLE))];
- lseek(h,((blockNo % BLOCKS_PER_HANDLE) * dev->nChunksPerBlock) * PAGE_SIZE + PAGE_DATA_SIZE,SEEK_SET);
+ lseek(h,((blockNo % BLOCKS_PER_HANDLE) * dev->
param.
nChunksPerBlock) * PAGE_SIZE + PAGE_DATA_SIZE,SEEK_SET);
written = write(h,&pt,sizeof(pt));
if(written != sizeof(pt)) return YAFFS_FAIL;
written = write(h,&pt,sizeof(pt));
if(written != sizeof(pt)) return YAFFS_FAIL;
@@
-555,8
+558,8
@@
int yflash2_EraseBlockInNAND(yaffs_Device *dev, int blockNumber)
h = filedisk.handle[(blockNumber / ( BLOCKS_PER_HANDLE))];
h = filedisk.handle[(blockNumber / ( BLOCKS_PER_HANDLE))];
- lseek(h,((blockNumber % BLOCKS_PER_HANDLE) * dev->
nChunksPerBlock) * PAGE_SIZE,SEEK_SET);
- for(i = 0; i < dev->nChunksPerBlock; i++)
+ lseek(h,((blockNumber % BLOCKS_PER_HANDLE) * dev->
param.nChunksPerBlock) * PAGE_SIZE,SEEK_SET);
+ for(i = 0; i < dev->
param.
nChunksPerBlock; i++)
{
write(h,pg,PAGE_SIZE);
}
{
write(h,pg,PAGE_SIZE);
}
@@
-584,7
+587,7
@@
int yflash2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo, yaffs_Bl
*sequenceNumber = 0;
*sequenceNumber = 0;
- chunkNo = blockNo * dev->nChunksPerBlock;
+ chunkNo = blockNo * dev->
param.
nChunksPerBlock;
yflash2_ReadChunkWithTagsFromNAND(dev,chunkNo,NULL,&tags);
if(tags.blockBad)
yflash2_ReadChunkWithTagsFromNAND(dev,chunkNo,NULL,&tags);
if(tags.blockBad)