Aded ramdisk_register().

This commit is contained in:
Thomas Doerfler
2009-10-29 12:47:04 +00:00
parent 82a8addafb
commit 982ca110ca
3 changed files with 71 additions and 0 deletions

View File

@@ -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.

View File

@@ -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
);
/** @} */
/** @} */

View File

@@ -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;
}