summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/src
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-10-13 07:58:33 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2009-10-13 07:58:33 +0000
commitb96e09cb420213ebf2ef6d3b37ff3b7b02b65bd4 (patch)
tree706bd90c05001666f0bfaa0981c773131429177e /cpukit/libblock/src
parent2009-10-09 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-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.c6
-rw-r--r--cpukit/libblock/src/blkdev.c21
-rw-r--r--cpukit/libblock/src/diskdevs.c7
-rw-r--r--cpukit/libblock/src/flashdisk.c9
-rw-r--r--cpukit/libblock/src/nvdisk.c9
-rw-r--r--cpukit/libblock/src/ramdisk.c18
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)