libblock: Split file and simplify

This commit is contained in:
Sebastian Huber
2012-03-13 12:24:18 +01:00
parent 3ee7b84394
commit 291c926449
3 changed files with 84 additions and 78 deletions
+1
View File
@@ -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 \
+71
View File
@@ -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;
}
+12 -78
View File
@@ -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);
}
else
{
/*
* It is not allowed to directly access the driver circumventing the
* cache.
*/
args->ioctl_return = (uint32_t) -1;
}
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)
{
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;
}
return rc;
}