Lines Matching +full:ls +full:- +full:bits

3 /*-
4 * SPDX-License-Identifier: BSD-2-Clause
30 /*-
68 * - Add error recovery in various places; the big problem is what
70 * - Implement a Call Device for modems without multiplexed commands.
148 /* Kyocera AH-K3001V */
348 mtx_init(&sc->sc_mtx, "umodem", NULL, MTX_DEF); in umodem_attach()
349 ucom_ref(&sc->sc_super_ucom); in umodem_attach()
351 sc->sc_ctrl_iface_no = uaa->info.bIfaceNum; in umodem_attach()
352 sc->sc_iface_index[1] = uaa->info.bIfaceIndex; in umodem_attach()
353 sc->sc_udev = uaa->device; in umodem_attach()
355 umodem_get_caps(uaa, &sc->sc_cm_cap, &sc->sc_acm_cap); in umodem_attach()
363 if ((cmd == NULL) || (cmd->bLength < sizeof(*cmd))) { in umodem_attach()
364 cud = usbd_find_descriptor(uaa->device, NULL, in umodem_attach()
365 uaa->info.bIfaceIndex, UDESC_CS_INTERFACE, in umodem_attach()
368 if ((cud == NULL) || (cud->bLength < sizeof(*cud))) { in umodem_attach()
371 if (sc->sc_ctrl_iface_no == 0xFF) { in umodem_attach()
377 sc->sc_data_iface_no = 0xFF; in umodem_attach()
381 uaa->info.bIfaceIndex - 1, in umodem_attach()
382 &sc->sc_data_iface_no, &class_match); in umodem_attach()
386 uaa->info.bIfaceIndex + 1, in umodem_attach()
387 &sc->sc_data_iface_no, &class_match); in umodem_attach()
390 if (sc->sc_data_iface_no == 0xFF) in umodem_attach()
394 sc->sc_data_iface_no = cud->bSlaveInterface[0]; in umodem_attach()
397 sc->sc_data_iface_no = cmd->bDataInterface; in umodem_attach()
402 sc->sc_data_iface_no, in umodem_attach()
403 sc->sc_cm_cap & USB_CDC_CM_OVER_DATA ? "" : "no ", in umodem_attach()
404 sc->sc_acm_cap & USB_CDC_ACM_HAS_BREAK ? "" : "no "); in umodem_attach()
412 iface = usbd_get_iface(uaa->device, i); in umodem_attach()
417 if (id && (id->bInterfaceNumber == sc->sc_data_iface_no)) { in umodem_attach()
418 sc->sc_iface_index[0] = i; in umodem_attach()
419 usbd_set_parent_iface(uaa->device, i, uaa->info.bIfaceIndex); in umodem_attach()
429 sc->sc_cm_over_data = 1; in umodem_attach()
431 if (sc->sc_cm_cap & USB_CDC_CM_OVER_DATA) { in umodem_attach()
432 if (sc->sc_acm_cap & USB_CDC_ACM_HAS_FEATURE) { in umodem_attach()
434 (uaa->device, sc->sc_ctrl_iface_no, in umodem_attach()
439 sc->sc_cm_over_data = 1; in umodem_attach()
442 error = usbd_transfer_setup(uaa->device, in umodem_attach()
443 sc->sc_iface_index, sc->sc_xfer, in umodem_attach()
445 sc, &sc->sc_mtx); in umodem_attach()
451 ucom_set_usb_mode(&sc->sc_super_ucom, uaa->usb_mode); in umodem_attach()
453 error = ucom_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc, in umodem_attach()
454 &umodem_callback, &sc->sc_mtx); in umodem_attach()
459 ucom_set_pnpinfo_usb(&sc->sc_super_ucom, dev); in umodem_attach()
475 iface = usbd_get_iface(uaa->device, iface_index); in umodem_find_data_iface()
483 /* check for non-matching interface class */ in umodem_find_data_iface()
484 if (id->bInterfaceClass != UICLASS_CDC_DATA || in umodem_find_data_iface()
485 id->bInterfaceSubClass != UISUBCLASS_DATA) { in umodem_find_data_iface()
495 *p_data_no = id->bInterfaceNumber; in umodem_find_data_iface()
501 struct umodem_softc *sc = ucom->sc_parent; in umodem_start_read()
504 usbd_transfer_start(sc->sc_xfer[UMODEM_INTR_RD]); in umodem_start_read()
507 usbd_transfer_start(sc->sc_xfer[UMODEM_BULK_RD]); in umodem_start_read()
513 struct umodem_softc *sc = ucom->sc_parent; in umodem_stop_read()
516 usbd_transfer_stop(sc->sc_xfer[UMODEM_INTR_RD]); in umodem_stop_read()
519 usbd_transfer_stop(sc->sc_xfer[UMODEM_BULK_RD]); in umodem_stop_read()
525 struct umodem_softc *sc = ucom->sc_parent; in umodem_start_write()
527 usbd_transfer_start(sc->sc_xfer[UMODEM_INTR_WR]); in umodem_start_write()
528 usbd_transfer_start(sc->sc_xfer[UMODEM_BULK_WR]); in umodem_start_write()
534 struct umodem_softc *sc = ucom->sc_parent; in umodem_stop_write()
536 usbd_transfer_stop(sc->sc_xfer[UMODEM_INTR_WR]); in umodem_stop_write()
537 usbd_transfer_stop(sc->sc_xfer[UMODEM_BULK_WR]); in umodem_stop_write()
547 if ((cmd == NULL) || (cmd->bLength < sizeof(*cmd))) { in umodem_get_caps()
551 *cm = cmd->bmCapabilities; in umodem_get_caps()
554 if ((cad == NULL) || (cad->bLength < sizeof(*cad))) { in umodem_get_caps()
558 *acm = cad->bmCapabilities; in umodem_get_caps()
564 struct umodem_softc *sc = ucom->sc_parent; in umodem_cfg_get_status()
569 *lsr = sc->sc_lsr; in umodem_cfg_get_status()
570 *msr = sc->sc_msr; in umodem_cfg_get_status()
582 struct umodem_softc *sc = ucom->sc_parent; in umodem_cfg_param()
583 struct usb_cdc_line_state ls; in umodem_cfg_param() local
588 memset(&ls, 0, sizeof(ls)); in umodem_cfg_param()
590 USETDW(ls.dwDTERate, t->c_ospeed); in umodem_cfg_param()
592 ls.bCharFormat = (t->c_cflag & CSTOPB) ? in umodem_cfg_param()
595 ls.bParityType = (t->c_cflag & PARENB) ? in umodem_cfg_param()
596 ((t->c_cflag & PARODD) ? in umodem_cfg_param()
599 switch (t->c_cflag & CSIZE) { in umodem_cfg_param()
601 ls.bDataBits = 5; in umodem_cfg_param()
604 ls.bDataBits = 6; in umodem_cfg_param()
607 ls.bDataBits = 7; in umodem_cfg_param()
610 ls.bDataBits = 8; in umodem_cfg_param()
614 DPRINTF("rate=%d fmt=%d parity=%d bits=%d\n", in umodem_cfg_param()
615 UGETDW(ls.dwDTERate), ls.bCharFormat, in umodem_cfg_param()
616 ls.bParityType, ls.bDataBits); in umodem_cfg_param()
621 req.wIndex[0] = sc->sc_ctrl_iface_no; in umodem_cfg_param()
623 USETW(req.wLength, sizeof(ls)); in umodem_cfg_param()
625 ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, in umodem_cfg_param()
626 &req, &ls, 0, 1000); in umodem_cfg_param()
632 struct umodem_softc *sc = ucom->sc_parent; in umodem_cfg_open()
635 if ((sc->sc_super_ucom.sc_flag & UCOM_FLAG_DEVICE_MODE) == 0) { in umodem_cfg_open()
636 usbd_xfer_set_stall(sc->sc_xfer[UMODEM_BULK_WR]); in umodem_cfg_open()
637 usbd_xfer_set_stall(sc->sc_xfer[UMODEM_BULK_RD]); in umodem_cfg_open()
645 struct umodem_softc *sc = ucom->sc_parent; in umodem_ioctl()
652 *(int *)data = sc->sc_cm_over_data; in umodem_ioctl()
656 if (*(int *)data != sc->sc_cm_over_data) { in umodem_ioctl()
673 struct umodem_softc *sc = ucom->sc_parent; in umodem_cfg_set_dtr()
679 sc->sc_line |= UCDC_LINE_DTR; in umodem_cfg_set_dtr()
681 sc->sc_line &= ~UCDC_LINE_DTR; in umodem_cfg_set_dtr()
685 USETW(req.wValue, sc->sc_line); in umodem_cfg_set_dtr()
686 req.wIndex[0] = sc->sc_ctrl_iface_no; in umodem_cfg_set_dtr()
690 ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, in umodem_cfg_set_dtr()
697 struct umodem_softc *sc = ucom->sc_parent; in umodem_cfg_set_rts()
703 sc->sc_line |= UCDC_LINE_RTS; in umodem_cfg_set_rts()
705 sc->sc_line &= ~UCDC_LINE_RTS; in umodem_cfg_set_rts()
709 USETW(req.wValue, sc->sc_line); in umodem_cfg_set_rts()
710 req.wIndex[0] = sc->sc_ctrl_iface_no; in umodem_cfg_set_rts()
714 ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, in umodem_cfg_set_rts()
721 struct umodem_softc *sc = ucom->sc_parent; in umodem_cfg_set_break()
727 if (sc->sc_acm_cap & USB_CDC_ACM_HAS_BREAK) { in umodem_cfg_set_break()
733 req.wIndex[0] = sc->sc_ctrl_iface_no; in umodem_cfg_set_break()
737 ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, in umodem_cfg_set_break()
795 actlen -= 8; in umodem_intr_read_callback()
811 * the bits from the notify message in umodem_intr_read_callback()
823 sc->sc_lsr = 0; in umodem_intr_read_callback()
824 sc->sc_msr = 0; in umodem_intr_read_callback()
827 sc->sc_msr |= SER_RI; in umodem_intr_read_callback()
830 sc->sc_msr |= SER_DSR; in umodem_intr_read_callback()
833 sc->sc_msr |= SER_DCD; in umodem_intr_read_callback()
835 ucom_status_change(&sc->sc_ucom); in umodem_intr_read_callback()
872 if (ucom_get_data(&sc->sc_ucom, pc, 0, in umodem_write_callback()
904 ucom_put_data(&sc->sc_ucom, pc, 0, actlen); in umodem_read_callback()
925 return (usbd_find_descriptor(uaa->device, NULL, uaa->info.bIfaceIndex, in umodem_get_desc()
957 ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); in umodem_detach()
958 usbd_transfer_unsetup(sc->sc_xfer, UMODEM_N_TRANSFER); in umodem_detach()
972 if (ucom_unref(&sc->sc_super_ucom)) { in umodem_free_softc()
973 mtx_destroy(&sc->sc_mtx); in umodem_free_softc()
981 umodem_free_softc(ucom->sc_parent); in umodem_free()
987 struct umodem_softc *sc = ucom->sc_parent; in umodem_poll()
988 usbd_transfer_poll(sc->sc_xfer, UMODEM_N_TRANSFER); in umodem_poll()
1003 if ((req->bmRequestType == UT_WRITE_CLASS_INTERFACE) && in umodem_handle_request()
1004 (req->bRequest == UCDC_SET_LINE_CODING) && in umodem_handle_request()
1005 (req->wIndex[0] == sc->sc_ctrl_iface_no) && in umodem_handle_request()
1006 (req->wIndex[1] == 0x00) && in umodem_handle_request()
1007 (req->wValue[0] == 0x00) && in umodem_handle_request()
1008 (req->wValue[1] == 0x00)) { in umodem_handle_request()
1010 *plen = sizeof(sc->sc_line_coding); in umodem_handle_request()
1011 *pptr = &sc->sc_line_coding; in umodem_handle_request()
1016 } else if ((req->bmRequestType == UT_WRITE_CLASS_INTERFACE) && in umodem_handle_request()
1017 (req->wIndex[0] == sc->sc_ctrl_iface_no) && in umodem_handle_request()
1018 (req->wIndex[1] == 0x00) && in umodem_handle_request()
1019 (req->bRequest == UCDC_SET_COMM_FEATURE)) { in umodem_handle_request()
1021 *plen = sizeof(sc->sc_abstract_state); in umodem_handle_request()
1022 *pptr = &sc->sc_abstract_state; in umodem_handle_request()
1027 } else if ((req->bmRequestType == UT_WRITE_CLASS_INTERFACE) && in umodem_handle_request()
1028 (req->wIndex[0] == sc->sc_ctrl_iface_no) && in umodem_handle_request()
1029 (req->wIndex[1] == 0x00) && in umodem_handle_request()
1030 (req->bRequest == UCDC_SET_CONTROL_LINE_STATE)) { in umodem_handle_request()
1033 } else if ((req->bmRequestType == UT_WRITE_CLASS_INTERFACE) && in umodem_handle_request()
1034 (req->wIndex[0] == sc->sc_ctrl_iface_no) && in umodem_handle_request()
1035 (req->wIndex[1] == 0x00) && in umodem_handle_request()
1036 (req->bRequest == UCDC_SEND_BREAK)) { in umodem_handle_request()