Lines Matching +full:u +full:- +full:blox

1 // SPDX-License-Identifier: GPL-2.0-only
6 * Copyright (C) 2003-2005 by David Brownell
22 #include <linux/usb/cdc-wdm.h>
26 * specific management protocol called Qualcomm MSM Interface (QMI) -
31 * control ("master") interface of a two-interface CDC Union
41 * It is exported as a character device using the cdc-wdm driver as
82 struct net_device *real_dev = priv->real_dev; in qmimux_open()
84 if (!(priv->real_dev->flags & IFF_UP)) in qmimux_open()
85 return -ENETDOWN; in qmimux_open()
101 unsigned int len = skb->len; in qmimux_start_xmit()
106 hdr->pad = 0; in qmimux_start_xmit()
107 hdr->mux_id = priv->mux_id; in qmimux_start_xmit()
108 hdr->pkt_len = cpu_to_be16(len); in qmimux_start_xmit()
109 skb->dev = priv->real_dev; in qmimux_start_xmit()
115 dev->stats.tx_dropped++; in qmimux_start_xmit()
128 dev->header_ops = NULL; /* No header */ in qmimux_setup()
129 dev->type = ARPHRD_NONE; in qmimux_setup()
130 dev->hard_header_len = 0; in qmimux_setup()
131 dev->addr_len = 0; in qmimux_setup()
132 dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; in qmimux_setup()
133 dev->netdev_ops = &qmimux_netdev_ops; in qmimux_setup()
134 dev->mtu = 1500; in qmimux_setup()
135 dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS; in qmimux_setup()
136 dev->needs_free_netdev = true; in qmimux_setup()
146 netdev_for_each_upper_dev_rcu(dev->net, ldev, iter) { in qmimux_find_dev()
148 if (priv->mux_id == mux_id) { in qmimux_find_dev()
159 return !list_empty(&dev->net->adj_list.upper); in qmimux_has_slaves()
170 while (offset + qmimux_hdr_sz < skb->len) { in qmimux_rx_fixup()
171 hdr = (struct qmimux_hdr *)(skb->data + offset); in qmimux_rx_fixup()
172 len = be16_to_cpu(hdr->pkt_len); in qmimux_rx_fixup()
175 if (offset + len + qmimux_hdr_sz > skb->len) in qmimux_rx_fixup()
179 if (hdr->pad & 0x80) in qmimux_rx_fixup()
183 pad_len = hdr->pad & 0x3f; in qmimux_rx_fixup()
186 pkt_len = len - pad_len; in qmimux_rx_fixup()
188 net = qmimux_find_dev(dev, hdr->mux_id); in qmimux_rx_fixup()
201 switch (skb->data[offset + qmimux_hdr_sz] & 0xf0) { in qmimux_rx_fixup()
203 skbn->protocol = htons(ETH_P_IP); in qmimux_rx_fixup()
206 skbn->protocol = htons(ETH_P_IPV6); in qmimux_rx_fixup()
209 /* not ip - do not know what to do */ in qmimux_rx_fixup()
215 skb_put_data(skbn, skb->data + offset + qmimux_hdr_sz, pkt_len); in qmimux_rx_fixup()
217 net->stats.rx_errors++; in qmimux_rx_fixup()
236 return sysfs_emit(buf, "0x%02x\n", priv->mux_id); in mux_id_show()
260 return -ENOBUFS; in qmimux_register_device()
264 priv->mux_id = mux_id; in qmimux_register_device()
265 priv->real_dev = real_dev; in qmimux_register_device()
267 new_dev->sysfs_groups[0] = &qmi_wwan_sysfs_qmimux_attr_group; in qmimux_register_device()
297 struct net_device *real_dev = priv->real_dev; in qmimux_unregister_device()
309 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_netdev_setup()
311 if (info->flags & QMI_WWAN_FLAG_RAWIP) { in qmi_wwan_netdev_setup()
312 net->header_ops = NULL; /* No header */ in qmi_wwan_netdev_setup()
313 net->type = ARPHRD_NONE; in qmi_wwan_netdev_setup()
314 net->hard_header_len = 0; in qmi_wwan_netdev_setup()
315 net->addr_len = 0; in qmi_wwan_netdev_setup()
316 net->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; in qmi_wwan_netdev_setup()
317 set_bit(EVENT_NO_IP_ALIGN, &dev->flags); in qmi_wwan_netdev_setup()
319 } else if (!net->header_ops) { /* don't bother if already set */ in qmi_wwan_netdev_setup()
322 net->min_mtu = 0; in qmi_wwan_netdev_setup()
323 net->max_mtu = ETH_MAX_MTU; in qmi_wwan_netdev_setup()
324 clear_bit(EVENT_NO_IP_ALIGN, &dev->flags); in qmi_wwan_netdev_setup()
329 usbnet_change_mtu(net, net->mtu); in qmi_wwan_netdev_setup()
335 struct qmi_wwan_state *info = (void *)&dev->data; in raw_ip_show()
337 return sprintf(buf, "%c\n", info->flags & QMI_WWAN_FLAG_RAWIP ? 'Y' : 'N'); in raw_ip_show()
343 struct qmi_wwan_state *info = (void *)&dev->data; in raw_ip_store()
348 return -EINVAL; in raw_ip_store()
351 if (enable == (info->flags & QMI_WWAN_FLAG_RAWIP)) in raw_ip_store()
355 if (!enable && (info->flags & QMI_WWAN_FLAG_PASS_THROUGH)) { in raw_ip_store()
356 netdev_err(dev->net, in raw_ip_store()
358 return -EINVAL; in raw_ip_store()
365 if (netif_running(dev->net)) { in raw_ip_store()
366 netdev_err(dev->net, "Cannot change a running device\n"); in raw_ip_store()
367 ret = -EBUSY; in raw_ip_store()
372 ret = call_netdevice_notifiers(NETDEV_PRE_TYPE_CHANGE, dev->net); in raw_ip_store()
375 netdev_err(dev->net, "Type change was refused\n"); in raw_ip_store()
380 info->flags |= QMI_WWAN_FLAG_RAWIP; in raw_ip_store()
382 info->flags &= ~QMI_WWAN_FLAG_RAWIP; in raw_ip_store()
383 qmi_wwan_netdev_setup(dev->net); in raw_ip_store()
384 call_netdevice_notifiers(NETDEV_POST_TYPE_CHANGE, dev->net); in raw_ip_store()
402 count += scnprintf(&buf[count], PAGE_SIZE - count, in add_mux_show()
403 "0x%02x\n", priv->mux_id); in add_mux_show()
412 struct qmi_wwan_state *info = (void *)&dev->data; in add_mux_store()
417 return -EINVAL; in add_mux_store()
419 /* mux_id [1 - 254] for compatibility with ip(8) and the rmnet driver */ in add_mux_store()
421 return -EINVAL; in add_mux_store()
427 netdev_err(dev->net, "mux_id already present\n"); in add_mux_store()
428 ret = -EINVAL; in add_mux_store()
432 ret = qmimux_register_device(dev->net, mux_id); in add_mux_store()
434 info->flags |= QMI_WWAN_FLAG_MUX; in add_mux_store()
450 struct qmi_wwan_state *info = (void *)&dev->data; in del_mux_store()
456 return -EINVAL; in del_mux_store()
463 netdev_err(dev->net, "mux_id not present\n"); in del_mux_store()
464 ret = -EINVAL; in del_mux_store()
470 info->flags &= ~QMI_WWAN_FLAG_MUX; in del_mux_store()
483 info = (void *)&dev->data; in pass_through_show()
485 info->flags & QMI_WWAN_FLAG_PASS_THROUGH ? 'Y' : 'N'); in pass_through_show()
497 return -EINVAL; in pass_through_store()
499 info = (void *)&dev->data; in pass_through_store()
502 if (enable == (info->flags & QMI_WWAN_FLAG_PASS_THROUGH)) in pass_through_store()
506 if (!(info->flags & QMI_WWAN_FLAG_RAWIP)) { in pass_through_store()
507 netdev_err(dev->net, in pass_through_store()
509 return -EINVAL; in pass_through_store()
513 info->flags |= QMI_WWAN_FLAG_PASS_THROUGH; in pass_through_store()
515 info->flags &= ~QMI_WWAN_FLAG_PASS_THROUGH; in pass_through_store()
551 * ARP packets on a point-to-point link. Any packet with an ethernet
565 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_rx_fixup()
566 bool rawip = info->flags & QMI_WWAN_FLAG_RAWIP; in qmi_wwan_rx_fixup()
570 if (skb->len < dev->net->hard_header_len) in qmi_wwan_rx_fixup()
573 if (info->flags & QMI_WWAN_FLAG_MUX) in qmi_wwan_rx_fixup()
576 if (info->flags & QMI_WWAN_FLAG_PASS_THROUGH) { in qmi_wwan_rx_fixup()
577 skb->protocol = htons(ETH_P_MAP); in qmi_wwan_rx_fixup()
581 switch (skb->data[0] & 0xf0) { in qmi_wwan_rx_fixup()
591 if (is_multicast_ether_addr(skb->data)) in qmi_wwan_rx_fixup()
593 /* possibly bogus destination - rewrite just in case */ in qmi_wwan_rx_fixup()
604 skb->dev = dev->net; /* normally set by eth_type_trans */ in qmi_wwan_rx_fixup()
605 skb->protocol = proto; in qmi_wwan_rx_fixup()
613 eth_hdr(skb)->h_proto = proto; in qmi_wwan_rx_fixup()
614 eth_zero_addr(eth_hdr(skb)->h_source); in qmi_wwan_rx_fixup()
616 memcpy(eth_hdr(skb)->h_dest, dev->net->dev_addr, ETH_ALEN); in qmi_wwan_rx_fixup()
635 if (possibly_iphdr(addr->sa_data)) in qmi_wwan_mac_addr()
636 return -EADDRNOTAVAIL; in qmi_wwan_mac_addr()
656 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_manage_power()
659 dev_dbg(&dev->intf->dev, "%s() pmcount=%d, on=%d\n", __func__, in qmi_wwan_manage_power()
660 atomic_read(&info->pmcount), on); in qmi_wwan_manage_power()
662 if ((on && atomic_add_return(1, &info->pmcount) == 1) || in qmi_wwan_manage_power()
663 (!on && atomic_dec_and_test(&info->pmcount))) { in qmi_wwan_manage_power()
667 rv = usb_autopm_get_interface(dev->intf); in qmi_wwan_manage_power()
668 dev->intf->needs_remote_wakeup = on; in qmi_wwan_manage_power()
670 usb_autopm_put_interface(dev->intf); in qmi_wwan_manage_power()
690 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_register_subdriver()
693 rv = usbnet_get_endpoints(dev, info->data); in qmi_wwan_register_subdriver()
698 if (info->control != info->data) in qmi_wwan_register_subdriver()
699 dev->status = &info->control->cur_altsetting->endpoint[0]; in qmi_wwan_register_subdriver()
702 if (!dev->status) { in qmi_wwan_register_subdriver()
703 rv = -EINVAL; in qmi_wwan_register_subdriver()
708 atomic_set(&info->pmcount, 0); in qmi_wwan_register_subdriver()
711 subdriver = usb_cdc_wdm_register(info->control, &dev->status->desc, in qmi_wwan_register_subdriver()
715 dev_err(&info->control->dev, "subdriver registration failed\n"); in qmi_wwan_register_subdriver()
721 dev->status = NULL; in qmi_wwan_register_subdriver()
724 info->subdriver = subdriver; in qmi_wwan_register_subdriver()
737 u8 intf = dev->intf->cur_altsetting->desc.bInterfaceNumber; in qmi_wwan_change_dtr()
747 u8 *buf = intf->cur_altsetting->extra; in qmi_wwan_bind()
748 int len = intf->cur_altsetting->extralen; in qmi_wwan_bind()
749 struct usb_interface_descriptor *desc = &intf->cur_altsetting->desc; in qmi_wwan_bind()
753 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_bind()
756 BUILD_BUG_ON((sizeof(((struct usbnet *)0)->data) < in qmi_wwan_bind()
760 info->control = intf; in qmi_wwan_bind()
761 info->data = intf; in qmi_wwan_bind()
770 info->data = usb_ifnum_to_if(dev->udev, in qmi_wwan_bind()
771 cdc_union->bSlaveInterface0); in qmi_wwan_bind()
772 if (desc->bInterfaceNumber != cdc_union->bMasterInterface0 || in qmi_wwan_bind()
773 !info->data) { in qmi_wwan_bind()
774 dev_err(&intf->dev, in qmi_wwan_bind()
775 "bogus CDC Union: master=%u, slave=%u\n", in qmi_wwan_bind()
776 cdc_union->bMasterInterface0, in qmi_wwan_bind()
777 cdc_union->bSlaveInterface0); in qmi_wwan_bind()
781 info->data = intf; in qmi_wwan_bind()
785 /* errors aren't fatal - we can live with the dynamic address */ in qmi_wwan_bind()
786 if (cdc_ether && cdc_ether->wMaxSegmentSize) { in qmi_wwan_bind()
787 dev->hard_mtu = le16_to_cpu(cdc_ether->wMaxSegmentSize); in qmi_wwan_bind()
788 usbnet_get_ethernet_addr(dev, cdc_ether->iMACAddress); in qmi_wwan_bind()
792 if (info->control != info->data) { in qmi_wwan_bind()
793 status = usb_driver_claim_interface(driver, info->data, dev); in qmi_wwan_bind()
799 if (status < 0 && info->control != info->data) { in qmi_wwan_bind()
800 usb_set_intfdata(info->data, NULL); in qmi_wwan_bind()
801 usb_driver_release_interface(driver, info->data); in qmi_wwan_bind()
821 if (dev->driver_info->data & QMI_WWAN_QUIRK_DTR || in qmi_wwan_bind()
822 le16_to_cpu(dev->udev->descriptor.bcdUSB) >= 0x0201) { in qmi_wwan_bind()
828 * buggy firmware told us to. Or, if device is assigned the well-known in qmi_wwan_bind()
831 if (ether_addr_equal(dev->net->dev_addr, default_modem_addr) || in qmi_wwan_bind()
832 ether_addr_equal(dev->net->dev_addr, buggy_fw_addr)) in qmi_wwan_bind()
833 eth_hw_addr_random(dev->net); in qmi_wwan_bind()
836 if (possibly_iphdr(dev->net->dev_addr)) { in qmi_wwan_bind()
837 u8 addr = dev->net->dev_addr[0]; in qmi_wwan_bind()
841 dev_addr_mod(dev->net, 0, &addr, 1); in qmi_wwan_bind()
843 dev->net->netdev_ops = &qmi_wwan_netdev_ops; in qmi_wwan_bind()
844 dev->net->sysfs_groups[0] = &qmi_wwan_sysfs_attr_group; in qmi_wwan_bind()
851 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_unbind()
855 if (info->subdriver && info->subdriver->disconnect) in qmi_wwan_unbind()
856 info->subdriver->disconnect(info->control); in qmi_wwan_unbind()
859 if (le16_to_cpu(dev->udev->descriptor.bcdUSB) >= 0x0201) { in qmi_wwan_unbind()
865 if (intf == info->control) in qmi_wwan_unbind()
866 other = info->data; in qmi_wwan_unbind()
868 other = info->control; in qmi_wwan_unbind()
876 info->subdriver = NULL; in qmi_wwan_unbind()
877 info->data = NULL; in qmi_wwan_unbind()
878 info->control = NULL; in qmi_wwan_unbind()
881 /* suspend/resume wrappers calling both usbnet and the cdc-wdm
884 * NOTE: cdc-wdm also supports pre/post_reset, but we cannot provide
890 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_suspend()
893 /* Both usbnet_suspend() and subdriver->suspend() MUST return 0 in qmi_wwan_suspend()
901 if (intf == info->control && info->subdriver && in qmi_wwan_suspend()
902 info->subdriver->suspend) in qmi_wwan_suspend()
903 ret = info->subdriver->suspend(intf, message); in qmi_wwan_suspend()
913 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_resume()
915 bool callsub = (intf == info->control && info->subdriver && in qmi_wwan_resume()
916 info->subdriver->resume); in qmi_wwan_resume()
919 ret = info->subdriver->resume(intf); in qmi_wwan_resume()
924 info->subdriver->suspend(intf, PMSG_SUSPEND); in qmi_wwan_resume()
1021 { /* Pantech UML290 - newer firmware */
1089 {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0620)}, /* Quectel EM160R-GL */
1090 {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0800)}, /* Quectel RM500Q-GL */
1094 {QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */
1095 {QMI_FIXED_INTF(0x05c6, 0x6001, 3)}, /* 4G LTE usb-modem U901 */
1125 {QMI_QUIRK_SET_DTR(0x05c6, 0x9025, 4)}, /* Alcatel-sbell ASB TL131 TDD LTE (China Mobile) */
1223 {QMI_QUIRK_SET_DTR(0x05c6, 0x9091, 2)}, /* Compal RXM-G1 */
1225 {QMI_QUIRK_SET_DTR(0x05c6, 0x90db, 2)}, /* Compal RXM-G1 */
1228 {QMI_QUIRK_SET_DTR(0x05c6, 0x9625, 4)}, /* YUGA CLM920-NC5 */
1237 {QMI_FIXED_INTF(0x1435, 0xd111, 4)}, /* M9615A DM11-1 D51QC */
1247 {QMI_FIXED_INTF(0x16d8, 0x6007, 0)}, /* CMOTech CHE-628S */
1248 {QMI_FIXED_INTF(0x16d8, 0x6008, 0)}, /* CMOTech CMU-301 */
1249 {QMI_FIXED_INTF(0x16d8, 0x6280, 0)}, /* CMOTech CHU-628 */
1250 {QMI_FIXED_INTF(0x16d8, 0x7001, 0)}, /* CMOTech CHU-720S */
1252 {QMI_FIXED_INTF(0x16d8, 0x7003, 4)}, /* CMOTech CHU-629K */
1254 {QMI_FIXED_INTF(0x16d8, 0x7006, 5)}, /* CMOTech CGU-629 */
1255 {QMI_FIXED_INTF(0x16d8, 0x700a, 4)}, /* CMOTech CHU-629S */
1256 {QMI_FIXED_INTF(0x16d8, 0x7211, 0)}, /* CMOTech CHU-720I */
1272 {QMI_FIXED_INTF(0x19d2, 0x0055, 1)}, /* ZTE (Vodafone) K3520-Z */
1274 {QMI_FIXED_INTF(0x19d2, 0x0063, 4)}, /* ZTE (Vodafone) K3565-Z */
1275 {QMI_FIXED_INTF(0x19d2, 0x0104, 4)}, /* ZTE (Vodafone) K4505-Z */
1301 {QMI_FIXED_INTF(0x19d2, 0x0412, 4)}, /* Telewell TW-LTE 4G */
1302 {QMI_FIXED_INTF(0x19d2, 0x1008, 4)}, /* ZTE (Vodafone) K3570-Z */
1303 {QMI_FIXED_INTF(0x19d2, 0x1010, 4)}, /* ZTE (Vodafone) K3571-Z */
1305 {QMI_FIXED_INTF(0x19d2, 0x1018, 3)}, /* ZTE (Vodafone) K5006-Z */
1321 {QMI_FIXED_INTF(0x19d2, 0x1428, 2)}, /* Telewell TW-LTE 4G v2 */
1324 {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */
1325 {QMI_FIXED_INTF(0x2001, 0x7e16, 3)}, /* D-Link DWM-221 */
1326 {QMI_FIXED_INTF(0x2001, 0x7e19, 4)}, /* D-Link DWM-221 B1 */
1327 {QMI_FIXED_INTF(0x2001, 0x7e35, 4)}, /* D-Link DWM-222 */
1328 {QMI_FIXED_INTF(0x2001, 0x7e3d, 4)}, /* D-Link DWM-222 A2 */
1342 {QMI_FIXED_INTF(0x1199, 0x9051, 8)}, /* Netgear AirCard 340U */
1345 {QMI_FIXED_INTF(0x1199, 0x9055, 8)}, /* Netgear AirCard 341U */
1361 {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */
1362 {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */
1363 {QMI_QUIRK_SET_DTR(0x1bc7, 0x1031, 3)}, /* Telit LE910C1-EUX */
1364 {QMI_QUIRK_SET_DTR(0x1bc7, 0x1034, 2)}, /* Telit LE910C4-WWX */
1365 {QMI_QUIRK_SET_DTR(0x1bc7, 0x1037, 4)}, /* Telit LE910C4-WWX */
1366 {QMI_QUIRK_SET_DTR(0x1bc7, 0x1038, 3)}, /* Telit LE910C4-WWX */
1367 {QMI_QUIRK_SET_DTR(0x1bc7, 0x103a, 0)}, /* Telit LE910C4-WWX */
1394 {QMI_FIXED_INTF(0x1c9e, 0x9801, 3)}, /* Telewell TW-3G HSPA+ */
1395 {QMI_FIXED_INTF(0x1c9e, 0x9803, 4)}, /* Telewell TW-3G HSPA+ */
1396 {QMI_FIXED_INTF(0x1c9e, 0x9b01, 3)}, /* XS Stick W100-2 from 4G Systems */
1416 {QMI_FIXED_INTF(0x1e2d, 0x00f3, 0)}, /* Cinterion MV32-W-A RmNet */
1417 {QMI_FIXED_INTF(0x1e2d, 0x00f4, 0)}, /* Cinterion MV32-W-B RmNet */
1434 {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */
1436 {QMI_QUIRK_SET_DTR(0x22de, 0x9051, 2)}, /* Hucom Wireless HM-211S/K */
1437 {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
1451 {QMI_QUIRK_SET_DTR(0x1546, 0x1312, 4)}, /* u-blox LARA-R6 01B */
1452 {QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 */
1461 {QMI_GOBI1K_DEVICE(0x1410, 0xa001)}, /* Novatel/Verizon USB-1000 */
1521 if (dev->actconfig && in quectel_ec20_detected()
1522 le16_to_cpu(dev->descriptor.idVendor) == 0x05c6 && in quectel_ec20_detected()
1523 le16_to_cpu(dev->descriptor.idProduct) == 0x9215 && in quectel_ec20_detected()
1524 dev->actconfig->desc.bNumInterfaces == 5) in quectel_ec20_detected()
1534 struct usb_interface_descriptor *desc = &intf->cur_altsetting->desc; in qmi_wwan_probe()
1541 if (!id->driver_info) { in qmi_wwan_probe()
1542 dev_dbg(&intf->dev, "setting defaults for dynamic device id\n"); in qmi_wwan_probe()
1543 id->driver_info = (unsigned long)&qmi_wwan_info; in qmi_wwan_probe()
1550 if (id->match_flags & USB_DEVICE_ID_MATCH_INT_NUMBER && in qmi_wwan_probe()
1551 desc->bInterfaceClass != USB_CLASS_VENDOR_SPEC) { in qmi_wwan_probe()
1552 dev_dbg(&intf->dev, in qmi_wwan_probe()
1554 desc->bInterfaceClass); in qmi_wwan_probe()
1555 return -ENODEV; in qmi_wwan_probe()
1559 if (quectel_ec20_detected(intf) && desc->bInterfaceNumber == 0) { in qmi_wwan_probe()
1560 dev_dbg(&intf->dev, "Quectel EC20 quirk, skipping interface 0\n"); in qmi_wwan_probe()
1561 return -ENODEV; in qmi_wwan_probe()
1566 * identical for the diagnostic- and QMI-interface, but bNumEndpoints is in qmi_wwan_probe()
1570 if (desc->bNumEndpoints == 2) in qmi_wwan_probe()
1571 return -ENODEV; in qmi_wwan_probe()
1587 info = (void *)&dev->data; in qmi_wwan_disconnect()
1588 if (info->flags & QMI_WWAN_FLAG_MUX) { in qmi_wwan_disconnect()
1594 netdev_for_each_upper_dev_rcu(dev->net, ldev, iter) in qmi_wwan_disconnect()
1599 info->flags &= ~QMI_WWAN_FLAG_MUX; in qmi_wwan_disconnect()