00001 00007 #ifndef _UFFS_BLOCKINFO_H_ 00008 #define _UFFS_BLOCKINFO_H_ 00009 00010 #include "uffs/uffs_types.h" 00011 #include "uffs/uffs_public.h" 00012 00013 #ifdef __cplusplus 00014 extern "C"{ 00015 #endif 00016 00020 struct uffs_pageSpareSt { 00021 u8 expired:1; 00022 u8 checkOk:1; 00023 u8 blockStatus:1; 00024 uffs_Tags tag; 00025 }; 00026 00032 struct uffs_blockInfoSt { 00033 struct uffs_blockInfoSt *next; 00034 struct uffs_blockInfoSt *prev; 00035 u16 blockNum; 00036 struct uffs_pageSpareSt *spares; 00037 int expiredCount; 00038 int refCount; 00039 }; 00040 00041 00042 URET uffs_InitBlockInfoCache(uffs_Device *dev, int maxCachedBlocks); 00043 URET uffs_ReleaseBlockInfoCache(uffs_Device *dev); 00044 void uffs_CheckPageSpare(uffs_Device *dev, uffs_pageSpare *spare); 00045 URET uffs_LoadBlockInfo(uffs_Device *dev, uffs_blockInfo *work, int page); 00046 uffs_blockInfo * uffs_FindBlockInfoInCache(uffs_Device *dev, int block); 00047 uffs_blockInfo * uffs_GetBlockInfo(uffs_Device *dev, int block); 00048 void uffs_PutBlockInfo(uffs_Device *dev, uffs_blockInfo *p); 00049 void uffs_ExpireBlockInfo(uffs_Device *dev, uffs_blockInfo *p, int page); 00050 //uffs_blockInfo * uffs_CloneBlockInfo(uffs_Device *dev, uffs_blockInfo *p); 00051 //void uffs_ReleaseCloneBlockInfo(uffs_blockInfo *p); 00052 UBOOL uffs_IsAllBlockInfoFree(uffs_Device *dev); 00053 void uffs_ExpireAllBlockInfo(uffs_Device *dev); 00054 00055 #ifdef __cplusplus 00056 } 00057 #endif 00058 00059 00060 #endif