📄 yaffsfsd.c
字号:
/* * YAFFS: Yet another FFS. A NAND-flash specific file system. * yaffsfsd.c: FSD interface funtions for WinCE. * * Copyright (C) 2002 Trimble Navigation Ltd. * * Created by Charles Manning <charles.manning@trimble.co.nz> * * 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. * * Acknowledgements: * Various clean-ups and WinCE4 support by Steve Fogle and Lynn Winter * $Id: yaffsfsd.c,v 1.4 2003/01/31 03:30:33 charles Exp $ */#include <windows.h>#include <extfile.h>#include <yaffs_guts.h>#include <ynandif.h>//slf021104b begin#include <diskio.h>//slf021104b end#define MAX_WIN_FILE 200#define YFSD_NAME_LENGTH 128#define YFSD_FULL_PATH_NAME_SIZE 500#define YFSD_DISK_NAME L"Disk"#define YFSD_BOOT_NAME L"Boot"#define PARTITION_START_NUMBER (1280) // if this is defined the there will be a constant message box raised to display status//#define MSGBOX_DISPLAY //#define MSGSTATE 1#define MSGSTATE 0//#define DISABLE_BOOT_PARTITION//slf021105a begin// Define DO_PARTITION_TABLE to cause the partition table // information to be retrieved from the block driver.// Can define this in your sources file.//#define DO_PARTITION_TABLE// How many partitions the disk might have. 2 gives // space for the "Disk" and "Boot" partitions.#define MAXPARTITIONS (2)//slf021105a end//unsigned yaffs_traceMask=0xffffffff;unsigned yaffs_traceMask=0;typedef struct{ yaffs_Device dev; DWORD hdsk; DWORD mgrVolume; // The volume id from the manager issed when we registered it - it is an HVOL BOOL isMounted; BOOL configured;// DWORD guard0[100];// DWORD guard1[100]; SHELLFILECHANGEFUNC_t shellFunction; PWSTR volName;} yfsd_Volume;typedef struct { yaffs_Object *obj; DWORD offset; BOOL isopen; BOOL dirty; WCHAR *fullName; yfsd_Volume *myVolume; BOOL writePermitted; BOOL readPermitted; BOOL shareRead; BOOL shareWrite;} yfsd_WinFile;struct yfsd_FoundObjectStruct{ yaffs_Object *obj; struct yfsd_FoundObjectStruct *next;};typedef struct yfsd_FoundObjectStruct yaffs_FoundObject;typedef struct { yaffs_Object *dir; char pattern[YFSD_NAME_LENGTH+1]; yaffs_FoundObject *foundObjects;} yfsd_WinFind;#define PSEARCH yfsd_WinFind*#define PVOLUME yfsd_Volume*#define PFILE yfsd_WinFile*#define FSD_API YFSD#include <fsdmgr.h>//slf021105a begin//static yfsd_Volume disk_volume;//static yfsd_Volume boot_volume;static yfsd_Volume * disk_volumes[MAXPARTITIONS];//slf021105a end;static CRITICAL_SECTION yaffsLock;static CRITICAL_SECTION winFileLock;static int yaffsLockInited = 0;static yfsd_WinFile yfsd_winFile[MAX_WIN_FILE];#if 0static yfsd_SetGuards(void){ int i; for(i = 0; i < 100; i++) { yfsd_volume.guard0[i] = yfsd_volume.guard1[i] = i; }}static void yfsd_CheckGuards(void){ int i; int found; for(i = found = 0; i < 100 && !found; i++) { if(yfsd_volume.guard0[i] != i) { RETAILMSG (MSGSTATE, (L"YAFFS:: guard 0 %d brocken\r\n",i)); found = 1; } if(yfsd_volume.guard1[i] != i) { RETAILMSG (MSGSTATE, (L"YAFFS:: guard 0 %d brocken\r\n",i)); found = 1; } }}#endif#ifdef MSGBOX_DISPLAYDWORD WINAPI yfsd_MessageThread(LPVOID param){ yaffs_Device *dev = (yaffs_Device *)param; TCHAR dataBuffer[1000]; Sleep(10000); // note : if the device gets free'd from under us, we will cause an exception in the loop while (1) { wsprintf(dataBuffer, L"nShortOpCaches %i\r\n" L"nErasedBlocks %i\r\n" L"allocationBlock %i\r\n" L"allocationPage %i\r\n" L"garbageCollectionRequired %i\r\n" L"nRetiredBlocks %i\r\n" L"cacheHits %i\r\n" L"eccFixed %i\r\n" L"eccUnfixed %i\r\n" L"tagsEccFixed %i\r\n" L"tagsEccUnfixed %i\r\n", dev->nShortOpCaches, dev->nErasedBlocks, dev->allocationBlock, dev->allocationPage, dev->garbageCollectionRequired, dev->nRetiredBlocks, dev->cacheHits, dev->eccFixed, dev->eccUnfixed, dev->tagsEccFixed, dev->tagsEccUnfixed); MessageBox(NULL, dataBuffer, L"YAFFS PROC INFO", MB_OK); Sleep(1); }}#endifvoid yfsd_LockWinFiles(void){ //RETAILMSG (MSGSTATE, (L"YAFFS::LockWinfiles\r\n")); EnterCriticalSection(&winFileLock);}void yfsd_UnlockWinFiles(void){ //RETAILMSG (MSGSTATE, (L"YAFFS::UnlockWinFiles\r\n")); LeaveCriticalSection(&winFileLock);}int lockwaits;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i; RETAILMSG (MSGSTATE, (L"YAFFS::InitWinFiles\r\n"));s;void yfsd_LockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::LockYAFFS %d ",lockwaits)); lockwaits++; EnterCriticalSection(&yaffsLock); //RETAILMSG (MSGSTATE, (L" locked\r\n"));}void yfsd_UnlockYAFFS(void){ //yfsd_CheckGuards(); //RETAILMSG (MSGSTATE, (L"YAFFS::UnLockYAFFS ")); LeaveCriticalSection(&yaffsLock); lockwaits--; //RETAILMSG (MSGSTATE, (L" unlocked\r\n"));}void yfsd_InitialiseWinFiles(void){ int i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -