mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-19 23:56:16 +07:00
net: cdc_ncm: do not bind to NCM compatible MBIM devices
The MBIM specification allows a MBIM device to disguise itself as NCM for backwards compatibility, using additional altsettings with different subclass (control) or protocol (data): C:* #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0d Prot=00 Driver=cdc_mbim E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=7ms I:* If#= 0 Alt= 1 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=7ms I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=01 Driver=cdc_mbim I: If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=01 Driver=cdc_mbim E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms I:* If#= 1 Alt= 2 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms If the MBIM driver is enabled then that should have priority for devices providing such a NCM 1.0 backward compatibility mode. Signed-off-by: Bjørn Mork <bjorn@mork.no> Signed-off-by: Greg Suarez <gsuarez@smithmicro.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9084ccf9f7
commit
bd329e1284
@ -563,6 +563,33 @@ static int cdc_ncm_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* The MBIM spec defines a NCM compatible default altsetting,
|
||||
* which we may have matched:
|
||||
*
|
||||
* "Functions that implement both NCM 1.0 and MBIM (an
|
||||
* “NCM/MBIM function”) according to this recommendation
|
||||
* shall provide two alternate settings for the
|
||||
* Communication Interface. Alternate setting 0, and the
|
||||
* associated class and endpoint descriptors, shall be
|
||||
* constructed according to the rules given for the
|
||||
* Communication Interface in section 5 of [USBNCM10].
|
||||
* Alternate setting 1, and the associated class and
|
||||
* endpoint descriptors, shall be constructed according to
|
||||
* the rules given in section 6 (USB Device Model) of this
|
||||
* specification."
|
||||
*
|
||||
* Do not bind to such interfaces, allowing cdc_mbim to handle
|
||||
* them
|
||||
*/
|
||||
#if IS_ENABLED(CONFIG_USB_NET_CDC_MBIM)
|
||||
if ((intf->num_altsetting == 2) &&
|
||||
!usb_set_interface(dev->udev,
|
||||
intf->cur_altsetting->desc.bInterfaceNumber,
|
||||
CDC_NCM_COMM_ALTSETTING_MBIM) &&
|
||||
cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting))
|
||||
return -ENODEV;
|
||||
#endif
|
||||
|
||||
/* NCM data altsetting is always 1 */
|
||||
ret = cdc_ncm_bind_common(dev, intf, 1);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user