1/*
2 * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
3 *
4 * Copyright (C) 2002-2011 Aleph One Ltd.
5 *   for Toby Churchill Ltd and Brightstar Engineering
6 *
7 * Created by Charles Manning <charles@aleph1.co.uk>
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#ifndef __YPORTENV_H__
18#define __YPORTENV_H__
19
20#include <linux/bug.h>
21#include <linux/types.h>
22
23/* Definition of types */
24#ifdef CONFIG_YAFFS_DEFINES_TYPES
25typedef unsigned char u8;
26typedef unsigned short u16;
27typedef unsigned u32;
28#endif
29
30
31#ifdef CONFIG_YAFFS_PROVIDE_DEFS
32/* File types */
33
34
35#define DT_UNKNOWN	0
36#define DT_FIFO		1
37#define DT_CHR		2
38#define DT_DIR		4
39#define DT_BLK		6
40#define DT_REG		8
41#define DT_LNK		10
42#define DT_SOCK		12
43#define DT_WHT		14
44
45
46/*
47 * Attribute flags.
48 * These are or-ed together to select what has been changed.
49 */
50#define ATTR_MODE	1
51#define ATTR_UID	2
52#define ATTR_GID	4
53#define ATTR_SIZE	8
54#define ATTR_ATIME	16
55#define ATTR_MTIME	32
56#define ATTR_CTIME	64
57
58struct iattr {
59	unsigned int ia_valid;
60	unsigned ia_mode;
61	unsigned ia_uid;
62	unsigned ia_gid;
63	unsigned ia_size;
64	unsigned ia_atime;
65	unsigned ia_mtime;
66	unsigned ia_ctime;
67	unsigned int ia_attr_flags;
68};
69
70#endif
71
72
73
74#if defined CONFIG_YAFFS_WINCE
75
76#include "ywinceenv.h"
77
78
79#elif defined CONFIG_YAFFS_DIRECT
80
81/* Direct interface */
82#include "ydirectenv.h"
83
84#elif defined CONFIG_YAFFS_UTIL
85
86#include "yutilsenv.h"
87
88#else
89/* Should have specified a configuration type */
90#error Unknown configuration
91
92#endif
93
94#if defined(CONFIG_YAFFS_DIRECT) || defined(CONFIG_YAFFS_WINCE)
95
96#ifdef CONFIG_YAFFSFS_PROVIDE_VALUES
97
98#ifndef O_RDONLY
99#define O_RDONLY	00
100#endif
101
102#ifndef O_WRONLY
103#define O_WRONLY	01
104#endif
105
106#ifndef O_RDWR
107#define O_RDWR		02
108#endif
109
110#ifndef O_CREAT
111#define O_CREAT		0100
112#endif
113
114#ifndef O_EXCL
115#define O_EXCL		0200
116#endif
117
118#ifndef O_TRUNC
119#define O_TRUNC		01000
120#endif
121
122#ifndef O_APPEND
123#define O_APPEND	02000
124#endif
125
126#ifndef SEEK_SET
127#define SEEK_SET	0
128#endif
129
130#ifndef SEEK_CUR
131#define SEEK_CUR	1
132#endif
133
134#ifndef SEEK_END
135#define SEEK_END	2
136#endif
137
138#ifndef EBUSY
139#define EBUSY	16
140#endif
141
142#ifndef ENODEV
143#define ENODEV	19
144#endif
145
146#ifndef EINVAL
147#define EINVAL	22
148#endif
149
150#ifndef ENFILE
151#define ENFILE	23
152#endif
153
154#ifndef EBADF
155#define EBADF	9
156#endif
157
158#ifndef EACCES
159#define EACCES	13
160#endif
161
162#ifndef EXDEV
163#define EXDEV	18
164#endif
165
166#ifndef ENOENT
167#define ENOENT	2
168#endif
169
170#ifndef ENOSPC
171#define ENOSPC	28
172#endif
173
174#ifndef EROFS
175#define EROFS	30
176#endif
177
178#ifndef ERANGE
179#define ERANGE 34
180#endif
181
182#ifndef ENODATA
183#define ENODATA 61
184#endif
185
186#ifndef ENOTEMPTY
187#define ENOTEMPTY 39
188#endif
189
190#ifndef ENAMETOOLONG
191#define ENAMETOOLONG 36
192#endif
193
194#ifndef ENOMEM
195#define ENOMEM 12
196#endif
197
198#ifndef EFAULT
199#define EFAULT 14
200#endif
201
202#ifndef EEXIST
203#define EEXIST 17
204#endif
205
206#ifndef ENOTDIR
207#define ENOTDIR 20
208#endif
209
210#ifndef EISDIR
211#define EISDIR 21
212#endif
213
214#ifndef ELOOP
215#define ELOOP	40
216#endif
217
218
219/* Mode flags */
220
221#ifndef S_IFMT
222#define S_IFMT		0170000
223#endif
224
225#ifndef S_IFSOCK
226#define S_IFSOCK	0140000
227#endif
228
229#ifndef S_IFIFO
230#define S_IFIFO		0010000
231#endif
232
233#ifndef S_IFCHR
234#define S_IFCHR		0020000
235#endif
236
237#ifndef S_IFBLK
238#define S_IFBLK		0060000
239#endif
240
241#ifndef S_IFLNK
242#define S_IFLNK		0120000
243#endif
244
245#ifndef S_IFDIR
246#define S_IFDIR		0040000
247#endif
248
249#ifndef S_IFREG
250#define S_IFREG		0100000
251#endif
252
253#define S_ISSOCK(m)	(((m) & S_IFMT) == S_IFSOCK)
254#define S_ISLNK(m)	(((m) & S_IFMT) == S_IFLNK)
255#define S_ISDIR(m)	(((m) & S_IFMT) == S_IFDIR)
256#define S_ISREG(m)	(((m) & S_IFMT) == S_IFREG)
257#define S_ISBLK(m)	(((m) & S_IFMT) == S_IFBLK)
258#define S_ISCHR(m)	(((m) & S_IFMT) == S_IFCHR)
259#define S_ISFIFO(m)	(((m) & S_IFMT) == S_IFIFO)
260
261
262#ifndef S_IREAD
263#define S_IREAD		0000400
264#endif
265
266#ifndef S_IWRITE
267#define	S_IWRITE	0000200
268#endif
269
270#ifndef S_IEXEC
271#define	S_IEXEC	0000100
272#endif
273
274#ifndef XATTR_CREATE
275#define XATTR_CREATE 1
276#endif
277
278#ifndef XATTR_REPLACE
279#define XATTR_REPLACE 2
280#endif
281
282#ifndef R_OK
283#define R_OK	4
284#define W_OK	2
285#define X_OK	1
286#define F_OK	0
287#endif
288
289#else
290#include <errno.h>
291#include <sys/stat.h>
292#include <fcntl.h>
293#endif
294
295#endif
296
297#ifndef Y_DUMP_STACK
298#define Y_DUMP_STACK() do { } while (0)
299#endif
300
301#ifndef BUG
302#define BUG() do {\
303	yaffs_trace(YAFFS_TRACE_BUG,\
304		"==>> yaffs bug: " __FILE__ " %d",\
305		__LINE__);\
306	Y_DUMP_STACK();\
307} while (0)
308#endif
309
310#endif
311