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/diskdevs.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/diskdevs.c')
-rw-r--r-- | cpukit/libblock/src/diskdevs.c | 77 |
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); |