From dd976cb50d842b9ba30a5b6413134fdefa9e864d Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 26 Apr 2017 20:00:10 +0100 Subject: [block] Provide sandev_read() and sandev_write() as global symbols Signed-off-by: Michael Brown --- src/core/sanboot.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 8 deletions(-) (limited to 'src/core') diff --git a/src/core/sanboot.c b/src/core/sanboot.c index f134f76a..1fd63490 100644 --- a/src/core/sanboot.c +++ b/src/core/sanboot.c @@ -577,12 +577,12 @@ int sandev_reset ( struct san_device *sandev ) { * @v block_rw Block read/write method * @ret rc Return status code */ -int sandev_rw ( struct san_device *sandev, uint64_t lba, - unsigned int count, userptr_t buffer, - int ( * block_rw ) ( struct interface *control, - struct interface *data, - uint64_t lba, unsigned int count, - userptr_t buffer, size_t len ) ) { +static int sandev_rw ( struct san_device *sandev, uint64_t lba, + unsigned int count, userptr_t buffer, + int ( * block_rw ) ( struct interface *control, + struct interface *data, + uint64_t lba, unsigned int count, + userptr_t buffer, size_t len ) ) { union san_command_params params; unsigned int remaining; size_t frag_len; @@ -617,6 +617,46 @@ int sandev_rw ( struct san_device *sandev, uint64_t lba, return 0; } +/** + * Read from SAN device + * + * @v sandev SAN device + * @v lba Starting logical block address + * @v count Number of logical blocks + * @v buffer Data buffer + * @ret rc Return status code + */ +int sandev_read ( struct san_device *sandev, uint64_t lba, + unsigned int count, userptr_t buffer ) { + int rc; + + /* Read from device */ + if ( ( rc = sandev_rw ( sandev, lba, count, buffer, block_read ) ) != 0 ) + return rc; + + return 0; +} + +/** + * Write to SAN device + * + * @v sandev SAN device + * @v lba Starting logical block address + * @v count Number of logical blocks + * @v buffer Data buffer + * @ret rc Return status code + */ +int sandev_write ( struct san_device *sandev, uint64_t lba, + unsigned int count, userptr_t buffer ) { + int rc; + + /* Write to device */ + if ( ( rc = sandev_rw ( sandev, lba, count, buffer, block_write ) ) != 0 ) + return rc; + + return 0; +} + /** * Describe SAN device * @@ -735,8 +775,8 @@ static int sandev_parse_iso9660 ( struct san_device *sandev ) { } /* Read primary volume descriptor */ - if ( ( rc = sandev_rw ( sandev, lba, count, virt_to_user ( scratch ), - block_read ) ) != 0 ) { + if ( ( rc = sandev_read ( sandev, lba, count, + virt_to_user ( scratch ) ) ) != 0 ) { DBGC ( sandev, "SAN %#02x could not read ISO9660 primary" "volume descriptor: %s\n", sandev->drive, strerror ( rc ) ); -- cgit v1.2.3-55-g7522