U3GINIT_SCSIEJECT quirk
Don Lewis
truckman at FreeBSD.org
Thu Nov 14 23:37:39 UTC 2013
I've got a Virgin Mobile version of the Novatel MiFi 2200. I've added
the following quirks CAM from spewing a bunch of errors when it attaches
the umass (cd) device and then panicing about ten minutes later when the
umass device decides to disconnect. I've also added the
U3GINIT_SCSIEJECT quirk in an attempt to get the umass device to eject
and bring up the u3g device.
Index: dev/usb/quirk/usb_quirk.c
===================================================================
--- dev/usb/quirk/usb_quirk.c (revision 258079)
+++ dev/usb/quirk/usb_quirk.c (working copy)
@@ -288,6 +288,7 @@
UQ_MSC_NO_INQUIRY),
USB_QUIRK(NIKON, D300, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
UQ_MSC_FORCE_PROTO_SCSI),
+ USB_QUIRK(NOVATEL, MIFI2200V, 0x0000, 0xffff, UQ_MSC_NO_PREVENT_ALLOW),
USB_QUIRK(OLYMPUS, C1, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_WRONG_CSWSIG),
USB_QUIRK(OLYMPUS, C700, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN),
Index: dev/usb/serial/u3g.c
===================================================================
--- dev/usb/serial/u3g.c (revision 258079)
+++ dev/usb/serial/u3g.c (working copy)
@@ -345,6 +345,7 @@
U3G_DEV(NOVATEL, MC547, 0),
U3G_DEV(NOVATEL, MC950D, 0),
U3G_DEV(NOVATEL, MIFI2200, U3GINIT_SCSIEJECT),
+ U3G_DEV(NOVATEL, MIFI2200V, U3GINIT_SCSIEJECT),
U3G_DEV(NOVATEL, U720, 0),
U3G_DEV(NOVATEL, U727, 0),
U3G_DEV(NOVATEL, U727_2, 0),
Index: dev/usb/usbdevs
===================================================================
--- dev/usb/usbdevs (revision 258079)
+++ dev/usb/usbdevs (working copy)
@@ -3174,6 +3174,7 @@
product NOVATEL U727 0x4100 Merlin U727 CDMA
product NOVATEL MC950D 0x4400 Novatel MC950D HSUPA
product NOVATEL ZEROCD 0x5010 Novatel ZeroCD
+product NOVATEL MIFI2200V 0x5020 Novatel MiFi 2200 CDMA Virgin Mobile
product NOVATEL ZEROCD2 0x5030 Novatel ZeroCD
product NOVATEL MIFI2200 0x5041 Novatel MiFi 2200 CDMA
product NOVATEL U727_2 0x5100 Merlin U727 CDMA
What is strange is that after rebooting the system, when I first plug in
the device, the eject doesn't seem to be happening. I see the
following:
ugen2.2: <Novatel Wireless Inc.> at usbus2
umass0: <Novatel Wireless Inc. Novatel Wireless CDMA, class 0/0, rev 1.10/0.00, addr 2> on usbus2
umass0: SCSI over Bulk-Only; quirks = 0x8100
umass0:9:0: Attached to scbus9
cd0 at umass-sim0 bus 0 scbus9 target 0 lun 0
cd0: <Novatel Mass Storage 1.00> Removable CD-ROM SCSI-2 device
cd0: Serial Number 091166643730000
cd0: 1.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present
cd0: quirks=0x10<10_BYTE_ONLY>
[run "camcontrol eject cd0" or wait about 10 minutes]
ugen2.2: <Novatel Wireless Inc.> at usbus2 (disconnected)
umass0: at uhub0, port 1, addr 2 (disconnected)
cd0 at umass-sim0 bus 0 scbus9 target 0 lun 0
cd0: <Novatel Mass Storage 1.00> s/n 091166643730000 detached
(cd0:umass-sim0:0:0:0): Periph destroyed
ugen2.2: <Novatel Wireless Inc.> at usbus2
u3g0: <Data Interface> on usbus2
u3g0: Found 3 ports.
[unplug device]
ugen2.2: <Novatel Wireless Inc.> at usbus2 (disconnected)
u3g0: at uhub0, port 1, addr 2 (disconnected)
If I then turn off the device and plug it back in, then the eject seems
to happen automatically like I would expect:
ugen2.2: <Novatel Wireless Inc.> at usbus2
ugen2.2: <Novatel Wireless Inc.> at usbus2 (disconnected)
ugen2.2: <Novatel Wireless Inc.> at usbus2
u3g0: <Data Interface> on usbus2
u3g0: Found 3 ports.
My first question is how does U3GINIT_SCSIEJECT manage to ever work? It
seems like there would be chicken vs. egg issue here. The quirk is on
the u3g device, so how would it get activated until the u3g device is
attached? The u3g device doesn't appear until the umass device is
ejected.
My second question is why does it work the second time the device is
plugged in, but not the first time after a reboot?
Is there a way to make it happen automatically the
first time the device is plugged in?
More information about the freebsd-usb
mailing list