summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/src/bdbuf.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-05-30 13:40:34 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-05-31 11:05:48 +0200
commit73c09b3b8efc52831e80295e010fd7bfbd8c4b0c (patch)
treef4232b1f6ba94d5b0666177c8a00a2ff5c87a0f5 /cpukit/libblock/src/bdbuf.c
parentlibblock: Remove explicit bds_per_group parameter (diff)
downloadrtems-73c09b3b8efc52831e80295e010fd7bfbd8c4b0c.tar.bz2
libblock: Simplify disk management
Add block_count and media_blocks_per_block to rtems_disk_device. Add and use rtems_disk_init_phys() and rtems_disk_init_log().
Diffstat (limited to 'cpukit/libblock/src/bdbuf.c')
-rw-r--r--cpukit/libblock/src/bdbuf.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/cpukit/libblock/src/bdbuf.c b/cpukit/libblock/src/bdbuf.c
index 4985dc1e16..c0744c6db2 100644
--- a/cpukit/libblock/src/bdbuf.c
+++ b/cpukit/libblock/src/bdbuf.c
@@ -1754,20 +1754,23 @@ rtems_bdbuf_get_media_block (const rtems_disk_device *dd,
rtems_blkdev_bnum block,
rtems_blkdev_bnum *media_block_ptr)
{
- /*
- * Compute the media block number. Drivers work with media block number not
- * the block number a BD may have as this depends on the block size set by
- * the user.
- */
- rtems_blkdev_bnum mb = rtems_bdbuf_media_block (dd, block);
- if (mb >= dd->size)
+ rtems_status_code sc = RTEMS_SUCCESSFUL;
+
+ if (block < dd->block_count)
+ {
+ /*
+ * Compute the media block number. Drivers work with media block number not
+ * the block number a BD may have as this depends on the block size set by
+ * the user.
+ */
+ *media_block_ptr = rtems_bdbuf_media_block (dd, block) + dd->start;
+ }
+ else
{
- return RTEMS_INVALID_ID;
+ sc = RTEMS_INVALID_ID;
}
- *media_block_ptr = mb + dd->start;
-
- return RTEMS_SUCCESSFUL;
+ return sc;
}
rtems_status_code
@@ -2909,6 +2912,8 @@ rtems_bdbuf_set_block_size (rtems_disk_device *dd, uint32_t block_size)
block_to_media_block_shift = -1;
dd->block_size = block_size;
+ dd->block_count = dd->size / media_blocks_per_block;
+ dd->media_blocks_per_block = media_blocks_per_block;
dd->block_to_media_block_shift = block_to_media_block_shift;
dd->bds_per_group = bds_per_group;
}