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