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