public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
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)
>

      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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox