00001 00007 #ifndef UFFS_BUF_H 00008 #define UFFS_BUF_H 00009 00010 #include "uffs/uffs_types.h" 00011 #include "uffs/uffs_device.h" 00012 #include "uffs/uffs_tree.h" 00013 00014 #ifdef __cplusplus 00015 extern "C"{ 00016 #endif 00017 00018 #define CLONE_BUF_MARK 0xffff 00019 00020 #define UFFS_BUF_EMPTY 0 00021 #define UFFS_BUF_VALID 1 00022 #define UFFS_BUF_DIRTY 2 00023 00025 struct uffs_BufSt{ 00026 struct uffs_BufSt *next; 00027 struct uffs_BufSt *prev; 00028 struct uffs_BufSt *nextDirty; 00029 struct uffs_BufSt *prevDirty; 00030 u8 type; 00031 u16 father; 00032 u16 serial; 00033 u16 pageID; 00034 u16 mark; 00035 u16 refCount; 00036 u16 dataLen; 00037 u8 * data; 00038 u8 * ecc; 00039 }; 00040 00041 00042 URET uffs_BufInit(struct uffs_DeviceSt *dev, int maxBuf, int maxDirtyBuf); 00043 URET uffs_BufReleaseAll(struct uffs_DeviceSt *dev); 00044 00045 uffs_Buf * uffs_BufGet(struct uffs_DeviceSt *dev, u16 father, u16 serial, u16 pageID); 00046 uffs_Buf *uffs_BufNew(struct uffs_DeviceSt *dev, u8 type, u16 father, u16 serial, u16 pageID); 00047 uffs_Buf *uffs_BufGetEx(struct uffs_DeviceSt *dev, u8 type, TreeNode *node, u16 pageID); 00048 uffs_Buf * uffs_BufFind(uffs_Device *dev, u16 father, u16 serial, u16 pageID); 00049 00050 URET uffs_BufPut(uffs_Device *dev, uffs_Buf *buf); 00051 00052 void uffs_BufIncRef(uffs_Buf *buf); 00053 void uffs_BufDecRef(uffs_Buf *buf); 00054 URET uffs_BufWrite(struct uffs_DeviceSt *dev, uffs_Buf *buf, void *data, u32 ofs, u32 len); 00055 URET uffs_BufRead(struct uffs_DeviceSt *dev, uffs_Buf *buf, void *data, u32 ofs, u32 len); 00056 void uffs_BufSetMark(uffs_Buf *buf, int mark); 00057 URET uffs_BufFlush(struct uffs_DeviceSt *dev); 00058 00059 UBOOL uffs_BufIsAllFree(struct uffs_DeviceSt *dev); 00060 UBOOL uffs_BufIsAllEmpty(struct uffs_DeviceSt *dev); 00061 URET uffs_BufSetAllEmpty(struct uffs_DeviceSt *dev); 00062 00063 uffs_Buf * uffs_BufClone(struct uffs_DeviceSt *dev, uffs_Buf *buf); 00064 void uffs_BufFreeClone(uffs_Device *dev, uffs_Buf *buf); 00065 00066 URET uffs_LoadPhiDataToBuf(uffs_Device *dev, uffs_Buf *buf, u32 block, u32 page); 00067 URET uffs_LoadPhiDataToBufEccUnCare(uffs_Device *dev, uffs_Buf *buf, u32 block, u32 page); 00068 00069 #ifdef __cplusplus 00070 } 00071 #endif 00072 00073 00074 #endif