diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-04-04 13:59:21 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-05-31 09:34:48 +0200 |
commit | e82e40523f8df1c10b6646798065115119aea9a8 (patch) | |
tree | 2fa821d7e68a6ff78233277ae5980ab7c7ce7381 /common/block.c | |
parent | b5c4e238d38adf76c4648494ae6eeb62345bd086 (diff) | |
download | barebox-e82e40523f8df1c10b6646798065115119aea9a8.tar.gz barebox-e82e40523f8df1c10b6646798065115119aea9a8.tar.xz |
block: implement block_read/block_write functions
Some drivers use blk->ops->read/write. This bypasses the caching block
layer and was never intended like this. The upper API to the block layer
is the cdev layer. This patch adds block_read and block_write functions
and uses them where appropriate.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/block.c')
-rw-r--r-- | common/block.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/common/block.c b/common/block.c index 2cf85ae987..ad07f8b2e2 100644 --- a/common/block.c +++ b/common/block.c @@ -387,3 +387,25 @@ int blockdevice_unregister(struct block_device *blk) return 0; } + +int block_read(struct block_device *blk, void *buf, int block, int num_blocks) +{ + int ret; + + ret = cdev_read(&blk->cdev, buf, + num_blocks << blk->blockbits, + (loff_t)block << blk->blockbits, 0); + + return ret < 0 ? ret : 0; +} + +int block_write(struct block_device *blk, void *buf, int block, int num_blocks) +{ + int ret; + + ret = cdev_write(&blk->cdev, buf, + num_blocks << blk->blockbits, + (loff_t)block << blk->blockbits, 0); + + return ret < 0 ? ret : 0; +} |