1*10465441SEvalZero #ifndef CYGONCE_FILEIO_H 2*10465441SEvalZero #define CYGONCE_FILEIO_H 3*10465441SEvalZero //============================================================================= 4*10465441SEvalZero // 5*10465441SEvalZero // fileio.h 6*10465441SEvalZero // 7*10465441SEvalZero // Fileio header 8*10465441SEvalZero // 9*10465441SEvalZero //============================================================================= 10*10465441SEvalZero // ####ECOSGPLCOPYRIGHTBEGIN#### 11*10465441SEvalZero // ------------------------------------------- 12*10465441SEvalZero // This file is part of eCos, the Embedded Configurable Operating System. 13*10465441SEvalZero // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. 14*10465441SEvalZero // 15*10465441SEvalZero // eCos is free software; you can redistribute it and/or modify it under 16*10465441SEvalZero // the terms of the GNU General Public License as published by the Free 17*10465441SEvalZero // Software Foundation; either version 2 or (at your option) any later 18*10465441SEvalZero // version. 19*10465441SEvalZero // 20*10465441SEvalZero // eCos is distributed in the hope that it will be useful, but WITHOUT 21*10465441SEvalZero // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 22*10465441SEvalZero // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 23*10465441SEvalZero // for more details. 24*10465441SEvalZero // 25*10465441SEvalZero // You should have received a copy of the GNU General Public License 26*10465441SEvalZero // along with eCos; if not, write to the Free Software Foundation, Inc., 27*10465441SEvalZero // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 28*10465441SEvalZero // 29*10465441SEvalZero // As a special exception, if other files instantiate templates or use 30*10465441SEvalZero // macros or inline functions from this file, or you compile this file 31*10465441SEvalZero // and link it with other works to produce a work based on this file, 32*10465441SEvalZero // this file does not by itself cause the resulting work to be covered by 33*10465441SEvalZero // the GNU General Public License. However the source code for this file 34*10465441SEvalZero // must still be made available in accordance with section (3) of the GNU 35*10465441SEvalZero // General Public License v2. 36*10465441SEvalZero // 37*10465441SEvalZero // This exception does not invalidate any other reasons why a work based 38*10465441SEvalZero // on this file might be covered by the GNU General Public License. 39*10465441SEvalZero // ------------------------------------------- 40*10465441SEvalZero // ####ECOSGPLCOPYRIGHTEND#### 41*10465441SEvalZero //============================================================================= 42*10465441SEvalZero //#####DESCRIPTIONBEGIN#### 43*10465441SEvalZero // 44*10465441SEvalZero // Author(s): nickg 45*10465441SEvalZero // Contributors: nickg 46*10465441SEvalZero // Date: 2000-05-25 47*10465441SEvalZero // Purpose: Fileio header 48*10465441SEvalZero // Description: This header contains the external definitions of the general file 49*10465441SEvalZero // IO subsystem for POSIX and EL/IX compatability. 50*10465441SEvalZero // 51*10465441SEvalZero // Usage: 52*10465441SEvalZero // #include <fileio.h> 53*10465441SEvalZero // ... 54*10465441SEvalZero // 55*10465441SEvalZero // 56*10465441SEvalZero //####DESCRIPTIONEND#### 57*10465441SEvalZero // 58*10465441SEvalZero //============================================================================= 59*10465441SEvalZero 60*10465441SEvalZero //#include <pkgconf/hal.h> 61*10465441SEvalZero //#include <pkgconf/io_fileio.h> 62*10465441SEvalZero 63*10465441SEvalZero //#include <cyg/infra/cyg_type.h> 64*10465441SEvalZero //#include <cyg/hal/hal_tables.h> 65*10465441SEvalZero #ifdef CYGFUN_IO_FILEIO_SELECT 66*10465441SEvalZero #include <cyg/kernel/kapi.h> 67*10465441SEvalZero #endif 68*10465441SEvalZero 69*10465441SEvalZero #include <stddef.h> // NULL, size_t 70*10465441SEvalZero #include <limits.h> 71*10465441SEvalZero #if defined(__GNUC__) && !defined(__CC_ARM) 72*10465441SEvalZero #include <sys/types.h> 73*10465441SEvalZero #include <fcntl.h> 74*10465441SEvalZero #else 75*10465441SEvalZero #include <port/sys/types.h> 76*10465441SEvalZero #include <port/fcntl.h> 77*10465441SEvalZero #endif 78*10465441SEvalZero //#include "os_sys_stat.h"//#include <sys/stat.h> 79*10465441SEvalZero 80*10465441SEvalZero //============================================================================= 81*10465441SEvalZero // forward definitions 82*10465441SEvalZero 83*10465441SEvalZero struct cyg_mtab_entry; 84*10465441SEvalZero typedef struct cyg_mtab_entry cyg_mtab_entry; 85*10465441SEvalZero 86*10465441SEvalZero struct cyg_fstab_entry; 87*10465441SEvalZero typedef struct cyg_fstab_entry cyg_fstab_entry; 88*10465441SEvalZero 89*10465441SEvalZero struct CYG_FILEOPS_TAG; 90*10465441SEvalZero typedef struct CYG_FILEOPS_TAG cyg_fileops; 91*10465441SEvalZero 92*10465441SEvalZero struct CYG_FILE_TAG; 93*10465441SEvalZero typedef struct CYG_FILE_TAG cyg_file; 94*10465441SEvalZero 95*10465441SEvalZero struct CYG_IOVEC_TAG; 96*10465441SEvalZero typedef struct CYG_IOVEC_TAG cyg_iovec; 97*10465441SEvalZero 98*10465441SEvalZero struct CYG_UIO_TAG; 99*10465441SEvalZero typedef struct CYG_UIO_TAG cyg_uio; 100*10465441SEvalZero 101*10465441SEvalZero struct CYG_SELINFO_TAG; 102*10465441SEvalZero typedef struct CYG_SELINFO_TAG cyg_selinfo; 103*10465441SEvalZero 104*10465441SEvalZero //============================================================================= 105*10465441SEvalZero // Directory pointer 106*10465441SEvalZero 107*10465441SEvalZero typedef CYG_ADDRWORD cyg_dir; 108*10465441SEvalZero 109*10465441SEvalZero #define CYG_DIR_NULL 0 110*10465441SEvalZero 111*10465441SEvalZero //============================================================================= 112*10465441SEvalZero // Filesystem table entry 113*10465441SEvalZero 114*10465441SEvalZero typedef int cyg_fsop_mount ( cyg_fstab_entry *fste, cyg_mtab_entry *mte ); 115*10465441SEvalZero typedef int cyg_fsop_umount ( cyg_mtab_entry *mte ); 116*10465441SEvalZero typedef int cyg_fsop_open ( cyg_mtab_entry *mte, cyg_dir dir, const char *name, 117*10465441SEvalZero int mode, cyg_file *fte ); 118*10465441SEvalZero typedef int cyg_fsop_unlink ( cyg_mtab_entry *mte, cyg_dir dir, const char *name ); 119*10465441SEvalZero typedef int cyg_fsop_mkdir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name ); 120*10465441SEvalZero typedef int cyg_fsop_rmdir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name ); 121*10465441SEvalZero typedef int cyg_fsop_rename ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1, 122*10465441SEvalZero cyg_dir dir2, const char *name2 ); 123*10465441SEvalZero typedef int cyg_fsop_link ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1, 124*10465441SEvalZero cyg_dir dir2, const char *name2, int type ); 125*10465441SEvalZero typedef int cyg_fsop_opendir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name, 126*10465441SEvalZero cyg_file *fte ); 127*10465441SEvalZero typedef int cyg_fsop_chdir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name, 128*10465441SEvalZero cyg_dir *dir_out ); 129*10465441SEvalZero typedef int cyg_fsop_stat ( cyg_mtab_entry *mte, cyg_dir dir, const char *name, 130*10465441SEvalZero struct stat *buf); 131*10465441SEvalZero typedef int cyg_fsop_getinfo ( cyg_mtab_entry *mte, cyg_dir dir, const char *name, 132*10465441SEvalZero int key, void *buf, int len ); 133*10465441SEvalZero typedef int cyg_fsop_setinfo ( cyg_mtab_entry *mte, cyg_dir dir, const char *name, 134*10465441SEvalZero int key, void *buf, int len ); 135*10465441SEvalZero 136*10465441SEvalZero 137*10465441SEvalZero struct cyg_fstab_entry 138*10465441SEvalZero { 139*10465441SEvalZero const char *name; // filesystem name 140*10465441SEvalZero CYG_ADDRWORD data; // private data value 141*10465441SEvalZero //#ifdef CYGOPT_FS_JFFS2_GCTHREAD 142*10465441SEvalZero // struct rt_mutex syncmode; // synchronization mode 143*10465441SEvalZero //#endif 144*10465441SEvalZero cyg_uint32 syncmode; // synchronization mode 145*10465441SEvalZero cyg_fsop_mount *mount; 146*10465441SEvalZero cyg_fsop_umount *umount; 147*10465441SEvalZero cyg_fsop_open *open; 148*10465441SEvalZero cyg_fsop_unlink *unlink; 149*10465441SEvalZero cyg_fsop_mkdir *mkdir; 150*10465441SEvalZero cyg_fsop_rmdir *rmdir; 151*10465441SEvalZero cyg_fsop_rename *rename; 152*10465441SEvalZero cyg_fsop_link *link; 153*10465441SEvalZero cyg_fsop_opendir *opendir; 154*10465441SEvalZero cyg_fsop_chdir *chdir; 155*10465441SEvalZero cyg_fsop_stat *stat; 156*10465441SEvalZero cyg_fsop_getinfo *getinfo; 157*10465441SEvalZero cyg_fsop_setinfo *setinfo; 158*10465441SEvalZero } ;// CYG_HAL_TABLE_TYPE; //prife 159*10465441SEvalZero 160*10465441SEvalZero //----------------------------------------------------------------------------- 161*10465441SEvalZero // Keys for getinfo() and setinfo() 162*10465441SEvalZero 163*10465441SEvalZero #define FS_INFO_CONF 1 /* pathconf() */ 164*10465441SEvalZero #define FS_INFO_ACCESS 2 /* access() */ 165*10465441SEvalZero #define FS_INFO_GETCWD 3 /* getcwd() */ 166*10465441SEvalZero #define FS_INFO_SYNC 4 /* cyg_fs_fssync() */ 167*10465441SEvalZero #define FS_INFO_ATTRIB 5 /* cyg_fs_(get|set)_attrib() */ 168*10465441SEvalZero #ifdef CYGSEM_FILEIO_INFO_DISK_USAGE 169*10465441SEvalZero #define FS_INFO_DISK_USAGE 6 /* get_disk_usage() */ 170*10465441SEvalZero #endif 171*10465441SEvalZero #define FS_INFO_CHMOD 7 /* chmod() */ 172*10465441SEvalZero 173*10465441SEvalZero //----------------------------------------------------------------------------- 174*10465441SEvalZero // Types for link() 175*10465441SEvalZero 176*10465441SEvalZero #define CYG_FSLINK_HARD 1 /* form a hard link */ 177*10465441SEvalZero #define CYG_FSLINK_SOFT 2 /* form a soft link */ 178*10465441SEvalZero 179*10465441SEvalZero //----------------------------------------------------------------------------- 180*10465441SEvalZero // getinfo() and setinfo() buffers structures. 181*10465441SEvalZero 182*10465441SEvalZero struct cyg_getcwd_info 183*10465441SEvalZero { 184*10465441SEvalZero char *buf; /* buffer for cwd string */ 185*10465441SEvalZero size_t size; /* size of buffer */ 186*10465441SEvalZero }; 187*10465441SEvalZero 188*10465441SEvalZero struct cyg_fs_disk_usage{ 189*10465441SEvalZero cyg_uint64 total_blocks; 190*10465441SEvalZero cyg_uint64 free_blocks; 191*10465441SEvalZero cyg_uint32 block_size; 192*10465441SEvalZero }; 193*10465441SEvalZero 194*10465441SEvalZero typedef cyg_uint32 cyg_fs_attrib_t; 195*10465441SEvalZero 196*10465441SEvalZero //----------------------------------------------------------------------------- 197*10465441SEvalZero // Macro to define an initialized fstab entry 198*10465441SEvalZero 199*10465441SEvalZero #define FSTAB_ENTRY( _l, _name, _data, _syncmode, _mount, _umount, \ 200*10465441SEvalZero _open, _unlink, _mkdir, _rmdir, _rename, _link, \ 201*10465441SEvalZero _opendir, _chdir, _stat, _getinfo, _setinfo) \ 202*10465441SEvalZero struct cyg_fstab_entry _l /*CYG_HAL_TABLE_ENTRY(fstab) prife*/ = \ 203*10465441SEvalZero { \ 204*10465441SEvalZero _name, \ 205*10465441SEvalZero _data, \ 206*10465441SEvalZero _syncmode, \ 207*10465441SEvalZero _mount, \ 208*10465441SEvalZero _umount, \ 209*10465441SEvalZero _open, \ 210*10465441SEvalZero _unlink, \ 211*10465441SEvalZero _mkdir, \ 212*10465441SEvalZero _rmdir, \ 213*10465441SEvalZero _rename, \ 214*10465441SEvalZero _link, \ 215*10465441SEvalZero _opendir, \ 216*10465441SEvalZero _chdir, \ 217*10465441SEvalZero _stat, \ 218*10465441SEvalZero _getinfo, \ 219*10465441SEvalZero _setinfo \ 220*10465441SEvalZero }; 221*10465441SEvalZero 222*10465441SEvalZero //============================================================================= 223*10465441SEvalZero // Mount table entry 224*10465441SEvalZero 225*10465441SEvalZero struct cyg_mtab_entry 226*10465441SEvalZero { 227*10465441SEvalZero const char *name; // name of mount point 228*10465441SEvalZero const char *fsname; // name of implementing filesystem 229*10465441SEvalZero const char *devname; // name of hardware device 230*10465441SEvalZero CYG_ADDRWORD data; // private data value 231*10465441SEvalZero 232*10465441SEvalZero // The following are filled in after a successful mount operation 233*10465441SEvalZero cyg_bool valid; // Valid entry? 234*10465441SEvalZero cyg_fstab_entry *fs; // pointer to fstab entry 235*10465441SEvalZero cyg_dir root; // root directory pointer 236*10465441SEvalZero } ; // CYG_HAL_TABLE_TYPE; // prife 237*10465441SEvalZero 238*10465441SEvalZero 239*10465441SEvalZero // This macro defines an initialized mtab entry 240*10465441SEvalZero 241*10465441SEvalZero #define MTAB_ENTRY( _l, _name, _fsname, _devname, _data ) \ 242*10465441SEvalZero struct cyg_mtab_entry _l /*CYG_HAL_TABLE_ENTRY(mtab) prife */ = \ 243*10465441SEvalZero { \ 244*10465441SEvalZero _name, \ 245*10465441SEvalZero _fsname, \ 246*10465441SEvalZero _devname, \ 247*10465441SEvalZero _data, \ 248*10465441SEvalZero false, \ 249*10465441SEvalZero NULL, \ 250*10465441SEvalZero CYG_DIR_NULL \ 251*10465441SEvalZero }; 252*10465441SEvalZero 253*10465441SEvalZero //============================================================================= 254*10465441SEvalZero // IO vector descriptors 255*10465441SEvalZero 256*10465441SEvalZero struct CYG_IOVEC_TAG 257*10465441SEvalZero { 258*10465441SEvalZero void *iov_base; /* Base address. */ 259*10465441SEvalZero ssize_t iov_len; /* Length. */ 260*10465441SEvalZero }; 261*10465441SEvalZero 262*10465441SEvalZero enum cyg_uio_rw { UIO_READ, UIO_WRITE }; 263*10465441SEvalZero 264*10465441SEvalZero /* Segment flag values. */ 265*10465441SEvalZero enum cyg_uio_seg 266*10465441SEvalZero { 267*10465441SEvalZero UIO_USERSPACE, /* from user data space */ 268*10465441SEvalZero UIO_SYSSPACE /* from system space */ 269*10465441SEvalZero }; 270*10465441SEvalZero 271*10465441SEvalZero struct CYG_UIO_TAG 272*10465441SEvalZero { 273*10465441SEvalZero struct CYG_IOVEC_TAG *uio_iov; /* pointer to array of iovecs */ 274*10465441SEvalZero int uio_iovcnt; /* number of iovecs in array */ 275*10465441SEvalZero off_t uio_offset; /* offset into file this uio corresponds to */ 276*10465441SEvalZero ssize_t uio_resid; /* residual i/o count */ 277*10465441SEvalZero enum cyg_uio_seg uio_segflg; /* see above */ 278*10465441SEvalZero enum cyg_uio_rw uio_rw; /* see above */ 279*10465441SEvalZero }; 280*10465441SEvalZero 281*10465441SEvalZero // Limits 282*10465441SEvalZero #define UIO_SMALLIOV 8 /* 8 on stack, else malloc */ 283*10465441SEvalZero 284*10465441SEvalZero //============================================================================= 285*10465441SEvalZero // Description of open file 286*10465441SEvalZero 287*10465441SEvalZero typedef int cyg_fileop_readwrite (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio); 288*10465441SEvalZero typedef cyg_fileop_readwrite cyg_fileop_read; 289*10465441SEvalZero typedef cyg_fileop_readwrite cyg_fileop_write; 290*10465441SEvalZero typedef int cyg_fileop_lseek (struct CYG_FILE_TAG *fp, off_t *pos, int whence ); 291*10465441SEvalZero typedef int cyg_fileop_ioctl (struct CYG_FILE_TAG *fp, CYG_ADDRWORD com, 292*10465441SEvalZero CYG_ADDRWORD data); 293*10465441SEvalZero typedef cyg_bool cyg_fileop_select (struct CYG_FILE_TAG *fp, int which, CYG_ADDRWORD info); 294*10465441SEvalZero typedef int cyg_fileop_fsync (struct CYG_FILE_TAG *fp, int mode ); 295*10465441SEvalZero typedef int cyg_fileop_close (struct CYG_FILE_TAG *fp); 296*10465441SEvalZero typedef int cyg_fileop_fstat (struct CYG_FILE_TAG *fp, struct stat *buf ); 297*10465441SEvalZero typedef int cyg_fileop_getinfo (struct CYG_FILE_TAG *fp, int key, void *buf, int len ); 298*10465441SEvalZero typedef int cyg_fileop_setinfo (struct CYG_FILE_TAG *fp, int key, void *buf, int len ); 299*10465441SEvalZero 300*10465441SEvalZero struct CYG_FILEOPS_TAG 301*10465441SEvalZero { 302*10465441SEvalZero cyg_fileop_read *fo_read; 303*10465441SEvalZero cyg_fileop_write *fo_write; 304*10465441SEvalZero cyg_fileop_lseek *fo_lseek; 305*10465441SEvalZero cyg_fileop_ioctl *fo_ioctl; 306*10465441SEvalZero cyg_fileop_select *fo_select; 307*10465441SEvalZero cyg_fileop_fsync *fo_fsync; 308*10465441SEvalZero cyg_fileop_close *fo_close; 309*10465441SEvalZero cyg_fileop_fstat *fo_fstat; 310*10465441SEvalZero cyg_fileop_getinfo *fo_getinfo; 311*10465441SEvalZero cyg_fileop_setinfo *fo_setinfo; 312*10465441SEvalZero }; 313*10465441SEvalZero 314*10465441SEvalZero struct CYG_FILE_TAG 315*10465441SEvalZero { 316*10465441SEvalZero cyg_uint32 f_flag; /* file state */ 317*10465441SEvalZero cyg_uint16 f_ucount; /* use count */ 318*10465441SEvalZero cyg_uint16 f_type; /* descriptor type */ 319*10465441SEvalZero cyg_uint32 f_syncmode; /* synchronization protocol */ 320*10465441SEvalZero struct CYG_FILEOPS_TAG *f_ops; /* file operations */ 321*10465441SEvalZero off_t f_offset; /* current offset */ 322*10465441SEvalZero CYG_ADDRWORD f_data; /* file or socket */ 323*10465441SEvalZero CYG_ADDRWORD f_xops; /* extra type specific ops */ 324*10465441SEvalZero cyg_mtab_entry *f_mte; /* mount table entry */ 325*10465441SEvalZero }; 326*10465441SEvalZero 327*10465441SEvalZero //----------------------------------------------------------------------------- 328*10465441SEvalZero // File flags 329*10465441SEvalZero 330*10465441SEvalZero // Allocation here is that bits 0..15 are copies of bits from the open 331*10465441SEvalZero // flags, bits 16..23 are extra bits that are visible to filesystems but 332*10465441SEvalZero // are not derived from the open call, and bits 24..31 are reserved for 333*10465441SEvalZero // the fileio infrastructure. 334*10465441SEvalZero #define CYG_FREAD O_RDONLY 335*10465441SEvalZero #define CYG_FWRITE O_WRONLY 336*10465441SEvalZero #define CYG_FNONBLOCK O_NONBLOCK 337*10465441SEvalZero #define CYG_FAPPEND O_APPEND 338*10465441SEvalZero #define CYG_FASYNC 0x00010000 339*10465441SEvalZero #define CYG_FDIR 0x00020000 340*10465441SEvalZero 341*10465441SEvalZero #define CYG_FLOCKED 0x01000000 // Set if file is locked 342*10465441SEvalZero #define CYG_FLOCK 0x02000000 // Lock during file ops 343*10465441SEvalZero #define CYG_FALLOC 0x80000000 // File is "busy", i.e. allocated 344*10465441SEvalZero 345*10465441SEvalZero // Mask for open mode bits stored in file object 346*10465441SEvalZero #define CYG_FILE_MODE_MASK (CYG_FREAD|CYG_FWRITE|CYG_FNONBLOCK|CYG_FAPPEND) 347*10465441SEvalZero 348*10465441SEvalZero //----------------------------------------------------------------------------- 349*10465441SEvalZero // Type of file 350*10465441SEvalZero 351*10465441SEvalZero #define CYG_FILE_TYPE_FILE 1 /* file */ 352*10465441SEvalZero #define CYG_FILE_TYPE_SOCKET 2 /* communications endpoint */ 353*10465441SEvalZero #define CYG_FILE_TYPE_DEVICE 3 /* device */ 354*10465441SEvalZero 355*10465441SEvalZero //----------------------------------------------------------------------------- 356*10465441SEvalZero // Keys for getinfo() and setinfo() 357*10465441SEvalZero 358*10465441SEvalZero #define FILE_INFO_CONF 1 /* fpathconf() */ 359*10465441SEvalZero 360*10465441SEvalZero //----------------------------------------------------------------------------- 361*10465441SEvalZero // Modes for fsync() 362*10465441SEvalZero 363*10465441SEvalZero #define CYG_FSYNC 1 364*10465441SEvalZero #define CYG_FDATASYNC 2 365*10465441SEvalZero 366*10465441SEvalZero //----------------------------------------------------------------------------- 367*10465441SEvalZero // Get/set info buffer structures 368*10465441SEvalZero 369*10465441SEvalZero // This is used for pathconf() and fpathconf() 370*10465441SEvalZero struct cyg_pathconf_info 371*10465441SEvalZero { 372*10465441SEvalZero int name; // POSIX defined variable name 373*10465441SEvalZero long value; // Returned variable value 374*10465441SEvalZero }; 375*10465441SEvalZero 376*10465441SEvalZero //============================================================================= 377*10465441SEvalZero // Synchronization modes 378*10465441SEvalZero // These values are filled into the syncmode fields of the above structures 379*10465441SEvalZero // and define the synchronization protocol used when accessing the object in 380*10465441SEvalZero // question. 381*10465441SEvalZero 382*10465441SEvalZero #define CYG_SYNCMODE_NONE (0) // no locking required 383*10465441SEvalZero 384*10465441SEvalZero #define CYG_SYNCMODE_FILE_FILESYSTEM 0x0002 // lock fs during file ops 385*10465441SEvalZero #define CYG_SYNCMODE_FILE_MOUNTPOINT 0x0004 // lock mte during file ops 386*10465441SEvalZero #define CYG_SYNCMODE_IO_FILE 0x0010 // lock file during io ops 387*10465441SEvalZero #define CYG_SYNCMODE_IO_FILESYSTEM 0x0020 // lock fs during io ops 388*10465441SEvalZero #define CYG_SYNCMODE_IO_MOUNTPOINT 0x0040 // lock mte during io ops 389*10465441SEvalZero #define CYG_SYNCMODE_SOCK_FILE 0x0100 // lock socket during socket ops 390*10465441SEvalZero #define CYG_SYNCMODE_SOCK_NETSTACK 0x0800 // lock netstack during socket ops 391*10465441SEvalZero 392*10465441SEvalZero #define CYG_SYNCMODE_IO_SHIFT (4) // shift for IO to file bits 393*10465441SEvalZero #define CYG_SYNCMODE_SOCK_SHIFT (8) // shift for sock to file bits 394*10465441SEvalZero 395*10465441SEvalZero //============================================================================= 396*10465441SEvalZero // Mount and umount functions 397*10465441SEvalZero 398*10465441SEvalZero __externC int mount( const char *devname, 399*10465441SEvalZero const char *dir, 400*10465441SEvalZero const char *fsname); 401*10465441SEvalZero 402*10465441SEvalZero __externC int umount( const char *name); 403*10465441SEvalZero 404*10465441SEvalZero //============================================================================= 405*10465441SEvalZero // Get/Set info functions 406*10465441SEvalZero 407*10465441SEvalZero __externC int cyg_fs_getinfo( const char *path, int key, void *buf, int len ); 408*10465441SEvalZero __externC int cyg_fs_setinfo( const char *path, int key, void *buf, int len ); 409*10465441SEvalZero __externC int cyg_fs_fgetinfo( int fd, int key, void *buf, int len ); 410*10465441SEvalZero __externC int cyg_fs_fsetinfo( int fd, int key, void *buf, int len ); 411*10465441SEvalZero 412*10465441SEvalZero #ifdef CYGFUN_IO_FILEIO_SELECT 413*10465441SEvalZero //============================================================================= 414*10465441SEvalZero // Select support 415*10465441SEvalZero 416*10465441SEvalZero //----------------------------------------------------------------------------- 417*10465441SEvalZero // Data structure for embedding in client data structures. A pointer to this 418*10465441SEvalZero // must be passed to cyg_selrecord() and cyg_selwakeup(). 419*10465441SEvalZero 420*10465441SEvalZero struct CYG_SELINFO_TAG 421*10465441SEvalZero { 422*10465441SEvalZero CYG_ADDRWORD si_info; // info passed through from fo_select() 423*10465441SEvalZero cyg_flag_value_t si_waitFlag; // select wait flags 424*10465441SEvalZero }; 425*10465441SEvalZero 426*10465441SEvalZero //----------------------------------------------------------------------------- 427*10465441SEvalZero // Select support functions. 428*10465441SEvalZero 429*10465441SEvalZero // cyg_selinit() is used to initialize a selinfo structure. 430*10465441SEvalZero __externC void cyg_selinit( struct CYG_SELINFO_TAG *sip ); 431*10465441SEvalZero 432*10465441SEvalZero // cyg_selrecord() is called when a client device needs to register 433*10465441SEvalZero // the current thread for selection. 434*10465441SEvalZero __externC void cyg_selrecord( CYG_ADDRWORD info, struct CYG_SELINFO_TAG *sip ); 435*10465441SEvalZero 436*10465441SEvalZero // cyg_selwakeup() is called when the client device matches the select 437*10465441SEvalZero // criterion, and needs to wake up a selector. 438*10465441SEvalZero __externC void cyg_selwakeup( struct CYG_SELINFO_TAG *sip ); 439*10465441SEvalZero #endif 440*10465441SEvalZero //============================================================================= 441*10465441SEvalZero // Timestamp support 442*10465441SEvalZero 443*10465441SEvalZero // Provides the current time as a time_t timestamp for use in filesystem 444*10465441SEvalZero // data strucures. 445*10465441SEvalZero 446*10465441SEvalZero __externC time_t jffs2_get_timestamp(void); 447*10465441SEvalZero 448*10465441SEvalZero //============================================================================= 449*10465441SEvalZero // Miscellaneous functions. 450*10465441SEvalZero 451*10465441SEvalZero // Provide a function to synchronize an individual file system. (ie write 452*10465441SEvalZero // file and directory information to disk) 453*10465441SEvalZero __externC int cyg_fs_fssync(const char *path); 454*10465441SEvalZero 455*10465441SEvalZero // Functions to set and get attributes of a file, eg FAT attributes 456*10465441SEvalZero // like hidden and system. 457*10465441SEvalZero __externC int cyg_fs_set_attrib( const char *fname, 458*10465441SEvalZero const cyg_fs_attrib_t new_attrib ); 459*10465441SEvalZero __externC int cyg_fs_get_attrib( const char *fname, 460*10465441SEvalZero cyg_fs_attrib_t * const file_attrib ); 461*10465441SEvalZero 462*10465441SEvalZero // Functions to lock and unlock a filesystem. These are normally used 463*10465441SEvalZero // internally by the fileio layer, but the file system might need to 464*10465441SEvalZero // use them when it needs to lock itself, eg when performing garbage 465*10465441SEvalZero // collect. 466*10465441SEvalZero __externC void cyg_fs_lock( cyg_mtab_entry *mte, cyg_uint32 syncmode ); 467*10465441SEvalZero 468*10465441SEvalZero __externC void cyg_fs_unlock( cyg_mtab_entry *mte, cyg_uint32 syncmode ); 469*10465441SEvalZero 470*10465441SEvalZero // To be able to lock the filesystem you need the mte. This function 471*10465441SEvalZero // allows the table of mounted filesystems to be searched to find an 472*10465441SEvalZero // mte which uses the give filesystem root. 473*10465441SEvalZero 474*10465441SEvalZero __externC cyg_mtab_entry * cyg_fs_root_lookup( cyg_dir *root ); 475*10465441SEvalZero 476*10465441SEvalZero //============================================================================= 477*10465441SEvalZero // Default functions. 478*10465441SEvalZero // Cast to the appropriate type, these functions can be put into any of 479*10465441SEvalZero // the operation table slots to provide the defined error code. 480*10465441SEvalZero 481*10465441SEvalZero __externC int cyg_fileio_enosys(void); 482*10465441SEvalZero __externC int cyg_fileio_erofs(void); 483*10465441SEvalZero __externC int cyg_fileio_enoerr(void); 484*10465441SEvalZero __externC int cyg_fileio_enotdir(void); 485*10465441SEvalZero __externC cyg_fileop_select cyg_fileio_seltrue; 486*10465441SEvalZero 487*10465441SEvalZero //----------------------------------------------------------------------------- 488*10465441SEvalZero #endif // ifndef CYGONCE_FILEIO_H 489*10465441SEvalZero // End of fileio.h 490