source: rtems/cpukit/libcsupport/include/rtems/libio.h @ 00bf6744

4.10
Last change on this file since 00bf6744 was 00bf6744, checked in by Sebastian Huber <sebastian.huber@…>, on Jul 1, 2010 at 2:10:54 PM

2010-06-07 Sebastian Huber <sebastian.huber@…>

  • libcsupport/include/rtems/libio_.h: Declare rtems_filesystem_mount_table_control.
  • libcsupport/include/rtems/libio.h: Removed rtems_filesystem_table_first(), rtems_filesystem_table_next() and rtems_filesystem_table_node_t declarations. Declare rtems_per_filesystem_routine, rtems_filesystem_iterate() and rtems_filesystem_get_mount_handler().
  • libcsupport/src/mount.c: Added rtems_filesystem_mounts_first() and rtems_filesystem_mounts_next(). Simplify mount(). Removed rtems_filesystem_mount_table_control_init. Use rtems_filesystem_get_mount_handler().
  • libcsupport/src/mount-mgr.c: Removed rtems_filesystem_mounts_first() and rtems_filesystem_mounts_next(). Added rtems_filesystem_iterate() and rtems_filesystem_get_mount_handler(). Use rtems_libio_lock() and rtems_libio_unlock();
  • sapi/include/confdefs.h, libmisc/shell/main_mount.c: Update for mount API changes.

2010-06-07 Bharath Suri <bharath.s.jois@…>

  • libcsupport/include/rtems/libio_.h: Removed macros rtems_filesystem_is_separator rtems_filesystem_get_start_loc rtems_filesystem_get_sym_start_loc and added them as files under libcsupport/src/
  • libcsupport/src/: Added new files libcsupport/src/sup_fs_get_start_loc.c libcsupport/src/sup_fs_get_sym_start_loc.c libcsupport/src/sup_fs_is_separator.c
  • libcsupport/Makefile.am: Changes to accommodate new files under libcsupport/src/
  • Property mode set to 100644
File size: 19.5 KB
Line 
1/**
2 * @file rtems/libio.h
3 */
4
5/*
6 *  System call and file system interface definition
7 *
8 *  General purpose communication channel for RTEMS to allow UNIX/POSIX
9 *  system call behavior under RTEMS.  Initially this supported only
10 *  IO to devices but has since been enhanced to support networking
11 *  and support for mounted file systems.
12 *
13 *  COPYRIGHT (c) 1989-2008.
14 *  On-Line Applications Research Corporation (OAR).
15 *
16 *  The license and distribution terms for this file may be
17 *  found in the file LICENSE in this distribution or at
18 *  http://www.rtems.com/license/LICENSE.
19 *
20 *  $Id$
21 */
22
23#ifndef _RTEMS_RTEMS_LIBIO_H
24#define _RTEMS_RTEMS_LIBIO_H
25
26#include <rtems.h>
27#include <rtems/chain.h>
28#include <sys/types.h>
29#include <sys/stat.h>
30#include <sys/ioctl.h>
31#include <sys/statvfs.h>
32
33/*
34 *  Define data types which must be constructed using forward references.
35 */
36
37#include <rtems/fs.h>
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
43/*
44 * A 64bit file offset for internal use by RTEMS. Based on the newlib type.
45 */
46typedef _off64_t rtems_off64_t;
47
48/*
49 * Valid RTEMS file types.
50 */
51#define RTEMS_FILESYSTEM_DIRECTORY   1
52#define RTEMS_FILESYSTEM_DEVICE      2
53#define RTEMS_FILESYSTEM_HARD_LINK   3
54#define RTEMS_FILESYSTEM_SYM_LINK    4
55#define RTEMS_FILESYSTEM_MEMORY_FILE 5
56typedef int rtems_filesystem_node_types_t;
57
58/*
59 *  File Handler Operations Table
60 */
61typedef int (*rtems_filesystem_open_t)(
62  rtems_libio_t *iop,
63  const char    *pathname,
64  uint32_t       flag,
65  uint32_t       mode
66);
67
68typedef int (*rtems_filesystem_close_t)(
69  rtems_libio_t *iop
70);
71
72typedef ssize_t (*rtems_filesystem_read_t)(
73  rtems_libio_t *iop,
74  void          *buffer,
75  size_t         count
76);
77
78typedef ssize_t (*rtems_filesystem_write_t)(
79  rtems_libio_t *iop,
80  const void    *buffer,
81  size_t         count
82);
83
84typedef int (*rtems_filesystem_ioctl_t)(
85  rtems_libio_t *iop,
86  uint32_t       command,
87  void          *buffer
88);
89
90typedef rtems_off64_t (*rtems_filesystem_lseek_t)(
91  rtems_libio_t *iop,
92  rtems_off64_t  length,
93  int            whence
94);
95
96typedef int (*rtems_filesystem_fstat_t)(
97  rtems_filesystem_location_info_t *loc,
98  struct stat                      *buf
99);
100
101typedef int (*rtems_filesystem_fchmod_t)(
102  rtems_filesystem_location_info_t *loc,
103  mode_t                            mode
104);
105
106typedef int (*rtems_filesystem_ftruncate_t)(
107  rtems_libio_t *iop,
108  rtems_off64_t  length
109);
110
111typedef int (*rtems_filesystem_fpathconf_t)(
112  rtems_libio_t *iop,
113  int name
114);
115
116typedef int (*rtems_filesystem_fsync_t)(
117  rtems_libio_t *iop
118);
119
120typedef int (*rtems_filesystem_fdatasync_t)(
121  rtems_libio_t *iop
122);
123
124typedef int (*rtems_filesystem_fcntl_t)(
125  int            cmd,
126  rtems_libio_t *iop
127);
128
129typedef int (*rtems_filesystem_rmnod_t)(
130 rtems_filesystem_location_info_t      *parent_loc,   /* IN */
131 rtems_filesystem_location_info_t      *pathloc       /* IN */
132);
133
134struct _rtems_filesystem_file_handlers_r {
135    rtems_filesystem_open_t         open_h;
136    rtems_filesystem_close_t        close_h;
137    rtems_filesystem_read_t         read_h;
138    rtems_filesystem_write_t        write_h;
139    rtems_filesystem_ioctl_t        ioctl_h;
140    rtems_filesystem_lseek_t        lseek_h;
141    rtems_filesystem_fstat_t        fstat_h;
142    rtems_filesystem_fchmod_t       fchmod_h;
143    rtems_filesystem_ftruncate_t    ftruncate_h;
144    rtems_filesystem_fpathconf_t    fpathconf_h;
145    rtems_filesystem_fsync_t        fsync_h;
146    rtems_filesystem_fdatasync_t    fdatasync_h;
147    rtems_filesystem_fcntl_t        fcntl_h;
148    rtems_filesystem_rmnod_t        rmnod_h;
149};
150
151/*
152 *  File System Operations Table
153 */
154
155/*
156 *  XXX
157 *  This routine does not allocate any space and rtems_filesystem_freenode_t
158 *  is not called by the generic after calling this routine.
159 *  ie. node_access does not have to contain valid data when the
160 *      routine returns.
161 */
162typedef int (*rtems_filesystem_mknod_t)(
163   const char                        *path,       /* IN */
164   mode_t                             mode,       /* IN */
165   dev_t                              dev,        /* IN */
166   rtems_filesystem_location_info_t  *pathloc     /* IN/OUT */
167);
168
169/*
170 *  rtems_filesystem_freenode_t must be called by the generic after
171 *  calling this routine
172 */
173
174typedef int (*rtems_filesystem_evalpath_t)(
175  const char                        *pathname,      /* IN     */
176  size_t                             pathnamelen,   /* IN     */
177  int                                flags,         /* IN     */
178  rtems_filesystem_location_info_t  *pathloc        /* IN/OUT */
179);
180
181typedef int (*rtems_filesystem_evalmake_t)(
182   const char                       *path,       /* IN */
183   rtems_filesystem_location_info_t *pathloc,    /* IN/OUT */
184   const char                      **name        /* OUT    */
185);
186
187typedef int (*rtems_filesystem_link_t)(
188 rtems_filesystem_location_info_t  *to_loc,      /* IN */
189 rtems_filesystem_location_info_t  *parent_loc,  /* IN */
190 const char                        *name         /* IN */
191);
192
193typedef int (*rtems_filesystem_unlink_t)(
194 rtems_filesystem_location_info_t  *parent_pathloc, /* IN */
195 rtems_filesystem_location_info_t  *pathloc         /* IN */
196);
197
198typedef int (*rtems_filesystem_chown_t)(
199 rtems_filesystem_location_info_t  *pathloc,       /* IN */
200 uid_t                              owner,         /* IN */
201 gid_t                              group          /* IN */
202);
203
204typedef int (*rtems_filesystem_freenode_t)(
205 rtems_filesystem_location_info_t      *pathloc       /* IN */
206);
207
208typedef int (* rtems_filesystem_mount_t ) (
209   rtems_filesystem_mount_table_entry_t *mt_entry     /* IN */
210);
211
212typedef int (* rtems_filesystem_fsmount_me_t )(
213  rtems_filesystem_mount_table_entry_t *mt_entry,     /* IN */
214  const void                           *data          /* IN */
215);
216
217typedef int (* rtems_filesystem_unmount_t ) (
218  rtems_filesystem_mount_table_entry_t *mt_entry     /* IN */
219);
220
221typedef int (* rtems_filesystem_fsunmount_me_t ) (
222   rtems_filesystem_mount_table_entry_t *mt_entry    /* IN */
223);
224
225typedef rtems_filesystem_node_types_t (* rtems_filesystem_node_type_t) (
226  rtems_filesystem_location_info_t    *pathloc      /* IN */
227);
228
229typedef int (* rtems_filesystem_utime_t)(
230  rtems_filesystem_location_info_t  *pathloc,       /* IN */
231  time_t                             actime,        /* IN */
232  time_t                             modtime        /* IN */
233);
234
235typedef int (*rtems_filesystem_evaluate_link_t)(
236  rtems_filesystem_location_info_t *pathloc,     /* IN/OUT */
237  int                               flags        /* IN     */
238);
239
240typedef int (*rtems_filesystem_symlink_t)(
241 rtems_filesystem_location_info_t  *loc,         /* IN */
242 const char                        *link_name,   /* IN */
243 const char                        *node_name
244);
245
246typedef int (*rtems_filesystem_readlink_t)(
247 rtems_filesystem_location_info_t  *loc,     /* IN  */
248 char                              *buf,     /* OUT */
249 size_t                            bufsize
250);
251
252typedef int (*rtems_filesystem_rename_t)(
253 rtems_filesystem_location_info_t  *old_parent_loc,  /* IN */
254 rtems_filesystem_location_info_t  *old_loc,         /* IN */
255 rtems_filesystem_location_info_t  *new_parent_loc,  /* IN */
256 const char                        *name             /* IN */
257);
258
259typedef int (*rtems_filesystem_statvfs_t)(
260 rtems_filesystem_location_info_t  *loc,     /* IN  */
261 struct statvfs                    *buf      /* OUT */
262);
263
264/*
265 * operations table that must be defined for every file system.
266 */
267
268/*
269 * File system types
270 */
271struct _rtems_filesystem_operations_table {
272    rtems_filesystem_evalpath_t      evalpath_h;
273    rtems_filesystem_evalmake_t      evalformake_h;
274    rtems_filesystem_link_t          link_h;
275    rtems_filesystem_unlink_t        unlink_h;
276    rtems_filesystem_node_type_t     node_type_h;
277    rtems_filesystem_mknod_t         mknod_h;
278    rtems_filesystem_chown_t         chown_h;
279    rtems_filesystem_freenode_t      freenod_h;
280    rtems_filesystem_mount_t         mount_h;
281    rtems_filesystem_fsmount_me_t    fsmount_me_h;
282    rtems_filesystem_unmount_t       unmount_h;
283    rtems_filesystem_fsunmount_me_t  fsunmount_me_h;
284    rtems_filesystem_utime_t         utime_h;
285    rtems_filesystem_evaluate_link_t eval_link_h;
286    rtems_filesystem_symlink_t       symlink_h;
287    rtems_filesystem_readlink_t      readlink_h;
288    rtems_filesystem_rename_t        rename_h;
289    rtems_filesystem_statvfs_t       statvfs_h;
290};
291
292/**
293 * @brief File system table entry.
294 */
295typedef struct rtems_filesystem_table_t {
296  const char                    *type;
297  rtems_filesystem_fsmount_me_t  mount_h;
298} rtems_filesystem_table_t;
299
300/**
301 * @brief Static table of file systems.
302 *
303 * Externally defined by confdefs.h or the user.
304 */
305extern const rtems_filesystem_table_t rtems_filesystem_table [];
306
307/**
308 * @brief Per file system table entry routine type.
309 *
310 * Return @c true to continue the iteration, and @c false to stop.
311 */
312typedef bool (*rtems_per_filesystem_routine)(
313  const rtems_filesystem_table_t *entry,
314  void *arg
315);
316
317/**
318 * @brief Iterates over the file system table.
319 *
320 * For each file system table entry the @a routine will be called with the
321 * table entry and the @a routine_arg parameter.
322 */
323void
324rtems_filesystem_iterate(
325  rtems_per_filesystem_routine routine,
326  void *routine_arg
327);
328
329/**
330 * @brief Returns the file system mount handler associated with the @a type, or
331 * @c NULL if no such association exists.
332 */
333rtems_filesystem_fsmount_me_t
334rtems_filesystem_get_mount_handler(
335  const char *type
336);
337
338/*
339 * Get the first entry in the mount table.
340 */
341rtems_filesystem_mount_table_entry_t*
342rtems_filesystem_mounts_first( void );
343
344/*
345 * Get the next entry in the mount table.
346 */
347rtems_filesystem_mount_table_entry_t*
348rtems_filesystem_mounts_next( rtems_filesystem_mount_table_entry_t *entry );
349
350/*
351 * Register a file system.
352 */
353int
354rtems_filesystem_register(
355  const char                    *type,
356  rtems_filesystem_fsmount_me_t  mount_h
357);
358
359/*
360 * Unregister a file system.
361 */
362int
363rtems_filesystem_unregister(
364  const char *type
365);
366
367/*
368 *  Structure used to contain file system specific information which
369 *  is required to support fpathconf().
370 */
371typedef struct {
372  int    link_max;                 /* count */
373  int    max_canon;                /* max formatted input line size */
374  int    max_input;                /* max input line size */
375  int    name_max;                 /* max name length */
376  int    path_max;                 /* max path */
377  int    pipe_buf;                 /* pipe buffer size */
378  int    posix_async_io;           /* async IO supported on fs, 0=no, 1=yes */
379  int    posix_chown_restrictions; /* can chown: 0=no, 1=yes */
380  int    posix_no_trunc;           /* error on names > max name, 0=no, 1=yes */
381  int    posix_prio_io;            /* priority IO, 0=no, 1=yes */
382  int    posix_sync_io;            /* file can be sync'ed, 0=no, 1=yes */
383  int    posix_vdisable;           /* special char processing, 0=no, 1=yes */
384} rtems_filesystem_limits_and_options_t;
385
386/*
387 * Default pathconf settings. Override in a filesystem.
388 */
389extern const rtems_filesystem_limits_and_options_t rtems_filesystem_default_pathconf;
390
391/*
392 * Structure for a mount table entry.
393 */
394
395struct rtems_filesystem_mount_table_entry_tt {
396  rtems_chain_node                       Node;
397  rtems_filesystem_location_info_t       mt_point_node;
398  rtems_filesystem_location_info_t       mt_fs_root;
399  int                                    options;
400  void                                  *fs_info;
401
402  rtems_filesystem_limits_and_options_t  pathconf_limits_and_options;
403
404  /*
405   * The target or mount point of the file system.
406   */
407  const char                            *target;
408
409  /*
410   * The type of filesystem or the name of the filesystem.
411   */
412  const char                            *type;
413
414  /*
415   *  When someone adds a mounted filesystem on a real device,
416   *  this will need to be used.
417   *
418   *  The lower layers can manage how this is managed. Leave as a
419   *  string.
420   */
421  char                                  *dev;
422};
423
424/**
425 * The pathconf setting for a file system.
426 */
427#define rtems_filesystem_pathconf(_mte) ((_mte)->pathconf_limits_and_options)
428
429/**
430 * The type of file system. Its name.
431 */
432#define rtems_filesystem_type(_mte) ((_mte)->type)
433
434/**
435 * The mount point of a file system.
436 */
437#define rtems_filesystem_mount_point(_mte) ((_mte)->target)
438
439/**
440 * The device entry of a file system.
441 */
442#define rtems_filesystem_mount_device(_mte) ((_mte)->dev)
443
444/*
445 *  Valid RTEMS file systems options
446 */
447typedef enum {
448  RTEMS_FILESYSTEM_READ_ONLY,
449  RTEMS_FILESYSTEM_READ_WRITE,
450  RTEMS_FILESYSTEM_BAD_OPTIONS
451} rtems_filesystem_options_t;
452
453
454/*
455 *  An open file data structure, indexed by 'fd'
456 *  TODO:
457 *     should really have a separate per/file data structure that this
458 *     points to (eg: size, offset, driver, pathname should be in that)
459 */
460struct rtems_libio_tt {
461  rtems_driver_name_t                    *driver;
462  rtems_off64_t                           size;      /* size of file */
463  rtems_off64_t                           offset;    /* current offset into file */
464  uint32_t                                flags;
465  rtems_filesystem_location_info_t        pathinfo;
466  rtems_id                                sem;
467  uint32_t                                data0;     /* private to "driver" */
468  void                                   *data1;     /* ... */
469  void                                   *file_info; /* used by file handlers */
470  const rtems_filesystem_file_handlers_r *handlers;  /* type specific handlers */
471};
472
473/*
474 *  param block for read/write
475 *  Note: it must include 'offset' instead of using iop's offset since
476 *        we can have multiple outstanding i/o's on a device.
477 */
478typedef struct {
479  rtems_libio_t          *iop;
480  rtems_off64_t           offset;
481  char                   *buffer;
482  uint32_t                count;
483  uint32_t                flags;
484  uint32_t                bytes_moved;
485} rtems_libio_rw_args_t;
486
487/*
488 *  param block for open/close
489 */
490typedef struct {
491  rtems_libio_t          *iop;
492  uint32_t                flags;
493  uint32_t                mode;
494} rtems_libio_open_close_args_t;
495
496/*
497 *  param block for ioctl
498 */
499typedef struct {
500  rtems_libio_t          *iop;
501  uint32_t                command;
502  void                   *buffer;
503  uint32_t                ioctl_return;
504} rtems_libio_ioctl_args_t;
505
506/*
507 *  Values for 'flag'
508 */
509#define LIBIO_FLAGS_NO_DELAY      0x0001  /* return immediately if no data */
510#define LIBIO_FLAGS_READ          0x0002  /* reading */
511#define LIBIO_FLAGS_WRITE         0x0004  /* writing */
512#define LIBIO_FLAGS_OPEN          0x0100  /* device is open */
513#define LIBIO_FLAGS_APPEND        0x0200  /* all writes append */
514#define LIBIO_FLAGS_CREATE        0x0400  /* create file */
515#define LIBIO_FLAGS_CLOSE_ON_EXEC 0x0800  /* close on process exec() */
516#define LIBIO_FLAGS_READ_WRITE    (LIBIO_FLAGS_READ | LIBIO_FLAGS_WRITE)
517
518void rtems_libio_init(void);
519
520/*
521 *  External I/O handlers
522 */
523
524typedef int (*rtems_libio_open_t)(
525  const char  *pathname,
526  uint32_t    flag,
527  uint32_t    mode
528);
529
530typedef int (*rtems_libio_close_t)(
531  int  fd
532);
533
534typedef int (*rtems_libio_read_t)(
535  int         fd,
536  void       *buffer,
537  uint32_t    count
538);
539
540typedef int (*rtems_libio_write_t)(
541  int         fd,
542  const void *buffer,
543  uint32_t    count
544);
545
546typedef int (*rtems_libio_ioctl_t)(
547  int         fd,
548  uint32_t    command,
549  void       *buffer
550);
551
552typedef rtems_off64_t (*rtems_libio_lseek_t)(
553  int           fd,
554  rtems_off64_t offset,
555  int           whence
556);
557
558/*
559 *  The following macros are used to build up the permissions sets
560 *  used to check permissions.  These are similar in style to the
561 *  mode_t bits and should stay compatible with them.
562 */
563#define RTEMS_LIBIO_PERMS_READ   S_IROTH
564#define RTEMS_LIBIO_PERMS_WRITE  S_IWOTH
565#define RTEMS_LIBIO_PERMS_RDWR   (S_IROTH|S_IWOTH)
566#define RTEMS_LIBIO_PERMS_EXEC   S_IXOTH
567#define RTEMS_LIBIO_PERMS_SEARCH RTEMS_LIBIO_PERMS_EXEC
568#define RTEMS_LIBIO_PERMS_RWX    S_IRWXO
569
570/*
571 *  Macros
572 */
573
574#include <unistd.h>
575
576union __rtems_dev_t {
577  dev_t device;
578  struct {
579     rtems_device_major_number major;
580     rtems_device_minor_number minor;
581  } __overlay;
582};
583
584static inline dev_t rtems_filesystem_make_dev_t(
585  rtems_device_major_number _major,
586  rtems_device_minor_number _minor
587)
588{
589  union __rtems_dev_t temp;
590
591  temp.__overlay.major = _major;
592  temp.__overlay.minor = _minor;
593  return temp.device;
594}
595
596static inline rtems_device_major_number rtems_filesystem_dev_major_t(
597  dev_t device
598)
599{
600  union __rtems_dev_t temp;
601
602  temp.device = device;
603  return temp.__overlay.major;
604}
605
606
607static inline rtems_device_minor_number rtems_filesystem_dev_minor_t(
608  dev_t device
609)
610{
611  union __rtems_dev_t temp;
612
613  temp.device = device;
614  return temp.__overlay.minor;
615}
616
617#define rtems_filesystem_split_dev_t( _dev, _major, _minor ) \
618  do { \
619    (_major) = rtems_filesystem_dev_major_t ( _dev ); \
620    (_minor) = rtems_filesystem_dev_minor_t( _dev ); \
621  } while(0)
622
623/*
624 * Verifies that the permission flag is valid.
625 */
626#define rtems_libio_is_valid_perms( _perm )     \
627 (~ ((~RTEMS_LIBIO_PERMS_RWX) & _perm ))
628
629/*
630 *  Prototypes for filesystem
631 */
632
633void rtems_filesystem_initialize( void );
634
635/*
636 * Callbacks from TERMIOS routines to device-dependent code
637 */
638#include <termios.h>
639
640typedef struct rtems_termios_callbacks {
641  int    (*firstOpen)(int major, int minor, void *arg);
642  int    (*lastClose)(int major, int minor, void *arg);
643  int    (*pollRead)(int minor);
644  ssize_t (*write)(int minor, const char *buf, size_t len);
645  int    (*setAttributes)(int minor, const struct termios *t);
646  int    (*stopRemoteTx)(int minor);
647  int    (*startRemoteTx)(int minor);
648  int    outputUsesInterrupts;
649} rtems_termios_callbacks;
650
651/*
652 *  Device-independent TERMIOS routines
653 */
654void rtems_termios_initialize (void);
655
656/*
657 * CCJ: Change before opening a tty. Newer code from Eric is coming
658 * so extra work to handle an open tty is not worth it. If the tty
659 * is open, close then open it again.
660 */
661rtems_status_code rtems_termios_bufsize (
662  int cbufsize,     /* cooked buffer size */
663  int raw_input,    /* raw input buffer size */
664  int raw_output    /* raw output buffer size */
665);
666
667rtems_status_code rtems_termios_open (
668  rtems_device_major_number      major,
669  rtems_device_minor_number      minor,
670  void                          *arg,
671  const rtems_termios_callbacks *callbacks
672);
673
674rtems_status_code rtems_termios_close(
675  void *arg
676);
677
678rtems_status_code rtems_termios_read(
679  void *arg
680);
681
682rtems_status_code rtems_termios_write(
683  void *arg
684);
685
686rtems_status_code rtems_termios_ioctl(
687  void *arg
688);
689
690int rtems_termios_enqueue_raw_characters(
691  void *ttyp,
692  char *buf,
693  int   len
694);
695
696int rtems_termios_dequeue_characters(
697  void *ttyp,
698  int   len
699);
700
701int unmount(
702  const char *mount_path
703);
704
705int mount(
706  const char                 *source,
707  const char                 *target,
708  const char                 *filesystemtype,
709  rtems_filesystem_options_t options,
710  const void                 *data
711);
712
713/*
714 *  Boot Time Mount Table Structure
715 */
716
717typedef struct {
718  const char                              *type;
719  rtems_filesystem_options_t               fsoptions;
720  const char                              *device;
721  const char                              *mount_point;
722} rtems_filesystem_mount_table_t;
723
724extern const rtems_filesystem_mount_table_t *rtems_filesystem_mount_table;
725extern const int                             rtems_filesystem_mount_table_size;
726
727typedef void (*rtems_libio_init_functions_t)(void);
728extern  rtems_libio_init_functions_t rtems_libio_init_helper;
729
730void    open_dev_console(void);
731
732typedef void (*rtems_libio_supp_functions_t)(void);
733extern  rtems_libio_supp_functions_t rtems_libio_supp_helper;
734
735typedef void (*rtems_fs_init_functions_t)(void);
736extern  rtems_fs_init_functions_t    rtems_fs_init_helper;
737
738#ifdef __cplusplus
739}
740#endif
741
742#endif /* _RTEMS_LIBIO_H */
Note: See TracBrowser for help on using the repository browser.