diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-05-30 13:40:34 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-05-31 11:05:48 +0200 |
commit | 73c09b3b8efc52831e80295e010fd7bfbd8c4b0c (patch) | |
tree | f4232b1f6ba94d5b0666177c8a00a2ff5c87a0f5 /cpukit/libblock/src/bdbuf.c | |
parent | libblock: Remove explicit bds_per_group parameter (diff) | |
download | rtems-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.c | 27 |
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; } |