• Home
  • Raw
  • Download

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()
129 dev->header_ops = NULL; /* No header */ in qmimux_setup()
130 dev->type = ARPHRD_NONE; in qmimux_setup()
131 dev->hard_header_len = 0; in qmimux_setup()
132 dev->addr_len = 0; in qmimux_setup()
133 dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; in qmimux_setup()
134 dev->netdev_ops = &qmimux_netdev_ops; in qmimux_setup()
135 dev->mtu = 1500; 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()
195 switch (skb->data[offset + qmimux_hdr_sz] & 0xf0) { in qmimux_rx_fixup()
197 skbn->protocol = htons(ETH_P_IP); in qmimux_rx_fixup()
200 skbn->protocol = htons(ETH_P_IPV6); in qmimux_rx_fixup()
203 /* not ip - do not know what to do */ in qmimux_rx_fixup()
208 skb_put_data(skbn, skb->data + offset + qmimux_hdr_sz, pkt_len); in qmimux_rx_fixup()
210 net->stats.rx_errors++; in qmimux_rx_fixup()
229 return sysfs_emit(buf, "0x%02x\n", priv->mux_id); in mux_id_show()
253 return -ENOBUFS; in qmimux_register_device()
257 priv->mux_id = mux_id; in qmimux_register_device()
258 priv->real_dev = real_dev; in qmimux_register_device()
260 new_dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); in qmimux_register_device()
261 if (!new_dev->tstats) { in qmimux_register_device()
262 err = -ENOBUFS; in qmimux_register_device()
266 new_dev->sysfs_groups[0] = &qmi_wwan_sysfs_qmimux_attr_group; in qmimux_register_device()
296 struct net_device *real_dev = priv->real_dev; in qmimux_unregister_device()
298 free_percpu(dev->tstats); 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()
657 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_manage_power()
660 dev_dbg(&dev->intf->dev, "%s() pmcount=%d, on=%d\n", __func__, in qmi_wwan_manage_power()
661 atomic_read(&info->pmcount), on); in qmi_wwan_manage_power()
663 if ((on && atomic_add_return(1, &info->pmcount) == 1) || in qmi_wwan_manage_power()
664 (!on && atomic_dec_and_test(&info->pmcount))) { in qmi_wwan_manage_power()
668 rv = usb_autopm_get_interface(dev->intf); in qmi_wwan_manage_power()
669 dev->intf->needs_remote_wakeup = on; in qmi_wwan_manage_power()
671 usb_autopm_put_interface(dev->intf); in qmi_wwan_manage_power()
691 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_register_subdriver()
694 rv = usbnet_get_endpoints(dev, info->data); in qmi_wwan_register_subdriver()
699 if (info->control != info->data) in qmi_wwan_register_subdriver()
700 dev->status = &info->control->cur_altsetting->endpoint[0]; in qmi_wwan_register_subdriver()
703 if (!dev->status) { in qmi_wwan_register_subdriver()
704 rv = -EINVAL; in qmi_wwan_register_subdriver()
709 atomic_set(&info->pmcount, 0); in qmi_wwan_register_subdriver()
712 subdriver = usb_cdc_wdm_register(info->control, &dev->status->desc, in qmi_wwan_register_subdriver()
716 dev_err(&info->control->dev, "subdriver registration failed\n"); in qmi_wwan_register_subdriver()
722 dev->status = NULL; in qmi_wwan_register_subdriver()
725 info->subdriver = subdriver; in qmi_wwan_register_subdriver()
738 u8 intf = dev->intf->cur_altsetting->desc.bInterfaceNumber; in qmi_wwan_change_dtr()
748 u8 *buf = intf->cur_altsetting->extra; in qmi_wwan_bind()
749 int len = intf->cur_altsetting->extralen; in qmi_wwan_bind()
750 struct usb_interface_descriptor *desc = &intf->cur_altsetting->desc; in qmi_wwan_bind()
754 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_bind()
757 BUILD_BUG_ON((sizeof(((struct usbnet *)0)->data) < in qmi_wwan_bind()
761 info->control = intf; in qmi_wwan_bind()
762 info->data = intf; in qmi_wwan_bind()
771 info->data = usb_ifnum_to_if(dev->udev, in qmi_wwan_bind()
772 cdc_union->bSlaveInterface0); in qmi_wwan_bind()
773 if (desc->bInterfaceNumber != cdc_union->bMasterInterface0 || in qmi_wwan_bind()
774 !info->data) { in qmi_wwan_bind()
775 dev_err(&intf->dev, in qmi_wwan_bind()
776 "bogus CDC Union: master=%u, slave=%u\n", in qmi_wwan_bind()
777 cdc_union->bMasterInterface0, in qmi_wwan_bind()
778 cdc_union->bSlaveInterface0); in qmi_wwan_bind()
782 info->data = intf; in qmi_wwan_bind()
786 /* errors aren't fatal - we can live with the dynamic address */ in qmi_wwan_bind()
787 if (cdc_ether && cdc_ether->wMaxSegmentSize) { in qmi_wwan_bind()
788 dev->hard_mtu = le16_to_cpu(cdc_ether->wMaxSegmentSize); in qmi_wwan_bind()
789 usbnet_get_ethernet_addr(dev, cdc_ether->iMACAddress); in qmi_wwan_bind()
793 if (info->control != info->data) { in qmi_wwan_bind()
794 status = usb_driver_claim_interface(driver, info->data, dev); in qmi_wwan_bind()
800 if (status < 0 && info->control != info->data) { in qmi_wwan_bind()
801 usb_set_intfdata(info->data, NULL); in qmi_wwan_bind()
802 usb_driver_release_interface(driver, info->data); in qmi_wwan_bind()
822 if (dev->driver_info->data & QMI_WWAN_QUIRK_DTR || in qmi_wwan_bind()
823 le16_to_cpu(dev->udev->descriptor.bcdUSB) >= 0x0201) { in qmi_wwan_bind()
829 * buggy firmware told us to. Or, if device is assigned the well-known in qmi_wwan_bind()
832 if (ether_addr_equal(dev->net->dev_addr, default_modem_addr) || in qmi_wwan_bind()
833 ether_addr_equal(dev->net->dev_addr, buggy_fw_addr)) in qmi_wwan_bind()
834 eth_hw_addr_random(dev->net); in qmi_wwan_bind()
837 if (possibly_iphdr(dev->net->dev_addr)) { in qmi_wwan_bind()
838 u8 addr = dev->net->dev_addr[0]; in qmi_wwan_bind()
842 dev_addr_mod(dev->net, 0, &addr, 1); in qmi_wwan_bind()
844 dev->net->netdev_ops = &qmi_wwan_netdev_ops; in qmi_wwan_bind()
845 dev->net->sysfs_groups[0] = &qmi_wwan_sysfs_attr_group; in qmi_wwan_bind()
852 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_unbind()
856 if (info->subdriver && info->subdriver->disconnect) in qmi_wwan_unbind()
857 info->subdriver->disconnect(info->control); in qmi_wwan_unbind()
860 if (le16_to_cpu(dev->udev->descriptor.bcdUSB) >= 0x0201) { in qmi_wwan_unbind()
866 if (intf == info->control) in qmi_wwan_unbind()
867 other = info->data; in qmi_wwan_unbind()
869 other = info->control; in qmi_wwan_unbind()
877 info->subdriver = NULL; in qmi_wwan_unbind()
878 info->data = NULL; in qmi_wwan_unbind()
879 info->control = NULL; in qmi_wwan_unbind()
882 /* suspend/resume wrappers calling both usbnet and the cdc-wdm
885 * NOTE: cdc-wdm also supports pre/post_reset, but we cannot provide
891 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_suspend()
894 /* Both usbnet_suspend() and subdriver->suspend() MUST return 0 in qmi_wwan_suspend()
902 if (intf == info->control && info->subdriver && in qmi_wwan_suspend()
903 info->subdriver->suspend) in qmi_wwan_suspend()
904 ret = info->subdriver->suspend(intf, message); in qmi_wwan_suspend()
914 struct qmi_wwan_state *info = (void *)&dev->data; in qmi_wwan_resume()
916 bool callsub = (intf == info->control && info->subdriver && in qmi_wwan_resume()
917 info->subdriver->resume); in qmi_wwan_resume()
920 ret = info->subdriver->resume(intf); in qmi_wwan_resume()
925 info->subdriver->suspend(intf, PMSG_SUSPEND); in qmi_wwan_resume()
1022 { /* 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, 0x103a, 0)}, /* Telit LE910C4-WWX */
1380 {QMI_FIXED_INTF(0x1c9e, 0x9801, 3)}, /* Telewell TW-3G HSPA+ */
1381 {QMI_FIXED_INTF(0x1c9e, 0x9803, 4)}, /* Telewell TW-3G HSPA+ */
1382 {QMI_FIXED_INTF(0x1c9e, 0x9b01, 3)}, /* XS Stick W100-2 from 4G Systems */
1400 {QMI_FIXED_INTF(0x1e2d, 0x00f3, 0)}, /* Cinterion MV32-W-A RmNet */
1401 {QMI_FIXED_INTF(0x1e2d, 0x00f4, 0)}, /* Cinterion MV32-W-B RmNet */
1418 {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */
1420 {QMI_QUIRK_SET_DTR(0x22de, 0x9051, 2)}, /* Hucom Wireless HM-211S/K */
1421 {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
1432 {QMI_QUIRK_SET_DTR(0x1546, 0x1312, 4)}, /* u-blox LARA-R6 01B */
1433 {QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 */
1440 {QMI_GOBI1K_DEVICE(0x1410, 0xa001)}, /* Novatel/Verizon USB-1000 */
1500 if (dev->actconfig && in quectel_ec20_detected()
1501 le16_to_cpu(dev->descriptor.idVendor) == 0x05c6 && in quectel_ec20_detected()
1502 le16_to_cpu(dev->descriptor.idProduct) == 0x9215 && in quectel_ec20_detected()
1503 dev->actconfig->desc.bNumInterfaces == 5) in quectel_ec20_detected()
1513 struct usb_interface_descriptor *desc = &intf->cur_altsetting->desc; in qmi_wwan_probe()
1520 if (!id->driver_info) { in qmi_wwan_probe()
1521 dev_dbg(&intf->dev, "setting defaults for dynamic device id\n"); in qmi_wwan_probe()
1522 id->driver_info = (unsigned long)&qmi_wwan_info; in qmi_wwan_probe()
1529 if (id->match_flags & USB_DEVICE_ID_MATCH_INT_NUMBER && in qmi_wwan_probe()
1530 desc->bInterfaceClass != USB_CLASS_VENDOR_SPEC) { in qmi_wwan_probe()
1531 dev_dbg(&intf->dev, in qmi_wwan_probe()
1533 desc->bInterfaceClass); in qmi_wwan_probe()
1534 return -ENODEV; in qmi_wwan_probe()
1538 if (quectel_ec20_detected(intf) && desc->bInterfaceNumber == 0) { in qmi_wwan_probe()
1539 dev_dbg(&intf->dev, "Quectel EC20 quirk, skipping interface 0\n"); in qmi_wwan_probe()
1540 return -ENODEV; in qmi_wwan_probe()
1545 * identical for the diagnostic- and QMI-interface, but bNumEndpoints is in qmi_wwan_probe()
1549 if (desc->bNumEndpoints == 2) in qmi_wwan_probe()
1550 return -ENODEV; in qmi_wwan_probe()
1566 info = (void *)&dev->data; in qmi_wwan_disconnect()
1567 if (info->flags & QMI_WWAN_FLAG_MUX) { in qmi_wwan_disconnect()
1573 netdev_for_each_upper_dev_rcu(dev->net, ldev, iter) in qmi_wwan_disconnect()
1578 info->flags &= ~QMI_WWAN_FLAG_MUX; in qmi_wwan_disconnect()