uffs_public.h

Go to the documentation of this file.
00001 
00007 #ifndef UFFS_PUBLIC_H
00008 #define UFFS_PUBLIC_H
00009 
00010 #include "uffs/uffs_types.h"
00011 #include "uffs/uffs_config.h"
00012 
00013 #ifdef __cplusplus
00014 extern "C"{
00015 #endif
00016 
00017 
00025 struct uffs_TagsSt {
00026     u8 dirty:1;             
00027     u8 valid:1;             
00028     u8 type:4;              
00029     u8 blockTimeStamp:2;    
00030 
00031     u8 pageID;              
00032     u16 father;             
00033     u16 serial;             
00034 
00035     u16 dataLength;         
00036     u16 dataSum;            
00037     u8 checkSum;            
00038     u8 blockStatus;         
00039 
00040 };
00041 
00043 #define TAG_VALID       0
00044 #define TAG_INVALID     1
00045 
00047 #define TAG_DIRTY       0
00048 #define TAG_CLEAR       1
00049 
00050 
00051 int uffs_GetFirstBlockTimeStamp(void);
00052 int uffs_GetNextBlockTimeStamp(int prev);
00053 UBOOL uffs_IsSrcNewerThanObj(int src, int obj);
00054 
00055 
00056 
00061 #define MAX_FILENAME_LENGTH         128
00062 
00063 #define FILE_ATTR_DIR       (1 << 24)   
00064 #define FILE_ATTR_WRITE     (1 << 0)    
00065 
00066 
00068 struct uffs_fileInfoSt {
00069     u32 attr;
00070     u32 createTime;
00071     u32 lastModify;
00072     u32 access;
00073     u32 reserved;
00074     u32 name_len;
00075     char name[MAX_FILENAME_LENGTH];
00076 };
00077 
00078 typedef struct uffs_fileInfoSt uffs_fileInfo;
00079 
00080 #include "uffs_device.h"
00081 
00082 /********************* uffs disk and partition ***************************/
00083 
00084 #define UFFS_DISK_MARK              0x53464655  //'UFFS'
00085 #define UFFS_DISK_INFO_SIZE         64
00086 #define UFFS_PARTITION_INFO_SIZE    32
00087 
00088 //PHICICAL storage
00089 //uffs disk information residents on first block of NAND flash
00090 //Assume that NAND flash's first block is always good.
00091 struct uffs_DiskInfoSt {
00092     u32 uffs_mark;      
00093     u32 version;        
00094     u32 reserved[16];   
00095     u32 status;         
00096     u32 partitions;     
00097     u32 alternate;      
00098 };
00099 
00100 struct uffs_PartitionInfoSt {
00101     u32 status;             //partition status
00102     u32 createTime;         //create time
00103     u32 lastModified;       //last modified time
00104     u32 block_begin;        //partition begin block
00105     u32 block_end;          //partition end block
00106     u32 access;             //access mask
00107 };
00108 
00109 
00110 struct uffs_StorageSt {
00111     int mainBlock;
00112     struct uffs_DiskInfoSt main;
00113     int partsNum;
00114     struct uffs_PartitionInfoSt *parts;
00115 };
00116 
00117 
00118 typedef struct uffs_mountTableSt {
00119     uffs_Device *dev;
00120     int startBlock;
00121     int endBlock;
00122     char *mountPoint;
00123 } uffs_mountTable;
00124 
00125 
00126 /********************************** debug & error *************************************/
00127 #define UFFS_ERR_NOISY      -1
00128 #define UFFS_ERR_NORMAL     0
00129 #define UFFS_ERR_SERIOUS    1
00130 #define UFFS_ERR_DEAD       2
00131 
00132 //#define UFFS_DBG_LEVEL    UFFS_ERR_NORMAL 
00133 #define UFFS_DBG_LEVEL  UFFS_ERR_NOISY  
00134 
00135 void uffs_Perror( int level, const char *errFmt, ... );
00136 
00137 /********************************** NAND **********************************************/
00138 //NAND flash specific file must implement these interface
00139 URET uffs_LoadPageSpare(uffs_Device *dev, int block, int page, uffs_Tags *tag);
00140 URET uffs_WritePageSpare(uffs_Device *dev, int block, int page, uffs_Tags *tag);
00141 URET uffs_MakePageValid(uffs_Device *dev, int block, int page, uffs_Tags *tag);
00142 UBOOL uffs_IsBlockBad(uffs_Device *dev, uffs_blockInfo *bc);
00143 
00144 /********************************** Public defines *****************************/
00149 #define UFFS_ALL_PAGES (0xffff)
00150 
00155 #define UFFS_INVALID_PAGE   (0xfffe)
00156 #define UFFS_INVALID_BLOCK  (0xfffe)
00157 
00158 #define UFFS_INVALID_SERIAL 0xffff
00159 
00160 
00161 URET uffs_NewBlock(uffs_Device *dev, u16 block, uffs_Tags *tag, uffs_Buf *buf);
00162 URET uffs_BlockRecover(uffs_Device *dev, uffs_blockInfo *old, u16 newBlock);
00163 URET uffs_PageRecover(uffs_Device *dev, 
00164                       uffs_blockInfo *bc, 
00165                       u16 oldPage, 
00166                       u16 newPage, 
00167                       uffs_Buf *buf);
00168 int uffs_FindFreePageInBlock(uffs_Device *dev, uffs_blockInfo *bc);
00169 u8 uffs_CalTagCheckSum(uffs_Tags *tag);
00170 u16 uffs_FindBestPageInBlock(uffs_Device *dev, uffs_blockInfo *bc, u16 page);
00171 u16 uffs_FindFirstValidPage(uffs_Device *dev, uffs_blockInfo *bc);
00172 u16 uffs_FindFirstFreePage(uffs_Device *dev, uffs_blockInfo *bc, u16 pageFrom);
00173 u16 uffs_FindPageInBlockWithPageId(uffs_Device *dev, uffs_blockInfo *bc, u16 pageID);
00174 
00175 u8 uffs_MakeSum8(void *p, int len);
00176 u16 uffs_MakeSum16(void *p, int len);
00177 URET uffs_CreateNewFile(uffs_Device *dev, u16 father, u16 serial, uffs_blockInfo *bc, uffs_fileInfo *fi);
00178 
00179 int uffs_GetBlockFileDataLength(uffs_Device *dev, uffs_blockInfo *bc, u8 type);
00180 UBOOL uffs_IsPageErased(uffs_Device *dev, uffs_blockInfo *bc, u16 page);
00181 int uffs_GetFreePagesCount(uffs_Device *dev, uffs_blockInfo *bc);
00182 UBOOL uffs_IsDataBlockReguFull(uffs_Device *dev, uffs_blockInfo *bc);
00183 
00184 int uffs_GetBlockTimeStamp(uffs_Device *dev, uffs_blockInfo *bc);
00185 
00186 URET uffs_WriteDataToNewPage(uffs_Device *dev, 
00187                              u16 block, 
00188                              u16 page,
00189                              uffs_Tags *tag,
00190                              uffs_Buf *buf);
00191 
00192 
00193 int uffs_GetDeviceUsed(uffs_Device *dev);
00194 int uffs_GetDeviceFree(uffs_Device *dev);
00195 int uffs_GetDeviceTotal(uffs_Device *dev);
00196 
00197 
00198 
00199 
00200 /************************************************************************/
00201 /*  init functions                                                                     */
00202 /************************************************************************/
00203 URET uffs_InitDevice(uffs_Device *dev);
00204 URET uffs_ReleaseDevice(uffs_Device *dev);
00205 URET uffs_initMountTable(struct uffs_mountTableSt *tbl);
00206 URET uffs_releaseMountTable(struct uffs_mountTableSt *tbl);
00207 
00208 URET uffs_InitFlashClass(uffs_Device *dev);
00209 
00210 
00211 
00212 
00213 uffs_mountTable * uffs_GetMountTable(void);
00214 
00215 
00216 #ifdef __cplusplus
00217 }
00218 #endif
00219 
00220 
00221 
00222 #endif

Generated on Sat Mar 17 15:45:44 2007 for uffs-doc by  doxygen 1.5.0