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/src/nvdisk.c | |
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 'cpukit/libblock/src/nvdisk.c')
-rw-r--r-- | cpukit/libblock/src/nvdisk.c | 122 |
1 files changed, 48 insertions, 74 deletions
diff --git a/cpukit/libblock/src/nvdisk.c b/cpukit/libblock/src/nvdisk.c index 0ee094bdc6..4166d79c98 100644 --- a/cpukit/libblock/src/nvdisk.c +++ b/cpukit/libblock/src/nvdisk.c @@ -51,7 +51,7 @@ * footprint targets. Leave in by default. */ #if !defined (RTEMS_NVDISK_TRACE) -#define RTEMS_NVDISK_TRACE 1 +#define RTEMS_NVDISK_TRACE 0 #endif /** @@ -165,7 +165,7 @@ rtems_nvdisk_crc16_gen_factors (uint16_t pattern) /** * Print a message to the nvdisk output and flush it. * - * @param fd The flashdisk control structure. + * @param nvd The nvdisk control structure. * @param format The format string. See printf for details. * @param ... The arguments for the format text. * @return int The number of bytes written to the output. @@ -189,7 +189,7 @@ rtems_nvdisk_printf (const rtems_nvdisk* nvd, const char *format, ...) /** * Print a info message to the nvdisk output and flush it. * - * @param fd The flashdisk control structure. + * @param nvd The nvdisk control structure. * @param format The format string. See printf for details. * @param ... The arguments for the format text. * @return int The number of bytes written to the output. @@ -213,7 +213,7 @@ rtems_nvdisk_info (const rtems_nvdisk* nvd, const char *format, ...) /** * Print a warning to the nvdisk output and flush it. * - * @param fd The flashdisk control structure. + * @param nvd The nvdisk control structure. * @param format The format string. See printf for details. * @param ... The arguments for the format text. * @return int The number of bytes written to the output. @@ -256,24 +256,6 @@ rtems_nvdisk_error (const char *format, ...) } /** - * Print an abort message, flush it then abort the program. - * - * @param format The format string. See printf for details. - * @param ... The arguments for the format text. - */ -static void -rtems_nvdisk_abort (const char *format, ...) -{ - va_list args; - va_start (args, format); - fprintf (stderr, "nvdisk:abort:"); - vfprintf (stderr, format, args); - fprintf (stderr, "\n"); - fflush (stderr); - exit (1); -} - -/** * Get the descriptor for a device. */ static const rtems_nvdisk_device_desc* @@ -324,6 +306,7 @@ rtems_nvdisk_device_write (const rtems_nvdisk* nvd, return ops->write (device, dd->flags, dd->base, offset, buffer, size); } +#if NOT_USED /** * Verify the data with the data in a segment. */ @@ -344,6 +327,7 @@ rtems_nvdisk_device_verify (const rtems_nvdisk* nvd, #endif return ops->verify (device, dd->flags, dd->base, offset, buffer, size); } +#endif /** * Read a page of data from the device. @@ -374,20 +358,6 @@ rtems_nvdisk_write_page (const rtems_nvdisk* nvd, } /** - * Verify a page of data with the data in the device. - */ -static int -rtems_nvdisk_verify_page (const rtems_nvdisk* nvd, - uint32_t device, - uint32_t page, - const void* buffer) -{ - return rtems_nvdisk_device_verify (nvd, device, - page * nvd->block_size, - buffer, nvd->block_size); -} - -/** * Read the checksum from the device. */ static int @@ -532,7 +502,9 @@ rtems_nvdisk_read_block (rtems_nvdisk* nvd, uint32_t block, uint8_t* buffer) if (crc == 0xffff) { +#if RTEMS_NVDISK_TRACE rtems_nvdisk_warning (nvd, "read-block: crc not set: %d", block); +#endif memset (buffer, 0, nvd->block_size); return 0; } @@ -605,13 +577,12 @@ rtems_nvdisk_write_block (rtems_nvdisk* nvd, * @retval int The ioctl return value. */ static int -rtems_nvdisk_read (rtems_nvdisk* nvd, blkdev_request* req) +rtems_nvdisk_read (rtems_nvdisk* nvd, rtems_blkdev_request* req) { - blkdev_sg_buffer* sg = req->bufs; - uint32_t block = req->start; - uint32_t b; - int32_t remains; - int ret = 0; + rtems_blkdev_sg_buffer* sg = req->bufs; + uint32_t b; + int32_t remains; + int ret = 0; #if RTEMS_NVDISK_TRACE rtems_nvdisk_info (nvd, "read: blocks=%d", req->bufnum); @@ -619,7 +590,7 @@ rtems_nvdisk_read (rtems_nvdisk* nvd, blkdev_request* req) remains = req->count * nvd->block_size; - for (b = 0; b < req->bufnum; b++, block++, sg++) + for (b = 0; b < req->bufnum; b++, sg++) { uint32_t length = sg->length; @@ -658,18 +629,17 @@ rtems_nvdisk_read (rtems_nvdisk* nvd, blkdev_request* req) * @retval int The ioctl return value. */ static int -rtems_nvdisk_write (rtems_nvdisk* nvd, blkdev_request* req) +rtems_nvdisk_write (rtems_nvdisk* nvd, rtems_blkdev_request* req) { - blkdev_sg_buffer* sg = req->bufs; - uint32_t block = req->start; - uint32_t b; - int ret = 0; + rtems_blkdev_sg_buffer* sg = req->bufs; + uint32_t b; + int ret = 0; #if RTEMS_NVDISK_TRACE rtems_nvdisk_info (nvd, "write: blocks=%d", req->bufnum); #endif - for (b = 0; b < req->bufnum; b++, block++, sg++) + for (b = 0; b < req->bufnum; b++, sg++) { if (sg->length != nvd->block_size) { @@ -720,7 +690,7 @@ rtems_nvdisk_erase_disk (rtems_nvdisk* nvd) } /** - * MV disk IOCTL handler. + * NV disk IOCTL handler. * * @param dev Device number (major, minor number). * @param req IOCTL request code. @@ -731,9 +701,21 @@ static int rtems_nvdisk_ioctl (dev_t dev, uint32_t req, void* argp) { rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev); - blkdev_request* r = argp; + rtems_blkdev_request* r = argp; rtems_status_code sc; + if (minor >= rtems_nvdisk_count) + { + errno = ENODEV; + return -1; + } + + if (rtems_nvdisks[minor].device_count == 0) + { + errno = ENODEV; + return -1; + } + errno = 0; sc = rtems_semaphore_obtain (rtems_nvdisks[minor].lock, RTEMS_WAIT, 0); @@ -743,39 +725,31 @@ rtems_nvdisk_ioctl (dev_t dev, uint32_t req, void* argp) { switch (req) { - case BLKIO_REQUEST: - if ((minor >= rtems_nvdisk_count) || - (rtems_nvdisks[minor].device_count == 0)) - { - errno = ENODEV; - } - else + case RTEMS_BLKIO_REQUEST: + switch (r->req) { - switch (r->req) - { - case BLKDEV_REQ_READ: - errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r); - break; - - case BLKDEV_REQ_WRITE: - errno = rtems_nvdisk_write (&rtems_nvdisks[minor], r); - break; - - default: - errno = EBADRQC; - break; - } + case RTEMS_BLKDEV_REQ_READ: + errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r); + break; + + case RTEMS_BLKDEV_REQ_WRITE: + errno = rtems_nvdisk_write (&rtems_nvdisks[minor], r); + break; + + default: + errno = EBADRQC; + break; } break; case RTEMS_NVDISK_IOCTL_ERASE_DISK: errno = rtems_nvdisk_erase_disk (&rtems_nvdisks[minor]); break; - + case RTEMS_NVDISK_IOCTL_INFO_LEVEL: rtems_nvdisks[minor].info_level = (uint32_t) argp; break; - + default: errno = EBADRQC; break; |