diff options
Diffstat (limited to 'drivers/io/io_semihosting.c')
-rw-r--r-- | drivers/io/io_semihosting.c | 79 |
1 files changed, 20 insertions, 59 deletions
diff --git a/drivers/io/io_semihosting.c b/drivers/io/io_semihosting.c index 3c92c6d7..f1dfa208 100644 --- a/drivers/io/io_semihosting.c +++ b/drivers/io/io_semihosting.c @@ -1,31 +1,7 @@ /* * Copyright (c) 2014, ARM Limited and Contributors. All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * Neither the name of ARM nor the names of its contributors may be used - * to endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier: BSD-3-Clause */ #include <assert.h> @@ -84,19 +60,18 @@ static const io_dev_info_t sh_dev_info = { static int sh_dev_open(const uintptr_t dev_spec __unused, io_dev_info_t **dev_info) { - int result = IO_SUCCESS; assert(dev_info != NULL); *dev_info = (io_dev_info_t *)&sh_dev_info; /* cast away const */ - return result; + return 0; } /* Open a file on the semi-hosting device */ -static int sh_file_open(io_dev_info_t *dev_info __attribute__((unused)), +static int sh_file_open(io_dev_info_t *dev_info __unused, const uintptr_t spec, io_entity_t *entity) { - int result = IO_FAIL; - long sh_result = -1; + int result = -ENOENT; + long sh_result; const io_file_spec_t *file_spec = (const io_file_spec_t *)spec; assert(file_spec != NULL); @@ -106,9 +81,7 @@ static int sh_file_open(io_dev_info_t *dev_info __attribute__((unused)), if (sh_result > 0) { entity->info = (uintptr_t)sh_result; - result = IO_SUCCESS; - } else { - result = IO_FAIL; + result = 0; } return result; } @@ -117,7 +90,6 @@ static int sh_file_open(io_dev_info_t *dev_info __attribute__((unused)), /* Seek to a particular file offset on the semi-hosting device */ static int sh_file_seek(io_entity_t *entity, int mode, ssize_t offset) { - int result = IO_FAIL; long file_handle, sh_result; assert(entity != NULL); @@ -126,16 +98,14 @@ static int sh_file_seek(io_entity_t *entity, int mode, ssize_t offset) sh_result = semihosting_file_seek(file_handle, offset); - result = (sh_result == 0) ? IO_SUCCESS : IO_FAIL; - - return result; + return (sh_result == 0) ? 0 : -ENOENT; } /* Return the size of a file on the semi-hosting device */ static int sh_file_len(io_entity_t *entity, size_t *length) { - int result = IO_FAIL; + int result = -ENOENT; assert(entity != NULL); assert(length != NULL); @@ -144,7 +114,7 @@ static int sh_file_len(io_entity_t *entity, size_t *length) long sh_result = semihosting_file_length(sh_handle); if (sh_result >= 0) { - result = IO_SUCCESS; + result = 0; *length = (size_t)sh_result; } @@ -156,8 +126,8 @@ static int sh_file_len(io_entity_t *entity, size_t *length) static int sh_file_read(io_entity_t *entity, uintptr_t buffer, size_t length, size_t *length_read) { - int result = IO_FAIL; - long sh_result = -1; + int result = -ENOENT; + long sh_result; size_t bytes = length; long file_handle; @@ -171,9 +141,8 @@ static int sh_file_read(io_entity_t *entity, uintptr_t buffer, size_t length, if (sh_result >= 0) { *length_read = (bytes != length) ? bytes : length; - result = IO_SUCCESS; - } else - result = IO_FAIL; + result = 0; + } return result; } @@ -183,8 +152,7 @@ static int sh_file_read(io_entity_t *entity, uintptr_t buffer, size_t length, static int sh_file_write(io_entity_t *entity, const uintptr_t buffer, size_t length, size_t *length_written) { - int result = IO_FAIL; - long sh_result = -1; + long sh_result; long file_handle; size_t bytes = length; @@ -196,21 +164,16 @@ static int sh_file_write(io_entity_t *entity, const uintptr_t buffer, sh_result = semihosting_file_write(file_handle, &bytes, buffer); - if (sh_result >= 0) { - *length_written = sh_result; - result = IO_SUCCESS; - } else - result = IO_FAIL; + *length_written = length - bytes; - return result; + return (sh_result == 0) ? 0 : -ENOENT; } /* Close a file on the semi-hosting device */ static int sh_file_close(io_entity_t *entity) { - int result = IO_FAIL; - long sh_result = -1; + long sh_result; long file_handle; assert(entity != NULL); @@ -219,9 +182,7 @@ static int sh_file_close(io_entity_t *entity) sh_result = semihosting_file_close(file_handle); - result = (sh_result >= 0) ? IO_SUCCESS : IO_FAIL; - - return result; + return (sh_result >= 0) ? 0 : -ENOENT; } @@ -230,11 +191,11 @@ static int sh_file_close(io_entity_t *entity) /* Register the semi-hosting driver with the IO abstraction */ int register_io_dev_sh(const io_dev_connector_t **dev_con) { - int result = IO_FAIL; + int result; assert(dev_con != NULL); result = io_register_device(&sh_dev_info); - if (result == IO_SUCCESS) + if (result == 0) *dev_con = &sh_dev_connector; return result; |