From 16f3f107bcd8101aebb6c8cfda067d92b0a48ae9 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 31 Jul 2018 15:54:29 +0200 Subject: nvdisk: Use rtems_blkdev_create() Update #3358. --- cpukit/libblock/src/nvdisk.c | 70 ++++++++++++-------------------------------- 1 file changed, 19 insertions(+), 51 deletions(-) (limited to 'cpukit/libblock') 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 #include -#include #include #include @@ -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. */ @@ -107,16 +104,6 @@ typedef struct rtems_mvdisk uint32_t info_level; /**< The info trace level. */ } 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. */ @@ -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; } -- cgit v1.2.3