diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2009-10-13 07:58:33 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2009-10-13 07:58:33 +0000 |
commit | b96e09cb420213ebf2ef6d3b37ff3b7b02b65bd4 (patch) | |
tree | 706bd90c05001666f0bfaa0981c773131429177e /cpukit/libblock/src | |
parent | 2009-10-09 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff) | |
download | rtems-b96e09cb420213ebf2ef6d3b37ff3b7b02b65bd4.tar.bz2 |
* libblock/include/rtems/diskdevs.h: Added driver data pointer to IO
control function. The IO control handler takes now the disk device as
first parameter instead of the physical device number.
* cpukit/libblock/include/rtems/blkdev.h, libblock/src/bdbuf.c,
libblock/src/blkdev.c, libblock/src/diskdevs.c, libblock/src/nvdisk.c,
libblock/src/flashdisk.c, libblock/src/ramdisk.c: Update for block
device API change.
Diffstat (limited to 'cpukit/libblock/src')
-rw-r--r-- | cpukit/libblock/src/bdbuf.c | 6 | ||||
-rw-r--r-- | cpukit/libblock/src/blkdev.c | 21 | ||||
-rw-r--r-- | cpukit/libblock/src/diskdevs.c | 7 | ||||
-rw-r--r-- | cpukit/libblock/src/flashdisk.c | 9 | ||||
-rw-r--r-- | cpukit/libblock/src/nvdisk.c | 9 | ||||
-rw-r--r-- | cpukit/libblock/src/ramdisk.c | 18 |
6 files changed, 25 insertions, 45 deletions
diff --git a/cpukit/libblock/src/bdbuf.c b/cpukit/libblock/src/bdbuf.c index de5468fd6a..21d512bb2a 100644 --- a/cpukit/libblock/src/bdbuf.c +++ b/cpukit/libblock/src/bdbuf.c @@ -1975,7 +1975,7 @@ rtems_bdbuf_read (dev_t device, req->status = RTEMS_RESOURCE_IN_USE; req->error = 0; - result = dd->ioctl (dd->phys_dev->dev, RTEMS_BLKIO_REQUEST, req); + result = dd->ioctl (dd, RTEMS_BLKIO_REQUEST, req); /* * Inspection of the DOS FS code shows the result from this function is @@ -2401,9 +2401,7 @@ rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer) * Perform the transfer. No cache locks, no preemption, only the disk * device is being held. */ - result = dd->phys_dev->ioctl (dd->phys_dev->dev, - RTEMS_BLKIO_REQUEST, transfer->write_req); - + result = dd->ioctl (dd, RTEMS_BLKIO_REQUEST, transfer->write_req); if (result < 0) { rtems_bdbuf_lock_cache (); diff --git a/cpukit/libblock/src/blkdev.c b/cpukit/libblock/src/blkdev.c index 8f0ceb6e7a..ceb4dd8930 100644 --- a/cpukit/libblock/src/blkdev.c +++ b/cpukit/libblock/src/blkdev.c @@ -237,20 +237,19 @@ rtems_blkdev_generic_ioctl( case RTEMS_BLKIO_SYNCDEV: rc = rtems_bdbuf_syncdev(dd->dev); - args->ioctl_return = (rc == RTEMS_SUCCESSFUL ? 0 : -1); + args->ioctl_return = (uint32_t) (rc == RTEMS_SUCCESSFUL ? 0 : -1); break; case RTEMS_BLKIO_REQUEST: { rtems_blkdev_request *req = args->buffer; - args->ioctl_return = dd->ioctl(dd->phys_dev->dev, args->command, - req); + args->ioctl_return = (uint32_t) dd->ioctl(dd, args->command, req); break; } default: - args->ioctl_return = dd->ioctl(dd->phys_dev->dev, args->command, - args->buffer); + args->ioctl_return = (uint32_t) dd->ioctl(dd, args->command, + args->buffer); break; } rtems_disk_release(dd); @@ -259,18 +258,10 @@ rtems_blkdev_generic_ioctl( } int -rtems_blkdev_ioctl(dev_t dev, uint32_t req, void *argp) +rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp) { - rtems_disk_device *dd; size_t *arg_size = argp; int rc = 0; - - dd = rtems_disk_obtain(dev); - if (dd == NULL) - { - errno = ENODEV; - return -1; - } switch (req) { @@ -295,8 +286,6 @@ rtems_blkdev_ioctl(dev_t dev, uint32_t req, void *argp) rc = -1; break; } - - rtems_disk_release(dd); return rc; } diff --git a/cpukit/libblock/src/diskdevs.c b/cpukit/libblock/src/diskdevs.c index c5599e873c..8655e77758 100644 --- a/cpukit/libblock/src/diskdevs.c +++ b/cpukit/libblock/src/diskdevs.c @@ -223,6 +223,7 @@ rtems_status_code rtems_disk_create_phys( uint32_t block_size, rtems_blkdev_bnum disk_size, rtems_block_device_ioctl handler, + void *driver_data, const char *name ) { @@ -252,12 +253,11 @@ rtems_status_code rtems_disk_create_phys( dd->size = disk_size; dd->block_size = dd->media_block_size = block_size; dd->ioctl = handler; + dd->driver_data = driver_data; rc = rtems_io_register_name(name, major, minor); - if (handler (dd->phys_dev->dev, - RTEMS_BLKDEV_CAPABILITIES, - &dd->capabilities) < 0) + if (handler (dd, RTEMS_BLKDEV_CAPABILITIES, &dd->capabilities) < 0) dd->capabilities = 0; diskdevs_protected = false; @@ -316,6 +316,7 @@ rtems_status_code rtems_disk_create_log( dd->size = size; dd->block_size = dd->media_block_size = pdd->block_size; dd->ioctl = pdd->ioctl; + dd->driver_data = pdd->driver_data; rc = rtems_io_register_name(name, major, minor); diff --git a/cpukit/libblock/src/flashdisk.c b/cpukit/libblock/src/flashdisk.c index 743de32432..1b321ebe79 100644 --- a/cpukit/libblock/src/flashdisk.c +++ b/cpukit/libblock/src/flashdisk.c @@ -2335,14 +2335,15 @@ rtems_fdisk_print_status (rtems_flashdisk* fd) /** * Flash disk IOCTL handler. * - * @param dev Device number (major, minor number). + * @param dd Disk device. * @param req IOCTL request code. * @param argp IOCTL argument. * @retval The IOCTL return value */ static int -rtems_fdisk_ioctl (dev_t dev, uint32_t req, void* argp) +rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp) { + dev_t dev = rtems_disk_physical_device_number (dd); rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev); rtems_blkdev_request* r = argp; rtems_status_code sc; @@ -2408,7 +2409,7 @@ rtems_fdisk_ioctl (dev_t dev, uint32_t req, void* argp) break; default: - rtems_blkdev_ioctl (dev, req, argp); + rtems_blkdev_ioctl (dd, req, argp); break; } @@ -2479,7 +2480,7 @@ rtems_fdisk_initialize (rtems_device_major_number major, sc = rtems_disk_create_phys(dev, c->block_size, blocks - fd->unavail_blocks, - rtems_fdisk_ioctl, name); + rtems_fdisk_ioctl, NULL, name); if (sc != RTEMS_SUCCESSFUL) { rtems_fdisk_error ("disk create phy failed"); diff --git a/cpukit/libblock/src/nvdisk.c b/cpukit/libblock/src/nvdisk.c index 005e846746..f121078bb1 100644 --- a/cpukit/libblock/src/nvdisk.c +++ b/cpukit/libblock/src/nvdisk.c @@ -674,14 +674,15 @@ rtems_nvdisk_erase_disk (rtems_nvdisk* nvd) /** * NV disk IOCTL handler. * - * @param dev Device number (major, minor number). + * @param dd Disk device. * @param req IOCTL request code. * @param argp IOCTL argument. * @retval The IOCTL return value */ static int -rtems_nvdisk_ioctl (dev_t dev, uint32_t req, void* argp) +rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp) { + dev_t dev = rtems_disk_physical_device_number (dd); rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev); rtems_blkdev_request* r = argp; rtems_status_code sc; @@ -734,7 +735,7 @@ rtems_nvdisk_ioctl (dev_t dev, uint32_t req, void* argp) break; default: - rtems_blkdev_ioctl (dev, req, argp); + rtems_blkdev_ioctl (dd, req, argp); break; } @@ -817,7 +818,7 @@ rtems_nvdisk_initialize (rtems_device_major_number major, nvd->device_count = c->device_count; sc = rtems_disk_create_phys(dev, c->block_size, blocks, - rtems_nvdisk_ioctl, name); + rtems_nvdisk_ioctl, NULL, name); if (sc != RTEMS_SUCCESSFUL) { rtems_nvdisk_error ("disk create phy failed"); diff --git a/cpukit/libblock/src/ramdisk.c b/cpukit/libblock/src/ramdisk.c index 98180923a7..6825287d21 100644 --- a/cpukit/libblock/src/ramdisk.c +++ b/cpukit/libblock/src/ramdisk.c @@ -163,24 +163,14 @@ ramdisk_write(struct ramdisk *rd, rtems_blkdev_request *req) * IOCTL return value */ static int -ramdisk_ioctl(dev_t dev, uint32_t req, void *argp) +ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp) { switch (req) { case RTEMS_BLKIO_REQUEST: { - rtems_device_minor_number minor; rtems_blkdev_request *r = argp; - struct ramdisk *rd; - - minor = rtems_filesystem_dev_minor_t(dev); - if ((minor >= nramdisks) || !ramdisk[minor].initialized) - { - errno = ENODEV; - return -1; - } - - rd = ramdisk + minor; + struct ramdisk *rd = rtems_disk_driver_data(dd); switch (r->req) { @@ -198,7 +188,7 @@ ramdisk_ioctl(dev_t dev, uint32_t req, void *argp) } default: - return rtems_blkdev_ioctl (dev, req, argp); + return rtems_blkdev_ioctl (dd, req, argp); break; } @@ -266,7 +256,7 @@ ramdisk_initialize( r->area = c->location; } rc = rtems_disk_create_phys(dev, c->block_size, c->block_num, - ramdisk_ioctl, name); + ramdisk_ioctl, r, name); if (rc != RTEMS_SUCCESSFUL) { if (r->malloced) |