summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport/include/rtems
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2017-12-23 18:18:56 +1100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-01-25 08:45:26 +0100
commit2afb22b7e1ebcbe40373ff7e0efae7d207c655a9 (patch)
tree44759efe9374f13200a97e96d91bd9a2b7e5ce2a /cpukit/libcsupport/include/rtems
parentMAINTAINERS: Add myself to Write After Approval. (diff)
downloadrtems-2afb22b7e1ebcbe40373ff7e0efae7d207c655a9.tar.bz2
Remove make preinstall
A speciality of the RTEMS build system was the make preinstall step. It copied header files from arbitrary locations into the build tree. The header files were included via the -Bsome/build/tree/path GCC command line option. This has at least seven problems: * The make preinstall step itself needs time and disk space. * Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error. * There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult. * The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit. * An introduction of a new build system is difficult. * Include paths specified by the -B option are system headers. This may suppress warnings. * The parallel build had sporadic failures on some hosts. This patch removes the make preinstall step. All installed header files are moved to dedicated include directories in the source tree. Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc, etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g. erc32, imx, qoriq, etc. The new cpukit include directories are: * cpukit/include * cpukit/score/cpu/@RTEMS_CPU@/include * cpukit/libnetworking The new BSP include directories are: * bsps/include * bsps/@RTEMS_CPU@/include * bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include There are build tree include directories for generated files. The include directory order favours the most general header file, e.g. it is not possible to override general header files via the include path order. The "bootstrap -p" option was removed. The new "bootstrap -H" option should be used to regenerate the "headers.am" files. Update #3254.
Diffstat (limited to 'cpukit/libcsupport/include/rtems')
-rw-r--r--cpukit/libcsupport/include/rtems/assoc.h204
-rw-r--r--cpukit/libcsupport/include/rtems/deviceio.h88
-rw-r--r--cpukit/libcsupport/include/rtems/error.h135
-rw-r--r--cpukit/libcsupport/include/rtems/gxx_wrappers.h80
-rw-r--r--cpukit/libcsupport/include/rtems/libcsupport.h193
-rw-r--r--cpukit/libcsupport/include/rtems/libio.h1967
-rw-r--r--cpukit/libcsupport/include/rtems/libio_.h1049
-rw-r--r--cpukit/libcsupport/include/rtems/malloc.h201
-rw-r--r--cpukit/libcsupport/include/rtems/termiostypes.h602
-rw-r--r--cpukit/libcsupport/include/rtems/tod.h70
10 files changed, 0 insertions, 4589 deletions
diff --git a/cpukit/libcsupport/include/rtems/assoc.h b/cpukit/libcsupport/include/rtems/assoc.h
deleted file mode 100644
index 345761758a..0000000000
--- a/cpukit/libcsupport/include/rtems/assoc.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/**
- * @file rtems/assoc.h
- *
- * @brief RTEMS Associativity Routines
- *
- * RTEMS associativity routines. Mainly used to convert a value from
- * one space to another (eg: our errno's to host errno's and vice-versa)
- */
-
-
-#ifndef _RTEMS_RTEMS_ASSOC_H
-#define _RTEMS_RTEMS_ASSOC_H
-
-/**
- * @defgroup Associativity Associativity Routines
- */
-/**@{*/
-
-#include <stddef.h>
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct {
- const char *name;
- uint32_t local_value;
- uint32_t remote_value;
-} rtems_assoc_t;
-
-/*
- * Flag/marker for optional default value in each table
- */
-
-#define RTEMS_ASSOC_DEFAULT_NAME "(default)"
-
-/**
- * @brief RTEMS Associate Pointer by Name
- */
-const rtems_assoc_t *rtems_assoc_ptr_by_name(
- const rtems_assoc_t *,
- const char *
-);
-
-/**
- * @brief RTEMS Associate Pointer by Remote
- */
-const rtems_assoc_t *rtems_assoc_ptr_by_remote(
- const rtems_assoc_t *,
- uint32_t
-);
-
-uint32_t rtems_assoc_remote_by_local(
- const rtems_assoc_t *,
- uint32_t
-);
-
-/**
- * @brief RTEMS Associate Local by Remote
- */
-uint32_t rtems_assoc_local_by_remote(
- const rtems_assoc_t *,
- uint32_t
-);
-
-/**
- * @brief RTEMS Associate Remote by Name
- */
-uint32_t rtems_assoc_remote_by_name(
- const rtems_assoc_t *,
- const char *
-);
-
-/**
- * @brief RTEMS Associate Local by Name
- */
-uint32_t rtems_assoc_local_by_name(
- const rtems_assoc_t *,
- const char *
-);
-
-/**
- * @brief RTEMS Associate Name by Local
- */
-const char *rtems_assoc_name_by_local(
- const rtems_assoc_t *,
- uint32_t
-);
-
-/**
- * @brief RTEMS Associate Name by Remote
- */
-const char *rtems_assoc_name_by_remote(
- const rtems_assoc_t *,
- uint32_t
-);
-
-/**
- * @brief RTEMS Assoc Routines
- */
-uint32_t rtems_assoc_remote_by_local_bitfield(
- const rtems_assoc_t *,
- uint32_t
-);
-
-/**
- * @brief RTEMS Associate Name by Local Bitfield
- */
-char *rtems_assoc_name_by_local_bitfield(
- const rtems_assoc_t *,
- uint32_t ,
- char *
-);
-
-/**
- * @brief RTEMS Associate Name by Remote Bitfield
- */
-char *rtems_assoc_name_by_remote_bitfield(
- const rtems_assoc_t *,
- uint32_t ,
- char *
-);
-
-uint32_t rtems_assoc_local_by_remote_bitfield(
- const rtems_assoc_t *,
- uint32_t
-);
-
-/**
- * @brief RTEMS Associate Pointer by Local
- */
-const rtems_assoc_t *rtems_assoc_ptr_by_local(
- const rtems_assoc_t *ap,
- uint32_t local_value
-);
-
-#if defined(INSIDE_ASSOC)
-
-#define rtems_assoc_is_default(_ap) \
- ((_ap)->name && !strcmp((_ap)->name, RTEMS_ASSOC_DEFAULT_NAME))
-
-/**
- * @brief RTEMS Associate Bad Name
- *
- * what to return if a value is not found
- * this is not reentrant, but it really shouldn't be invoked anyway
- */
-const char *rtems_assoc_name_bad(
- uint32_t bad_value
-);
-#endif
-
-typedef struct {
- uint32_t bits;
- const char *name;
-} rtems_assoc_32_pair;
-
-/**
- * @brief Converts the specified value into a text representation.
- *
- * @param[in] value The value to convert.
- * @param[in] buffer The buffer for the text representation.
- * @param[in] buffer_size The buffer size in characters.
- * @param[in] pairs Names for particular bits.
- * @param[in] pair_count Count of pairs.
- * @param[in] separator Separator between individual names.
- * @param[in] fallback Fallback value in case no bits contained in the pairs
- * are set in the value.
- *
- * @retval The length of the text representation. May be greater than or equal
- * to the buffer size if truncation occurred.
- */
-size_t rtems_assoc_32_to_string(
- uint32_t value,
- char *buffer,
- size_t buffer_size,
- const rtems_assoc_32_pair *pairs,
- size_t pair_count,
- const char *separator,
- const char *fallback
-);
-
-/**
- * @brief Converts the specified thread states into a text representation.
- *
- * @param[in] states The thread states to convert.
- * @param[in] buffer The buffer for the text representation.
- * @param[in] buffer_size The buffer size in characters.
- *
- * @retval The length of the text representation. May be greater than or equal
- * to the buffer size if truncation occurred.
- */
-size_t rtems_assoc_thread_states_to_string(
- uint32_t states,
- char *buffer,
- size_t buffer_size
-);
-
-#ifdef __cplusplus
-}
-#endif
-/**@}*/
-#endif /* ! _RTEMS_RTEMS_ASSOC_H */
diff --git a/cpukit/libcsupport/include/rtems/deviceio.h b/cpukit/libcsupport/include/rtems/deviceio.h
deleted file mode 100644
index a448fc7bb4..0000000000
--- a/cpukit/libcsupport/include/rtems/deviceio.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * @file
- *
- * @brief Operations on IMFS Device Nodes
- */
-
-/*
- * COPYRIGHT (c) 1989-2012.
- * On-Line Applications Research Corporation (OAR).
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef _RTEMS_DEVICEIO_H
-#define _RTEMS_DEVICEIO_H
-
-#include <rtems/libio.h>
-
-/**
- * @defgroup IMFSDevices IMFS Device IO Handler
- *
- * @ingroup IMFS
- *
- * This contains the interface to device drivers using the RTEMS Classic API.
- */
-/**@{*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/**
- * @brief IMFS device node handlers.
- *
- * IMFS Device Node Handlers
- *
- * This file contains the set of handlers used to map operations on
- * IMFS device nodes onto calls to the RTEMS Classic API IO Manager.
- */
-int rtems_deviceio_open(
- rtems_libio_t *iop,
- const char *path,
- int oflag,
- mode_t mode,
- rtems_device_major_number major,
- rtems_device_minor_number minor
-);
-
-int rtems_deviceio_close(
- rtems_libio_t *iop,
- rtems_device_major_number major,
- rtems_device_minor_number minor
-);
-
-ssize_t rtems_deviceio_read(
- rtems_libio_t *iop,
- void *buf,
- size_t nbyte,
- rtems_device_major_number major,
- rtems_device_minor_number minor
-);
-
-ssize_t rtems_deviceio_write(
- rtems_libio_t *iop,
- const void *buf,
- size_t nbyte,
- rtems_device_major_number major,
- rtems_device_minor_number minor
-);
-
-int rtems_deviceio_control(
- rtems_libio_t *iop,
- ioctl_command_t command,
- void *buffer,
- rtems_device_major_number major,
- rtems_device_minor_number minor
-);
-
-#ifdef __cplusplus
-}
-#endif
-/* __cplusplus */
-
-/**@}*/
-
-#endif /* _RTEMS_DEVICEIO_H */
diff --git a/cpukit/libcsupport/include/rtems/error.h b/cpukit/libcsupport/include/rtems/error.h
deleted file mode 100644
index 617f59642b..0000000000
--- a/cpukit/libcsupport/include/rtems/error.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- * @file rtems/error.h
- *
- * @brief RTEMS Error Reporting
- *
- * Defines and externs for rtems error reporting
- *
- * These routines provide general purpose error reporting.
- * rtems_error reports an error to stderr and allows use of
- * printf style formatting. A newline is appended to all messages.
- *
- * error_flag can be specified as any of the following:
- *
- * RTEMS_ERROR_ERRNO -- include errno text in output
- * RTEMS_ERROR_PANIC -- halts local system after output
- * RTEMS_ERROR_ABORT -- abort after output
- *
- * It can also include a rtems_status value which can be OR'd
- * with the above flags. *
- *
- * Example 1:
- * @code
- * #include <rtems.h>
- * #include <rtems/error.h>
- * rtems_error(0, "stray interrupt %d", intr);
- * @endcode
- *
- * Example 2:
- * @code
- * if ((status = rtems_task_create(...)) != RTEMS_SUCCCESSFUL)
- * {
- * rtems_error(status | RTEMS_ERROR_ABORT,
- * "could not create task");
- * }
- * @endcode
- *
- * Example 3:
- * @code
- * if ((fd = open(pathname, O_RDNLY)) < 0)
- * {
- * rtems_error(RTEMS_ERROR_ERRNO, "open of '%s' failed", pathname);
- * goto failed;
- * }
- * @endcode
- */
-
-#ifndef _RTEMS_RTEMS_ERROR_H
-#define _RTEMS_RTEMS_ERROR_H
-
-#include <rtems/rtems/status.h>
-#include <rtems/fatal.h>
-
-#include <stdarg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @defgroup ErrorPanicSupport Error And Panic Support
- *
- * @ingroup libcsupport
- *
- * @brief Defines and externs for rtems error reporting
- *
- */
-typedef Internal_errors_t rtems_error_code_t;
-
-/*
- * rtems_error(), rtems_verror() and rtems_panic() support
- */
-
-#if 0
-/* not 16bit-int host clean */
-#define RTEMS_ERROR_ERRNO (1<<((sizeof(rtems_error_code_t) * CHAR_BIT) - 2)) /* hi bit; use 'errno' */
-#define RTEMS_ERROR_PANIC (RTEMS_ERROR_ERRNO / 2) /* err fatal; no return */
-#define RTEMS_ERROR_ABORT (RTEMS_ERROR_ERRNO / 4) /* err is fatal; panic */
-#else
-#define RTEMS_ERROR_ERRNO (0x40000000) /* hi bit; use 'errno' */
-#define RTEMS_ERROR_PANIC (0x20000000) /* err fatal; no return */
-#define RTEMS_ERROR_ABORT (0x10000000) /* err is fatal; panic */
-#endif
-
-#define RTEMS_ERROR_MASK \
- (RTEMS_ERROR_ERRNO | RTEMS_ERROR_ABORT | RTEMS_ERROR_PANIC) /* all */
-
-/**
- * @brief Report an Error
- *
- * @param[in] error_code can be specified as any of the following:
- * RTEMS_ERROR_ERRNO -- include errno text in output
- * RTEMS_ERROR_PANIC -- halts local system after output
- * RTEMS_ERROR_ABORT -- abort after output
- *
- * @param[in] printf_format is a normal printf(3) format string,
- * with its concommitant arguments
- *
- * @return the number of characters written.
- */
-int rtems_error(
- rtems_error_code_t error_code,
- const char *printf_format,
- ...
-);
-
-/**
- * @brief Report an Error
- *
- * @param[in] error_code can be specified as any of the following:
- * RTEMS_ERROR_ERRNO -- include errno text in output
- * RTEMS_ERROR_PANIC -- halts local system after output
- * RTEMS_ERROR_ABORT -- abort after output
- *
- * @param[in] printf_format is a normal printf(3) format string,
- * with its concommitant arguments
- * @param[in] arglist is a varargs list corresponding to
- * printf_format
- *
- * @return the number of characters written.
- */
-int rtems_verror(
- rtems_error_code_t error_code,
- const char *printf_format,
- va_list arglist
-);
-
-extern int rtems_panic_in_progress;
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif
-/* end of include file */
diff --git a/cpukit/libcsupport/include/rtems/gxx_wrappers.h b/cpukit/libcsupport/include/rtems/gxx_wrappers.h
deleted file mode 100644
index 94502b937f..0000000000
--- a/cpukit/libcsupport/include/rtems/gxx_wrappers.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * @file rtems/gxx_wrappers.h
- *
- * RTEMS threads compatibility routines for libgcc2.
- */
-
-/*
- * by: Rosimildo da Silva (rdasilva@connecttel.com)
- *
- * Used ideas from:
- * W. Eric Norum
- * Canadian Light Source
- * University of Saskatchewan
- * Saskatoon, Saskatchewan, CANADA
- * eric@cls.usask.ca
- *
- * Eric sent some e-mail in the rtems-list as a start point for this
- * module implementation.
- */
-
-#ifndef __GCC_WRAPPERS_h
-#define __GCC_WRAPPERS_h
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/**
- * @defgroup GxxWrappersSupport Gxx Wrappers Support
- *
- * @ingroup libcsupport
- *
- * @brief RTEMS Threads Compatibility Routines for Libgcc2
- */
-
-/*
- * These typedefs should match with the ones defined in the file
- * gcc/gthr-rtems.h in the gcc distribution.
- */
-typedef void *__gthread_key_t;
-typedef int __gthread_once_t;
-typedef void *__gthread_mutex_t;
-typedef void *__gthread_recursive_mutex_t;
-
-int rtems_gxx_once(__gthread_once_t *once, void (*func) (void));
-
-int rtems_gxx_key_create (__gthread_key_t *key, void (*dtor) (void *));
-
-int rtems_gxx_key_delete (__gthread_key_t key);
-
-void *rtems_gxx_getspecific(__gthread_key_t key);
-
-int rtems_gxx_setspecific(__gthread_key_t key, const void *ptr);
-
-/*
- * MUTEX support
- */
-void rtems_gxx_mutex_init (__gthread_mutex_t *mutex);
-
-int rtems_gxx_mutex_lock (__gthread_mutex_t *mutex);
-
-int rtems_gxx_mutex_destroy (__gthread_mutex_t *mutex);
-
-int rtems_gxx_mutex_trylock (__gthread_mutex_t *mutex);
-
-int rtems_gxx_mutex_unlock (__gthread_mutex_t *mutex);
-
-void rtems_gxx_recursive_mutex_init(__gthread_recursive_mutex_t *mutex);
-
-int rtems_gxx_recursive_mutex_lock(__gthread_recursive_mutex_t *mutex);
-
-int rtems_gxx_recursive_mutex_trylock(__gthread_recursive_mutex_t *mutex);
-
-int rtems_gxx_recursive_mutex_unlock(__gthread_recursive_mutex_t *mutex);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __GCC_WRAPPERS_h */
diff --git a/cpukit/libcsupport/include/rtems/libcsupport.h b/cpukit/libcsupport/include/rtems/libcsupport.h
deleted file mode 100644
index 51607f9ea1..0000000000
--- a/cpukit/libcsupport/include/rtems/libcsupport.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * @file
- *
- * @brief Standard C Library Support
- *
- * This include file contains the information regarding the
- * RTEMS specific support for the standard C library.
- */
-
-/*
- * COPYRIGHT (c) 1989-2011.
- * On-Line Applications Research Corporation (OAR).
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef _RTEMS_RTEMS_LIBCSUPPORT_H
-#define _RTEMS_RTEMS_LIBCSUPPORT_H
-
-#include <sys/types.h>
-#include <stdint.h>
-
-#include <rtems/score/heap.h>
-#include <rtems/rtems/tasks.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @defgroup libcsupport Standard C Library Support
- *
- * @brief RTEMS Specific Support for the Standard C Library
- *
- */
-/**@{**/
-
-extern void malloc_dump(void);
-
-/**
- * @brief Malloc walk.
- */
-extern bool malloc_walk(int source, bool printf_enabled);
-
-/**
- * @brief Set malloc heap pointer.
- *
- * This routine is primarily used for debugging.
- */
-void malloc_set_heap_pointer(Heap_Control *new_heap);
-
-/**
- * @brief Get malloc heap pointer.
- *
- * This routine is primarily used for debugging.
- */
-Heap_Control *malloc_get_heap_pointer( void );
-
-/**
- * @brief Get free malloc information.
- *
- * Find amount of free heap remaining
- */
-extern size_t malloc_free_space(void);
-
-/**
- * @brief Get malloc status information.
- *
- * Find amount of free heap remaining.
- */
-extern int malloc_info(Heap_Information_block *the_info);
-
-/*
- * Prototypes required to install newlib reentrancy user extension
- */
-bool newlib_create_hook(
- rtems_tcb *current_task,
- rtems_tcb *creating_task
-);
-
-void newlib_terminate_hook(
- rtems_tcb *current_task
-);
-
-#define RTEMS_NEWLIB_EXTENSION \
-{ \
- newlib_create_hook, /* rtems_task_create */ \
- 0, /* rtems_task_start */ \
- 0, /* rtems_task_restart */ \
- 0, /* rtems_task_delete */ \
- 0, /* task_switch */ \
- 0, /* task_begin */ \
- 0, /* task_exitted */ \
- 0, /* fatal */ \
- newlib_terminate_hook /* thread terminate */ \
-}
-
-typedef struct {
- uint32_t active_barriers;
- uint32_t active_extensions;
- uint32_t active_message_queues;
- uint32_t active_partitions;
- uint32_t active_periods;
- uint32_t active_ports;
- uint32_t active_regions;
- uint32_t active_semaphores;
- uint32_t active_tasks;
- uint32_t active_timers;
-} rtems_resource_rtems_api;
-
-typedef struct {
- uint32_t active_message_queues;
- uint32_t active_semaphores;
- uint32_t active_threads;
- uint32_t active_timers;
-} rtems_resource_posix_api;
-
-typedef struct {
- Heap_Information_block workspace_info;
- Heap_Information_block heap_info;
- uint32_t active_posix_key_value_pairs;
- uint32_t active_posix_keys;
- rtems_resource_rtems_api rtems_api;
- rtems_resource_posix_api posix_api;
- int open_files;
-} rtems_resource_snapshot;
-
-/**
- * @brief Tasks a snapshot of the resource usage of the system.
- *
- * @param[out] snapshot The snapshot of used resources.
- *
- * @see rtems_resource_snapshot_equal() and rtems_resource_snapshot_check().
- *
- * @code
- * #include <assert.h>
- *
- * #include <rtems/libcsupport.h>
- *
- * void example(void)
- * {
- * rtems_resource_snapshot before;
- *
- * test_setup();
- * rtems_resource_snapshot_take(&before);
- * test();
- * assert(rtems_resource_snapshot_check(&before));
- * test_cleanup();
- * }
- * @endcode
- */
-void rtems_resource_snapshot_take(rtems_resource_snapshot *snapshot);
-
-/**
- * @brief Compares two resource snapshots for equality.
- *
- * @param[in] a One resource snapshot.
- * @param[in] b Another resource snapshot.
- *
- * @retval true The resource snapshots are equal.
- * @retval false Otherwise.
- *
- * @see rtems_resource_snapshot_take().
- */
-bool rtems_resource_snapshot_equal(
- const rtems_resource_snapshot *a,
- const rtems_resource_snapshot *b
-);
-
-/**
- * @brief Takes a new resource snapshot and checks that it is equal to the
- * given resource snapshot.
- *
- * @param[in] snapshot The resource snapshot used for comparison with the new
- * resource snapshot.
- *
- * @retval true The resource snapshots are equal.
- * @retval false Otherwise.
- *
- * @see rtems_resource_snapshot_take().
- */
-bool rtems_resource_snapshot_check(const rtems_resource_snapshot *snapshot);
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-/* end of include file */
diff --git a/cpukit/libcsupport/include/rtems/libio.h b/cpukit/libcsupport/include/rtems/libio.h
deleted file mode 100644
index 9d30dafddf..0000000000
--- a/cpukit/libcsupport/include/rtems/libio.h
+++ /dev/null
@@ -1,1967 +0,0 @@
-/**
- * @file
- *
- * @ingroup LibIO
- *
- * @brief Basic IO API
- *
- * This file contains the support infrastructure used to manage the
- * table of integer style file descriptors used by the low level
- * POSIX system calls like open(), read, fstat(), etc.
- */
-
-/*
- * COPYRIGHT (c) 1989-2008.
- * On-Line Applications Research Corporation (OAR).
- *
- * Modifications to support reference counting in the file system are
- * Copyright (c) 2012 embedded brains GmbH.
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef _RTEMS_RTEMS_LIBIO_H
-#define _RTEMS_RTEMS_LIBIO_H
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioccom.h>
-#include <sys/statvfs.h>
-#include <sys/uio.h>
-
-#include <unistd.h>
-#include <termios.h>
-
-#include <rtems.h>
-#include <rtems/fs.h>
-#include <rtems/chain.h>
-#include <rtems/score/atomic.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct knote;
-
-/**
- * @defgroup LibIOFSOps File System Operations
- *
- * @ingroup LibIO
- *
- * @brief File system operations.
- */
-/**@{**/
-
-/**
- * @brief Locks a file system instance.
- *
- * This lock must allow nesting.
- *
- * @param[in, out] mt_entry The mount table entry of the file system instance.
- *
- * @see rtems_filesystem_default_lock().
- */
-typedef void (*rtems_filesystem_mt_entry_lock_t)(
- const rtems_filesystem_mount_table_entry_t *mt_entry
-);
-
-/**
- * @brief Unlocks a file system instance.
- *
- * @param[in, out] mt_entry The mount table entry of the file system instance.
- *
- * @see rtems_filesystem_default_unlock().
- */
-typedef void (*rtems_filesystem_mt_entry_unlock_t)(
- const rtems_filesystem_mount_table_entry_t *mt_entry
-);
-
-/**
- * @brief Path evaluation context.
- */
-typedef struct {
- /**
- * The contents of the remaining path to be evaluated.
- */
- const char *path;
-
- /**
- * The length of the remaining path to be evaluated.
- */
- size_t pathlen;
-
- /**
- * The contents of the token to be evaluated with respect to the current
- * location.
- */
- const char *token;
-
- /**
- * The length of the token to be evaluated with respect to the current
- * location.
- */
- size_t tokenlen;
-
- /**
- * The path evaluation is controlled by the following flags
- * - RTEMS_FS_PERMS_READ,
- * - RTEMS_FS_PERMS_WRITE,
- * - RTEMS_FS_PERMS_EXEC,
- * - RTEMS_FS_FOLLOW_HARD_LINK,
- * - RTEMS_FS_FOLLOW_SYM_LINK,
- * - RTEMS_FS_MAKE,
- * - RTEMS_FS_EXCLUSIVE,
- * - RTEMS_FS_ACCEPT_RESIDUAL_DELIMITERS, and
- * - RTEMS_FS_REJECT_TERMINAL_DOT.
- */
- int flags;
-
- /**
- * Symbolic link evaluation is a recursive operation. This field helps to
- * limit the recursion level and thus prevents a stack overflow. The
- * recursion level is limited by RTEMS_FILESYSTEM_SYMLOOP_MAX.
- */
- int recursionlevel;
-
- /**
- * This is the current file system location of the evaluation process.
- * Tokens are evaluated with respect to the current location. The token
- * interpretation may change the current location. The purpose of the path
- * evaluation is to change the start location into a final current location
- * according to the path.
- */
- rtems_filesystem_location_info_t currentloc;
-
- /**
- * The location of the root directory of the user environment during the
- * evaluation start.
- */
- rtems_filesystem_global_location_t *rootloc;
-
- /**
- * The start location of the evaluation process. The start location my
- * change during symbolic link evaluation.
- */
- rtems_filesystem_global_location_t *startloc;
-} rtems_filesystem_eval_path_context_t;
-
-/**
- * @brief Path evaluation.
- *
- * @param[in, out] ctx The path evaluation context.
- *
- * @see rtems_filesystem_default_eval_path().
- */
-typedef void (*rtems_filesystem_eval_path_t)(
- rtems_filesystem_eval_path_context_t *ctx
-);
-
-/**
- * @brief Creates a new link for the existing file.
- *
- * @param[in] parentloc The location of the parent of the new link.
- * @param[in] targetloc The location of the target file.
- * @param[in] name Name for the new link.
- * @param[in] namelen Length of the name for the new link in characters.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_link().
- */
-typedef 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
-);
-
-/**
- * @brief Changes the mode of a node.
- *
- * @param[in] loc The location of the node.
- * @param[in] mode The new mode of the node
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_fchmod().
- */
-typedef int (*rtems_filesystem_fchmod_t)(
- const rtems_filesystem_location_info_t *loc,
- mode_t mode
-);
-
-/**
- * @brief Changes owner and group of a node.
- *
- * @param[in] loc The location of the node.
- * @param[in] owner User ID for the node.
- * @param[in] group Group ID for the node.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_chown().
- */
-typedef int (*rtems_filesystem_chown_t)(
- const rtems_filesystem_location_info_t *loc,
- uid_t owner,
- gid_t group
-);
-
-/**
- * @brief Clones a location.
- *
- * The location is initialized with a bitwise copy of an existing location.
- * The caller must ensure that this location is protected from a release during
- * the clone operation. After a successful clone operation the clone will be
- * added to the location chain of the corresponding mount table entry.
- *
- * @param[in, out] loc Location to clone.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_clonenode().
- */
-typedef int (*rtems_filesystem_clonenode_t)(
- rtems_filesystem_location_info_t *loc
-);
-
-/**
- * @brief Frees the location of a node.
- *
- * @param[in] loc The location of the node.
- *
- * @see rtems_filesystem_default_freenode().
- */
-typedef void (*rtems_filesystem_freenode_t)(
- const rtems_filesystem_location_info_t *loc
-);
-
-/**
- * @brief Mounts a file system instance in a mount point (directory).
- *
- * The mount point belongs to the file system instance of the handler and is
- * specified by a field of the mount table entry. The handler must check that
- * the mount point is capable of mounting a file system instance. This is the
- * last step during the mount process. The file system instance is fully
- * initialized at this point.
- *
- * @param[in] mt_entry The mount table entry.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_mount().
- */
-typedef int (*rtems_filesystem_mount_t) (
- rtems_filesystem_mount_table_entry_t *mt_entry
-);
-
-/**
- * @brief Initializes a file system instance.
- *
- * This function must initialize the file system root node in the mount table
- * entry.
- *
- * @param[in] mt_entry The mount table entry.
- * @param[in] data The data provided by the user.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- */
-typedef int (*rtems_filesystem_fsmount_me_t)(
- rtems_filesystem_mount_table_entry_t *mt_entry,
- const void *data
-);
-
-/**
- * @brief Unmounts a file system instance in a mount point (directory).
- *
- * In case this function is successful the file system instance will be marked
- * as unmounted. The file system instance will be destroyed when the last
- * reference to it vanishes.
- *
- * @param[in] mt_entry The mount table entry.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_unmount().
- */
-typedef int (*rtems_filesystem_unmount_t) (
- rtems_filesystem_mount_table_entry_t *mt_entry
-);
-
-/**
- * @brief Destroys a file system instance.
- *
- * The mount point node location of the mount table entry is invalid. This
- * handler must free the file system root location and all remaining resources
- * of the file system instance.
- *
- * @param[in] mt_entry The mount table entry.
- *
- * @see rtems_filesystem_default_fsunmount().
- */
-typedef void (*rtems_filesystem_fsunmount_me_t)(
- rtems_filesystem_mount_table_entry_t *mt_entry
-);
-
-/**
- * @brief Tests if the node of one location is equal to the node of the other
- * location.
- *
- * The caller ensures that both nodes are within the same file system instance.
- *
- * @param[in] a The one location.
- * @param[in] b The other location.
- *
- * @retval true The nodes of the locations are equal.
- * @retval false Otherwise.
- *
- * @see rtems_filesystem_default_are_nodes_equal().
- */
-typedef bool (*rtems_filesystem_are_nodes_equal_t)(
- const rtems_filesystem_location_info_t *a,
- const rtems_filesystem_location_info_t *b
-);
-
-/**
- * @brief Creates a new node.
- *
- * This handler should create a new node according to the parameters.
- *
- * @param[in] parentloc The location of the parent of the new node.
- * @param[in] name Name for the new node.
- * @param[in] namelen Length of the name for the new node in characters.
- * @param[in] mode Mode for the new node.
- * @param[in] dev Optional device identifier for the new node.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_mknod().
- */
-typedef int (*rtems_filesystem_mknod_t)(
- const rtems_filesystem_location_info_t *parentloc,
- const char *name,
- size_t namelen,
- mode_t mode,
- dev_t dev
-);
-
-/**
- * @brief Removes a node.
- *
- * @param[in] parentloc The location of the parent of the node.
- * @param[in] loc The location of the node.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_rmnod().
- */
-typedef int (*rtems_filesystem_rmnod_t)(
- const rtems_filesystem_location_info_t *parentloc,
- const rtems_filesystem_location_info_t *loc
-);
-
-/**
- * @brief Set node access and modification times.
- *
- * @param[in] loc The location of the node.
- * @param[in] actime Access time for the node.
- * @param[in] modtime Modification for the node.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_utime().
- */
-typedef int (*rtems_filesystem_utime_t)(
- const rtems_filesystem_location_info_t *loc,
- time_t actime,
- time_t modtime
-);
-
-/**
- * @brief Makes a symbolic link to a node.
- *
- * @param[in] parentloc The location of the parent of the new symbolic link.
- * @param[in] name Name for the new symbolic link.
- * @param[in] namelen Length of the name for the new symbolic link in
- * characters.
- * @param[in] target Contents for the symbolic link.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_symlink().
- */
-typedef int (*rtems_filesystem_symlink_t)(
- const rtems_filesystem_location_info_t *parentloc,
- const char *name,
- size_t namelen,
- const char *target
-);
-
-/**
- * @brief Reads the contents of a symbolic link.
- *
- * @param[in] loc The location of the symbolic link.
- * @param[out] buf The buffer for the contents.
- * @param[in] bufsize The size of the buffer in characters.
- *
- * @retval non-negative Size of the actual contents in characters.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_readlink().
- */
-typedef ssize_t (*rtems_filesystem_readlink_t)(
- const rtems_filesystem_location_info_t *loc,
- char *buf,
- size_t bufsize
-);
-
-/**
- * @brief Renames a node.
- *
- * @param[in] oldparentloc The location of the parent of the old node.
- * @param[in] oldloc The location of the old node.
- * @param[in] newparentloc The location of the parent of the new node.
- * @param[in] name Name for the new node.
- * @param[in] namelen Length of the name for the new node in characters.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_rename().
- */
-typedef 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
-);
-
-/**
- * @brief Gets file system information.
- *
- * @param[in] loc The location of a node.
- * @param[out] buf Buffer for file system information.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_statvfs().
- */
-typedef int (*rtems_filesystem_statvfs_t)(
- const rtems_filesystem_location_info_t *loc,
- struct statvfs *buf
-);
-
-/**
- * @brief File system operations table.
- */
-struct _rtems_filesystem_operations_table {
- rtems_filesystem_mt_entry_lock_t lock_h;
- rtems_filesystem_mt_entry_unlock_t unlock_h;
- rtems_filesystem_eval_path_t eval_path_h;
- rtems_filesystem_link_t link_h;
- rtems_filesystem_are_nodes_equal_t are_nodes_equal_h;
- rtems_filesystem_mknod_t mknod_h;
- rtems_filesystem_rmnod_t rmnod_h;
- rtems_filesystem_fchmod_t fchmod_h;
- rtems_filesystem_chown_t chown_h;
- rtems_filesystem_clonenode_t clonenod_h;
- rtems_filesystem_freenode_t freenod_h;
- rtems_filesystem_mount_t mount_h;
- rtems_filesystem_unmount_t unmount_h;
- rtems_filesystem_fsunmount_me_t fsunmount_me_h;
- rtems_filesystem_utime_t utime_h;
- rtems_filesystem_symlink_t symlink_h;
- rtems_filesystem_readlink_t readlink_h;
- rtems_filesystem_rename_t rename_h;
- rtems_filesystem_statvfs_t statvfs_h;
-};
-
-/**
- * @brief File system operations table with default operations.
- */
-extern const rtems_filesystem_operations_table
- rtems_filesystem_operations_default;
-
-/**
- * @brief Obtains the IO library mutex.
- *
- * @see rtems_filesystem_mt_entry_lock_t.
- */
-void rtems_filesystem_default_lock(
- const rtems_filesystem_mount_table_entry_t *mt_entry
-);
-
-/**
- * @brief Releases the IO library mutex.
- *
- * @see rtems_filesystem_mt_entry_unlock_t.
- */
-void rtems_filesystem_default_unlock(
- const rtems_filesystem_mount_table_entry_t *mt_entry
-);
-
-/**
- * @brief Terminates the path evaluation and replaces the current location with
- * the null location.
- *
- * @see rtems_filesystem_eval_path_t.
- */
-void rtems_filesystem_default_eval_path(
- rtems_filesystem_eval_path_context_t *ctx
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_link_t.
- */
-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
-);
-
-/**
- * @brief Tests if the node access pointer of one location is equal to
- * the node access pointer of the other location.
- *
- * @param[in] a The one location.
- * @param[in] b The other location.
- *
- * @retval true The node access pointers of the locations are equal.
- * @retval false Otherwise.
- *
- * @see rtems_filesystem_are_nodes_equal_t.
- */
-bool rtems_filesystem_default_are_nodes_equal(
- const rtems_filesystem_location_info_t *a,
- const rtems_filesystem_location_info_t *b
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_mknod_t.
- */
-int rtems_filesystem_default_mknod(
- const rtems_filesystem_location_info_t *parentloc,
- const char *name,
- size_t namelen,
- mode_t mode,
- dev_t dev
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_rmnod_t.
- */
-int rtems_filesystem_default_rmnod(
- const rtems_filesystem_location_info_t *parentloc,
- const rtems_filesystem_location_info_t *loc
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_fchmod_t.
- */
-int rtems_filesystem_default_fchmod(
- const rtems_filesystem_location_info_t *loc,
- mode_t mode
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_chown_t.
- */
-int rtems_filesystem_default_chown(
- const rtems_filesystem_location_info_t *loc,
- uid_t owner,
- gid_t group
-);
-
-/**
- * @retval 0 Always.
- *
- * @see rtems_filesystem_clonenode_t.
- */
-int rtems_filesystem_default_clonenode(
- rtems_filesystem_location_info_t *loc
-);
-
-/**
- * @see rtems_filesystem_freenode_t.
- */
-void rtems_filesystem_default_freenode(
- const rtems_filesystem_location_info_t *loc
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_mount_t.
- */
-int rtems_filesystem_default_mount (
- rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_unmount_t.
- */
-int rtems_filesystem_default_unmount(
- rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_fsunmount_me_t.
- */
-void rtems_filesystem_default_fsunmount(
- rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_utime_t.
- */
-int rtems_filesystem_default_utime(
- const rtems_filesystem_location_info_t *loc,
- time_t actime,
- time_t modtime
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_symlink_t.
- */
-int rtems_filesystem_default_symlink(
- const rtems_filesystem_location_info_t *parentloc,
- const char *name,
- size_t namelen,
- const char *target
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_readlink_t.
- */
-ssize_t rtems_filesystem_default_readlink(
- const rtems_filesystem_location_info_t *loc,
- char *buf,
- size_t bufsize
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_rename_t.
- */
-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
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_statvfs_t.
- */
-int rtems_filesystem_default_statvfs(
- const rtems_filesystem_location_info_t *loc,
- struct statvfs *buf
-);
-
-/** @} */
-
-/**
- * @defgroup LibIOFSHandler File System Node Handler
- *
- * @ingroup LibIO
- *
- * @brief File system node handler.
- */
-/**@{**/
-
-/**
- * @brief Opens a node.
- *
- * @param[in, out] iop The IO pointer.
- * @param[in] path The path.
- * @param[in] oflag The open flags.
- * @param[in] mode Optional mode for node creation.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_open().
- */
-typedef int (*rtems_filesystem_open_t)(
- rtems_libio_t *iop,
- const char *path,
- int oflag,
- mode_t mode
-);
-
-/**
- * @brief Closes a node.
- *
- * @param[in, out] iop The IO pointer.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_close().
- */
-typedef int (*rtems_filesystem_close_t)(
- rtems_libio_t *iop
-);
-
-/**
- * @brief Reads from a node.
- *
- * This handler is responsible to update the offset field of the IO descriptor.
- *
- * @param[in, out] iop The IO pointer.
- * @param[out] buffer The buffer for read data.
- * @param[in] count The size of the buffer in characters.
- *
- * @retval non-negative Count of read characters.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_read().
- */
-typedef ssize_t (*rtems_filesystem_read_t)(
- rtems_libio_t *iop,
- void *buffer,
- size_t count
-);
-
-/**
- * @brief Reads an IO vector from a node.
- *
- * This handler is responsible to update the offset field of the IO descriptor.
- *
- * @param[in, out] iop The IO pointer.
- * @param[in] iov The IO vector with buffer for read data. The caller must
- * ensure that the IO vector values are valid.
- * @param[in] iovcnt The count of buffers in the IO vector.
- * @param[in] total The total count of bytes in the buffers in the IO vector.
- *
- * @retval non-negative Count of read characters.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_readv().
- */
-typedef ssize_t (*rtems_filesystem_readv_t)(
- rtems_libio_t *iop,
- const struct iovec *iov,
- int iovcnt,
- ssize_t total
-);
-
-/**
- * @brief Writes to a node.
- *
- * This handler is responsible to update the offset field of the IO descriptor.
- *
- * @param[in, out] iop The IO pointer.
- * @param[out] buffer The buffer for write data.
- * @param[in] count The size of the buffer in characters.
- *
- * @retval non-negative Count of written characters.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_write().
- */
-typedef ssize_t (*rtems_filesystem_write_t)(
- rtems_libio_t *iop,
- const void *buffer,
- size_t count
-);
-
-/**
- * @brief Writes an IO vector to a node.
- *
- * This handler is responsible to update the offset field of the IO descriptor.
- *
- * @param[in, out] iop The IO pointer.
- * @param[in] iov The IO vector with buffer for write data. The caller must
- * ensure that the IO vector values are valid.
- * @param[in] iovcnt The count of buffers in the IO vector.
- * @param[in] total The total count of bytes in the buffers in the IO vector.
- *
- * @retval non-negative Count of written characters.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_writev().
- */
-typedef ssize_t (*rtems_filesystem_writev_t)(
- rtems_libio_t *iop,
- const struct iovec *iov,
- int iovcnt,
- ssize_t total
-);
-
-/**
- * @brief IO control of a node.
- *
- * @param[in, out] iop The IO pointer.
- * @param[in] request The IO control request.
- * @param[in, out] buffer The buffer for IO control request data.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_ioctl().
- */
-typedef int (*rtems_filesystem_ioctl_t)(
- rtems_libio_t *iop,
- ioctl_command_t request,
- void *buffer
-);
-
-/**
- * @brief Moves the read/write file offset.
- *
- * @param[in, out] iop The IO pointer.
- * @param[in] offset The offset.
- * @param[in] whence The reference position for the offset.
- *
- * @retval non-negative The new offset from the beginning of the file.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_lseek(),
- * rtems_filesystem_default_lseek_file(), and
- * rtems_filesystem_default_lseek_directory().
- */
-typedef off_t (*rtems_filesystem_lseek_t)(
- rtems_libio_t *iop,
- off_t offset,
- int whence
-);
-
-/**
- * @brief Gets a node status.
- *
- * @param[in, out] iop The IO pointer.
- * @param[out] stat The buffer to status information.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_fstat().
- */
-typedef int (*rtems_filesystem_fstat_t)(
- const rtems_filesystem_location_info_t *loc,
- struct stat *buf
-);
-
-/**
- * @brief Truncates a file to a specified length.
- *
- * @param[in, out] iop The IO pointer.
- * @param[in] length The new length in characters.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_ftruncate() and
- * rtems_filesystem_default_ftruncate_directory().
- */
-typedef int (*rtems_filesystem_ftruncate_t)(
- rtems_libio_t *iop,
- off_t length
-);
-
-/**
- * @brief Synchronizes changes to a file.
- *
- * @param[in, out] iop The IO pointer.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_fsync_or_fdatasync() and
- * rtems_filesystem_default_fsync_or_fdatasync_success().
- */
-typedef int (*rtems_filesystem_fsync_t)(
- rtems_libio_t *iop
-);
-
-/**
- * @brief Synchronizes the data of a file.
- *
- * @param[in, out] iop The IO pointer.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The errno is set to indicate the error.
- *
- * @see rtems_filesystem_default_fsync_or_fdatasync() and
- * rtems_filesystem_default_fsync_or_fdatasync_success().
- */
-typedef int (*rtems_filesystem_fdatasync_t)(
- rtems_libio_t *iop
-);
-
-/**
- * @brief File control.
- *
- * @param[in, out] iop The IO pointer.
- * @param[in] cmd Control command.
- *
- * @retval 0 Successful operation.
- * @retval errno An error occurred. This value is assigned to errno.
- *
- * @see rtems_filesystem_default_fcntl().
- */
-typedef int (*rtems_filesystem_fcntl_t)(
- rtems_libio_t *iop,
- int cmd
-);
-
-/**
- * @brief Poll and select support.
- *
- * @param[in, out] iop The IO pointer.
- * @param[in] events The poll events.
- *
- * @return The poll return events.
- *
- * @see rtems_filesystem_default_poll().
- */
-typedef int (*rtems_filesystem_poll_t)(
- rtems_libio_t *iop,
- int events
-);
-
-/**
- * @brief Kernel event filter support.
- *
- * @param[in, out] iop The IO pointer.
- * @param[in] kn The kernel event note.
- *
- * @retval 0 Successful operation.
- * @retval error An error occurred. This is usually EINVAL.
- *
- * @see rtems_filesystem_default_kqfilter().
- */
-typedef int (*rtems_filesystem_kqfilter_t)(
- rtems_libio_t *iop,
- struct knote *kn
-);
-
-/**
- * @brief MMAP support.
- *
- * @param[in, out] iop The IO pointer.
- * @param[in, out] addr The starting address of the mapped memory.
- * @param[in] len The maximum number of bytes to map.
- * @param[in] prot The desired memory protection.
- * @param[in] off The offset within the file descriptor to map.
- *
- * @retval 0 Successful operation.
- * @retval error An error occurred. This is usually EINVAL.
- *
- * @see rtems_filesystem_default_mmap().
- */
-typedef int (*rtems_filesystem_mmap_t)(
- rtems_libio_t *iop,
- void **addr,
- size_t len,
- int prot,
- off_t off
-);
-
-/**
- * @brief File system node operations table.
- */
-struct _rtems_filesystem_file_handlers_r {
- rtems_filesystem_open_t open_h;
- rtems_filesystem_close_t close_h;
- rtems_filesystem_read_t read_h;
- rtems_filesystem_write_t write_h;
- rtems_filesystem_ioctl_t ioctl_h;
- rtems_filesystem_lseek_t lseek_h;
- rtems_filesystem_fstat_t fstat_h;
- rtems_filesystem_ftruncate_t ftruncate_h;
- rtems_filesystem_fsync_t fsync_h;
- rtems_filesystem_fdatasync_t fdatasync_h;
- rtems_filesystem_fcntl_t fcntl_h;
- rtems_filesystem_poll_t poll_h;
- rtems_filesystem_kqfilter_t kqfilter_h;
- rtems_filesystem_readv_t readv_h;
- rtems_filesystem_writev_t writev_h;
- rtems_filesystem_mmap_t mmap_h;
-};
-
-/**
- * @brief File system node handler table with default node handlers.
- */
-extern const rtems_filesystem_file_handlers_r
- rtems_filesystem_handlers_default;
-
-/**
- * @retval 0 Always.
- *
- * @see rtems_filesystem_open_t.
- */
-int rtems_filesystem_default_open(
- rtems_libio_t *iop,
- const char *path,
- int oflag,
- mode_t mode
-);
-
-/**
- * @retval 0 Always.
- *
- * @see rtems_filesystem_close_t.
- */
-int rtems_filesystem_default_close(
- rtems_libio_t *iop
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_read_t.
- */
-ssize_t rtems_filesystem_default_read(
- rtems_libio_t *iop,
- void *buffer,
- size_t count
-);
-
-/**
- * @brief Calls the read handler for each IO vector entry.
- *
- * @see rtems_filesystem_readv_t.
- */
-ssize_t rtems_filesystem_default_readv(
- rtems_libio_t *iop,
- const struct iovec *iov,
- int iovcnt,
- ssize_t total
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTSUP.
- *
- * @see rtems_filesystem_write_t.
- */
-ssize_t rtems_filesystem_default_write(
- rtems_libio_t *iop,
- const void *buffer,
- size_t count
-);
-
-/**
- * @brief Calls the write handler for each IO vector entry.
- *
- * @see rtems_filesystem_write_t.
- */
-ssize_t rtems_filesystem_default_writev(
- rtems_libio_t *iop,
- const struct iovec *iov,
- int iovcnt,
- ssize_t total
-);
-
-/**
- * @retval -1 Always. The errno is set to ENOTTY.
- *
- * @see rtems_filesystem_ioctl_t.
- */
-int rtems_filesystem_default_ioctl(
- rtems_libio_t *iop,
- ioctl_command_t request,
- void *buffer
-);
-
-/**
- * @retval -1 Always. The errno is set to ESPIPE.
- *
- * @see rtems_filesystem_lseek_t.
- */
-off_t rtems_filesystem_default_lseek(
- rtems_libio_t *iop,
- off_t offset,
- int whence
-);
-
-/**
- * @brief An offset 0 with a whence of SEEK_SET will perform a directory rewind
- * operation.
- *
- * This function has no protection against concurrent access.
- *
- * @retval -1 The offset is not zero or the whence is not SEEK_SET.
- * @retval 0 Successful rewind operation.
- *
- * @see rtems_filesystem_lseek_t.
- */
-off_t rtems_filesystem_default_lseek_directory(
- rtems_libio_t *iop,
- off_t offset,
- int whence
-);
-
-/**
- * @brief Default lseek() handler for files.
- *
- * The fstat() handler will be used to obtain the file size in case whence is
- * SEEK_END.
- *
- * This function has no protection against concurrent access.
- *
- * @retval -1 An error occurred. In case an integer overflow occurred, then the
- * errno will be set to EOVERFLOW. In case the new offset is negative, then
- * the errno will be set to EINVAL. In case the whence is SEEK_END and the
- * fstat() handler to obtain the current file size returned an error status,
- * then the errno will be set by the fstat() handler.
- * @retval offset The new offset.
- *
- * @see rtems_filesystem_lseek_t.
- */
-off_t rtems_filesystem_default_lseek_file(
- rtems_libio_t *iop,
- off_t offset,
- int whence
-);
-
-/**
- * @brief Sets the mode to S_IRWXU | S_IRWXG | S_IRWXO.
- *
- * @retval 0 Always.
- *
- * @see rtems_filesystem_fstat_t.
- */
-int rtems_filesystem_default_fstat(
- const rtems_filesystem_location_info_t *loc,
- struct stat *buf
-);
-
-/**
- * @retval -1 Always. The errno is set to EINVAL.
- *
- * @see rtems_filesystem_ftruncate_t.
- */
-int rtems_filesystem_default_ftruncate(
- rtems_libio_t *iop,
- off_t length
-);
-
-/**
- * @retval -1 Always. The errno is set to EISDIR.
- *
- * @see rtems_filesystem_ftruncate_t.
- */
-int rtems_filesystem_default_ftruncate_directory(
- rtems_libio_t *iop,
- off_t length
-);
-
-/**
- * @retval -1 Always. The errno is set to EINVAL.
- *
- * @see rtems_filesystem_fsync_t and rtems_filesystem_fdatasync_t.
- */
-int rtems_filesystem_default_fsync_or_fdatasync(
- rtems_libio_t *iop
-);
-
-/**
- * @retval 0 Always.
- *
- * @see rtems_filesystem_fsync_t and rtems_filesystem_fdatasync_t.
- */
-int rtems_filesystem_default_fsync_or_fdatasync_success(
- rtems_libio_t *iop
-);
-
-/**
- * @retval 0 Always.
- *
- * @see rtems_filesystem_fcntl_t.
- */
-int rtems_filesystem_default_fcntl(
- rtems_libio_t *iop,
- int cmd
-);
-
-/**
- * @brief Default poll handler.
- *
- * @retval POLLERR Always.
- *
- * @see rtems_filesystem_poll_t.
- */
-int rtems_filesystem_default_poll(
- rtems_libio_t *iop,
- int events
-);
-
-/**
- * @brief Default kernel event filter handler.
- *
- * @retval EINVAL Always.
- *
- * @see rtems_filesystem_kqfilter_t.
- */
-int rtems_filesystem_default_kqfilter(
- rtems_libio_t *iop,
- struct knote *kn
-);
-
-/**
- * @brief Default MMAP handler.
- *
- * @retval ENOTSUP Always.
- *
- * @see rtems_filesystem_mmap_t.
- */
-int rtems_filesystem_default_mmap(
- rtems_libio_t *iop,
- void **addr,
- size_t len,
- int prot,
- off_t off
-);
-
-/** @} */
-
-/**
- * @defgroup LibIO IO Library
- *
- * @brief Provides system call and file system interface definitions.
- *
- * General purpose communication channel for RTEMS to allow UNIX/POSIX
- * system call behavior under RTEMS. Initially this supported only
- * IO to devices but has since been enhanced to support networking
- * and support for mounted file systems.
- */
-/**@{**/
-
-typedef off_t rtems_off64_t __attribute__((deprecated));
-
-/**
- * @brief Gets the mount handler for the file system @a type.
- *
- * @return The file system mount handler associated with the @a type, or
- * @c NULL if no such association exists.
- */
-rtems_filesystem_fsmount_me_t
-rtems_filesystem_get_mount_handler(
- const char *type
-);
-
-/**
- * @brief Contain file system specific information which is required to support
- * fpathconf().
- */
-typedef struct {
- int link_max; /* count */
- int max_canon; /* max formatted input line size */
- int max_input; /* max input line size */
- int name_max; /* max name length */
- int path_max; /* max path */
- int pipe_buf; /* pipe buffer size */
- int posix_async_io; /* async IO supported on fs, 0=no, 1=yes */
- int posix_chown_restrictions; /* can chown: 0=no, 1=yes */
- int posix_no_trunc; /* error on names > max name, 0=no, 1=yes */
- int posix_prio_io; /* priority IO, 0=no, 1=yes */
- int posix_sync_io; /* file can be sync'ed, 0=no, 1=yes */
- int posix_vdisable; /* special char processing, 0=no, 1=yes */
-} rtems_filesystem_limits_and_options_t;
-
-/**
- * @brief Default pathconf settings.
- *
- * Override in a filesystem.
- */
-extern const rtems_filesystem_limits_and_options_t
- rtems_filesystem_default_pathconf;
-
-/**
- * @brief An open file data structure.
- *
- * It will be indexed by 'fd'.
- *
- * @todo Should really have a separate per/file data structure that this points
- * to (eg: offset, driver, pathname should be in that)
- */
-struct rtems_libio_tt {
- off_t offset; /* current offset into file */
- Atomic_Uint flags;
- rtems_filesystem_location_info_t pathinfo;
- uint32_t data0; /* private to "driver" */
- void *data1; /* ... */
-};
-
-/**
- * @brief Paramameter block for read/write.
- *
- * It must include 'offset' instead of using iop's offset since we can have
- * multiple outstanding i/o's on a device.
- */
-typedef struct {
- rtems_libio_t *iop;
- off_t offset;
- char *buffer;
- uint32_t count;
- uint32_t flags;
- uint32_t bytes_moved;
-} rtems_libio_rw_args_t;
-
-/**
- * @brief Parameter block for open/close.
- */
-typedef struct {
- rtems_libio_t *iop;
- uint32_t flags;
- uint32_t mode;
-} rtems_libio_open_close_args_t;
-
-/**
- * @brief Parameter block for ioctl.
- */
-typedef struct {
- rtems_libio_t *iop;
- ioctl_command_t command;
- void *buffer;
- int ioctl_return;
-} rtems_libio_ioctl_args_t;
-
-/**
- * @name Flag Values
- */
-/**@{**/
-
-#define LIBIO_FLAGS_NO_DELAY 0x0001U /* return immediately if no data */
-#define LIBIO_FLAGS_READ 0x0002U /* reading */
-#define LIBIO_FLAGS_WRITE 0x0004U /* writing */
-#define LIBIO_FLAGS_OPEN 0x0100U /* device is open */
-#define LIBIO_FLAGS_APPEND 0x0200U /* all writes append */
-#define LIBIO_FLAGS_CLOSE_ON_EXEC 0x0800U /* close on process exec() */
-#define LIBIO_FLAGS_READ_WRITE (LIBIO_FLAGS_READ | LIBIO_FLAGS_WRITE)
-#define LIBIO_FLAGS_REFERENCE_INC 0x1000U
-
-/** @} */
-
-static inline unsigned int rtems_libio_iop_flags( const rtems_libio_t *iop )
-{
- return _Atomic_Load_uint( &iop->flags, ATOMIC_ORDER_RELAXED );
-}
-
-/**
- * @brief Returns true if this is a no delay iop, otherwise returns false.
- *
- * @param[in] iop The iop.
- */
-static inline bool rtems_libio_iop_is_no_delay( const rtems_libio_t *iop )
-{
- return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_NO_DELAY ) != 0;
-}
-
-/**
- * @brief Returns true if this is a readable iop, otherwise returns false.
- *
- * @param[in] iop The iop.
- */
-static inline bool rtems_libio_iop_is_readable( const rtems_libio_t *iop )
-{
- return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_READ ) != 0;
-}
-
-/**
- * @brief Returns true if this is a writeable iop, otherwise returns false.
- *
- * @param[in] iop The iop.
- */
-static inline bool rtems_libio_iop_is_writeable( const rtems_libio_t *iop )
-{
- return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_WRITE ) != 0;
-}
-
-/**
- * @brief Returns true if this is an append iop, otherwise returns false.
- *
- * @param[in] iop The iop.
- */
-static inline bool rtems_libio_iop_is_append( const rtems_libio_t *iop )
-{
- return ( rtems_libio_iop_flags( iop ) & LIBIO_FLAGS_APPEND ) != 0;
-}
-
-/**
- * @name External I/O Handlers
- */
-/**@{**/
-
-typedef int (*rtems_libio_open_t)(
- const char *pathname,
- uint32_t flag,
- uint32_t mode
-);
-
-typedef int (*rtems_libio_close_t)(
- int fd
-);
-
-typedef ssize_t (*rtems_libio_read_t)(
- int fd,
- void *buffer,
- size_t count
-);
-
-typedef ssize_t (*rtems_libio_write_t)(
- int fd,
- const void *buffer,
- size_t count
-);
-
-typedef int (*rtems_libio_ioctl_t)(
- int fd,
- uint32_t command,
- void *buffer
-);
-
-typedef off_t (*rtems_libio_lseek_t)(
- int fd,
- off_t offset,
- int whence
-);
-
-/** @} */
-
-/**
- * @name Permission Macros
- */
-/**@{**/
-
-/*
- * The following macros are used to build up the permissions sets
- * used to check permissions. These are similar in style to the
- * mode_t bits and should stay compatible with them.
- */
-#define RTEMS_FS_PERMS_READ 0x4
-#define RTEMS_FS_PERMS_WRITE 0x2
-#define RTEMS_FS_PERMS_EXEC 0x1
-#define RTEMS_FS_PERMS_RWX \
- (RTEMS_FS_PERMS_READ | RTEMS_FS_PERMS_WRITE | RTEMS_FS_PERMS_EXEC)
-#define RTEMS_FS_FOLLOW_HARD_LINK 0x8
-#define RTEMS_FS_FOLLOW_SYM_LINK 0x10
-#define RTEMS_FS_FOLLOW_LINK \
- (RTEMS_FS_FOLLOW_HARD_LINK | RTEMS_FS_FOLLOW_SYM_LINK)
-#define RTEMS_FS_MAKE 0x20
-#define RTEMS_FS_EXCLUSIVE 0x40
-#define RTEMS_FS_ACCEPT_RESIDUAL_DELIMITERS 0x80
-#define RTEMS_FS_REJECT_TERMINAL_DOT 0x100
-
-/** @} */
-
-union __rtems_dev_t {
- dev_t device;
- struct {
- rtems_device_major_number major;
- rtems_device_minor_number minor;
- } __overlay;
-};
-
-static inline dev_t rtems_filesystem_make_dev_t(
- rtems_device_major_number _major,
- rtems_device_minor_number _minor
-)
-{
- union __rtems_dev_t temp;
-
- temp.__overlay.major = _major;
- temp.__overlay.minor = _minor;
- return temp.device;
-}
-
-static inline dev_t rtems_filesystem_make_dev_t_from_pointer(
- const void *pointer
-)
-{
- uint64_t temp = (((uint64_t) 1) << 63) | (((uintptr_t) pointer) >> 1);
-
- return rtems_filesystem_make_dev_t((uint32_t) (temp >> 32), (uint32_t) temp);
-}
-
-static inline rtems_device_major_number rtems_filesystem_dev_major_t(
- dev_t device
-)
-{
- union __rtems_dev_t temp;
-
- temp.device = device;
- return temp.__overlay.major;
-}
-
-
-static inline rtems_device_minor_number rtems_filesystem_dev_minor_t(
- dev_t device
-)
-{
- union __rtems_dev_t temp;
-
- temp.device = device;
- return temp.__overlay.minor;
-}
-
-#define rtems_filesystem_split_dev_t( _dev, _major, _minor ) \
- do { \
- (_major) = rtems_filesystem_dev_major_t ( _dev ); \
- (_minor) = rtems_filesystem_dev_minor_t( _dev ); \
- } while(0)
-
-/*
- * Prototypes for filesystem
- */
-
-/**
- * @brief Base File System Initialization
- *
- * Initialize the foundation of the file system. This is specified
- * by the structure rtems_filesystem_mount_table. The usual
- * configuration is a single instantiation of the IMFS or miniIMFS with
- * a single "/dev" directory in it.
- */
-void rtems_filesystem_initialize( void );
-
-void rtems_libio_post_driver(void);
-
-void rtems_libio_exit(void);
-
-/**
- * @brief Creates a directory and all its parent directories according to
- * @a path.
- *
- * The @a mode value selects the access permissions of the directory.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The @c errno indicates the error.
- */
-extern int rtems_mkdir(const char *path, mode_t mode);
-
-/** @} */
-
-/**
- * @defgroup FileSystemTypesAndMount File System Types and Mount
- *
- * @ingroup LibIO
- *
- * @brief File system types and mount.
- */
-/**@{**/
-
-/**
- * @name File System Types
- */
-/**@{**/
-
-#define RTEMS_FILESYSTEM_TYPE_IMFS "imfs"
-#define RTEMS_FILESYSTEM_TYPE_MINIIMFS "mimfs"
-#define RTEMS_FILESYSTEM_TYPE_DEVFS "devfs"
-#define RTEMS_FILESYSTEM_TYPE_FTPFS "ftpfs"
-#define RTEMS_FILESYSTEM_TYPE_TFTPFS "tftpfs"
-#define RTEMS_FILESYSTEM_TYPE_NFS "nfs"
-#define RTEMS_FILESYSTEM_TYPE_DOSFS "dosfs"
-#define RTEMS_FILESYSTEM_TYPE_RFS "rfs"
-#define RTEMS_FILESYSTEM_TYPE_JFFS2 "jffs2"
-
-/** @} */
-
-/**
- * @brief Mount table entry.
- */
-struct rtems_filesystem_mount_table_entry_tt {
- rtems_chain_node mt_node;
- void *fs_info;
- const rtems_filesystem_operations_table *ops;
- const void *immutable_fs_info;
- rtems_chain_control location_chain;
- rtems_filesystem_global_location_t *mt_point_node;
- rtems_filesystem_global_location_t *mt_fs_root;
- bool mounted;
- bool writeable;
- const rtems_filesystem_limits_and_options_t *pathconf_limits_and_options;
-
- /*
- * The target or mount point of the file system.
- */
- const char *target;
-
- /*
- * The type of filesystem or the name of the filesystem.
- */
- const char *type;
-
- /*
- * When someone adds a mounted filesystem on a real device,
- * this will need to be used.
- *
- * The lower layers can manage how this is managed. Leave as a
- * string.
- */
- char *dev;
-
- /**
- * The task that initiated the unmount process. After unmount process
- * completion this task will be notified via the transient event.
- *
- * @see ClassicEventTransient.
- */
- rtems_id unmount_task;
-};
-
-/**
- * @brief File system options.
- */
-typedef enum {
- RTEMS_FILESYSTEM_READ_ONLY,
- RTEMS_FILESYSTEM_READ_WRITE,
- RTEMS_FILESYSTEM_BAD_OPTIONS
-} rtems_filesystem_options_t;
-
-/**
- * @brief File system table entry.
- */
-typedef struct rtems_filesystem_table_t {
- const char *type;
- rtems_filesystem_fsmount_me_t mount_h;
-} rtems_filesystem_table_t;
-
-/**
- * @brief Static table of file systems.
- *
- * Externally defined by confdefs.h or the user.
- */
-extern const rtems_filesystem_table_t rtems_filesystem_table [];
-
-extern rtems_chain_control rtems_filesystem_mount_table;
-
-/**
- * @brief Registers a file system @a type.
- *
- * The @a mount_h handler will be used to mount a file system of this @a type.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The @c errno indicates the error.
- */
-int rtems_filesystem_register(
- const char *type,
- rtems_filesystem_fsmount_me_t mount_h
-);
-
-/**
- * @brief Unregisters a file system @a type.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The @c errno indicates the error.
- */
-int rtems_filesystem_unregister(
- const char *type
-);
-
-/**
- * @brief Unmounts the file system instance at the specified mount path.
- *
- * The function waits for the unmount process completion. In case the calling
- * thread uses resources of the unmounted file system the function may never
- * return. In case the calling thread has its root or current directory in the
- * unmounted file system the function returns with an error status and errno is
- * set to EBUSY.
- *
- * The unmount process completion notification uses the transient event. It is
- * a fatal error to terminate the calling thread while waiting for this event.
- *
- * A concurrent unmount request for the same file system instance has
- * unpredictable effects.
- *
- * @param[in] mount_path The path to the file system instance mount point.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The @c errno indicates the error.
- *
- * @see ClassicEventTransient.
- */
-int unmount(
- const char *mount_path
-);
-
-/**
- * @brief Mounts a file system instance at the specified target path.
- *
- * To mount a standard file system instance one of the following defines should
- * be used to select the file system type
- * - RTEMS_FILESYSTEM_TYPE_DEVFS,
- * - RTEMS_FILESYSTEM_TYPE_DOSFS,
- * - RTEMS_FILESYSTEM_TYPE_FTPFS,
- * - RTEMS_FILESYSTEM_TYPE_IMFS,
- * - RTEMS_FILESYSTEM_TYPE_JFFS2,
- * - RTEMS_FILESYSTEM_TYPE_MINIIMFS,
- * - RTEMS_FILESYSTEM_TYPE_NFS,
- * - RTEMS_FILESYSTEM_TYPE_RFS, or
- * - RTEMS_FILESYSTEM_TYPE_TFTPFS.
- *
- * Only configured or registered file system types are available. You can add
- * file system types to your application configuration with the following
- * configuration options
- * - CONFIGURE_FILESYSTEM_DEVFS,
- * - CONFIGURE_FILESYSTEM_DOSFS,
- * - CONFIGURE_FILESYSTEM_FTPFS,
- * - CONFIGURE_FILESYSTEM_IMFS,
- * - CONFIGURE_FILESYSTEM_JFFS2,
- * - CONFIGURE_FILESYSTEM_MINIIMFS,
- * - CONFIGURE_FILESYSTEM_NFS,
- * - CONFIGURE_FILESYSTEM_RFS, and
- * - CONFIGURE_FILESYSTEM_TFTPFS.
- *
- * In addition to these configuration options file system types can be
- * registered with rtems_filesystem_register().
- *
- * @param[in] source The source parameter will be forwarded to the file system
- * initialization handler. Usually the source is a path to the corresponding
- * device file, or @c NULL in case the file system does not use a device file.
- * @param[in] target The target path must lead to an existing directory, or
- * must be @c NULL. In case the target is @c NULL, the root file system will
- * be mounted.
- * @param[in] filesystemtype This string selects the file system type.
- * @param[in] options The options specify if the file system instance allows
- * read-write or read-only access.
- * @param[in] data The data parameter will be forwarded to the file system
- * initialization handler. It can be used to pass file system specific mount
- * options. The data structure for mount options is file system specific. See
- * also in the corresponding file system documentation.
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The @c errno indicates the error.
- *
- * @see rtems_filesystem_register(), mount_and_make_target_path(), @ref DOSFS
- * and @ref JFFS2.
- */
-int mount(
- const char *source,
- const char *target,
- const char *filesystemtype,
- rtems_filesystem_options_t options,
- const void *data
-);
-
-/**
- * @brief Mounts a file system and makes the @a target path.
- *
- * The @a target path will be created with rtems_mkdir() and must not be
- * @c NULL.
- *
- * @see mount().
- *
- * @retval 0 Successful operation.
- * @retval -1 An error occurred. The @c errno indicates the error.
- */
-int mount_and_make_target_path(
- const char *source,
- const char *target,
- const char *filesystemtype,
- rtems_filesystem_options_t options,
- const void *data
-);
-
-/**
- * @brief Per file system type routine.
- *
- * @see rtems_filesystem_iterate().
- *
- * @retval true Stop the iteration.
- * @retval false Continue the iteration.
- */
-typedef bool (*rtems_per_filesystem_routine)(
- const rtems_filesystem_table_t *fs_entry,
- void *arg
-);
-
-/**
- * @brief Iterates over all file system types.
- *
- * For each file system type the @a routine will be called with the entry and
- * the @a routine_arg parameter.
- *
- * Do not register or unregister file system types in @a routine.
- *
- * The iteration is protected by the IO library mutex.
- *
- * @retval true Iteration stopped due to @a routine return status.
- * @retval false Iteration through all entries.
- */
-bool rtems_filesystem_iterate(
- rtems_per_filesystem_routine routine,
- void *routine_arg
-);
-
-/**
- * @brief Mount table entry visitor.
- *
- * @retval true Stop the iteration.
- * @retval false Continue the iteration.
- *
- * @see rtems_filesystem_mount_iterate().
- */
-typedef bool (*rtems_filesystem_mt_entry_visitor)(
- const rtems_filesystem_mount_table_entry_t *mt_entry,
- void *arg
-);
-
-/**
- * @brief Iterates over all file system mount entries.
- *
- * The iteration is protected by the IO library mutex. Do not mount or unmount
- * file systems in the visitor function.
- *
- * @param[in] visitor For each file system mount entry the visitor function
- * will be called with the entry and the visitor argument as parameters.
- * @param[in] visitor_arg The second parameter for the visitor function.
- *
- * @retval true Iteration stopped due to visitor function return status.
- * @retval false Iteration through all entries.
- */
-bool rtems_filesystem_mount_iterate(
- rtems_filesystem_mt_entry_visitor visitor,
- void *visitor_arg
-);
-
-typedef struct {
- const char *source;
- const char *target;
- const char *filesystemtype;
- rtems_filesystem_options_t options;
- const void *data;
-} rtems_filesystem_mount_configuration;
-
-extern const rtems_filesystem_mount_configuration
- rtems_filesystem_root_configuration;
-
-/** @} */
-
-/**
- * @defgroup Termios Termios
- *
- * @ingroup LibIO
- *
- * @brief Termios
- */
-/**@{**/
-
-typedef struct rtems_termios_callbacks {
- int (*firstOpen)(int major, int minor, void *arg);
- int (*lastClose)(int major, int minor, void *arg);
- int (*pollRead)(int minor);
- ssize_t (*write)(int minor, const char *buf, size_t len);
- int (*setAttributes)(int minor, const struct termios *t);
- int (*stopRemoteTx)(int minor);
- int (*startRemoteTx)(int minor);
- int outputUsesInterrupts;
-} rtems_termios_callbacks;
-
-void rtems_termios_initialize (void);
-
-/*
- * CCJ: Change before opening a tty. Newer code from Eric is coming
- * so extra work to handle an open tty is not worth it. If the tty
- * is open, close then open it again.
- */
-rtems_status_code rtems_termios_bufsize (
- size_t cbufsize, /* cooked buffer size */
- size_t raw_input, /* raw input buffer size */
- size_t raw_output /* raw output buffer size */
-);
-
-rtems_status_code rtems_termios_open (
- rtems_device_major_number major,
- rtems_device_minor_number minor,
- void *arg,
- const rtems_termios_callbacks *callbacks
-);
-
-rtems_status_code rtems_termios_close(
- void *arg
-);
-
-rtems_status_code rtems_termios_read(
- void *arg
-);
-
-rtems_status_code rtems_termios_write(
- void *arg
-);
-
-rtems_status_code rtems_termios_ioctl(
- void *arg
-);
-
-int rtems_termios_enqueue_raw_characters(
- void *ttyp,
- const char *buf,
- int len
-);
-
-int rtems_termios_dequeue_characters(
- void *ttyp,
- int len
-);
-
-/** @} */
-
-/**
- * @brief The pathconf setting for a file system.
- */
-#define rtems_filesystem_pathconf(_mte) ((_mte)->pathconf_limits_and_options)
-
-/**
- * @brief The type of file system. Its name.
- */
-#define rtems_filesystem_type(_mte) ((_mte)->type)
-
-/**
- * @brief The mount point of a file system.
- */
-#define rtems_filesystem_mount_point(_mte) ((_mte)->target)
-
-/**
- * @brief The device entry of a file system.
- */
-#define rtems_filesystem_mount_device(_mte) ((_mte)->dev)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _RTEMS_LIBIO_H */
diff --git a/cpukit/libcsupport/include/rtems/libio_.h b/cpukit/libcsupport/include/rtems/libio_.h
deleted file mode 100644
index 414e8a20fc..0000000000
--- a/cpukit/libcsupport/include/rtems/libio_.h
+++ /dev/null
@@ -1,1049 +0,0 @@
-/**
- * @file
- *
- * @brief LibIO Internal Interface
- *
- * This file is the libio internal interface.
- */
-
-/*
- * COPYRIGHT (c) 1989-2011.
- * On-Line Applications Research Corporation (OAR).
- *
- * Modifications to support reference counting in the file system are
- * Copyright (c) 2012 embedded brains GmbH.
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef _RTEMS_RTEMS_LIBIO__H
-#define _RTEMS_RTEMS_LIBIO__H
-
-#include <sys/uio.h>
-#include <errno.h>
-#include <limits.h>
-#include <pthread.h>
-
-#include <rtems.h>
-#include <rtems/libio.h>
-#include <rtems/seterr.h>
-#include <rtems/score/assert.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @defgroup LibIOInternal IO Internal Library
- *
- * @brief Internal IO library API and implementation.
- *
- */
-/**@{**/
-
-#define RTEMS_FILESYSTEM_SYMLOOP_MAX 32
-
-/*
- * Not defined in newlib so provide here. Users should use dup2 and
- * not this non-portable fcntl command. Provided here to allow the
- * RTEMS implementation to work.
- */
-#define F_DUP2FD 20
-
-/*
- * File descriptor Table Information
- */
-
-extern const uint32_t rtems_libio_number_iops;
-extern rtems_libio_t rtems_libio_iops[];
-extern void *rtems_libio_iop_free_head;
-extern void **rtems_libio_iop_free_tail;
-
-extern const rtems_filesystem_file_handlers_r rtems_filesystem_null_handlers;
-
-extern rtems_filesystem_mount_table_entry_t rtems_filesystem_null_mt_entry;
-
-/**
- * @brief The global null location.
- *
- * Every operation and the open and fstat handlers of this location returns an
- * error status. The errno is not touched by these operations and handlers.
- * The purpose of this location is to deliver the error return status for a
- * previous error condition which must set the errno accordingly.
- *
- * The usage of this null location instead of the NULL pointer eliminates
- * a lot of branches.
- *
- * The user environment root and current directory are statically initialized
- * with the null location. Due to that all file system services are in a
- * defined state even if no root file system was mounted.
- */
-extern rtems_filesystem_global_location_t rtems_filesystem_global_location_null;
-
-/**
- * @brief Sets the iop flags to the specified flags together with
- * LIBIO_FLAGS_OPEN.
- *
- * Use this once a file descriptor allocated via rtems_libio_allocate() is
- * fully initialized.
- *
- * @param[in] iop The iop.
- * @param[in] flags The flags.
- */
-static inline void rtems_libio_iop_flags_initialize(
- rtems_libio_t *iop,
- uint32_t flags
-)
-{
- _Atomic_Store_uint(
- &iop->flags,
- LIBIO_FLAGS_OPEN | flags,
- ATOMIC_ORDER_RELEASE
- );
-}
-
-/**
- * @brief Sets the specified flags in the iop.
- *
- * @param[in] iop The iop.
- * @param[in] set The flags to set.
- *
- * @return The previous flags.
- */
-static inline unsigned int rtems_libio_iop_flags_set(
- rtems_libio_t *iop,
- unsigned int set
-)
-{
- return _Atomic_Fetch_or_uint( &iop->flags, set, ATOMIC_ORDER_RELAXED );
-}
-
-/**
- * @brief Clears the specified flags in the iop.
- *
- * @param[in] iop The iop.
- * @param[in] clear The flags to clear.
- *
- * @return The previous flags.
- */
-static inline unsigned int rtems_libio_iop_flags_clear(
- rtems_libio_t *iop,
- unsigned int clear
-)
-{
- return _Atomic_Fetch_and_uint( &iop->flags, ~clear, ATOMIC_ORDER_RELAXED );
-}
-
-/**
- * @brief Maps a file descriptor to the iop.
- *
- * The file descriptor must be a valid index into the iop table.
- *
- * @param[in] fd The file descriptor.
- *
- * @return The iop corresponding to the specified file descriptor.
- */
-static inline rtems_libio_t *rtems_libio_iop( int fd )
-{
- return &rtems_libio_iops[ fd ];
-}
-
-/**
- * @brief Holds a refernece to the iop.
- *
- * @param[in] iop The iop.
- *
- * @return The flags corresponding to the specified iop.
- */
-static inline unsigned int rtems_libio_iop_hold( rtems_libio_t *iop )
-{
- return _Atomic_Fetch_add_uint(
- &iop->flags,
- LIBIO_FLAGS_REFERENCE_INC,
- ATOMIC_ORDER_ACQUIRE
- );
-}
-
-/**
- * @brief Drops a refernece to the iop.
- *
- * @param[in] iop The iop.
- */
-static inline void rtems_libio_iop_drop( rtems_libio_t *iop )
-{
-#if defined(RTEMS_DEBUG)
- unsigned int flags;
- bool success;
-
- flags = _Atomic_Load_uint( &iop->flags, ATOMIC_ORDER_RELAXED );
-
- do {
- unsigned int desired;
-
- _Assert( flags >= LIBIO_FLAGS_REFERENCE_INC );
-
- desired = flags - LIBIO_FLAGS_REFERENCE_INC;
- success = _Atomic_Compare_exchange_uint(
- &iop->flags,
- &flags,
- desired,
- ATOMIC_ORDER_RELEASE,
- ATOMIC_ORDER_RELAXED
- );
- } while ( !success );
-#else
- _Atomic_Fetch_sub_uint(
- &iop->flags,
- LIBIO_FLAGS_REFERENCE_INC,
- ATOMIC_ORDER_RELEASE
- );
-#endif
-}
-
-/*
- * rtems_libio_iop_to_descriptor
- *
- * Macro to convert an internal file descriptor pointer (iop) into
- * the integer file descriptor used by the "section 2" system calls.
- */
-
-#define rtems_libio_iop_to_descriptor(_iop) \
- ((_iop) - &rtems_libio_iops[0])
-
-/*
- * rtems_libio_check_is_open
- *
- * Macro to check if a file descriptor is actually open.
- */
-
-#define rtems_libio_check_is_open(_iop) \
- do { \
- if (((_iop)->flags & LIBIO_FLAGS_OPEN) == 0) { \
- errno = EBADF; \
- return -1; \
- } \
- } while (0)
-
-/**
- * @brief Macro to get the iop for the specified file descriptor.
- *
- * Checks that the file descriptor is in the valid range and open.
- */
-#define LIBIO_GET_IOP( _fd, _iop ) \
- do { \
- unsigned int _flags; \
- if ( (uint32_t) ( _fd ) >= rtems_libio_number_iops ) { \
- rtems_set_errno_and_return_minus_one( EBADF ); \
- } \
- _iop = rtems_libio_iop( _fd ); \
- _flags = rtems_libio_iop_hold( _iop ); \
- if ( ( _flags & LIBIO_FLAGS_OPEN ) == 0 ) { \
- rtems_libio_iop_drop( _iop ); \
- rtems_set_errno_and_return_minus_one( EBADF ); \
- } \
- } while ( 0 )
-
-/**
- * @brief Macro to get the iop for the specified file descriptor with access
- * flags and error.
- *
- * Checks that the file descriptor is in the valid range and open.
- */
-#define LIBIO_GET_IOP_WITH_ACCESS( _fd, _iop, _access_flags, _access_error ) \
- do { \
- unsigned int _flags; \
- unsigned int _mandatory; \
- if ( (uint32_t) ( _fd ) >= rtems_libio_number_iops ) { \
- rtems_set_errno_and_return_minus_one( EBADF ); \
- } \
- _iop = rtems_libio_iop( _fd ); \
- _flags = rtems_libio_iop_hold( _iop ); \
- _mandatory = LIBIO_FLAGS_OPEN | ( _access_flags ); \
- if ( ( _flags & _mandatory ) != _mandatory ) { \
- int _error; \
- rtems_libio_iop_drop( _iop ); \
- if ( ( _flags & LIBIO_FLAGS_OPEN ) == 0 ) { \
- _error = EBADF; \
- } else { \
- _error = _access_error; \
- } \
- rtems_set_errno_and_return_minus_one( _error ); \
- } \
- } while ( 0 )
-
-/*
- * rtems_libio_check_buffer
- *
- * Macro to check if a buffer pointer is valid.
- */
-
-#define rtems_libio_check_buffer(_buffer) \
- do { \
- if ((_buffer) == 0) { \
- errno = EINVAL; \
- return -1; \
- } \
- } while (0)
-
-/*
- * rtems_libio_check_count
- *
- * Macro to check if a count or length is valid.
- */
-
-#define rtems_libio_check_count(_count) \
- do { \
- if ((_count) == 0) { \
- return 0; \
- } \
- } while (0)
-
-/**
- * @brief Clones a node.
- *
- * The caller must hold the file system instance lock.
- *
- * @param[out] clone The cloned location.
- * @param[in] master The master location.
- *
- * @see rtems_filesystem_instance_lock().
- */
-void rtems_filesystem_location_clone(
- rtems_filesystem_location_info_t *clone,
- const rtems_filesystem_location_info_t *master
-);
-
-/**
- * @brief Releases all resources of a location.
- *
- * This function may block on a mutex and may complete an unmount process.
- *
- * @param[in] loc The location to free.
- *
- * @note The file system root location is released by the file system
- * instance destruction handler (see @ref rtems_filesystem_fsunmount_me_t).
- *
- * @see rtems_filesystem_freenode_t.
- */
-void rtems_filesystem_location_free( rtems_filesystem_location_info_t *loc );
-
-/*
- * External structures
- */
-#include <rtems/userenv.h>
-
-void rtems_libio_free_user_env( void *env );
-
-extern pthread_key_t rtems_current_user_env_key;
-
-void rtems_libio_lock( void );
-
-void rtems_libio_unlock( void );
-
-static inline void rtems_filesystem_mt_lock( void )
-{
- rtems_libio_lock();
-}
-
-static inline void rtems_filesystem_mt_unlock( void )
-{
- rtems_libio_unlock();
-}
-
-extern rtems_interrupt_lock rtems_filesystem_mt_entry_lock_control;
-
-#define rtems_filesystem_mt_entry_declare_lock_context( ctx ) \
- rtems_interrupt_lock_context ctx
-
-#define rtems_filesystem_mt_entry_lock( ctx ) \
- rtems_interrupt_lock_acquire( &rtems_filesystem_mt_entry_lock_control, &ctx )
-
-#define rtems_filesystem_mt_entry_unlock( ctx ) \
- rtems_interrupt_lock_release( &rtems_filesystem_mt_entry_lock_control, &ctx )
-
-static inline void rtems_filesystem_instance_lock(
- const rtems_filesystem_location_info_t *loc
-)
-{
- const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
-
- (*mt_entry->ops->lock_h)( mt_entry );
-}
-
-static inline void rtems_filesystem_instance_unlock(
- const rtems_filesystem_location_info_t *loc
-)
-{
- const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
-
- (*mt_entry->ops->unlock_h)( mt_entry );
-}
-
-/*
- * File Descriptor Routine Prototypes
- */
-
-/**
- * This routine searches the IOP Table for an unused entry. If it
- * finds one, it returns it. Otherwise, it returns NULL.
- */
-rtems_libio_t *rtems_libio_allocate(void);
-
-/**
- * Convert UNIX fnctl(2) flags to ones that RTEMS drivers understand
- */
-unsigned int rtems_libio_fcntl_flags( int fcntl_flags );
-
-/**
- * Convert RTEMS internal flags to UNIX fnctl(2) flags
- */
-int rtems_libio_to_fcntl_flags( unsigned int flags );
-
-/**
- * This routine frees the resources associated with an IOP (file descriptor)
- * and clears the slot in the IOP Table.
- */
-void rtems_libio_free(
- rtems_libio_t *iop
-);
-
-/*
- * File System Routine Prototypes
- */
-
-rtems_filesystem_location_info_t *
-rtems_filesystem_eval_path_start(
- rtems_filesystem_eval_path_context_t *ctx,
- const char *path,
- int eval_flags
-);
-
-rtems_filesystem_location_info_t *
-rtems_filesystem_eval_path_start_with_parent(
- rtems_filesystem_eval_path_context_t *ctx,
- const char *path,
- int eval_flags,
- rtems_filesystem_location_info_t *parentloc,
- int parent_eval_flags
-);
-
-rtems_filesystem_location_info_t *
-rtems_filesystem_eval_path_start_with_root_and_current(
- rtems_filesystem_eval_path_context_t *ctx,
- const char *path,
- size_t pathlen,
- int eval_flags,
- rtems_filesystem_global_location_t *const *global_root_ptr,
- rtems_filesystem_global_location_t *const *global_current_ptr
-);
-
-void rtems_filesystem_eval_path_continue(
- rtems_filesystem_eval_path_context_t *ctx
-);
-
-void rtems_filesystem_eval_path_cleanup(
- rtems_filesystem_eval_path_context_t *ctx
-);
-
-void rtems_filesystem_eval_path_recursive(
- rtems_filesystem_eval_path_context_t *ctx,
- const char *path,
- size_t pathlen
-);
-
-void rtems_filesystem_eval_path_cleanup_with_parent(
- rtems_filesystem_eval_path_context_t *ctx,
- rtems_filesystem_location_info_t *parentloc
-);
-
-/**
- * @brief Requests a path evaluation restart.
- *
- * Sets the start and current location to the new start location. The caller
- * must terminate its current evaluation process. The path evaluation
- * continues in the next loop iteration within
- * rtems_filesystem_eval_path_continue(). This avoids recursive invocations.
- * The function obtains the new start location and clones it to set the new
- * current location. The previous start and current locations are released.
- *
- * @param[in, out] ctx The path evaluation context.
- * @param[in, out] newstartloc_ptr Pointer to the new start location.
- */
-void rtems_filesystem_eval_path_restart(
- rtems_filesystem_eval_path_context_t *ctx,
- rtems_filesystem_global_location_t **newstartloc_ptr
-);
-
-typedef enum {
- RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_CONTINUE,
- RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_DONE,
- RTEMS_FILESYSTEM_EVAL_PATH_GENERIC_NO_ENTRY
-} rtems_filesystem_eval_path_generic_status;
-
-/**
- * @brief Tests if the current location is a directory.
- *
- * @param[in, out] ctx The path evaluation context.
- * @param[in, out] arg The handler argument.
- *
- * @retval true The current location is a directory.
- * @retval false Otherwise.
- *
- * @see rtems_filesystem_eval_path_generic().
- */
-typedef bool (*rtems_filesystem_eval_path_is_directory)(
- rtems_filesystem_eval_path_context_t *ctx,
- void *arg
-);
-
-/**
- * @brief Evaluates a token.
- *
- * @param[in, out] ctx The path evaluation context.
- * @param[in, out] arg The handler argument.
- * @param[in] token The token contents.
- * @param[in] tokenlen The token length in characters.
- *
- * @retval status The generic path evaluation status.
- *
- * @see rtems_filesystem_eval_path_generic().
- */
-typedef rtems_filesystem_eval_path_generic_status
-(*rtems_filesystem_eval_path_eval_token)(
- rtems_filesystem_eval_path_context_t *ctx,
- void *arg,
- const char *token,
- size_t tokenlen
-);
-
-typedef struct {
- rtems_filesystem_eval_path_is_directory is_directory;
- rtems_filesystem_eval_path_eval_token eval_token;
-} rtems_filesystem_eval_path_generic_config;
-
-void rtems_filesystem_eval_path_generic(
- rtems_filesystem_eval_path_context_t *ctx,
- void *arg,
- const rtems_filesystem_eval_path_generic_config *config
-);
-
-void rtems_filesystem_initialize(void);
-
-/**
- * @brief Copies a location.
- *
- * A bitwise copy is performed. The destination location will be added to the
- * corresponding mount entry.
- *
- * @param[out] dst The destination location.
- * @param[in] src The source location.
- *
- * @retval dst The destination location.
- *
- * @see rtems_filesystem_location_clone().
- */
-rtems_filesystem_location_info_t *rtems_filesystem_location_copy(
- rtems_filesystem_location_info_t *dst,
- const rtems_filesystem_location_info_t *src
-);
-
-static inline rtems_filesystem_location_info_t *
-rtems_filesystem_location_initialize_to_null(
- rtems_filesystem_location_info_t *loc
-)
-{
- return rtems_filesystem_location_copy(
- loc,
- &rtems_filesystem_global_location_null.location
- );
-}
-
-rtems_filesystem_global_location_t *
-rtems_filesystem_location_transform_to_global(
- rtems_filesystem_location_info_t *loc
-);
-
-/**
- * @brief Assigns a global file system location.
- *
- * @param[in, out] lhs_global_loc_ptr Pointer to the global left hand side file
- * system location. The current left hand side location will be released.
- * @param[in] rhs_global_loc The global right hand side file system location.
- */
-void rtems_filesystem_global_location_assign(
- rtems_filesystem_global_location_t **lhs_global_loc_ptr,
- rtems_filesystem_global_location_t *rhs_global_loc
-);
-
-/**
- * @brief Obtains a global file system location.
- *
- * Deferred releases will be processed in this function.
- *
- * This function must be called from normal thread context and may block on a
- * mutex. Thread dispatching is disabled to protect some critical sections.
- *
- * @param[in] global_loc_ptr Pointer to the global file system location.
- *
- * @return A global file system location. It returns always a valid object.
- * In case of an error, the global null location will be returned. Each
- * operation or handler of the null location returns an error status. The
- * errno indicates the error. The NULL pointer is never returned.
- *
- * @see rtems_filesystem_location_transform_to_global(),
- * rtems_filesystem_global_location_obtain_null(), and
- * rtems_filesystem_global_location_release().
- */
-rtems_filesystem_global_location_t *rtems_filesystem_global_location_obtain(
- rtems_filesystem_global_location_t *const *global_loc_ptr
-);
-
-/**
- * @brief Releases a global file system location.
- *
- * In case the reference count reaches zero, all associated resources will be
- * released. This may include the complete unmount of the corresponding file
- * system instance.
- *
- * This function may block on a mutex. It may be called within critical
- * sections of the operating system. In this case the release will be
- * deferred. The next obtain call will do the actual release.
- *
- * @param[in] global_loc The global file system location. It must not be NULL.
- * @param[in] deferred If true, then do a deferred release, otherwise release
- * it immediately.
- *
- * @see rtems_filesystem_global_location_obtain().
- */
-void rtems_filesystem_global_location_release(
- rtems_filesystem_global_location_t *global_loc,
- bool deferred
-);
-
-void rtems_filesystem_location_detach(
- rtems_filesystem_location_info_t *detach
-);
-
-void rtems_filesystem_location_copy_and_detach(
- rtems_filesystem_location_info_t *copy,
- rtems_filesystem_location_info_t *detach
-);
-
-static inline rtems_filesystem_global_location_t *
-rtems_filesystem_global_location_obtain_null(void)
-{
- rtems_filesystem_global_location_t *global_loc = NULL;
-
- return rtems_filesystem_global_location_obtain( &global_loc );
-}
-
-static inline bool rtems_filesystem_location_is_null(
- const rtems_filesystem_location_info_t *loc
-)
-{
- return loc->handlers == &rtems_filesystem_null_handlers;
-}
-
-static inline bool rtems_filesystem_global_location_is_null(
- const rtems_filesystem_global_location_t *global_loc
-)
-{
- return rtems_filesystem_location_is_null( &global_loc->location );
-}
-
-static inline void rtems_filesystem_location_error(
- const rtems_filesystem_location_info_t *loc,
- int eno
-)
-{
- if ( !rtems_filesystem_location_is_null( loc ) ) {
- errno = eno;
- }
-}
-
-int rtems_filesystem_mknod(
- const rtems_filesystem_location_info_t *parentloc,
- const char *name,
- size_t namelen,
- mode_t mode,
- dev_t dev
-);
-
-int rtems_filesystem_chdir( rtems_filesystem_location_info_t *loc );
-
-int rtems_filesystem_chmod(
- const rtems_filesystem_location_info_t *loc,
- mode_t mode
-);
-
-int rtems_filesystem_chown(
- const rtems_filesystem_location_info_t *loc,
- uid_t owner,
- gid_t group
-);
-
-static inline bool rtems_filesystem_is_ready_for_unmount(
- rtems_filesystem_mount_table_entry_t *mt_entry
-)
-{
- bool ready = !mt_entry->mounted
- && rtems_chain_has_only_one_node( &mt_entry->location_chain )
- && mt_entry->mt_fs_root->reference_count == 1;
-
- if ( ready ) {
- rtems_chain_initialize_empty( &mt_entry->location_chain );
- }
-
- return ready;
-}
-
-static inline void rtems_filesystem_location_add_to_mt_entry(
- rtems_filesystem_location_info_t *loc
-)
-{
- rtems_filesystem_mt_entry_declare_lock_context( lock_context );
-
- rtems_filesystem_mt_entry_lock( lock_context );
- rtems_chain_append_unprotected(
- &loc->mt_entry->location_chain,
- &loc->mt_entry_node
- );
- rtems_filesystem_mt_entry_unlock( lock_context );
-}
-
-void rtems_filesystem_location_remove_from_mt_entry(
- rtems_filesystem_location_info_t *loc
-);
-
-void rtems_filesystem_do_unmount(
- rtems_filesystem_mount_table_entry_t *mt_entry
-);
-
-static inline bool rtems_filesystem_location_is_instance_root(
- const rtems_filesystem_location_info_t *loc
-)
-{
- const rtems_filesystem_mount_table_entry_t *mt_entry = loc->mt_entry;
-
- return (*mt_entry->ops->are_nodes_equal_h)(
- loc,
- &mt_entry->mt_fs_root->location
- );
-}
-
-static inline const char *rtems_filesystem_eval_path_get_path(
- rtems_filesystem_eval_path_context_t *ctx
-)
-{
- return ctx->path;
-}
-
-static inline size_t rtems_filesystem_eval_path_get_pathlen(
- rtems_filesystem_eval_path_context_t *ctx
-)
-{
- return ctx->pathlen;
-}
-
-static inline void rtems_filesystem_eval_path_set_path(
- rtems_filesystem_eval_path_context_t *ctx,
- const char *path,
- size_t pathlen
-)
-{
- ctx->path = path;
- ctx->pathlen = pathlen;
-}
-
-static inline void rtems_filesystem_eval_path_clear_path(
- rtems_filesystem_eval_path_context_t *ctx
-)
-{
- ctx->pathlen = 0;
-}
-
-static inline const char *rtems_filesystem_eval_path_get_token(
- rtems_filesystem_eval_path_context_t *ctx
-)
-{
- return ctx->token;
-}
-
-static inline size_t rtems_filesystem_eval_path_get_tokenlen(
- rtems_filesystem_eval_path_context_t *ctx
-)
-{
- return ctx->tokenlen;
-}
-
-static inline void rtems_filesystem_eval_path_set_token(
- rtems_filesystem_eval_path_context_t *ctx,
- const char *token,
- size_t tokenlen
-)
-{
- ctx->token = token;
- ctx->tokenlen = tokenlen;
-}
-
-static inline void rtems_filesystem_eval_path_clear_token(
- rtems_filesystem_eval_path_context_t *ctx
-)
-{
- ctx->tokenlen = 0;
-}
-
-static inline void rtems_filesystem_eval_path_put_back_token(
- rtems_filesystem_eval_path_context_t *ctx
-)
-{
- size_t tokenlen = ctx->tokenlen;
-
- ctx->path -= tokenlen;
- ctx->pathlen += tokenlen;
- ctx->tokenlen = 0;
-}
-
-void rtems_filesystem_eval_path_eat_delimiter(
- rtems_filesystem_eval_path_context_t *ctx
-);
-
-void rtems_filesystem_eval_path_next_token(
- rtems_filesystem_eval_path_context_t *ctx
-);
-
-static inline void rtems_filesystem_eval_path_get_next_token(
- rtems_filesystem_eval_path_context_t *ctx,
- const char **token,
- size_t *tokenlen
-)
-{
- rtems_filesystem_eval_path_next_token(ctx);
- *token = ctx->token;
- *tokenlen = ctx->tokenlen;
-}
-
-static inline rtems_filesystem_location_info_t *
-rtems_filesystem_eval_path_get_currentloc(
- rtems_filesystem_eval_path_context_t *ctx
-)
-{
- return &ctx->currentloc;
-}
-
-static inline bool rtems_filesystem_eval_path_has_path(
- const rtems_filesystem_eval_path_context_t *ctx
-)
-{
- return ctx->pathlen > 0;
-}
-
-static inline bool rtems_filesystem_eval_path_has_token(
- const rtems_filesystem_eval_path_context_t *ctx
-)
-{
- return ctx->tokenlen > 0;
-}
-
-static inline int rtems_filesystem_eval_path_get_flags(
- const rtems_filesystem_eval_path_context_t *ctx
-)
-{
- return ctx->flags;
-}
-
-static inline void rtems_filesystem_eval_path_set_flags(
- rtems_filesystem_eval_path_context_t *ctx,
- int flags
-)
-{
- ctx->flags = flags;
-}
-
-static inline void rtems_filesystem_eval_path_clear_and_set_flags(
- rtems_filesystem_eval_path_context_t *ctx,
- int clear,
- int set
-)
-{
- int flags = ctx->flags;
-
- flags &= ~clear;
- flags |= set;
-
- ctx->flags = flags;
-}
-
-static inline void rtems_filesystem_eval_path_extract_currentloc(
- rtems_filesystem_eval_path_context_t *ctx,
- rtems_filesystem_location_info_t *get
-)
-{
- rtems_filesystem_location_copy_and_detach(
- get,
- &ctx->currentloc
- );
-}
-
-void rtems_filesystem_eval_path_error(
- rtems_filesystem_eval_path_context_t *ctx,
- int eno
-);
-
-/**
- * @brief Checks that the locations exist in the same file system instance.
- *
- * @retval 0 The locations exist and are in the same file system instance.
- * @retval -1 An error occurred. The @c errno indicates the error.
- */
-int rtems_filesystem_location_exists_in_same_instance_as(
- const rtems_filesystem_location_info_t *a,
- const rtems_filesystem_location_info_t *b
-);
-
-/**
- * @brief Checks if access to an object is allowed for the current user.
- *
- * If the effective UID is zero or equals the UID of the object, then the user
- * permission flags of the object will be used. Otherwise if the effective GID
- * is zero or equals the GID of the object or one of the supplementary group
- * IDs is equal to the GID of the object, then the group permission flags of
- * the object will be used. Otherwise the other permission flags of the object
- * will be used.
- *
- * @param[in] flags The flags determining the access type. It can be
- * RTEMS_FS_PERMS_READ, RTEMS_FS_PERMS_WRITE or RTEMS_FS_PERMS_EXEC.
- * @param[in] object_mode The mode of the object specifying the permission flags.
- * @param[in] object_uid The UID of the object.
- * @param[in] object_gid The GID of the object.
- *
- * @retval true Access is allowed.
- * @retval false Otherwise.
- */
-bool rtems_filesystem_check_access(
- int flags,
- mode_t object_mode,
- uid_t object_uid,
- gid_t object_gid
-);
-
-bool rtems_filesystem_eval_path_check_access(
- rtems_filesystem_eval_path_context_t *ctx,
- int eval_flags,
- mode_t node_mode,
- uid_t node_uid,
- gid_t node_gid
-);
-
-static inline bool rtems_filesystem_is_delimiter(char c)
-{
- return c == '/' || c == '\\';
-}
-
-static inline bool rtems_filesystem_is_current_directory(
- const char *token,
- size_t tokenlen
-)
-{
- return tokenlen == 1 && token [0] == '.';
-}
-
-static inline bool rtems_filesystem_is_parent_directory(
- const char *token,
- size_t tokenlen
-)
-{
- return tokenlen == 2 && token [0] == '.' && token [1] == '.';
-}
-
-typedef ssize_t ( *rtems_libio_iovec_adapter )(
- rtems_libio_t *iop,
- const struct iovec *iov,
- int iovcnt,
- ssize_t total
-);
-
-static inline ssize_t rtems_libio_iovec_eval(
- int fd,
- const struct iovec *iov,
- int iovcnt,
- unsigned int flags,
- rtems_libio_iovec_adapter adapter
-)
-{
- ssize_t total;
- int v;
- rtems_libio_t *iop;
-
- /*
- * Argument validation on IO vector
- */
- if ( iov == NULL )
- rtems_set_errno_and_return_minus_one( EINVAL );
-
- if ( iovcnt <= 0 )
- rtems_set_errno_and_return_minus_one( EINVAL );
-
- if ( iovcnt > IOV_MAX )
- rtems_set_errno_and_return_minus_one( EINVAL );
-
- /*
- * OpenGroup says that you are supposed to return EINVAL if the
- * sum of the iov_len values in the iov array would overflow a
- * ssize_t.
- */
- total = 0;
- for ( v = 0 ; v < iovcnt ; ++v ) {
- size_t len = iov[ v ].iov_len;
-
- if ( len > ( size_t ) ( SSIZE_MAX - total ) ) {
- rtems_set_errno_and_return_minus_one( EINVAL );
- }
-
- total += ( ssize_t ) len;
-
- if ( iov[ v ].iov_base == NULL && len != 0 ) {
- rtems_set_errno_and_return_minus_one( EINVAL );
- }
- }
-
- LIBIO_GET_IOP_WITH_ACCESS( fd, iop, flags, EBADF );
-
- if ( total > 0 ) {
- total = ( *adapter )( iop, iov, iovcnt, total );
- }
-
- rtems_libio_iop_drop( iop );
- return total;
-}
-
-/**
- * @brief Returns the file type of the file referenced by the filesystem
- * location.
- *
- * @brief[in] loc The filesystem location.
- *
- * @return The type of the file or an invalid file type in case of an error.
- */
-static inline mode_t rtems_filesystem_location_type(
- const rtems_filesystem_location_info_t *loc
-)
-{
- struct stat st;
-
- st.st_mode = 0;
- (void) ( *loc->handlers->fstat_h )( loc, &st );
-
- return st.st_mode;
-}
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-/* end of include file */
diff --git a/cpukit/libcsupport/include/rtems/malloc.h b/cpukit/libcsupport/include/rtems/malloc.h
deleted file mode 100644
index 7c00f21e77..0000000000
--- a/cpukit/libcsupport/include/rtems/malloc.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
- * @file rtems/malloc.h
- *
- * This file defines the interface to RTEMS extensions to the Malloc Family.
- */
-
-/*
- * COPYRIGHT (c) 1989-2011.
- * On-Line Applications Research Corporation (OAR).
- *
- * The license and distribution terms for this file may in
- * the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef _RTEMS_MALLOC_H
-#define _RTEMS_MALLOC_H
-
-#include <rtems.h>
-#include <rtems/bspIo.h>
-#include <rtems/libcsupport.h> /* for malloc_walk() */
-
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @defgroup MallocSupport Malloc Support
- *
- * @ingroup libcsupport
- *
- * @brief RTEMS extensions to the Malloc Family
- */
-
-/**
- * @brief C program heap control.
- *
- * This is the pointer to the heap control structure used to manage the C
- * program heap.
- */
-extern Heap_Control *RTEMS_Malloc_Heap;
-
-void RTEMS_Malloc_Initialize(
- const Heap_Area *areas,
- size_t area_count,
- Heap_Initialization_or_extend_handler extend
-);
-
-extern ptrdiff_t RTEMS_Malloc_Sbrk_amount;
-
-static inline void rtems_heap_set_sbrk_amount( ptrdiff_t sbrk_amount )
-{
- RTEMS_Malloc_Sbrk_amount = sbrk_amount;
-}
-
-typedef void *(*rtems_heap_extend_handler)(
- Heap_Control *heap,
- size_t alloc_size
-);
-
-/**
- * @brief RTEMS Extend Heap via Sbrk
- */
-void *rtems_heap_extend_via_sbrk(
- Heap_Control *heap,
- size_t alloc_size
-);
-
-void *rtems_heap_null_extend(
- Heap_Control *heap,
- size_t alloc_size
-);
-
-extern const rtems_heap_extend_handler rtems_malloc_extend_handler;
-
-/*
- * Malloc Plugin to Dirty Memory at Allocation Time
- */
-typedef void (*rtems_malloc_dirtier_t)(void *, size_t);
-extern rtems_malloc_dirtier_t rtems_malloc_dirty_helper;
-
-/**
- * @brief Dirty Memory Function
- *
- * This method fills the specified area with a non-zero pattern
- * to aid in debugging programs which do not initialize their
- * memory allocated from the heap.
- */
-void rtems_malloc_dirty_memory(
- void *start,
- size_t size
-);
-
-/**
- * @brief RTEMS Variation on Aligned Memory Allocation
- *
- * This method is a help memalign implementation which does all
- * error checking done by posix_memalign() EXCEPT it does NOT
- * place numeric restrictions on the alignment value.
- *
- * @param[in] pointer points to the user pointer
- * @param[in] alignment is the desired alignment
- * @param[in] size is the allocation request size in bytes
- *
- * @return This methods returns zero on success and a POSIX errno
- * value to indicate the failure condition. On success
- * *pointer will contain the address of the allocated memory.
- */
-int rtems_memalign(
- void **pointer,
- size_t alignment,
- size_t size
-);
-
-/**
- * @brief Allocates a memory area of size @a size bytes from the heap.
- *
- * If the alignment parameter @a alignment is not equal to zero, the allocated
- * memory area will begin at an address aligned by this value.
- *
- * If the boundary parameter @a boundary is not equal to zero, the allocated
- * memory area will comply with a boundary constraint. The boundary value
- * specifies the set of addresses which are aligned by the boundary value. The
- * interior of the allocated memory area will not contain an element of this
- * set. The begin or end address of the area may be a member of the set.
- *
- * A size value of zero will return a unique address which may be freed with
- * free().
- *
- * The memory allocated by this function can be released with a call to free().
- *
- * @return A pointer to the begin of the allocated memory area, or @c NULL if
- * no memory is available or the parameters are inconsistent.
- */
-void *rtems_heap_allocate_aligned_with_boundary(
- size_t size,
- uintptr_t alignment,
- uintptr_t boundary
-);
-
-/**
- * @brief Extends the memory available for the heap using the memory area
- * starting at @a area_begin of size @a area_size bytes.
- *
- * There are no alignment requirements. The memory area must be big enough to
- * contain some maintenance blocks. It must not overlap parts of the current
- * heap areas. Disconnected subordinate heap areas will lead to used blocks
- * which cover the gaps. Extending with an inappropriate memory area will
- * corrupt the heap.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_INVALID_ADDRESS Invalid memory area.
- */
-rtems_status_code rtems_heap_extend(
- void *area_begin,
- uintptr_t area_size
-);
-
-/**
- * @brief Greedy allocate that empties the heap.
- *
- * Afterwards the heap has at most @a block_count allocatable blocks of sizes
- * specified by @a block_sizes. The @a block_sizes must point to an array with
- * @a block_count members. All other blocks are used.
- *
- * @see rtems_heap_greedy_free().
- */
-void *rtems_heap_greedy_allocate(
- const uintptr_t *block_sizes,
- size_t block_count
-);
-
-/**
- * @brief Greedy allocate all blocks except the largest free block.
- *
- * Afterwards the heap has at most one allocatable block. This block is the
- * largest free block if it exists. The allocatable size of this block is
- * stored in @a allocatable_size. All other blocks are used.
- *
- * @see rtems_heap_greedy_free().
- */
-void *rtems_heap_greedy_allocate_all_except_largest(
- uintptr_t *allocatable_size
-);
-
-/**
- * @brief Frees space of a greedy allocation.
- *
- * The @a opaque argument must be the return value of
- * rtems_heap_greedy_allocate() or
- * rtems_heap_greedy_allocate_all_except_largest().
- */
-void rtems_heap_greedy_free( void *opaque );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/cpukit/libcsupport/include/rtems/termiostypes.h b/cpukit/libcsupport/include/rtems/termiostypes.h
deleted file mode 100644
index b3cac66e92..0000000000
--- a/cpukit/libcsupport/include/rtems/termiostypes.h
+++ /dev/null
@@ -1,602 +0,0 @@
-/**
- * @file rtems/termiostypes.h
- *
- * RTEMS termios device support internal data structures
- */
-
-/*
- * COPYRIGHT (c) 1989-2011.
- * On-Line Applications Research Corporation (OAR).
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef __TERMIOSTYPES_H
-#define __TERMIOSTYPES_H
-
-#include <rtems.h>
-#include <rtems/libio.h>
-#include <rtems/assoc.h>
-#include <rtems/chain.h>
-#include <sys/ioccom.h>
-#include <stdint.h>
-#include <termios.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @defgroup TermiostypesSupport RTEMS Termios Device Support
- *
- * @ingroup libcsupport
- *
- * @brief RTEMS Termios Device Support Internal Data Structures
- */
-
-/*
- * Wakeup callback data structure
- */
-struct ttywakeup {
- void (*sw_pfn)(struct termios *tty, void *arg);
- void *sw_arg;
-};
-
-/*
- * Variables associated with the character buffer
- */
-struct rtems_termios_rawbuf {
- char *theBuf;
- volatile unsigned int Head;
- volatile unsigned int Tail;
- volatile unsigned int Size;
- rtems_id Semaphore;
-};
-
-typedef enum {
- TERMIOS_POLLED,
- TERMIOS_IRQ_DRIVEN,
- TERMIOS_TASK_DRIVEN,
- TERMIOS_IRQ_SERVER_DRIVEN
-} rtems_termios_device_mode;
-
-struct rtems_termios_tty;
-
-/**
- * @brief Termios device context.
- *
- * @see RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER(),
- * rtems_termios_device_context_initialize() and
- * rtems_termios_device_install().
- */
-typedef struct rtems_termios_device_context {
- union {
- /* Used for TERMIOS_POLLED and TERMIOS_IRQ_DRIVEN */
- rtems_interrupt_lock interrupt;
-
- /* Used for TERMIOS_IRQ_SERVER_DRIVEN or TERMIOS_TASK_DRIVEN */
- rtems_id mutex;
- } lock;
-
- void ( *lock_acquire )(
- struct rtems_termios_device_context *,
- rtems_interrupt_lock_context *
- );
-
- void ( *lock_release )(
- struct rtems_termios_device_context *,
- rtems_interrupt_lock_context *
- );
-} rtems_termios_device_context;
-
-void rtems_termios_device_lock_acquire_default(
- rtems_termios_device_context *ctx,
- rtems_interrupt_lock_context *lock_context
-);
-
-void rtems_termios_device_lock_release_default(
- rtems_termios_device_context *ctx,
- rtems_interrupt_lock_context *lock_context
-);
-
-/**
- * @brief Initializes a device context.
- *
- * @param[in] context The Termios device context.
- * @param[in] name The name for the interrupt lock. This name must be a
- * string persistent throughout the life time of this lock. The name is only
- * used if profiling is enabled.
- */
-RTEMS_INLINE_ROUTINE void rtems_termios_device_context_initialize(
- rtems_termios_device_context *context,
- const char *name
-)
-{
- rtems_interrupt_lock_initialize( &context->lock.interrupt, name );
- context->lock_acquire = rtems_termios_device_lock_acquire_default;
- context->lock_release = rtems_termios_device_lock_release_default;
-}
-
-/**
- * @brief Initializer for static initialization of Termios device contexts.
- *
- * @param name The name for the interrupt lock. It must be a string. The name
- * is only used if profiling is enabled.
- */
-#define RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER( name ) \
- { \
- { RTEMS_INTERRUPT_LOCK_INITIALIZER( name ) }, \
- rtems_termios_device_lock_acquire_default, \
- rtems_termios_device_lock_release_default \
- }
-
-/**
- * @brief Termios device handler.
- *
- * @see rtems_termios_device_install().
- */
-typedef struct {
- /**
- * @brief First open of this device.
- *
- * @param[in] tty The Termios control. This parameter may be passed to
- * interrupt service routines since it must be provided for the
- * rtems_termios_enqueue_raw_characters() and
- * rtems_termios_dequeue_characters() functions.
- * @param[in] context The Termios device context.
- * @param[in] term The current Termios attributes.
- * @param[in] args The open/close arguments. This is parameter provided to
- * support legacy drivers. It must not be used by new drivers.
- *
- * @retval true Successful operation.
- * @retval false Cannot open device.
- *
- * @see rtems_termios_get_device_context() and rtems_termios_set_best_baud().
- */
- bool (*first_open)(
- struct rtems_termios_tty *tty,
- rtems_termios_device_context *context,
- struct termios *term,
- rtems_libio_open_close_args_t *args
- );
-
- /**
- * @brief Last close of this device.
- *
- * @param[in] tty The Termios control.
- * @param[in] context The Termios device context.
- * @param[in] args The open/close arguments. This is parameter provided to
- * support legacy drivers. It must not be used by new drivers.
- */
- void (*last_close)(
- struct rtems_termios_tty *tty,
- rtems_termios_device_context *context,
- rtems_libio_open_close_args_t *args
- );
-
- /**
- * @brief Polled read.
- *
- * In case mode is TERMIOS_IRQ_DRIVEN, TERMIOS_IRQ_SERVER_DRIVEN or
- * TERMIOS_TASK_DRIVEN, then data is received via
- * rtems_termios_enqueue_raw_characters().
- *
- * @param[in] context The Termios device context.
- *
- * @retval char The received data encoded as unsigned char.
- * @retval -1 No data currently available.
- */
- int (*poll_read)(rtems_termios_device_context *context);
-
- /**
- * @brief Polled write in case mode is TERMIOS_POLLED or write support
- * otherwise.
- *
- * @param[in] context The Termios device context.
- * @param[in] buf The output buffer.
- * @param[in] len The output buffer length in characters.
- */
- void (*write)(
- rtems_termios_device_context *context,
- const char *buf,
- size_t len
- );
-
- /**
- * @brief Set attributes after a Termios settings change.
- *
- * @param[in] context The Termios device context.
- * @param[in] term The new Termios attributes.
- *
- * @retval true Successful operation.
- * @retval false Invalid attributes.
- */
- bool (*set_attributes)(
- rtems_termios_device_context *context,
- const struct termios *term
- );
-
- /**
- * @brief IO control handler.
- *
- * Invoked in case the Termios layer cannot deal with the IO request.
- *
- * @param[in] context The Termios device context.
- * @param[in] request The IO control request.
- * @param[in] buffer The IO control buffer.
- */
- int (*ioctl)(
- rtems_termios_device_context *context,
- ioctl_command_t request,
- void *buffer
- );
-
- /**
- * @brief Termios device mode.
- */
- rtems_termios_device_mode mode;
-} rtems_termios_device_handler;
-
-/**
- * @brief Termios device flow control handler.
- *
- * @see rtems_termios_device_install().
- */
-typedef struct {
- /**
- * @brief Indicate to stop remote transmitter.
- *
- * @param[in] context The Termios device context.
- */
- void (*stop_remote_tx)(rtems_termios_device_context *context);
-
- /**
- * @brief Indicate to start remote transmitter.
- *
- * @param[in] context The Termios device context.
- */
- void (*start_remote_tx)(rtems_termios_device_context *context);
-} rtems_termios_device_flow;
-
-/**
- * @brief Termios device node for installed devices.
- *
- * @see rtems_termios_device_install().
- */
-typedef struct rtems_termios_device_node {
- rtems_chain_node node;
- rtems_device_major_number major;
- rtems_device_minor_number minor;
- const rtems_termios_device_handler *handler;
- const rtems_termios_device_flow *flow;
- rtems_termios_device_context *context;
- struct rtems_termios_tty *tty;
-} rtems_termios_device_node;
-
-/*
- * Variables associated with each termios instance.
- * One structure for each hardware I/O device.
- */
-typedef struct rtems_termios_tty {
- /*
- * Linked-list of active TERMIOS devices
- */
- struct rtems_termios_tty *forw;
- struct rtems_termios_tty *back;
-
- /*
- * How many times has this device been opened
- */
- int refcount;
-
- /*
- * This device
- */
- rtems_device_major_number major;
- rtems_device_minor_number minor;
-
- /*
- * Mutual-exclusion semaphores
- */
- rtems_id isem;
- rtems_id osem;
-
- /*
- * The canonical (cooked) character buffer
- */
- char *cbuf;
- int ccount;
- int cindex;
-
- /*
- * Keep track of cursor (printhead) position
- */
- int column;
- int read_start_column;
-
- /*
- * The ioctl settings
- */
- struct termios termios;
- rtems_interval vtimeTicks;
-
- /*
- * Raw input character buffer
- */
- struct rtems_termios_rawbuf rawInBuf;
- uint32_t rawInBufSemaphoreOptions;
- rtems_interval rawInBufSemaphoreTimeout;
- rtems_interval rawInBufSemaphoreFirstTimeout;
- unsigned int rawInBufDropped; /* Statistics */
-
- /*
- * Raw output character buffer
- */
- struct rtems_termios_rawbuf rawOutBuf;
- int t_dqlen; /* count of characters dequeued from device */
- enum {rob_idle, rob_busy, rob_wait } rawOutBufState;
-
- /*
- * Callbacks to device-specific routines
- */
- rtems_termios_callbacks device;
-
- /**
- * @brief Context for legacy devices using the callbacks.
- */
- rtems_termios_device_context legacy_device_context;
-
- /**
- * @brief The device handler.
- */
- rtems_termios_device_handler handler;
-
- /**
- * @brief The device flow control handler.
- */
- rtems_termios_device_flow flow;
-
- volatile unsigned int flow_ctrl;
- unsigned int lowwater,highwater;
-
- /*
- * I/O task IDs (for task-driven drivers)
- */
- rtems_id rxTaskId;
- rtems_id txTaskId;
-
- /*
- * line discipline related stuff
- */
- int t_line; /* id of line discipline */
- void *t_sc; /* hook for discipline-specific data structure */
-
- /*
- * Wakeup callback variables
- */
- struct ttywakeup tty_snd;
- struct ttywakeup tty_rcv;
- bool tty_rcvwakeup;
-
- /**
- * @brief Corresponding device node.
- */
- rtems_termios_device_node *device_node;
-
- /**
- * @brief Context for device driver.
- */
- rtems_termios_device_context *device_context;
-} rtems_termios_tty;
-
-/**
- * @brief Installs a Termios device.
- *
- * The installed Termios device may be removed via unlink().
- *
- * @param[in] device_file The device file path.
- * @param[in] handler The device handler. It must be persistent throughout the
- * installed time of the device.
- * @param[in] flow The device flow control handler. The device flow control
- * handler are optional and may be @c NULL. If present must be persistent
- * throughout the installed time of the device.
- * @param[in] context The device context. It must be persistent throughout the
- * installed time of the device.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_NO_MEMORY Not enough memory to create a device node.
- * @retval RTEMS_UNSATISFIED Creation of the device file failed.
- * @retval RTEMS_INCORRECT_STATE Termios is not initialized.
- *
- * @see rtems_termios_get_device_context().
- */
-rtems_status_code rtems_termios_device_install(
- const char *device_file,
- const rtems_termios_device_handler *handler,
- const rtems_termios_device_flow *flow,
- rtems_termios_device_context *context
-);
-
-/**
- * @brief Returns the device context of an installed Termios device.
- *
- * @param[in] tty The Termios control.
- */
-RTEMS_INLINE_ROUTINE void *rtems_termios_get_device_context(
- const rtems_termios_tty *tty
-)
-{
- return tty->device_context;
-}
-
-/**
- * @brief Acquires the device lock.
- *
- * @param[in] context The device context.
- * @param[in] lock_context The local interrupt lock context for an acquire and
- * release pair.
- */
-RTEMS_INLINE_ROUTINE void rtems_termios_device_lock_acquire(
- rtems_termios_device_context *context,
- rtems_interrupt_lock_context *lock_context
-)
-{
- ( *context->lock_acquire )( context, lock_context );
-}
-
-/**
- * @brief Releases the device lock.
- *
- * @param[in] context The device context.
- * @param[in] lock_context The local interrupt lock context for an acquire and
- * release pair.
- */
-RTEMS_INLINE_ROUTINE void rtems_termios_device_lock_release(
- rtems_termios_device_context *context,
- rtems_interrupt_lock_context *lock_context
-)
-{
- ( *context->lock_release )( context, lock_context );
-}
-
-/**
- * @brief Sets the best baud value in the Termios control.
- *
- * The valid Termios baud values are between 0 and 460800. The Termios baud
- * value is chosen which minimizes the difference to the value specified.
- *
- * @param[in] term The Termios attributes.
- * @param[in] baud The current baud setting of the device.
- */
-void rtems_termios_set_best_baud(
- struct termios *term,
- uint32_t baud
-);
-
-struct rtems_termios_linesw {
- int (*l_open) (struct rtems_termios_tty *tp);
- int (*l_close)(struct rtems_termios_tty *tp);
- int (*l_read )(struct rtems_termios_tty *tp,rtems_libio_rw_args_t *args);
- int (*l_write)(struct rtems_termios_tty *tp,rtems_libio_rw_args_t *args);
- int (*l_rint )(int c,struct rtems_termios_tty *tp);
- int (*l_start)(struct rtems_termios_tty *tp);
- int (*l_ioctl)(struct rtems_termios_tty *tp,rtems_libio_ioctl_args_t *args);
- int (*l_modem)(struct rtems_termios_tty *tp,int flags);
-};
-
-/*
- * FIXME: this should move to termios.h!
- */
-void rtems_termios_rxirq_occured(struct rtems_termios_tty *tty);
-
-/*
- * FIXME: this should move to termios.h!
- * put a string to output ring buffer
- */
-void rtems_termios_puts (
- const void *buf,
- size_t len,
- struct rtems_termios_tty *tty
-);
-
-/*
- * global hooks for line disciplines
- */
-extern struct rtems_termios_linesw rtems_termios_linesw[];
-extern int rtems_termios_nlinesw;
-
-#define TTYDISC 0 /* termios tty line discipline */
-#define TABLDISC 3 /* tablet discipline */
-#define SLIPDISC 4 /* serial IP discipline */
-#define PPPDISC 5 /* PPP discipline */
-#define MAXLDISC 8
-
-/* baudrate xxx integer type */
-typedef uint32_t rtems_termios_baud_t;
-
-/**
- * @brief RTEMS Termios Baud Table
- */
-extern const rtems_assoc_t rtems_termios_baud_table [];
-
-/**
- * @brief Converts the Integral Baud value @a baud to the Termios Control Flag
- * Representation
- *
- * @retval B0 Invalid baud value or a baud value of 0.
- * @retval other Baud constant according to @a baud.
- */
-speed_t rtems_termios_number_to_baud(rtems_termios_baud_t baud);
-
-/**
- * @brief Converts the baud flags to an integral baud value.
- *
- * @retval 0 Invalid baud value or a baud value of @c B0.
- * @retval other Integral baud value.
- */
-rtems_termios_baud_t rtems_termios_baud_to_number(speed_t baud);
-
-/**
- * @brief Convert Bxxx Constant to Index
- */
-int rtems_termios_baud_to_index(rtems_termios_baud_t termios_baud);
-
-/**
- * @brief Sets the initial @a baud in the Termios context @a tty.
- *
- * @retval 0 Successful operation.
- * @retval -1 Invalid baud value.
- */
-int rtems_termios_set_initial_baud(
- struct rtems_termios_tty *tty,
- rtems_termios_baud_t baud
-);
-
-/**
- * @brief Termios kqueue() filter filesystem node handler
- *
- * Real implementation is provided by libbsd.
- */
-int rtems_termios_kqfilter(
- rtems_libio_t *iop,
- struct knote *kn
-);
-
-/**
- * @brief Termios mmap() filter filesystem node handler
- *
- * Real implementation is provided by libbsd.
- */
-int rtems_termios_mmap(
- rtems_libio_t *iop,
- void **addr,
- size_t len,
- int prot,
- off_t off
-);
-
-/**
- * @brief Termios poll() filesystem node handler.
- *
- * Real implementation is provided by libbsd.
- */
-int rtems_termios_poll(
- rtems_libio_t *iop,
- int events
-);
-
-#define RTEMS_IO_SNDWAKEUP _IOW('t', 11, struct ttywakeup ) /* send tty wakeup */
-#define RTEMS_IO_RCVWAKEUP _IOW('t', 12, struct ttywakeup ) /* recv tty wakeup */
-
-#define OLCUC 0x00000100 /* map lower case to upper case on output */
-#define IUCLC 0x00004000 /* map upper case to lower case on input */
-
-#define RTEMS_TERMIOS_NUMBER_BAUD_RATES 25
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* TERMIOSTYPES_H */
diff --git a/cpukit/libcsupport/include/rtems/tod.h b/cpukit/libcsupport/include/rtems/tod.h
deleted file mode 100644
index 971e8548e8..0000000000
--- a/cpukit/libcsupport/include/rtems/tod.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * @file
- *
- * @ingroup shared_tod
- *
- * @brief Real Time Clock Time of Day API Definition
- */
-
-/*
- *
- * Based on MVME162 TOD by:
- * COPYRIGHT (C) 1997
- * by Katsutoshi Shibuya - BU Denken Co.,Ltd. - Sapporo - JAPAN
- * ALL RIGHTS RESERVED
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef TOD_H
-#define TOD_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @defgroup shared_tod RTC
- *
- * @ingroup bsp_shared
- *
- * @brief Set the RTC
- */
-int setRealTime(
- const rtems_time_of_day *tod
-);
-
-/*
- * Get the time from the RTC.
- */
-
-void getRealTime(
- rtems_time_of_day *tod
-);
-
-/*
- * Read real time from RTC and set it to RTEMS' clock manager
- */
-
-void setRealTimeToRTEMS(void);
-
-/*
- * Read time from RTEMS' clock manager and set it to RTC
- */
-
-void setRealTimeFromRTEMS(void);
-
-/*
- * Return the difference between RTC and RTEMS' clock manager time in minutes.
- * If the difference is greater than 1 day, this returns 9999.
- */
-
-int checkRealTime(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif