Lines Matching +full:ssc +full:- +full:mode

3 /*-
4 * SPDX-License-Identifier: BSD-2-Clause
6 * Copyright (c) 2001-2003, 2005, 2008
32 /*-
104 "pulse capture mode: 0/1/2=disabled/CTS/DCD; add 0x10 to invert");
110 "set to 1 to mark terminals as consoles when in device mode");
130 static int ucom_cons_unit = -1;
199 ucom_unrhdr = new_unrhdr(0, UCOM_UNIT_MAX - 1, NULL); in ucom_init()
202 SYSINIT(ucom_init, SI_SUB_KLD - 1, SI_ORDER_ANY, ucom_init, NULL);
218 SYSUNINIT(ucom_uninit, SI_SUB_KLD - 3, SI_ORDER_ANY, ucom_uninit, NULL);
234 return (-1); in ucom_unit_alloc()
261 * before calling into the ucom-layer!
264 ucom_attach(struct ucom_super_softc *ssc, struct ucom_softc *sc, in ucom_attach() argument
279 ssc->sc_unit = ucom_unit_alloc(); in ucom_attach()
280 if (ssc->sc_unit == -1) in ucom_attach()
284 snprintf(ssc->sc_ttyname, sizeof(ssc->sc_ttyname), in ucom_attach()
285 UCOM_TTY_PREFIX "%d", ssc->sc_unit); in ucom_attach()
288 error = usb_proc_create(&ssc->sc_tq, mtx, "ucom", USB_PRI_MED); in ucom_attach()
290 ucom_unit_free(ssc->sc_unit); in ucom_attach()
293 ssc->sc_subunits = subunits; in ucom_attach()
294 ssc->sc_flag = UCOM_FLAG_ATTACHED | in ucom_attach()
295 UCOM_FLAG_FREE_UNIT | (ssc->sc_flag & UCOM_FLAG_DEVICE_MODE); in ucom_attach()
297 if (callback->ucom_free == NULL) in ucom_attach()
298 ssc->sc_flag |= UCOM_FLAG_WAIT_REFS; in ucom_attach()
301 ucom_ref(ssc); in ucom_attach()
303 for (subunit = 0; subunit < ssc->sc_subunits; subunit++) { in ucom_attach()
305 sc[subunit].sc_super = ssc; in ucom_attach()
310 error = ucom_attach_tty(ssc, &sc[subunit]); in ucom_attach()
312 ucom_detach(ssc, &sc[0]); in ucom_attach()
316 ucom_ref(ssc); in ucom_attach()
323 sc->sc_tty, ssc->sc_unit, ssc->sc_subunits); in ucom_attach()
330 * by "ssc" and "sc" is zero or has already been detached.
333 ucom_detach(struct ucom_super_softc *ssc, struct ucom_softc *sc) in ucom_detach() argument
337 if (!(ssc->sc_flag & UCOM_FLAG_ATTACHED)) in ucom_detach()
340 if (ssc->sc_sysctl_ttyname != NULL) { in ucom_detach()
341 sysctl_remove_oid(ssc->sc_sysctl_ttyname, 1, 0); in ucom_detach()
342 ssc->sc_sysctl_ttyname = NULL; in ucom_detach()
345 if (ssc->sc_sysctl_ttyports != NULL) { in ucom_detach()
346 sysctl_remove_oid(ssc->sc_sysctl_ttyports, 1, 0); in ucom_detach()
347 ssc->sc_sysctl_ttyports = NULL; in ucom_detach()
350 usb_proc_drain(&ssc->sc_tq); in ucom_detach()
352 for (subunit = 0; subunit < ssc->sc_subunits; subunit++) { in ucom_detach()
354 ucom_detach_tty(ssc, &sc[subunit]); in ucom_detach()
360 usb_proc_free(&ssc->sc_tq); in ucom_detach()
362 ucom_unref(ssc); in ucom_detach()
364 if (ssc->sc_flag & UCOM_FLAG_WAIT_REFS) in ucom_detach()
365 ucom_drain(ssc); in ucom_detach()
368 ssc->sc_flag &= ~UCOM_FLAG_ATTACHED; in ucom_detach()
372 ucom_drain(struct ucom_super_softc *ssc) in ucom_drain() argument
375 while (ssc->sc_refs > 0) { in ucom_drain()
413 ucom_attach_tty(struct ucom_super_softc *ssc, struct ucom_softc *sc) in ucom_attach_tty() argument
418 tp = tty_alloc_mutex(&ucom_class, sc, sc->sc_mtx); in ucom_attach_tty()
424 if (sc->sc_callback->ucom_tty_name) { in ucom_attach_tty()
425 sc->sc_callback->ucom_tty_name(sc, buf, in ucom_attach_tty()
426 sizeof(buf), ssc->sc_unit, sc->sc_subunit); in ucom_attach_tty()
430 if (ssc->sc_subunits > 1) { in ucom_attach_tty()
433 ssc->sc_unit, sc->sc_subunit); in ucom_attach_tty()
437 ssc->sc_unit); in ucom_attach_tty()
442 sc->sc_tty = tp; in ucom_attach_tty()
444 sc->sc_pps.ppscap = PPS_CAPTUREBOTH; in ucom_attach_tty()
445 sc->sc_pps.driver_abi = PPS_ABI_VERSION; in ucom_attach_tty()
446 sc->sc_pps.driver_mtx = sc->sc_mtx; in ucom_attach_tty()
447 pps_init_abi(&sc->sc_pps); in ucom_attach_tty()
453 (ssc->sc_unit == ucom_cons_unit) && in ucom_attach_tty()
454 (sc->sc_subunit == ucom_cons_subunit)) { in ucom_attach_tty()
456 ssc->sc_unit, sc->sc_subunit); in ucom_attach_tty()
467 sc->sc_flag |= UCOM_FLAG_CONSOLE; in ucom_attach_tty()
468 ucom_open(ucom_cons_softc->sc_tty); in ucom_attach_tty()
469 ucom_param(ucom_cons_softc->sc_tty, &tp->t_termios_init_in); in ucom_attach_tty()
473 if ((ssc->sc_flag & UCOM_FLAG_DEVICE_MODE) != 0 && in ucom_attach_tty()
480 cp->cn_ops = &ucom_cnops; in ucom_attach_tty()
481 cp->cn_arg = NULL; in ucom_attach_tty()
482 cp->cn_pri = CN_NORMAL; in ucom_attach_tty()
483 strlcpy(cp->cn_name, "tty", sizeof(cp->cn_name)); in ucom_attach_tty()
484 strlcat(cp->cn_name, buf, sizeof(cp->cn_name)); in ucom_attach_tty()
486 sc->sc_consdev = cp; in ucom_attach_tty()
495 ucom_detach_tty(struct ucom_super_softc *ssc, struct ucom_softc *sc) in ucom_detach_tty() argument
497 struct tty *tp = sc->sc_tty; in ucom_detach_tty()
499 DPRINTF("sc = %p, tp = %p\n", sc, sc->sc_tty); in ucom_detach_tty()
501 if (sc->sc_consdev != NULL) { in ucom_detach_tty()
502 cnremove(sc->sc_consdev); in ucom_detach_tty()
503 free(sc->sc_consdev, M_USBDEV); in ucom_detach_tty()
504 sc->sc_consdev = NULL; in ucom_detach_tty()
507 if (sc->sc_flag & UCOM_FLAG_CONSOLE) { in ucom_detach_tty()
509 ucom_close(ucom_cons_softc->sc_tty); in ucom_detach_tty()
510 sc->sc_flag &= ~UCOM_FLAG_CONSOLE; in ucom_detach_tty()
518 sc->sc_flag |= UCOM_FLAG_GONE; in ucom_detach_tty()
519 sc->sc_flag &= ~(UCOM_FLAG_HL_READY | UCOM_FLAG_LL_READY); in ucom_detach_tty()
537 if (sc->sc_callback->ucom_stop_read) in ucom_detach_tty()
538 (sc->sc_callback->ucom_stop_read) (sc); in ucom_detach_tty()
539 if (sc->sc_callback->ucom_stop_write) in ucom_detach_tty()
540 (sc->sc_callback->ucom_stop_write) (sc); in ucom_detach_tty()
546 ucom_set_pnpinfo_usb(struct ucom_super_softc *ssc, device_t dev) in ucom_set_pnpinfo_usb() argument
553 "%d ttyports=%d", ssc->sc_unit, ssc->sc_subunits); in ucom_set_pnpinfo_usb()
557 iface_index = uaa->info.bIfaceIndex; in ucom_set_pnpinfo_usb()
559 if (usbd_set_pnpinfo(uaa->device, iface_index, buf) != 0) in ucom_set_pnpinfo_usb()
563 * The following information is also replicated in the PNP-info in ucom_set_pnpinfo_usb()
566 if (ssc->sc_sysctl_ttyname == NULL) { in ucom_set_pnpinfo_usb()
567 ssc->sc_sysctl_ttyname = SYSCTL_ADD_STRING(NULL, in ucom_set_pnpinfo_usb()
569 OID_AUTO, "ttyname", CTLFLAG_RD, ssc->sc_ttyname, 0, in ucom_set_pnpinfo_usb()
572 if (ssc->sc_sysctl_ttyports == NULL) { in ucom_set_pnpinfo_usb()
573 ssc->sc_sysctl_ttyports = SYSCTL_ADD_INT(NULL, in ucom_set_pnpinfo_usb()
576 NULL, ssc->sc_subunits, "Number of ports"); in ucom_set_pnpinfo_usb()
581 ucom_set_usb_mode(struct ucom_super_softc *ssc, enum usb_hc_mode usb_mode) in ucom_set_usb_mode() argument
586 ssc->sc_flag |= UCOM_FLAG_DEVICE_MODE; in ucom_set_usb_mode()
589 ssc->sc_flag &= ~UCOM_FLAG_DEVICE_MODE; in ucom_set_usb_mode()
608 struct ucom_super_softc *ssc = sc->sc_super; in ucom_command_barrier() local
615 if (usb_proc_is_gone(&ssc->sc_tq)) { in ucom_command_barrier()
620 task = usb_proc_msignal(&ssc->sc_tq, &dummy, &dummy); in ucom_command_barrier()
621 error = usb_proc_mwait_sig(&ssc->sc_tq, task, task); in ucom_command_barrier()
622 if (error == 0 && sc->sc_tty != NULL && tty_gone(sc->sc_tty)) in ucom_command_barrier()
632 struct ucom_super_softc *ssc = sc->sc_super; in ucom_queue_command() local
638 if (usb_proc_is_gone(&ssc->sc_tq)) { in ucom_queue_command()
648 usb_proc_msignal(&ssc->sc_tq, t0, t1); in ucom_queue_command()
651 task->hdr.pm_callback = fn; in ucom_queue_command()
652 task->sc = sc; in ucom_queue_command()
659 task->termios_copy = *pt; in ucom_queue_command()
665 error = usb_proc_mwait_sig(&ssc->sc_tq, t0, t1); in ucom_queue_command()
668 if (error == 0 && sc->sc_tty != NULL && tty_gone(sc->sc_tty)) in ucom_queue_command()
679 sc->sc_last_start_xfer = &task->hdr; in ucom_queue_command()
687 struct tty *tp = sc->sc_tty; in ucom_shutdown()
696 if (tp->t_termios.c_cflag & HUPCL) { in ucom_shutdown()
709 struct ucom_super_softc *ssc = sc->sc_super; in ucom_cfg_is_gone() local
711 return (usb_proc_is_gone(&ssc->sc_tq)); in ucom_cfg_is_gone()
719 struct ucom_softc *sc = task->sc; in ucom_cfg_start_transfers()
721 if (!(sc->sc_flag & UCOM_FLAG_LL_READY)) { in ucom_cfg_start_transfers()
724 if (!(sc->sc_flag & UCOM_FLAG_HL_READY)) { in ucom_cfg_start_transfers()
729 if (_task == sc->sc_last_start_xfer) in ucom_cfg_start_transfers()
730 sc->sc_flag |= UCOM_FLAG_GP_DATA; in ucom_cfg_start_transfers()
732 if (sc->sc_callback->ucom_start_read) { in ucom_cfg_start_transfers()
733 (sc->sc_callback->ucom_start_read) (sc); in ucom_cfg_start_transfers()
735 if (sc->sc_callback->ucom_start_write) { in ucom_cfg_start_transfers()
736 (sc->sc_callback->ucom_start_write) (sc); in ucom_cfg_start_transfers()
743 if (!(sc->sc_flag & UCOM_FLAG_HL_READY)) { in ucom_start_transfers()
750 if (sc->sc_callback->ucom_start_read) { in ucom_start_transfers()
751 (sc->sc_callback->ucom_start_read) (sc); in ucom_start_transfers()
753 if (sc->sc_callback->ucom_start_write) { in ucom_start_transfers()
754 (sc->sc_callback->ucom_start_write) (sc); in ucom_start_transfers()
763 struct ucom_softc *sc = task->sc; in ucom_cfg_open()
767 if (sc->sc_flag & UCOM_FLAG_LL_READY) { in ucom_cfg_open()
771 sc->sc_flag |= UCOM_FLAG_LL_READY; in ucom_cfg_open()
773 if (sc->sc_callback->ucom_cfg_open) { in ucom_cfg_open()
774 (sc->sc_callback->ucom_cfg_open) (sc); in ucom_cfg_open()
777 usb_pause_mtx(sc->sc_mtx, hz / 10); in ucom_cfg_open()
790 if (sc->sc_flag & UCOM_FLAG_GONE) { in ucom_open()
793 if (sc->sc_flag & UCOM_FLAG_HL_READY) { in ucom_open()
799 if (sc->sc_callback->ucom_pre_open) { in ucom_open()
804 error = (sc->sc_callback->ucom_pre_open) (sc); in ucom_open()
808 sc->sc_flag |= UCOM_FLAG_HL_READY; in ucom_open()
811 sc->sc_flag &= ~UCOM_FLAG_GP_DATA; in ucom_open()
813 sc->sc_lsr = 0; in ucom_open()
814 sc->sc_msr = 0; in ucom_open()
815 sc->sc_mcr = 0; in ucom_open()
818 sc->sc_pls_curr = 0; in ucom_open()
819 sc->sc_pls_set = 0; in ucom_open()
820 sc->sc_pls_clr = 0; in ucom_open()
823 sc->sc_jitterbuf_in = 0; in ucom_open()
824 sc->sc_jitterbuf_out = 0; in ucom_open()
827 &sc->sc_open_task[0].hdr, in ucom_open()
828 &sc->sc_open_task[1].hdr, true); in ucom_open()
837 &sc->sc_start_task[0].hdr, in ucom_open()
838 &sc->sc_start_task[1].hdr, true); in ucom_open()
842 if (sc->sc_tty == NULL || (sc->sc_tty->t_termios.c_cflag & CNO_RTSDTR) == 0) in ucom_open()
861 struct ucom_softc *sc = task->sc; in ucom_cfg_close()
865 if (sc->sc_flag & UCOM_FLAG_LL_READY) { in ucom_cfg_close()
866 sc->sc_flag &= ~UCOM_FLAG_LL_READY; in ucom_cfg_close()
867 if (sc->sc_callback->ucom_cfg_close) in ucom_cfg_close()
868 (sc->sc_callback->ucom_cfg_close) (sc); in ucom_cfg_close()
883 if (!(sc->sc_flag & UCOM_FLAG_HL_READY)) { in ucom_close()
890 &sc->sc_close_task[0].hdr, in ucom_close()
891 &sc->sc_close_task[1].hdr, true); in ucom_close()
893 sc->sc_flag &= ~(UCOM_FLAG_HL_READY | UCOM_FLAG_RTS_IFLOW); in ucom_close()
895 if (sc->sc_callback->ucom_stop_read) { in ucom_close()
896 (sc->sc_callback->ucom_stop_read) (sc); in ucom_close()
914 (sc->sc_flag & UCOM_FLAG_HL_READY) == 0 || in ucom_inwakeup()
915 (sc->sc_flag & UCOM_FLAG_INWAKEUP) != 0) { in ucom_inwakeup()
920 sc->sc_flag |= UCOM_FLAG_INWAKEUP; in ucom_inwakeup()
922 pos = sc->sc_jitterbuf_out; in ucom_inwakeup()
924 while (sc->sc_jitterbuf_in != pos) { in ucom_inwakeup()
927 c = (char)sc->sc_jitterbuf[pos]; in ucom_inwakeup()
929 if (ttydisc_rint(tp, c, 0) == -1) in ucom_inwakeup()
933 pos -= UCOM_JITTERBUF_SIZE; in ucom_inwakeup()
936 sc->sc_jitterbuf_out = pos; in ucom_inwakeup()
939 if ((sc->sc_jitterbuf_in == pos) && in ucom_inwakeup()
940 (sc->sc_flag & UCOM_FLAG_RTS_IFLOW)) in ucom_inwakeup()
943 sc->sc_flag &= ~UCOM_FLAG_INWAKEUP; in ucom_inwakeup()
954 if (!(sc->sc_flag & UCOM_FLAG_HL_READY)) { in ucom_ioctl()
983 if (sc->sc_callback->ucom_ioctl) { in ucom_ioctl()
984 error = (sc->sc_callback->ucom_ioctl) in ucom_ioctl()
990 error = pps_ioctl(cmd, data, &sc->sc_pps); in ucom_ioctl()
1004 if (!(sc->sc_flag & UCOM_FLAG_HL_READY)) { in ucom_modem()
1008 if (sc->sc_mcr & SER_DTR) { in ucom_modem()
1011 if (sc->sc_mcr & SER_RTS) { in ucom_modem()
1014 if (sc->sc_msr & SER_CTS) { in ucom_modem()
1017 if (sc->sc_msr & SER_DCD) { in ucom_modem()
1020 if (sc->sc_msr & SER_DSR) { in ucom_modem()
1023 if (sc->sc_msr & SER_RI) { in ucom_modem()
1029 sc->sc_mcr |= SER_DTR; in ucom_modem()
1032 sc->sc_mcr &= ~SER_DTR; in ucom_modem()
1035 sc->sc_mcr |= SER_RTS; in ucom_modem()
1038 sc->sc_mcr &= ~SER_RTS; in ucom_modem()
1040 onoff = (sc->sc_mcr & SER_DTR) ? 1 : 0; in ucom_modem()
1043 onoff = (sc->sc_mcr & SER_RTS) ? 1 : 0; in ucom_modem()
1054 struct ucom_softc *sc = task->sc; in ucom_cfg_line_state()
1061 if (!(sc->sc_flag & UCOM_FLAG_LL_READY)) { in ucom_cfg_line_state()
1067 if (sc->sc_callback->ucom_cfg_set_dtr) in ucom_cfg_line_state()
1069 if (sc->sc_callback->ucom_cfg_set_rts) in ucom_cfg_line_state()
1071 if (sc->sc_callback->ucom_cfg_set_break) in ucom_cfg_line_state()
1073 if (sc->sc_callback->ucom_cfg_set_ring) in ucom_cfg_line_state()
1077 notch_bits = (sc->sc_pls_set & sc->sc_pls_clr) & mask; in ucom_cfg_line_state()
1078 any_bits = (sc->sc_pls_set | sc->sc_pls_clr) & mask; in ucom_cfg_line_state()
1079 prev_value = sc->sc_pls_curr ^ notch_bits; in ucom_cfg_line_state()
1080 last_value = sc->sc_pls_curr; in ucom_cfg_line_state()
1083 sc->sc_pls_curr = 0; in ucom_cfg_line_state()
1084 sc->sc_pls_set = 0; in ucom_cfg_line_state()
1085 sc->sc_pls_clr = 0; in ucom_cfg_line_state()
1089 sc->sc_callback->ucom_cfg_set_dtr(sc, in ucom_cfg_line_state()
1092 sc->sc_callback->ucom_cfg_set_rts(sc, in ucom_cfg_line_state()
1095 sc->sc_callback->ucom_cfg_set_break(sc, in ucom_cfg_line_state()
1098 sc->sc_callback->ucom_cfg_set_ring(sc, in ucom_cfg_line_state()
1103 sc->sc_callback->ucom_cfg_set_dtr(sc, in ucom_cfg_line_state()
1106 sc->sc_callback->ucom_cfg_set_rts(sc, in ucom_cfg_line_state()
1109 sc->sc_callback->ucom_cfg_set_break(sc, in ucom_cfg_line_state()
1112 sc->sc_callback->ucom_cfg_set_ring(sc, in ucom_cfg_line_state()
1122 if (!(sc->sc_flag & UCOM_FLAG_HL_READY)) { in ucom_line_state()
1129 sc->sc_pls_curr |= set_bits; in ucom_line_state()
1130 sc->sc_pls_curr &= ~clear_bits; in ucom_line_state()
1131 sc->sc_pls_set |= set_bits; in ucom_line_state()
1132 sc->sc_pls_clr |= clear_bits; in ucom_line_state()
1135 * defer driver programming - we don't propagate any error from in ucom_line_state()
1139 &sc->sc_line_state_task[0].hdr, in ucom_line_state()
1140 &sc->sc_line_state_task[1].hdr, false); in ucom_line_state()
1192 struct ucom_softc *sc = task->sc; in ucom_cfg_status_change()
1201 tp = sc->sc_tty; in ucom_cfg_status_change()
1205 if (!(sc->sc_flag & UCOM_FLAG_LL_READY)) { in ucom_cfg_status_change()
1208 if (sc->sc_callback->ucom_cfg_get_status == NULL) { in ucom_cfg_status_change()
1216 (sc->sc_callback->ucom_cfg_get_status) (sc, &new_lsr, &new_msr); in ucom_cfg_status_change()
1218 if (!(sc->sc_flag & UCOM_FLAG_HL_READY)) { in ucom_cfg_status_change()
1222 msr_delta = (sc->sc_msr ^ new_msr); in ucom_cfg_status_change()
1223 lsr_delta = (sc->sc_lsr ^ new_lsr); in ucom_cfg_status_change()
1225 sc->sc_msr = new_msr; in ucom_cfg_status_change()
1226 sc->sc_lsr = new_lsr; in ucom_cfg_status_change()
1243 if ((sc->sc_pps.ppsparam.mode & PPS_CAPTUREBOTH) && in ucom_cfg_status_change()
1245 pps_capture(&sc->sc_pps); in ucom_cfg_status_change()
1246 onoff = (sc->sc_msr & pps_signal) ? 1 : 0; in ucom_cfg_status_change()
1249 pps_event(&sc->sc_pps, onoff ? PPS_CAPTUREASSERT : in ucom_cfg_status_change()
1254 onoff = (sc->sc_msr & SER_DCD) ? 1 : 0; in ucom_cfg_status_change()
1261 if ((lsr_delta & ULSR_BI) && (sc->sc_lsr & ULSR_BI)) { in ucom_cfg_status_change()
1268 if ((lsr_delta & ULSR_FE) && (sc->sc_lsr & ULSR_FE)) { in ucom_cfg_status_change()
1275 if ((lsr_delta & ULSR_PE) && (sc->sc_lsr & ULSR_PE)) { in ucom_cfg_status_change()
1288 if (sc->sc_flag & UCOM_FLAG_CONSOLE) in ucom_status_change()
1291 if (!(sc->sc_flag & UCOM_FLAG_HL_READY)) { in ucom_status_change()
1297 &sc->sc_status_task[0].hdr, in ucom_status_change()
1298 &sc->sc_status_task[1].hdr, true); in ucom_status_change()
1306 struct ucom_softc *sc = task->sc; in ucom_cfg_param()
1308 if (!(sc->sc_flag & UCOM_FLAG_LL_READY)) { in ucom_cfg_param()
1311 if (sc->sc_callback->ucom_cfg_param == NULL) { in ucom_cfg_param()
1315 (sc->sc_callback->ucom_cfg_param) (sc, &task->termios_copy); in ucom_cfg_param()
1318 usb_pause_mtx(sc->sc_mtx, hz / 10); in ucom_cfg_param()
1333 if (!(sc->sc_flag & UCOM_FLAG_HL_READY)) { in ucom_param()
1349 if (t->c_ispeed && (t->c_ispeed != t->c_ospeed)) { in ucom_param()
1355 t->c_ispeed = t->c_ospeed; in ucom_param()
1357 if (sc->sc_callback->ucom_pre_param) { in ucom_param()
1359 error = (sc->sc_callback->ucom_pre_param) (sc, t); in ucom_param()
1367 sc->sc_flag &= ~UCOM_FLAG_GP_DATA; in ucom_param()
1371 &sc->sc_param_task[0].hdr, in ucom_param()
1372 &sc->sc_param_task[1].hdr, true); in ucom_param()
1378 &sc->sc_start_task[0].hdr, in ucom_param()
1379 &sc->sc_start_task[1].hdr, true); in ucom_param()
1383 if (t->c_cflag & CRTS_IFLOW) { in ucom_param()
1384 sc->sc_flag |= UCOM_FLAG_RTS_IFLOW; in ucom_param()
1385 } else if (sc->sc_flag & UCOM_FLAG_RTS_IFLOW) { in ucom_param()
1386 sc->sc_flag &= ~UCOM_FLAG_RTS_IFLOW; in ucom_param()
1409 if (!(sc->sc_flag & UCOM_FLAG_HL_READY)) { in ucom_outwakeup()
1424 DPRINTFN(3, "sc = %p lsr 0x%02x\n", sc, sc->sc_lsr); in ucom_busy()
1431 if (sc->sc_flag & UCOM_FLAG_LSRTXIDLE) in ucom_busy()
1432 return ((sc->sc_lsr & txidle) != txidle); in ucom_busy()
1437 /*------------------------------------------------------------------------*
1443 *------------------------------------------------------------------------*/
1449 struct tty *tp = sc->sc_tty; in ucom_get_data()
1455 if (sc->sc_flag & UCOM_FLAG_CONSOLE) { in ucom_get_data()
1460 temp = ucom_cons_tx_high - ucom_cons_tx_low; in ucom_get_data()
1465 if (temp > (UCOM_CONS_BUFSIZE - ucom_cons_tx_low)) in ucom_get_data()
1466 temp = (UCOM_CONS_BUFSIZE - ucom_cons_tx_low); in ucom_get_data()
1488 !(sc->sc_flag & UCOM_FLAG_GP_DATA)) { in ucom_get_data()
1504 len -= cnt; in ucom_get_data()
1512 actlen[0] = offset - offset_orig; in ucom_get_data()
1527 struct tty *tp = sc->sc_tty; in ucom_put_data()
1533 if (sc->sc_flag & UCOM_FLAG_CONSOLE) { in ucom_put_data()
1538 temp = (UCOM_CONS_BUFSIZE - 1) - ucom_cons_rx_high + ucom_cons_rx_low; in ucom_put_data()
1543 if (temp > (UCOM_CONS_BUFSIZE - ucom_cons_rx_high)) in ucom_put_data()
1544 temp = (UCOM_CONS_BUFSIZE - ucom_cons_rx_high); in ucom_put_data()
1575 len -= res.length; in ucom_put_data()
1587 sc->sc_jitterbuf_in = 0; in ucom_put_data()
1588 sc->sc_jitterbuf_out = 0; in ucom_put_data()
1598 if (sc->sc_jitterbuf_in != sc->sc_jitterbuf_out || in ucom_put_data()
1599 ttydisc_rint(tp, buf[cnt], 0) == -1) { in ucom_put_data()
1603 pos = sc->sc_jitterbuf_in; in ucom_put_data()
1604 end = sc->sc_jitterbuf_out + in ucom_put_data()
1605 UCOM_JITTERBUF_SIZE - 1; in ucom_put_data()
1607 end -= UCOM_JITTERBUF_SIZE; in ucom_put_data()
1612 sc->sc_jitterbuf[pos] = buf[cnt]; in ucom_put_data()
1615 pos -= UCOM_JITTERBUF_SIZE; in ucom_put_data()
1618 sc->sc_jitterbuf_in = pos; in ucom_put_data()
1621 if (sc->sc_flag & UCOM_FLAG_RTS_IFLOW) in ucom_put_data()
1625 "chars\n", tp, res.length - cnt); in ucom_put_data()
1638 if (sc->sc_callback->ucom_free != NULL) in ucom_free()
1639 sc->sc_callback->ucom_free(sc); in ucom_free()
1641 ucom_unref(sc->sc_super); in ucom_free()
1644 ucom_close_refs--; in ucom_free()
1653 if (ucom_cons_unit != -1) in ucom_cnprobe()
1654 cp->cn_pri = CN_NORMAL; in ucom_cnprobe()
1656 cp->cn_pri = CN_DEAD; in ucom_cnprobe()
1658 strlcpy(cp->cn_name, "ucom", sizeof(cp->cn_name)); in ucom_cnprobe()
1688 return (-1); in ucom_cngetc()
1697 c = -1; in ucom_cngetc()
1701 ucom_outwakeup(sc->sc_tty); in ucom_cngetc()
1706 if (USB_IN_POLLING_MODE_FUNC() && sc->sc_callback->ucom_poll) in ucom_cngetc()
1707 (sc->sc_callback->ucom_poll) (sc); in ucom_cngetc()
1727 temp = (UCOM_CONS_BUFSIZE - 1) - ucom_cons_tx_high + ucom_cons_tx_low; in ucom_cnputc()
1737 ucom_outwakeup(sc->sc_tty); in ucom_cnputc()
1742 if (USB_IN_POLLING_MODE_FUNC() && sc->sc_callback->ucom_poll) { in ucom_cnputc()
1743 (sc->sc_callback->ucom_poll) (sc); in ucom_cnputc()
1750 /*------------------------------------------------------------------------*
1754 *------------------------------------------------------------------------*/
1756 ucom_ref(struct ucom_super_softc *ssc) in ucom_ref() argument
1759 ssc->sc_refs++; in ucom_ref()
1763 /*------------------------------------------------------------------------*
1767 * number. This function can be called on a zero-initialized
1769 *------------------------------------------------------------------------*/
1771 ucom_free_unit(struct ucom_super_softc *ssc) in ucom_free_unit() argument
1773 if (!(ssc->sc_flag & UCOM_FLAG_FREE_UNIT)) in ucom_free_unit()
1776 ucom_unit_free(ssc->sc_unit); in ucom_free_unit()
1778 ssc->sc_flag &= ~UCOM_FLAG_FREE_UNIT; in ucom_free_unit()
1781 /*------------------------------------------------------------------------*
1789 *------------------------------------------------------------------------*/
1791 ucom_unref(struct ucom_super_softc *ssc) in ucom_unref() argument
1796 retval = (ssc->sc_refs < 2); in ucom_unref()
1797 ssc->sc_refs--; in ucom_unref()
1801 ucom_free_unit(ssc); in ucom_unref()
1821 return ((ucom_cons_softc != NULL) ? 0 : -1); in ucom_gdbprobe()