亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? uffs_device.h

?? flash管理算法
?? H
字號(hào):
/*
    Copyright (C) 2005-2008  Ricky Zheng <ricky_gz_zheng@yahoo.co.nz>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

*/
/** 
 * \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"
#include "uffs/uffs_core.h"

#ifdef __cplusplus
extern "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);
};

#define MAN_ID_SAMSUNG	0xEC	// manufacture ID of samsung
#define MAN_ID_SIMRAM	0xFF	// manufacture ID when using RAM simulator

/**
 * \struct uffs_FlashClassSt
 * \brief Flash class descriptor
 */
struct uffs_FlashClassSt {
	const char *className;
	int maker;					// manufacture ID
	int *id_list;
	struct uffs_FlashOpsSt *flash;
	URET (*InitClass)(uffs_Device *dev, int id);
};

/**
 * \struct uffs_DeviceOpsSt 
 * \brief flash physical operations, should be implement in each flash types
 */
struct uffs_DeviceOpsSt {
	URET (*Reset)(uffs_Device *dev);
	UBOOL (*IsBlockBad)(uffs_Device *dev, u32 block);
	URET (*MarkBadBlock)(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
	u16 block_status_offs;	//!< block status byte in spare
};


/** 
 * \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;
	int counter;
};

/** 
 * \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 possible 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
	const 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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美伊人久久大香线蕉综合69 | 国产精品二区一区二区aⅴ污介绍| 日韩一区二区不卡| 91.成人天堂一区| 亚洲国产精品久久人人爱| 欧美日韩一区三区| 国产精品一级二级三级| 欧美经典一区二区| 欧美日韩国产综合久久| 欧美色图12p| 欧美一级理论性理论a| 555夜色666亚洲国产免| 日韩限制级电影在线观看| a4yy欧美一区二区三区| 色综合久久久久综合99| 国产盗摄一区二区| 一本久道中文字幕精品亚洲嫩| 久久人人超碰精品| 26uuu亚洲综合色| 欧美大尺度电影在线| 日韩精品在线看片z| 欧美国产精品久久| 亚洲国产精品久久艾草纯爱| 五月天激情综合| 国产一区在线观看视频| 91浏览器在线视频| 欧美伦理影视网| 国产欧美一区二区精品久导航 | 午夜一区二区三区在线观看| 裸体歌舞表演一区二区| 国产jizzjizz一区二区| 日韩一级大片在线观看| 亚洲女同女同女同女同女同69| 国内久久精品视频| 欧美片在线播放| 亚洲裸体xxx| 精品剧情在线观看| 婷婷开心久久网| 久久精品人人做人人综合| 亚洲一二三四在线| aa级大片欧美| 国产精品色呦呦| 精品一区二区日韩| 欧美电视剧在线观看完整版| 亚洲激情五月婷婷| 99视频精品全部免费在线| 欧美伊人久久久久久久久影院| 久久九九全国免费| 麻豆精品国产91久久久久久| 欧美日韩一本到| 亚洲精品高清在线| av激情成人网| 国产一区二区在线观看免费 | 一区二区三区四区精品在线视频| 国产乱子伦视频一区二区三区| 日韩欧美亚洲国产精品字幕久久久 | 国产无一区二区| 国产揄拍国内精品对白| 精品国产99国产精品| 久久99国产乱子伦精品免费| 欧美成人艳星乳罩| 韩国三级中文字幕hd久久精品| 国产亚洲欧美激情| 国产高清精品久久久久| 日韩av一二三| 日韩欧美国产一区二区三区 | 国产91精品一区二区麻豆网站| 日韩免费成人网| 色综合天天综合网天天狠天天| 99精品视频一区二区| 色综合天天综合网天天狠天天| 日本二三区不卡| 亚洲视频在线一区| 91麻豆精东视频| 亚洲精品国产一区二区三区四区在线| 成人动漫一区二区在线| 国产精品国产三级国产aⅴ原创| av爱爱亚洲一区| 亚洲精品ww久久久久久p站| 亚洲电影一区二区三区| 51午夜精品国产| av电影在线观看一区| 日日夜夜精品免费视频| 欧美一区二区三区在线视频| 成人网页在线观看| 日韩精品亚洲一区二区三区免费| 精品欧美一区二区三区精品久久 | 成人毛片视频在线观看| 成人午夜在线视频| 亚洲自拍都市欧美小说| 色婷婷激情综合| 亚洲福利视频一区| 欧美一区二区视频网站| 久久99久久99| 国产亚洲精品超碰| 成人黄页毛片网站| 亚洲免费观看高清完整| 色婷婷综合久色| 午夜精品福利一区二区蜜股av| 日韩美女视频在线| 岛国一区二区在线观看| 一区二区三区在线免费观看| 欧美精品 国产精品| 黄色日韩三级电影| 日韩一区在线免费观看| 欧美日韩一二区| 国模冰冰炮一区二区| 亚洲特黄一级片| 欧美精品电影在线播放| 国产91丝袜在线播放九色| 欧美日韩国产欧美日美国产精品| av成人免费在线观看| 色88888久久久久久影院野外| 91免费看`日韩一区二区| 成人美女视频在线观看18| 99riav一区二区三区| 成人免费高清在线| 国产福利一区二区三区| 国产伦精品一区二区三区视频青涩 | 欧美日产在线观看| 免费的成人av| 国产精品久久久久aaaa樱花| 欧美日韩国产一区二区三区地区| 久久不见久久见免费视频1| 久久av中文字幕片| 狠狠色狠狠色综合系列| 国产91丝袜在线观看| 91蜜桃视频在线| 欧美乱妇15p| 久久久久久一二三区| 国产精品午夜久久| 亚洲网友自拍偷拍| 精品无码三级在线观看视频| 国产一区视频网站| 91婷婷韩国欧美一区二区| 欧美午夜精品久久久久久孕妇| 欧美日韩精品免费| 日韩天堂在线观看| 久久综合色之久久综合| 国产色婷婷亚洲99精品小说| 午夜激情一区二区| 国产剧情一区在线| 欧美日韩国产精品成人| 91精品国产欧美一区二区成人| 欧美日韩国产不卡| 亚洲天堂网中文字| 免费高清在线一区| 久久久国产一区二区三区四区小说 | 欧美日本国产视频| 成人午夜av在线| 精品系列免费在线观看| 亚洲va欧美va天堂v国产综合| 国产精品国产三级国产有无不卡| 日韩欧美在线网站| 99re亚洲国产精品| 欧美va在线播放| 亚洲成人777| 色婷婷综合久久久| 国产精品伦理一区二区| 国模套图日韩精品一区二区| 色域天天综合网| 中文字幕一区二区三区乱码在线| 久久97超碰色| 国产日产欧产精品推荐色| 看片的网站亚洲| 国产精品成人免费| 欧美一级高清片在线观看| 99re视频精品| 国产成人aaa| 亚洲超碰精品一区二区| 欧美色视频一区| 亚洲一区二区三区三| 欧美三级午夜理伦三级中视频| 亚洲图片自拍偷拍| 欧美日韩国产综合一区二区| 国产精品一区二区你懂的| 亚洲人成精品久久久久| 91精品国产色综合久久久蜜香臀| 韩国女主播一区二区三区| 看电视剧不卡顿的网站| 奇米影视一区二区三区| 秋霞电影网一区二区| 日本sm残虐另类| 蜜臀久久99精品久久久久久9 | 欧美一区二区在线看| av一区二区三区在线| 国产欧美一区二区三区沐欲 | 精品久久久久99| 韩国三级电影一区二区| 国产午夜精品久久久久久免费视| 国产一区二区免费在线| 国产精品欧美极品| 在线观看日韩毛片| 国产**成人网毛片九色| 国内欧美视频一区二区| 国产在线精品一区在线观看麻豆| 精品一区二区影视| 黑人精品欧美一区二区蜜桃| 久久www免费人成看片高清| 国产精一区二区三区|