summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/src/nvdisk.c
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/src/nvdisk.c
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 'cpukit/libblock/src/nvdisk.c')
-rw-r--r--cpukit/libblock/src/nvdisk.c122
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;