diff options
author | Chris Johns <chrisj@rtems.org> | 2009-08-06 03:58:09 +0000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2009-08-06 03:58:09 +0000 |
commit | 945884fe9fc662bcce68f5ed61127c3e6ddef467 (patch) | |
tree | 843e527efdb5ec376c40068ca1fb494fef5175c1 /cpukit/libblock/src/blkdev.c | |
parent | 2009-08-05 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-945884fe9fc662bcce68f5ed61127c3e6ddef467.tar.bz2 |
2009-08-06 Chris Johns <chrisj@rtems.org>
* libblock/src/bdbuf.c: Fix group user logic.
* libblock/include/rtems/blkdev.h, libblock/src/blkdev.c,
libblock/src/nvdisk.c, libblock/src/flashdisk.c: Add set block
size, and get media block size support.
Diffstat (limited to 'cpukit/libblock/src/blkdev.c')
-rw-r--r-- | cpukit/libblock/src/blkdev.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/cpukit/libblock/src/blkdev.c b/cpukit/libblock/src/blkdev.c index 25fe66d0e0..0411d47dba 100644 --- a/cpukit/libblock/src/blkdev.c +++ b/cpukit/libblock/src/blkdev.c @@ -17,6 +17,7 @@ #include "config.h" #endif +#include <errno.h> #include <string.h> #include <rtems.h> @@ -218,10 +219,18 @@ rtems_blkdev_generic_ioctl( switch (args->command) { + case RTEMS_BLKIO_GETMEDIABLKSIZE: + args->ioctl_return = dd->media_block_size; + break; + case RTEMS_BLKIO_GETBLKSIZE: args->ioctl_return = dd->block_size; break; + case RTEMS_BLKIO_SETBLKSIZE: + dd->block_size = *((size_t*) args->buffer); + break; + case RTEMS_BLKIO_GETSIZE: args->ioctl_return = dd->size; break; @@ -248,3 +257,45 @@ rtems_blkdev_generic_ioctl( return RTEMS_SUCCESSFUL; } + +int +rtems_blkdev_ioctl(dev_t dev, uint32_t req, void *argp) +{ + rtems_disk_device *dd; + size_t *arg_size = argp; + + dd = rtems_disk_obtain(dev); + if (dd == NULL) + { + errno = ENODEV; + return -1; + } + + 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; + return -1; + break; + } + + rtems_disk_release(dd); + + return 0; +} |