* it under the terms of the GNU Lesser General Public License version 2.1 as
* published by the Free Software Foundation.
*
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ *
+ * $Id: yaffs_guts.h,v 1.11 2002-11-08 07:19:42 charles Exp $
*/
#ifndef __YAFFS_GUTS_H__
#define YAFFS_NOBJECT_BUCKETS 256
-#define YAFFS_RESERVED_BLOCKS 5
+#define YAFFS_RESERVED_BLOCKS 8
#define YAFFS_OBJECT_SPACE 0x40000
-#define YAFFS_MAX_NAME_LENGTH 255
+#define YAFFS_MAX_NAME_LENGTH 255\r
+#define YAFFS_SHORT_NAME_LENGTH 15
#define YAFFS_MAX_ALIAS_LENGTH 159
#define YAFFS_N_CACHE_CHUNKS 10
-#ifdef WIN32
+#ifdef CONFIG_YAFFS_WINCE
// Force the short operation cache on for WinCE
// ChunkCache is used for short read/write operations.
typedef struct
{
- int objectId;
+ struct yaffs_ObjectStruct *object;
int chunkId;
int lastUse;
int dirty;
// Apply to everything
int parentObjectId;
- __u16 sum; // checksum of name
+ __u16 sum__NoLongerUsed; // checksum of name. Calc this off the name to prevent inconsistencies
char name[YAFFS_MAX_NAME_LENGTH + 1];
// Thes following apply to directories, files, symlinks - not hard links
__u32 st_mode; // protection
+\r
+#ifdef CONFIG_YAFFS_WINCE\r
+ __u32 notForWinCE[5];\r
+#else
__u32 st_uid; // user ID of owner
__u32 st_gid; // group ID of owner
__u32 st_atime; // time of last access
__u32 st_mtime; // time of last modification
__u32 st_ctime; // time of last change
-
+#endif\r
+\r
// File size applies to files only
int fileSize;
char alias[YAFFS_MAX_ALIAS_LENGTH + 1];
__u32 st_rdev; // device stuff for block and char devices (maj/min)
- // Roowm to grow...
+
+#ifdef CONFIG_YAFFS_WINCE
+ __u32 win_ctime[2];
+ __u32 win_atime[2];
+ __u32 win_mtime[2];
+ __u32 roomToGrow[6];
+#else
__u32 roomToGrow[12];
+#endif
} yaffs_ObjectHeader;
{
__u32 fileSize;
__u32 scannedFileSize;
- __u32 topLevel;
+ int topLevel;
yaffs_Tnode *top;
} yaffs_FileStructure;
__u32 objectId; // the object id value
- __u32 st_mode; // protection
+ __u32 st_mode; // protection\r
+\r
+#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM\r
+ char shortName[YAFFS_SHORT_NAME_LENGTH+1];\r
+#endif\r
+\r
+#ifdef CONFIG_YAFFS_WINCE\r
+ __u32 inUse;\r
+\r
+ __u32 win_ctime[2];\r
+ __u32 win_mtime[2];\r
+ __u32 win_atime[2];\r
+#else
__u32 st_uid; // user ID of owner
__u32 st_gid; // group ID of owner
__u32 st_atime; // time of last access
__u32 st_mtime; // time of last modification
__u32 st_ctime; // time of last change
__u32 st_rdev; // device stuff for block and char devices
+#endif\r
+\r
+\r
-#ifdef WIN32
- __u32 inUse;
-#endif
#ifdef __KERNEL__
struct inode *myInode;
typedef struct
{
struct list_head list;
- __u32 count;
+ int count;
} yaffs_ObjectBucket;
struct yaffs_DeviceStruct
{
// Entry parameters set up way early. Yaffs sets up the rest.
- // __u32 nBlocks; // Size of whole device in blocks
- __u32 startBlock; // Start block we're allowed to use
- __u32 endBlock; // End block we're allowed to use
+ int startBlock; // Start block we're allowed to use
+ int endBlock; // End block we're allowed to use
__u16 chunkGroupBits; // 0 for devices <= 32MB. else log2(nchunks) - 16
__u16 chunkGroupSize; // == 2^^chunkGroupBits
int garbageCollections;
int nRetriedWrites;
int nRetiredBlocks;
+ int eccFixed;
+ int eccUnfixed;
+ int tagsEccFixed;
+ int tagsEccUnfixed;
yaffs_Object *rootDir;
yaffs_Object *lostNFoundDir;
// Stuff for background deletion and unlinked files.
yaffs_Object *unlinkedDir; // Directory where unlinked and deleted files live.
yaffs_Object *unlinkedDeletion; // Current file being background deleted.
- int nDeletedFiles; // Count of files awaiting deletion;
-
+ int nDeletedFiles; // Count of files awaiting deletion;
+ int nUnlinkedFiles; // Count of unlinked files.
+ int nBackgroundDeletions; // Count of background deletions.
};
yaffs_Object *yaffs_FindObjectByName(yaffs_Object *theDir,const char *name);
int yaffs_ApplyToDirectoryChildren(yaffs_Object *theDir,int (*fn)(yaffs_Object *));
-yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device *dev,int number);
+yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device *dev,__u32 number);
// Link operations
yaffs_Object *yaffs_Link(yaffs_Object *parent, const char *name, yaffs_Object *equivalentObject);
// Special directories
yaffs_Object *yaffs_Root(yaffs_Device *dev);
-yaffs_Object *yaffs_LostNFound(yaffs_Device *dev);
+yaffs_Object *yaffs_LostNFound(yaffs_Device *dev);\r
+\r
+#ifdef CONFIG_YAFFS_WINCE\r
+// CONFIG_YAFFS_WINCE special stuff\r
+void yfsd_WinFileTimeNow(__u32 target[2]);\r
+#endif
// Debug dump