10e8cc8bdSWilliam Juul /* 20e8cc8bdSWilliam Juul * YAFFS: Yet another Flash File System . A NAND-flash specific file system. 30e8cc8bdSWilliam Juul * 4753ac610SCharles Manning * Copyright (C) 2002-2011 Aleph One Ltd. 50e8cc8bdSWilliam Juul * for Toby Churchill Ltd and Brightstar Engineering 60e8cc8bdSWilliam Juul * 70e8cc8bdSWilliam Juul * Created by Charles Manning <charles@aleph1.co.uk> 80e8cc8bdSWilliam Juul * 90e8cc8bdSWilliam Juul * This program is free software; you can redistribute it and/or modify 100e8cc8bdSWilliam Juul * it under the terms of the GNU Lesser General Public License version 2.1 as 110e8cc8bdSWilliam Juul * published by the Free Software Foundation. 120e8cc8bdSWilliam Juul * 130e8cc8bdSWilliam Juul * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. 140e8cc8bdSWilliam Juul */ 150e8cc8bdSWilliam Juul 160e8cc8bdSWilliam Juul 170e8cc8bdSWilliam Juul #ifndef __YPORTENV_H__ 180e8cc8bdSWilliam Juul #define __YPORTENV_H__ 190e8cc8bdSWilliam Juul 20*74f45b73SCharles Manning #include <linux/types.h> 21753ac610SCharles Manning 22753ac610SCharles Manning /* Definition of types */ 23753ac610SCharles Manning #ifdef CONFIG_YAFFS_DEFINES_TYPES 24753ac610SCharles Manning typedef unsigned char u8; 25753ac610SCharles Manning typedef unsigned short u16; 26753ac610SCharles Manning typedef unsigned u32; 2790ef117bSWilliam Juul #endif 2890ef117bSWilliam Juul 29753ac610SCharles Manning 30753ac610SCharles Manning #ifdef CONFIG_YAFFS_PROVIDE_DEFS 31753ac610SCharles Manning /* File types */ 32753ac610SCharles Manning 33753ac610SCharles Manning 34753ac610SCharles Manning #define DT_UNKNOWN 0 35753ac610SCharles Manning #define DT_FIFO 1 36753ac610SCharles Manning #define DT_CHR 2 37753ac610SCharles Manning #define DT_DIR 4 38753ac610SCharles Manning #define DT_BLK 6 39753ac610SCharles Manning #define DT_REG 8 40753ac610SCharles Manning #define DT_LNK 10 41753ac610SCharles Manning #define DT_SOCK 12 42753ac610SCharles Manning #define DT_WHT 14 43753ac610SCharles Manning 44753ac610SCharles Manning 45753ac610SCharles Manning /* 46753ac610SCharles Manning * Attribute flags. 47753ac610SCharles Manning * These are or-ed together to select what has been changed. 48753ac610SCharles Manning */ 49753ac610SCharles Manning #define ATTR_MODE 1 50753ac610SCharles Manning #define ATTR_UID 2 51753ac610SCharles Manning #define ATTR_GID 4 52753ac610SCharles Manning #define ATTR_SIZE 8 53753ac610SCharles Manning #define ATTR_ATIME 16 54753ac610SCharles Manning #define ATTR_MTIME 32 55753ac610SCharles Manning #define ATTR_CTIME 64 56753ac610SCharles Manning 57753ac610SCharles Manning struct iattr { 58753ac610SCharles Manning unsigned int ia_valid; 59753ac610SCharles Manning unsigned ia_mode; 60753ac610SCharles Manning unsigned ia_uid; 61753ac610SCharles Manning unsigned ia_gid; 62753ac610SCharles Manning unsigned ia_size; 63753ac610SCharles Manning unsigned ia_atime; 64753ac610SCharles Manning unsigned ia_mtime; 65753ac610SCharles Manning unsigned ia_ctime; 66753ac610SCharles Manning unsigned int ia_attr_flags; 67753ac610SCharles Manning }; 68753ac610SCharles Manning 69753ac610SCharles Manning #endif 70753ac610SCharles Manning 71753ac610SCharles Manning 72753ac610SCharles Manning 730e8cc8bdSWilliam Juul #if defined CONFIG_YAFFS_WINCE 740e8cc8bdSWilliam Juul 750e8cc8bdSWilliam Juul #include "ywinceenv.h" 760e8cc8bdSWilliam Juul 770e8cc8bdSWilliam Juul 780e8cc8bdSWilliam Juul #elif defined CONFIG_YAFFS_DIRECT 790e8cc8bdSWilliam Juul 800e8cc8bdSWilliam Juul /* Direct interface */ 810e8cc8bdSWilliam Juul #include "ydirectenv.h" 820e8cc8bdSWilliam Juul 830e8cc8bdSWilliam Juul #elif defined CONFIG_YAFFS_UTIL 840e8cc8bdSWilliam Juul 85753ac610SCharles Manning #include "yutilsenv.h" 860e8cc8bdSWilliam Juul 870e8cc8bdSWilliam Juul #else 880e8cc8bdSWilliam Juul /* Should have specified a configuration type */ 890e8cc8bdSWilliam Juul #error Unknown configuration 900e8cc8bdSWilliam Juul 910e8cc8bdSWilliam Juul #endif 920e8cc8bdSWilliam Juul 93753ac610SCharles Manning #if defined(CONFIG_YAFFS_DIRECT) || defined(CONFIG_YAFFS_WINCE) 940e8cc8bdSWilliam Juul 95753ac610SCharles Manning #ifdef CONFIG_YAFFSFS_PROVIDE_VALUES 960e8cc8bdSWilliam Juul 97753ac610SCharles Manning #ifndef O_RDONLY 98753ac610SCharles Manning #define O_RDONLY 00 99753ac610SCharles Manning #endif 1000e8cc8bdSWilliam Juul 101753ac610SCharles Manning #ifndef O_WRONLY 102753ac610SCharles Manning #define O_WRONLY 01 103753ac610SCharles Manning #endif 104753ac610SCharles Manning 105753ac610SCharles Manning #ifndef O_RDWR 106753ac610SCharles Manning #define O_RDWR 02 107753ac610SCharles Manning #endif 108753ac610SCharles Manning 109753ac610SCharles Manning #ifndef O_CREAT 110753ac610SCharles Manning #define O_CREAT 0100 111753ac610SCharles Manning #endif 112753ac610SCharles Manning 113753ac610SCharles Manning #ifndef O_EXCL 114753ac610SCharles Manning #define O_EXCL 0200 115753ac610SCharles Manning #endif 116753ac610SCharles Manning 117753ac610SCharles Manning #ifndef O_TRUNC 118753ac610SCharles Manning #define O_TRUNC 01000 119753ac610SCharles Manning #endif 120753ac610SCharles Manning 121753ac610SCharles Manning #ifndef O_APPEND 122753ac610SCharles Manning #define O_APPEND 02000 123753ac610SCharles Manning #endif 124753ac610SCharles Manning 125753ac610SCharles Manning #ifndef SEEK_SET 126753ac610SCharles Manning #define SEEK_SET 0 127753ac610SCharles Manning #endif 128753ac610SCharles Manning 129753ac610SCharles Manning #ifndef SEEK_CUR 130753ac610SCharles Manning #define SEEK_CUR 1 131753ac610SCharles Manning #endif 132753ac610SCharles Manning 133753ac610SCharles Manning #ifndef SEEK_END 134753ac610SCharles Manning #define SEEK_END 2 135753ac610SCharles Manning #endif 136753ac610SCharles Manning 137753ac610SCharles Manning #ifndef EBUSY 138753ac610SCharles Manning #define EBUSY 16 139753ac610SCharles Manning #endif 140753ac610SCharles Manning 141753ac610SCharles Manning #ifndef ENODEV 142753ac610SCharles Manning #define ENODEV 19 143753ac610SCharles Manning #endif 144753ac610SCharles Manning 145753ac610SCharles Manning #ifndef EINVAL 146753ac610SCharles Manning #define EINVAL 22 147753ac610SCharles Manning #endif 148753ac610SCharles Manning 149753ac610SCharles Manning #ifndef ENFILE 150753ac610SCharles Manning #define ENFILE 23 151753ac610SCharles Manning #endif 152753ac610SCharles Manning 153753ac610SCharles Manning #ifndef EBADF 154753ac610SCharles Manning #define EBADF 9 155753ac610SCharles Manning #endif 156753ac610SCharles Manning 157753ac610SCharles Manning #ifndef EACCES 158753ac610SCharles Manning #define EACCES 13 159753ac610SCharles Manning #endif 160753ac610SCharles Manning 161753ac610SCharles Manning #ifndef EXDEV 162753ac610SCharles Manning #define EXDEV 18 163753ac610SCharles Manning #endif 164753ac610SCharles Manning 165753ac610SCharles Manning #ifndef ENOENT 166753ac610SCharles Manning #define ENOENT 2 167753ac610SCharles Manning #endif 168753ac610SCharles Manning 169753ac610SCharles Manning #ifndef ENOSPC 170753ac610SCharles Manning #define ENOSPC 28 171753ac610SCharles Manning #endif 172753ac610SCharles Manning 173753ac610SCharles Manning #ifndef EROFS 174753ac610SCharles Manning #define EROFS 30 175753ac610SCharles Manning #endif 176753ac610SCharles Manning 177753ac610SCharles Manning #ifndef ERANGE 178753ac610SCharles Manning #define ERANGE 34 179753ac610SCharles Manning #endif 180753ac610SCharles Manning 181753ac610SCharles Manning #ifndef ENODATA 182753ac610SCharles Manning #define ENODATA 61 183753ac610SCharles Manning #endif 184753ac610SCharles Manning 185753ac610SCharles Manning #ifndef ENOTEMPTY 186753ac610SCharles Manning #define ENOTEMPTY 39 187753ac610SCharles Manning #endif 188753ac610SCharles Manning 189753ac610SCharles Manning #ifndef ENAMETOOLONG 190753ac610SCharles Manning #define ENAMETOOLONG 36 191753ac610SCharles Manning #endif 192753ac610SCharles Manning 193753ac610SCharles Manning #ifndef ENOMEM 194753ac610SCharles Manning #define ENOMEM 12 195753ac610SCharles Manning #endif 196753ac610SCharles Manning 197753ac610SCharles Manning #ifndef EFAULT 198753ac610SCharles Manning #define EFAULT 14 199753ac610SCharles Manning #endif 200753ac610SCharles Manning 201753ac610SCharles Manning #ifndef EEXIST 202753ac610SCharles Manning #define EEXIST 17 203753ac610SCharles Manning #endif 204753ac610SCharles Manning 205753ac610SCharles Manning #ifndef ENOTDIR 206753ac610SCharles Manning #define ENOTDIR 20 207753ac610SCharles Manning #endif 208753ac610SCharles Manning 209753ac610SCharles Manning #ifndef EISDIR 210753ac610SCharles Manning #define EISDIR 21 211753ac610SCharles Manning #endif 212753ac610SCharles Manning 213753ac610SCharles Manning #ifndef ELOOP 214753ac610SCharles Manning #define ELOOP 40 215753ac610SCharles Manning #endif 2160e8cc8bdSWilliam Juul 2170e8cc8bdSWilliam Juul 218753ac610SCharles Manning /* Mode flags */ 219753ac610SCharles Manning 220753ac610SCharles Manning #ifndef S_IFMT 221753ac610SCharles Manning #define S_IFMT 0170000 222753ac610SCharles Manning #endif 223753ac610SCharles Manning 224753ac610SCharles Manning #ifndef S_IFSOCK 225753ac610SCharles Manning #define S_IFSOCK 0140000 226753ac610SCharles Manning #endif 227753ac610SCharles Manning 228753ac610SCharles Manning #ifndef S_IFIFO 229753ac610SCharles Manning #define S_IFIFO 0010000 230753ac610SCharles Manning #endif 231753ac610SCharles Manning 232753ac610SCharles Manning #ifndef S_IFCHR 233753ac610SCharles Manning #define S_IFCHR 0020000 234753ac610SCharles Manning #endif 235753ac610SCharles Manning 236753ac610SCharles Manning #ifndef S_IFBLK 237753ac610SCharles Manning #define S_IFBLK 0060000 238753ac610SCharles Manning #endif 239753ac610SCharles Manning 240753ac610SCharles Manning #ifndef S_IFLNK 241753ac610SCharles Manning #define S_IFLNK 0120000 242753ac610SCharles Manning #endif 243753ac610SCharles Manning 244753ac610SCharles Manning #ifndef S_IFDIR 245753ac610SCharles Manning #define S_IFDIR 0040000 246753ac610SCharles Manning #endif 247753ac610SCharles Manning 248753ac610SCharles Manning #ifndef S_IFREG 249753ac610SCharles Manning #define S_IFREG 0100000 250753ac610SCharles Manning #endif 251753ac610SCharles Manning 252753ac610SCharles Manning #define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) 253753ac610SCharles Manning #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) 254753ac610SCharles Manning #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 255753ac610SCharles Manning #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 256753ac610SCharles Manning #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) 257753ac610SCharles Manning #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) 258753ac610SCharles Manning #define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) 2590e8cc8bdSWilliam Juul 2600e8cc8bdSWilliam Juul 261753ac610SCharles Manning #ifndef S_IREAD 262753ac610SCharles Manning #define S_IREAD 0000400 263753ac610SCharles Manning #endif 2640e8cc8bdSWilliam Juul 265753ac610SCharles Manning #ifndef S_IWRITE 266753ac610SCharles Manning #define S_IWRITE 0000200 267753ac610SCharles Manning #endif 268753ac610SCharles Manning 269753ac610SCharles Manning #ifndef S_IEXEC 270753ac610SCharles Manning #define S_IEXEC 0000100 271753ac610SCharles Manning #endif 272753ac610SCharles Manning 273753ac610SCharles Manning #ifndef XATTR_CREATE 274753ac610SCharles Manning #define XATTR_CREATE 1 275753ac610SCharles Manning #endif 276753ac610SCharles Manning 277753ac610SCharles Manning #ifndef XATTR_REPLACE 278753ac610SCharles Manning #define XATTR_REPLACE 2 279753ac610SCharles Manning #endif 280753ac610SCharles Manning 281753ac610SCharles Manning #ifndef R_OK 282753ac610SCharles Manning #define R_OK 4 283753ac610SCharles Manning #define W_OK 2 284753ac610SCharles Manning #define X_OK 1 285753ac610SCharles Manning #define F_OK 0 286753ac610SCharles Manning #endif 287753ac610SCharles Manning 288753ac610SCharles Manning #else 289753ac610SCharles Manning #include <errno.h> 290753ac610SCharles Manning #include <sys/stat.h> 291753ac610SCharles Manning #include <fcntl.h> 292753ac610SCharles Manning #endif 293753ac610SCharles Manning 294753ac610SCharles Manning #endif 295753ac610SCharles Manning 296753ac610SCharles Manning #ifndef Y_DUMP_STACK 297753ac610SCharles Manning #define Y_DUMP_STACK() do { } while (0) 298753ac610SCharles Manning #endif 299753ac610SCharles Manning 300753ac610SCharles Manning #ifndef BUG 301753ac610SCharles Manning #define BUG() do {\ 302753ac610SCharles Manning yaffs_trace(YAFFS_TRACE_BUG,\ 303753ac610SCharles Manning "==>> yaffs bug: " __FILE__ " %d",\ 304753ac610SCharles Manning __LINE__);\ 305753ac610SCharles Manning Y_DUMP_STACK();\ 306753ac610SCharles Manning } while (0) 3070e8cc8bdSWilliam Juul #endif 3080e8cc8bdSWilliam Juul 3090e8cc8bdSWilliam Juul #endif 310