diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2009-10-29 12:47:04 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2009-10-29 12:47:04 +0000 |
commit | 982ca110ca0b13d4adc5a329705d1b8c3c7b4b96 (patch) | |
tree | 525dc5337b66741f46780a266d1fb1b9c1b4a23d | |
parent | 2009-10-29 Ralf Corsépius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-982ca110ca0b13d4adc5a329705d1b8c3c7b4b96.tar.bz2 |
Aded ramdisk_register().
-rw-r--r-- | cpukit/ChangeLog | 5 | ||||
-rw-r--r-- | cpukit/libblock/include/rtems/ramdisk.h | 19 | ||||
-rw-r--r-- | cpukit/libblock/src/ramdisk-init.c | 47 |
3 files changed, 71 insertions, 0 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index d6a3e4e778..98cbf89544 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,8 @@ +2009-10-28 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * libblock/include/rtems/ramdisk.h, libblock/src/ramdisk-driver.c: + Aded ramdisk_register(). + 2009-10-23 Ralf Corsépius <ralf.corsepius@rtems.org> * aclocal/prog-cc.m4: Remove RTEMS_CFLAGS. diff --git a/cpukit/libblock/include/rtems/ramdisk.h b/cpukit/libblock/include/rtems/ramdisk.h index fc40816f54..68c5887abe 100644 --- a/cpukit/libblock/include/rtems/ramdisk.h +++ b/cpukit/libblock/include/rtems/ramdisk.h @@ -213,6 +213,25 @@ ramdisk *ramdisk_allocate( void ramdisk_free(ramdisk *rd); +/** + * @brief Allocates, initializes and registers a RAM disk. + * + * The block size will be @a block_size. The block count will be @a + * block_count. The disk storage will be allocated. Sets the trace enable to + * @a trace. Registers a device node with disk name path @a disk. The + * registered device number will be returned in @a dev. + * + * @retval RTEMS_SUCCESSFUL Successful operation. + * @retval RTEMS_UNSATISFIED Something is wrong. + */ +rtems_status_code ramdisk_register( + uint32_t block_size, + rtems_blkdev_bnum block_count, + bool trace, + const char *disk, + dev_t *dev +); + /** @} */ /** @} */ 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; +} |