summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/rfs
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-05-14 15:19:20 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-05-15 10:01:42 +0200
commitfed66f991014f40430b256d44231a7828bb8a413 (patch)
tree776084d409f4c21ed84c1c2da4d65993f10ef588 /cpukit/libfs/src/rfs
parentFilesystem: Use ioctl_command_t (diff)
downloadrtems-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.c67
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);
}
/**