summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/src/diskdevs.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/diskdevs.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/diskdevs.c')
-rw-r--r--cpukit/libblock/src/diskdevs.c77
1 files changed, 41 insertions, 36 deletions
diff --git a/cpukit/libblock/src/diskdevs.c b/cpukit/libblock/src/diskdevs.c
index 545a4096e7..94a58daa6f 100644
--- a/cpukit/libblock/src/diskdevs.c
+++ b/cpukit/libblock/src/diskdevs.c
@@ -23,13 +23,13 @@
#define DISKTAB_INITIAL_SIZE 32
/* Table of disk devices having the same major number */
-struct disk_device_table {
- disk_device **minor; /* minor-indexed disk device table */
+typedef struct rtems_disk_device_table {
+ rtems_disk_device **minor; /* minor-indexed disk device table */
int size; /* Number of entries in the table */
-};
+} rtems_disk_device_table;
/* Pointer to [major].minor[minor] indexed array of disk devices */
-static struct disk_device_table *disktab;
+static rtems_disk_device_table *disktab;
/* Number of allocated entries in disktab table */
static int disktab_size;
@@ -64,24 +64,24 @@ static volatile rtems_boolean diskdevs_protected;
* pointer to the disk device descriptor entry, or NULL if no memory
* available for its creation.
*/
-static disk_device *
+static rtems_disk_device *
create_disk_entry(dev_t dev)
{
rtems_device_major_number major;
rtems_device_minor_number minor;
- struct disk_device **d;
+ rtems_disk_device **d;
rtems_filesystem_split_dev_t (dev, major, minor);
if (major >= disktab_size)
{
- struct disk_device_table *p;
+ rtems_disk_device_table *p;
int newsize;
int i;
newsize = disktab_size * 2;
if (major >= newsize)
newsize = major + 1;
- p = realloc(disktab, sizeof(struct disk_device_table) * newsize);
+ p = realloc(disktab, sizeof(rtems_disk_device_table) * newsize);
if (p == NULL)
return NULL;
p += disktab_size;
@@ -97,7 +97,7 @@ create_disk_entry(dev_t dev)
(minor >= disktab[major].size))
{
int newsize;
- disk_device **p;
+ rtems_disk_device **p;
int i;
int s = disktab[major].size;
@@ -108,7 +108,8 @@ create_disk_entry(dev_t dev)
if (minor >= newsize)
newsize = minor + 1;
- p = realloc(disktab[major].minor, sizeof(disk_device *) * newsize);
+ p = realloc(disktab[major].minor,
+ sizeof(rtems_disk_device *) * newsize);
if (p == NULL)
return NULL;
disktab[major].minor = p;
@@ -121,7 +122,7 @@ create_disk_entry(dev_t dev)
d = disktab[major].minor + minor;
if (*d == NULL)
{
- *d = calloc(1, sizeof(disk_device));
+ *d = calloc(1, sizeof(rtems_disk_device));
}
return *d;
}
@@ -136,12 +137,12 @@ create_disk_entry(dev_t dev)
* Pointer to the disk device descriptor corresponding to the specified
* device number, or NULL if disk device with such number not exists.
*/
-static inline disk_device *
+static rtems_disk_device *
get_disk_entry(dev_t dev)
{
rtems_device_major_number major;
rtems_device_minor_number minor;
- struct disk_device_table *dtab;
+ rtems_disk_device_table *dtab;
rtems_filesystem_split_dev_t (dev, major, minor);
@@ -171,9 +172,9 @@ get_disk_entry(dev_t dev)
* no memory available).
*/
static rtems_status_code
-create_disk(dev_t dev, const char *name, disk_device **diskdev)
+create_disk(dev_t dev, const char *name, rtems_disk_device **diskdev)
{
- disk_device *dd;
+ rtems_disk_device *dd;
char *n;
dd = get_disk_entry(dev);
@@ -234,12 +235,12 @@ create_disk(dev_t dev, const char *name, disk_device **diskdev)
*/
rtems_status_code
rtems_disk_create_phys(dev_t dev, int block_size, int disk_size,
- block_device_ioctl handler,
+ rtems_block_device_ioctl handler,
const char *name)
{
int bs_log2;
int i;
- disk_device *dd;
+ rtems_disk_device *dd;
rtems_status_code rc;
rtems_bdpool_id pool;
rtems_device_major_number major;
@@ -284,6 +285,11 @@ rtems_disk_create_phys(dev_t dev, int block_size, int disk_size,
rc = rtems_io_register_name(name, major, minor);
+ if (handler (dd->phys_dev->dev,
+ RTEMS_BLKDEV_CAPABILITIES,
+ &dd->capabilities) < 0)
+ dd->capabilities = 0;
+
diskdevs_protected = FALSE;
rtems_semaphore_release(diskdevs_mutex);
@@ -317,8 +323,8 @@ rtems_disk_create_phys(dev_t dev, int block_size, int disk_size,
rtems_status_code
rtems_disk_create_log(dev_t dev, dev_t phys, int start, int size, char *name)
{
- disk_device *dd;
- disk_device *pdd;
+ rtems_disk_device *dd;
+ rtems_disk_device *pdd;
rtems_status_code rc;
rtems_device_major_number major;
rtems_device_minor_number minor;
@@ -393,12 +399,12 @@ rtems_disk_delete(dev_t dev)
used = 0;
for (maj = 0; maj < disktab_size; maj++)
{
- struct disk_device_table *dtab = disktab + maj;
+ rtems_disk_device_table *dtab = disktab + maj;
if (dtab != NULL)
{
for (min = 0; min < dtab->size; min++)
{
- disk_device *dd = dtab->minor[min];
+ rtems_disk_device *dd = dtab->minor[min];
if ((dd != NULL) && (dd->phys_dev->dev == dev))
used += dd->uses;
}
@@ -415,12 +421,12 @@ rtems_disk_delete(dev_t dev)
/* Delete this device and all of its logical devices */
for (maj = 0; maj < disktab_size; maj++)
{
- struct disk_device_table *dtab = disktab +maj;
+ rtems_disk_device_table *dtab = disktab +maj;
if (dtab != NULL)
{
for (min = 0; min < dtab->size; min++)
{
- disk_device *dd = dtab->minor[min];
+ rtems_disk_device *dd = dtab->minor[min];
if ((dd != NULL) && (dd->phys_dev->dev == dev))
{
unlink(dd->name);
@@ -437,7 +443,7 @@ rtems_disk_delete(dev_t dev)
return rc;
}
-/* rtems_disk_lookup --
+/* rtems_disk_obtain --
* Find block device descriptor by its device identifier.
*
* PARAMETERS:
@@ -447,11 +453,11 @@ rtems_disk_delete(dev_t dev)
* pointer to the block device descriptor, or NULL if no such device
* exists.
*/
-disk_device *
-rtems_disk_lookup(dev_t dev)
+rtems_disk_device *
+rtems_disk_obtain(dev_t dev)
{
rtems_interrupt_level level;
- disk_device *dd;
+ rtems_disk_device *dd;
rtems_status_code rc;
rtems_interrupt_disable(level);
@@ -480,7 +486,7 @@ rtems_disk_lookup(dev_t dev)
}
/* rtems_disk_release --
- * Release disk_device structure (decrement usage counter to 1).
+ * Release rtems_disk_device structure (decrement usage counter to 1).
*
* PARAMETERS:
* dd - pointer to disk device structure
@@ -489,7 +495,7 @@ rtems_disk_lookup(dev_t dev)
* RTEMS_SUCCESSFUL
*/
rtems_status_code
-rtems_disk_release(disk_device *dd)
+rtems_disk_release(rtems_disk_device *dd)
{
rtems_interrupt_level level;
rtems_interrupt_disable(level);
@@ -510,12 +516,12 @@ rtems_disk_release(disk_device *dd)
* Pointer to the disk descriptor for next disk device, or NULL if all
* devices enumerated.
*/
-disk_device *
+rtems_disk_device *
rtems_disk_next(dev_t dev)
{
rtems_device_major_number major;
rtems_device_minor_number minor;
- struct disk_device_table *dtab;
+ rtems_disk_device_table *dtab;
dev++;
rtems_filesystem_split_dev_t (dev, major, minor);
@@ -562,7 +568,7 @@ rtems_disk_io_initialize(void)
return RTEMS_SUCCESSFUL;
disktab_size = DISKTAB_INITIAL_SIZE;
- disktab = calloc(disktab_size, sizeof(struct disk_device_table));
+ disktab = calloc(disktab_size, sizeof(rtems_disk_device_table));
if (disktab == NULL)
return RTEMS_NO_MEMORY;
@@ -578,8 +584,7 @@ rtems_disk_io_initialize(void)
return rc;
}
- rc = rtems_bdbuf_init(rtems_bdbuf_configuration,
- rtems_bdbuf_configuration_size);
+ rc = rtems_bdbuf_init();
if (rc != RTEMS_SUCCESSFUL)
{
@@ -612,12 +617,12 @@ rtems_disk_io_done(void)
/* Free data structures */
for (maj = 0; maj < disktab_size; maj++)
{
- struct disk_device_table *dtab = disktab + maj;
+ rtems_disk_device_table *dtab = disktab + maj;
if (dtab != NULL)
{
for (min = 0; min < dtab->size; min++)
{
- disk_device *dd = dtab->minor[min];
+ rtems_disk_device *dd = dtab->minor[min];
unlink(dd->name);
free(dd->name);
free(dd);