All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukasz Majewski <lukma@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 3/6] dfu: mmc: rearrange the code
Date: Tue, 24 Sep 2019 21:48:14 +0200	[thread overview]
Message-ID: <20190924214814.19913c80@jawa> (raw)
In-Reply-To: <20190924131111.1691-4-m.szyprowski@samsung.com>

Hi Marek,

> Rename functions for bufferred file io operations to make them easier
> to understand. Also add missing file offset argument to them
> (currently unused). All this is a preparation to remove predefined
> file size limit (CONFIG_SYS_DFU_MAX_FILE_SIZE) for DFU read/write
> operations.

Acked-by: Lukasz Majewski <lukma@denx.de>

> 
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>  drivers/dfu/dfu_mmc.c | 61
> ++++++++++++++++++++++++------------------- 1 file changed, 34
> insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c
> index 403fd5351d..2d97f4528c 100644
> --- a/drivers/dfu/dfu_mmc.c
> +++ b/drivers/dfu/dfu_mmc.c
> @@ -91,22 +91,8 @@ static int mmc_block_op(enum dfu_op op, struct
> dfu_entity *dfu, return 0;
>  }
>  
> -static int mmc_file_buffer(struct dfu_entity *dfu, void *buf, long
> *len) -{
> -	if (dfu_file_buf_len + *len > CONFIG_SYS_DFU_MAX_FILE_SIZE) {
> -		dfu_file_buf_len = 0;
> -		return -EINVAL;
> -	}
> -
> -	/* Add to the current buffer. */
> -	memcpy(dfu_file_buf + dfu_file_buf_len, buf, *len);
> -	dfu_file_buf_len += *len;
> -
> -	return 0;
> -}
> -
>  static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu,
> -			void *buf, u64 *len)
> +			u64 offset, void *buf, u64 *len)
>  {
>  	char dev_part_str[8];
>  	int ret;
> @@ -137,7 +123,7 @@ static int mmc_file_op(enum dfu_op op, struct
> dfu_entity *dfu, 
>  	switch (op) {
>  	case DFU_OP_READ:
> -		ret = fs_read(dfu->name, (size_t)buf, 0, 0, &size);
> +		ret = fs_read(dfu->name, (size_t)buf, offset, 0,
> &size); if (ret) {
>  			puts("dfu: fs_read error!\n");
>  			return ret;
> @@ -145,7 +131,7 @@ static int mmc_file_op(enum dfu_op op, struct
> dfu_entity *dfu, *len = size;
>  		break;
>  	case DFU_OP_WRITE:
> -		ret = fs_write(dfu->name, (size_t)buf, 0, *len,
> &size);
> +		ret = fs_write(dfu->name, (size_t)buf, offset, *len,
> &size); if (ret) {
>  			puts("dfu: fs_write error!\n");
>  			return ret;
> @@ -166,6 +152,30 @@ static int mmc_file_op(enum dfu_op op, struct
> dfu_entity *dfu, return ret;
>  }
>  
> +static int mmc_file_buf_write(struct dfu_entity *dfu, u64 offset,
> void *buf, long *len) +{
> +	if (dfu_file_buf_len + *len > CONFIG_SYS_DFU_MAX_FILE_SIZE) {
> +		dfu_file_buf_len = 0;
> +		return -EINVAL;
> +	}
> +
> +	/* Add to the current buffer. */
> +	memcpy(dfu_file_buf + dfu_file_buf_len, buf, *len);
> +	dfu_file_buf_len += *len;
> +
> +	return 0;
> +}
> +
> +static int mmc_file_buf_write_finish(struct dfu_entity *dfu)
> +{
> +	int ret = mmc_file_op(DFU_OP_WRITE, dfu, 0, dfu_file_buf,
> +			&dfu_file_buf_len);
> +
> +	/* Now that we're done */
> +	dfu_file_buf_len = 0;
> +	return ret;
> +}
> +
>  int dfu_write_medium_mmc(struct dfu_entity *dfu,
>  		u64 offset, void *buf, long *len)
>  {
> @@ -177,7 +187,7 @@ int dfu_write_medium_mmc(struct dfu_entity *dfu,
>  		break;
>  	case DFU_FS_FAT:
>  	case DFU_FS_EXT4:
> -		ret = mmc_file_buffer(dfu, buf, len);
> +		ret = mmc_file_buf_write(dfu, offset, buf, len);
>  		break;
>  	default:
>  		printf("%s: Layout (%s) not (yet) supported!\n",
> __func__, @@ -193,11 +203,7 @@ int dfu_flush_medium_mmc(struct
> dfu_entity *dfu) 
>  	if (dfu->layout != DFU_RAW_ADDR) {
>  		/* Do stuff here. */
> -		ret = mmc_file_op(DFU_OP_WRITE, dfu, dfu_file_buf,
> -				&dfu_file_buf_len);
> -
> -		/* Now that we're done */
> -		dfu_file_buf_len = 0;
> +		ret = mmc_file_buf_write_finish(dfu);
>  	}
>  
>  	return ret;
> @@ -214,7 +220,7 @@ int dfu_get_medium_size_mmc(struct dfu_entity
> *dfu, u64 *size) case DFU_FS_FAT:
>  	case DFU_FS_EXT4:
>  		dfu_file_buf_filled = -1;
> -		ret = mmc_file_op(DFU_OP_SIZE, dfu, NULL, size);
> +		ret = mmc_file_op(DFU_OP_SIZE, dfu, 0, NULL, size);
>  		if (ret < 0)
>  			return ret;
>  		if (*size > CONFIG_SYS_DFU_MAX_FILE_SIZE)
> @@ -227,14 +233,15 @@ int dfu_get_medium_size_mmc(struct dfu_entity
> *dfu, u64 *size) }
>  }
>  
> -static int mmc_file_unbuffer(struct dfu_entity *dfu, u64 offset,
> void *buf, +
> +static int mmc_file_buf_read(struct dfu_entity *dfu, u64 offset,
> void *buf, long *len)
>  {
>  	int ret;
>  	u64 file_len;
>  
>  	if (dfu_file_buf_filled == -1) {
> -		ret = mmc_file_op(DFU_OP_READ, dfu, dfu_file_buf,
> &file_len);
> +		ret = mmc_file_op(DFU_OP_READ, dfu, 0, dfu_file_buf,
> &file_len); if (ret < 0)
>  			return ret;
>  		dfu_file_buf_filled = file_len;
> @@ -259,7 +266,7 @@ int dfu_read_medium_mmc(struct dfu_entity *dfu,
> u64 offset, void *buf, break;
>  	case DFU_FS_FAT:
>  	case DFU_FS_EXT4:
> -		ret = mmc_file_unbuffer(dfu, offset, buf, len);
> +		ret = mmc_file_buf_read(dfu, offset, buf, len);
>  		break;
>  	default:
>  		printf("%s: Layout (%s) not (yet) supported!\n",
> __func__,




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190924/cfaff96f/attachment.sig>

  reply	other threads:[~2019-09-24 19:48 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20190924131119eucas1p2e457a2eaa370e6930d90b93d3ace9ce2@eucas1p2.samsung.com>
2019-09-24 13:11 ` [U-Boot] [PATCH v2 0/6] Raspberry Pi4: add support for DFU over USB Marek Szyprowski
2019-09-24 13:11   ` [U-Boot] [PATCH v2 1/6] fat: write: fix broken write to fragmented files Marek Szyprowski
2019-09-24 13:11   ` [U-Boot] [PATCH v2 2/6] fat: write: fix broken write at non-zero file offset Marek Szyprowski
2019-09-24 19:47     ` Lukasz Majewski
2019-09-24 13:11   ` [U-Boot] [PATCH v2 3/6] dfu: mmc: rearrange the code Marek Szyprowski
2019-09-24 19:48     ` Lukasz Majewski [this message]
2019-09-24 13:11   ` [U-Boot] [PATCH v2 4/6] dfu: mmc: remove file size limit for io operations Marek Szyprowski
2019-09-24 19:49     ` Lukasz Majewski
2019-09-24 13:11   ` [U-Boot] [PATCH v2 5/6] usb: dwc2_udc_otg: add bcm2835 SoC (Raspberry Pi4) support Marek Szyprowski
2019-09-24 13:11   ` [U-Boot] [PATCH v2 6/6] config: enable DFU over USB on Raspberry Pi4 boards Marek Szyprowski
2019-11-08 16:57     ` Matthias Brugger
2019-11-11 18:01       ` Matthias Brugger
2019-11-12  9:52       ` Marek Szyprowski
2019-11-12 10:30         ` Matthias Brugger
2019-11-15 13:47           ` [U-Boot] [PATCH v3 " Marek Szyprowski
2019-11-19 16:05             ` Matthias Brugger

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=20190924214814.19913c80@jawa \
    --to=lukma@denx.de \
    --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.