summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/src/blkdev.c
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2009-08-06 03:58:09 +0000
committerChris Johns <chrisj@rtems.org>2009-08-06 03:58:09 +0000
commit945884fe9fc662bcce68f5ed61127c3e6ddef467 (patch)
tree843e527efdb5ec376c40068ca1fb494fef5175c1 /cpukit/libblock/src/blkdev.c
parent2009-08-05 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-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.c51
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;
+}