mirror of
https://github.com/opnsense/src.git
synced 2026-06-08 08:12:27 -04:00
Sync to P4
Add umass quirks for Alcor AU6390, Cypress PATA 6830XX and MPMan MPF400. Submitted by: Hans Petter Selasky
This commit is contained in:
parent
f1f8840814
commit
3a67e91430
2 changed files with 90 additions and 64 deletions
|
|
@ -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_devdescr[] = {
|
|||
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_devdescr[] = {
|
|||
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_devdescr[] = {
|
|||
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_devdescr[] = {
|
|||
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_devdescr[] = {
|
|||
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 usb2_attach_arg *uaa)
|
|||
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 usb2_attach_arg *uaa)
|
|||
* 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 usb2_attach_arg *uaa)
|
|||
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)) {
|
||||
default_proto:
|
||||
ret.proto = umass_get_proto(uaa->iface);
|
||||
if (ret.proto == 0)
|
||||
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);
|
||||
ret.error = ENXIO;
|
||||
goto done;
|
||||
}
|
||||
|
||||
ret.error = 0;
|
||||
else
|
||||
ret.error = 0;
|
||||
done:
|
||||
return (ret);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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/Hub
|
|||
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
|
||||
|
|
|
|||
Loading…
Reference in a new issue