@ -11,7 +11,6 @@
# include <common.h>
# include <malloc.h>
# include <command.h>
# include <mmc.h>
# include <part_efi.h>
# include <exports.h>
# include <linux/ctype.h>
@ -122,7 +121,7 @@ static int set_gpt_info(block_dev_desc_t *dev_desc,
int errno = 0 ;
uint64_t size_ll , start_ll ;
debug ( " %s: MMC lba num: 0x%x %d \n " , __func__ ,
debug ( " %s: lba num: 0x%x %d \n " , __func__ ,
( unsigned int ) dev_desc - > lba , ( unsigned int ) dev_desc - > lba ) ;
if ( str_part = = NULL )
@ -235,25 +234,18 @@ err:
return errno ;
}
static int gpt_mmc_ default ( int dev , const char * str_part )
static int gpt_default ( block_dev_desc_t * blk_dev_desc , const char * str_part )
{
int ret ;
char * str_disk_guid ;
u8 part_count = 0 ;
disk_partition_t * partitions = NULL ;
struct mmc * mmc = find_mmc_device ( dev ) ;
if ( mmc = = NULL ) {
printf ( " %s: mmc dev %d NOT available \n " , __func__ , dev ) ;
return CMD_RET_FAILURE ;
}
if ( ! str_part )
return - 1 ;
/* fill partitions */
ret = set_gpt_info ( & mmc - > bloc k_dev , str_part ,
ret = set_gpt_info ( blk_dev_desc , str_part ,
& str_disk_guid , & partitions , & part_count ) ;
if ( ret ) {
if ( ret = = - 1 )
@ -266,7 +258,7 @@ static int gpt_mmc_default(int dev, const char *str_part)
}
/* save partitions layout to disk */
gpt_restore ( & mmc - > bloc k_dev , str_disk_guid , partitions , part_count ) ;
gpt_restore ( blk_dev_desc , str_disk_guid , partitions , part_count ) ;
free ( str_disk_guid ) ;
free ( partitions ) ;
@ -287,27 +279,28 @@ static int do_gpt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
int ret = CMD_RET_SUCCESS ;
int dev = 0 ;
char * pstr ;
char * ep ;
block_dev_desc_t * blk_dev_desc ;
if ( argc < 5 )
return CMD_RET_USAGE ;
/* command: 'write' */
if ( ( strcmp ( argv [ 1 ] , " write " ) = = 0 ) & & ( argc = = 5 ) ) {
/* device: 'mmc' */
if ( strcmp ( argv [ 2 ] , " mmc " ) = = 0 ) {
/* check if 'dev' is a number */
for ( pstr = argv [ 3 ] ; * pstr ! = ' \0 ' ; pstr + + )
if ( ! isdigit ( * pstr ) ) {
printf ( " '%s' is not a number \n " ,
argv [ 3 ] ) ;
return CMD_RET_USAGE ;
}
dev = ( int ) simple_strtoul ( argv [ 3 ] , NULL , 10 ) ;
/* write to mmc */
if ( gpt_mmc_default ( dev , argv [ 4 ] ) )
return CMD_RET_FAILURE ;
dev = ( int ) simple_strtoul ( argv [ 3 ] , & ep , 10 ) ;
if ( ! ep | | ep [ 0 ] ! = ' \0 ' ) {
printf ( " '%s' is not a number \n " , argv [ 3 ] ) ;
return CMD_RET_USAGE ;
}
blk_dev_desc = get_dev ( argv [ 2 ] , dev ) ;
if ( ! blk_dev_desc ) {
printf ( " %s: %s dev %d NOT available \n " ,
__func__ , argv [ 2 ] , dev ) ;
return CMD_RET_FAILURE ;
}
if ( gpt_default ( blk_dev_desc , argv [ 4 ] ) )
return CMD_RET_FAILURE ;
} else {
return CMD_RET_USAGE ;
}