@ -21,6 +21,7 @@
# include <common.h>
# include <malloc.h>
# include <errno.h>
# include <dfu.h>
enum dfu_mmc_op {
@ -153,6 +154,10 @@ int dfu_read_medium_mmc(struct dfu_entity *dfu, void *buf, long *len)
int dfu_fill_entity_mmc ( struct dfu_entity * dfu , char * s )
{
int dev , part ;
struct mmc * mmc ;
block_dev_desc_t * blk_dev ;
disk_partition_t partinfo ;
char * st ;
dfu - > dev_type = DFU_DEV_MMC ;
@ -166,8 +171,34 @@ int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *s)
dfu - > layout = DFU_FS_FAT ;
} else if ( ! strcmp ( st , " ext4 " ) ) {
dfu - > layout = DFU_FS_EXT4 ;
} else if ( ! strcmp ( st , " part " ) ) {
dfu - > layout = DFU_RAW_ADDR ;
dev = simple_strtoul ( s , & s , 10 ) ;
s + + ;
part = simple_strtoul ( s , & s , 10 ) ;
mmc = find_mmc_device ( dev ) ;
if ( mmc = = NULL | | mmc_init ( mmc ) ) {
printf ( " %s: could not find mmc device #%d! \n " , __func__ , dev ) ;
return - ENODEV ;
}
blk_dev = & mmc - > block_dev ;
if ( get_partition_info ( blk_dev , part , & partinfo ) ! = 0 ) {
printf ( " %s: could not find partition #%d on mmc device #%d! \n " ,
__func__ , part , dev ) ;
return - ENODEV ;
}
dfu - > data . mmc . lba_start = partinfo . start ;
dfu - > data . mmc . lba_size = partinfo . size ;
dfu - > data . mmc . lba_blk_size = partinfo . blksz ;
} else {
printf ( " %s: Memory layout (%s) not supported! \n " , __func__ , st ) ;
return - ENODEV ;
}
if ( dfu - > layout = = DFU_FS_EXT4 | | dfu - > layout = = DFU_FS_FAT ) {