umodem: add quirk to ignore CDC_CM descriptor

Some devices have CDC_CM descriptors that would point us to
the wrong interfaces. Add a quirk to ignore those (prefering the
CDC_UNION descriptor effectively)

Reviewed by:		manu
MFC after:		1 week
Sponsored by:		Beckhoff Automation GmbH & Co. KG
Differential Revision:	https://reviews.freebsd.org/D37942
This commit is contained in:
Steffen Dirkwinkel 2023-01-17 08:58:46 +01:00 committed by Corvin Köhne
parent 896f556205
commit 73c3e8b1de
No known key found for this signature in database
GPG Key ID: D854DA56315E026A
4 changed files with 7 additions and 1 deletions

View File

@ -100,6 +100,8 @@ select configuration index 4 by default
select configuration index 0 by default
.It UQ_ASSUME_CM_OVER_DATA
assume cm over data feature
.It UQ_IGNORE_CDC_CM
ignore cm descriptor
.It UQ_WMT_IGNORE
device should be ignored by wmt driver
.El

View File

@ -662,6 +662,7 @@ static const char *usb_quirk_str[USB_QUIRK_MAX] = {
[UQ_CFG_INDEX_4] = "UQ_CFG_INDEX_4",
[UQ_CFG_INDEX_0] = "UQ_CFG_INDEX_0",
[UQ_ASSUME_CM_OVER_DATA] = "UQ_ASSUME_CM_OVER_DATA",
[UQ_IGNORE_CDC_CM] = "UQ_IGNORE_CDC_CM",
[UQ_MSC_NO_TEST_UNIT_READY] = "UQ_MSC_NO_TEST_UNIT_READY",
[UQ_MSC_NO_RS_CLEAR_UA] = "UQ_MSC_NO_RS_CLEAR_UA",
[UQ_MSC_NO_START_STOP] = "UQ_MSC_NO_START_STOP",

View File

@ -66,6 +66,7 @@ enum {
UQ_CFG_INDEX_4, /* select configuration index 4 by default */
UQ_CFG_INDEX_0, /* select configuration index 0 by default */
UQ_ASSUME_CM_OVER_DATA, /* assume cm over data feature */
UQ_IGNORE_CDC_CM, /* ignore cm descriptor */
/*
* USB Mass Storage Quirks. See "storage/umass.c" for a

View File

@ -359,7 +359,9 @@ umodem_attach(device_t dev)
/* get the data interface number */
cmd = umodem_get_desc(uaa, UDESC_CS_INTERFACE, UDESCSUB_CDC_CM);
cmd = NULL;
if (!usb_test_quirk(uaa, UQ_IGNORE_CDC_CM))
cmd = umodem_get_desc(uaa, UDESC_CS_INTERFACE, UDESCSUB_CDC_CM);
if ((cmd == NULL) || (cmd->bLength < sizeof(*cmd))) {
cud = usbd_find_descriptor(uaa->device, NULL,