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