diff options
| author | Ćukasz Majewski <l.majewski@samsung.com> | 2012-08-23 23:33:55 +0000 | 
|---|---|---|
| committer | Marek Vasut <marex@denx.de> | 2012-09-21 00:04:59 +0200 | 
| commit | 43e6627259da3900a73f40fb2fe3a6f106c0e2d7 (patch) | |
| tree | 3dfba2ef464912094242372483f8a91376a45f9e /drivers/dfu/dfu_mmc.c | |
| parent | 5fb29f3c48d26981b117b08286bc16ec99d4ca0b (diff) | |
| download | olio-uboot-2014.01-43e6627259da3900a73f40fb2fe3a6f106c0e2d7.tar.xz olio-uboot-2014.01-43e6627259da3900a73f40fb2fe3a6f106c0e2d7.zip | |
dfu:usb: Support for ext4
Support for ext4 file system handling at DFU.
Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Reviewed-by: Marek Vasut <marex@denx.de>
Diffstat (limited to 'drivers/dfu/dfu_mmc.c')
| -rw-r--r-- | drivers/dfu/dfu_mmc.c | 32 | 
1 files changed, 26 insertions, 6 deletions
| diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c index 060145bbe..2270a61ea 100644 --- a/drivers/dfu/dfu_mmc.c +++ b/drivers/dfu/dfu_mmc.c @@ -63,10 +63,23 @@ static int mmc_file_op(enum dfu_mmc_op op, struct dfu_entity *dfu,  	char *str_env;  	int ret; -	sprintf(cmd_buf, "fat%s mmc %d:%d 0x%x %s %lx", -		op == DFU_OP_READ ? "load" : "write", -		dfu->data.mmc.dev, dfu->data.mmc.part, -		(unsigned int) buf, dfu->name, *len); +	switch (dfu->layout) { +	case DFU_FS_FAT: +		sprintf(cmd_buf, "fat%s mmc %d:%d 0x%x %s %lx", +			op == DFU_OP_READ ? "load" : "write", +			dfu->data.mmc.dev, dfu->data.mmc.part, +			(unsigned int) buf, dfu->name, *len); +		break; +	case DFU_FS_EXT4: +		sprintf(cmd_buf, "ext4%s mmc %d:%d /%s 0x%x %ld", +			op == DFU_OP_READ ? "load" : "write", +			dfu->data.mmc.dev, dfu->data.mmc.part, +			dfu->name, (unsigned int) buf, *len); +		break; +	default: +		printf("%s: Layout (%s) not (yet) supported!\n", __func__, +		       dfu_get_layout(dfu->layout)); +	}  	debug("%s: %s 0x%p\n", __func__, cmd_buf, cmd_buf); @@ -107,6 +120,7 @@ int dfu_write_medium_mmc(struct dfu_entity *dfu, void *buf, long *len)  		ret = mmc_block_write(dfu, buf, len);  		break;  	case DFU_FS_FAT: +	case DFU_FS_EXT4:  		ret = mmc_file_write(dfu, buf, len);  		break;  	default: @@ -126,6 +140,7 @@ int dfu_read_medium_mmc(struct dfu_entity *dfu, void *buf, long *len)  		ret = mmc_block_read(dfu, buf, len);  		break;  	case DFU_FS_FAT: +	case DFU_FS_EXT4:  		ret = mmc_file_read(dfu, buf, len);  		break;  	default: @@ -149,12 +164,17 @@ int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *s)  		dfu->data.mmc.lba_blk_size = get_mmc_blk_size(dfu->dev_num);  	} else if (!strcmp(st, "fat")) {  		dfu->layout = DFU_FS_FAT; -		dfu->data.mmc.dev = simple_strtoul(s, &s, 10); -		dfu->data.mmc.part = simple_strtoul(++s, &s, 10); +	} else if (!strcmp(st, "ext4")) { +		dfu->layout = DFU_FS_EXT4;  	} else {  		printf("%s: Memory layout (%s) not supported!\n", __func__, st);  	} +	if (dfu->layout == DFU_FS_EXT4 || dfu->layout == DFU_FS_FAT) { +		dfu->data.mmc.dev = simple_strtoul(s, &s, 10); +		dfu->data.mmc.part = simple_strtoul(++s, &s, 10); +	} +  	dfu->read_medium = dfu_read_medium_mmc;  	dfu->write_medium = dfu_write_medium_mmc; |