xref: /OK3568_Linux_fs/u-boot/fs/yaffs2/yaffsfs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2002-2011 Aleph One Ltd.
5*4882a593Smuzhiyun  *   for Toby Churchill Ltd and Brightstar Engineering
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Created by Charles Manning <charles@aleph1.co.uk>
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify
10*4882a593Smuzhiyun  * it under the terms of the GNU Lesser General Public License version 2.1 as
11*4882a593Smuzhiyun  * published by the Free Software Foundation.
12*4882a593Smuzhiyun  *
13*4882a593Smuzhiyun  * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
14*4882a593Smuzhiyun  */
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /*
17*4882a593Smuzhiyun  * Header file for using yaffs in an application via
18*4882a593Smuzhiyun  * a direct interface.
19*4882a593Smuzhiyun  */
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #ifndef __YAFFSFS_H__
23*4882a593Smuzhiyun #define __YAFFSFS_H__
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #include "yaffscfg.h"
26*4882a593Smuzhiyun #include "yportenv.h"
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #ifndef NAME_MAX
30*4882a593Smuzhiyun #define NAME_MAX	256
31*4882a593Smuzhiyun #endif
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #define YAFFS_MAX_FILE_SIZE (0x800000000LL - 1)
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun struct yaffs_dirent {
37*4882a593Smuzhiyun 	long d_ino;			/* inode number */
38*4882a593Smuzhiyun 	off_t d_off;			/* offset to this dirent */
39*4882a593Smuzhiyun 	unsigned short d_reclen;	/* length of this dirent */
40*4882a593Smuzhiyun 	YUCHAR d_type;			/* type of this record */
41*4882a593Smuzhiyun 	YCHAR d_name[NAME_MAX+1];	/* file name (null-terminated) */
42*4882a593Smuzhiyun 	unsigned d_dont_use;		/* debug: not for public consumption */
43*4882a593Smuzhiyun };
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun typedef struct opaque_structure yaffs_DIR;
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun struct yaffs_stat {
50*4882a593Smuzhiyun 	int		st_dev;		/* device */
51*4882a593Smuzhiyun 	int		st_ino;		/* inode */
52*4882a593Smuzhiyun 	unsigned	st_mode;	/* protection */
53*4882a593Smuzhiyun 	int		st_nlink;	/* number of hard links */
54*4882a593Smuzhiyun 	int		st_uid;		/* user ID of owner */
55*4882a593Smuzhiyun 	int		st_gid;		/* group ID of owner */
56*4882a593Smuzhiyun 	unsigned	st_rdev;	/* device type (if inode device) */
57*4882a593Smuzhiyun 	loff_t		st_size;	/* total size, in bytes */
58*4882a593Smuzhiyun 	unsigned long	st_blksize;	/* blocksize for filesystem I/O */
59*4882a593Smuzhiyun 	unsigned long	st_blocks;	/* number of blocks allocated */
60*4882a593Smuzhiyun #ifdef CONFIG_YAFFS_WINCE
61*4882a593Smuzhiyun 	/* Special 64-bit times for WinCE */
62*4882a593Smuzhiyun 	unsigned long	yst_wince_atime[2];
63*4882a593Smuzhiyun 	unsigned long	yst_wince_mtime[2];
64*4882a593Smuzhiyun 	unsigned long	yst_wince_ctime[2];
65*4882a593Smuzhiyun #else
66*4882a593Smuzhiyun 	unsigned long	yst_atime;	/* time of last access */
67*4882a593Smuzhiyun 	unsigned long	yst_mtime;	/* time of last modification */
68*4882a593Smuzhiyun 	unsigned long	yst_ctime;	/* time of last change */
69*4882a593Smuzhiyun #endif
70*4882a593Smuzhiyun };
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun struct yaffs_utimbuf {
74*4882a593Smuzhiyun 	unsigned long actime;
75*4882a593Smuzhiyun 	unsigned long modtime;
76*4882a593Smuzhiyun };
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun int yaffs_open(const YCHAR *path, int oflag, int mode) ;
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun int yaffs_close(int fd) ;
82*4882a593Smuzhiyun int yaffs_fsync(int fd) ;
83*4882a593Smuzhiyun int yaffs_fdatasync(int fd) ;
84*4882a593Smuzhiyun int yaffs_flush(int fd) ; /* same as yaffs_fsync() */
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun int yaffs_access(const YCHAR *path, int amode);
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun int yaffs_dup(int fd);
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun int yaffs_read(int fd, void *buf, unsigned int nbyte) ;
91*4882a593Smuzhiyun int yaffs_write(int fd, const void *buf, unsigned int nbyte) ;
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun int yaffs_pread(int fd, void *buf, unsigned int nbyte, loff_t offset);
94*4882a593Smuzhiyun int yaffs_pwrite(int fd, const void *buf, unsigned int nbyte, loff_t offset);
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun loff_t yaffs_lseek(int fd, loff_t offset, int whence) ;
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun int yaffs_truncate(const YCHAR *path, loff_t new_size);
99*4882a593Smuzhiyun int yaffs_ftruncate(int fd, loff_t new_size);
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun int yaffs_unlink(const YCHAR *path) ;
102*4882a593Smuzhiyun int yaffs_rename(const YCHAR *oldPath, const YCHAR *newPath) ;
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun int yaffs_stat(const YCHAR *path, struct yaffs_stat *buf) ;
105*4882a593Smuzhiyun int yaffs_lstat(const YCHAR *path, struct yaffs_stat *buf) ;
106*4882a593Smuzhiyun int yaffs_fstat(int fd, struct yaffs_stat *buf) ;
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun int yaffs_utime(const YCHAR *path, const struct yaffs_utimbuf *buf);
109*4882a593Smuzhiyun int yaffs_futime(int fd, const struct yaffs_utimbuf *buf);
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun int yaffs_setxattr(const char *path, const char *name,
113*4882a593Smuzhiyun 			const void *data, int size, int flags);
114*4882a593Smuzhiyun int yaffs_lsetxattr(const char *path, const char *name,
115*4882a593Smuzhiyun 			const void *data, int size, int flags);
116*4882a593Smuzhiyun int yaffs_fsetxattr(int fd, const char *name,
117*4882a593Smuzhiyun 			const void *data, int size, int flags);
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun int yaffs_getxattr(const char *path, const char *name,
120*4882a593Smuzhiyun 			void *data, int size);
121*4882a593Smuzhiyun int yaffs_lgetxattr(const char *path, const char *name,
122*4882a593Smuzhiyun 			void *data, int size);
123*4882a593Smuzhiyun int yaffs_fgetxattr(int fd, const char *name,
124*4882a593Smuzhiyun 			void *data, int size);
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun int yaffs_removexattr(const char *path, const char *name);
127*4882a593Smuzhiyun int yaffs_lremovexattr(const char *path, const char *name);
128*4882a593Smuzhiyun int yaffs_fremovexattr(int fd, const char *name);
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun int yaffs_listxattr(const char *path, char *list, int size);
131*4882a593Smuzhiyun int yaffs_llistxattr(const char *path, char *list, int size);
132*4882a593Smuzhiyun int yaffs_flistxattr(int fd, char *list, int size);
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun #ifdef CONFIG_YAFFS_WINCE
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun int yaffs_set_wince_times(int fd,
138*4882a593Smuzhiyun 			const unsigned *wctime,
139*4882a593Smuzhiyun 			const unsigned *watime,
140*4882a593Smuzhiyun 			const unsigned *wmtime);
141*4882a593Smuzhiyun int yaffs_get_wince_times(int fd,
142*4882a593Smuzhiyun 			unsigned *wctime,
143*4882a593Smuzhiyun 			unsigned *watime,
144*4882a593Smuzhiyun 			unsigned *wmtime);
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun #endif
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun int yaffs_chmod(const YCHAR *path, mode_t mode);
149*4882a593Smuzhiyun int yaffs_fchmod(int fd, mode_t mode);
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun int yaffs_mkdir(const YCHAR *path, mode_t mode) ;
152*4882a593Smuzhiyun int yaffs_rmdir(const YCHAR *path) ;
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun yaffs_DIR *yaffs_opendir(const YCHAR *dirname) ;
155*4882a593Smuzhiyun struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp) ;
156*4882a593Smuzhiyun void yaffs_rewinddir(yaffs_DIR *dirp) ;
157*4882a593Smuzhiyun int yaffs_closedir(yaffs_DIR *dirp) ;
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun int yaffs_mount(const YCHAR *path) ;
160*4882a593Smuzhiyun int yaffs_mount2(const YCHAR *path, int read_only);
161*4882a593Smuzhiyun int yaffs_mount_common(const YCHAR *path, int read_only, int skip_checkpt);
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun int yaffs_unmount(const YCHAR *path) ;
164*4882a593Smuzhiyun int yaffs_unmount2(const YCHAR *path, int force);
165*4882a593Smuzhiyun int yaffs_remount(const YCHAR *path, int force, int read_only);
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun int yaffs_sync(const YCHAR *path) ;
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun int yaffs_symlink(const YCHAR *oldpath, const YCHAR *newpath);
171*4882a593Smuzhiyun int yaffs_readlink(const YCHAR *path, YCHAR *buf, int bufsiz);
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun int yaffs_link(const YCHAR *oldpath, const YCHAR *newpath);
174*4882a593Smuzhiyun int yaffs_mknod(const YCHAR *pathname, mode_t mode, dev_t dev);
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun loff_t yaffs_freespace(const YCHAR *path);
177*4882a593Smuzhiyun loff_t yaffs_totalspace(const YCHAR *path);
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun int yaffs_inodecount(const YCHAR *path);
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun int yaffs_n_handles(const YCHAR *path);
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun #define YAFFS_SHARE_READ  1
184*4882a593Smuzhiyun #define YAFFS_SHARE_WRITE 2
185*4882a593Smuzhiyun int yaffs_open_sharing(const YCHAR *path, int oflag, int mode, int shareMode);
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun struct yaffs_dev;
188*4882a593Smuzhiyun void yaffs_add_device(struct yaffs_dev *dev);
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun int yaffs_start_up(void);
191*4882a593Smuzhiyun int yaffsfs_GetLastError(void);
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun /* Functions to iterate through devices. NB Use with extreme care! */
194*4882a593Smuzhiyun void yaffs_dev_rewind(void);
195*4882a593Smuzhiyun struct yaffs_dev *yaffs_next_dev(void);
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /* Function to get the last error */
198*4882a593Smuzhiyun int yaffs_get_error(void);
199*4882a593Smuzhiyun const char *yaffs_error_to_str(int err);
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun /* Function only for debugging */
202*4882a593Smuzhiyun void *yaffs_getdev(const YCHAR *path);
203*4882a593Smuzhiyun int yaffs_dump_dev(const YCHAR *path);
204*4882a593Smuzhiyun int yaffs_set_error(int error);
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun /* Trace control functions */
207*4882a593Smuzhiyun unsigned  yaffs_set_trace(unsigned tm);
208*4882a593Smuzhiyun unsigned  yaffs_get_trace(void);
209*4882a593Smuzhiyun #endif
210