diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-05-14 15:19:20 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-05-15 10:01:42 +0200 |
commit | fed66f991014f40430b256d44231a7828bb8a413 (patch) | |
tree | 776084d409f4c21ed84c1c2da4d65993f10ef588 /cpukit/libfs/src/rfs | |
parent | Filesystem: Use ioctl_command_t (diff) | |
download | rtems-fed66f991014f40430b256d44231a7828bb8a413.tar.bz2 |
Filesystem: Add shared device IO support
The device IO file system support in IMFS, devFS, and RFS uses now a
shared implementation.
Diffstat (limited to 'cpukit/libfs/src/rfs')
-rw-r--r-- | cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c | 67 |
1 files changed, 8 insertions, 59 deletions
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c b/cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c index 729d4200c5..ced234a796 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); } /** |