svn commit: r192052 - in head/sys/dev/usb: . storage
Andrew Thompson
thompsa at FreeBSD.org
Wed May 13 18:03:23 UTC 2009
Author: thompsa
Date: Wed May 13 18:03:23 2009
New Revision: 192052
URL: http://svn.freebsd.org/changeset/base/192052
Log:
Sync to P4
Add umass quirks for Alcor AU6390, Cypress PATA 6830XX and MPMan MPF400.
Submitted by: Hans Petter Selasky
Modified:
head/sys/dev/usb/storage/umass.c
head/sys/dev/usb/usbdevs
Modified: head/sys/dev/usb/storage/umass.c
==============================================================================
--- head/sys/dev/usb/storage/umass.c Wed May 13 17:58:37 2009 (r192051)
+++ head/sys/dev/usb/storage/umass.c Wed May 13 18:03:23 2009 (r192052)
@@ -309,6 +309,7 @@ struct umass_devdescr {
/* wire and command protocol */
uint16_t proto;
+#define UMASS_PROTO_DEFAULT 0x0000 /* use protocol indicated by USB descriptors */
#define UMASS_PROTO_BBB 0x0001 /* USB wire protocol */
#define UMASS_PROTO_CBI 0x0002
#define UMASS_PROTO_CBI_I 0x0004
@@ -372,7 +373,7 @@ struct umass_devdescr {
static const struct umass_devdescr umass_devdescr[] = {
{USB_VENDOR_ASAHIOPTICAL, PID_WILDCARD, RID_WILDCARD,
- UMASS_PROTO_ATAPI | UMASS_PROTO_CBI_I,
+ UMASS_PROTO_DEFAULT,
RS_NO_CLEAR_UA
},
{USB_VENDOR_ADDON, USB_PRODUCT_ADDON_ATTACHE, RID_WILDCARD,
@@ -395,6 +396,10 @@ static const struct umass_devdescr umass
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
NO_QUIRKS
},
+ {USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_AU6390, RID_WILDCARD,
+ UMASS_PROTO_DEFAULT,
+ NO_SYNCHRONIZE_CACHE
+ },
{USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_UMCR_9361, RID_WILDCARD,
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
NO_GETMAXLUN
@@ -427,6 +432,10 @@ static const struct umass_devdescr umass
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
FORCE_SHORT_INQUIRY | NO_START_STOP | IGNORE_RESIDUE
},
+ {USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_XX6830XX, RID_WILDCARD,
+ UMASS_PROTO_DEFAULT,
+ NO_GETMAXLUN | NO_SYNCHRONIZE_CACHE
+ },
{USB_VENDOR_DESKNOTE, USB_PRODUCT_DESKNOTE_UCR_61S2B, RID_WILDCARD,
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
NO_QUIRKS
@@ -600,6 +609,10 @@ static const struct umass_devdescr umass
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
FORCE_SHORT_INQUIRY | NO_INQUIRY_EVPD | NO_GETMAXLUN
},
+ {USB_VENDOR_MPMAN, PID_WILDCARD, RID_WILDCARD,
+ UMASS_PROTO_DEFAULT,
+ NO_SYNCHRONIZE_CACHE
+ },
{USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY, RID_WILDCARD,
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
IGNORE_RESIDUE | NO_GETMAXLUN | RS_NO_CLEAR_UA
@@ -609,11 +622,11 @@ static const struct umass_devdescr umass
NO_QUIRKS
},
{USB_VENDOR_MYSON, USB_PRODUCT_MYSON_HEDEN, RID_WILDCARD,
- UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
+ UMASS_PROTO_DEFAULT,
IGNORE_RESIDUE | NO_SYNCHRONIZE_CACHE
},
{USB_VENDOR_MYSON, USB_PRODUCT_MYSON_STARREADER, RID_WILDCARD,
- UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
+ UMASS_PROTO_DEFAULT,
NO_SYNCHRONIZE_CACHE
},
{USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3260, RID_WILDCARD,
@@ -849,7 +862,7 @@ static const struct umass_devdescr umass
NO_QUIRKS
},
{USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDE, RID_WILDCARD,
- UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
+ UMASS_PROTO_DEFAULT,
IGNORE_RESIDUE | NO_SYNCHRONIZE_CACHE
},
{USB_VENDOR_TAUGA, USB_PRODUCT_TAUGA_CAMERAMATE, RID_WILDCARD,
@@ -1281,6 +1294,58 @@ MODULE_DEPEND(umass, cam, 1, 1, 1);
* USB device probe/attach/detach
*/
+static uint16_t
+umass_get_proto(struct usb2_interface *iface)
+{
+ struct usb2_interface_descriptor *id;
+ uint16_t retval;
+
+ retval = 0;
+
+ /* Check for a standards compliant device */
+ id = usb2_get_interface_descriptor(iface);
+ if ((id == NULL) ||
+ (id->bInterfaceClass != UICLASS_MASS)) {
+ goto done;
+ }
+ switch (id->bInterfaceSubClass) {
+ case UISUBCLASS_SCSI:
+ retval |= UMASS_PROTO_SCSI;
+ break;
+ case UISUBCLASS_UFI:
+ retval |= UMASS_PROTO_UFI;
+ break;
+ case UISUBCLASS_RBC:
+ retval |= UMASS_PROTO_RBC;
+ break;
+ case UISUBCLASS_SFF8020I:
+ case UISUBCLASS_SFF8070I:
+ retval |= UMASS_PROTO_ATAPI;
+ break;
+ default:
+ retval = 0;
+ goto done;
+ }
+
+ switch (id->bInterfaceProtocol) {
+ case UIPROTO_MASS_CBI:
+ retval |= UMASS_PROTO_CBI;
+ break;
+ case UIPROTO_MASS_CBI_I:
+ retval |= UMASS_PROTO_CBI_I;
+ break;
+ case UIPROTO_MASS_BBB_OLD:
+ case UIPROTO_MASS_BBB:
+ retval |= UMASS_PROTO_BBB;
+ break;
+ default:
+ retval = 0;
+ goto done;
+ }
+done:
+ return (retval);
+}
+
/*
* Match the device we are seeing with the
* devices supported.
@@ -1289,10 +1354,9 @@ static struct umass_probe_proto
umass_probe_proto(device_t dev, struct usb2_attach_arg *uaa)
{
const struct umass_devdescr *udd = umass_devdescr;
- struct usb2_interface_descriptor *id;
struct umass_probe_proto ret;
- bzero(&ret, sizeof(ret));
+ memset(&ret, 0, sizeof(ret));
/*
* An entry specifically for Y-E Data devices as they don't fit in
@@ -1319,7 +1383,6 @@ umass_probe_proto(device_t dev, struct u
ret.quirks |= NO_TEST_UNIT_READY;
}
ret.quirks |= RS_NO_CLEAR_UA | FLOPPY_SPEED;
- ret.error = 0;
goto done;
}
/*
@@ -1327,13 +1390,6 @@ umass_probe_proto(device_t dev, struct u
* check for wildcarded and fully matched. First match wins.
*/
for (; udd->vid != VID_EOT; udd++) {
- if ((udd->vid == VID_WILDCARD) &&
- (udd->pid == PID_WILDCARD) &&
- (udd->rid == RID_WILDCARD)) {
- device_printf(dev, "ignoring invalid "
- "wildcard quirk\n");
- continue;
- }
if (((udd->vid == uaa->info.idVendor) ||
(udd->vid == VID_WILDCARD)) &&
((udd->pid == uaa->info.idProduct) ||
@@ -1341,64 +1397,27 @@ umass_probe_proto(device_t dev, struct u
if (udd->rid == RID_WILDCARD) {
ret.proto = udd->proto;
ret.quirks = udd->quirks;
- ret.error = 0;
- goto done;
+ if (ret.proto == UMASS_PROTO_DEFAULT)
+ goto default_proto;
+ else
+ goto done;
} else if (udd->rid == uaa->info.bcdDevice) {
ret.proto = udd->proto;
ret.quirks = udd->quirks;
- ret.error = 0;
- goto done;
+ if (ret.proto == UMASS_PROTO_DEFAULT)
+ goto default_proto;
+ else
+ goto done;
} /* else RID does not match */
}
}
- /* Check for a standards compliant device */
- id = usb2_get_interface_descriptor(uaa->iface);
- if ((id == NULL) ||
- (id->bInterfaceClass != UICLASS_MASS)) {
- ret.error = ENXIO;
- goto done;
- }
- switch (id->bInterfaceSubClass) {
- case UISUBCLASS_SCSI:
- ret.proto |= UMASS_PROTO_SCSI;
- break;
- case UISUBCLASS_UFI:
- ret.proto |= UMASS_PROTO_UFI;
- break;
- case UISUBCLASS_RBC:
- ret.proto |= UMASS_PROTO_RBC;
- break;
- case UISUBCLASS_SFF8020I:
- case UISUBCLASS_SFF8070I:
- ret.proto |= UMASS_PROTO_ATAPI;
- break;
- default:
- device_printf(dev, "unsupported command "
- "protocol %d\n", id->bInterfaceSubClass);
- ret.error = ENXIO;
- goto done;
- }
-
- switch (id->bInterfaceProtocol) {
- case UIPROTO_MASS_CBI:
- ret.proto |= UMASS_PROTO_CBI;
- break;
- case UIPROTO_MASS_CBI_I:
- ret.proto |= UMASS_PROTO_CBI_I;
- break;
- case UIPROTO_MASS_BBB_OLD:
- case UIPROTO_MASS_BBB:
- ret.proto |= UMASS_PROTO_BBB;
- break;
- default:
- device_printf(dev, "unsupported wire "
- "protocol %d\n", id->bInterfaceProtocol);
+default_proto:
+ ret.proto = umass_get_proto(uaa->iface);
+ if (ret.proto == 0)
ret.error = ENXIO;
- goto done;
- }
-
- ret.error = 0;
+ else
+ ret.error = 0;
done:
return (ret);
}
Modified: head/sys/dev/usb/usbdevs
==============================================================================
--- head/sys/dev/usb/usbdevs Wed May 13 17:58:37 2009 (r192051)
+++ head/sys/dev/usb/usbdevs Wed May 13 18:03:23 2009 (r192052)
@@ -624,6 +624,7 @@ vendor QCOM 0x18e8 Qcom
vendor LINKSYS3 0x1915 Linksys
vendor QUALCOMMINC 0x19d2 Qualcomm, Incorporated
vendor STELERA 0x1a8d Stelera Wireless
+vendor MPMAN 0x1cae MpMan
vendor DRESDENELEKTRONIK 0x1cf1 dresden elektronik
vendor DLINK 0x2001 D-Link
vendor PLANEX2 0x2019 Planex Communications
@@ -817,6 +818,7 @@ product ALCOR AU9814 0x9215 AU9814 Hub
product ALCOR UMCR_9361 0x9361 USB Multimedia Card Reader
product ALCOR SM_KBD 0x9410 MicroConnectors/StrongMan Keyboard
product ALCOR NEC_KBD_HUB 0x9472 NEC Kbd Hub
+product ALCOR AU6390 0x6390 AU6390 USB-IDE converter
/* Altec Lansing products */
product ALTEC ADA70 0x0070 ADA70 Speakers
@@ -1107,6 +1109,7 @@ product CYPRESS KBDHUB 0x0101 Keyboard/
product CYPRESS FMRADIO 0x1002 FM Radio
product CYPRESS USBRS232 0x5500 USB-RS232 Interface
product CYPRESS SLIM_HUB 0x6560 Slim Hub
+product CYPRESS XX6830XX 0x6830 PATA Storage Device
/* Daisy Technology products */
product DAISY DMC 0x6901 USB MultiMedia Reader
@@ -2297,6 +2300,10 @@ product SPHAIRON UB801R 0x0110 UB801R
product STELERA ZEROCD 0x1000 Zerocd Installer
product STELERA C105 0x1002 Stelera/Bandrish C105 USB
+/* MpMan products */
+product MPMAN MPF400_1 0x36d0 MPF400 Music Player 1Go
+product MPMAN MPF400_2 0x25a8 MPF400 Music Player 2Go
+
/* STMicroelectronics products */
product STMICRO BIOCPU 0x2016 Biometric Coprocessor
product STMICRO COMMUNICATOR 0x7554 USB Communicator
More information about the svn-src-head
mailing list