@ -31,6 +31,8 @@ struct efi_disk_obj {
struct efi_device_path_file_path * dp ;
/* Offset into disk for simple partitions */
lbaint_t offset ;
/* Internal block device */
const struct blk_desc * desc ;
} ;
static efi_status_t efi_disk_open_block ( void * handle , efi_guid_t * protocol ,
@ -78,8 +80,7 @@ static efi_status_t EFIAPI efi_disk_rw_blocks(struct efi_block_io *this,
unsigned long n ;
diskobj = container_of ( this , struct efi_disk_obj , ops ) ;
if ( ! ( desc = blk_get_dev ( diskobj - > ifname , diskobj - > dev_index ) ) )
return EFI_EXIT ( EFI_DEVICE_ERROR ) ;
desc = ( struct blk_desc * ) diskobj - > desc ;
blksz = desc - > blksz ;
blocks = buffer_size / blksz ;
lba + = diskobj - > offset ;
@ -213,6 +214,7 @@ static void efi_disk_add_dev(const char *name,
diskobj - > ifname = if_typename ;
diskobj - > dev_index = dev_index ;
diskobj - > offset = offset ;
diskobj - > desc = desc ;
/* Fill in EFI IO Media info (for read/write callbacks) */
diskobj - > media . removable_media = desc - > removable ;
@ -240,7 +242,8 @@ static void efi_disk_add_dev(const char *name,
static int efi_disk_create_eltorito ( struct blk_desc * desc ,
const char * if_typename ,
int diskid )
int diskid ,
const char * pdevname )
{
int disks = 0 ;
# ifdef CONFIG_ISO_PARTITION
@ -252,8 +255,8 @@ static int efi_disk_create_eltorito(struct blk_desc *desc,
return 0 ;
while ( ! part_get_info ( desc , part , & info ) ) {
snprintf ( devname , sizeof ( devname ) , " %s%d :%d " , if_ty pename,
diskid , part ) ;
snprintf ( devname , sizeof ( devname ) , " %s:%d " , pd ev name ,
part ) ;
efi_disk_add_dev ( devname , if_typename , desc , diskid ,
info . start ) ;
part + + ;
@ -296,7 +299,7 @@ int efi_disk_register(void)
* so let ' s create them here
*/
disks + = efi_disk_create_eltorito ( desc , if_typename ,
desc - > devnum ) ;
desc - > devnum , dev - > name ) ;
}
# else
int i , if_type ;
@ -331,7 +334,8 @@ int efi_disk_register(void)
* El Torito images show up as block devices
* in an EFI world , so let ' s create them here
*/
disks + = efi_disk_create_eltorito ( desc , if_typename , i ) ;
disks + = efi_disk_create_eltorito ( desc , if_typename ,
i , devname ) ;
}
}
# endif