diff options
author | Chris Johns <chrisj@rtems.org> | 2008-07-29 02:21:15 +0000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2008-07-29 02:21:15 +0000 |
commit | 3899a5379f4bfa067e73b4612a547a308a6634ec (patch) | |
tree | f837533ace01e934da6089cdca360822d85cc662 /cpukit/libblock/include/rtems/blkdev.h | |
parent | 2008-07-27 Ralf Corsépius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-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.h | 113 |
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 |