RTEMS 7.0-rc1
Loading...
Searching...
No Matches
libio.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-2-Clause */
2
15/*
16 * COPYRIGHT (C) 1989, 2021 On-Line Applications Research Corporation (OAR).
17 *
18 * Modifications to support reference counting in the file system are
19 * Copyright (C) 2012 embedded brains GmbH & Co. KG
20 *
21 * Copyright (C) 2025 Contemporary Software
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the above copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 *
32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
33 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
34 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
35 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
36 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
37 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
38 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
39 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
40 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
41 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42 * POSSIBILITY OF SUCH DAMAGE.
43 */
44
45#ifndef _RTEMS_RTEMS_LIBIO_H
46#define _RTEMS_RTEMS_LIBIO_H
47
48#include <sys/types.h>
49#include <sys/stat.h>
50#include <sys/ioccom.h>
51#include <sys/statvfs.h>
52#include <sys/uio.h>
53
54#include <unistd.h>
55#include <termios.h>
56
57#include <rtems.h>
58#include <rtems/fs.h>
59#include <rtems/chain.h>
60#include <rtems/score/atomic.h>
61#include <rtems/termiosdevice.h>
62
63#ifdef __cplusplus
64extern "C" {
65#endif
66
67struct knote;
68
89);
90
100);
101
105typedef struct {
109 const char *path;
110
114 size_t pathlen;
115
120 const char *token;
121
126 size_t tokenlen;
127
140 int flags;
141
148
157
163
170
180);
181
196 const rtems_filesystem_location_info_t *parentloc,
197 const rtems_filesystem_location_info_t *targetloc,
198 const char *name,
199 size_t namelen
200);
201
215 mode_t mode
216);
217
232 uid_t owner,
233 gid_t group
234);
235
253);
254
264);
265
284 const void *data
285);
286
303);
304
318);
319
337);
338
356 const rtems_filesystem_location_info_t *parentloc,
357 const char *name,
358 size_t namelen,
359 mode_t mode,
360 dev_t dev
361);
362
375 const rtems_filesystem_location_info_t *parentloc,
377);
378
392 struct timespec times[2]
393);
394
410 const rtems_filesystem_location_info_t *parentloc,
411 const char *name,
412 size_t namelen,
413 const char *target
414);
415
430 char *buf,
431 size_t bufsize
432);
433
449 const rtems_filesystem_location_info_t *oldparentloc,
451 const rtems_filesystem_location_info_t *newparentloc,
452 const char *name,
453 size_t namelen
454);
455
469 struct statvfs *buf
470);
471
480 rtems_filesystem_are_nodes_equal_t are_nodes_equal_h;
489 rtems_filesystem_fsunmount_me_t fsunmount_me_h;
495};
496
502
510);
511
519);
520
529);
530
537 const rtems_filesystem_location_info_t *parentloc,
538 const rtems_filesystem_location_info_t *targetloc,
539 const char *name,
540 size_t namelen
541);
542
558);
559
566 const rtems_filesystem_location_info_t *parentloc,
567 const char *name,
568 size_t namelen,
569 mode_t mode,
570 dev_t dev
571);
572
579 const rtems_filesystem_location_info_t *parentloc,
581);
582
590 mode_t mode
591);
592
600 uid_t owner,
601 gid_t group
602);
603
611);
612
618);
619
626 rtems_filesystem_mount_table_entry_t *mt_entry, /* IN */
627 const void *data
628);
629
636 rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
637);
638
645 rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
646);
647
655 struct timespec times[2]
656);
657
664 const rtems_filesystem_location_info_t *parentloc,
665 const char *name,
666 size_t namelen,
667 const char *target
668);
669
677 char *buf,
678 size_t bufsize
679);
680
687 const rtems_filesystem_location_info_t *oldparentloc,
689 const rtems_filesystem_location_info_t *newparentloc,
690 const char *name,
691 size_t namelen
692);
693
701 struct statvfs *buf
702);
703
729 rtems_libio_t *iop,
730 const char *path,
731 int oflag,
732 mode_t mode
733);
734
746 rtems_libio_t *iop
747);
748
763typedef ssize_t (*rtems_filesystem_read_t)(
764 rtems_libio_t *iop,
765 void *buffer,
766 size_t count
767);
768
785typedef ssize_t (*rtems_filesystem_readv_t)(
786 rtems_libio_t *iop,
787 const struct iovec *iov,
788 int iovcnt,
789 ssize_t total
790);
791
806typedef ssize_t (*rtems_filesystem_write_t)(
807 rtems_libio_t *iop,
808 const void *buffer,
809 size_t count
810);
811
828typedef ssize_t (*rtems_filesystem_writev_t)(
829 rtems_libio_t *iop,
830 const struct iovec *iov,
831 int iovcnt,
832 ssize_t total
833);
834
848 rtems_libio_t *iop,
849 ioctl_command_t request,
850 void *buffer
851);
852
868 rtems_libio_t *iop,
869 off_t offset,
870 int whence
871);
872
886 struct stat *buf
887);
888
902 rtems_libio_t *iop,
903 off_t length
904);
905
918 rtems_libio_t *iop
919);
920
933 rtems_libio_t *iop
934);
935
948 rtems_libio_t *iop,
949 int cmd
950);
951
963 rtems_libio_t *iop,
964 int events
965);
966
979 rtems_libio_t *iop,
980 struct knote *kn
981);
982
998 rtems_libio_t *iop,
999 void **addr,
1000 size_t len,
1001 int prot,
1002 off_t off
1003);
1004
1016 rtems_filesystem_ftruncate_t ftruncate_h;
1018 rtems_filesystem_fdatasync_t fdatasync_h;
1021 rtems_filesystem_kqfilter_t kqfilter_h;
1025};
1026
1032
1039 rtems_libio_t *iop,
1040 const char *path,
1041 int oflag,
1042 mode_t mode
1043);
1044
1051 rtems_libio_t *iop
1052);
1053
1060 rtems_libio_t *iop,
1061 void *buffer,
1062 size_t count
1063);
1064
1071 rtems_libio_t *iop,
1072 const struct iovec *iov,
1073 int iovcnt,
1074 ssize_t total
1075);
1076
1083 rtems_libio_t *iop,
1084 const void *buffer,
1085 size_t count
1086);
1087
1094 rtems_libio_t *iop,
1095 const struct iovec *iov,
1096 int iovcnt,
1097 ssize_t total
1098);
1099
1106 rtems_libio_t *iop,
1107 ioctl_command_t request,
1108 void *buffer
1109);
1110
1117 rtems_libio_t *iop,
1118 off_t offset,
1119 int whence
1120);
1121
1134 rtems_libio_t *iop,
1135 off_t offset,
1136 int whence
1137);
1138
1157 rtems_libio_t *iop,
1158 off_t offset,
1159 int whence
1160);
1161
1171 struct stat *buf
1172);
1173
1180 rtems_libio_t *iop,
1181 off_t length
1182);
1183
1190 rtems_libio_t *iop,
1191 off_t length
1192);
1193
1200 rtems_libio_t *iop
1201);
1202
1209 rtems_libio_t *iop
1210);
1211
1218 rtems_libio_t *iop,
1219 int cmd
1220);
1221
1230 rtems_libio_t *iop,
1231 int events
1232);
1233
1242 rtems_libio_t *iop,
1243 struct knote *kn
1244);
1245
1254 rtems_libio_t *iop,
1255 void **addr,
1256 size_t len,
1257 int prot,
1258 off_t off
1259);
1260
1277typedef off_t rtems_off64_t __attribute__((deprecated));
1278
1287 const char *type
1288);
1289
1294typedef struct {
1295 int link_max; /* count */
1296 int max_canon; /* max formatted input line size */
1297 int max_input; /* max input line size */
1298 int name_max; /* max name length */
1299 int path_max; /* max path */
1300 int pipe_buf; /* pipe buffer size */
1301 int posix_async_io; /* async IO supported on fs, 0=no, 1=yes */
1302 int posix_chown_restrictions; /* can chown: 0=no, 1=yes */
1303 int posix_no_trunc; /* error on names > max name, 0=no, 1=yes */
1304 int posix_prio_io; /* priority IO, 0=no, 1=yes */
1305 int posix_sync_io; /* file can be sync'ed, 0=no, 1=yes */
1306 int posix_vdisable; /* special char processing, 0=no, 1=yes */
1308
1316
1326 Atomic_Uint flags;
1327 off_t offset; /* current offset into file */
1329 uint32_t data0; /* private to "driver" */
1330 void *data1; /* ... */
1331};
1332
1339typedef struct {
1340 rtems_libio_t *iop;
1341 off_t offset;
1342 char *buffer;
1343 uint32_t count;
1344 uint32_t flags;
1345 uint32_t bytes_moved;
1347
1352 rtems_libio_t *iop;
1353 uint32_t flags;
1354 uint32_t mode;
1356
1360typedef struct {
1361 rtems_libio_t *iop;
1362 ioctl_command_t command;
1363 void *buffer;
1364 int ioctl_return;
1366
1372#define LIBIO_FLAGS_FREE 0x0001U /* on the free list */
1373#define LIBIO_FLAGS_NO_DELAY 0x0002U /* return immediately if no data */
1374#define LIBIO_FLAGS_READ 0x0004U /* reading */
1375#define LIBIO_FLAGS_WRITE 0x0008U /* writing */
1376#define LIBIO_FLAGS_OPEN 0x0100U /* device is open */
1377#define LIBIO_FLAGS_APPEND 0x0200U /* all writes append */
1378#define LIBIO_FLAGS_CLOSE_BUSY 0x0400U /* close with refs held */
1379#define LIBIO_FLAGS_CLOSE_ON_EXEC 0x0800U /* close on process exec() */
1380#define LIBIO_FLAGS_REFERENCE_INC 0x1000U
1381/* masks */
1382#define LIBIO_FLAGS_READ_WRITE (LIBIO_FLAGS_READ | LIBIO_FLAGS_WRITE)
1383#define LIBIO_FLAGS_FLAGS_MASK (LIBIO_FLAGS_REFERENCE_INC - 1U)
1384#define LIBIO_FLAGS_REFERENCE_MASK (~LIBIO_FLAGS_FLAGS_MASK)
1385
1388static inline unsigned int rtems_libio_iop_flags( const rtems_libio_t *iop )
1389{
1390 return _Atomic_Load_uint( &iop->flags, ATOMIC_ORDER_RELAXED );
1391}
1392
1399static inline unsigned int rtems_libio_iop_flags_bad_fd(
1400 const unsigned int flags
1401)
1402{
1403 return ( ( flags & LIBIO_FLAGS_FREE ) != 0 )
1404 || ( ( flags & LIBIO_FLAGS_OPEN ) == 0 );
1405}
1406
1412static inline bool rtems_libio_iop_is_no_delay( const rtems_libio_t *iop )
1413{
1414 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_NO_DELAY ) != 0;
1415}
1416
1422static inline bool rtems_libio_iop_is_readable( const rtems_libio_t *iop )
1423{
1424 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_READ ) != 0;
1425}
1426
1432static inline bool rtems_libio_iop_is_writeable( const rtems_libio_t *iop )
1433{
1434 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_WRITE ) != 0;
1435}
1436
1442static inline bool rtems_libio_iop_is_open( const rtems_libio_t *iop )
1443{
1444 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_OPEN ) != 0;
1445}
1446
1452static inline bool rtems_libio_iop_is_append( const rtems_libio_t *iop )
1453{
1454 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_APPEND ) != 0;
1455}
1456
1462static inline bool rtems_libio_iop_is_held( const rtems_libio_t *iop )
1463{
1464 const unsigned int ref_count =
1465 rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_REFERENCE_MASK;
1466 return ref_count != 0;
1467}
1468
1474static inline bool rtems_libio_iop_is_free( const rtems_libio_t *iop )
1475{
1476 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_FREE ) != 0;
1477}
1478
1484typedef int (*rtems_libio_open_t)(
1485 const char *pathname,
1486 uint32_t flag,
1487 uint32_t mode
1488);
1489
1490typedef int (*rtems_libio_close_t)(
1491 int fd
1492);
1493
1494typedef ssize_t (*rtems_libio_read_t)(
1495 int fd,
1496 void *buffer,
1497 size_t count
1498);
1499
1500typedef ssize_t (*rtems_libio_write_t)(
1501 int fd,
1502 const void *buffer,
1503 size_t count
1504);
1505
1506typedef int (*rtems_libio_ioctl_t)(
1507 int fd,
1508 uint32_t command,
1509 void *buffer
1510);
1511
1512typedef off_t (*rtems_libio_lseek_t)(
1513 int fd,
1514 off_t offset,
1515 int whence
1516);
1517
1525/*
1526 * The following macros are used to build up the permissions sets
1527 * used to check permissions. These are similar in style to the
1528 * mode_t bits and should stay compatible with them.
1529 */
1530#define RTEMS_FS_PERMS_READ 0x4
1531#define RTEMS_FS_PERMS_WRITE 0x2
1532#define RTEMS_FS_PERMS_EXEC 0x1
1533#define RTEMS_FS_PERMS_RWX \
1534 (RTEMS_FS_PERMS_READ | RTEMS_FS_PERMS_WRITE | RTEMS_FS_PERMS_EXEC)
1535#define RTEMS_FS_FOLLOW_HARD_LINK 0x8
1536#define RTEMS_FS_FOLLOW_SYM_LINK 0x10
1537#define RTEMS_FS_FOLLOW_LINK \
1538 (RTEMS_FS_FOLLOW_HARD_LINK | RTEMS_FS_FOLLOW_SYM_LINK)
1539#define RTEMS_FS_MAKE 0x20
1540#define RTEMS_FS_EXCLUSIVE 0x40
1541#define RTEMS_FS_ACCEPT_RESIDUAL_DELIMITERS 0x80
1542#define RTEMS_FS_REJECT_TERMINAL_DOT 0x100
1543
1547 dev_t device;
1548 struct {
1551 } __overlay;
1552};
1553
1554static inline dev_t rtems_filesystem_make_dev_t(
1557)
1558{
1559 union __rtems_dev_t temp;
1560
1561 temp.__overlay.major = _major;
1562 temp.__overlay.minor = _minor;
1563 return temp.device;
1564}
1565
1566static inline dev_t rtems_filesystem_make_dev_t_from_pointer(
1567 const void *pointer
1568)
1569{
1570 uint64_t temp = (((uint64_t) 1) << 63) | (((uintptr_t) pointer) >> 1);
1571
1572 return rtems_filesystem_make_dev_t((uint32_t) (temp >> 32), (uint32_t) temp);
1573}
1574
1575static inline rtems_device_major_number rtems_filesystem_dev_major_t(
1576 dev_t device
1577)
1578{
1579 union __rtems_dev_t temp;
1580
1581 temp.device = device;
1582 return temp.__overlay.major;
1583}
1584
1585
1586static inline rtems_device_minor_number rtems_filesystem_dev_minor_t(
1587 dev_t device
1588)
1589{
1590 union __rtems_dev_t temp;
1591
1592 temp.device = device;
1593 return temp.__overlay.minor;
1594}
1595
1596#define rtems_filesystem_split_dev_t( _dev, _major, _minor ) \
1597 do { \
1598 (_major) = rtems_filesystem_dev_major_t ( _dev ); \
1599 (_minor) = rtems_filesystem_dev_minor_t( _dev ); \
1600 } while(0)
1601
1602/*
1603 * Prototypes for filesystem
1604 */
1605
1614void rtems_filesystem_initialize( void );
1615
1616void rtems_libio_post_driver(void);
1617
1618void rtems_libio_exit(void);
1619
1629extern int rtems_mkdir(const char *path, mode_t mode);
1630
1647#define RTEMS_FILESYSTEM_TYPE_IMFS "imfs"
1648#define RTEMS_FILESYSTEM_TYPE_FTPFS "ftpfs"
1649#define RTEMS_FILESYSTEM_TYPE_TFTPFS "tftpfs"
1650#define RTEMS_FILESYSTEM_TYPE_NFS "nfs"
1651#define RTEMS_FILESYSTEM_TYPE_DOSFS "dosfs"
1652#define RTEMS_FILESYSTEM_TYPE_FATFS "fatfs"
1653#define RTEMS_FILESYSTEM_TYPE_RFS "rfs"
1654#define RTEMS_FILESYSTEM_TYPE_JFFS2 "jffs2"
1655
1662 rtems_chain_node mt_node;
1663 void *fs_info;
1665 const void *immutable_fs_info;
1666 rtems_chain_control location_chain;
1669 bool mounted;
1670 bool writeable;
1671 bool no_regular_file_mknod;
1672 const rtems_filesystem_limits_and_options_t *pathconf_limits_and_options;
1673
1674 /*
1675 * The target or mount point of the file system.
1676 */
1677 const char *target;
1678
1679 /*
1680 * The type of filesystem or the name of the filesystem.
1681 */
1682 const char *type;
1683
1684 /*
1685 * When someone adds a mounted filesystem on a real device,
1686 * this will need to be used.
1687 *
1688 * The lower layers can manage how this is managed. Leave as a
1689 * string.
1690 */
1691 char *dev;
1692
1700};
1701
1705typedef enum {
1706 RTEMS_FILESYSTEM_READ_ONLY,
1707 RTEMS_FILESYSTEM_READ_WRITE,
1708 RTEMS_FILESYSTEM_BAD_OPTIONS
1710
1715 const char *type;
1718
1725
1726extern rtems_chain_control rtems_filesystem_mount_table;
1727
1737 const char *type,
1739);
1740
1748 const char *type
1749);
1750
1773int unmount(
1774 const char *mount_path
1775);
1776
1824int mount(
1825 const char *source,
1826 const char *target,
1827 const char *filesystemtype,
1829 const void *data
1830);
1831
1844 const char *source,
1845 const char *target,
1846 const char *filesystemtype,
1848 const void *data
1849);
1850
1860 const rtems_filesystem_table_t *fs_entry,
1861 void *arg
1862);
1863
1879 void *routine_arg
1880);
1881
1892 void *arg
1893);
1894
1910 void *visitor_arg
1911);
1912
1913typedef struct {
1914 const char *source;
1915 const char *target;
1916 const char *filesystemtype;
1918 const void *data;
1920
1922 rtems_filesystem_root_configuration;
1923
1935struct rtems_termios_tty;
1936
1938 int (*firstOpen)(int major, int minor, void *arg);
1939 int (*lastClose)(int major, int minor, void *arg);
1940 int (*pollRead)(int minor);
1941 ssize_t (*write)(int minor, const char *buf, size_t len);
1942 int (*setAttributes)(int minor, const struct termios *t);
1943 int (*stopRemoteTx)(int minor);
1944 int (*startRemoteTx)(int minor);
1945 rtems_termios_device_mode outputUsesInterrupts;
1947
1948static inline void rtems_termios_initialize( void )
1949{
1950 /* Nothing to do, provided for backward compatibility */
1951}
1952
1953/*
1954 * CCJ: Change before opening a tty. Newer code from Eric is coming
1955 * so extra work to handle an open tty is not worth it. If the tty
1956 * is open, close then open it again.
1957 */
1958rtems_status_code rtems_termios_bufsize (
1959 size_t cbufsize, /* cooked buffer size */
1960 size_t raw_input, /* raw input buffer size */
1961 size_t raw_output /* raw output buffer size */
1962);
1963
1968typedef enum {
1976
1988
1996
2014 unsigned char c,
2015 struct rtems_termios_tty *tty
2016);
2017
2037 unsigned char c,
2038 struct rtems_termios_tty *tty
2039);
2040
2055 unsigned char c,
2056 struct rtems_termios_tty *tty
2057);
2058
2073);
2074
2075int rtems_termios_enqueue_raw_characters(
2076 void *ttyp,
2077 const char *buf,
2078 int len
2079);
2080
2081rtems_status_code rtems_termios_open (
2084 void *arg,
2085 const rtems_termios_callbacks *callbacks
2086);
2087
2088rtems_status_code rtems_termios_close(
2089 void *arg
2090);
2091
2092rtems_status_code rtems_termios_read(
2093 void *arg
2094);
2095
2096rtems_status_code rtems_termios_write(
2097 void *arg
2098);
2099
2100rtems_status_code rtems_termios_ioctl(
2101 void *arg
2102);
2103
2104int rtems_termios_dequeue_characters(
2105 void *ttyp,
2106 int len
2107);
2108
2114#define rtems_filesystem_pathconf(_mte) ((_mte)->pathconf_limits_and_options)
2115
2119#define rtems_filesystem_type(_mte) ((_mte)->type)
2120
2124#define rtems_filesystem_mount_point(_mte) ((_mte)->target)
2125
2129#define rtems_filesystem_mount_device(_mte) ((_mte)->dev)
2130
2131#ifdef __cplusplus
2132}
2133#endif
2134
2135#endif /* _RTEMS_LIBIO_H */
clock_t times(struct tms *ptms)
Definition: __times.c:97
This header file provides the Chains API.
bool rtems_filesystem_mount_iterate(rtems_filesystem_mt_entry_visitor visitor, void *visitor_arg)
Iterates over all file system mount entries.
Definition: sup_fs_mount_iterate.c:42
int rtems_filesystem_register(const char *type, rtems_filesystem_mount_t mount_h)
Registers a file system type.
Definition: mount-mgr.c:126
int mount_and_make_target_path(const char *source, const char *target, const char *filesystemtype, rtems_filesystem_options_t options, const void *data)
Mounts a file system and makes the target path.
Definition: mount-mktgt.c:44
bool rtems_filesystem_iterate(rtems_per_filesystem_routine routine, void *routine_arg)
Iterates over all file system types.
Definition: mount-mgr.c:58
int unmount(const char *mount_path)
Unmounts the file system instance at the specified mount path.
Definition: unmount.c:62
int rtems_filesystem_unregister(const char *type)
Unregisters a file system type.
Definition: mount-mgr.c:160
const rtems_filesystem_table_t rtems_filesystem_table[]
Static table of file systems.
bool(* rtems_filesystem_mt_entry_visitor)(const rtems_filesystem_mount_table_entry_t *mt_entry, void *arg)
Mount table entry visitor.
Definition: libio.h:1890
bool(* rtems_per_filesystem_routine)(const rtems_filesystem_table_t *fs_entry, void *arg)
Per file system type routine.
Definition: libio.h:1859
rtems_filesystem_options_t
File system options.
Definition: libio.h:1705
int mount(const char *source, const char *target, const char *filesystemtype, rtems_filesystem_options_t options, const void *data)
Mounts a file system instance at the specified target path.
Definition: mount.c:197
int(* rtems_filesystem_ioctl_t)(rtems_libio_t *iop, ioctl_command_t request, void *buffer)
IO control of a node.
Definition: libio.h:847
int rtems_filesystem_default_fcntl(rtems_libio_t *iop, int cmd)
Definition: default_fcntl.c:41
int(* rtems_filesystem_poll_t)(rtems_libio_t *iop, int events)
Poll and select support.
Definition: libio.h:962
int rtems_filesystem_default_ftruncate(rtems_libio_t *iop, off_t length)
Definition: default_ftruncate.c:44
int rtems_filesystem_default_ftruncate_directory(rtems_libio_t *iop, off_t length)
Definition: default_ftruncate_directory.c:43
off_t rtems_filesystem_default_lseek_directory(rtems_libio_t *iop, off_t offset, int whence)
An offset 0 with a whence of SEEK_SET will perform a directory rewind operation.
Definition: default_lseek_directory.c:42
ssize_t(* rtems_filesystem_read_t)(rtems_libio_t *iop, void *buffer, size_t count)
Reads from a node.
Definition: libio.h:763
int(* rtems_filesystem_fcntl_t)(rtems_libio_t *iop, int cmd)
File control.
Definition: libio.h:947
int rtems_filesystem_default_ioctl(rtems_libio_t *iop, ioctl_command_t request, void *buffer)
Definition: default_ioctl.c:43
int rtems_filesystem_default_poll(rtems_libio_t *iop, int events)
Default poll handler.
Definition: default_poll.c:44
int rtems_filesystem_default_fsync_or_fdatasync(rtems_libio_t *iop)
Definition: default_fsync.c:43
const rtems_filesystem_file_handlers_r rtems_filesystem_handlers_default
File system node handler table with default node handlers.
Definition: default_handlers.c:38
off_t rtems_filesystem_default_lseek_file(rtems_libio_t *iop, off_t offset, int whence)
Default lseek() handler for files.
Definition: default_lseek_file.c:42
int(* rtems_filesystem_kqfilter_t)(rtems_libio_t *iop, struct knote *kn)
Kernel event filter support.
Definition: libio.h:978
int rtems_filesystem_default_fstat(const rtems_filesystem_location_info_t *loc, struct stat *buf)
Sets the mode to S_IRWXU | S_IRWXG | S_IRWXO.
Definition: default_fstat.c:43
int rtems_filesystem_default_fsync_or_fdatasync_success(rtems_libio_t *iop)
Definition: default_fsync_success.c:42
int rtems_filesystem_default_kqfilter(rtems_libio_t *iop, struct knote *kn)
Default kernel event filter handler.
Definition: default_kqfilter.c:42
ssize_t rtems_filesystem_default_writev(rtems_libio_t *iop, const struct iovec *iov, int iovcnt, ssize_t total)
Calls the write handler for each IO vector entry.
Definition: default_writev.c:45
int(* rtems_filesystem_close_t)(rtems_libio_t *iop)
Closes a node.
Definition: libio.h:745
ssize_t rtems_filesystem_default_readv(rtems_libio_t *iop, const struct iovec *iov, int iovcnt, ssize_t total)
Calls the read handler for each IO vector entry.
Definition: default_readv.c:45
off_t(* rtems_filesystem_lseek_t)(rtems_libio_t *iop, off_t offset, int whence)
Moves the read/write file offset.
Definition: libio.h:867
off_t rtems_filesystem_default_lseek(rtems_libio_t *iop, off_t offset, int whence)
Definition: default_lseek.c:43
ssize_t(* rtems_filesystem_writev_t)(rtems_libio_t *iop, const struct iovec *iov, int iovcnt, ssize_t total)
Writes an IO vector to a node.
Definition: libio.h:828
int(* rtems_filesystem_fstat_t)(const rtems_filesystem_location_info_t *loc, struct stat *buf)
Gets a node status.
Definition: libio.h:884
int rtems_filesystem_default_mmap(rtems_libio_t *iop, void **addr, size_t len, int prot, off_t off)
Default MMAP handler.
Definition: default_mmap.c:42
ssize_t(* rtems_filesystem_write_t)(rtems_libio_t *iop, const void *buffer, size_t count)
Writes to a node.
Definition: libio.h:806
int rtems_filesystem_default_close(rtems_libio_t *iop)
Definition: default_close.c:37
int(* rtems_filesystem_fsync_t)(rtems_libio_t *iop)
Synchronizes changes to a file.
Definition: libio.h:917
ssize_t rtems_filesystem_default_read(rtems_libio_t *iop, void *buffer, size_t count)
Definition: default_read.c:39
int(* rtems_filesystem_fdatasync_t)(rtems_libio_t *iop)
Synchronizes the data of a file.
Definition: libio.h:932
int rtems_filesystem_default_open(rtems_libio_t *iop, const char *path, int oflag, mode_t mode)
Definition: default_open.c:43
int(* rtems_filesystem_mmap_t)(rtems_libio_t *iop, void **addr, size_t len, int prot, off_t off)
MMAP support.
Definition: libio.h:997
ssize_t(* rtems_filesystem_readv_t)(rtems_libio_t *iop, const struct iovec *iov, int iovcnt, ssize_t total)
Reads an IO vector from a node.
Definition: libio.h:785
ssize_t rtems_filesystem_default_write(rtems_libio_t *iop, const void *buffer, size_t count)
Definition: default_write.c:41
int(* rtems_filesystem_ftruncate_t)(rtems_libio_t *iop, off_t length)
Truncates a file to a specified length.
Definition: libio.h:901
int(* rtems_filesystem_open_t)(rtems_libio_t *iop, const char *path, int oflag, mode_t mode)
Opens a node.
Definition: libio.h:728
int(* rtems_filesystem_statvfs_t)(const rtems_filesystem_location_info_t *loc, struct statvfs *buf)
Gets file system information.
Definition: libio.h:467
int rtems_filesystem_default_unmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_unmount.c:41
int(* rtems_filesystem_link_t)(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *targetloc, const char *name, size_t namelen)
Creates a new link for the existing file.
Definition: libio.h:195
int(* rtems_filesystem_fchmod_t)(const rtems_filesystem_location_info_t *loc, mode_t mode)
Changes the mode of a node.
Definition: libio.h:213
void rtems_filesystem_default_lock(const rtems_filesystem_mount_table_entry_t *mt_entry)
Obtains the IO library mutex.
Definition: default_lock_and_unlock.c:42
int rtems_filesystem_default_rename(const rtems_filesystem_location_info_t *oldparentloc, const rtems_filesystem_location_info_t *oldloc, const rtems_filesystem_location_info_t *newparentloc, const char *name, size_t namelen)
Definition: default_rename.c:44
void(* rtems_filesystem_fsunmount_me_t)(rtems_filesystem_mount_table_entry_t *mt_entry)
Destroys a file system instance.
Definition: libio.h:316
int rtems_filesystem_default_mknod(const rtems_filesystem_location_info_t *parentloc, const char *name, size_t namelen, mode_t mode, dev_t dev)
Definition: default_mknod.c:44
int(* rtems_filesystem_mount_t)(rtems_filesystem_mount_table_entry_t *mt_entry, const void *data)
Mounts a file system instance in a mount point (directory).
Definition: libio.h:282
int rtems_filesystem_default_fchmod(const rtems_filesystem_location_info_t *loc, mode_t mode)
Definition: default_fchmod.c:42
void(* rtems_filesystem_eval_path_t)(rtems_filesystem_eval_path_context_t *ctx)
Path evaluation.
Definition: libio.h:178
int(* rtems_filesystem_unmount_t)(rtems_filesystem_mount_table_entry_t *mt_entry)
Unmounts a file system instance in a mount point (directory).
Definition: libio.h:301
int rtems_filesystem_default_clonenode(rtems_filesystem_location_info_t *loc)
Definition: default_clone.c:42
void rtems_filesystem_default_unlock(const rtems_filesystem_mount_table_entry_t *mt_entry)
Releases the IO library mutex.
Definition: default_lock_and_unlock.c:51
bool rtems_filesystem_default_are_nodes_equal(const rtems_filesystem_location_info_t *a, const rtems_filesystem_location_info_t *b)
Tests if the node access pointer of one location is equal to the node access pointer of the other loc...
Definition: default_are_nodes_equal.c:42
int(* rtems_filesystem_rmnod_t)(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *loc)
Removes a node.
Definition: libio.h:374
int rtems_filesystem_default_rmnod(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *loc)
Definition: default_rmnod.c:44
int(* rtems_filesystem_rename_t)(const rtems_filesystem_location_info_t *oldparentloc, const rtems_filesystem_location_info_t *oldloc, const rtems_filesystem_location_info_t *newparentloc, const char *name, size_t namelen)
Renames a node.
Definition: libio.h:448
int(* rtems_filesystem_clonenode_t)(rtems_filesystem_location_info_t *loc)
Clones a location.
Definition: libio.h:251
void rtems_filesystem_default_freenode(const rtems_filesystem_location_info_t *loc)
Definition: default_freenode.c:43
ssize_t(* rtems_filesystem_readlink_t)(const rtems_filesystem_location_info_t *loc, char *buf, size_t bufsize)
Reads the contents of a symbolic link.
Definition: libio.h:428
void rtems_filesystem_default_fsunmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_fsunmount.c:39
int(* rtems_filesystem_mknod_t)(const rtems_filesystem_location_info_t *parentloc, const char *name, size_t namelen, mode_t mode, dev_t dev)
Creates a new node.
Definition: libio.h:355
bool(* rtems_filesystem_are_nodes_equal_t)(const rtems_filesystem_location_info_t *a, const rtems_filesystem_location_info_t *b)
Tests if the node of one location is equal to the node of the other location.
Definition: libio.h:334
void(* rtems_filesystem_mt_entry_unlock_t)(const rtems_filesystem_mount_table_entry_t *mt_entry)
Unlocks a file system instance.
Definition: libio.h:98
void rtems_filesystem_default_eval_path(rtems_filesystem_eval_path_context_t *ctx)
Terminates the path evaluation and replaces the current location with the null location.
Definition: default_eval_path.c:42
int rtems_filesystem_default_symlink(const rtems_filesystem_location_info_t *parentloc, const char *name, size_t namelen, const char *target)
Definition: default_symlink.c:44
int rtems_filesystem_default_statvfs(const rtems_filesystem_location_info_t *loc, struct statvfs *buf)
Definition: default_statvfs.c:42
int(* rtems_filesystem_utimens_t)(const rtems_filesystem_location_info_t *loc, struct timespec times[2])
Set node access and modification times.
Definition: libio.h:390
int(* rtems_filesystem_chown_t)(const rtems_filesystem_location_info_t *loc, uid_t owner, gid_t group)
Changes owner and group of a node.
Definition: libio.h:230
const rtems_filesystem_operations_table rtems_filesystem_operations_default
File system operations table with default operations.
Definition: default_ops.c:38
void(* rtems_filesystem_freenode_t)(const rtems_filesystem_location_info_t *loc)
Frees the location of a node.
Definition: libio.h:262
void(* rtems_filesystem_mt_entry_lock_t)(const rtems_filesystem_mount_table_entry_t *mt_entry)
Locks a file system instance.
Definition: libio.h:87
int rtems_filesystem_default_chown(const rtems_filesystem_location_info_t *loc, uid_t owner, gid_t group)
Definition: default_chown.c:42
ssize_t rtems_filesystem_default_readlink(const rtems_filesystem_location_info_t *loc, char *buf, size_t bufsize)
Definition: default_readlink.c:44
int(* rtems_filesystem_symlink_t)(const rtems_filesystem_location_info_t *parentloc, const char *name, size_t namelen, const char *target)
Makes a symbolic link to a node.
Definition: libio.h:409
int rtems_filesystem_default_mount(rtems_filesystem_mount_table_entry_t *mt_entry, const void *data)
Definition: default_mount.c:41
int rtems_filesystem_default_link(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *targetloc, const char *name, size_t namelen)
Definition: default_link.c:42
int rtems_filesystem_default_utimens(const rtems_filesystem_location_info_t *loc, struct timespec times[2])
Definition: default_utimens.c:43
struct rtems_libio_open_close_args rtems_libio_open_close_args_t
Parameter block for open/close.
int rtems_mkdir(const char *path, mode_t mode)
Creates a directory and all its parent directories according to path.
Definition: rtems_mkdir.c:130
void rtems_filesystem_initialize(void)
Base File System Initialization.
Definition: base_fs.c:51
rtems_filesystem_mount_t rtems_filesystem_get_mount_handler(const char *type)
Gets the mount handler for the file system type.
Definition: mount-mgr.c:109
const rtems_filesystem_limits_and_options_t rtems_filesystem_default_pathconf
Default pathconf settings.
Definition: mount.c:49
uint32_t rtems_device_major_number
This integer type represents the major number of devices.
Definition: io.h:103
uint32_t rtems_device_minor_number
This integer type represents the minor number of devices.
Definition: io.h:115
rtems_status_code
This enumeration provides status codes for directives of the Classic API.
Definition: status.h:85
Objects_Id rtems_id
This type represents RTEMS object identifiers.
Definition: types.h:94
rtems_termios_iproc_status_code rtems_termios_default_isig_handler(unsigned char c, struct rtems_termios_tty *tty)
Default handler for ISIG (VINTR/VKILL)
Definition: termios.c:1332
rtems_termios_iproc_status_code(* rtems_termios_isig_handler)(unsigned char c, struct rtems_termios_tty *tty)
Type for ISIG (VINTR/VKILL) handler.
Definition: libio.h:2013
rtems_termios_iproc_status_code
The status code returned by all Termios input processing (iproc) functions and input signal (isig) ha...
Definition: libio.h:1968
rtems_status_code rtems_termios_register_isig_handler(rtems_termios_isig_handler handler)
Register handler for ISIG (VINTR/VKILL)
Definition: termios.c:1347
rtems_termios_iproc_status_code rtems_termios_posix_isig_handler(unsigned char c, struct rtems_termios_tty *tty)
POSIX handler for ISIG (VINTR/VKILL)
Definition: termios_posix_isig_handler.c:23
@ RTEMS_TERMIOS_IPROC_DONE
This status indicates that the input processing is done.
Definition: libio.h:1994
@ RTEMS_TERMIOS_IPROC_CONTINUE
This status indicates that the input processing can continue.
Definition: libio.h:1975
@ RTEMS_TERMIOS_IPROC_INTERRUPT
This status indicates that the input processing should stop due to a signal.
Definition: libio.h:1987
rtems_termios_device_handler handler
The device handler.
Definition: termiostypes.h:166
Basic Filesystem Types.
This header file provides the interfaces of the Atomic Operations.
This header file defines the RTEMS Classic API.
This header file provides the statvfs() and fstatvfs() interfaces.
This structure represents a chain node.
Definition: chain.h:78
Definition: xnandpsu_onfi.h:185
File system node operations table.
Definition: libio.h:1008
File system operations table.
Definition: libio.h:475
Definition: iterateoverthreads.c:44
Path evaluation context.
Definition: libio.h:105
int recursionlevel
Definition: libio.h:147
rtems_filesystem_location_info_t currentloc
Definition: libio.h:156
const char * path
Definition: libio.h:109
size_t pathlen
Definition: libio.h:114
rtems_filesystem_global_location_t * rootloc
Definition: libio.h:162
size_t tokenlen
Definition: libio.h:126
const char * token
Definition: libio.h:120
int flags
Definition: libio.h:140
rtems_filesystem_global_location_t * startloc
Definition: libio.h:168
Global file system location.
Definition: fs.h:100
Contain file system specific information which is required to support fpathconf().
Definition: libio.h:1294
File system location.
Definition: fs.h:72
Definition: libio.h:1913
Mount table entry.
Definition: libio.h:1661
rtems_id unmount_task
Definition: libio.h:1699
File system table entry.
Definition: libio.h:1714
Parameter block for ioctl.
Definition: libio.h:1360
Parameter block for open/close.
Definition: libio.h:1351
Paramameter block for read/write.
Definition: libio.h:1339
An open file data structure.
Definition: libio.h:1325
Definition: libio.h:1937
Definition: termiostypes.h:94
Definition: statvfs.h:56
This header file provides the interfaces of the RTEMS Termios Device Support.
This union represents a chain control block.
Definition: chain.h:96
Definition: libio.h:1546