⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uffs_device.h

📁 一个NAND FLASH文件系统
💻 H
字号:
/**  * \file uffs_device.h * \brief uffs file system device structures definition * \author Ricky Zheng */#ifndef UFFS_DEVICE_H#define UFFS_DEVICE_H#include "uffs/uffs_types.h"
#include "uffs/uffs_config.h"#include "uffs/uffs_buf.h"#include "uffs/uffs_blockInfo.h"#include "uffs/ubuffer.h"#include "uffs/uffs_tree.h"
#include "uffs/uffs_mem.h"#ifdef __cplusplusextern "C"{#endif/************************* uffs device *************************//**  * \struct uffs_FlashOpsSt * \brief flash specific operations */struct uffs_FlashOpsSt {	URET (*LoadPageSpare)(uffs_Device *dev, int block, int page, uffs_Tags *tag);	URET (*WritePageSpare)(uffs_Device *dev, int block, int page, uffs_Tags *tag);	URET (*MakePageValid)(uffs_Device *dev, int block, int page, uffs_Tags *tag);	int  (*GetEccSize)(uffs_Device *dev);	void (*MakeEcc)(uffs_Device *dev, void *data, void *ecc);	int (*EccCollect)(uffs_Device *dev, void *data, void *read_ecc, const void *test_ecc);	UBOOL (*IsBlockBad)(uffs_Device *dev, uffs_blockInfo *bc);	URET (*MakeBadBlockMark)(uffs_Device *dev, int block);};/** * \struct uffs_FlashClassSt * \brief Flash class descriptor */struct uffs_FlashClassSt {	const char *className;	int maker;	int *id_list;	struct uffs_FlashOpsSt *flash;};/** * \struct uffs_DeviceOpsSt  * \brief flash phycical operations, should be implement in each flash types */struct uffs_DeviceOpsSt {	URET (*Reset)(uffs_Device *dev);	UBOOL (*IsBlockBad)(uffs_Device *dev, u32 block);	URET (*EraseBlock)(uffs_Device *dev, u32 block);	URET (*WritePage)(uffs_Device *dev, u32 block, u32 pageNum, const u8 *page, const u8 *spare);	URET (*WritePageData)(uffs_Device *dev, u32 block, u32 pageNum, const u8 *page, int ofs, int len);	URET (*WritePageSpare)(uffs_Device *dev, u32 block, u32 pageNum, const u8 *spare, int ofs, int len);	URET (*ReadPage)(uffs_Device *dev, u32 block, u32 pageNum, u8 *page, u8 *spare);	URET (*ReadPageData)(uffs_Device *dev, u32 block, u32 pageNum, u8 *page, int ofs, int len);	URET (*ReadPageSpare)(uffs_Device *dev, u32 block, u32 pageNum, u8 *spare, int ofs, int len);};/** UFFS device type: uffs_DeviceSt.dev_type */#define UFFS_DEV_NULL		0#define UFFS_DEV_NAND		1#define UFFS_DEV_SM			2#define UFFS_DEV_RAM		3#define UFFS_DEV_ROM		4#define UFFS_DEV_EMU		5/**  * \struct uffs_storageAttrSt * \brief uffs device storage attribute, provide by nand specific file */struct uffs_storageAttrSt {	u32 dev_type;			//!< device type	int maker;				//!< flash maker	int id;					//!< chip id, or device id	u32 total_blocks;		//!< total blocks in this chip	u32 block_data_size;	//!< block data size (= page_data_size * pages_per_block)	u16 page_data_size;		//!< page data size (physical page data size, e.g. 512)	u16 spare_size;			//!< page spare size (physical page spare size, e.g. 16)	u16 pages_per_block;	//!< pages per block};/**  * \struct uffs_blockInfoCacheSt * \brief block information structure, used to manager block information caches */struct uffs_blockInfoCacheSt {	uffs_blockInfo *head;			//!< buffer head of block info(spares)	uffs_blockInfo *tail;	int maxBlockCached;				//!< maximun block info buffers	void *internalBufHead;			//!< internal buffer head, used for release whole buffer};/**  * \struct uffs_partitionSt * \brief partition basic information */struct uffs_partitionSt {	u16 start;		//!< start block number of partition	u16 end;		//!< end block number of partiton};/**  * \struct uffs_lockSt * \brief lock stuffs */struct uffs_lockSt {	u32 sem;	u32 task_id;};/**  * \struct uffs_pageBufsSt */struct uffs_pageBufsSt {	uffs_Buf *bufHead;	uffs_Buf *bufTail;	uffs_Buf *dirty;	int maxBuf;	int maxDirtyBuf;	int dirtyCount;	void *pool;};/**  * \struct uffs_commInfoSt * \brief common data for device, should be initialized at early * \note it is allowed that pgSize is smaller than physical page size, but normally they are the same */struct uffs_commInfoSt {	u32 pgDataSize;			//!< page data size	u32 eccSize;			//!< ecc size	u32 pgSize;				//!< page size = page data size + ecc size};struct uffs_newBadBlockSt {	u16 block;				//!< bad block, FIX ME to process more than one bad block};/** statistic of flash read/write/erase activities */typedef struct {	int blockEraseCount;	int pageWriteCount;	int pageReadCount;	int spareWriteCount;	int spareReadCount;} uffs_stat;

/**  * \struct uffs_DeviceSt * \brief The core data structure of UFFS, all information needed by manipulate UFFS object * \note one partition corresponding one uffs device. */struct uffs_DeviceSt {	URET (*Init)(uffs_Device *dev);				//!< low level initialization	URET (*Release)(uffs_Device *dev);			//!< low level release	void *private;								//!< private data for device	struct uffs_storageAttrSt attr;				//!< storage attribute	struct uffs_partitionSt par;				//!< partition information	struct uffs_FlashOpsSt *flash;				//!< flash specific operations	struct uffs_DeviceOpsSt *ops;				//!< NAND device operations	struct uffs_blockInfoCacheSt bc;			//!< block info cache	struct uffs_lockSt lock;					//!< lock data structure	struct uffs_pageBufsSt buf;					//!< page buffers	struct uffs_commInfoSt com;					//!< common information	struct uffs_treeSt tree;					//!< tree list of block	struct uffs_newBadBlockSt bad;				//!< new bad block	uffs_stat st;								//!< statistic counter
	struct uffs_memAllocatorSt *mem;			//!< uffs native memory allocator	u32 refCount;								//!< device reference count};URET uffs_DeviceInitLock(uffs_Device *dev);URET uffs_DeviceLock(uffs_Device *dev);URET uffs_DeviceUnLock(uffs_Device *dev);uffs_Device * uffs_GetDevice(const char *mountPoint);
const char * uffs_GetDeviceMountPoint(uffs_Device *dev);void uffs_PutDevice(uffs_Device *dev);#ifdef __cplusplus}#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -