25#ifndef _RTEMS_RTEMS_LIBIO_H
26#define _RTEMS_RTEMS_LIBIO_H
30#include <sys/ioccom.h>
784 const struct iovec *iov,
827 const struct iovec *iov,
846 ioctl_command_t request,
1069 const struct iovec *iov,
1092 const struct iovec *iov,
1104 ioctl_command_t request,
1297 int posix_chown_restrictions;
1340 uint32_t bytes_moved;
1357 ioctl_command_t command;
1367#define LIBIO_FLAGS_NO_DELAY 0x0001U
1368#define LIBIO_FLAGS_READ 0x0002U
1369#define LIBIO_FLAGS_WRITE 0x0004U
1370#define LIBIO_FLAGS_OPEN 0x0100U
1371#define LIBIO_FLAGS_APPEND 0x0200U
1372#define LIBIO_FLAGS_CLOSE_ON_EXEC 0x0800U
1373#define LIBIO_FLAGS_READ_WRITE (LIBIO_FLAGS_READ | LIBIO_FLAGS_WRITE)
1374#define LIBIO_FLAGS_REFERENCE_INC 0x1000U
1378static inline unsigned int rtems_libio_iop_flags(
const rtems_libio_t *iop )
1380 return _Atomic_Load_uint( &iop->flags, ATOMIC_ORDER_RELAXED );
1388static inline bool rtems_libio_iop_is_no_delay(
const rtems_libio_t *iop )
1390 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_NO_DELAY ) != 0;
1398static inline bool rtems_libio_iop_is_readable(
const rtems_libio_t *iop )
1400 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_READ ) != 0;
1408static inline bool rtems_libio_iop_is_writeable(
const rtems_libio_t *iop )
1410 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_WRITE ) != 0;
1418static inline bool rtems_libio_iop_is_append(
const rtems_libio_t *iop )
1420 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_APPEND ) != 0;
1428typedef int (*rtems_libio_open_t)(
1429 const char *pathname,
1434typedef int (*rtems_libio_close_t)(
1438typedef ssize_t (*rtems_libio_read_t)(
1444typedef ssize_t (*rtems_libio_write_t)(
1450typedef int (*rtems_libio_ioctl_t)(
1456typedef off_t (*rtems_libio_lseek_t)(
1474#define RTEMS_FS_PERMS_READ 0x4
1475#define RTEMS_FS_PERMS_WRITE 0x2
1476#define RTEMS_FS_PERMS_EXEC 0x1
1477#define RTEMS_FS_PERMS_RWX \
1478 (RTEMS_FS_PERMS_READ | RTEMS_FS_PERMS_WRITE | RTEMS_FS_PERMS_EXEC)
1479#define RTEMS_FS_FOLLOW_HARD_LINK 0x8
1480#define RTEMS_FS_FOLLOW_SYM_LINK 0x10
1481#define RTEMS_FS_FOLLOW_LINK \
1482 (RTEMS_FS_FOLLOW_HARD_LINK | RTEMS_FS_FOLLOW_SYM_LINK)
1483#define RTEMS_FS_MAKE 0x20
1484#define RTEMS_FS_EXCLUSIVE 0x40
1485#define RTEMS_FS_ACCEPT_RESIDUAL_DELIMITERS 0x80
1486#define RTEMS_FS_REJECT_TERMINAL_DOT 0x100
1493 rtems_device_major_number major;
1494 rtems_device_minor_number minor;
1498static inline dev_t rtems_filesystem_make_dev_t(
1499 rtems_device_major_number _major,
1500 rtems_device_minor_number _minor
1505 temp.__overlay.major = _major;
1506 temp.__overlay.minor = _minor;
1510static inline dev_t rtems_filesystem_make_dev_t_from_pointer(
1514 uint64_t temp = (((uint64_t) 1) << 63) | (((uintptr_t) pointer) >> 1);
1516 return rtems_filesystem_make_dev_t((uint32_t) (temp >> 32), (uint32_t) temp);
1519static inline rtems_device_major_number rtems_filesystem_dev_major_t(
1526 return temp.__overlay.major;
1530static inline rtems_device_minor_number rtems_filesystem_dev_minor_t(
1537 return temp.__overlay.minor;
1540#define rtems_filesystem_split_dev_t( _dev, _major, _minor ) \
1542 (_major) = rtems_filesystem_dev_major_t ( _dev ); \
1543 (_minor) = rtems_filesystem_dev_minor_t( _dev ); \
1560void rtems_libio_post_driver(
void);
1562void rtems_libio_exit(
void);
1573extern int rtems_mkdir(
const char *path, mode_t mode);
1591#define RTEMS_FILESYSTEM_TYPE_IMFS "imfs"
1592#define RTEMS_FILESYSTEM_TYPE_FTPFS "ftpfs"
1593#define RTEMS_FILESYSTEM_TYPE_TFTPFS "tftpfs"
1594#define RTEMS_FILESYSTEM_TYPE_NFS "nfs"
1595#define RTEMS_FILESYSTEM_TYPE_DOSFS "dosfs"
1596#define RTEMS_FILESYSTEM_TYPE_RFS "rfs"
1597#define RTEMS_FILESYSTEM_TYPE_JFFS2 "jffs2"
1608 const void *immutable_fs_info;
1648 RTEMS_FILESYSTEM_READ_ONLY,
1649 RTEMS_FILESYSTEM_READ_WRITE,
1650 RTEMS_FILESYSTEM_BAD_OPTIONS
1716 const char *mount_path
1769 const char *filesystemtype,
1788 const char *filesystemtype,
1858 const char *filesystemtype;
1864 rtems_filesystem_root_configuration;
1880 int (*firstOpen)(
int major,
int minor,
void *arg);
1881 int (*lastClose)(
int major,
int minor,
void *arg);
1882 int (*pollRead)(
int minor);
1883 ssize_t (*write)(
int minor,
const char *buf,
size_t len);
1884 int (*setAttributes)(
int minor,
const struct termios *t);
1885 int (*stopRemoteTx)(
int minor);
1886 int (*startRemoteTx)(
int minor);
1887 int outputUsesInterrupts;
2017int rtems_termios_enqueue_raw_characters(
2024 rtems_device_major_number major,
2025 rtems_device_minor_number minor,
2046int rtems_termios_dequeue_characters(
2056#define rtems_filesystem_pathconf(_mte) ((_mte)->pathconf_limits_and_options)
2061#define rtems_filesystem_type(_mte) ((_mte)->type)
2066#define rtems_filesystem_mount_point(_mte) ((_mte)->target)
2071#define rtems_filesystem_mount_device(_mte) ((_mte)->dev)
rtems_status_code
Classic API Status.
Definition: status.h:43
Objects_Id rtems_id
Used to manage and manipulate RTEMS object identifiers.
Definition: types.h:83
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:29
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:30
bool rtems_filesystem_iterate(rtems_per_filesystem_routine routine, void *routine_arg)
Iterates over all file system types.
Definition: mount-mgr.c:39
struct rtems_filesystem_table_t rtems_filesystem_table_t
File system table entry.
int unmount(const char *mount_path)
Unmounts the file system instance at the specified mount path.
Definition: unmount.c:43
int rtems_filesystem_unregister(const char *type)
Unregisters a file system type.
Definition: mount-mgr.c:141
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:1832
bool(* rtems_per_filesystem_routine)(const rtems_filesystem_table_t *fs_entry, void *arg)
Per file system type routine.
Definition: libio.h:1801
int rtems_filesystem_register(const char *type, rtems_filesystem_fsmount_me_t mount_h)
Registers a file system type.
Definition: mount-mgr.c:107
rtems_filesystem_options_t
File system options.
Definition: libio.h:1647
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:178
int(* rtems_filesystem_ioctl_t)(rtems_libio_t *iop, ioctl_command_t request, void *buffer)
IO control of a node.
Definition: libio.h:844
int rtems_filesystem_default_fcntl(rtems_libio_t *iop, int cmd)
Definition: default_fcntl.c:22
int(* rtems_filesystem_poll_t)(rtems_libio_t *iop, int events)
Poll and select support.
Definition: libio.h:959
int rtems_filesystem_default_ftruncate(rtems_libio_t *iop, off_t length)
Definition: default_ftruncate.c:25
int rtems_filesystem_default_ftruncate_directory(rtems_libio_t *iop, off_t length)
Definition: default_ftruncate_directory.c:30
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:29
ssize_t(* rtems_filesystem_read_t)(rtems_libio_t *iop, void *buffer, size_t count)
Reads from a node.
Definition: libio.h:760
int(* rtems_filesystem_fcntl_t)(rtems_libio_t *iop, int cmd)
File control.
Definition: libio.h:944
int rtems_filesystem_default_ioctl(rtems_libio_t *iop, ioctl_command_t request, void *buffer)
Definition: default_ioctl.c:24
int rtems_filesystem_default_poll(rtems_libio_t *iop, int events)
Default poll handler.
Definition: default_poll.c:31
int rtems_filesystem_default_fsync_or_fdatasync(rtems_libio_t *iop)
Definition: default_fsync.c:24
const rtems_filesystem_file_handlers_r rtems_filesystem_handlers_default
File system node handler table with default node handlers.
Definition: default_handlers.c:24
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:29
int(* rtems_filesystem_kqfilter_t)(rtems_libio_t *iop, struct knote *kn)
Kernel event filter support.
Definition: libio.h:975
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:24
int rtems_filesystem_default_fsync_or_fdatasync_success(rtems_libio_t *iop)
Definition: default_fsync_success.c:29
int rtems_filesystem_default_kqfilter(rtems_libio_t *iop, struct knote *kn)
Default kernel event filter handler.
Definition: default_kqfilter.c:29
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:32
int(* rtems_filesystem_close_t)(rtems_libio_t *iop)
Closes a node.
Definition: libio.h:742
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:32
off_t(* rtems_filesystem_lseek_t)(rtems_libio_t *iop, off_t offset, int whence)
Moves the read/write file offset.
Definition: libio.h:864
off_t rtems_filesystem_default_lseek(rtems_libio_t *iop, off_t offset, int whence)
Definition: default_lseek.c:24
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:825
int(* rtems_filesystem_fstat_t)(const rtems_filesystem_location_info_t *loc, struct stat *buf)
Gets a node status.
Definition: libio.h:881
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:23
ssize_t(* rtems_filesystem_write_t)(rtems_libio_t *iop, const void *buffer, size_t count)
Writes to a node.
Definition: libio.h:803
int rtems_filesystem_default_close(rtems_libio_t *iop)
Definition: default_close.c:18
int(* rtems_filesystem_fsync_t)(rtems_libio_t *iop)
Synchronizes changes to a file.
Definition: libio.h:914
ssize_t rtems_filesystem_default_read(rtems_libio_t *iop, void *buffer, size_t count)
Definition: default_read.c:20
int(* rtems_filesystem_fdatasync_t)(rtems_libio_t *iop)
Synchronizes the data of a file.
Definition: libio.h:929
int rtems_filesystem_default_open(rtems_libio_t *iop, const char *path, int oflag, mode_t mode)
Definition: default_open.c:24
int(* rtems_filesystem_mmap_t)(rtems_libio_t *iop, void **addr, size_t len, int prot, off_t off)
MMAP support.
Definition: libio.h:994
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:782
ssize_t rtems_filesystem_default_write(rtems_libio_t *iop, const void *buffer, size_t count)
Definition: default_write.c:22
int(* rtems_filesystem_ftruncate_t)(rtems_libio_t *iop, off_t length)
Truncates a file to a specified length.
Definition: libio.h:898
int(* rtems_filesystem_open_t)(rtems_libio_t *iop, const char *path, int oflag, mode_t mode)
Opens a node.
Definition: libio.h:725
int(* rtems_filesystem_statvfs_t)(const rtems_filesystem_location_info_t *loc, struct statvfs *buf)
Gets file system information.
Definition: libio.h:464
int rtems_filesystem_default_unmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_unmount.c:22
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:174
int(* rtems_filesystem_mount_t)(rtems_filesystem_mount_table_entry_t *mt_entry)
Mounts a file system instance in a mount point (directory).
Definition: libio.h:261
int(* rtems_filesystem_fchmod_t)(const rtems_filesystem_location_info_t *loc, mode_t mode)
Changes the mode of a node.
Definition: libio.h:192
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:29
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:25
void(* rtems_filesystem_fsunmount_me_t)(rtems_filesystem_mount_table_entry_t *mt_entry)
Destroys a file system instance.
Definition: libio.h:311
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:25
int rtems_filesystem_default_utime(const rtems_filesystem_location_info_t *loc, time_t actime, time_t modtime)
Definition: default_utime.c:25
int rtems_filesystem_default_fchmod(const rtems_filesystem_location_info_t *loc, mode_t mode)
Definition: default_fchmod.c:23
void(* rtems_filesystem_eval_path_t)(rtems_filesystem_eval_path_context_t *ctx)
Path evaluation.
Definition: libio.h:157
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:296
int rtems_filesystem_default_clonenode(rtems_filesystem_location_info_t *loc)
Definition: default_clone.c:29
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:36
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:29
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:369
int rtems_filesystem_default_rmnod(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *loc)
Definition: default_rmnod.c:25
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:445
int rtems_filesystem_default_mount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_mount.c:22
int(* rtems_filesystem_utime_t)(const rtems_filesystem_location_info_t *loc, time_t actime, time_t modtime)
Set node access and modification times.
Definition: libio.h:386
int(* rtems_filesystem_clonenode_t)(rtems_filesystem_location_info_t *loc)
Clones a location.
Definition: libio.h:230
void rtems_filesystem_default_freenode(const rtems_filesystem_location_info_t *loc)
Definition: default_freenode.c:24
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:425
void rtems_filesystem_default_fsunmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_fsunmount.c:20
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:350
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:329
void(* rtems_filesystem_mt_entry_unlock_t)(const rtems_filesystem_mount_table_entry_t *mt_entry)
Unlocks a file system instance.
Definition: libio.h:77
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:29
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:25
int rtems_filesystem_default_statvfs(const rtems_filesystem_location_info_t *loc, struct statvfs *buf)
Definition: default_statvfs.c:23
int(* rtems_filesystem_fsmount_me_t)(rtems_filesystem_mount_table_entry_t *mt_entry, const void *data)
Initializes a file system instance.
Definition: libio.h:277
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:209
const rtems_filesystem_operations_table rtems_filesystem_operations_default
File system operations table with default operations.
Definition: default_ops.c:24
void(* rtems_filesystem_freenode_t)(const rtems_filesystem_location_info_t *loc)
Frees the location of a node.
Definition: libio.h:241
void(* rtems_filesystem_mt_entry_lock_t)(const rtems_filesystem_mount_table_entry_t *mt_entry)
Locks a file system instance.
Definition: libio.h:66
int rtems_filesystem_default_chown(const rtems_filesystem_location_info_t *loc, uid_t owner, gid_t group)
Definition: default_chown.c:23
ssize_t rtems_filesystem_default_readlink(const rtems_filesystem_location_info_t *loc, char *buf, size_t bufsize)
Definition: default_readlink.c:25
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:406
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:23
rtems_filesystem_fsmount_me_t rtems_filesystem_get_mount_handler(const char *type)
Gets the mount handler for the file system type.
Definition: mount-mgr.c:90
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:32
const rtems_filesystem_limits_and_options_t rtems_filesystem_default_pathconf
Default pathconf settings.
Definition: mount.c:30
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:66
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:1314
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:1955
rtems_termios_iproc_status_code
The status code returned by all Termios input processing (iproc) functions and input signal (isig) ha...
Definition: libio.h:1910
rtems_status_code rtems_termios_register_isig_handler(rtems_termios_isig_handler handler)
Register handler for ISIG (VINTR/VKILL)
Definition: termios.c:1326
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:1936
@ RTEMS_TERMIOS_IPROC_CONTINUE
This status indicates that the input processing can continue.
Definition: libio.h:1917
@ RTEMS_TERMIOS_IPROC_INTERRUPT
This status indicates that the input processing should stop due to a signal.
Definition: libio.h:1929
Interface to the statvfs() Set of API Methods.
File system node operations table.
Definition: libio.h:1005
File system operations table.
Definition: libio.h:472
Definition: rtemscompat1.h:15
Definition: iterateoverthreads.c:23
Path evaluation context.
Definition: libio.h:84
int recursionlevel
Definition: libio.h:126
rtems_filesystem_location_info_t currentloc
Definition: libio.h:135
const char * path
Definition: libio.h:88
size_t pathlen
Definition: libio.h:93
rtems_filesystem_global_location_t * rootloc
Definition: libio.h:141
size_t tokenlen
Definition: libio.h:105
const char * token
Definition: libio.h:99
int flags
Definition: libio.h:119
rtems_filesystem_global_location_t * startloc
Definition: libio.h:147
Global file system location.
Definition: fs.h:81
Contain file system specific information which is required to support fpathconf().
Definition: libio.h:1289
File system location.
Definition: fs.h:53
Mount table entry.
Definition: libio.h:1604
rtems_id unmount_task
Definition: libio.h:1641
File system table entry.
Definition: libio.h:1656
Parameter block for ioctl.
Definition: libio.h:1355
Parameter block for open/close.
Definition: libio.h:1346
Paramameter block for read/write.
Definition: libio.h:1334
An open file data structure.
Definition: libio.h:1320
Definition: termiostypes.h:283
rtems_termios_device_handler handler
The device handler.
Definition: termiostypes.h:355