@ -14,15 +14,20 @@
# include <mmc.h>
# include <div64.h>
# ifndef CONFIG_FASTBOOT_GPT_NAME
# if defined(CONFIG_EFI_PARTITION) && !defined(CONFIG_FASTBOOT_GPT_NAME)
# define CONFIG_FASTBOOT_GPT_NAME GPT_ENTRY_NAME
# endif
# if defined(CONFIG_DOS_PARTITION) && !defined(CONFIG_FASTBOOT_MBR_NAME)
# define CONFIG_FASTBOOT_MBR_NAME "mbr"
# endif
struct fb_mmc_sparse {
struct blk_desc * dev_desc ;
} ;
static int part_get_info_efi_by_name_or_alias ( struct blk_desc * dev_desc ,
static int part_get_info_by_name_or_alias ( struct blk_desc * dev_desc ,
const char * name , disk_partition_t * info )
{
int ret ;
@ -103,6 +108,7 @@ void fb_mmc_flash_write(const char *cmd, void *download_buffer,
return ;
}
# ifdef CONFIG_EFI_PARTITION
if ( strcmp ( cmd , CONFIG_FASTBOOT_GPT_NAME ) = = 0 ) {
printf ( " %s: updating MBR, Primary and Backup GPT(s) \n " ,
__func__ ) ;
@ -114,14 +120,36 @@ void fb_mmc_flash_write(const char *cmd, void *download_buffer,
}
if ( write_mbr_and_gpt_partitions ( dev_desc , download_buffer ) ) {
printf ( " %s: writing GPT partitions failed \n " , __func__ ) ;
fastboot_fail (
" writing GPT partitions failed " ) ;
fastboot_fail ( " writing GPT partitions failed " ) ;
return ;
}
printf ( " ........ success \n " ) ;
fastboot_okay ( " " ) ;
return ;
} else if ( part_get_info_efi_by_name_or_alias ( dev_desc , cmd , & info ) ) {
}
# endif
# ifdef CONFIG_DOS_PARTITION
if ( strcmp ( cmd , CONFIG_FASTBOOT_MBR_NAME ) = = 0 ) {
printf ( " %s: updating MBR \n " , __func__ ) ;
if ( is_valid_dos_buf ( download_buffer ) ) {
printf ( " %s: invalid MBR - refusing to write to flash \n " ,
__func__ ) ;
fastboot_fail ( " invalid MBR partition " ) ;
return ;
}
if ( write_mbr_partition ( dev_desc , download_buffer ) ) {
printf ( " %s: writing MBR partition failed \n " , __func__ ) ;
fastboot_fail ( " writing MBR partition failed " ) ;
return ;
}
printf ( " ........ success \n " ) ;
fastboot_okay ( " " ) ;
return ;
}
# endif
if ( part_get_info_by_name_or_alias ( dev_desc , cmd , & info ) ) {
error ( " cannot find partition: '%s' \n " , cmd ) ;
fastboot_fail ( " cannot find partition " ) ;
return ;
@ -172,7 +200,7 @@ void fb_mmc_erase(const char *cmd)
return ;
}
ret = part_get_info_efi_ by_name_or_alias ( dev_desc , cmd , & info ) ;
ret = part_get_info_by_name_or_alias ( dev_desc , cmd , & info ) ;
if ( ret ) {
error ( " cannot find partition: '%s' " , cmd ) ;
fastboot_fail ( " cannot find partition " ) ;