summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport/include/rtems
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libcsupport/include/rtems')
-rw-r--r--cpukit/libcsupport/include/rtems/assoc.h120
-rw-r--r--cpukit/libcsupport/include/rtems/error.h60
-rw-r--r--cpukit/libcsupport/include/rtems/framebuffer.h158
-rwxr-xr-xcpukit/libcsupport/include/rtems/gxx_wrappers.h78
-rw-r--r--cpukit/libcsupport/include/rtems/libcsupport.h81
-rw-r--r--cpukit/libcsupport/include/rtems/libio.h1685
-rw-r--r--cpukit/libcsupport/include/rtems/libio_.h246
-rw-r--r--cpukit/libcsupport/include/rtems/malloc.h186
-rw-r--r--cpukit/libcsupport/include/rtems/termiostypes.h210
-rw-r--r--cpukit/libcsupport/include/rtems/watchdogdrv.h73
10 files changed, 2897 insertions, 0 deletions
diff --git a/cpukit/libcsupport/include/rtems/assoc.h b/cpukit/libcsupport/include/rtems/assoc.h
new file mode 100644
index 0000000000..5b72b8d086
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/assoc.h
@@ -0,0 +1,120 @@
+/**
+ * @file rtems/assoc.h
+ */
+
+/*
+ *
+ * Rtems associativity routines. Mainly used to convert a value from
+ * one space to another (eg: our errno's to host errno's and v.v)
+ *
+ *
+ * $Id$
+ */
+
+#ifndef _RTEMS_RTEMS_ASSOC_H
+#define _RTEMS_RTEMS_ASSOC_H
+
+#include <stdint.h> /* uint32_t */
+
+#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)"
+
+const rtems_assoc_t *rtems_assoc_ptr_by_name(
+ const rtems_assoc_t *,
+ const char *
+);
+
+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
+);
+
+uint32_t rtems_assoc_local_by_remote(
+ const rtems_assoc_t *,
+ uint32_t
+);
+
+uint32_t rtems_assoc_remote_by_name(
+ const rtems_assoc_t *,
+ const char *
+);
+uint32_t rtems_assoc_local_by_name(
+ const rtems_assoc_t *,
+ const char *
+);
+
+const char *rtems_assoc_name_by_local(
+ const rtems_assoc_t *,
+ uint32_t
+);
+
+const char *rtems_assoc_name_by_remote(
+ const rtems_assoc_t *,
+ uint32_t
+);
+
+uint32_t rtems_assoc_remote_by_local_bitfield(
+ const rtems_assoc_t *,
+ uint32_t
+);
+
+char *rtems_assoc_name_by_local_bitfield(
+ const rtems_assoc_t *,
+ uint32_t ,
+ char *
+);
+
+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
+);
+
+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))
+
+/*
+ * 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
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! _RTEMS_RTEMS_ASSOC_H */
diff --git a/cpukit/libcsupport/include/rtems/error.h b/cpukit/libcsupport/include/rtems/error.h
new file mode 100644
index 0000000000..6c589e8e94
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/error.h
@@ -0,0 +1,60 @@
+/**
+ * @file rtems/error.h
+ */
+
+/*
+ * Defines and externs for rtems error reporting
+ *
+ * $Id$
+ */
+
+#ifndef _RTEMS_RTEMS_ERROR_H
+#define _RTEMS_RTEMS_ERROR_H
+
+#include <rtems/rtems/status.h>
+#include <rtems/score/interr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef Internal_errors_t rtems_error_code_t;
+
+/*
+ * rtems_error() 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 */
+
+const char *rtems_status_text(rtems_status_code sc);
+int rtems_error(
+ rtems_error_code_t error_code,
+ const char *printf_format,
+ ...
+);
+void rtems_panic(
+ const char *printf_format,
+ ...
+) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
+
+extern int rtems_panic_in_progress;
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
+/* end of include file */
diff --git a/cpukit/libcsupport/include/rtems/framebuffer.h b/cpukit/libcsupport/include/rtems/framebuffer.h
new file mode 100644
index 0000000000..a300716c58
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/framebuffer.h
@@ -0,0 +1,158 @@
+/**
+ * @file rtems/framebuffer.h
+ */
+
+/*
+ * This file describes the Frame Buffer Device Driver for all boards.
+ *
+ * COPYRIGHT (c) 1989-2009.
+ * 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.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#ifndef __RTEMS_FRAMEBUFFER_h__
+#define __RTEMS_FRAMEBUFFER_h__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * This macro defines the standard name for the frame buffer device
+ * that is available to applications.
+ */
+#define FRAMEBUFFER_DEVICE_NAME "/dev/fb"
+
+/**
+ * This macro defines the standard device driver table entry for
+ * a frame buffer device driver.
+ */
+#define FRAME_BUFFER_DRIVER_TABLE_ENTRY \
+ { frame_buffer_initialize, frame_buffer_open, frame_buffer_close, \
+ frame_buffer_read, frame_buffer_write, frame_buffer_control }
+
+/**
+ * @brief Frame Buffer Initialization Entry Point
+ *
+ * This method initializes the frame buffer device driver.
+ *
+ * @param[in] major is the device driver major number
+ * @param[in] minor is the device driver minor number
+ * @param[in] arg is the parameters to this call
+ *
+ * @return This method returns RTEMS_SUCCESSFUL when
+ * the device driver is successfully initialized.
+ */
+rtems_device_driver frame_buffer_initialize(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+);
+
+/**
+ * @brief Frame Buffer Open Entry Point
+ *
+ * This method opens a specific device supported by the
+ * frame buffer device driver.
+ *
+ * @param[in] major is the device driver major number
+ * @param[in] minor is the device driver minor number
+ * @param[in] arg is the parameters to this call
+ *
+ * @return This method returns RTEMS_SUCCESSFUL when
+ * the device driver is successfully opened.
+ */
+rtems_device_driver frame_buffer_open(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+);
+
+/**
+ * @brief Frame Buffer Close Entry Point
+ *
+ * This method closes a specific device supported by the
+ * frame buffer device driver.
+ *
+ * @param[in] major is the device driver major number
+ * @param[in] minor is the device driver minor number
+ * @param[in] arg is the parameters to this call
+ *
+ * @return This method returns RTEMS_SUCCESSFUL when
+ * the device is successfully closed.
+ */
+rtems_device_driver frame_buffer_close(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+);
+
+/**
+ * @brief Frame Buffer Read Entry Point
+ *
+ * This method reads from a specific device supported by the
+ * frame buffer device driver.
+ *
+ * @param[in] major is the device driver major number
+ * @param[in] minor is the device driver minor number
+ * @param[in] arg is the parameters to this call
+ *
+ * @return This method returns RTEMS_SUCCESSFUL when
+ * the device is successfully read from.
+ */
+rtems_device_driver frame_buffer_read(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+);
+
+/**
+ * @brief Frame Buffer Write Entry Point
+ *
+ * This method writes to a specific device supported by the
+ * frame buffer device driver.
+ *
+ * @param[in] major is the device driver major number
+ * @param[in] minor is the device driver minor number
+ * @param[in] arg is the parameters to this call
+ *
+ * @return This method returns RTEMS_SUCCESSFUL when
+ * the device is successfully written.
+ */
+rtems_device_driver frame_buffer_write(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+);
+
+/**
+ * @brief Frame Buffer IO Control Entry Point
+ *
+ * This method performs an IO Control operation on a
+ * specific device supported by the frame buffer device driver.
+ *
+ * @param[in] major is the device driver major number
+ * @param[in] minor is the device driver minor number
+ * @param[in] arg is the parameters to this call
+ *
+ * @return This method returns RTEMS_SUCCESSFUL when
+ * the device driver IO control operation is
+ * successfully performed.
+ */
+rtems_device_driver frame_buffer_control(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg
+);
+
+#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
new file mode 100755
index 0000000000..d4d4aae799
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/gxx_wrappers.h
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ *
+ * $Id$
+ */
+
+#ifndef __GCC_WRAPPERS_h
+#define __GCC_WRAPPERS_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * These typedefs should match with the ones defined in the file
+ * gcc/gthr-rtems.h in the gcc distribution.
+ * FIXME: T.S, 2007/01/31: -> gcc/gthr-rtems.h still declares
+ * void * __gthread_key_t;
+ */
+typedef struct __gthread_key_ {
+ void *val; /* this is switched with the task */
+ void (*dtor)(void*); /* this remains in place for all tasks */
+} __gthread_key, *__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_dtor (__gthread_key_t key, void *ptr);
+
+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
new file mode 100644
index 0000000000..9dfcf851fe
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/libcsupport.h
@@ -0,0 +1,81 @@
+/**
+ * @file rtems/libcsupport.h
+ */
+
+/* libcsupport.h
+ *
+ * This include file contains the information regarding the
+ * RTEMS specific support for the standard C library.
+ *
+ * COPYRIGHT (c) 1989-1999.
+ * 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.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#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
+
+void RTEMS_Malloc_Initialize(
+ void *heap_begin,
+ uintptr_t heap_size,
+ size_t sbrk_amount
+);
+
+extern void malloc_dump(void);
+extern void malloc_walk(size_t source, size_t printf_enabled);
+void malloc_set_heap_pointer(Heap_Control *new_heap);
+Heap_Control *malloc_get_heap_pointer( void );
+extern void libc_init(void);
+extern int host_errno(void);
+extern void fix_syscall_errno(void);
+extern size_t malloc_free_space(void);
+extern void open_dev_console(void);
+
+/*
+ * Prototypes required to install newlib reentrancy user extension
+ */
+bool newlib_create_hook(
+ rtems_tcb *current_task,
+ rtems_tcb *creating_task
+);
+
+#define __RTEMS_NEWLIB_BEGIN 0
+
+void newlib_delete_hook(
+ rtems_tcb *current_task,
+ rtems_tcb *deleted_task
+);
+
+#define RTEMS_NEWLIB_EXTENSION \
+{ \
+ newlib_create_hook, /* rtems_task_create */ \
+ 0, /* rtems_task_start */ \
+ 0, /* rtems_task_restart */ \
+ newlib_delete_hook, /* rtems_task_delete */ \
+ 0, /* task_switch */ \
+ __RTEMS_NEWLIB_BEGIN, /* task_begin */ \
+ 0, /* task_exitted */ \
+ 0 /* fatal */ \
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
diff --git a/cpukit/libcsupport/include/rtems/libio.h b/cpukit/libcsupport/include/rtems/libio.h
new file mode 100644
index 0000000000..73c52e31d7
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/libio.h
@@ -0,0 +1,1685 @@
+/**
+ * @file
+ *
+ * @ingroup LibIO
+ *
+ * @brief Basic IO API.
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2008.
+ * 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.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#ifndef _RTEMS_RTEMS_LIBIO_H
+#define _RTEMS_RTEMS_LIBIO_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/statvfs.h>
+
+#include <unistd.h>
+#include <termios.h>
+
+#include <rtems.h>
+#include <rtems/fs.h>
+#include <rtems/chain.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @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.
+ *
+ * @{
+ */
+
+/**
+ * A 64-bit file offset for internal use by RTEMS. Based on the Newlib
+ * type.
+ */
+typedef _off64_t rtems_off64_t;
+
+/**
+ * @brief File system node types.
+ */
+typedef enum {
+ RTEMS_FILESYSTEM_INVALID_NODE_TYPE,
+ RTEMS_FILESYSTEM_DIRECTORY,
+ RTEMS_FILESYSTEM_DEVICE,
+ RTEMS_FILESYSTEM_HARD_LINK,
+ RTEMS_FILESYSTEM_SYM_LINK,
+ RTEMS_FILESYSTEM_MEMORY_FILE
+} rtems_filesystem_node_types_t;
+
+/**
+ * @name File System Node Operations
+ *
+ * @{
+ */
+
+/**
+ * This type defines the interface to the open(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_open_t)(
+ rtems_libio_t *iop,
+ const char *pathname,
+ uint32_t flag,
+ uint32_t mode
+);
+
+/**
+ * This type defines the interface to the close(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_close_t)(
+ rtems_libio_t *iop
+);
+
+/**
+ * This type defines the interface to the read(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef ssize_t (*rtems_filesystem_read_t)(
+ rtems_libio_t *iop,
+ void *buffer,
+ size_t count
+);
+
+/**
+ * This type defines the interface to the write(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef ssize_t (*rtems_filesystem_write_t)(
+ rtems_libio_t *iop,
+ const void *buffer,
+ size_t count
+);
+
+/**
+ * This type defines the interface to the ioctl(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_ioctl_t)(
+ rtems_libio_t *iop,
+ uint32_t command,
+ void *buffer
+);
+
+/**
+ * This type defines the interface to the lseek(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef rtems_off64_t (*rtems_filesystem_lseek_t)(
+ rtems_libio_t *iop,
+ rtems_off64_t length,
+ int whence
+);
+
+/**
+ * This type defines the interface to the fstat(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_fstat_t)(
+ rtems_filesystem_location_info_t *loc,
+ struct stat *buf
+);
+
+/**
+ * This type defines the interface to the fchmod(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_fchmod_t)(
+ rtems_filesystem_location_info_t *loc,
+ mode_t mode
+);
+
+/**
+ * This type defines the interface to the ftruncate(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_ftruncate_t)(
+ rtems_libio_t *iop,
+ rtems_off64_t length
+);
+
+/**
+ * This type defines the interface to the fpathconf(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_fpathconf_t)(
+ rtems_libio_t *iop,
+ int name
+);
+
+/**
+ * This type defines the interface to the fsync(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_fsync_t)(
+ rtems_libio_t *iop
+);
+
+/**
+ * This type defines the interface to the fdatasync(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_fdatasync_t)(
+ rtems_libio_t *iop
+);
+
+/**
+ * This type defines the interface to the fnctl(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_fcntl_t)(
+ int cmd,
+ rtems_libio_t *iop
+);
+
+typedef int (*rtems_filesystem_rmnod_t)(
+ rtems_filesystem_location_info_t *parent_loc, /* IN */
+ rtems_filesystem_location_info_t *pathloc /* IN */
+);
+
+/** @} */
+
+/**
+ * @brief File system node operations table.
+ */
+struct _rtems_filesystem_file_handlers_r {
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the open(2) system call
+ *
+ * @note This method must have a filesystem specific implementation.
+ *
+ * @note There is no default implementation.
+ */
+ rtems_filesystem_open_t open_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the close(2) system call
+ *
+ * @note This method is REQUIRED by all file systems.
+ *
+ * @note There is no default implementation.
+ */
+ rtems_filesystem_close_t close_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the read(2) system call
+ *
+ * @note This method must have a filesystem specific implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_read_t read_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the write(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_write_t write_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the ioctl(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_ioctl_t ioctl_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the lseek(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_lseek_t lseek_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the fstat(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_fstat_t fstat_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the fchmod(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_fchmod_t fchmod_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the ftruncate(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_ftruncate_t ftruncate_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the fpathconf(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_fpathconf_t fpathconf_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the fsync(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_fsync_t fsync_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the fdatasync(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_fdatasync_t fdatasync_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the fcntl(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_fcntl_t fcntl_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the rmnod(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_rmnod_t rmnod_h;
+};
+
+extern const rtems_filesystem_file_handlers_r
+rtems_filesystem_handlers_default;
+
+/**
+ * This method defines the interface to the default open(2)
+ * system call support which is provided by a file system
+ * implementation.
+ */
+int rtems_filesystem_default_open(
+ rtems_libio_t *iop,
+ const char *pathname,
+ uint32_t flag,
+ uint32_t mode
+);
+
+/**
+ * This method defines the interface to the default close(2)
+ * system call support which is provided by a file system
+ * implementation.
+ */
+int rtems_filesystem_default_close(
+ rtems_libio_t *iop
+);
+
+
+/**
+ * This method defines the interface to the default read(2)
+ * system call support which is provided by a file system
+ * implementation.
+ */
+ssize_t rtems_filesystem_default_read(
+ rtems_libio_t *iop,
+ void *buffer,
+ size_t count
+);
+
+/**
+ * This method defines the interface to the default write(2) system call
+ * support which is provided by a file system implementation.
+ */
+ssize_t rtems_filesystem_default_write(
+ rtems_libio_t *iop,
+ const void *buffer,
+ size_t count
+);
+
+/**
+ * This method defines the interface to the default ioctl(2) system call
+ * support which is provided by a file system implementation.
+ */
+int rtems_filesystem_default_ioctl(
+ rtems_libio_t *iop,
+ uint32_t command,
+ void *buffer
+);
+
+/**
+ * This method defines the interface to the default lseek(2) system call
+ * support which is provided by a file system implementation.
+ */
+rtems_off64_t rtems_filesystem_default_lseek(
+ rtems_libio_t *iop,
+ rtems_off64_t length,
+ int whence
+);
+
+/**
+ * This method defines the interface to the default fstat(2) system call
+ * support which is provided by a file system implementation.
+ */
+int rtems_filesystem_default_fstat(
+ rtems_filesystem_location_info_t *loc,
+ struct stat *buf
+);
+
+/**
+ * This method defines the interface to the default fchmod(2) system call
+ * support which is provided by a file system implementation.
+ */
+int rtems_filesystem_default_fchmod(
+ rtems_filesystem_location_info_t *loc,
+ mode_t mode
+);
+
+/**
+ * This method defines the interface to the default ftruncate(2) system call
+ * support which is provided by a file system implementation.
+ */
+int rtems_filesystem_default_ftruncate(
+ rtems_libio_t *iop,
+ rtems_off64_t length
+);
+
+/**
+ * This method defines the interface to the default fpathconf(2) system call
+ * support which is provided by a file system implementation.
+ */
+int rtems_filesystem_default_fpathconf(
+ rtems_libio_t *iop,
+ int name
+);
+
+/**
+ * This method defines the interface to the default fsync(2) system call
+ * support which is provided by a file system implementation.
+ */
+int rtems_filesystem_default_fsync(
+ rtems_libio_t *iop
+);
+
+/**
+ * This method defines the interface to the default fdatasync(2) system call
+ * support which is provided by a file system implementation.
+ */
+int rtems_filesystem_default_fdatasync(
+ rtems_libio_t *iop
+);
+
+/**
+ * This method defines the interface to the default fnctl(2) system call
+ * support which is provided by a file system implementation.
+ */
+int rtems_filesystem_default_fcntl(
+ int cmd,
+ rtems_libio_t *iop
+);
+
+/**
+ * This method defines the interface to the default rmnod(2) system call
+ * support which is provided by a file system implementation.
+ */
+int rtems_filesystem_default_rmnod(
+ rtems_filesystem_location_info_t *parent_loc, /* IN */
+ rtems_filesystem_location_info_t *pathloc /* IN */
+);
+
+/**
+ * @name File System Operations
+ *
+ * @{
+ */
+
+/**
+ * This type defines the interface to the mknod(2) system call
+ * support which is provided by a file system implementation.
+ *
+ * @note This routine does not allocate any space and
+ * rtems_filesystem_freenode_t is not called by the generic
+ * after calling this routine. ie. node_access does not have
+ * to contain valid data when the routine returns.
+ */
+typedef int (*rtems_filesystem_mknod_t)(
+ const char *path, /* IN */
+ mode_t mode, /* IN */
+ dev_t dev, /* IN */
+ rtems_filesystem_location_info_t *pathloc /* IN/OUT */
+);
+
+/**
+ * This type defines the interface that allows the
+ * file system implementation to parse a path and
+ * allocate any memory necessary for tracking purposes.
+ *
+ * @note rtems_filesystem_freenode_t must be called by
+ * the generic after calling this routine
+ */
+typedef int (*rtems_filesystem_evalpath_t)(
+ const char *pathname, /* IN */
+ size_t pathnamelen, /* IN */
+ int flags, /* IN */
+ rtems_filesystem_location_info_t *pathloc /* IN/OUT */
+);
+
+/**
+ * This type defines the interface that allows the
+ * file system implementation to parse a path with the
+ * intent of creating a new node and to
+ * allocate any memory necessary for tracking purposes.
+ *
+ * @note rtems_filesystem_freenode_t must be called by
+ * the generic after calling this routine
+ */
+typedef int (*rtems_filesystem_evalmake_t)(
+ const char *path, /* IN */
+ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */
+ const char **name /* OUT */
+);
+
+/**
+ * This type defines the interface to the link(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_link_t)(
+ rtems_filesystem_location_info_t *to_loc, /* IN */
+ rtems_filesystem_location_info_t *parent_loc, /* IN */
+ const char *name /* IN */
+);
+
+/**
+ * This type defines the interface to the unlink(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_unlink_t)(
+ rtems_filesystem_location_info_t *parent_pathloc, /* IN */
+ rtems_filesystem_location_info_t *pathloc /* IN */
+);
+
+/**
+ * This type defines the interface to the chown(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_chown_t)(
+ rtems_filesystem_location_info_t *pathloc, /* IN */
+ uid_t owner, /* IN */
+ gid_t group /* IN */
+);
+
+/**
+ * This type defines the interface to the freenod(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_freenode_t)(
+ rtems_filesystem_location_info_t *pathloc /* IN */
+);
+
+/**
+ * This type defines the interface that allows the implemented
+ * filesystem ot mount another filesystem at the given location.
+ */
+typedef int (* rtems_filesystem_mount_t ) (
+ rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
+);
+
+/**
+ * This type defines the interface that allows a file system
+ * implementation to do any necessary work that is needed when
+ * it is being mounted.
+ */
+typedef int (* rtems_filesystem_fsmount_me_t )(
+ rtems_filesystem_mount_table_entry_t *mt_entry, /* IN */
+ const void *data /* IN */
+);
+
+/**
+ * This type defines the interface allow the filesystem to
+ * unmount a filesystem that was mounted at one of its node
+ * locations.
+ */
+typedef int (* rtems_filesystem_unmount_t ) (
+ rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
+);
+
+/**
+ * This type defines the interface that allows a file system
+ * implementation to do any necessary work that is needed when
+ * it is being unmounted.
+ */
+typedef int (* rtems_filesystem_fsunmount_me_t ) (
+ rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
+);
+
+/**
+ * This type defines the interface that will return the
+ * type of a filesystem implementations node.
+ */
+typedef rtems_filesystem_node_types_t (* rtems_filesystem_node_type_t) (
+ rtems_filesystem_location_info_t *pathloc /* IN */
+);
+
+/**
+ * This type defines the interface to the time(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (* rtems_filesystem_utime_t)(
+ rtems_filesystem_location_info_t *pathloc, /* IN */
+ time_t actime, /* IN */
+ time_t modtime /* IN */
+);
+
+/**
+ * This type defines the interface to the link(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_evaluate_link_t)(
+ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */
+ int flags /* IN */
+);
+
+/**
+ * This type defines the interface to the symlink(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_symlink_t)(
+ rtems_filesystem_location_info_t *loc, /* IN */
+ const char *link_name, /* IN */
+ const char *node_name
+);
+
+/**
+ * This type defines the interface to the readlink(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef ssize_t (*rtems_filesystem_readlink_t)(
+ rtems_filesystem_location_info_t *loc, /* IN */
+ char *buf, /* OUT */
+ size_t bufsize
+);
+
+/**
+ * This type defines the interface to the name(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_rename_t)(
+ rtems_filesystem_location_info_t *old_parent_loc, /* IN */
+ rtems_filesystem_location_info_t *old_loc, /* IN */
+ rtems_filesystem_location_info_t *new_parent_loc, /* IN */
+ const char *name /* IN */
+);
+
+/**
+ * This type defines the interface to the statvfs(2) system call
+ * support which is provided by a file system implementation.
+ */
+typedef int (*rtems_filesystem_statvfs_t)(
+ rtems_filesystem_location_info_t *loc, /* IN */
+ struct statvfs *buf /* OUT */
+);
+
+/** @} */
+
+/**
+ * @brief File system operations table.
+ */
+struct _rtems_filesystem_operations_table {
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine that evaluates a character path and
+ * returns the node assocated with the last node in the path.
+ *
+ * @note This method must have a filesystem specific implementation.
+ *
+ * @note There is no default implementation.
+ */
+ rtems_filesystem_evalpath_t evalpath_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine that evaluates a character path and
+ * returns the node assocated with next to the last node in
+ * the path. The last node will be the new node to be created.
+ *
+ * @note This method must have a filesystem specific implementation.
+ *
+ * @note There is no default implementation.
+ */
+ rtems_filesystem_evalmake_t evalformake_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the link(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_link_t link_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the unlink(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_unlink_t unlink_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of a method that returns the node type of the given node.
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_node_type_t node_type_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the link(2) system call
+ *
+ * @note This method may use a mknod implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_mknod_t mknod_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the link(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_chown_t chown_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the freenod(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_freenode_t freenod_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the mount(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_mount_t mount_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the fsmount(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_fsmount_me_t fsmount_me_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the unmount(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_unmount_t unmount_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the fsunmount(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_fsunmount_me_t fsunmount_me_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the utime(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_utime_t utime_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the eval_link(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_evaluate_link_t eval_link_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the sumlink(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_symlink_t symlink_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the readlink(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_readlink_t readlink_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the rename(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_rename_t rename_h;
+
+ /**
+ * This field points to the file system specific implementation
+ * of the support routine for the statvfs(2) system call
+ *
+ * @note This method may use a default implementation.
+ *
+ * @note The default implementation returns -1 and sets
+ * errno to ENOTSUP.
+ */
+ rtems_filesystem_statvfs_t statvfs_h;
+};
+
+extern const rtems_filesystem_operations_table
+rtems_filesystem_operations_default;
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of path evaluation.
+ */
+int rtems_filesystem_default_evalpath(
+ const char *pathname,
+ size_t pathnamelen,
+ int flags,
+ rtems_filesystem_location_info_t *pathloc
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of path evaluation for make.
+ */
+int rtems_filesystem_default_evalformake(
+ const char *path,
+ rtems_filesystem_location_info_t *pathloc,
+ const char **name
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a link command.
+ */
+int rtems_filesystem_default_link(
+ rtems_filesystem_location_info_t *to_loc, /* IN */
+ rtems_filesystem_location_info_t *parent_loc, /* IN */
+ const char *name /* IN */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a unlink command.
+ */
+int rtems_filesystem_default_unlink(
+ rtems_filesystem_location_info_t *parent_pathloc, /* IN */
+ rtems_filesystem_location_info_t *pathloc /* IN */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation to determine the node type.
+ */
+rtems_filesystem_node_types_t rtems_filesystem_default_node_type(
+ rtems_filesystem_location_info_t *pathloc
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation to create a new node.
+ */
+int rtems_filesystem_default_mknod(
+ const char *path, /* IN */
+ mode_t mode, /* IN */
+ dev_t dev, /* IN */
+ rtems_filesystem_location_info_t *pathloc /* IN/OUT */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a chown command.
+ */
+int rtems_filesystem_default_chown(
+ rtems_filesystem_location_info_t *pathloc, /* IN */
+ uid_t owner, /* IN */
+ gid_t group /* IN */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a freenode command.
+ */
+int rtems_filesystem_default_freenode(
+ rtems_filesystem_location_info_t *pathloc /* IN */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a mount command.
+ */
+int rtems_filesystem_default_mount (
+ rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a fsmount command.
+ */
+int rtems_filesystem_default_fsmount(
+ rtems_filesystem_mount_table_entry_t *mt_entry, /* IN */
+ const void *data /* IN */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a unmount command.
+ */
+int rtems_filesystem_default_unmount(
+ rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a fsunmount command.
+ */
+int rtems_filesystem_default_fsunmount(
+ rtems_filesystem_mount_table_entry_t *mt_entry /* IN */
+);
+
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a utime command.
+ */
+int rtems_filesystem_default_utime(
+ rtems_filesystem_location_info_t *pathloc, /* IN */
+ time_t actime, /* IN */
+ time_t modtime /* IN */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a link command.
+ */
+int rtems_filesystem_default_evaluate_link(
+ rtems_filesystem_location_info_t *pathloc, /* IN/OUT */
+ int flags /* IN */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a symlink command.
+ */
+int rtems_filesystem_default_symlink(
+ rtems_filesystem_location_info_t *loc, /* IN */
+ const char *link_name, /* IN */
+ const char *node_name
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a readlink command.
+ */
+ssize_t rtems_filesystem_default_readlink(
+ rtems_filesystem_location_info_t *loc, /* IN */
+ char *buf, /* OUT */
+ size_t bufsize
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a rename command.
+ */
+int rtems_filesystem_default_rename(
+ rtems_filesystem_location_info_t *old_parent_loc, /* IN */
+ rtems_filesystem_location_info_t *old_loc, /* IN */
+ rtems_filesystem_location_info_t *new_parent_loc, /* IN */
+ const char *name /* IN */
+);
+
+/**
+ * @brief Provides a defualt routine for filesystem
+ * implementation of a statvfs command.
+ */
+int rtems_filesystem_default_statvfs(
+ rtems_filesystem_location_info_t *loc, /* IN */
+ struct statvfs *buf /* OUT */
+);
+
+/**
+ * @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: size, offset, driver, pathname should be in that)
+ */
+struct rtems_libio_tt {
+ rtems_driver_name_t *driver;
+ rtems_off64_t size; /* size of file */
+ rtems_off64_t offset; /* current offset into file */
+ uint32_t flags;
+ rtems_filesystem_location_info_t pathinfo;
+ rtems_id sem;
+ 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;
+ rtems_off64_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;
+ uint32_t command;
+ void *buffer;
+ uint32_t ioctl_return;
+} rtems_libio_ioctl_args_t;
+
+/**
+ * @name Flag Values
+ *
+ * @{
+ */
+
+#define LIBIO_FLAGS_NO_DELAY 0x0001 /* return immediately if no data */
+#define LIBIO_FLAGS_READ 0x0002 /* reading */
+#define LIBIO_FLAGS_WRITE 0x0004 /* writing */
+#define LIBIO_FLAGS_OPEN 0x0100 /* device is open */
+#define LIBIO_FLAGS_APPEND 0x0200 /* all writes append */
+#define LIBIO_FLAGS_CREATE 0x0400 /* create file */
+#define LIBIO_FLAGS_CLOSE_ON_EXEC 0x0800 /* close on process exec() */
+#define LIBIO_FLAGS_READ_WRITE (LIBIO_FLAGS_READ | LIBIO_FLAGS_WRITE)
+
+/** @} */
+
+void rtems_libio_init(void);
+
+/**
+ * @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 rtems_off64_t (*rtems_libio_lseek_t)(
+ int fd,
+ rtems_off64_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_LIBIO_PERMS_READ S_IROTH
+#define RTEMS_LIBIO_PERMS_WRITE S_IWOTH
+#define RTEMS_LIBIO_PERMS_RDWR (S_IROTH|S_IWOTH)
+#define RTEMS_LIBIO_PERMS_EXEC S_IXOTH
+#define RTEMS_LIBIO_PERMS_SEARCH RTEMS_LIBIO_PERMS_EXEC
+#define RTEMS_LIBIO_PERMS_RWX S_IRWXO
+
+/** @} */
+
+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 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)
+
+/*
+ * Verifies that the permission flag is valid.
+ */
+#define rtems_libio_is_valid_perms( _perm ) \
+ (((~RTEMS_LIBIO_PERMS_RWX) & _perm ) == 0)
+
+/*
+ * Prototypes for filesystem
+ */
+
+void rtems_filesystem_initialize( void );
+
+typedef void (*rtems_libio_init_functions_t)(void);
+extern rtems_libio_init_functions_t rtems_libio_init_helper;
+
+void open_dev_console(void);
+
+typedef void (*rtems_libio_supp_functions_t)(void);
+extern rtems_libio_supp_functions_t rtems_libio_supp_helper;
+
+typedef void (*rtems_fs_init_functions_t)(void);
+extern rtems_fs_init_functions_t rtems_fs_init_helper;
+
+/**
+ * @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 occured. 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"
+
+/** @} */
+
+/**
+ * @brief Mount table entry.
+ */
+struct rtems_filesystem_mount_table_entry_tt {
+ rtems_chain_node Node;
+ rtems_filesystem_location_info_t mt_point_node;
+ rtems_filesystem_location_info_t mt_fs_root;
+ int options;
+ void *fs_info;
+
+ 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;
+};
+
+/**
+ * @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 [];
+
+/**
+ * @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 occured. 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 occured. The @c errno indicates the error.
+ */
+int rtems_filesystem_unregister(
+ const char *type
+);
+
+/**
+ * @brief Unmounts the file system at @a mount_path.
+ *
+ * @todo Due to file system implementation shortcomings it is possible to
+ * unmount file systems in use. This likely leads to heap corruption. Unmount
+ * only file systems which are not in use by the application.
+ *
+ * @retval 0 Successful operation.
+ * @retval -1 An error occured. The @c errno indicates the error.
+ */
+int unmount(
+ const char *mount_path
+);
+
+/**
+ * @brief Mounts a file system at @a target.
+ *
+ * The @a source may be a path to the corresponding device file, or @c NULL.
+ * The @a target path must lead to an existing directory, or @c NULL. In case
+ * @a target is @c NULL, the root file system will be mounted. The @a data
+ * parameter will be forwarded to the file system initialization handler. The
+ * file system type is selected by @a filesystemtype and may be one of
+ * - RTEMS_FILESYSTEM_TYPE_DEVFS,
+ * - RTEMS_FILESYSTEM_TYPE_DOSFS,
+ * - RTEMS_FILESYSTEM_TYPE_FTPFS,
+ * - RTEMS_FILESYSTEM_TYPE_IMFS,
+ * - 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
+ * - CONFIGURE_FILESYSTEM_DEVFS,
+ * - CONFIGURE_FILESYSTEM_DOSFS,
+ * - CONFIGURE_FILESYSTEM_FTPFS,
+ * - CONFIGURE_FILESYSTEM_IMFS,
+ * - CONFIGURE_FILESYSTEM_MINIIMFS,
+ * - CONFIGURE_FILESYSTEM_NFS,
+ * - CONFIGURE_FILESYSTEM_RFS, and
+ * - CONFIGURE_FILESYSTEM_TFTPFS.
+ *
+ * @see rtems_filesystem_register() and mount_and_make_target_path().
+ *
+ * @retval 0 Successful operation.
+ * @retval -1 An error occured. The @c errno indicates the error.
+ */
+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 occured. 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 Per file system mount routine.
+ *
+ * @see rtems_filesystem_mount_iterate().
+ *
+ * @retval true Stop the iteration.
+ * @retval false Continue the iteration.
+ */
+typedef bool (*rtems_per_filesystem_mount_routine)(
+ const rtems_filesystem_mount_table_entry_t *mt_entry,
+ void *arg
+);
+
+/**
+ * @brief Iterates over all file system mounts.
+ *
+ * For each file system mount the @a routine will be called with the entry and
+ * the @a routine_arg parameter.
+ *
+ * Do not mount or unmount file systems 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_mount_iterate(
+ rtems_per_filesystem_mount_routine routine,
+ void *routine_arg
+);
+
+/**
+ * @brief Boot time mount table entry.
+ */
+typedef struct {
+ const char *type;
+ rtems_filesystem_options_t fsoptions;
+ const char *device;
+ const char *mount_point;
+} rtems_filesystem_mount_table_t;
+
+/**
+ * @brief Boot time mount table.
+ *
+ * @todo Only the first entry will be evaluated. Why do we need a table?
+ */
+extern const rtems_filesystem_mount_table_t *rtems_filesystem_mount_table;
+
+/**
+ * @brief Boot time mount table entry count.
+ *
+ * @todo Only the first entry will be evaluated. Why do we need a table?
+ */
+extern const int rtems_filesystem_mount_table_size;
+
+/** @} */
+
+/**
+ * @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 (
+ int cbufsize, /* cooked buffer size */
+ int raw_input, /* raw input buffer size */
+ int 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,
+ 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
new file mode 100644
index 0000000000..f5cb537210
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/libio_.h
@@ -0,0 +1,246 @@
+/**
+ * @file rtems/libio_.h
+ */
+
+/*
+ * Libio Internal Information
+ *
+ * COPYRIGHT (c) 1989-1999.
+ * 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.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#ifndef _RTEMS_RTEMS_LIBIO__H
+#define _RTEMS_RTEMS_LIBIO__H
+
+#include <rtems.h>
+#include <rtems/libio.h> /* include before standard IO */
+
+#include <sys/types.h>
+
+#include <errno.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Semaphore to protect the io table
+ */
+
+#define RTEMS_LIBIO_SEM rtems_build_name('L', 'B', 'I', 'O')
+#define RTEMS_LIBIO_IOP_SEM(n) rtems_build_name('L', 'B', 'I', n)
+
+extern rtems_id rtems_libio_semaphore;
+
+/*
+ * File descriptor Table Information
+ */
+
+extern uint32_t rtems_libio_number_iops;
+extern rtems_libio_t *rtems_libio_iops;
+extern rtems_libio_t *rtems_libio_last_iop;
+extern rtems_libio_t *rtems_libio_iop_freelist;
+
+/*
+ * rtems_libio_iop
+ *
+ * Macro to return the file descriptor pointer.
+ */
+
+#define rtems_libio_iop(_fd) \
+ ((((uint32_t)(_fd)) < rtems_libio_number_iops) ? \
+ &rtems_libio_iops[_fd] : 0)
+
+/*
+ * 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)) ? -1 : (_iop - rtems_libio_iops))
+
+/*
+ * 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)
+
+/*
+ * rtems_libio_check_fd
+ *
+ * Macro to check if a file descriptor number is valid.
+ */
+
+#define rtems_libio_check_fd(_fd) \
+ do { \
+ if ((uint32_t) (_fd) >= rtems_libio_number_iops) { \
+ errno = EBADF; \
+ return -1; \
+ } \
+ } 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)
+
+/*
+ * rtems_libio_check_permissions
+ *
+ * Macro to check if a file descriptor is open for this operation.
+ */
+
+#define rtems_libio_check_permissions(_iop, _flag) \
+ do { \
+ if (((_iop)->flags & (_flag)) == 0) { \
+ rtems_set_errno_and_return_minus_one( EINVAL ); \
+ return -1; \
+ } \
+ } while (0)
+
+/*
+ * rtems_filesystem_freenode
+ *
+ * Macro to free a node.
+ */
+
+void rtems_filesystem_freenode( rtems_filesystem_location_info_t* node );
+
+/*
+ * External structures
+ */
+#include <rtems/userenv.h>
+
+extern rtems_user_env_t * rtems_current_user_env;
+extern rtems_user_env_t rtems_global_user_env;
+
+/*
+ * Instantiate a private copy of the per user information for the calling task.
+ */
+
+rtems_status_code rtems_libio_set_private_env(void);
+rtems_status_code rtems_libio_share_private_env(rtems_id task_id) ;
+
+static inline void rtems_libio_lock( void )
+{
+ rtems_semaphore_obtain( rtems_libio_semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
+}
+
+static inline void rtems_libio_unlock( void )
+{
+ rtems_semaphore_release( rtems_libio_semaphore );
+}
+
+/*
+ * File Descriptor Routine Prototypes
+ */
+
+rtems_libio_t *rtems_libio_allocate(void);
+
+uint32_t rtems_libio_fcntl_flags(
+ uint32_t fcntl_flags
+);
+
+uint32_t rtems_libio_to_fcntl_flags(
+ uint32_t flags
+);
+
+void rtems_libio_free(
+ rtems_libio_t *iop
+);
+
+int rtems_libio_is_open_files_in_fs(
+ rtems_filesystem_mount_table_entry_t *mt_entry
+);
+
+int rtems_libio_is_file_open(
+ void *node_access
+);
+
+/*
+ * File System Routine Prototypes
+ */
+
+int rtems_filesystem_evaluate_relative_path(
+ const char *pathname,
+ size_t pathnamelen,
+ int flags,
+ rtems_filesystem_location_info_t *pathloc,
+ int follow_link
+);
+
+int rtems_filesystem_evaluate_path(
+ const char *pathname,
+ size_t pathnamelen,
+ int flags,
+ rtems_filesystem_location_info_t *pathloc,
+ int follow_link
+);
+
+int rtems_filesystem_dirname(
+ const char *pathname
+);
+
+int rtems_filesystem_prefix_separators(
+ const char *pathname,
+ int pathnamelen
+);
+
+void rtems_filesystem_initialize(void);
+
+int init_fs_mount_table(void);
+
+int rtems_filesystem_is_separator(char ch);
+
+void rtems_filesystem_get_start_loc(const char *path,
+ int *index,
+ rtems_filesystem_location_info_t *loc);
+
+void rtems_filesystem_get_sym_start_loc(const char *path,
+ int *index,
+ rtems_filesystem_location_info_t *loc);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
diff --git a/cpukit/libcsupport/include/rtems/malloc.h b/cpukit/libcsupport/include/rtems/malloc.h
new file mode 100644
index 0000000000..af092982f7
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/malloc.h
@@ -0,0 +1,186 @@
+/**
+ * @file rtems/malloc.h
+ */
+
+/*
+ * RTEMS Malloc Extensions
+ *
+ * COPYRIGHT (c) 1989-2007.
+ * 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.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#ifndef _RTEMS_MALLOC_H
+#define _RTEMS_MALLOC_H
+
+#include <rtems.h>
+#include <rtems/bspIo.h>
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Malloc Statistics Structure
+ */
+typedef struct {
+ uint32_t space_available; /* current size of malloc area */
+ uint32_t malloc_calls; /* # calls to malloc */
+ uint32_t memalign_calls; /* # calls to memalign */
+ uint32_t free_calls;
+ uint32_t realloc_calls;
+ uint32_t calloc_calls;
+ uint32_t max_depth; /* most ever malloc'd at 1 time */
+ uintmax_t lifetime_allocated;
+ uintmax_t lifetime_freed;
+} rtems_malloc_statistics_t;
+
+/*
+ * Malloc statistics plugin
+ */
+typedef struct {
+ void (*initialize)(void);
+ void (*at_malloc)(void *);
+ void (*at_free)(void *);
+} rtems_malloc_statistics_functions_t;
+
+extern rtems_malloc_statistics_functions_t
+ rtems_malloc_statistics_helpers_table;
+extern rtems_malloc_statistics_functions_t *rtems_malloc_statistics_helpers;
+
+/*
+ * Malloc Heap Extension (sbrk) plugin
+ */
+typedef struct {
+ void *(*initialize)(void *, size_t);
+ void *(*extend)(size_t);
+} rtems_malloc_sbrk_functions_t;
+
+extern rtems_malloc_sbrk_functions_t rtems_malloc_sbrk_helpers_table;
+extern rtems_malloc_sbrk_functions_t *rtems_malloc_sbrk_helpers;
+
+/*
+ * 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 Print Malloc Statistic Usage Report
+ *
+ * This method fills in the called provided malloc statistics area.
+ *
+ * @return This method returns 0 if successful and -1 on error.
+ */
+int malloc_get_statistics(
+ rtems_malloc_statistics_t *stats
+);
+
+/** @brief Print Malloc Statistic Usage Report
+ *
+ * This method prints a malloc statistics report.
+ *
+ * @note It uses printk to print the report.
+ */
+void malloc_report_statistics(void);
+
+/** @brief Print Malloc Statistic Usage Report
+ *
+ * This method prints a malloc statistics report.
+ *
+ * @param[in] context is the context to pass to the print handler
+ * @param[in] print is the print handler
+ *
+ * @note It uses the CALLER's routine to print the report.
+ */
+void malloc_report_statistics_with_plugin(
+ void *context,
+ rtems_printk_plugin_t print
+);
+
+/**
+ *
+ * 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 fulfill 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 maintainance 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
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/cpukit/libcsupport/include/rtems/termiostypes.h b/cpukit/libcsupport/include/rtems/termiostypes.h
new file mode 100644
index 0000000000..ebba9ca9f7
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/termiostypes.h
@@ -0,0 +1,210 @@
+/**
+ * @file rtems/termiostypes.h
+ */
+
+/*
+ * RTEMS termios device support internal data structures
+ *
+ * COPYRIGHT (c) 1989-2008.
+ * 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.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#ifndef __TERMIOSTYPES_H
+#define __TERMIOSTYPES_H
+
+#include <rtems.h>
+#include <rtems/libio.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * 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;
+};
+/*
+ * Variables associated with each termios instance.
+ * One structure for each hardware I/O device.
+ */
+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;
+ 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;
+ int tty_rcvwakeup;
+};
+
+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 libio.h!
+ * values for rtems_termios_callbacks.outputUsesInterrupts
+ */
+#define TERMIOS_POLLED 0
+#define TERMIOS_IRQ_DRIVEN 1
+#define TERMIOS_TASK_DRIVEN 2
+
+/*
+ * 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,
+ int 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 int32_t rtems_termios_baud_t;
+
+/* convert xxx integer to equivalent Bxxx constant */
+int rtems_termios_number_to_baud(rtems_termios_baud_t baud);
+
+/* convert Bxxx constant to xxx integer */
+rtems_termios_baud_t rtems_termios_baud_to_number(int termios_baud);
+
+/* convert Bxxx constant to index */
+int rtems_termios_baud_to_index(rtems_termios_baud_t termios_baud);
+
+/*
+ * This method is used by a driver to tell termios its
+ * initial baud rate. This is especially important when
+ * the device driver does not set the baud to the default
+ * of B9600.
+ */
+int rtems_termios_set_initial_baud(
+ struct rtems_termios_tty *ttyp,
+ rtems_termios_baud_t baud
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TERMIOSTYPES_H */
diff --git a/cpukit/libcsupport/include/rtems/watchdogdrv.h b/cpukit/libcsupport/include/rtems/watchdogdrv.h
new file mode 100644
index 0000000000..309ebf7b81
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/watchdogdrv.h
@@ -0,0 +1,73 @@
+/**
+ * @file rtems/watchdogdrv.h
+ *
+ * This file describes the Watchdog Driver for all boards.
+ * A watchdog is a hardware device that will reset the board
+ * if not touched in a specific way at a regular interval.
+ * It is a simple, yet important, part of many embedded systems.
+ */
+
+/*
+ *
+ * COPYRIGHT (c) 1989-2008.
+ * 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.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#ifndef _RTEMS_WATCHDOGDRV_H
+#define _RTEMS_WATCHDOGDRV_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * This macro defines the watchdog device driver entry points.
+ */
+#define WATCHDOG_DRIVER_TABLE_ENTRY \
+ { Watchdog_initialize, NULL, NULL, NULL, NULL, Watchdog_control }
+
+/**
+ * @brief Watchdog Driver Initialization
+ *
+ * This method initializes the watchdog hardware device. The device
+ * should be initialized as DISABLED since BSP initialization may
+ * take longer than the timeout period for the watchdog.
+ *
+ * @param[in] major is the watchdog device major number
+ * @param[in] minor is the watchdog device minor number
+ * @param[in] arguments points to device driver arguments
+ */
+rtems_device_driver Watchdog_initialize(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arguments
+);
+
+/**
+ * @brief Watchdog Driver IO Control
+ *
+ * This method implements the IO Control device driver entry
+ * point for the watchdog hardware device.
+ *
+ * @param[in] major is the watchdog device major number
+ * @param[in] minor is the watchdog device minor number
+ * @param[in] arguments points to device driver arguments
+ */
+rtems_device_driver Watchdog_control(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arguments
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */