25 #ifndef _RTEMS_RTEMS_LIBIO_H 26 #define _RTEMS_RTEMS_LIBIO_H 28 #include <sys/types.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 1378 static inline unsigned int rtems_libio_iop_flags(
const rtems_libio_t *iop )
1380 return _Atomic_Load_uint( &iop->flags, ATOMIC_ORDER_RELAXED );
1388 static 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;
1398 static inline bool rtems_libio_iop_is_readable(
const rtems_libio_t *iop )
1400 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_READ ) != 0;
1408 static inline bool rtems_libio_iop_is_writeable(
const rtems_libio_t *iop )
1410 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_WRITE ) != 0;
1418 static inline bool rtems_libio_iop_is_append(
const rtems_libio_t *iop )
1420 return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_APPEND ) != 0;
1428 typedef int (*rtems_libio_open_t)(
1429 const char *pathname,
1434 typedef int (*rtems_libio_close_t)(
1438 typedef ssize_t (*rtems_libio_read_t)(
1444 typedef ssize_t (*rtems_libio_write_t)(
1450 typedef int (*rtems_libio_ioctl_t)(
1456 typedef 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;
1498 static 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;
1510 static 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);
1519 static inline rtems_device_major_number rtems_filesystem_dev_major_t(
1525 temp.device = device;
1526 return temp.__overlay.major;
1530 static inline rtems_device_minor_number rtems_filesystem_dev_minor_t(
1536 temp.device = device;
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 ); \ 1560 void rtems_libio_post_driver(
void);
1562 void rtems_libio_exit(
void);
1573 extern int rtems_mkdir(
const char *path, mode_t mode);
1591 #define RTEMS_FILESYSTEM_TYPE_IMFS "imfs" 1592 #define RTEMS_FILESYSTEM_TYPE_MINIIMFS "mimfs" 1593 #define RTEMS_FILESYSTEM_TYPE_DEVFS "devfs" 1594 #define RTEMS_FILESYSTEM_TYPE_FTPFS "ftpfs" 1595 #define RTEMS_FILESYSTEM_TYPE_TFTPFS "tftpfs" 1596 #define RTEMS_FILESYSTEM_TYPE_NFS "nfs" 1597 #define RTEMS_FILESYSTEM_TYPE_DOSFS "dosfs" 1598 #define RTEMS_FILESYSTEM_TYPE_RFS "rfs" 1599 #define RTEMS_FILESYSTEM_TYPE_JFFS2 "jffs2" 1610 const void *immutable_fs_info;
1650 RTEMS_FILESYSTEM_READ_ONLY,
1651 RTEMS_FILESYSTEM_READ_WRITE,
1652 RTEMS_FILESYSTEM_BAD_OPTIONS
1718 const char *mount_path
1775 const char *filesystemtype,
1776 rtems_filesystem_options_t options,
1794 const char *filesystemtype,
1795 rtems_filesystem_options_t options,
1864 const char *filesystemtype;
1865 rtems_filesystem_options_t options;
1870 rtems_filesystem_root_configuration;
1884 int (*firstOpen)(
int major,
int minor,
void *arg);
1885 int (*lastClose)(
int major,
int minor,
void *arg);
1886 int (*pollRead)(
int minor);
1887 ssize_t (*
write)(
int minor,
const char *buf,
size_t len);
1888 int (*setAttributes)(
int minor,
const struct termios *t);
1889 int (*stopRemoteTx)(
int minor);
1890 int (*startRemoteTx)(
int minor);
1891 int outputUsesInterrupts;
1911 rtems_device_major_number major,
1912 rtems_device_minor_number minor,
1933 int rtems_termios_enqueue_raw_characters(
1939 int rtems_termios_dequeue_characters(
1949 #define rtems_filesystem_pathconf(_mte) ((_mte)->pathconf_limits_and_options) 1954 #define rtems_filesystem_type(_mte) ((_mte)->type) 1959 #define rtems_filesystem_mount_point(_mte) ((_mte)->target) 1964 #define rtems_filesystem_mount_device(_mte) ((_mte)->dev) Parameter block for open/close.
Definition: libio.h:1346
void rtems_filesystem_initialize(void)
Base File System Initialization.
Definition: base_fs.c:32
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:23
int rtems_filesystem_default_utime(const rtems_filesystem_location_info_t *loc, time_t actime, time_t modtime)
Definition: default_utime.c:24
Contain file system specific information which is required to support fpathconf().
Definition: libio.h:1289
Interface to the statvfs() Set of API Methods.
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
bool rtems_filesystem_iterate(rtems_per_filesystem_routine routine, void *routine_arg)
Iterates over all file system types.
Definition: mount-mgr.c:39
const char * token
Definition: libio.h:99
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:28
const rtems_filesystem_operations_table rtems_filesystem_operations_default
File system operations table with default operations.
Definition: default_ops.c:24
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
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_fstat_t)(const rtems_filesystem_location_info_t *loc, struct stat *buf)
Gets a node status.
Definition: libio.h:881
int(* rtems_filesystem_close_t)(rtems_libio_t *iop)
Closes a node.
Definition: libio.h:742
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
const rtems_filesystem_table_t rtems_filesystem_table[]
Static table of file systems.
int rtems_filesystem_default_unmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_unmount.c:21
int rtems_filesystem_default_open(rtems_libio_t *iop, const char *path, int oflag, mode_t mode)
Definition: default_open.c:23
rtems_filesystem_global_location_t * rootloc
Definition: libio.h:141
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
int flags
Definition: libio.h:119
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
Definition: iterateoverthreads.c:23
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:65
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:35
rtems_filesystem_options_t
File system options.
Definition: libio.h:1649
void(* rtems_filesystem_eval_path_t)(rtems_filesystem_eval_path_context_t *ctx)
Path evaluation.
Definition: libio.h:157
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
File system table entry.
Definition: libio.h:1658
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
ssize_t rtems_filesystem_default_readlink(const rtems_filesystem_location_info_t *loc, char *buf, size_t bufsize)
Definition: default_readlink.c:24
Parameter block for ioctl.
Definition: libio.h:1355
ssize_t write(int fd, const void *buffer, size_t count)
Definition: write.c:30
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
Paramameter block for read/write.
Definition: libio.h:1334
int rtems_filesystem_default_fchmod(const rtems_filesystem_location_info_t *loc, mode_t mode)
Definition: default_fchmod.c:23
int rtems_filesystem_default_fcntl(rtems_libio_t *iop, int cmd)
Definition: default_fcntl.c:21
int(* rtems_filesystem_fcntl_t)(rtems_libio_t *iop, int cmd)
File control.
Definition: libio.h:944
int(* rtems_filesystem_poll_t)(rtems_libio_t *iop, int events)
Poll and select support.
Definition: libio.h:959
int rtems_filesystem_register(const char *type, rtems_filesystem_fsmount_me_t mount_h)
Registers a file system type.
Definition: mount-mgr.c:107
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_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
struct rtems_filesystem_table_t rtems_filesystem_table_t
File system table entry.
size_t tokenlen
Definition: libio.h:105
Definition: rtemscompat1.h:15
int rtems_filesystem_default_kqfilter(rtems_libio_t *iop, struct knote *kn)
Default kernel event filter handler.
Definition: default_kqfilter.c:29
File system node operations table.
Definition: libio.h:1005
void(* rtems_filesystem_fsunmount_me_t)(rtems_filesystem_mount_table_entry_t *mt_entry)
Destroys a file system instance.
Definition: libio.h:311
const rtems_filesystem_limits_and_options_t rtems_filesystem_default_pathconf
Default pathconf settings.
Definition: mount.c:30
int rtems_filesystem_default_poll(rtems_libio_t *iop, int events)
Default poll handler.
Definition: default_poll.c:31
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
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
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
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
ssize_t(* rtems_filesystem_write_t)(rtems_libio_t *iop, const void *buffer, size_t count)
Writes to a node.
Definition: libio.h:803
rtems_status_code
Classic API Status.
Definition: status.h:43
void(* rtems_filesystem_freenode_t)(const rtems_filesystem_location_info_t *loc)
Frees the location of a node.
Definition: libio.h:241
rtems_filesystem_location_info_t currentloc
Definition: libio.h:135
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
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:28
bool(* rtems_per_filesystem_routine)(const rtems_filesystem_table_t *fs_entry, void *arg)
Per file system type routine.
Definition: libio.h:1807
void rtems_filesystem_default_freenode(const rtems_filesystem_location_info_t *loc)
Definition: default_freenode.c:23
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:24
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 unmount(const char *mount_path)
Unmounts the file system instance at the specified mount path.
Definition: unmount.c:43
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
int rtems_filesystem_default_rmnod(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *loc)
Definition: default_rmnod.c:24
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_default_ftruncate(rtems_libio_t *iop, off_t length)
Definition: default_ftruncate.c:24
rtems_filesystem_global_location_t * startloc
Definition: libio.h:147
int rtems_filesystem_default_close(rtems_libio_t *iop)
Definition: default_close.c:18
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_filesystem_default_fsync_or_fdatasync_success(rtems_libio_t *iop)
Definition: default_fsync_success.c:28
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:28
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_fsync_t)(rtems_libio_t *iop)
Synchronizes changes to a file.
Definition: libio.h:914
Mount table entry.
Definition: libio.h:1606
File system operations table.
Definition: libio.h:472
int rtems_filesystem_default_ftruncate_directory(rtems_libio_t *iop, off_t length)
Definition: default_ftruncate_directory.c:29
int rtems_filesystem_default_mount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_mount.c:21
Path evaluation context.
Definition: libio.h:84
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_ftruncate_t)(rtems_libio_t *iop, off_t length)
Truncates a file to a specified length.
Definition: libio.h:898
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(rtems_libio_t *iop, off_t offset, int whence)
Definition: default_lseek.c:23
ssize_t rtems_filesystem_default_read(rtems_libio_t *iop, void *buffer, size_t count)
Definition: default_read.c:20
void rtems_filesystem_default_fsunmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_fsunmount.c:20
bool(* rtems_filesystem_mt_entry_visitor)(const rtems_filesystem_mount_table_entry_t *mt_entry, void *arg)
Mount table entry visitor.
Definition: libio.h:1838
int(* rtems_filesystem_clonenode_t)(rtems_filesystem_location_info_t *loc)
Clones a location.
Definition: libio.h:230
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
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_default_statvfs(const rtems_filesystem_location_info_t *loc, struct statvfs *buf)
Definition: default_statvfs.c:23
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_clonenode(rtems_filesystem_location_info_t *loc)
Definition: default_clone.c:28
ssize_t rtems_filesystem_default_write(rtems_libio_t *iop, const void *buffer, size_t count)
Definition: default_write.c:21
An open file data structure.
Definition: libio.h:1320
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:28
rtems_id unmount_task
Definition: libio.h:1643
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:28
const char * path
Definition: libio.h:88
Objects_Id rtems_id
Used to manage and manipulate RTEMS object identifiers.
Definition: types.h:83
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:24
int rtems_filesystem_unregister(const char *type)
Unregisters a file system type.
Definition: mount-mgr.c:141
size_t pathlen
Definition: libio.h:93
int(* rtems_filesystem_kqfilter_t)(rtems_libio_t *iop, struct knote *kn)
Kernel event filter support.
Definition: libio.h:975
int(* rtems_filesystem_fdatasync_t)(rtems_libio_t *iop)
Synchronizes the data of a file.
Definition: libio.h:929
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_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
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:24
int rtems_filesystem_default_ioctl(rtems_libio_t *iop, ioctl_command_t request, void *buffer)
Definition: default_ioctl.c:23
int rtems_filesystem_default_chown(const rtems_filesystem_location_info_t *loc, uid_t owner, gid_t group)
Definition: default_chown.c:23
int recursionlevel
Definition: libio.h:126
ssize_t(* rtems_filesystem_read_t)(rtems_libio_t *iop, void *buffer, size_t count)
Reads from a node.
Definition: libio.h:760
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:28
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
int rtems_filesystem_default_fsync_or_fdatasync(rtems_libio_t *iop)
Definition: default_fsync.c:23
Global file system location.
Definition: fs.h:81
File system location.
Definition: fs.h:53
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_mmap_t)(rtems_libio_t *iop, void **addr, size_t len, int prot, off_t off)
MMAP support.
Definition: libio.h:994