X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=direct%2Fyaffs_norif1.c;h=ab582b03639f4b8420db1d4a168a49a0fbb0009b;hp=c9534ac4c6a52e2dbe5171217bb5c44dd6dfcc27;hb=4a96d43bb566f00596a31a41c535cabbf52d4f20;hpb=49942b13d7cfbdba72c18de0f37d16d81b4372a8 diff --git a/direct/yaffs_norif1.c b/direct/yaffs_norif1.c index c9534ac..ab582b0 100644 --- a/direct/yaffs_norif1.c +++ b/direct/yaffs_norif1.c @@ -1,7 +1,7 @@ /* * YAFFS: Yet Another Flash File System. A NAND-flash specific file system. * - * Copyright (C) 2002-2007 Aleph One Ltd. + * Copyright (C) 2002-2010 Aleph One Ltd. * for Toby Churchill Ltd and Brightstar Engineering * * Created by Charles Manning @@ -35,11 +35,12 @@ * */ -const char *yaffs_norif1_c_version = "$Id: yaffs_norif1.c,v 1.1 2008-11-07 00:34:47 charles Exp $"; +const char *yaffs_norif1_c_version = "$Id: yaffs_norif1.c,v 1.6 2010-02-18 01:18:04 charles Exp $"; #include "yaffs_norif1.h" #include "yportenv.h" +#include "yaffs_trace.h" #include "yaffs_flashif.h" #include "yaffs_guts.h" @@ -58,7 +59,7 @@ const char *yaffs_norif1_c_version = "$Id: yaffs_norif1.c,v 1.1 2008-11-07 00:34 #define FORMAT_VALUE 0x1234 #define DATA_BYTES_PER_CHUNK 1024 -#define BLOCKS_IN_DEVICE (32*1024/256) +#define BLOCKS_IN_DEVICE (8*1024/256) #define YNOR_PREMARKER (0xF6) @@ -112,8 +113,8 @@ __u32 *Chunk2DataAddr(yaffs_Device *dev,int chunkId) unsigned chunkInBlock; __u32 addr; - block = chunkId/dev->nChunksPerBlock; - chunkInBlock = chunkId % dev->nChunksPerBlock; + block = chunkId/dev->param.nChunksPerBlock; + chunkInBlock = chunkId % dev->param.nChunksPerBlock; addr = (__u32) Block2Addr(dev,block); addr += chunkInBlock * DATA_BYTES_PER_CHUNK; @@ -127,8 +128,8 @@ __u32 *Chunk2SpareAddr(yaffs_Device *dev,int chunkId) unsigned chunkInBlock; __u32 addr; - block = chunkId/dev->nChunksPerBlock; - chunkInBlock = chunkId % dev->nChunksPerBlock; + block = chunkId/dev->param.nChunksPerBlock; + chunkInBlock = chunkId % dev->param.nChunksPerBlock; addr = (__u32) Block2Addr(dev,block); addr += SPARE_AREA_OFFSET; @@ -173,7 +174,7 @@ int ynorif1_WriteChunkToNAND(yaffs_Device *dev,int chunkInNAND,const __u8 *data, ynorif1_FlashWrite32(spareAddr,(__u32 *)&tmpSpare,sizeof(yaffs_Spare)/4); /* Write the data */ - ynorif1_FlashWrite32(dataAddr,(__u32 *)data,dev->totalBytesPerChunk / 4); + ynorif1_FlashWrite32(dataAddr,(__u32 *)data,dev->param.totalBytesPerChunk / 4); memcpy(&tmpSpare,spare,sizeof(yaffs_Spare)); @@ -212,18 +213,21 @@ int ynorif1_ReadChunkFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaf if(data) { - ynorif1_FlashRead32(dataAddr,(__u32 *)data,dev->totalBytesPerChunk / 4); + ynorif1_FlashRead32(dataAddr,(__u32 *)data,dev->param.totalBytesPerChunk / 4); } if(spare) { ynorif1_FlashRead32(spareAddr,(__u32 *)spare,16/ 4); - /* If the page status is 0xF then it was written properly + /* If the page status is YNOR_POSTMARKER then it was written properly * so change that to 0xFF so that the rest of yaffs is happy. */ if(spare->pageStatus == YNOR_POSTMARKER) spare->pageStatus = 0xFF; + else if(spare->pageStatus != 0xff && + (spare->pageStatus | YNOR_PREMARKER) != 0xff) + spare->pageStatus = YNOR_PREMARKER; } @@ -287,7 +291,7 @@ int ynorif1_InitialiseNAND(yaffs_Device *dev) ynorif1_FlashInit(); /* Go through the blocks formatting them if they are not formatted */ - for(i = dev->startBlock; i <= dev->endBlock; i++){ + for(i = dev->param.startBlock; i <= dev->param.endBlock; i++){ if(!ynorif1_IsBlockFormatted(dev,i)){ ynorif1_FormatBlock(dev,i); }