@ -27,16 +27,28 @@
DECLARE_GLOBAL_DATA_PTR ;
# ifdef CONFIG_HAVE_BLOCK_DEVICE
static struct part_driver * part_driver_lookup_type ( int part_type )
static struct part_driver * part_driver_lookup_type ( struct blk_desc * dev_desc )
{
struct part_driver * drv =
ll_entry_start ( struct part_driver , part_driver ) ;
const int n_ents = ll_entry_count ( struct part_driver , part_driver ) ;
struct part_driver * entry ;
for ( entry = drv ; entry ! = drv + n_ents ; entry + + ) {
if ( part_type = = entry - > part_type )
return entry ;
if ( dev_desc - > part_type = = PART_TYPE_UNKNOWN ) {
for ( entry = drv ; entry ! = drv + n_ents ; entry + + ) {
int ret ;
ret = entry - > test ( dev_desc ) ;
if ( ! ret ) {
dev_desc - > part_type = entry - > part_type ;
return entry ;
}
}
} else {
for ( entry = drv ; entry ! = drv + n_ents ; entry + + ) {
if ( dev_desc - > part_type = = entry - > part_type )
return entry ;
}
}
/* Not found */
@ -285,7 +297,7 @@ void part_print(struct blk_desc *dev_desc)
{
struct part_driver * drv ;
drv = part_driver_lookup_type ( dev_desc - > part_type ) ;
drv = part_driver_lookup_type ( dev_desc ) ;
if ( ! drv ) {
printf ( " ## Unknown partition table type %x \n " ,
dev_desc - > part_type ) ;
@ -314,7 +326,7 @@ int part_get_info(struct blk_desc *dev_desc, int part,
info - > type_guid [ 0 ] = 0 ;
# endif
drv = part_driver_lookup_type ( dev_desc - > part_type ) ;
drv = part_driver_lookup_type ( dev_desc ) ;
if ( ! drv ) {
debug ( " ## Unknown partition table type %x \n " ,
dev_desc - > part_type ) ;