mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-20 17:51:31 +08:00
libblock: Split file and simplify
This commit is contained in:
@@ -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 \
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user