[PATCH 02/21] nvdisk: Use rtems_blkdev_create()
Sebastian Huber
sebastian.huber at embedded-brains.de
Mon Aug 6 07:14:34 UTC 2018
Update #3358.
---
cpukit/libblock/src/nvdisk.c | 70 +++++++++++-----------------------------
testsuites/samples/fileio/init.c | 61 ++--------------------------------
2 files changed, 22 insertions(+), 109 deletions(-)
diff --git a/cpukit/libblock/src/nvdisk.c b/cpukit/libblock/src/nvdisk.c
index bb1fc5dbe9..693c0b13a0 100644
--- a/cpukit/libblock/src/nvdisk.c
+++ b/cpukit/libblock/src/nvdisk.c
@@ -26,7 +26,6 @@
#include <inttypes.h>
#include <rtems/blkdev.h>
-#include <rtems/diskdevs.h>
#include <rtems/nvdisk.h>
#include <rtems/thread.h>
@@ -93,10 +92,8 @@ typedef struct rtems_nvdisk_device_ctl
* The NV disk control structure for a single disk. There is one
* for each minor disk in the system.
*/
-typedef struct rtems_mvdisk
+typedef struct
{
- rtems_device_major_number major; /**< The driver's major number. */
- rtems_device_minor_number minor; /**< The driver's minor number. */
uint32_t flags; /**< configuration flags. */
uint32_t block_size; /**< The block size for this disk. */
uint32_t block_count; /**< The number of available blocks. */
@@ -108,16 +105,6 @@ typedef struct rtems_mvdisk
} rtems_nvdisk;
/**
- * The array of NV disks we support.
- */
-static rtems_nvdisk* rtems_nvdisks;
-
-/**
- * The number of NV disks we have.
- */
-static uint32_t rtems_nvdisk_count;
-
-/**
* The CRC16 factor table. Created during initialisation.
*/
static uint16_t* rtems_nvdisk_crc16_factor;
@@ -688,17 +675,10 @@ rtems_nvdisk_erase_disk (rtems_nvdisk* nvd)
static int
rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
{
- dev_t dev = rtems_disk_get_device_identifier (dd);
- rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev);
- rtems_blkdev_request* r = argp;
-
- if (minor >= rtems_nvdisk_count)
- {
- errno = ENODEV;
- return -1;
- }
+ rtems_nvdisk* nvd = rtems_disk_get_driver_data (dd);
+ rtems_blkdev_request* r = argp;
- if (rtems_nvdisks[minor].device_count == 0)
+ if (nvd->device_count == 0)
{
errno = ENODEV;
return -1;
@@ -706,7 +686,7 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
errno = 0;
- rtems_mutex_lock (&rtems_nvdisks[minor].lock);
+ rtems_mutex_lock (&nvd->lock);
switch (req)
{
@@ -714,11 +694,11 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
switch (r->req)
{
case RTEMS_BLKDEV_REQ_READ:
- errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r);
+ errno = rtems_nvdisk_read (nvd, r);
break;
case RTEMS_BLKDEV_REQ_WRITE:
- errno = rtems_nvdisk_write (&rtems_nvdisks[minor], r);
+ errno = rtems_nvdisk_write (nvd, r);
break;
default:
@@ -728,11 +708,11 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
break;
case RTEMS_NVDISK_IOCTL_ERASE_DISK:
- errno = rtems_nvdisk_erase_disk (&rtems_nvdisks[minor]);
+ errno = rtems_nvdisk_erase_disk (nvd);
break;
case RTEMS_NVDISK_IOCTL_INFO_LEVEL:
- rtems_nvdisks[minor].info_level = (uintptr_t) argp;
+ nvd->info_level = (uintptr_t) argp;
break;
default:
@@ -740,7 +720,7 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
break;
}
- rtems_mutex_unlock (&rtems_nvdisks[minor].lock);
+ rtems_mutex_unlock (&nvd->lock);
return errno == 0 ? 0 : -1;
}
@@ -755,41 +735,31 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp)
* @param arg Initialization argument, not applicable.
*/
rtems_device_driver
-rtems_nvdisk_initialize (rtems_device_major_number major,
- rtems_device_minor_number minor,
+rtems_nvdisk_initialize (rtems_device_major_number major RTEMS_UNUSED,
+ rtems_device_minor_number minor RTEMS_UNUSED,
void* arg RTEMS_UNUSED)
{
const rtems_nvdisk_config* c = rtems_nvdisk_configuration;
rtems_nvdisk* nvd;
rtems_status_code sc;
-
- sc = rtems_disk_io_initialize ();
- if (sc != RTEMS_SUCCESSFUL)
- return sc;
+ uint32_t i;
sc = rtems_nvdisk_crc16_gen_factors (0x8408);
if (sc != RTEMS_SUCCESSFUL)
return sc;
- rtems_nvdisks = calloc (rtems_nvdisk_configuration_size,
- sizeof (rtems_nvdisk));
-
- if (!rtems_nvdisks)
+ nvd = calloc (rtems_nvdisk_configuration_size, sizeof (*nvd));
+ if (!nvd)
return RTEMS_NO_MEMORY;
- for (minor = 0; minor < rtems_nvdisk_configuration_size; minor++, c++)
+ for (i = 0; i < rtems_nvdisk_configuration_size; i++, c++, nvd++)
{
char name[] = RTEMS_NVDISK_DEVICE_BASE_NAME "a";
- dev_t dev = rtems_filesystem_make_dev_t (major, minor);
uint32_t device;
uint32_t blocks = 0;
- nvd = &rtems_nvdisks[minor];
+ name [sizeof(RTEMS_NVDISK_DEVICE_BASE_NAME)] += i;
- name [sizeof(RTEMS_NVDISK_DEVICE_BASE_NAME)] += minor;
-
- nvd->major = major;
- nvd->minor = minor;
nvd->flags = c->flags;
nvd->block_size = c->block_size;
nvd->info_level = c->info_level;
@@ -815,8 +785,8 @@ rtems_nvdisk_initialize (rtems_device_major_number major,
nvd->block_count = blocks;
nvd->device_count = c->device_count;
- sc = rtems_disk_create_phys(dev, c->block_size, blocks,
- rtems_nvdisk_ioctl, NULL, name);
+ sc = rtems_blkdev_create(name, c->block_size, blocks,
+ rtems_nvdisk_ioctl, nvd);
if (sc != RTEMS_SUCCESSFUL)
{
rtems_nvdisk_error ("disk create phy failed");
@@ -826,7 +796,5 @@ rtems_nvdisk_initialize (rtems_device_major_number major,
rtems_mutex_init (&nvd->lock, "NV Disk");
}
- rtems_nvdisk_count = rtems_nvdisk_configuration_size;
-
return RTEMS_SUCCESSFUL;
}
diff --git a/testsuites/samples/fileio/init.c b/testsuites/samples/fileio/init.c
index 974535b83c..6d30c41db0 100644
--- a/testsuites/samples/fileio/init.c
+++ b/testsuites/samples/fileio/init.c
@@ -75,58 +75,6 @@ const rtems_nvdisk_config rtems_nvdisk_configuration[] =
*/
uint32_t rtems_nvdisk_configuration_size = 1;
-/**
- * Create the NV Disk Driver entry.
- */
-rtems_driver_address_table rtems_nvdisk_io_ops = {
- initialization_entry: rtems_nvdisk_initialize,
- open_entry: rtems_blkdev_generic_open,
- close_entry: rtems_blkdev_generic_close,
- read_entry: rtems_blkdev_generic_read,
- write_entry: rtems_blkdev_generic_write,
- control_entry: rtems_blkdev_generic_ioctl
-};
-
-#if 0
-int
-setup_nvdisk (const char* mntpath)
-{
- rtems_device_major_number major;
- rtems_status_code sc;
-
- /*
- * For our test we do not have any static RAM or EEPROM devices so
- * we allocate the memory from the heap.
- */
- rtems_nv_heap_device_descriptor[0].base =
- malloc (rtems_nv_heap_device_descriptor[0].size);
-
- if (!rtems_nv_heap_device_descriptor[0].base)
- {
- printf ("error: no memory for NV disk\n");
- return 1;
- }
-
- /*
- * Register the NV Disk driver.
- */
- printf ("Register NV Disk Driver: ");
- sc = rtems_io_register_driver (RTEMS_DRIVER_AUTO_MAJOR,
- &rtems_nvdisk_io_ops,
- &major);
- if (sc != RTEMS_SUCCESSFUL)
- {
- printf ("error: nvdisk driver not initialised: %s\n",
- rtems_status_text (sc));
- return 1;
- }
-
- printf ("successful\n");
-
- return 0;
-}
-#endif
-
/*
* Table of FAT file systems that will be mounted
* with the "fsmount" function.
@@ -473,7 +421,6 @@ create_ramdisk (int argc, char *argv[])
static int
create_nvdisk (int argc, char *argv[])
{
- rtems_device_major_number major;
rtems_status_code sc;
int arg;
uint32_t size = 0;
@@ -485,7 +432,7 @@ create_nvdisk (int argc, char *argv[])
{
if (argv[arg][0] == '-')
{
- switch (argv[arg][0])
+ switch (argv[arg][1])
{
case 's':
++arg;
@@ -545,10 +492,8 @@ create_nvdisk (int argc, char *argv[])
" block-size=%" PRIu32"]:",
rtems_nv_heap_device_descriptor[0].size,
rtems_nvdisk_configuration[0].block_size);
-
- sc = rtems_io_register_driver (RTEMS_DRIVER_AUTO_MAJOR,
- &rtems_nvdisk_io_ops,
- &major);
+
+ sc = rtems_nvdisk_initialize (0, 0, NULL);
if (sc != RTEMS_SUCCESSFUL)
{
printf ("error: nvdisk driver not initialised: %s\n",
--
2.13.7
More information about the devel
mailing list