#include "uffs/uffs_types.h"
#include "uffs/uffs_device.h"
#include "uffs/uffs_tree.h"
Go to the source code of this file.
Data Structures | |
struct | uffs_BufSt |
Defines | |
#define | CLONE_BUF_MARK 0xffff |
#define | UFFS_BUF_DIRTY 2 |
#define | UFFS_BUF_EMPTY 0 |
#define | UFFS_BUF_VALID 1 |
Functions | |
uffs_Buf * | uffs_BufClone (struct uffs_DeviceSt *dev, uffs_Buf *buf) |
clone from an exist buffer. allocate memory for new buffer, and copy data from original buffer if original buffer is not NULL. | |
void | uffs_BufDecRef (uffs_Buf *buf) |
uffs_Buf * | uffs_BufFind (uffs_Device *dev, u16 father, u16 serial, u16 pageID) |
URET | uffs_BufFlush (struct uffs_DeviceSt *dev) |
void | uffs_BufFreeClone (uffs_Device *dev, uffs_Buf *buf) |
release cloned buffer | |
uffs_Buf * | uffs_BufGet (struct uffs_DeviceSt *dev, u16 father, u16 serial, u16 pageID) |
get a page buffer | |
uffs_Buf * | uffs_BufGetEx (struct uffs_DeviceSt *dev, u8 type, TreeNode *node, u16 pageID) |
void | uffs_BufIncRef (uffs_Buf *buf) |
URET | uffs_BufInit (struct uffs_DeviceSt *dev, int maxBuf, int maxDirtyBuf) |
initialize page buffers for device in UFFS, each device has one buffer pool | |
UBOOL | uffs_BufIsAllEmpty (struct uffs_DeviceSt *dev) |
UBOOL | uffs_BufIsAllFree (struct uffs_DeviceSt *dev) |
uffs_Buf * | uffs_BufNew (struct uffs_DeviceSt *dev, u8 type, u16 father, u16 serial, u16 pageID) |
URET | uffs_BufPut (uffs_Device *dev, uffs_Buf *buf) |
Put back a page buffer, make reference count decrease by one. | |
URET | uffs_BufRead (struct uffs_DeviceSt *dev, uffs_Buf *buf, void *data, u32 ofs, u32 len) |
URET | uffs_BufReleaseAll (struct uffs_DeviceSt *dev) |
release all page buffer, this function should be called when unmounting a uffs device | |
URET | uffs_BufSetAllEmpty (struct uffs_DeviceSt *dev) |
void | uffs_BufSetMark (uffs_Buf *buf, int mark) |
URET | uffs_BufWrite (struct uffs_DeviceSt *dev, uffs_Buf *buf, void *data, u32 ofs, u32 len) |
URET | uffs_LoadPhiDataToBuf (uffs_Device *dev, uffs_Buf *buf, u32 block, u32 page) |
URET | uffs_LoadPhiDataToBufEccUnCare (uffs_Device *dev, uffs_Buf *buf, u32 block, u32 page) |
Definition in file uffs_buf.h.
#define CLONE_BUF_MARK 0xffff |
#define UFFS_BUF_DIRTY 2 |
Definition at line 22 of file uffs_buf.h.
#define UFFS_BUF_EMPTY 0 |
Definition at line 20 of file uffs_buf.h.
Referenced by uffs_BufFind(), uffs_BufFreeClone(), uffs_BufGetEx(), uffs_BufInit(), uffs_BufIsAllEmpty(), uffs_BufNew(), uffs_BufSetAllEmpty(), uffs_DeleteObject(), uffs_LoadPhiDataToBuf(), uffs_LoadPhiDataToBufEccUnCare(), and uffs_TruncateObject().
#define UFFS_BUF_VALID 1 |
Definition at line 21 of file uffs_buf.h.
Referenced by uffs_BufGetEx(), uffs_LoadPhiDataToBuf(), and uffs_LoadPhiDataToBufEccUnCare().
uffs_Buf* uffs_BufClone | ( | uffs_Device * | dev, | |
uffs_Buf * | buf | |||
) |
clone from an exist buffer. allocate memory for new buffer, and copy data from original buffer if original buffer is not NULL.
[in] | dev | uffs device |
[in] | buf | page buffer to be clone from. if NULL presented here, data copy will not be processed |
Definition at line 990 of file uffs_buf.c.
References CLONE_BUF_MARK, uffs_DeviceSt::com, uffs_BufSt::data, uffs_BufSt::dataLen, uffs_BufSt::father, uffs_BufSt::next, uffs_BufSt::nextDirty, NULL, uffs_BufSt::pageID, PFX, uffs_commInfoSt::pgSize, uffs_BufSt::prev, uffs_BufSt::prevDirty, uffs_BufSt::refCount, uffs_BufSt::serial, uffs_BufSt::type, UFFS_ERR_SERIOUS, and uffs_Perror().
Referenced by uffs_RecoverBadBlock().
void uffs_BufDecRef | ( | uffs_Buf * | buf | ) |
uffs_Buf* uffs_BufFind | ( | uffs_Device * | dev, | |
u16 | father, | |||
u16 | serial, | |||
u16 | pageID | |||
) |
find a buffer in the pool
[in] | dev | uffs device |
[in] | father | father serial num |
[in] | serial | serial num |
[in] | pageID | pageID |
Definition at line 286 of file uffs_buf.c.
References uffs_DeviceSt::buf, uffs_pageBufsSt::bufHead, uffs_BufSt::father, uffs_BufSt::mark, uffs_BufSt::next, NULL, uffs_BufSt::pageID, uffs_BufSt::serial, and UFFS_BUF_EMPTY.
Referenced by uffs_BufGet(), uffs_BufGetEx(), uffs_DeleteObject(), and uffs_TruncateObject().
URET uffs_BufFlush | ( | struct uffs_DeviceSt * | dev | ) |
flush buffers to flash
[in] | dev | uffs device |
Definition at line 734 of file uffs_buf.c.
References dirhSt::block, filehSt::block, fdataSt::block, uffs_DeviceSt::buf, uffs_treeNodeSt::data, uffs_treeNodeSt::dir, uffs_pageBufsSt::dirty, uffs_pageBufsSt::dirtyCount, uffs_BufSt::father, uffs_treeNodeSt::file, NULL, PFX, uffs_BufSt::serial, uffs_BufSt::type, uffs_treeNodeSt::u, U_FAIL, U_SUCC, UFFS_ALL_PAGES, UFFS_ERR_SERIOUS, uffs_FindDataNode(), uffs_FindDirNodeFromTree(), uffs_FindFileNodeFromTree(), uffs_GetBlockInfo(), uffs_GetFreePagesCount(), uffs_LoadBlockInfo(), uffs_Perror(), uffs_PutBlockInfo(), UFFS_TYPE_DATA, UFFS_TYPE_DIR, and UFFS_TYPE_FILE.
Referenced by uffs_BufGetEx(), uffs_BufNew(), uffs_BufReleaseAll(), uffs_BufWrite(), uffs_CloseObject(), uffs_DeleteObject(), uffs_RenameObject(), uffs_TruncateObject(), and uffs_WriteObject().
void uffs_BufFreeClone | ( | uffs_Device * | dev, | |
uffs_Buf * | buf | |||
) |
release cloned buffer
[in] | dev | uffs device |
[in] | buf | cloned buffer |
Definition at line 1023 of file uffs_buf.c.
References CLONE_BUF_MARK, uffs_BufSt::mark, PFX, uffs_BufSt::refCount, UFFS_BUF_EMPTY, UFFS_ERR_SERIOUS, and uffs_Perror().
Referenced by uffs_RecoverBadBlock().
uffs_Buf* uffs_BufGet | ( | struct uffs_DeviceSt * | dev, | |
u16 | father, | |||
u16 | serial, | |||
u16 | pageID | |||
) |
get a page buffer
[in] | dev | uffs device |
[in] | father | father serial num |
[in] | serial | serial num |
[in] | pageID | pageID |
Definition at line 818 of file uffs_buf.c.
References uffs_BufSt::refCount, and uffs_BufFind().
Referenced by uffs_BufNew(), and uffs_CreateNewFile().
uffs_Buf* uffs_BufGetEx | ( | struct uffs_DeviceSt * | dev, | |
u8 | type, | |||
TreeNode * | node, | |||
u16 | pageID | |||
) |
get a page buffer
[in] | dev | uffs device |
[in] | type | dir, file or data ? |
[in] | node | node on the tree |
[in] | pageID | pageID |
Definition at line 882 of file uffs_buf.c.
References dirhSt::block, filehSt::block, fdataSt::block, uffs_treeNodeSt::data, uffs_BufSt::dataLen, uffs_TagsSt::dataLength, uffs_treeNodeSt::dir, dirhSt::father, filehSt::father, fdataSt::father, uffs_BufSt::father, uffs_treeNodeSt::file, uffs_BufSt::mark, NULL, uffs_BufSt::pageID, PFX, uffs_BufSt::refCount, dirhSt::serial, filehSt::serial, fdataSt::serial, uffs_BufSt::serial, uffs_blockInfoSt::spares, uffs_pageSpareSt::tag, uffs_BufSt::type, uffs_treeNodeSt::u, U_FAIL, UFFS_BUF_EMPTY, UFFS_BUF_VALID, uffs_BufFind(), uffs_BufFlush(), UFFS_ERR_SERIOUS, uffs_FindBestPageInBlock(), uffs_FindPageInBlockWithPageId(), uffs_GetBlockInfo(), UFFS_INVALID_PAGE, uffs_LoadPhiDataToBuf(), uffs_Perror(), uffs_PutBlockInfo(), UFFS_TYPE_DATA, UFFS_TYPE_DIR, and UFFS_TYPE_FILE.
Referenced by uffs_CloseObject(), uffs_ReadObject(), and uffs_RenameObject().
void uffs_BufIncRef | ( | uffs_Buf * | buf | ) |
URET uffs_BufInit | ( | uffs_Device * | dev, | |
int | maxBuf, | |||
int | maxDirtyBuf | |||
) |
initialize page buffers for device in UFFS, each device has one buffer pool
[in] | dev | uffs device |
[in] | maxBuf | maximum buffer number, normally use MAX_PAGE_BUFFERS |
[in] | maxDirtyBuf | maximum dirty buffer allowed, if the dirty buffer over this number, than need to be flush to flash |
Definition at line 29 of file uffs_buf.c.
References uffs_DeviceSt::attr, uffs_DeviceSt::buf, uffs_pageBufsSt::bufHead, uffs_pageBufsSt::bufTail, uffs_DeviceSt::com, uffs_BufSt::data, uffs_pageBufsSt::dirty, uffs_pageBufsSt::dirtyCount, uffs_commInfoSt::eccSize, uffs_DeviceSt::flash, uffs_FlashOpsSt::GetEccSize, uffs_pageBufsSt::maxBuf, uffs_pageBufsSt::maxDirtyBuf, uffs_BufSt::next, NULL, uffs_storageAttrSt::page_data_size, uffs_storageAttrSt::pages_per_block, PFX, uffs_commInfoSt::pgDataSize, uffs_commInfoSt::pgSize, uffs_pageBufsSt::pool, uffs_BufSt::prev, U_FAIL, U_SUCC, UFFS_BUF_EMPTY, UFFS_ERR_NOISY, UFFS_ERR_NORMAL, uffs_MemAlloc(), and uffs_Perror().
Referenced by uffs_InitDevice().
UBOOL uffs_BufIsAllEmpty | ( | struct uffs_DeviceSt * | dev | ) |
Definition at line 1050 of file uffs_buf.c.
References uffs_DeviceSt::buf, uffs_pageBufsSt::bufHead, uffs_BufSt::mark, uffs_BufSt::next, U_FALSE, U_TRUE, and UFFS_BUF_EMPTY.
UBOOL uffs_BufIsAllFree | ( | struct uffs_DeviceSt * | dev | ) |
Definition at line 1040 of file uffs_buf.c.
References uffs_DeviceSt::buf, uffs_pageBufsSt::bufHead, uffs_BufSt::next, uffs_BufSt::refCount, U_FALSE, and U_TRUE.
Referenced by uffs_FormatDevice().
New generate a buffer
Definition at line 836 of file uffs_buf.c.
References uffs_DeviceSt::com, uffs_BufSt::data, uffs_BufSt::dataLen, uffs_BufSt::father, uffs_BufSt::mark, NULL, uffs_BufSt::pageID, PFX, uffs_commInfoSt::pgSize, uffs_BufSt::refCount, uffs_BufSt::serial, uffs_BufSt::type, UFFS_BUF_EMPTY, uffs_BufFlush(), uffs_BufGet(), UFFS_ERR_SERIOUS, and uffs_Perror().
URET uffs_BufPut | ( | uffs_Device * | dev, | |
uffs_Buf * | buf | |||
) |
Put back a page buffer, make reference count decrease by one.
[in] | dev | uffs device |
[in] | buf | buffer to be put back |
Definition at line 963 of file uffs_buf.c.
References NULL, PFX, uffs_BufSt::refCount, U_FAIL, U_SUCC, UFFS_ERR_NORMAL, and uffs_Perror().
Referenced by uffs_CloseObject(), uffs_CreateNewFile(), uffs_ReadObject(), and uffs_RenameObject().
URET uffs_BufRead | ( | struct uffs_DeviceSt * | dev, | |
uffs_Buf * | buf, | |||
void * | data, | |||
u32 | ofs, | |||
u32 | len | |||
) |
Definition at line 1139 of file uffs_buf.c.
References uffs_DeviceSt::com, uffs_BufSt::data, uffs_commInfoSt::pgDataSize, and U_SUCC.
Referenced by uffs_CloseObject(), and uffs_ReadObject().
URET uffs_BufReleaseAll | ( | uffs_Device * | dev | ) |
release all page buffer, this function should be called when unmounting a uffs device
[in] | dev | uffs device |
Definition at line 100 of file uffs_buf.c.
References uffs_DeviceSt::buf, uffs_pageBufsSt::bufHead, uffs_pageBufsSt::bufTail, uffs_BufSt::father, uffs_BufSt::next, NULL, uffs_BufSt::pageID, PFX, uffs_pageBufsSt::pool, uffs_BufSt::refCount, uffs_BufSt::serial, U_FAIL, U_SUCC, uffs_BufFlush(), uffs_DeviceLock(), uffs_DeviceUnLock(), UFFS_ERR_NORMAL, uffs_MemFree(), and uffs_Perror().
Referenced by uffs_ReleaseDevice().
URET uffs_BufSetAllEmpty | ( | struct uffs_DeviceSt * | dev | ) |
Definition at line 1061 of file uffs_buf.c.
References uffs_DeviceSt::buf, uffs_pageBufsSt::bufHead, uffs_BufSt::mark, uffs_BufSt::next, U_SUCC, and UFFS_BUF_EMPTY.
Referenced by uffs_FormatDevice().
void uffs_BufSetMark | ( | uffs_Buf * | buf, | |
int | mark | |||
) |
Definition at line 1082 of file uffs_buf.c.
References uffs_BufSt::mark.
Referenced by uffs_TruncateObject().
URET uffs_BufWrite | ( | struct uffs_DeviceSt * | dev, | |
uffs_Buf * | buf, | |||
void * | data, | |||
u32 | ofs, | |||
u32 | len | |||
) |
Definition at line 1097 of file uffs_buf.c.
References uffs_DeviceSt::buf, uffs_DeviceSt::com, uffs_BufSt::data, uffs_BufSt::dataLen, uffs_pageBufsSt::dirty, uffs_pageBufsSt::dirtyCount, uffs_BufSt::father, uffs_pageBufsSt::maxDirtyBuf, PFX, uffs_commInfoSt::pgDataSize, uffs_BufSt::serial, uffs_BufSt::type, U_FAIL, U_FALSE, U_SUCC, uffs_BufFlush(), UFFS_ERR_SERIOUS, and uffs_Perror().
Referenced by uffs_CloseObject(), and uffs_RenameObject().
URET uffs_LoadPhiDataToBuf | ( | uffs_Device * | dev, | |
uffs_Buf * | buf, | |||
u32 | block, | |||
u32 | page | |||
) |
load psychical page data into buf and do ecc check
[in] | dev | uffs device |
[in] | buf | buf to be load in |
[in] | block | psychical block number |
[in] | page | psychical page number |
Definition at line 228 of file uffs_buf.c.
References uffs_DeviceSt::com, uffs_BufSt::data, uffs_BufSt::mark, uffs_DeviceSt::ops, uffs_commInfoSt::pgSize, uffs_DeviceOpsSt::ReadPageData, U_FAIL, U_SUCC, UFFS_BUF_EMPTY, UFFS_BUF_VALID, and uffs_CheckBadBlock().
Referenced by uffs_BufGetEx().
URET uffs_LoadPhiDataToBufEccUnCare | ( | uffs_Device * | dev, | |
uffs_Buf * | buf, | |||
u32 | block, | |||
u32 | page | |||
) |
load psychical page data into buf and try ecc check
[in] | dev | uffs device |
[in] | buf | buf to be load in |
[in] | block | psychical block number |
[in] | page | psychical page number |
Definition at line 258 of file uffs_buf.c.
References uffs_DeviceSt::com, uffs_BufSt::data, uffs_BufSt::mark, uffs_DeviceSt::ops, uffs_commInfoSt::pgSize, uffs_DeviceOpsSt::ReadPageData, U_SUCC, UFFS_BUF_EMPTY, UFFS_BUF_VALID, and uffs_CheckBadBlock().
Referenced by uffs_RecoverBadBlock().