projects
/
yaffs
/
.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
*** empty log message ***
[yaffs/.git]
/
wince
/
ynandif.c
diff --git
a/wince/ynandif.c
b/wince/ynandif.c
index 5e982b502ae7755c9ca19047d5ccf5a5a3eeaadb..2812549ac37b42dcf8e9a75faee77f4fc81a26a1 100644
(file)
--- a/
wince/ynandif.c
+++ b/
wince/ynandif.c
@@
-2,9
+2,10
@@
* YAFFS: Yet another FFS. A NAND-flash specific file system.
\r
* ynandif.c: NAND interface functions for the WinCE port of YAFFS.
\r
*
\r
* YAFFS: Yet another FFS. A NAND-flash specific file system.
\r
* ynandif.c: NAND interface functions for the WinCE port of YAFFS.
\r
*
\r
- * Copyright (C) 2002 Trimble Navigation Ltd.
\r
+ * Copyright (C) 2002
-2003
Trimble Navigation Ltd.
\r
*
\r
* Created by Brad Beveridge <brad.beveridge@trimble.co.nz>
\r
*
\r
* Created by Brad Beveridge <brad.beveridge@trimble.co.nz>
\r
+ * Modified for CE 4.x by Steve Fogle <stevef@atworkcom.com>
\r
*
\r
* This program is free software; you can redistribute it and/or modify
\r
* it under the terms of the GNU General Public License version 2 as
\r
*
\r
* This program is free software; you can redistribute it and/or modify
\r
* it under the terms of the GNU General Public License version 2 as
\r
@@
-18,19
+19,31
@@
* if not, write to the Free Software Foundation, Inc.,
\r
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\r
*
\r
* if not, write to the Free Software Foundation, Inc.,
\r
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\r
*
\r
- * $Id: ynandif.c,v 1.
1 2002-11-08 07:30:00
charles Exp $
\r
+ * $Id: ynandif.c,v 1.
2 2003-01-31 00:52:53
charles Exp $
\r
*/
\r
*/
\r
-#include "ynandif.h"
\r
#include <windows.h>
\r
#include <windows.h>
\r
+#include <fsdmgr.h>
\r
+#include "ynandif.h"
\r
\r
\r
+//slf021220a Begin Cleanup block driver interface
\r
+#if _WINCEOSVER < 400
\r
+// For Win'CE 4.0 FSDMGR instead of direct access.
\r
HANDLE devHandle = 0;
\r
HANDLE devHandle = 0;
\r
+#endif
\r
+//slf021220a end Cleanup block driver interface
\r
\r
/*
\r
* Functions that need to be provided for YAFFS
\r
*/
\r
int ynandif_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,const __u8 *data, yaffs_Spare *spare)
\r
{
\r
\r
/*
\r
* Functions that need to be provided for YAFFS
\r
*/
\r
int ynandif_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,const __u8 *data, yaffs_Spare *spare)
\r
{
\r
+//slf021220a Begin Cleanup block driver interface
\r
+#if _WINCEOSVER >= 400
\r
+ if (dev)
\r
+#else
\r
if (devHandle)
\r
if (devHandle)
\r
+#endif
\r
+//slf021220a end Cleanup block driver interface
\r
{
\r
ynandif_data writeData;
\r
int result;
\r
{
\r
ynandif_data writeData;
\r
int result;
\r
@@
-39,7
+52,13
@@
int ynandif_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,const __u8 *data
writeData.data = (__u8 *)data;
\r
writeData.spare = (char *)spare;
\r
\r
writeData.data = (__u8 *)data;
\r
writeData.spare = (char *)spare;
\r
\r
+//slf021220a Begin Cleanup block driver interface
\r
+#if _WINCEOSVER >= 400
\r
+ if (!FSDMGR_DiskIoControl((HDSK)dev->genericDevice,
\r
+#else
\r
if (!DeviceIoControl(devHandle,
\r
if (!DeviceIoControl(devHandle,
\r
+#endif
\r
+//slf021220a end Cleanup block driver interface
\r
YNANDIF_WRITE,
\r
&writeData,
\r
sizeof(ynandif_data),
\r
YNANDIF_WRITE,
\r
&writeData,
\r
sizeof(ynandif_data),
\r
@@
-57,7
+76,13
@@
int ynandif_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,const __u8 *data
\r
int ynandif_ReadChunkFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaffs_Spare *spare)
\r
{
\r
\r
int ynandif_ReadChunkFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaffs_Spare *spare)
\r
{
\r
+//slf021220a Begin Cleanup block driver interface
\r
+#if _WINCEOSVER >= 400
\r
+ if (dev)
\r
+#else
\r
if (devHandle)
\r
if (devHandle)
\r
+#endif
\r
+//slf021220a end Cleanup block driver interface
\r
{
\r
ynandif_data readData;
\r
int result;
\r
{
\r
ynandif_data readData;
\r
int result;
\r
@@
-66,7
+91,13
@@
int ynandif_ReadChunkFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaf
readData.data = data;
\r
readData.spare = (char *)spare;
\r
\r
readData.data = data;
\r
readData.spare = (char *)spare;
\r
\r
+//slf021220a Begin Cleanup block driver interface
\r
+#if _WINCEOSVER >= 400
\r
+ if (!FSDMGR_DiskIoControl((HDSK)dev->genericDevice,
\r
+#else
\r
if (!DeviceIoControl(devHandle,
\r
if (!DeviceIoControl(devHandle,
\r
+#endif
\r
+//slf021220a end Cleanup block driver interface
\r
YNANDIF_READ,
\r
&readData,
\r
sizeof(ynandif_data),
\r
YNANDIF_READ,
\r
&readData,
\r
sizeof(ynandif_data),
\r
@@
-84,11
+115,23
@@
int ynandif_ReadChunkFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaf
\r
int ynandif_EraseBlockInNAND(yaffs_Device *dev, int blockNumber)
\r
{
\r
\r
int ynandif_EraseBlockInNAND(yaffs_Device *dev, int blockNumber)
\r
{
\r
+//slf021220a Begin Cleanup block driver interface
\r
+#if _WINCEOSVER >= 400
\r
+ if (dev)
\r
+#else
\r
if (devHandle)
\r
if (devHandle)
\r
+#endif
\r
+//slf021220a end Cleanup block driver interface
\r
{
\r
int result;
\r
\r
{
\r
int result;
\r
\r
- if (!DeviceIoControl(devHandle,
\r
+//slf021220a Begin Cleanup block driver interface
\r
+#if _WINCEOSVER >= 400
\r
+ if (!FSDMGR_DiskIoControl((HDSK)dev->genericDevice,
\r
+#else
\r
+ if (!DeviceIoControl(devHandle,
\r
+#endif
\r
+//slf021220a end Cleanup block driver interface
\r
YNANDIF_ERASE,
\r
&blockNumber,
\r
sizeof(int),
\r
YNANDIF_ERASE,
\r
&blockNumber,
\r
sizeof(int),
\r
@@
-108,6
+151,10
@@
int ynandif_EraseBlockInNAND(yaffs_Device *dev, int blockNumber)
\r
int ynandif_InitialiseNAND(yaffs_Device *dev)
\r
{
\r
\r
int ynandif_InitialiseNAND(yaffs_Device *dev)
\r
{
\r
+
\r
+//slf021220a Begin Cleanup block driver interface
\r
+#if _WINCEOSVER < 400
\r
+// For Win'CE 4.0 FSDMGR instead of direct access.
\r
RETAILMSG(1, (L"ynandif_InitialiseNAND\r\n"));
\r
devHandle = CreateFile(L"YND1:",
\r
GENERIC_READ|GENERIC_WRITE,
\r
RETAILMSG(1, (L"ynandif_InitialiseNAND\r\n"));
\r
devHandle = CreateFile(L"YND1:",
\r
GENERIC_READ|GENERIC_WRITE,
\r
@@
-117,13
+164,30
@@
int ynandif_InitialiseNAND(yaffs_Device *dev)
0,
\r
0);
\r
\r
0,
\r
0);
\r
\r
- if (!devHandle)
\r
+//slf021220d Begin CreateFile returns INVALID_HANDLE_VALUE not null fix.
\r
+ if (INVALID_HANDLE_VALUE == devHandle)
\r
+ {
\r
+ devHandle = NULL;
\r
return 0;
\r
return 0;
\r
+ }
\r
+// if (!devHandle)
\r
+// return 0;
\r
+//slf021220d end CreateFile returns INVALID_HANDLE_VALUE not null fix.
\r
\r
RETAILMSG(1, (L"devhandle open\r\n"));
\r
\r
RETAILMSG(1, (L"devhandle open\r\n"));
\r
+#endif
\r
+//slf021220a Begin Cleanup block driver interface
\r
\r
RETAILMSG(1, (L"DeviceIo INIT\r\n"));
\r
\r
RETAILMSG(1, (L"DeviceIo INIT\r\n"));
\r
- if (!DeviceIoControl(devHandle,
\r
+//slf021220a Begin Cleanup block driver interface
\r
+ if (dev)
\r
+ {
\r
+#if _WINCEOSVER >= 400
\r
+ if (!FSDMGR_DiskIoControl((HDSK)dev->genericDevice,
\r
+#else
\r
+ if (!DeviceIoControl(devHandle,
\r
+#endif
\r
+//slf021220a end Cleanup block driver interface
\r
YNANDIF_INIT,
\r
NULL,
\r
0,
\r
YNANDIF_INIT,
\r
NULL,
\r
0,
\r
@@
-131,12
+195,17
@@
int ynandif_InitialiseNAND(yaffs_Device *dev)
0,
\r
NULL,
\r
NULL))
\r
0,
\r
NULL,
\r
NULL))
\r
- return 0;
\r
-
\r
+ return 0;
\r
+//slf021220a Begin Cleanup block driver interface
\r
+ }
\r
+//slf021220a end Cleanup block driver interface
\r
\r
if (dev)
\r
{
\r
\r
if (dev)
\r
{
\r
- int nBlocks = ynandif_GetChipSize(0xFF) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
\r
+//slf021220a Begin Cleanup block driver interface
\r
+// int nBlocks = ynandif_GetChipSize(0xFF) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
\r
+ int nBlocks = ynandif_GetChipSize(dev,0xFF) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
\r
+//slf021220a end Cleanup block driver interface
\r
dev->startBlock = 1; // Don't use block 0
\r
dev->endBlock = nBlocks - 1;
\r
}
\r
dev->startBlock = 1; // Don't use block 0
\r
dev->endBlock = nBlocks - 1;
\r
}
\r
@@
-144,10
+213,27
@@
int ynandif_InitialiseNAND(yaffs_Device *dev)
return 1;
\r
}
\r
\r
return 1;
\r
}
\r
\r
+//slf021220a Begin Cleanup block driver interface
\r
+void ynandif_DeinitialiseNAND(yaffs_Device *dev)
\r
+{
\r
+ RETAILMSG(1, (L"ynandif_DeinitialiseNAND\r\n"));
\r
+#if _WINCEOSVER < 400
\r
+ if (devHandle)
\r
+ {
\r
+ CloseHandle(devHandle);
\r
+ devHandle = NULL;
\r
+ }
\r
+#endif
\r
+}
\r
+//slf021220a end Cleanup block driver interface
\r
+
\r
int ynandif_EraseAllBlocks(yaffs_Device *dev)
\r
{
\r
int numBlocks, counter;
\r
int ynandif_EraseAllBlocks(yaffs_Device *dev)
\r
{
\r
int numBlocks, counter;
\r
- numBlocks = ynandif_GetChipSize(0xFF) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
\r
+//slf021220a Begin Cleanup block driver interface
\r
+// numBlocks = ynandif_GetChipSize(0xFF) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
\r
+ numBlocks = ynandif_GetChipSize(dev,0xFF) / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
\r
+//slf021220a end Cleanup block driver interface
\r
for (counter = 0; counter < numBlocks; counter++)
\r
{
\r
ynandif_EraseBlockInNAND(dev, counter);
\r
for (counter = 0; counter < numBlocks; counter++)
\r
{
\r
ynandif_EraseBlockInNAND(dev, counter);
\r
@@
-155,14
+241,29
@@
int ynandif_EraseAllBlocks(yaffs_Device *dev)
return YAFFS_OK;
\r
}
\r
\r
return YAFFS_OK;
\r
}
\r
\r
-int ynandif_GetChipSize(unsigned char chipNumber)
\r
+//slf021220a Begin Cleanup block driver interface
\r
+//int ynandif_GetChipSize(unsigned char chipNumber)
\r
+int ynandif_GetChipSize(yaffs_Device *dev, unsigned char chipNumber)
\r
+//slf021220a end Cleanup block driver interface
\r
{
\r
int ret = 0;
\r
RETAILMSG(1, (L"DeviceIo GETSIZE\r\n"));
\r
{
\r
int ret = 0;
\r
RETAILMSG(1, (L"DeviceIo GETSIZE\r\n"));
\r
+//slf021220a Begin Cleanup block driver interface
\r
+#if _WINCEOSVER >= 400
\r
+ if (dev)
\r
+#else
\r
if (devHandle)
\r
if (devHandle)
\r
+#endif
\r
+//slf021220a end Cleanup block driver interface
\r
{
\r
RETAILMSG(1, (L"DeviceIo GETSIZE - getting ret\r\n"));
\r
{
\r
RETAILMSG(1, (L"DeviceIo GETSIZE - getting ret\r\n"));
\r
+//slf021220a Begin Cleanup block driver interface
\r
+#if _WINCEOSVER >= 400
\r
+ FSDMGR_DiskIoControl((HDSK)dev->genericDevice,
\r
+#else
\r
DeviceIoControl(devHandle,
\r
DeviceIoControl(devHandle,
\r
+#endif
\r
+//slf021220a end Cleanup block driver interface
\r
YNANDIF_GETSIZE,
\r
NULL,
\r
0,
\r
YNANDIF_GETSIZE,
\r
NULL,
\r
0,
\r