yaffs: Add xattrib support
[yaffs2.git] / direct / yaffs_norif1.c
index c9534ac4c6a52e2dbe5171217bb5c44dd6dfcc27..ab582b03639f4b8420db1d4a168a49a0fbb0009b 100644 (file)
@@ -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 <charles@aleph1.co.uk>
  *   
  */
 
-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);
                }