@ -9,33 +9,16 @@ static int uas_is_interface(struct usb_host_interface *intf)
intf - > desc . bInterfaceProtocol = = USB_PR_UAS ) ;
}
static int uas_isnt_supported ( struct usb_device * udev )
{
struct usb_hcd * hcd = bus_to_hcd ( udev - > bus ) ;
dev_warn ( & udev - > dev , " The driver for the USB controller %s does not "
" support scatter-gather which is \n " ,
hcd - > driver - > description ) ;
dev_warn ( & udev - > dev , " required by the UAS driver. Please try an "
" alternative USB controller if you wish to use UAS. \n " ) ;
return - ENODEV ;
}
static int uas_find_uas_alt_setting ( struct usb_interface * intf )
{
int i ;
struct usb_device * udev = interface_to_usbdev ( intf ) ;
int sg_supported = udev - > bus - > sg_tablesize ! = 0 ;
for ( i = 0 ; i < intf - > num_altsetting ; i + + ) {
struct usb_host_interface * alt = & intf - > altsetting [ i ] ;
if ( uas_is_interface ( alt ) ) {
if ( ! sg_supported )
return uas_isnt_supported ( udev ) ;
if ( uas_is_interface ( alt ) )
return alt - > desc . bAlternateSetting ;
}
}
return - ENODEV ;
}
@ -92,5 +75,14 @@ static int uas_use_uas_driver(struct usb_interface *intf,
if ( r < 0 )
return 0 ;
if ( udev - > bus - > sg_tablesize = = 0 ) {
dev_warn ( & udev - > dev ,
" The driver for the USB controller %s does not support scatter-gather which is \n " ,
hcd - > driver - > description ) ;
dev_warn ( & udev - > dev ,
" required by the UAS driver. Please try an other USB controller if you wish to use UAS. \n " ) ;
return 0 ;
}
return 1 ;
}