From: Steve Rae <srae@broadcom.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 3/3] arm: semihosting: get rid of forward declarations
Date: Fri, 12 Dec 2014 10:08:45 -0800 [thread overview]
Message-ID: <548B2F2D.5070903@broadcom.com> (raw)
In-Reply-To: <1416479131-27853-1-git-send-email-linus.walleij@linaro.org>
Acked-by: Steve Rae <srae@broadcom.com>
On 14-11-20 02:25 AM, Linus Walleij wrote:
> By rearranging the functions in the semihosting code we can
> avoid forward-declaration of the internal static functions.
> This puts the stuff in a logical order: read/open/close/len
> and then higher-order functions follow at the end.
>
> Cc: Darwin Rambo <drambo@broadcom.com>
> Cc: AKASHI Takahiro <takahiro.akashi@linaro.org>
> Cc: Mark Hambleton <mark.hambleton@arm.com>
> Cc: Tom Rini <trini@ti.com>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> ---
> arch/arm/lib/semihosting.c | 173 ++++++++++++++++++++++-----------------------
> 1 file changed, 84 insertions(+), 89 deletions(-)
>
> diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c
> index 6e1b2d182eca..2eacbacfde0f 100644
> --- a/arch/arm/lib/semihosting.c
> +++ b/arch/arm/lib/semihosting.c
> @@ -23,11 +23,6 @@
> #define MODE_READ 0x0
> #define MODE_READBIN 0x1
>
> -static long smh_read(long fd, void *memp, size_t len);
> -static long smh_open(const char *fname, char *modestr);
> -static long smh_close(long fd);
> -static long smh_len_fd(long fd);
> -
> /*
> * Call the handler
> */
> @@ -44,60 +39,43 @@ static long smh_trap(unsigned int sysnum, void *addr)
> }
>
> /*
> - * Open, load a file into memory, and close it. Check that the available space
> - * is sufficient to store the entire file. Return the bytes actually read from
> - * the file as seen by the read function. The verbose flag enables some extra
> - * printing of successful read status.
> + * Open a file on the host. Mode is "r" or "rb" currently. Returns a file
> + * descriptor or -1 on error.
> */
> -int smh_load(const char *fname, void *memp, int avail, int verbose)
> +static long smh_open(const char *fname, char *modestr)
> {
> - long ret;
> long fd;
> - size_t len;
> -
> - ret = -1;
> -
> - debug("%s: fname \'%s\', avail %u, memp %p\n", __func__, fname,
> - avail, memp);
> -
> - /* Open the file */
> - fd = smh_open(fname, "rb");
> - if (fd == -1)
> - return -1;
> + unsigned long mode;
> + struct smh_open_s {
> + const char *fname;
> + unsigned long mode;
> + size_t len;
> + } open;
>
> - /* Get the file length */
> - ret = smh_len_fd(fd);
> - if (ret == -1) {
> - smh_close(fd);
> - return -1;
> - }
> + debug("%s: file \'%s\', mode \'%s\'\n", __func__, fname, modestr);
>
> - /* Check that the file will fit in the supplied buffer */
> - if (ret > avail) {
> - printf("%s: ERROR ret %ld, avail %u\n", __func__, ret,
> - avail);
> - smh_close(fd);
> + /* Check the file mode */
> + if (!(strcmp(modestr, "r"))) {
> + mode = MODE_READ;
> + } else if (!(strcmp(modestr, "rb"))) {
> + mode = MODE_READBIN;
> + } else {
> + printf("%s: ERROR mode \'%s\' not supported\n", __func__,
> + modestr);
> return -1;
> }
>
> - len = ret;
> -
> - /* Read the file into the buffer */
> - ret = smh_read(fd, memp, len);
> - if (ret == 0) {
> - /* Print successful load information if requested */
> - if (verbose) {
> - printf("\n%s\n", fname);
> - printf(" 0x%8p dest\n", memp);
> - printf(" 0x%08lx size\n", len);
> - printf(" 0x%08x avail\n", avail);
> - }
> - }
> + open.fname = fname;
> + open.len = strlen(fname);
> + open.mode = mode;
>
> - /* Close the file */
> - smh_close(fd);
> + /* Open the file on the host */
> + fd = smh_trap(SYSOPEN, &open);
> + if (fd == -1)
> + printf("%s: ERROR fd %ld for file \'%s\'\n", __func__, fd,
> + fname);
>
> - return ret;
> + return fd;
> }
>
> /*
> @@ -135,46 +113,6 @@ static long smh_read(long fd, void *memp, size_t len)
> }
>
> /*
> - * Open a file on the host. Mode is "r" or "rb" currently. Returns a file
> - * descriptor or -1 on error.
> - */
> -static long smh_open(const char *fname, char *modestr)
> -{
> - long fd;
> - unsigned long mode;
> - struct smh_open_s {
> - const char *fname;
> - unsigned long mode;
> - size_t len;
> - } open;
> -
> - debug("%s: file \'%s\', mode \'%s\'\n", __func__, fname, modestr);
> -
> - /* Check the file mode */
> - if (!(strcmp(modestr, "r"))) {
> - mode = MODE_READ;
> - } else if (!(strcmp(modestr, "rb"))) {
> - mode = MODE_READBIN;
> - } else {
> - printf("%s: ERROR mode \'%s\' not supported\n", __func__,
> - modestr);
> - return -1;
> - }
> -
> - open.fname = fname;
> - open.len = strlen(fname);
> - open.mode = mode;
> -
> - /* Open the file on the host */
> - fd = smh_trap(SYSOPEN, &open);
> - if (fd == -1)
> - printf("%s: ERROR fd %ld for file \'%s\'\n", __func__, fd,
> - fname);
> -
> - return fd;
> -}
> -
> -/*
> * Close the file using the file descriptor
> */
> static long smh_close(long fd)
> @@ -207,6 +145,63 @@ static long smh_len_fd(long fd)
> }
>
> /*
> + * Open, load a file into memory, and close it. Check that the available space
> + * is sufficient to store the entire file. Return the bytes actually read from
> + * the file as seen by the read function. The verbose flag enables some extra
> + * printing of successful read status.
> + */
> +int smh_load(const char *fname, void *memp, int avail, int verbose)
> +{
> + long ret;
> + long fd;
> + size_t len;
> +
> + ret = -1;
> +
> + debug("%s: fname \'%s\', avail %u, memp %p\n", __func__, fname,
> + avail, memp);
> +
> + /* Open the file */
> + fd = smh_open(fname, "rb");
> + if (fd == -1)
> + return -1;
> +
> + /* Get the file length */
> + ret = smh_len_fd(fd);
> + if (ret == -1) {
> + smh_close(fd);
> + return -1;
> + }
> +
> + /* Check that the file will fit in the supplied buffer */
> + if (ret > avail) {
> + printf("%s: ERROR ret %ld, avail %u\n", __func__, ret,
> + avail);
> + smh_close(fd);
> + return -1;
> + }
> +
> + len = ret;
> +
> + /* Read the file into the buffer */
> + ret = smh_read(fd, memp, len);
> + if (ret == 0) {
> + /* Print successful load information if requested */
> + if (verbose) {
> + printf("\n%s\n", fname);
> + printf(" 0x%8p dest\n", memp);
> + printf(" 0x%08lx size\n", len);
> + printf(" 0x%08x avail\n", avail);
> + }
> + }
> +
> + /* Close the file */
> + smh_close(fd);
> +
> + return ret;
> +}
> +
> +/*
> * Get the file length from the filename
> */
> long smh_len(const char *fname)
>
prev parent reply other threads:[~2014-12-12 18:08 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-20 10:25 [U-Boot] [PATCH 3/3] arm: semihosting: get rid of forward declarations Linus Walleij
2014-12-12 18:08 ` Steve Rae [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=548B2F2D.5070903@broadcom.com \
--to=srae@broadcom.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.