mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-27 15:00:16 +00:00
Aded ramdisk_register().
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
/** @} */
|
||||
|
||||
/** @} */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user