diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-03-05 14:39:53 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-03-13 12:24:18 +0100 |
commit | 291c926449ffb0f249cb90e3957b65308f128955 (patch) | |
tree | 9483171b71cf401b17004cfa009f9d58ab609fcd | |
parent | libblock: New support functions (diff) | |
download | rtems-291c926449ffb0f249cb90e3957b65308f128955.tar.bz2 |
libblock: Split file and simplify
-rw-r--r-- | cpukit/libblock/Makefile.am | 1 | ||||
-rw-r--r-- | cpukit/libblock/src/blkdev-ioctl.c | 71 | ||||
-rw-r--r-- | cpukit/libblock/src/blkdev.c | 88 |
3 files changed, 83 insertions, 77 deletions
diff --git a/cpukit/libblock/Makefile.am b/cpukit/libblock/Makefile.am index 04eca6f05e..0311319888 100644 --- a/cpukit/libblock/Makefile.am +++ b/cpukit/libblock/Makefile.am @@ -8,6 +8,7 @@ include $(top_srcdir)/automake/compile.am noinst_LIBRARIES = libblock.a libblock_a_SOURCES = src/bdbuf.c \ src/blkdev.c \ + src/blkdev-ioctl.c \ src/blkdev-ops.c \ src/diskdevs.c \ src/flashdisk.c \ diff --git a/cpukit/libblock/src/blkdev-ioctl.c b/cpukit/libblock/src/blkdev-ioctl.c new file mode 100644 index 0000000000..296f379451 --- /dev/null +++ b/cpukit/libblock/src/blkdev-ioctl.c @@ -0,0 +1,71 @@ +/** + * @file + * + * @ingroup rtems_blkdev + * + * Block device management. + */ + +/* + * Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia + * Author: Victor V. Vengerov <vvv@oktet.ru> + */ + +#if HAVE_CONFIG_H + #include "config.h" +#endif + +#include <errno.h> + +#include <rtems/blkdev.h> +#include <rtems/bdbuf.h> + +int +rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp) +{ + size_t *arg_size = argp; + int rc = 0; + + switch (req) + { + case RTEMS_BLKIO_GETMEDIABLKSIZE: + *arg_size = dd->media_block_size; + break; + + case RTEMS_BLKIO_GETBLKSIZE: + *arg_size = dd->block_size; + break; + + case RTEMS_BLKIO_SETBLKSIZE: + dd->block_size = *arg_size; + break; + + case RTEMS_BLKIO_GETSIZE: + *arg_size = dd->size; + break; + + case RTEMS_BLKIO_SYNCDEV: + { + rtems_status_code sc = rtems_bdbuf_syncdev(dd); + if (sc != RTEMS_SUCCESSFUL) { + errno = EIO; + rc = -1; + } + break; + } + + case RTEMS_BLKIO_GETDISKDEV: + { + rtems_disk_device **dd_ptr = argp; + *dd_ptr = dd; + break; + } + + default: + errno = EINVAL; + rc = -1; + break; + } + + return rc; +} diff --git a/cpukit/libblock/src/blkdev.c b/cpukit/libblock/src/blkdev.c index 3e950d6a72..83ea563962 100644 --- a/cpukit/libblock/src/blkdev.c +++ b/cpukit/libblock/src/blkdev.c @@ -180,87 +180,21 @@ rtems_blkdev_generic_ioctl( rtems_libio_ioctl_args_t *args = arg; rtems_libio_t *iop = args->iop; rtems_disk_device *dd = iop->data1; - int rc; - switch (args->command) + if (args->command != RTEMS_BLKIO_REQUEST) { - case RTEMS_BLKIO_GETMEDIABLKSIZE: - *((uint32_t *) args->buffer) = dd->media_block_size; - args->ioctl_return = 0; - break; - - case RTEMS_BLKIO_GETBLKSIZE: - *((uint32_t *) args->buffer) = dd->block_size; - args->ioctl_return = 0; - break; - - case RTEMS_BLKIO_SETBLKSIZE: - dd->block_size = *((uint32_t *) args->buffer); - args->ioctl_return = 0; - break; - - case RTEMS_BLKIO_GETSIZE: - *((rtems_blkdev_bnum *) args->buffer) = dd->size; - args->ioctl_return = 0; - break; - - case RTEMS_BLKIO_SYNCDEV: - rc = rtems_bdbuf_syncdev(dd); - args->ioctl_return = (uint32_t) (rc == RTEMS_SUCCESSFUL ? 0 : -1); - break; - - case RTEMS_BLKIO_GETDISKDEV: - *((rtems_disk_device **) args->buffer) = dd; - args->ioctl_return = 0; - break; - - case RTEMS_BLKIO_REQUEST: - /* - * It is not allowed to directly access the driver circumventing - * the cache. - */ - args->ioctl_return = (uint32_t) -1; - break; - - default: - args->ioctl_return = (uint32_t) dd->ioctl(dd->phys_dev, - args->command, - args->buffer); - break; + args->ioctl_return = (uint32_t) dd->ioctl(dd, + args->command, + args->buffer); } - - return RTEMS_SUCCESSFUL; -} - -int -rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp) -{ - size_t *arg_size = argp; - int rc = 0; - - switch (req) + else { - case RTEMS_BLKIO_GETMEDIABLKSIZE: - *arg_size = dd->media_block_size; - break; - - case RTEMS_BLKIO_GETBLKSIZE: - *arg_size = dd->block_size; - break; - - case RTEMS_BLKIO_SETBLKSIZE: - dd->block_size = *arg_size; - break; - - case RTEMS_BLKIO_GETSIZE: - *arg_size = dd->size; - break; - - default: - errno = EINVAL; - rc = -1; - break; + /* + * It is not allowed to directly access the driver circumventing the + * cache. + */ + args->ioctl_return = (uint32_t) -1; } - return rc; + return RTEMS_SUCCESSFUL; } |