@ -549,6 +549,52 @@ removable:
* to the user if mode = 1
*/
# if defined(CONFIG_DM_SCSI)
static int do_scsi_scan_one ( struct udevice * dev , int id , int lun , int mode )
{
int ret ;
struct udevice * bdev ;
struct blk_desc bd ;
struct blk_desc * bdesc ;
char str [ 10 ] ;
/*
* detect the scsi driver to get information about its geometry ( block
* size , number of blocks ) and other parameters ( ids , type , . . . )
*/
scsi_init_dev_desc_priv ( & bd ) ;
if ( scsi_detect_dev ( id , lun , & bd ) )
return - ENODEV ;
/*
* Create only one block device and do detection
* to make sure that there won ' t be a lot of
* block devices created
*/
snprintf ( str , sizeof ( str ) , " id%dlun%d " , id , lun ) ;
ret = blk_create_devicef ( dev , " scsi_blk " , str , IF_TYPE_SCSI , - 1 ,
bd . blksz , bd . blksz * bd . lba , & bdev ) ;
if ( ret ) {
debug ( " Can't create device \n " ) ;
return ret ;
}
bdesc = dev_get_uclass_platdata ( bdev ) ;
bdesc - > target = id ;
bdesc - > lun = lun ;
bdesc - > removable = bd . removable ;
bdesc - > type = bd . type ;
memcpy ( & bdesc - > vendor , & bd . vendor , sizeof ( bd . vendor ) ) ;
memcpy ( & bdesc - > product , & bd . product , sizeof ( bd . product ) ) ;
memcpy ( & bdesc - > revision , & bd . revision , sizeof ( bd . revision ) ) ;
part_init ( bdesc ) ;
if ( mode = = 1 ) {
printf ( " Device %d: " , 0 ) ;
dev_print ( bdesc ) ;
}
return 0 ;
}
int scsi_scan ( int mode )
{
unsigned char i , lun ;
@ -576,59 +622,9 @@ int scsi_scan(int mode)
/* Get controller platdata */
plat = dev_get_platdata ( dev ) ;
for ( i = 0 ; i < plat - > max_id ; i + + ) {
for ( lun = 0 ; lun < plat - > max_lun ; lun + + ) {
struct udevice * bdev ; /* block device */
/* block device description */
struct blk_desc _bd ;
struct blk_desc * bdesc ;
char str [ 10 ] ;
scsi_init_dev_desc_priv ( & _bd ) ;
ret = scsi_detect_dev ( i , lun , & _bd ) ;
if ( ret )
/*
* no device detected ?
* check the next lun .
*/
continue ;
/*
* Create only one block device and do detection
* to make sure that there won ' t be a lot of
* block devices created
*/
snprintf ( str , sizeof ( str ) , " id%dlun%d " , i , lun ) ;
ret = blk_create_devicef ( dev , " scsi_blk " ,
str , IF_TYPE_SCSI ,
- 1 ,
_bd . blksz ,
_bd . blksz * _bd . lba ,
& bdev ) ;
if ( ret ) {
debug ( " Can't create device \n " ) ;
return ret ;
}
bdesc = dev_get_uclass_platdata ( bdev ) ;
bdesc - > target = i ;
bdesc - > lun = lun ;
bdesc - > removable = _bd . removable ;
bdesc - > type = _bd . type ;
memcpy ( & bdesc - > vendor , & _bd . vendor ,
sizeof ( _bd . vendor ) ) ;
memcpy ( & bdesc - > product , & _bd . product ,
sizeof ( _bd . product ) ) ;
memcpy ( & bdesc - > revision , & _bd . revision ,
sizeof ( _bd . revision ) ) ;
part_init ( bdesc ) ;
if ( mode = = 1 ) {
printf ( " Device %d: " , 0 ) ;
dev_print ( bdesc ) ;
} /* if mode */
} /* next LUN */
}
for ( i = 0 ; i < plat - > max_id ; i + + )
for ( lun = 0 ; lun < plat - > max_lun ; lun + + )
do_scsi_scan_one ( dev , i , lun , mode ) ;
}
return 0 ;