[rtems commit] Filesystem: Add shared device IO support

Sebastian Huber sebh at rtems.org
Tue May 15 07:59:43 UTC 2012


Module:    rtems
Branch:    master
Commit:    fed66f991014f40430b256d44231a7828bb8a413
Changeset: http://git.rtems.org/rtems/commit/?id=fed66f991014f40430b256d44231a7828bb8a413

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Mon May 14 15:19:20 2012 +0200

Filesystem: Add shared device IO support

The device IO file system support in IMFS, devFS, and RFS uses now a
shared implementation.

---

 cpukit/libcsupport/Makefile.am                     |    3 +
 cpukit/libcsupport/include/rtems/deviceio.h        |   56 ++++++++
 cpukit/libcsupport/preinstall.am                   |    4 +
 .../src/sup_fs_deviceerrno.c}                      |    8 +-
 cpukit/libcsupport/src/sup_fs_deviceio.c           |  128 ++++++++++++++++++
 cpukit/libfs/Makefile.am                           |    2 +-
 cpukit/libfs/src/devfs/devclose.c                  |   23 +---
 cpukit/libfs/src/devfs/devfs.h                     |    6 -
 cpukit/libfs/src/devfs/devioctl.c                  |   27 +---
 cpukit/libfs/src/devfs/devopen.c                   |   24 ++--
 cpukit/libfs/src/devfs/devread.c                   |   28 +----
 cpukit/libfs/src/devfs/devwrite.c                  |   28 +----
 cpukit/libfs/src/imfs/deviceio.c                   |  140 ++++----------------
 cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c         |   67 +--------
 14 files changed, 255 insertions(+), 289 deletions(-)

diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am
index 1d6fa3b..46805e9 100644
--- a/cpukit/libcsupport/Makefile.am
+++ b/cpukit/libcsupport/Makefile.am
@@ -24,6 +24,7 @@ include_rtems_motorola_HEADERS += include/motorola/mc68681.h
 
 ## rtems
 include_rtems_HEADERS += include/rtems/assoc.h
+include_rtems_HEADERS += include/rtems/deviceio.h
 include_rtems_HEADERS += include/rtems/error.h
 include_rtems_HEADERS += include/rtems/libcsupport.h
 include_rtems_HEADERS += include/rtems/libio.h
@@ -127,6 +128,8 @@ libcsupport_a_SOURCES = src/gxx_wrappers.c src/getchark.c src/printk.c \
     src/sup_fs_exist_in_same_instance.c \
     src/sup_fs_mount_iterate.c \
     src/sup_fs_node_type.c \
+    src/sup_fs_deviceio.c \
+    src/sup_fs_deviceerrno.c \
     src/clonenode.c \
     src/freenode.c \
     $(BSD_LIBC_C_FILES) $(BASE_FS_C_FILES) $(MALLOC_C_FILES) \
diff --git a/cpukit/libcsupport/include/rtems/deviceio.h b/cpukit/libcsupport/include/rtems/deviceio.h
new file mode 100644
index 0000000..6ce5d10
--- /dev/null
+++ b/cpukit/libcsupport/include/rtems/deviceio.h
@@ -0,0 +1,56 @@
+/*
+ *  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.com/license/LICENSE.
+ */
+
+#ifndef _RTEMS_DEVICEIO_H
+#define _RTEMS_DEVICEIO_H
+
+#include <rtems/libio.h>
+
+int rtems_deviceio_errno( rtems_status_code status );
+
+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
+);
+
+#endif /* _RTEMS_DEVICEIO_H */
diff --git a/cpukit/libcsupport/preinstall.am b/cpukit/libcsupport/preinstall.am
index f71362f..eb68f50 100644
--- a/cpukit/libcsupport/preinstall.am
+++ b/cpukit/libcsupport/preinstall.am
@@ -71,6 +71,10 @@ $(PROJECT_INCLUDE)/rtems/assoc.h: include/rtems/assoc.h $(PROJECT_INCLUDE)/rtems
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/assoc.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/assoc.h
 
+$(PROJECT_INCLUDE)/rtems/deviceio.h: include/rtems/deviceio.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
+	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/deviceio.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/deviceio.h
+
 $(PROJECT_INCLUDE)/rtems/error.h: include/rtems/error.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/error.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/error.h
diff --git a/cpukit/libfs/src/imfs/deviceerrno.c b/cpukit/libcsupport/src/sup_fs_deviceerrno.c
similarity index 95%
rename from cpukit/libfs/src/imfs/deviceerrno.c
rename to cpukit/libcsupport/src/sup_fs_deviceerrno.c
index eb5e03d..4316496 100644
--- a/cpukit/libfs/src/imfs/deviceerrno.c
+++ b/cpukit/libcsupport/src/sup_fs_deviceerrno.c
@@ -13,14 +13,12 @@
  */
 
 #if HAVE_CONFIG_H
-#include "config.h"
+  #include "config.h"
 #endif
 
-#include <errno.h>
+#include <rtems/deviceio.h>
 
-#include <rtems.h>
-#include <rtems/libio.h>
-#include <rtems/devfs.h>
+#include <errno.h>
 
 static const int status_code_to_errno [RTEMS_STATUS_CODES_LAST + 1] = {
   [RTEMS_SUCCESSFUL]               = 0,
diff --git a/cpukit/libcsupport/src/sup_fs_deviceio.c b/cpukit/libcsupport/src/sup_fs_deviceio.c
new file mode 100644
index 0000000..aeff60e
--- /dev/null
+++ b/cpukit/libcsupport/src/sup_fs_deviceio.c
@@ -0,0 +1,128 @@
+/*
+ *  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.com/license/LICENSE.
+ */
+
+#if HAVE_CONFIG_H
+  #include "config.h"
+#endif
+
+#include <rtems/deviceio.h>
+
+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
+)
+{
+  rtems_status_code status;
+  rtems_libio_open_close_args_t args;
+
+  args.iop = iop;
+  args.flags = iop->flags;
+  args.mode = mode;
+
+  status = rtems_io_open( major, minor, &args );
+
+  return rtems_deviceio_errno( status );
+}
+
+int rtems_deviceio_close(
+  rtems_libio_t *iop,
+  rtems_device_major_number major,
+  rtems_device_minor_number minor
+)
+{
+  rtems_status_code status;
+  rtems_libio_open_close_args_t args;
+
+  args.iop = iop;
+  args.flags = 0;
+  args.mode = 0;
+
+  status = rtems_io_close( major, minor, &args );
+
+  return rtems_deviceio_errno( status );
+}
+
+ssize_t rtems_deviceio_read(
+  rtems_libio_t *iop,
+  void *buf,
+  size_t nbyte,
+  rtems_device_major_number major,
+  rtems_device_minor_number minor
+)
+{
+  rtems_status_code status;
+  rtems_libio_rw_args_t args;
+
+  args.iop = iop;
+  args.offset = iop->offset;
+  args.buffer = buf;
+  args.count = nbyte;
+  args.flags = iop->flags;
+  args.bytes_moved = 0;
+
+  status = rtems_io_read( major, minor, &args );
+  if ( status == RTEMS_SUCCESSFUL ) {
+    return (ssize_t) args.bytes_moved;
+  } else {
+    return rtems_deviceio_errno( status );
+  }
+}
+
+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
+)
+{
+  rtems_status_code status;
+  rtems_libio_rw_args_t args;
+
+  args.iop = iop;
+  args.offset = iop->offset;
+  args.buffer = buf;
+  args.count = nbyte;
+  args.flags = iop->flags;
+  args.bytes_moved = 0;
+
+  status = rtems_io_write( major, minor, &args );
+  if ( status == RTEMS_SUCCESSFUL ) {
+    return (ssize_t) args.bytes_moved;
+  } else {
+    return rtems_deviceio_errno( status );
+  }
+}
+
+int rtems_deviceio_control(
+  rtems_libio_t *iop,
+  ioctl_command_t command,
+  void *buffer,
+  rtems_device_major_number major,
+  rtems_device_minor_number minor
+)
+{
+  rtems_status_code status;
+  rtems_libio_ioctl_args_t args;
+
+  args.iop = iop;
+  args.command = command;
+  args.buffer = buffer;
+
+  status = rtems_io_control( major, minor, &args );
+  if ( status == RTEMS_SUCCESSFUL ) {
+    return args.ioctl_return;
+  } else {
+    return rtems_deviceio_errno(status);
+  }
+}
diff --git a/cpukit/libfs/Makefile.am b/cpukit/libfs/Makefile.am
index 9a792d1..c5e483e 100644
--- a/cpukit/libfs/Makefile.am
+++ b/cpukit/libfs/Makefile.am
@@ -37,7 +37,7 @@ libdefaultfs_a_SOURCES = \
 noinst_LIBRARIES += libimfs.a
 libimfs_a_SOURCES =
 
-libimfs_a_SOURCES += src/imfs/deviceerrno.c src/imfs/deviceio.c \
+libimfs_a_SOURCES += src/imfs/deviceio.c \
     src/imfs/fifoimfs_init.c src/imfs/imfs_chown.c src/imfs/imfs_config.c \
     src/imfs/imfs_creat.c src/imfs/imfs_debug.c src/imfs/imfs_directory.c \
     src/imfs/imfs_eval.c src/imfs/imfs_fchmod.c \
diff --git a/cpukit/libfs/src/devfs/devclose.c b/cpukit/libfs/src/devfs/devclose.c
index c83fab9..83646c7 100644
--- a/cpukit/libfs/src/devfs/devclose.c
+++ b/cpukit/libfs/src/devfs/devclose.c
@@ -5,33 +5,18 @@
  */
 
 #if HAVE_CONFIG_H
-#include "config.h"
+  #include "config.h"
 #endif
 
-#include <rtems.h>
-#include <rtems/io.h>
-
 #include "devfs.h"
 
+#include <rtems/deviceio.h>
+
 int devFS_close(
   rtems_libio_t *iop
 )
 {
-  rtems_libio_open_close_args_t  args;
-  rtems_status_code              status;
   const devFS_node *np = iop->pathinfo.node_access;
 
-  args.iop   = iop;
-  args.flags = 0;
-  args.mode  = 0;
-
-  status = rtems_io_close(
-    np->major,
-    np->minor,
-    (void *) &args
-  );
-
-  return rtems_deviceio_errno(status);
+  return rtems_deviceio_close( iop, np->major, np->minor );
 }
-
-
diff --git a/cpukit/libfs/src/devfs/devfs.h b/cpukit/libfs/src/devfs/devfs.h
index 60ee7ab..4155dd6 100644
--- a/cpukit/libfs/src/devfs/devfs.h
+++ b/cpukit/libfs/src/devfs/devfs.h
@@ -49,12 +49,6 @@ extern const rtems_filesystem_operations_table devFS_ops;
 
 extern const rtems_filesystem_file_handlers_r  devFS_file_handlers;
 
-/**
- *  This routine associates RTEMS status code with errno
- */
-
-extern int rtems_deviceio_errno(rtems_status_code code);
-
 static inline const devFS_data *devFS_get_data(
   const rtems_filesystem_location_info_t *loc
 )
diff --git a/cpukit/libfs/src/devfs/devioctl.c b/cpukit/libfs/src/devfs/devioctl.c
index bca8250..e1d62c4 100644
--- a/cpukit/libfs/src/devfs/devioctl.c
+++ b/cpukit/libfs/src/devfs/devioctl.c
@@ -1,41 +1,24 @@
-#if HAVE_CONFIG_H
 /*
  *  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.
  */
 
-#include "config.h"
+#if HAVE_CONFIG_H
+  #include "config.h"
 #endif
 
-#include <rtems.h>
-#include <rtems/io.h>
-
 #include "devfs.h"
 
+#include <rtems/deviceio.h>
+
 int devFS_ioctl(
   rtems_libio_t   *iop,
   ioctl_command_t  command,
   void            *buffer
 )
 {
-  rtems_libio_ioctl_args_t  args;
-  rtems_status_code         status;
   const devFS_node *np = iop->pathinfo.node_access;
 
-  args.iop     = iop;
-  args.command = command;
-  args.buffer  = buffer;
-
-  status = rtems_io_control(
-    np->major,
-    np->minor,
-    (void *) &args
-  );
-
-  if ( status )
-    return rtems_deviceio_errno(status);
-
-  return args.ioctl_return;
+  return rtems_deviceio_control( iop, command, buffer, np->major, np->minor );
 }
-
diff --git a/cpukit/libfs/src/devfs/devopen.c b/cpukit/libfs/src/devfs/devopen.c
index adb8fe4..26450ab 100644
--- a/cpukit/libfs/src/devfs/devopen.c
+++ b/cpukit/libfs/src/devfs/devopen.c
@@ -5,14 +5,13 @@
  */
 
 #if HAVE_CONFIG_H
-#include "config.h"
+  #include "config.h"
 #endif
 
-#include <rtems.h>
-#include <rtems/io.h>
-
 #include "devfs.h"
 
+#include <rtems/deviceio.h>
+
 int devFS_open(
   rtems_libio_t *iop,
   const char    *pathname,
@@ -20,19 +19,14 @@ int devFS_open(
   mode_t         mode
 )
 {
-  rtems_libio_open_close_args_t  args;
-  rtems_status_code              status;
   const devFS_node *np = iop->pathinfo.node_access;
 
-  args.iop   = iop;
-  args.flags = iop->flags;
-  args.mode  = mode;
-
-  status = rtems_io_open(
+  return rtems_deviceio_open(
+    iop,
+    pathname,
+    oflag,
+    mode,
     np->major,
-    np->minor,
-    (void *) &args
+    np->minor
   );
-
-  return rtems_deviceio_errno(status);
 }
diff --git a/cpukit/libfs/src/devfs/devread.c b/cpukit/libfs/src/devfs/devread.c
index 6868a9e..25d69b0 100644
--- a/cpukit/libfs/src/devfs/devread.c
+++ b/cpukit/libfs/src/devfs/devread.c
@@ -5,40 +5,20 @@
  */
 
 #if HAVE_CONFIG_H
-#include "config.h"
+  #include "config.h"
 #endif
 
-#include <rtems.h>
-#include <rtems/io.h>
-
 #include "devfs.h"
 
+#include <rtems/deviceio.h>
+
 ssize_t devFS_read(
   rtems_libio_t *iop,
   void          *buffer,
   size_t         count
 )
 {
-  rtems_libio_rw_args_t   args;
-  rtems_status_code       status;
   const devFS_node *np = iop->pathinfo.node_access;
 
-  args.iop         = iop;
-  args.offset      = iop->offset;
-  args.buffer      = buffer;
-  args.count       = count;
-  args.flags       = iop->flags;
-  args.bytes_moved = 0;
-
-  status = rtems_io_read(
-    np->major,
-    np->minor,
-    (void *) &args
-  );
-
-  if ( status )
-    return rtems_deviceio_errno(status);
-
-  return (ssize_t) args.bytes_moved;
+  return rtems_deviceio_read( iop, buffer, count, np->major, np->minor );
 }
-
diff --git a/cpukit/libfs/src/devfs/devwrite.c b/cpukit/libfs/src/devfs/devwrite.c
index fe48745..57e7fdb 100644
--- a/cpukit/libfs/src/devfs/devwrite.c
+++ b/cpukit/libfs/src/devfs/devwrite.c
@@ -5,40 +5,20 @@
  */
 
 #if HAVE_CONFIG_H
-#include "config.h"
+  #include "config.h"
 #endif
 
-#include <rtems.h>
-#include <rtems/io.h>
-
 #include "devfs.h"
 
+#include <rtems/deviceio.h>
+
 ssize_t devFS_write(
   rtems_libio_t *iop,
   const void    *buffer,
   size_t         count
 )
 {
-  rtems_libio_rw_args_t   args;
-  rtems_status_code       status;
   const devFS_node *np = iop->pathinfo.node_access;
 
-  args.iop         = iop;
-  args.offset      = iop->offset;
-  args.buffer      = (void *) buffer;
-  args.count       = count;
-  args.flags       = iop->flags;
-  args.bytes_moved = 0;
-
-  status = rtems_io_write(
-    np->major,
-    np->minor,
-    (void *) &args
-  );
-
-  if ( status )
-    return rtems_deviceio_errno(status);
-
-  return (ssize_t) args.bytes_moved;
+  return rtems_deviceio_write( iop, buffer, count, np->major, np->minor );
 }
-
diff --git a/cpukit/libfs/src/imfs/deviceio.c b/cpukit/libfs/src/imfs/deviceio.c
index 60a66f3..679f945 100644
--- a/cpukit/libfs/src/imfs/deviceio.c
+++ b/cpukit/libfs/src/imfs/deviceio.c
@@ -4,7 +4,7 @@
  *  This file contains the set of handlers used to map operations on
  *  IMFS device nodes onto calls to the RTEMS Classic API IO Manager.
  *
- *  COPYRIGHT (c) 1989-2008.
+ *  COPYRIGHT (c) 1989-2012.
  *  On-Line Applications Research Corporation (OAR).
  *
  *  The license and distribution terms for this file may be
@@ -18,13 +18,7 @@
 
 #include "imfs.h"
 
-#include <rtems/devfs.h>
-
-/*
- *  device_open
- *
- *  This handler maps an open() operation onto rtems_io_open().
- */
+#include <rtems/deviceio.h>
 
 int device_open(
   rtems_libio_t *iop,
@@ -33,174 +27,92 @@ int device_open(
   mode_t         mode
 )
 {
-  rtems_libio_open_close_args_t  args;
-  rtems_status_code              status;
   IMFS_jnode_t                  *the_jnode;
 
   the_jnode  = iop->pathinfo.node_access;
 
-  args.iop   = iop;
-  args.flags = iop->flags;
-  args.mode  = mode;
-
-  status = rtems_io_open(
+  return rtems_deviceio_open(
+    iop,
+    pathname,
+    oflag,
+    mode,
     the_jnode->info.device.major,
-    the_jnode->info.device.minor,
-    (void *) &args
+    the_jnode->info.device.minor
   );
-
-  return rtems_deviceio_errno( status );
 }
 
-/*
- *  device_close
- *
- *  This handler maps a close() operation onto rtems_io_close().
- */
-
 int device_close(
   rtems_libio_t *iop
 )
 {
-  rtems_libio_open_close_args_t  args;
-  rtems_status_code              status;
   IMFS_jnode_t                  *the_jnode;
 
   the_jnode = iop->pathinfo.node_access;
 
-  args.iop   = iop;
-  args.flags = 0;
-  args.mode  = 0;
-
-  status = rtems_io_close(
+  return rtems_deviceio_close(
+    iop,
     the_jnode->info.device.major,
-    the_jnode->info.device.minor,
-    (void *) &args
+    the_jnode->info.device.minor
   );
-
-  return rtems_deviceio_errno( status );
 }
 
-/*
- *  device_read
- *
- *  This handler maps a read() operation onto rtems_io_read().
- */
-
 ssize_t device_read(
   rtems_libio_t *iop,
   void          *buffer,
   size_t         count
 )
 {
-  rtems_libio_rw_args_t   args;
-  rtems_status_code       status;
   IMFS_jnode_t           *the_jnode;
 
   the_jnode = iop->pathinfo.node_access;
 
-  args.iop         = iop;
-  args.offset      = iop->offset;
-  args.buffer      = buffer;
-  args.count       = count;
-  args.flags       = iop->flags;
-  args.bytes_moved = 0;
-
-  status = rtems_io_read(
+  return rtems_deviceio_read(
+    iop,
+    buffer,
+    count,
     the_jnode->info.device.major,
-    the_jnode->info.device.minor,
-    (void *) &args
+    the_jnode->info.device.minor
   );
-
-  if ( status )
-    return rtems_deviceio_errno(status);
-
-  return (ssize_t) args.bytes_moved;
 }
 
-/*
- *  device_write
- *
- *  This handler maps a write() operation onto rtems_io_write().
- */
-
 ssize_t device_write(
   rtems_libio_t *iop,
   const void    *buffer,
   size_t         count
 )
 {
-  rtems_libio_rw_args_t   args;
-  rtems_status_code       status;
   IMFS_jnode_t           *the_jnode;
 
   the_jnode = iop->pathinfo.node_access;
 
-  args.iop         = iop;
-  args.offset      = iop->offset;
-  args.buffer      = (void *) buffer;
-  args.count       = count;
-  args.flags       = iop->flags;
-  args.bytes_moved = 0;
-
-  status = rtems_io_write(
+  return rtems_deviceio_write(
+    iop,
+    buffer,
+    count,
     the_jnode->info.device.major,
-    the_jnode->info.device.minor,
-    (void *) &args
+    the_jnode->info.device.minor
   );
-
-  if ( status )
-    return rtems_deviceio_errno(status);
-
-  return (ssize_t) args.bytes_moved;
 }
 
-/*
- *  device_ioctl
- *
- *  This handler maps an ioctl() operation onto rtems_io_ioctl().
- */
-
 int device_ioctl(
   rtems_libio_t   *iop,
   ioctl_command_t  command,
   void            *buffer
 )
 {
-  rtems_libio_ioctl_args_t  args;
-  rtems_status_code         status;
   IMFS_jnode_t             *the_jnode;
 
-  args.iop     = iop;
-  args.command = command;
-  args.buffer  = buffer;
-
   the_jnode = iop->pathinfo.node_access;
 
-  status = rtems_io_control(
+  return rtems_deviceio_control(
+    iop,
+    command,
+    buffer,
     the_jnode->info.device.major,
-    the_jnode->info.device.minor,
-    (void *) &args
+    the_jnode->info.device.minor
   );
-
-  if ( status )
-    return rtems_deviceio_errno(status);
-
-  return args.ioctl_return;
 }
 
-/*
- *  device_stat
- *
- *  The IMFS_stat() is used.
- */
-
-/*
- *  device_rmnod
- *
- *  The IMFS_rmnod() is used.
- */
-
 int device_ftruncate(
   rtems_libio_t *iop,
   off_t          length
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c b/cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c
index 729d420..ced234a 100644
--- a/cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c
+++ b/cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c
@@ -18,12 +18,13 @@
  */
 
 #if HAVE_CONFIG_H
-#include "config.h"
+  #include "config.h"
 #endif
 
-#include <rtems/devfs.h>
 #include "rtems-rfs-rtems.h"
 
+#include <rtems/deviceio.h>
+
 static void
 rtems_rfs_rtems_device_get_major_and_minor ( const rtems_libio_t       *iop,
                                              rtems_device_major_number *major,
@@ -48,13 +49,11 @@ rtems_rfs_rtems_device_open ( rtems_libio_t *iop,
                               int            oflag,
                               mode_t         mode)
 {
-  rtems_libio_open_close_args_t args;
   rtems_rfs_file_system*        fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
   rtems_rfs_ino                 ino = rtems_rfs_rtems_get_iop_ino (iop);
   rtems_rfs_inode_handle        inode;
   rtems_device_major_number     major;
   rtems_device_minor_number     minor;
-  rtems_status_code             status;
   int                           rc;
 
   rtems_rfs_rtems_lock (fs);
@@ -81,13 +80,7 @@ rtems_rfs_rtems_device_open ( rtems_libio_t *iop,
   iop->data0 = major;
   iop->data1 = (void *) minor;
 
-  args.iop   = iop;
-  args.flags = iop->flags;
-  args.mode  = mode;
-
-  status = rtems_io_open (major, minor, (void *) &args);
-
-  return rtems_deviceio_errno (status);
+  return rtems_deviceio_open (iop, pathname, oflag, mode, minor, major);
 }
 
 /**
@@ -100,20 +93,12 @@ rtems_rfs_rtems_device_open ( rtems_libio_t *iop,
 static int
 rtems_rfs_rtems_device_close (rtems_libio_t* iop)
 {
-  rtems_libio_open_close_args_t args;
-  rtems_status_code             status;
   rtems_device_major_number     major;
   rtems_device_minor_number     minor;
 
   rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
 
-  args.iop   = iop;
-  args.flags = 0;
-  args.mode  = 0;
-
-  status = rtems_io_close (major, minor, (void *) &args);
-
-  return rtems_deviceio_errno (status);
+  return rtems_deviceio_close (iop, major, minor);
 }
 
 /**
@@ -128,25 +113,12 @@ rtems_rfs_rtems_device_close (rtems_libio_t* iop)
 static ssize_t
 rtems_rfs_rtems_device_read (rtems_libio_t* iop, void* buffer, size_t count)
 {
-  rtems_libio_rw_args_t     args;
-  rtems_status_code         status;
   rtems_device_major_number major;
   rtems_device_minor_number minor;
 
   rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
 
-  args.iop         = iop;
-  args.offset      = iop->offset;
-  args.buffer      = buffer;
-  args.count       = count;
-  args.flags       = iop->flags;
-  args.bytes_moved = 0;
-
-  status = rtems_io_read (major, minor, (void *) &args);
-  if (status)
-    return rtems_deviceio_errno (status);
-
-  return (ssize_t) args.bytes_moved;
+  return rtems_deviceio_read (iop, buffer, count, major, minor);
 }
 
 /*
@@ -163,25 +135,12 @@ rtems_rfs_rtems_device_write (rtems_libio_t* iop,
                               const void*    buffer,
                               size_t         count)
 {
-  rtems_libio_rw_args_t     args;
-  rtems_status_code         status;
   rtems_device_major_number major;
   rtems_device_minor_number minor;
 
   rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
 
-  args.iop         = iop;
-  args.offset      = iop->offset;
-  args.buffer      = (void *) buffer;
-  args.count       = count;
-  args.flags       = iop->flags;
-  args.bytes_moved = 0;
-
-  status = rtems_io_write (major, minor, (void *) &args);
-  if (status)
-    return rtems_deviceio_errno (status);
-
-  return (ssize_t) args.bytes_moved;
+  return rtems_deviceio_write (iop, buffer, count, major, minor);
 }
 
 /**
@@ -198,22 +157,12 @@ rtems_rfs_rtems_device_ioctl (rtems_libio_t*  iop,
                               ioctl_command_t command,
                               void*           buffer)
 {
-  rtems_libio_ioctl_args_t  args;
-  rtems_status_code         status;
   rtems_device_major_number major;
   rtems_device_minor_number minor;
 
   rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
 
-  args.iop     = iop;
-  args.command = command;
-  args.buffer  = buffer;
-
-  status = rtems_io_control (major, minor, (void *) &args);
-  if (status)
-    return rtems_deviceio_errno (status);
-
-  return args.ioctl_return;
+  return rtems_deviceio_control (iop, command, buffer, major, minor);
 }
 
 /**




More information about the vc mailing list