summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/include/rtems/blkdev.h
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2008-07-29 02:21:15 +0000
committerChris Johns <chrisj@rtems.org>2008-07-29 02:21:15 +0000
commit3899a5379f4bfa067e73b4612a547a308a6634ec (patch)
treef837533ace01e934da6089cdca360822d85cc662 /cpukit/libblock/include/rtems/blkdev.h
parent2008-07-27 Ralf Corsépius <ralf.corsepius@rtems.org> (diff)
downloadrtems-3899a5379f4bfa067e73b4612a547a308a6634ec.tar.bz2
2008-07-29 Chris Johns <chrisj@rtems.org>
* libblock/Makefile.am: Removed src/show_bdbuf.c. * libblock/src/show_bdbuf.c: Removed. * libblock/include/rtems/bdbuf.h, cpukit/libblock/src/bdbuf.c: Rewritten the bdbuf code. Remove pre-emption disable, score access, fixed many bugs and increased performance. * libblock/include/rtems/blkdev.h: Added RTEMS_BLKDEV_CAPABILITIES block device request. Cleaned up comments. Added block and user fields to the sg buffer request. Move to rtems_* namespace. * libblock/include/rtems/diskdevs.h, cpukit/libblock/src/diskdevs.c: Move to rtems_* namespace. Add a capabilities field for drivers. Change rtems_disk_lookup to rtems_disk_obtain to match the release call. You do not lookup and release a disk, you obtain and release a disk. * libblock/include/rtems/ide_part_table.h, libblock/include/rtems/ramdisk.h, libblock/src/ide_part_table.c: Move to rtems_* namespace. * libblock/include/rtems/nvdisk.h: Formatting change. * libblock/src/blkdev.c: Move to rtems_* namespace. Change rtems_disk_lookup to rtems_disk_obtain * libblock/src/flashdisk.c: Move to rtems_* namespace. Use the new support for the block number in the scatter/grather request struct. This allows non-continuous buffer requests for those drivers that can support increasing performance. * libblock/src/nvdisk.c: Move to rtems_* namespace. Removed warnings. Added better error checking. Fixed some comments. * libblock/src/ramdisk.c: Move to rtems_* namespace. Added some trace functions to help debugging upper layers. Use the new support for the block number in the scatter/grather request struct. This allows non-continuous buffer requests for those drivers that can support increasing performance. * libfs/src/dosfs/fat.c, libfs/src/dosfs/fat.h: Use new chains API. Removed temporary hack and changed set_errno_and_return_minus_one to rtems_set_errno_and_return_minus_one. Move fat_buf_access from header and stopped it being inlined. Updated to libblock changes. * libfs/src/dosfs/fat_fat_operations.c, libfs/src/dosfs/fat_file.c, libfs/src/dosfs/msdos_create.c, libfs/src/dosfs/msdos_dir.c, libfs/src/dosfs/msdos_eval.c, libfs/src/dosfs/msdos_file.c, libfs/src/dosfs/msdos_format.c, libfs/src/dosfs/msdos_free.c, libfs/src/dosfs/msdos_initsupp.c, libfs/src/dosfs/msdos_misc.c, libfs/src/dosfs/msdos_mknod.c: Use new chains API. Removed temporary hack and changed set_errno_and_return_minus_one to rtems_set_errno_and_return_minus_one. Updated to libblock changes. * libmisc/Makefile.am: Add new ls and rm command files. * libmisc/shell/cmp-ls.c, libmisc/shell/extern-ls.h, libmisc/shell/filemode.c, libmisc/shell/print-ls.c, libmisc/shell/pwcache.c, libmisc/shell/utils-ls.c, libmisc/shell/vis.c, shell/vis.h: New. * libmisc/shell/extern-cp.h, libmisc/shell/main_cp.c, libmisc/shell/utils-cp.c: Fixed the usage call bug. * libmisc/shell/main_blksync.c: Updated to the new block IO ioctl command. * libmisc/shell/main_ls.c, libmisc/shell/main_rm.c: Updated to BSD commands with more features. * score/src/coremutex.c: Fix the strick order mutex code. * libmisc/shell/shell.c: Change shell tasks mode to be timeslice and no ASR. * sapi/include/confdefs.h: Change ata_driver_task_priority to rtems_ata_driver_task_priority. Add the new BD buf cache parameters with defaults. * score/src/interr.c: Do not return if the CPU halt call returns.
Diffstat (limited to '')
-rw-r--r--cpukit/libblock/include/rtems/blkdev.h113
1 files changed, 69 insertions, 44 deletions
diff --git a/cpukit/libblock/include/rtems/blkdev.h b/cpukit/libblock/include/rtems/blkdev.h
index fadbdce9c7..03b639c73c 100644
--- a/cpukit/libblock/include/rtems/blkdev.h
+++ b/cpukit/libblock/include/rtems/blkdev.h
@@ -20,67 +20,92 @@
extern "C" {
#endif
-/* Interface with device drivers
- * Block device looks, initialized and behaves like traditional RTEMS device
- * driver. Heart of the block device driver is in BIOREQUEST ioctl. This call
- * puts I/O request to the block device queue, in priority order, for
- * asynchronous processing. When driver executes request, req_done
- * function invoked, so callee knows about it. Look for details below.
+/*
+ * Interface with device drivers Block device looks, initialized and behaves
+ * like traditional RTEMS device driver. Heart of the block device driver is in
+ * BIOREQUEST ioctl. This call puts I/O request to the block device queue, in
+ * priority order, for asynchronous processing. When driver executes request,
+ * req_done function invoked, so callee knows about it. Look for details below.
*/
-
-/* Block device block number datatype */
-typedef uint32_t blkdev_bnum;
+/*
+ * Block device block number datatype
+ */
+typedef uint32_t rtems_blkdev_bnum;
/* Block device request type */
-typedef enum blkdev_request_op {
- BLKDEV_REQ_READ, /* Read operation */
- BLKDEV_REQ_WRITE /* Write operation */
-} blkdev_request_op;
+typedef enum rtems_blkdev_request_op {
+ RTEMS_BLKDEV_REQ_READ, /* Read operation */
+ RTEMS_BLKDEV_REQ_WRITE, /* Write operation */
+ RTEMS_BLKDEV_CAPABILITIES /* Capabilities request */
+} rtems_blkdev_request_op;
+
+/**
+ * ATA multi-sector buffer requests only supported. This option
+ * means the cache will only supply multiple buffers that are
+ * inorder so the ATA multi-sector command can be used. This is a
+ * hack to work around the current ATA driver.
+ */
+#define RTEMS_BLKDEV_CAP_MULTISECTOR_CONT (1 << 0)
-/* Type for block device request done callback function.
+/*
+ * @typedef rtems_blkdev_request_cb
*
- * PARAMETERS:
- * arg - argument supplied in blkdev_request
- * status - rtems status code for this operation
- * errno - errno value to be passed to the user when
+ * Type for block device request done callback function.
+ *
+ * @param arg Argument supplied in blkdev_request
+ * @param status RTEMS status code for this operation
+ * @param errno errno value to be passed to the user when
* status != RTEMS_SUCCESSFUL
*/
-typedef void (* blkdev_request_cb)(void *arg,
- rtems_status_code status,
- int error);
+typedef void (* rtems_blkdev_request_cb)(void *arg,
+ rtems_status_code status,
+ int error);
-/* blkdev_sg_buffer
+/**
+ * @struct rtems_blkdev_sg_buffer
* Block device scatter/gather buffer structure
*/
-typedef struct blkdev_sg_buffer {
+typedef struct rtems_blkdev_sg_buffer {
+ uint32_t block; /* The block number */
uint32_t length; /* Buffer length */
- void *buffer; /* Buffer pointer */
-} blkdev_sg_buffer;
+ void *buffer; /* Buffer pointer */
+ void *user; /* User pointer */
+} rtems_blkdev_sg_buffer;
/* blkdev_request (Block Device Request) structure is
* used to read/write a number of blocks from/to device.
*/
-typedef struct blkdev_request {
- blkdev_request_op req; /* Block device operation (read or write) */
- blkdev_request_cb req_done; /* Callback function */
- void *done_arg; /* Argument to be passed to callback function*/
- rtems_status_code status; /* Last I/O operation completion status */
- int error; /* If status != RTEMS_SUCCESSFUL, this field
- * contains error code
- */
- blkdev_bnum start; /* Start block number */
- uint32_t count; /* Number of blocks to be exchanged */
- uint32_t bufnum; /* Number of buffers provided */
-
- blkdev_sg_buffer bufs[0];/* List of scatter/gather buffers */
-} blkdev_request;
+typedef struct rtems_blkdev_request {
+ /* Block device operation (read or write) */
+ rtems_blkdev_request_op req;
+ /* Callback function */
+ rtems_blkdev_request_cb req_done;
+ /* Argument to be passed to callback function*/
+ void *done_arg;
+ /* Last I/O operation completion status */
+ rtems_status_code status;
+ /* If status != RTEMS_SUCCESSFUL, this field contains error code */
+ int error;
+ /* Start block number */
+ rtems_blkdev_bnum start;
+ /* Number of blocks to be exchanged */
+ uint32_t count;
+ /* Number of buffers provided */
+ uint32_t bufnum;
+
+ /* The task requesting the IO operation. */
+ rtems_id io_task;
+
+ /* List of scatter/gather buffers */
+ rtems_blkdev_sg_buffer bufs[0];
+} rtems_blkdev_request;
/* Block device IOCTL request codes */
-#define BLKIO_REQUEST _IOWR('B', 1, blkdev_request)
-#define BLKIO_GETBLKSIZE _IO('B', 2)
-#define BLKIO_GETSIZE _IO('B', 3)
-#define BLKIO_SYNCDEV _IO('B', 4)
+#define RTEMS_BLKIO_REQUEST _IOWR('B', 1, rtems_blkdev_request)
+#define RTEMS_BLKIO_GETBLKSIZE _IO('B', 2)
+#define RTEMS_BLKIO_GETSIZE _IO('B', 3)
+#define RTEMS_BLKIO_SYNCDEV _IO('B', 4)
/* Device driver interface conventions suppose that driver may
* contain initialize/open/close/read/write/ioctl entry points. These
@@ -90,7 +115,7 @@ typedef struct blkdev_request {
* all block devices and appropriate ioctl handlers.
*/
-#define GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES \
+#define RTEMS_GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES \
rtems_blkdev_generic_open, rtems_blkdev_generic_close, \
rtems_blkdev_generic_read, rtems_blkdev_generic_write, \
rtems_blkdev_generic_ioctl