summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c')
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c124
1 files changed, 39 insertions, 85 deletions
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c b/cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c
index 27d9962daa..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,22 @@
*/
#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,
+ rtems_device_minor_number *minor)
+{
+ *major = iop->data0;
+ *minor = (rtems_device_minor_number) iop->data1;
+}
+
/**
* This handler maps an open() operation onto rtems_io_open().
*
@@ -39,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;
- int major;
- int minor;
- rtems_status_code status;
+ rtems_device_major_number major;
+ rtems_device_minor_number minor;
int rc;
rtems_rfs_rtems_lock (fs);
@@ -70,15 +78,9 @@ rtems_rfs_rtems_device_open ( rtems_libio_t *iop,
rtems_rfs_rtems_unlock (fs);
iop->data0 = major;
- iop->data1 = (void*)((intptr_t) minor);
+ 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);
}
/**
@@ -91,21 +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;
- int major;
- int minor;
-
- major = (int) iop->data0;
- minor = (intptr_t) iop->data1;
+ rtems_device_major_number major;
+ rtems_device_minor_number minor;
- args.iop = iop;
- args.flags = 0;
- args.mode = 0;
+ rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
- status = rtems_io_close (major, minor, (void *) &args);
-
- return rtems_deviceio_errno (status);
+ return rtems_deviceio_close (iop, major, minor);
}
/**
@@ -120,26 +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;
- int major;
- int minor;
-
- major = (int) iop->data0;
- minor = (intptr_t) iop->data1;
-
- 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;
+ rtems_device_major_number major;
+ rtems_device_minor_number minor;
+
+ rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
+
+ return rtems_deviceio_read (iop, buffer, count, major, minor);
}
/*
@@ -156,26 +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;
- int major;
- int minor;
-
- major = (int) iop->data0;
- minor = (intptr_t) iop->data1;
-
- 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;
+ rtems_device_major_number major;
+ rtems_device_minor_number minor;
+
+ rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
+
+ return rtems_deviceio_write (iop, buffer, count, major, minor);
}
/**
@@ -188,27 +153,16 @@ rtems_rfs_rtems_device_write (rtems_libio_t* iop,
*/
static int
-rtems_rfs_rtems_device_ioctl (rtems_libio_t* iop,
- uint32_t command,
- void* buffer)
+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;
- int major;
- int minor;
-
- major = (int) iop->data0;
- minor = (intptr_t) iop->data1;
-
- args.iop = iop;
- args.command = command;
- args.buffer = buffer;
+ rtems_device_major_number major;
+ rtems_device_minor_number minor;
- status = rtems_io_control (major, minor, (void *) &args);
- if (status)
- return rtems_deviceio_errno (status);
+ rtems_rfs_rtems_device_get_major_and_minor (iop, &major, &minor);
- return args.ioctl_return;
+ return rtems_deviceio_control (iop, command, buffer, major, minor);
}
/**