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

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

?? ynandif.c

?? Yaffs文件系統(tǒng)在嵌入式操作系統(tǒng)WinCE下的移植
?? C
字號:
/*
 * YAFFS: Yet another FFS. A NAND-flash specific file system.
 * ynandif.c: NAND interface functions for the WinCE port of YAFFS.
 *
 * Copyright (C) 2002-2003 Trimble Navigation Ltd.
 *
 * Created by Brad Beveridge <brad.beveridge@trimble.co.nz>
 * Modified for CE 4.x by Steve Fogle <stevef@atworkcom.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program 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 
 * General Public License for more details. You should have received a 
 * copy of the GNU General Public License along with this program; 
 * if not, write to the Free Software Foundation, Inc., 
 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
 *
 * $Id: ynandif.c,v 1.2 2003/01/31 00:52:53 charles Exp $
 */
#include <windows.h>
#include <fsdmgr.h>
#include "ynandif.h"

//slf021220a Begin Cleanup block driver interface
#if _WINCEOSVER < 400
// For Win'CE 4.0 FSDMGR instead of direct access.
HANDLE devHandle = 0;
#endif
//slf021220a end Cleanup block driver interface

/*
*	Functions that need to be provided for YAFFS
*/
int ynandif_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,const __u8 *data, yaffs_Spare *spare)
{
//slf021220a Begin Cleanup block driver interface
#if _WINCEOSVER >= 400
	if (dev)
#else
	if (devHandle)
#endif
//slf021220a end Cleanup block driver interface
	{
		ynandif_data writeData;
		int result;

		writeData.chunk = chunkInNAND;
		writeData.data = (__u8 *)data;
		writeData.spare = (char *)spare;
		
//slf021220a Begin Cleanup block driver interface
#if _WINCEOSVER >= 400
		if (!FSDMGR_DiskIoControl((HDSK)dev->genericDevice,
#else
		if (!DeviceIoControl(devHandle,
#endif
//slf021220a end Cleanup block driver interface
			 			     YNANDIF_WRITE,
						     &writeData,
						     sizeof(ynandif_data),
						     &result,
						     sizeof(result),
						     NULL,
							 NULL))
			return YAFFS_FAIL;

		return result;
	}

	return YAFFS_FAIL;
}

int ynandif_ReadChunkFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaffs_Spare *spare)
{
//slf021220a Begin Cleanup block driver interface
#if _WINCEOSVER >= 400
	if (dev)
#else
	if (devHandle)
#endif
//slf021220a end Cleanup block driver interface
	{
		ynandif_data readData;
		int result;

		readData.chunk = chunkInNAND;
		readData.data = data;
		readData.spare = (char *)spare;
		
//slf021220a Begin Cleanup block driver interface
#if _WINCEOSVER >= 400
		if (!FSDMGR_DiskIoControl((HDSK)dev->genericDevice,
#else
		if (!DeviceIoControl(devHandle,
#endif
//slf021220a end Cleanup block driver interface
			 			     YNANDIF_READ,
						     &readData,
						     sizeof(ynandif_data),
						     &result,
						     sizeof(result),
						     NULL,
							 NULL))
			return YAFFS_FAIL;

		return result;
	}

	return YAFFS_FAIL;
}

int ynandif_EraseBlockInNAND(yaffs_Device *dev, int blockNumber)
{
//slf021220a Begin Cleanup block driver interface
#if _WINCEOSVER >= 400
	if (dev)
#else
	if (devHandle)
#endif
//slf021220a end Cleanup block driver interface
	{
		int result;
		
//slf021220a Begin Cleanup block driver interface
#if _WINCEOSVER >= 400
		if (!FSDMGR_DiskIoControl((HDSK)dev->genericDevice,
#else
	if (!DeviceIoControl(devHandle,
#endif
//slf021220a end Cleanup block driver interface
			 			     YNANDIF_ERASE,
						     &blockNumber,
						     sizeof(int),
						     &result,
						     sizeof(result),
						     NULL,
							 NULL))
			return YAFFS_FAIL;

		return result;
	}

// if we return YAFFS_FAIL, then yaffs will retire this block & mark it bad, not exactly
// what we want to do by default.
	return YAFFS_OK;
}

int ynandif_InitialiseNAND(yaffs_Device *dev)
{

//slf021220a Begin Cleanup block driver interface
#if _WINCEOSVER < 400
// For Win'CE 4.0 FSDMGR instead of direct access.
	RETAILMSG(1, (L"ynandif_InitialiseNAND\r\n"));
	devHandle = CreateFile(L"YND1:",
						   GENERIC_READ|GENERIC_WRITE,
						   0,
						   NULL,
						   OPEN_EXISTING,
						   0,
						   0);

//slf021220d Begin CreateFile returns INVALID_HANDLE_VALUE not null fix.
	if (INVALID_HANDLE_VALUE == devHandle)
	{
		devHandle = NULL;
		return 0;
	}
//	if (!devHandle)
//		return 0;
//slf021220d end CreateFile returns INVALID_HANDLE_VALUE not null fix.

	RETAILMSG(1, (L"devhandle open\r\n"));
#endif
//slf021220a Begin Cleanup block driver interface

	RETAILMSG(1, (L"DeviceIo INIT\r\n"));
//slf021220a Begin Cleanup block driver interface
	if (dev)
	{
#if _WINCEOSVER >= 400
		if (!FSDMGR_DiskIoControl((HDSK)dev->genericDevice,
#else
		if (!DeviceIoControl(devHandle,
#endif
//slf021220a end Cleanup block driver interface
 						 YNANDIF_INIT,
						 NULL,
						 0,
						 NULL,
						 0,
						 NULL,
						 NULL))
			return 0;
//slf021220a Begin Cleanup block driver interface
	}
//slf021220a end Cleanup block driver interface

	if (dev)
	{
//slf021220a Begin Cleanup block driver interface
//		int nBlocks = ynandif_GetChipSize(0xFF) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
		int nBlocks = ynandif_GetChipSize(dev,0xFF) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
//slf021220a end Cleanup block driver interface
		dev->startBlock = 1;  // Don't use block 0
		dev->endBlock = nBlocks - 1;
	}

	return 1;
}

//slf021220a Begin Cleanup block driver interface
void ynandif_DeinitialiseNAND(yaffs_Device *dev)
{
	RETAILMSG(1, (L"ynandif_DeinitialiseNAND\r\n"));
#if _WINCEOSVER < 400
	if (devHandle)
	{
		CloseHandle(devHandle);
		devHandle = NULL;
	}
#endif
}
//slf021220a end Cleanup block driver interface

int ynandif_EraseAllBlocks(yaffs_Device *dev)
{
	int numBlocks, counter;
//slf021220a Begin Cleanup block driver interface
//	numBlocks = ynandif_GetChipSize(0xFF) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
	numBlocks = ynandif_GetChipSize(dev,0xFF) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
//slf021220a end Cleanup block driver interface
	for (counter = 0; counter < numBlocks; counter++)
	{
		ynandif_EraseBlockInNAND(dev, counter);
	}
	return YAFFS_OK;
}

//slf021220a Begin Cleanup block driver interface
//int ynandif_GetChipSize(unsigned char chipNumber)
int ynandif_GetChipSize(yaffs_Device *dev, unsigned char chipNumber)
//slf021220a end Cleanup block driver interface
{
	int ret = 0;
	RETAILMSG(1, (L"DeviceIo GETSIZE\r\n"));
//slf021220a Begin Cleanup block driver interface
#if _WINCEOSVER >= 400
	if (dev)
#else
	if (devHandle)
#endif
//slf021220a end Cleanup block driver interface
	{
		RETAILMSG(1, (L"DeviceIo GETSIZE - getting ret\r\n"));
//slf021220a Begin Cleanup block driver interface
#if _WINCEOSVER >= 400
		FSDMGR_DiskIoControl((HDSK)dev->genericDevice,
#else
		DeviceIoControl(devHandle,
#endif
//slf021220a end Cleanup block driver interface
					YNANDIF_GETSIZE,
					NULL,
					0,
					&ret,
					sizeof(ret),
					NULL,
					NULL);
	}
	RETAILMSG(1, (L"DeviceIo GETSIZE ret %X\r\n", ret));



	return ret;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777精品伊人久久久大香线蕉的| 国产精品国产精品国产专区不蜜 | 麻豆精品在线看| 国产精品91xxx| 5月丁香婷婷综合| 18成人在线视频| 精品一区二区三区香蕉蜜桃| 91成人网在线| 中文字幕一区二区三区在线观看| 久久超碰97人人做人人爱| 色哟哟亚洲精品| 国产精品国产三级国产aⅴ中文| 日韩精品欧美成人高清一区二区| 94-欧美-setu| 欧美激情一区二区在线| 韩日精品视频一区| 欧美日本不卡视频| 亚洲伊人色欲综合网| 97久久超碰国产精品电影| 国产精品丝袜黑色高跟| 国产自产高清不卡| 欧美一级黄色录像| 日韩黄色免费电影| 91精品国产色综合久久不卡蜜臀 | 成人av影院在线| 亚洲精品在线免费观看视频| 日本免费在线视频不卡一不卡二| 色av成人天堂桃色av| 亚洲色图.com| 在线观看亚洲成人| 亚洲一区在线观看网站| 日本久久电影网| 亚洲自拍都市欧美小说| 91福利小视频| 亚洲高清免费视频| 欧美日韩色一区| 午夜精品久久久久久久久久久| 欧美中文字幕一区二区三区| 亚洲高清视频的网址| 欧美午夜精品久久久| 亚洲成人激情社区| 日韩午夜精品视频| 国产一区 二区| 国产精品五月天| 色综合天天天天做夜夜夜夜做| 亚洲乱码国产乱码精品精小说| 色婷婷亚洲综合| 日韩专区一卡二卡| 欧美r级在线观看| 国产精品小仙女| 亚洲色图色小说| 欧美日韩一区国产| 国内精品久久久久影院一蜜桃| 日本一区二区综合亚洲| 日本久久精品电影| 蜜桃av一区二区| 国产喂奶挤奶一区二区三区| 92国产精品观看| 婷婷开心久久网| 久久久777精品电影网影网 | 91国产精品成人| 日韩黄色一级片| 国产女主播视频一区二区| 色综合视频一区二区三区高清| 亚洲一区视频在线| 26uuu久久综合| 色婷婷一区二区三区四区| 热久久免费视频| 国产精品久久午夜夜伦鲁鲁| 欧美久久久久久久久| 国产一区二区精品久久91| 亚洲精品高清视频在线观看| 91精品国产品国语在线不卡| 成人精品亚洲人成在线| 日韩综合一区二区| 自拍av一区二区三区| 日韩欧美国产一区二区三区 | 免费精品视频在线| 国产精品乱码久久久久久| 在线不卡免费欧美| 9i看片成人免费高清| 免费观看一级特黄欧美大片| 亚洲欧洲av在线| 日韩欧美区一区二| 欧美日韩一区二区三区不卡| 福利一区二区在线观看| 日本欧美一区二区在线观看| 亚洲人成小说网站色在线| 精品国偷自产国产一区| 欧美系列日韩一区| 成人蜜臀av电影| 国产在线一区观看| 青青草97国产精品免费观看 | 91福利精品视频| 成人av网在线| 国产一区二区三区| 奇米一区二区三区| 亚洲h在线观看| 亚洲欧美日韩小说| 国产欧美日韩视频在线观看| 欧美电影免费提供在线观看| 欧美日韩亚洲丝袜制服| 91麻豆.com| av不卡在线播放| 成人av在线一区二区| 丰满亚洲少妇av| 国产精品一二三区在线| 极品少妇xxxx偷拍精品少妇| 久久不见久久见免费视频1| 日韩电影一区二区三区| 亚洲国产视频一区二区| 亚洲一二三四区| 亚洲一区二区三区四区的| 亚洲手机成人高清视频| 亚洲欧洲精品一区二区三区不卡| 日本一区二区三区四区在线视频| 久久久久国产一区二区三区四区| 久久综合九色综合久久久精品综合| 欧美一区二区高清| 日韩欧美一区二区久久婷婷| 日韩精品一区二区在线观看| 久久综合九色综合97_久久久 | 欧美精品第1页| 91麻豆精品国产自产在线观看一区 | 欧美视频在线观看一区二区| 色综合 综合色| 在线观看日产精品| 欧美日韩在线免费视频| 91精品综合久久久久久| 日韩一级片在线观看| 久久嫩草精品久久久精品| 国产亚洲精品bt天堂精选| 国产精品婷婷午夜在线观看| 亚洲日本护士毛茸茸| 亚洲成人一区二区在线观看| 日本色综合中文字幕| 国产一区二区三区综合 | 精品一区二区影视| 国产乱码精品1区2区3区| 成人18精品视频| 欧美色图免费看| 欧美电影免费观看高清完整版在线| 精品国产一区二区三区久久影院| 中文字幕欧美区| 亚洲国产精品久久艾草纯爱| 久久99久久99| 色综合天天综合在线视频| 欧美精品自拍偷拍动漫精品| 欧美成人a∨高清免费观看| 中文字幕在线不卡| 日本特黄久久久高潮| av在线这里只有精品| 欧美乱妇15p| 国产精品美女一区二区三区| 午夜成人免费视频| 高清不卡在线观看| 91精品国产黑色紧身裤美女| 中文字幕乱码日本亚洲一区二区| 亚洲一区二区三区视频在线播放| 国产自产2019最新不卡| 在线欧美一区二区| 国产婷婷精品av在线| 亚洲成va人在线观看| 福利电影一区二区| 欧美一区二区三区在| 亚洲欧美日韩一区二区| 国产真实乱子伦精品视频| 在线视频中文字幕一区二区| 久久精品视频一区二区三区| 午夜影院久久久| 91在线国产观看| 精品处破学生在线二十三| 亚洲成人av在线电影| 99国产精品99久久久久久| 久久综合久久99| 男人的天堂久久精品| 欧美怡红院视频| 国产精品美日韩| 国产精品一品二品| 日韩免费视频一区| 日韩专区中文字幕一区二区| 日本韩国视频一区二区| 中文字幕+乱码+中文字幕一区| 久久精品国产一区二区| 欧美精品第1页| 天天av天天翘天天综合网色鬼国产 | 国产一区二区影院| 欧美电视剧免费观看| 日日摸夜夜添夜夜添亚洲女人| 91极品视觉盛宴| 亚洲精品乱码久久久久久日本蜜臀| 丁香桃色午夜亚洲一区二区三区| 欧美一区二区三区在线看| 午夜av一区二区三区| 欧美性极品少妇| 亚洲午夜视频在线观看| 91黄色激情网站| 亚洲午夜日本在线观看| 欧美三级日本三级少妇99| 亚洲一卡二卡三卡四卡无卡久久|