xref: /nrf52832-nimble/rt-thread/components/dfs/filesystems/jffs2/cyg/fileio/fileio.h (revision 104654410c56c573564690304ae786df310c91fc)
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