Bug 130122

Summary: [usb8] DVD drive detects as 'da' device
Product: Base System Reporter: M. Warner Losh <imp>
Component: usbAssignee: freebsd-usb (Nobody) <usb>
Status: Open ---    
Severity: Affects Only Me    
Priority: Normal    
Version: 8.0-CURRENT   
Hardware: Any   
OS: Any   

Description M. Warner Losh 2009-01-02 19:30:04 UTC
My externeal usb DVD drive is showing up as 'da' rather than as 'cd'
when using usb2_storage_mass.  When I load usb2_storage_ata it shows
up as a 'cd' device that's usable.  mass should behave as well as ata
in this case, or it should detect that it can't get it right and
refuse to attach things.

Fix: 

Unknown.
How-To-Repeat: 
I loaded all the usb2 drivers at runtime:

kldload usb2_controller_{e,o}hci
kldload usb2_sotrage_mass

I then plugged in the drive.  This is an external DVD drive.

ehci0: <ATI SB400 USB 2.0 controller> mem 0xc0002000-0xc0002fff irq 19 at device 19.2 on pci0
ehci0: memory enable already set.
Activate PA 0xc0002000 at VA 0xffffff00c0002000
ehci0: [ITHREAD]
usbus0: EHCI version 1.0
usbus0: <ATI SB400 USB 2.0 controller> on ehci0
usbus0: 480Mbps High Speed USB v2.0
ugen0.1: <ATI> at usbus0
ushub0: <ATI EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus0
ushub0: 8 ports with 8 removable, self powered
ohci0: <ATI SB400 USB Controller> mem 0xc0000000-0xc0000fff irq 19 at device 19.0 on pci0
ohci0: memory enable already set.
Activate PA 0xc0000000 at VA 0xffffff00c0000000
ohci0: [ITHREAD]
usbus1: <ATI SB400 USB Controller> on ohci0
usbus1: 12Mbps Full Speed USB v1.0
ugen1.1: <ATI> at usbus1
ushub1: <ATI OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus1
ushub1: 4 ports with 4 removable, self powered
ohci1: <ATI SB400 USB Controller> mem 0xc0001000-0xc0001fff irq 19 at device 19.1 on pci0
ohci1: memory enable already set.
Activate PA 0xc0001000 at VA 0xffffff00c0001000
ohci1: [ITHREAD]
usbus2: <ATI SB400 USB Controller> on ohci1
usbus2: 12Mbps Full Speed USB v1.0
ugen2.1: <ATI> at usbus2
ushub2: <ATI OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus2
ushub2: 4 ports with 4 removable, self powered
ugen0.2: <Myson Century, Inc.> at usbus0
umass0: <Mass Storage Class> on usbus0
umass0:  SCSI over Bulk-Only; quirks = 0x0480
umass0:2:0:-1: Attached to scbus2
da0 at umass-sim0 bus 0 target 0 lun 0
da0: <  > Removable Direct Access SCSI-2 device 
da0: 40.000MB/s transfers
da0: Attempt to query device size failed: NOT READY, Medium not present

It should be 'cd1'.
Comment 1 Hans Petter Selasky 2009-01-02 20:23:55 UTC
Maybe the AutoInstall CD detecter is interfering with your device.

Can you use "usbconfig" to dump the device and config descriptors of your CD 
device?

You can also try:

kldload usb2_quirk
usbconfig add_dev_quirk_vplh <vid> <pid> <lo_rev> <hi_rev> UQ_CFG_INDEX_0

--HPS
Comment 2 M. Warner Losh 2009-01-02 22:15:01 UTC
: Maybe the AutoInstall CD detecter is interfering with your device.

Hmmm...

: Can you use "usbconfig" to dump the device and config descriptors of your CD 
: device?

How?

: You can also try:
: 
: kldload usb2_quirk
: usbconfig add_dev_quirk_vplh <vid> <pid> <lo_rev> <hi_rev> UQ_CFG_INDEX_0

What the heck are these different fields?  vid, pid, etc?

Warner
Comment 3 Hans Petter Selasky 2009-01-02 23:28:36 UTC
> : Can you use "usbconfig" to dump the device and config descriptors of your
> : CD device?
>
> How?

Run "usbconfig -h".

usbconfig -u xxx -a yyy dump_curr_config_desc
usbconfig -u xxx -a yyy dump_device_desc

>
> : You can also try:
> :
> : kldload usb2_quirk
> : usbconfig add_dev_quirk_vplh <vid> <pid> <lo_rev> <hi_rev> UQ_CFG_INDEX_0
>
> What the heck are these different fields?  vid, pid, etc?

Vendor ID, product ID, lower inclusive revision number, higher inclusive 
revision numer that is used when matching the quirk.

--HPS
Comment 4 M. Warner Losh 2009-01-03 19:29:38 UTC
: Run "usbconfig -h".

That doesn't tell me enough to know what you need to diagnose this
problem.

: usbconfig -u xxx -a yyy dump_curr_config_desc
: usbconfig -u xxx -a yyy dump_device_desc

How do I know the address?  Is it the .Y in ugenX.Y?

If so, here's what you requested:

ugen0.3: <USB Mass Storage Device Myson Century, Inc.> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON


 Configuration index 0

    bLength = 0x0009 
    bDescriptorType = 0x0002 
    wTotalLength = 0x0020 
    bNumInterfaces = 0x0001 
    bConfigurationValue = 0x0001 
    iConfiguration = 0x0004  <USB Mass Storage>
    bmAttributes = 0x00c0 
    bMaxPower = 0x0005 

    Interface 0
      bLength = 0x0009 
      bDescriptorType = 0x0004 
      bInterfaceNumber = 0x0000 
      bAlternateSetting = 0x0000 
      bNumEndpoints = 0x0002 
      bInterfaceClass = 0x0008 
      bInterfaceSubClass = 0x0005 
      bInterfaceProtocol = 0x0050 
      iInterface = 0x0005  <Mass Storage Class>

     Endpoint 0
        bLength = 0x0007 
        bDescriptorType = 0x0005 
        bEndpointAddress = 0x0003 
        bmAttributes = 0x0002 
        wMaxPacketSize = 0x0200 
        bInterval = 0x0000 
        bRefresh = 0x0000 
        bSynchAddress = 0x0000 

     Endpoint 1
        bLength = 0x0007 
        bDescriptorType = 0x0005 
        bEndpointAddress = 0x0084 
        bmAttributes = 0x0002 
        wMaxPacketSize = 0x0200 
        bInterval = 0x0000 
        bRefresh = 0x0000 
        bSynchAddress = 0x0000 



ugen0.3: <USB Mass Storage Device Myson Century, Inc.> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON

  bLength = 0x0012 
  bDescriptorType = 0x0001 
  bcdUSB = 0x0200 
  bDeviceClass = 0x0000 
  bDeviceSubClass = 0x0000 
  bDeviceProtocol = 0x0000 
  bMaxPacketSize0 = 0x0040 
  idVendor = 0x04cf 
  idProduct = 0x8818 
  bcdDevice = 0xb007 
  iManufacturer = 0x0001  <Myson Century, Inc.>
  iProduct = 0x0002  <USB Mass Storage Device>
  iSerialNumber = 0x0003  <100>
  bNumConfigurations = 0x0001 



: >
: > : You can also try:
: > :
: > : kldload usb2_quirk
: > : usbconfig add_dev_quirk_vplh <vid> <pid> <lo_rev> <hi_rev> UQ_CFG_INDEX_0
: >
: > What the heck are these different fields?  vid, pid, etc?
: 
: Vendor ID, product ID, lower inclusive revision number, higher inclusive 
: revision numer that is used when matching the quirk.

I'll give it a try...

Warner
Comment 5 Hans Petter Selasky 2009-01-03 22:08:50 UTC
> How do I know the address?  Is it the .Y in ugenX.Y?

Yes.

> If so, here's what you requested:

I see that your CD-rom device is quirked to the wrong subclass (SCSI) in 
usb2/storage/umass2.c:

#define UISUBCLASS_SFF8070I     5
#define UISUBCLASS_SCSI         6
       bInterfaceSubClass = 0x0005 

#define UIPROTO_MASS_BBB_OLD    2       /* Not in the spec anymore */
#define UIPROTO_MASS_BBB        80      /* 'P' for the Iomega Zip drive */
       bInterfaceProtocol = 0x0050

Solution:

Try removing or limiting the following quirk:

        {USB_VENDOR_MYSON, USB_PRODUCT_MYSON_HEDEN, RID_WILDCARD,
                UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
                NO_INQUIRY | IGNORE_RESIDUE
        },

--HPS
Comment 6 Hans Petter Selasky 2009-01-26 20:22:29 UTC
On Saturday 03 January 2009, M. Warner Losh wrote:
> In message: <200901030028.38064.hselasky@c2i.net>

I think this issue might be fixed in -current now, as of today.

Please give it a spin.

--HPS
Comment 7 Eitan Adler freebsd_committer freebsd_triage 2017-12-31 08:01:06 UTC
For bugs matching the following criteria:

Status: In Progress Changed: (is less than) 2014-06-01

Reset to default assignee and clear in-progress tags.

Mail being skipped