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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uffs_public.h

?? flash管理算法
?? H
字號:
/*
    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_public.h
 * \brief public data structures for uffs
 * \author Ricky Zheng
 */

#ifndef UFFS_PUBLIC_H
#define UFFS_PUBLIC_H

#include "uffs/uffs_types.h"
#include "uffs/uffs_config.h"
#include "uffs/uffs_core.h"
#include "uffs/uffs.h"

#ifdef __cplusplus
extern "C"{
#endif


/** 
 * \struct uffs_TagsSt
 * \note size: 12 bytes, small enough to be embedded into the 'spare' of NAND flash page.
 *			Although this struct is designed as close as the NAND flash spare, it is *NOT*
 *          the physical map of NAND flash page's 'spare'!! It's "Logical Spare".
 *	\see Logic Spare <--> Physical Spare : uffs_FlashOps->LoadPageSpare,->WritePageSpare
 */
struct uffs_TagsSt {
	u8 dirty:1;				//!< 0: dirty, 1: clear
	u8 valid:1;				//!< 0: valid, 1: invalid
	u8 type:4;				//!< block type: #UFFS_TYPE_DIR, #UFFS_TYPE_FILE, #UFFS_TYPE_DATA or #UFFS_TYPE_RESV
	u8 blockTimeStamp:2;	//!< time stamp of block;

	u8 pageID;				//!< page id
	u16 father;				//!< father's serial number
	u16 serial;				//!< serial number

	u16 dataLength;			//!< length of page data length
	u16 dataSum;			//!< sum of file name or directory name
#if defined(ENABLE_TAG_CHECKSUM) && ENABLE_TAG_CHECKSUM == 1
	u8 checkSum;			//!< checksum of above, or ecc of tag...
#endif
	u8 blockStatus;			//!< block status, this byte is loaded from flash, but not write to flash directly

};

/*
New tag: ecc embedded
struct uffs_TagsSt {
//0:
	u8 dirty:1;				//!< 0: dirty, 1: clear
	u8 valid:1;				//!< 0: valid, 1: invalid
	u8 type:4;				//!< block type: #UFFS_TYPE_DIR, #UFFS_TYPE_FILE, #UFFS_TYPE_DATA or #UFFS_TYPE_RESV
	u8 blockTimeStamp:2;	//!< time stamp of block;
//1:
	u8 dataSum;				//!< sum of file name or directory name, or ... ?
//2:
	u16 father;				//!< father's serial number
	u16 serial;				//!< serial number
//6:	
	u16 dataLength;			//!< length of page data: maximum 64K bytes
//8:
#if NAND_PAGE_DATASIZE == 512
	u8 ecc[6];				//!< ecc for 512 page size
#elseif NAND_PAGE_DATASIZE == 1024
	u8 ecc[12];				//!< ecc for 1K page size
#elseif NAND_PAGE_DATASIZE == 2048
	u8 ecc[24];				//!< ecc for 2K page size
#endif
	u8 pageID;				//!< maximum 256 pages in a block

	u8 blockStatus;			//!< block status, this byte is loaded from flash, but not write to flash directly !

}

*/



/** uffs_TagsSt.dirty */
#define TAG_VALID		0
#define TAG_INVALID		1

/** uffs_TagsSt.valid */
#define TAG_DIRTY		0
#define TAG_CLEAR		1


int uffs_GetFirstBlockTimeStamp(void);
int uffs_GetNextBlockTimeStamp(int prev);
UBOOL uffs_IsSrcNewerThanObj(int src, int obj);


#include "uffs_device.h"

/********************* uffs disk and partition ***************************/

#define UFFS_DISK_MARK				0x53464655	//'UFFS'
#define UFFS_DISK_INFO_SIZE			64
#define UFFS_PARTITION_INFO_SIZE	32

//PHICICAL storage
//uffs disk information residents on first block of NAND flash
//Assume that NAND flash's first block is always good.
struct uffs_DiskInfoSt {
	u32 uffs_mark;		//!< will be 'UFFS', value: 0x53464655
	u32 version;		//!< uffs version
	u32 reserved[16];	//!< reserved
	u32 status;			//!< uffs status
	u32 partitions;		//!< partition nums
	u32 alternate;		//!< diskinfo alternate block
};

struct uffs_PartitionInfoSt {
	u32 status;				//partition status
	u32 createTime;			//create time
	u32 lastModified;		//last modified time
	u32 block_begin;		//partition begin block
	u32 block_end;			//partition end block
	u32 access;				//access mask
};


struct uffs_StorageSt {
	int mainBlock;
	struct uffs_DiskInfoSt main;
	int partsNum;
	struct uffs_PartitionInfoSt *parts;
};


typedef struct uffs_mountTableSt {
	uffs_Device *dev;
	int startBlock;
	int endBlock;
	const char *mountPoint;
	struct uffs_mountTableSt *next;
} uffs_mountTable;


/********************************** debug & error *************************************/
#define UFFS_ERR_NOISY		-1
#define UFFS_ERR_NORMAL		0
#define UFFS_ERR_SERIOUS	1
#define UFFS_ERR_DEAD		2

//#define UFFS_DBG_LEVEL	UFFS_ERR_NORMAL	
#define UFFS_DBG_LEVEL	UFFS_ERR_NOISY	

void uffs_Perror( int level, const char *errFmt, ... );

/********************************** NAND **********************************************/
//NAND flash specific file must implement these interface
URET uffs_LoadPageSpare(uffs_Device *dev, int block, int page, uffs_Tags *tag);
URET uffs_WritePageSpare(uffs_Device *dev, int block, int page, uffs_Tags *tag);
URET uffs_MakePageValid(uffs_Device *dev, int block, int page, uffs_Tags *tag);
UBOOL uffs_IsBlockBad(uffs_Device *dev, uffs_blockInfo *bc);

/********************************** Public defines *****************************/
/**
 * \def UFFS_ALL_PAGES 
 * \brief UFFS_ALL_PAGES if this value presented, that means the objects are all pages in the block
 */
#define UFFS_ALL_PAGES (0xffff)

/** 
 * \def UFFS_INVALID_PAGE
 * \brief macro for invalid page number
 */
#define UFFS_INVALID_PAGE	(0xfffe)
#define UFFS_INVALID_BLOCK	(0xfffe)

#define UFFS_INVALID_SERIAL 0xffff


URET uffs_NewBlock(uffs_Device *dev, u16 block, uffs_Tags *tag, uffs_Buf *buf);
URET uffs_BlockRecover(uffs_Device *dev, uffs_blockInfo *old, u16 newBlock);
URET uffs_PageRecover(uffs_Device *dev, 
					  uffs_blockInfo *bc, 
					  u16 oldPage, 
					  u16 newPage, 
					  uffs_Buf *buf);
int uffs_FindFreePageInBlock(uffs_Device *dev, uffs_blockInfo *bc);
u8 uffs_CalTagCheckSum(uffs_Tags *tag);
u16 uffs_FindBestPageInBlock(uffs_Device *dev, uffs_blockInfo *bc, u16 page);
u16 uffs_FindFirstValidPage(uffs_Device *dev, uffs_blockInfo *bc);
u16 uffs_FindFirstFreePage(uffs_Device *dev, uffs_blockInfo *bc, u16 pageFrom);
u16 uffs_FindPageInBlockWithPageId(uffs_Device *dev, uffs_blockInfo *bc, u16 pageID);

u8 uffs_MakeSum8(void *p, int len);
u16 uffs_MakeSum16(void *p, int len);
URET uffs_CreateNewFile(uffs_Device *dev, u16 father, u16 serial, uffs_blockInfo *bc, uffs_fileInfo *fi);

int uffs_GetBlockFileDataLength(uffs_Device *dev, uffs_blockInfo *bc, u8 type);
UBOOL uffs_IsPageErased(uffs_Device *dev, uffs_blockInfo *bc, u16 page);
int uffs_GetFreePagesCount(uffs_Device *dev, uffs_blockInfo *bc);
UBOOL uffs_IsDataBlockReguFull(uffs_Device *dev, uffs_blockInfo *bc);

int uffs_GetBlockTimeStamp(uffs_Device *dev, uffs_blockInfo *bc);

URET uffs_WriteDataToNewPage(uffs_Device *dev, 
							 u16 block, 
							 u16 page,
							 uffs_Tags *tag,
							 uffs_Buf *buf);


int uffs_GetDeviceUsed(uffs_Device *dev);
int uffs_GetDeviceFree(uffs_Device *dev);
int uffs_GetDeviceTotal(uffs_Device *dev);




/************************************************************************/
/*  init functions                                                                     */
/************************************************************************/
URET uffs_InitDevice(uffs_Device *dev);
URET uffs_ReleaseDevice(uffs_Device *dev);

URET uffs_initMountTable(void);
URET uffs_releaseMountTable(void);

URET uffs_InitFlashClass(uffs_Device *dev);

uffs_mountTable * uffs_GetMountTable(void);
int uffs_RegisterMountTable(uffs_mountTable *mtab);


#ifdef __cplusplus
}
#endif
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费观看高清完整版在线观看 | 日本一不卡视频| 久久精品一区四区| 欧美日本国产一区| 成人激情午夜影院| 国产综合色在线视频区| 日韩经典一区二区| 最新日韩av在线| 欧美乱妇23p| 欧美日韩精品专区| 91免费在线播放| 成人午夜电影久久影院| 精彩视频一区二区| 日韩电影在线免费看| 亚洲影院久久精品| 亚洲欧美偷拍三级| 亚洲欧美色一区| 亚洲欧洲色图综合| 中文字幕一区二区三区在线观看 | 精品午夜一区二区三区在线观看| 亚洲免费在线电影| 亚洲与欧洲av电影| 亚洲国产另类av| 偷拍与自拍一区| 国产精品福利一区| 26uuu欧美| 国产女人水真多18毛片18精品视频| 精品国产乱码久久久久久蜜臀| 日韩免费观看高清完整版| 日韩欧美一级二级| 久久亚洲一区二区三区四区| 久久精品日产第一区二区三区高清版| 亚洲精品一线二线三线无人区| 精品国产一区二区三区久久影院 | 6080亚洲精品一区二区| 欧美一区二区在线免费播放 | 亚洲午夜久久久久久久久电影网 | 蜜桃视频在线一区| 国产麻豆精品视频| 北岛玲一区二区三区四区| 精品亚洲porn| 91影院在线观看| 91浏览器入口在线观看| 欧美日韩一区久久| 日韩色在线观看| 日本一区二区免费在线| 日韩理论电影院| 日日夜夜一区二区| 亚洲国产精品一区二区久久| 亚洲最新视频在线观看| 久久精品国产精品青草| 色欧美日韩亚洲| 欧美精品在线观看播放| 国产日韩欧美在线一区| 一区二区三区国产| 精品在线观看视频| av不卡在线播放| 日韩欧美一区二区三区在线| 国产精品久久久久久户外露出| 肉色丝袜一区二区| 91蜜桃免费观看视频| 欧美成人r级一区二区三区| 国产精品久久久久精k8| 蜜臀久久99精品久久久久宅男 | 国产视频一区在线播放| 亚洲成人先锋电影| 成人午夜在线视频| 6080午夜不卡| 国产精品对白交换视频| 免费观看日韩电影| 欧美中文字幕一二三区视频| 久久精品人人做人人综合| 一区二区三区高清不卡| 成人午夜电影小说| 精品久久久久99| 日日夜夜精品免费视频| 97久久久精品综合88久久| 中文字幕一区二区三| 国产成人亚洲精品狼色在线| 777午夜精品免费视频| 亚洲激情成人在线| 国产成a人无v码亚洲福利| 777久久久精品| 亚洲电影欧美电影有声小说| 99久久亚洲一区二区三区青草| 久久亚洲精品小早川怜子| 美女看a上一区| 欧美成人免费网站| 奇米888四色在线精品| 欧美日韩另类国产亚洲欧美一级| 亚洲色大成网站www久久九九| 日韩电影一区二区三区四区| 欧美亚洲图片小说| 一级中文字幕一区二区| 一本大道久久a久久精品综合| 国产精品久久久久aaaa| 成人激情免费电影网址| 中文字幕一区视频| 91首页免费视频| 亚洲欧美激情插| 日本精品裸体写真集在线观看| 欧美激情一区在线观看| 成人在线视频一区| 中文字幕日韩一区二区| 不卡av在线免费观看| 亚洲老司机在线| 97aⅴ精品视频一二三区| 亚洲视频免费在线| 欧美丝袜丝交足nylons| 亚洲制服丝袜av| 欧美日韩国产首页在线观看| 日本特黄久久久高潮| 精品日韩一区二区| 国产精品中文字幕欧美| 欧美精品tushy高清| 老司机精品视频一区二区三区| 精品av综合导航| 成人av一区二区三区| 亚洲在线视频网站| 91精品国产一区二区| 国产在线播放一区| 日韩美女视频一区| 欧美另类videos死尸| 奇米影视7777精品一区二区| 亚洲精品大片www| 日韩一级黄色大片| 成人综合在线视频| 国内成人精品2018免费看| 亚洲欧洲av在线| 在线观看91av| 欧洲精品一区二区| 国产精品自拍在线| 久久女同精品一区二区| 欧美高清精品3d| 成人免费av资源| 日本91福利区| 国产精品入口麻豆原神| 欧美日韩国产大片| 成人性生交大片免费看在线播放| 亚洲高清一区二区三区| 国产欧美视频一区二区| 欧美亚日韩国产aⅴ精品中极品| 日韩电影免费一区| 亚洲三级在线免费| 久久成人麻豆午夜电影| 一级日本不卡的影视| 亚洲综合一区二区精品导航| 国产精品免费久久| 中文字幕欧美激情| 国产精品日韩成人| 国产精品女同一区二区三区| 久久久久国色av免费看影院| 日韩欧美国产综合一区| 欧美成人aa大片| 26uuu精品一区二区| 国产亚洲欧美日韩俺去了| wwww国产精品欧美| 国产欧美日韩精品在线| 国产欧美久久久精品影院| 国产女人18水真多18精品一级做| 久久久精品免费观看| 欧美国产精品中文字幕| 国产精品不卡一区| 最新日韩av在线| 亚洲国产美国国产综合一区二区| 午夜精品在线视频一区| 免费日韩伦理电影| 国产一区二区三区在线观看免费视频| 国产中文字幕精品| 成人美女视频在线观看| 91蜜桃传媒精品久久久一区二区 | 亚洲综合久久久| 亚洲线精品一区二区三区八戒| 亚洲高清不卡在线| 久久9热精品视频| av男人天堂一区| 欧美日韩一区在线| 久久免费国产精品| 一区二区成人在线| 免费一级欧美片在线观看| 丰满白嫩尤物一区二区| 在线免费观看日本欧美| 日韩欧美在线观看一区二区三区| 日本一区二区三区在线观看| 亚洲一区二区在线播放相泽 | 国产精品美女久久久久久久| 一区二区三区日韩欧美| 久久超级碰视频| 91香蕉视频黄| 欧美大肚乱孕交hd孕妇| 国产精品美女久久久久久久网站| 亚洲午夜久久久久久久久电影网| 韩国三级电影一区二区| 欧洲日韩一区二区三区| 久久精品视频免费观看| 日韩精品亚洲专区| 色美美综合视频| 久久先锋影音av| 日韩国产精品久久| 91在线观看一区二区|