summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/src/ramdisk-init.c
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-10-29 12:47:04 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-10-29 12:47:04 +0000
commit982ca110ca0b13d4adc5a329705d1b8c3c7b4b96 (patch)
tree525dc5337b66741f46780a266d1fb1b9c1b4a23d /cpukit/libblock/src/ramdisk-init.c
parent2009-10-29 Ralf Corsépius <ralf.corsepius@rtems.org> (diff)
downloadrtems-982ca110ca0b13d4adc5a329705d1b8c3c7b4b96.tar.bz2
Aded ramdisk_register().
Diffstat (limited to 'cpukit/libblock/src/ramdisk-init.c')
-rw-r--r--cpukit/libblock/src/ramdisk-init.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/cpukit/libblock/src/ramdisk-init.c b/cpukit/libblock/src/ramdisk-init.c
index 6ef89dc5a1..9c272b9ea1 100644
--- a/cpukit/libblock/src/ramdisk-init.c
+++ b/cpukit/libblock/src/ramdisk-init.c
@@ -73,3 +73,50 @@ void ramdisk_free(ramdisk *rd)
free(rd);
}
}
+
+rtems_status_code ramdisk_register(
+ uint32_t block_size,
+ rtems_blkdev_bnum block_count,
+ bool trace,
+ const char *disk,
+ dev_t *dev_ptr
+)
+{
+ rtems_status_code sc = RTEMS_SUCCESSFUL;
+ rtems_device_major_number major = 0;
+ ramdisk *rd = NULL;
+ dev_t dev = 0;
+
+ sc = rtems_io_register_driver(0, &ramdisk_ops, &major);
+ if (sc != RTEMS_SUCCESSFUL) {
+ return RTEMS_UNSATISFIED;
+ }
+
+ rd = ramdisk_allocate(NULL, block_size, block_count, trace);
+ if (rd == NULL) {
+ rtems_io_unregister_driver(major);
+
+ return RTEMS_UNSATISFIED;
+ }
+
+ dev = rtems_filesystem_make_dev_t(major, 0);
+
+ sc = rtems_disk_create_phys(
+ dev,
+ block_size,
+ block_count,
+ ramdisk_ioctl,
+ rd,
+ disk
+ );
+ if (sc != RTEMS_SUCCESSFUL) {
+ ramdisk_free(rd);
+ rtems_io_unregister_driver(major);
+
+ return RTEMS_UNSATISFIED;
+ }
+
+ *dev_ptr = dev;
+
+ return RTEMS_SUCCESSFUL;
+}