summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/include/rtems/diskdevs.h
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/include/rtems/diskdevs.h
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/include/rtems/diskdevs.h')
-rw-r--r--cpukit/libblock/include/rtems/diskdevs.h150
1 files changed, 122 insertions, 28 deletions
diff --git a/cpukit/libblock/include/rtems/diskdevs.h b/cpukit/libblock/include/rtems/diskdevs.h
index 89e85fb6d7..0f0755fbb1 100644
--- a/cpukit/libblock/include/rtems/diskdevs.h
+++ b/cpukit/libblock/include/rtems/diskdevs.h
@@ -20,18 +20,18 @@
#include <rtems/libio.h>
#include <stdlib.h>
-#include <rtems/blkdev.h>
-
#ifdef __cplusplus
extern "C" {
#endif
+typedef struct rtems_disk_device rtems_disk_device;
+
/**
* @defgroup rtems_disk Block Device Disk Management
*
* @ingroup rtems_libblock
*
- * This module provides functions to manage disk devices.
+ * @brief This module provides functions to manage disk devices.
*
* A disk is a set of blocks which are identified by a consecutive set of
* non-negative integers starting at zero. There are also logical disks which
@@ -43,49 +43,58 @@ extern "C" {
*/
/**
- * Block device IO control handler type.
+ * @brief Block device block index type.
+ */
+typedef uint32_t rtems_blkdev_bnum;
+
+/**
+ * @brief Block device IO control handler type.
*/
-typedef int (*rtems_block_device_ioctl)( dev_t dev, uint32_t req, void *argp);
+typedef int (*rtems_block_device_ioctl)(
+ rtems_disk_device *dd,
+ uint32_t req,
+ void *argp
+);
/**
- * Description of a disk device (logical and physical disks).
+ * @brief Description of a disk device (logical and physical disks).
*
* An array of pointer tables to rtems_disk_device structures is maintained.
* The first table will be indexed by the major number and the second table
* will be indexed by the minor number. This allows quick lookup using a data
* structure of moderated size.
*/
-typedef struct rtems_disk_device {
+struct rtems_disk_device {
/**
- * Device identifier (concatenation of major and minor number).
+ * @brief Device identifier (concatenation of major and minor number).
*/
dev_t dev;
/**
- * Physical device identifier (equals the @c dev entry if it specifies a
+ * @brief Physical device identifier (equals the @c dev entry if it specifies a
* physical device).
*/
- struct rtems_disk_device *phys_dev;
+ rtems_disk_device *phys_dev;
/**
- * Driver capabilities.
+ * @brief Driver capabilities.
*/
uint32_t capabilities;
/**
- * Disk device name.
+ * @brief Disk device name.
*/
char *name;
/**
- * Usage counter.
+ * @brief Usage counter.
*
* Devices cannot be removed if they are in use.
*/
unsigned uses;
/**
- * Start block number.
+ * @brief Start block number.
*
* Equals zero for physical devices. It is a block offset to the related
* physical device for logical device.
@@ -93,32 +102,106 @@ typedef struct rtems_disk_device {
rtems_blkdev_bnum start;
/**
- * Size of the physical or logical disk in blocks.
+ * @brief Size of the physical or logical disk in blocks.
*/
rtems_blkdev_bnum size;
/**
- * Device block size in bytes.
+ * @brief Device block size in bytes.
*
* This is the minimum transfer unit. It can be any size.
*/
uint32_t block_size;
/**
- * Device media block size in bytes.
+ * @brief Device media block size in bytes.
*
* This is the media transfer unit the hardware defaults to.
*/
uint32_t media_block_size;
/**
- * IO control handler for this disk.
+ * @brief IO control handler for this disk.
*/
rtems_block_device_ioctl ioctl;
-} rtems_disk_device;
+
+ /**
+ * @brief Private data for the disk driver.
+ */
+ void *driver_data;
+};
+
+/**
+ * @name Disk Device Data
+ *
+ * @{
+ */
+
+static inline dev_t rtems_disk_physical_device_number(
+ const rtems_disk_device *dd
+)
+{
+ return dd->phys_dev->dev;
+}
+
+static inline rtems_device_major_number rtems_disk_physical_major_number(
+ const rtems_disk_device *dd
+)
+{
+ return rtems_filesystem_dev_major_t(dd->phys_dev->dev);
+}
+
+static inline rtems_device_minor_number rtems_disk_physical_minor_number(
+ const rtems_disk_device *dd
+)
+{
+ return rtems_filesystem_dev_minor_t(dd->phys_dev->dev);
+}
+
+static inline dev_t rtems_disk_device_number(const rtems_disk_device *dd)
+{
+ return dd->dev;
+}
+
+static inline rtems_device_major_number rtems_disk_major_number(
+ const rtems_disk_device *dd
+)
+{
+ return rtems_filesystem_dev_major_t(dd->dev);
+}
+
+static inline rtems_device_minor_number rtems_disk_minor_number(
+ const rtems_disk_device *dd
+)
+{
+ return rtems_filesystem_dev_minor_t(dd->dev);
+}
+
+static inline void *rtems_disk_driver_data(const rtems_disk_device *dd)
+{
+ return dd->driver_data;
+}
+
+static inline uint32_t rtems_disk_block_size(const rtems_disk_device *dd)
+{
+ return dd->block_size;
+}
+
+static inline uint32_t rtems_disk_media_block_size(const rtems_disk_device *dd)
+{
+ return dd->media_block_size;
+}
+
+/** @} */
+
+/**
+ * @name Disk Device Maintainance
+ *
+ * @{
+ */
/**
- * Creates a physical disk with device identifier @a dev.
+ * @brief Creates a physical disk with device identifier @a dev.
*
* The block size @a block_size must be a power of two. The disk size @a
* disk_size is the number of blocks provided by this disk. The block index
@@ -134,13 +217,14 @@ 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
);
/**
- * Creates a logical disk with device identifier @a dev.
+ * @brief Creates a logical disk with device identifier @a dev.
*
- * A logical disk manages a subset of consecutive blocks containd in the
+ * A logical disk manages a subset of consecutive blocks contained in the
* physical disk with identifier @a phys. The start block index of the logical
* disk device is @a start. The block number of the logcal disk will be @a
* size. The blocks must be within the range of blocks managed by the
@@ -157,7 +241,7 @@ rtems_status_code rtems_disk_create_log(
);
/**
- * Deletes a physical or logical disk device with identifier @a dev.
+ * @brief Deletes a physical or logical disk device with identifier @a dev.
*
* Disk devices may be deleted if there usage counter (and the usage counters
* of all contained logical disks devices) equals zero. When a physical disk
@@ -167,7 +251,7 @@ rtems_status_code rtems_disk_create_log(
rtems_status_code rtems_disk_delete(dev_t dev);
/**
- * Returns the disk device descriptor for the device identifier @a dev.
+ * @brief Returns the disk device descriptor for the device identifier @a dev.
*
* Increments usage counter by one. You should release the disk device
* descriptor with rtems_disk_release(). Returns @c NULL if no corresponding
@@ -176,14 +260,22 @@ rtems_status_code rtems_disk_delete(dev_t dev);
rtems_disk_device *rtems_disk_obtain(dev_t dev);
/**
- * Releases the disk device description @a dd.
+ * @brief Releases the disk device description @a dd.
*
* Decrements usage counter by one.
*/
rtems_status_code rtems_disk_release(rtems_disk_device *dd);
+/** @} */
+
+/**
+ * @name Disk Management
+ *
+ * @{
+ */
+
/**
- * Disk device iterator.
+ * @brief Disk device iterator.
*
* Returns the next disk device descriptor with a device identifier larger than
* @a dev. If there is no such device, @c NULL will be returned. Use minus
@@ -200,7 +292,7 @@ rtems_status_code rtems_disk_release(rtems_disk_device *dd);
rtems_disk_device *rtems_disk_next(dev_t dev);
/**
- * Initializes the disk device management.
+ * @brief Initializes the disk device management.
*
* This functions returns successful if the disk device management is already
* initialized. There is no protection against concurrent access.
@@ -208,12 +300,14 @@ rtems_disk_device *rtems_disk_next(dev_t dev);
rtems_status_code rtems_disk_io_initialize(void);
/**
- * Releases all resources allocated for disk device management.
+ * @brief Releases all resources allocated for disk device management.
*/
rtems_status_code rtems_disk_io_done(void);
/** @} */
+/** @} */
+
#ifdef __cplusplus
}
#endif