Lines Matching refs:tp
61 #define CMP_CC(v,c) (tp->t_termios.c_cc[v] != _POSIX_VDISABLE && \
62 tp->t_termios.c_cc[v] == (c))
63 #define CMP_FLAG(field,opt) (tp->t_termios.c_ ## field ## flag & (opt))
92 ttydisc_open(struct tty *tp) in ttydisc_open() argument
94 ttydisc_optimize(tp); in ttydisc_open()
98 ttydisc_close(struct tty *tp) in ttydisc_close() argument
102 tp->t_flags &= ~(TF_STOPPED|TF_HIWAT|TF_ZOMBIE); in ttydisc_close()
103 tp->t_termios.c_lflag &= ~FLUSHO; in ttydisc_close()
109 tty_flush(tp, FREAD | FWRITE); in ttydisc_close()
111 if (ttyhook_hashook(tp, close)) in ttydisc_close()
112 ttyhook_close(tp); in ttydisc_close()
120 ttydisc_read_break(struct tty *tp, char *breakc, size_t breaksz) in ttydisc_read_break() argument
129 if (tp->t_termios.c_cc[c] != _POSIX_VDISABLE) \ in ttydisc_read_break()
130 breakc[n++] = tp->t_termios.c_cc[c]; \ in ttydisc_read_break()
141 ttydisc_bytesavail(struct tty *tp) in ttydisc_bytesavail() argument
147 clen = ttyinq_bytescanonicalized(&tp->t_inq); in ttydisc_bytesavail()
151 ttydisc_read_break(tp, &breakc[0], sizeof(breakc)); in ttydisc_bytesavail()
152 clen = ttyinq_findchar(&tp->t_inq, breakc, clen, &lastc); in ttydisc_bytesavail()
170 ttydisc_canonicalize(struct tty *tp) in ttydisc_canonicalize() argument
179 ttyinq_canonicalize(&tp->t_inq); in ttydisc_canonicalize()
187 ttydisc_read_break(tp, &breakc[0], sizeof(breakc)); in ttydisc_canonicalize()
188 ttyinq_canonicalize_break(&tp->t_inq, breakc); in ttydisc_canonicalize()
192 ttydisc_read_canonical(struct tty *tp, struct uio *uio, int ioflag) in ttydisc_read_canonical() argument
199 ttydisc_read_break(tp, &breakc[0], sizeof(breakc)); in ttydisc_read_canonical()
202 error = tty_wait_background(tp, curthread, SIGTTIN); in ttydisc_read_canonical()
224 clen = ttyinq_findchar(&tp->t_inq, breakc, uio->uio_resid + 1, in ttydisc_read_canonical()
229 if (tp->t_flags & TF_ZOMBIE) in ttydisc_read_canonical()
234 error = tty_wait(tp, &tp->t_inwait); in ttydisc_read_canonical()
257 error = ttyinq_read_uio(&tp->t_inq, tp, uio, clen, flen); in ttydisc_read_canonical()
267 ttydisc_read_raw_no_timer(struct tty *tp, struct uio *uio, int ioflag) in ttydisc_read_raw_no_timer() argument
269 size_t vmin = tp->t_termios.c_cc[VMIN]; in ttydisc_read_raw_no_timer()
273 MPASS(tp->t_termios.c_cc[VTIME] == 0); in ttydisc_read_raw_no_timer()
282 error = tty_wait_background(tp, curthread, SIGTTIN); in ttydisc_read_raw_no_timer()
286 error = ttyinq_read_uio(&tp->t_inq, tp, uio, in ttydisc_read_raw_no_timer()
294 if (tp->t_flags & TF_ZOMBIE) in ttydisc_read_raw_no_timer()
299 error = tty_wait(tp, &tp->t_inwait); in ttydisc_read_raw_no_timer()
306 ttydisc_read_raw_read_timer(struct tty *tp, struct uio *uio, int ioflag, in ttydisc_read_raw_read_timer() argument
309 size_t vmin = MAX(tp->t_termios.c_cc[VMIN], 1); in ttydisc_read_raw_read_timer()
310 unsigned int vtime = tp->t_termios.c_cc[VTIME]; in ttydisc_read_raw_read_timer()
314 MPASS(tp->t_termios.c_cc[VTIME] != 0); in ttydisc_read_raw_read_timer()
323 error = tty_wait_background(tp, curthread, SIGTTIN); in ttydisc_read_raw_read_timer()
327 error = ttyinq_read_uio(&tp->t_inq, tp, uio, in ttydisc_read_raw_read_timer()
346 if (tp->t_flags & TF_ZOMBIE) in ttydisc_read_raw_read_timer()
351 error = tty_timedwait(tp, &tp->t_inwait, hz); in ttydisc_read_raw_read_timer()
360 ttydisc_read_raw_interbyte_timer(struct tty *tp, struct uio *uio, int ioflag) in ttydisc_read_raw_interbyte_timer() argument
362 size_t vmin = tp->t_termios.c_cc[VMIN]; in ttydisc_read_raw_interbyte_timer()
366 MPASS(tp->t_termios.c_cc[VMIN] != 0); in ttydisc_read_raw_interbyte_timer()
367 MPASS(tp->t_termios.c_cc[VTIME] != 0); in ttydisc_read_raw_interbyte_timer()
376 error = tty_wait_background(tp, curthread, SIGTTIN); in ttydisc_read_raw_interbyte_timer()
380 error = ttyinq_read_uio(&tp->t_inq, tp, uio, in ttydisc_read_raw_interbyte_timer()
395 if (tp->t_flags & TF_ZOMBIE) in ttydisc_read_raw_interbyte_timer()
400 error = tty_wait(tp, &tp->t_inwait); in ttydisc_read_raw_interbyte_timer()
405 return ttydisc_read_raw_read_timer(tp, uio, ioflag, oresid); in ttydisc_read_raw_interbyte_timer()
409 ttydisc_read(struct tty *tp, struct uio *uio, int ioflag) in ttydisc_read() argument
413 tty_assert_locked(tp); in ttydisc_read()
419 error = ttydisc_read_canonical(tp, uio, ioflag); in ttydisc_read()
420 else if (tp->t_termios.c_cc[VTIME] == 0) in ttydisc_read()
421 error = ttydisc_read_raw_no_timer(tp, uio, ioflag); in ttydisc_read()
422 else if (tp->t_termios.c_cc[VMIN] == 0) in ttydisc_read()
423 error = ttydisc_read_raw_read_timer(tp, uio, ioflag, in ttydisc_read()
426 error = ttydisc_read_raw_interbyte_timer(tp, uio, ioflag); in ttydisc_read()
428 if (ttyinq_bytesleft(&tp->t_inq) >= tp->t_inlow || in ttydisc_read()
429 ttyinq_bytescanonicalized(&tp->t_inq) == 0) { in ttydisc_read()
431 tty_hiwat_in_unblock(tp); in ttydisc_read()
452 ttydisc_write_oproc(struct tty *tp, char c) in ttydisc_write_oproc() argument
459 #define PRINT_NORMAL() ttyoutq_write_nofrag(&tp->t_outq, &c, 1) in ttydisc_write_oproc()
471 if (tp->t_column > 0) in ttydisc_write_oproc()
472 tp->t_column--; in ttydisc_write_oproc()
477 scnt = 8 - (tp->t_column & 7); in ttydisc_write_oproc()
479 error = ttyoutq_write_nofrag(&tp->t_outq, in ttydisc_write_oproc()
487 tp->t_column += scnt; in ttydisc_write_oproc()
488 MPASS((tp->t_column % 8) == 0); in ttydisc_write_oproc()
495 error = ttyoutq_write_nofrag(&tp->t_outq, "\r\n", 2); in ttydisc_write_oproc()
503 tp->t_column = tp->t_writepos = 0; in ttydisc_write_oproc()
504 ttyinq_reprintpos_set(&tp->t_inq); in ttydisc_write_oproc()
513 if (CMP_FLAG(o, ONOCR) && tp->t_column == 0) in ttydisc_write_oproc()
518 tp->t_column = tp->t_writepos = 0; in ttydisc_write_oproc()
519 ttyinq_reprintpos_set(&tp->t_inq); in ttydisc_write_oproc()
538 ttydisc_write(struct tty *tp, struct uio *uio, int ioflag) in ttydisc_write() argument
545 tty_assert_locked(tp); in ttydisc_write()
547 if (tp->t_flags & TF_ZOMBIE) in ttydisc_write()
570 tty_unlock(tp); in ttydisc_write()
572 tty_lock(tp); in ttydisc_write()
577 if (tty_gone(tp)) { in ttydisc_write()
606 if (ttydisc_write_oproc(tp, *obstart) == 0) { in ttydisc_write()
610 tp->t_writepos = tp->t_column; in ttydisc_write()
611 ttyinq_reprintpos_set(&tp->t_inq); in ttydisc_write()
616 wlen = ttyoutq_write(&tp->t_outq, obstart, plen); in ttydisc_write()
619 tp->t_column += wlen; in ttydisc_write()
621 tp->t_writepos = tp->t_column; in ttydisc_write()
622 ttyinq_reprintpos_set(&tp->t_inq); in ttydisc_write()
629 tp->t_flags |= TF_HIWAT_OUT; in ttydisc_write()
641 ttydevsw_outwakeup(tp); in ttydisc_write()
642 if ((tp->t_flags & TF_HIWAT_OUT) == 0) in ttydisc_write()
645 error = tty_wait(tp, &tp->t_outwait); in ttydisc_write()
649 if (tp->t_flags & TF_ZOMBIE) { in ttydisc_write()
657 if (!tty_gone(tp)) in ttydisc_write()
658 ttydevsw_outwakeup(tp); in ttydisc_write()
670 ttydisc_optimize(struct tty *tp) in ttydisc_optimize() argument
672 tty_assert_locked(tp); in ttydisc_optimize()
674 if (ttyhook_hashook(tp, rint_bypass)) { in ttydisc_optimize()
675 tp->t_flags |= TF_BYPASS; in ttydisc_optimize()
676 } else if (ttyhook_hashook(tp, rint)) { in ttydisc_optimize()
677 tp->t_flags &= ~TF_BYPASS; in ttydisc_optimize()
683 tp->t_flags |= TF_BYPASS; in ttydisc_optimize()
685 tp->t_flags &= ~TF_BYPASS; in ttydisc_optimize()
690 ttydisc_modem(struct tty *tp, int open) in ttydisc_modem() argument
693 tty_assert_locked(tp); in ttydisc_modem()
696 cv_broadcast(&tp->t_dcdwait); in ttydisc_modem()
704 if (!tty_opened(tp) || CMP_FLAG(c, CLOCAL)) in ttydisc_modem()
711 tp->t_flags |= TF_ZOMBIE; in ttydisc_modem()
713 tty_signal_sessleader(tp, SIGHUP); in ttydisc_modem()
714 tty_flush(tp, FREAD|FWRITE); in ttydisc_modem()
725 ttydisc_echo_force(struct tty *tp, char c, int quote) in ttydisc_echo_force() argument
736 return ttydisc_write_oproc(tp, c); in ttydisc_echo_force()
751 return ttyoutq_write_nofrag(&tp->t_outq, ob, 4); in ttydisc_echo_force()
753 tp->t_column += 2; in ttydisc_echo_force()
754 return ttyoutq_write_nofrag(&tp->t_outq, ob, 2); in ttydisc_echo_force()
758 tp->t_column++; in ttydisc_echo_force()
759 return ttyoutq_write_nofrag(&tp->t_outq, &c, 1); in ttydisc_echo_force()
764 ttydisc_echo(struct tty *tp, char c, int quote) in ttydisc_echo() argument
775 return ttydisc_echo_force(tp, c, quote); in ttydisc_echo()
781 struct tty *tp = d; in ttydisc_reprint_char() local
783 ttydisc_echo(tp, c, quote); in ttydisc_reprint_char()
787 ttydisc_reprint(struct tty *tp) in ttydisc_reprint() argument
792 c = tp->t_termios.c_cc[VREPRINT]; in ttydisc_reprint()
794 ttydisc_echo(tp, c, 0); in ttydisc_reprint()
795 ttydisc_echo(tp, CNL, 0); in ttydisc_reprint()
796 ttyinq_reprintpos_reset(&tp->t_inq); in ttydisc_reprint()
798 ttyinq_line_iterate_from_linestart(&tp->t_inq, ttydisc_reprint_char, tp); in ttydisc_reprint()
802 struct tty *tp; member
810 struct tty *tp = data->tp; in ttydisc_recalc_charlength() local
823 ttydisc_recalc_linelength(struct tty *tp) in ttydisc_recalc_linelength() argument
825 struct ttydisc_recalc_length data = { tp, tp->t_writepos }; in ttydisc_recalc_linelength()
827 ttyinq_line_iterate_from_reprintpos(&tp->t_inq, in ttydisc_recalc_linelength()
833 ttydisc_rubchar(struct tty *tp) in ttydisc_rubchar() argument
839 if (ttyinq_peekchar(&tp->t_inq, &c, "e) != 0) in ttydisc_rubchar()
841 ttyinq_unputchar(&tp->t_inq); in ttydisc_rubchar()
849 if (tp->t_writepos >= tp->t_column) { in ttydisc_rubchar()
851 ttydisc_reprint(tp); in ttydisc_rubchar()
856 tp->t_column -= 2; in ttydisc_rubchar()
857 ttyoutq_write_nofrag(&tp->t_outq, in ttydisc_rubchar()
862 tp->t_column -= 1; in ttydisc_rubchar()
863 ttyoutq_write_nofrag(&tp->t_outq, "\b", 1); in ttydisc_rubchar()
876 prevpos = ttydisc_recalc_linelength(tp); in ttydisc_rubchar()
877 if (prevpos >= tp->t_column) in ttydisc_rubchar()
880 tablen = tp->t_column - prevpos; in ttydisc_rubchar()
884 tp->t_column = prevpos; in ttydisc_rubchar()
885 ttyoutq_write_nofrag(&tp->t_outq, in ttydisc_rubchar()
888 } else if ((tp->t_termios.c_iflag & IUTF8) != 0 && in ttydisc_rubchar()
906 if (ttyinq_peekchar(&tp->t_inq, &c, in ttydisc_rubchar()
909 ttyinq_unputchar(&tp->t_inq); in ttydisc_rubchar()
928 ttyinq_write(&tp->t_inq, bytes, in ttydisc_rubchar()
930 ttyinq_unputchar(&tp->t_inq); in ttydisc_rubchar()
946 ttyinq_write(&tp->t_inq, bytes, in ttydisc_rubchar()
948 ttyinq_unputchar(&tp->t_inq); in ttydisc_rubchar()
951 tp->t_column -= cwidth; in ttydisc_rubchar()
957 ttyoutq_write_nofrag(&tp->t_outq, in ttydisc_rubchar()
960 ttyoutq_write_nofrag(&tp->t_outq, in ttydisc_rubchar()
967 tp->t_column -= 1; in ttydisc_rubchar()
968 ttyoutq_write_nofrag(&tp->t_outq, "\b \b", 3); in ttydisc_rubchar()
972 ttydisc_echo(tp, tp->t_termios.c_cc[VERASE], 0); in ttydisc_rubchar()
980 ttydisc_rubword(struct tty *tp) in ttydisc_rubword() argument
987 if (ttyinq_peekchar(&tp->t_inq, &c, "e) != 0) in ttydisc_rubword()
991 ttydisc_rubchar(tp); in ttydisc_rubword()
1000 ttydisc_rubchar(tp); in ttydisc_rubword()
1002 if (ttyinq_peekchar(&tp->t_inq, &c, "e) != 0) in ttydisc_rubword()
1012 ttydisc_rint(struct tty *tp, char c, int flags) in ttydisc_rint() argument
1018 tty_assert_locked(tp); in ttydisc_rint()
1022 if (ttyhook_hashook(tp, rint)) in ttydisc_rint()
1023 return ttyhook_rint(tp, c, flags); in ttydisc_rint()
1025 if (tp->t_flags & TF_BYPASS) in ttydisc_rint()
1035 tty_flush(tp, FREAD|FWRITE); in ttydisc_rint()
1036 tty_signal_pgrp(tp, SIGINT); in ttydisc_rint()
1056 tp->t_flags &= ~TF_STOPPED; in ttydisc_rint()
1057 tp->t_termios.c_lflag &= ~FLUSHO; in ttydisc_rint()
1065 if (tp->t_flags & TF_LITERAL) { in ttydisc_rint()
1066 tp->t_flags &= ~TF_LITERAL; in ttydisc_rint()
1077 ttyoutq_write_nofrag(&tp->t_outq, "^\b", 2); in ttydisc_rint()
1079 ttydisc_echo(tp, c, 0); in ttydisc_rint()
1081 tp->t_flags |= TF_LITERAL; in ttydisc_rint()
1087 tp->t_termios.c_lflag &= ~FLUSHO; in ttydisc_rint()
1089 tty_flush(tp, FWRITE); in ttydisc_rint()
1090 ttydisc_echo(tp, c, 0); in ttydisc_rint()
1091 if (tp->t_inq.ti_end > 0) in ttydisc_rint()
1092 ttydisc_reprint(tp); in ttydisc_rint()
1093 tp->t_termios.c_lflag |= FLUSHO; in ttydisc_rint()
1104 tty_signal_pgrp(tp, SIGINFO); in ttydisc_rint()
1130 tty_flush(tp, FREAD|FWRITE); in ttydisc_rint()
1131 ttydisc_echo(tp, c, 0); in ttydisc_rint()
1132 tty_signal_pgrp(tp, signal); in ttydisc_rint()
1143 if ((tp->t_flags & TF_STOPPED) == 0) { in ttydisc_rint()
1144 tp->t_flags |= TF_STOPPED; in ttydisc_rint()
1156 tp->t_flags &= ~TF_STOPPED; in ttydisc_rint()
1178 ttydisc_rubchar(tp); in ttydisc_rint()
1181 while (ttydisc_rubchar(tp) == 0); in ttydisc_rint()
1185 ttydisc_rubword(tp); in ttydisc_rint()
1188 ttydisc_reprint(tp); in ttydisc_rint()
1220 if (ttyinq_write_nofrag(&tp->t_inq, ob, ol, quote) != 0) { in ttydisc_rint()
1222 ttyoutq_write_nofrag(&tp->t_outq, "\a", 1); in ttydisc_rint()
1232 if (ttyinq_bytescanonicalized(&tp->t_inq) == 0) in ttydisc_rint()
1235 tty_hiwat_in_block(tp); in ttydisc_rint()
1246 ttyinq_canonicalize(&tp->t_inq); in ttydisc_rint()
1249 ttydisc_echo(tp, c, quote); in ttydisc_rint()
1255 ttydisc_rint_simple(struct tty *tp, const void *buf, size_t len) in ttydisc_rint_simple() argument
1259 if (ttydisc_can_bypass(tp)) in ttydisc_rint_simple()
1260 return (ttydisc_rint_bypass(tp, buf, len)); in ttydisc_rint_simple()
1263 if (ttydisc_rint(tp, *cbuf, 0) != 0) in ttydisc_rint_simple()
1271 ttydisc_rint_bypass(struct tty *tp, const void *buf, size_t len) in ttydisc_rint_bypass() argument
1275 tty_assert_locked(tp); in ttydisc_rint_bypass()
1277 MPASS(tp->t_flags & TF_BYPASS); in ttydisc_rint_bypass()
1281 if (ttyhook_hashook(tp, rint_bypass)) in ttydisc_rint_bypass()
1282 return ttyhook_rint_bypass(tp, buf, len); in ttydisc_rint_bypass()
1284 ret = ttyinq_write(&tp->t_inq, buf, len, 0); in ttydisc_rint_bypass()
1285 ttyinq_canonicalize(&tp->t_inq); in ttydisc_rint_bypass()
1287 tty_hiwat_in_block(tp); in ttydisc_rint_bypass()
1293 ttydisc_rint_done(struct tty *tp) in ttydisc_rint_done() argument
1296 tty_assert_locked(tp); in ttydisc_rint_done()
1298 if (ttyhook_hashook(tp, rint_done)) in ttydisc_rint_done()
1299 ttyhook_rint_done(tp); in ttydisc_rint_done()
1302 tty_wakeup(tp, FREAD); in ttydisc_rint_done()
1304 ttydevsw_outwakeup(tp); in ttydisc_rint_done()
1308 ttydisc_rint_poll(struct tty *tp) in ttydisc_rint_poll() argument
1312 tty_assert_locked(tp); in ttydisc_rint_poll()
1314 if (ttyhook_hashook(tp, rint_poll)) in ttydisc_rint_poll()
1315 return ttyhook_rint_poll(tp); in ttydisc_rint_poll()
1323 l = ttyinq_bytesleft(&tp->t_inq); in ttydisc_rint_poll()
1324 if (l == 0 && (tp->t_flags & TF_HIWAT_IN) == 0) in ttydisc_rint_poll()
1331 ttydisc_wakeup_watermark(struct tty *tp) in ttydisc_wakeup_watermark() argument
1335 c = ttyoutq_bytesleft(&tp->t_outq); in ttydisc_wakeup_watermark()
1336 if (tp->t_flags & TF_HIWAT_OUT) { in ttydisc_wakeup_watermark()
1338 if (c < tp->t_outlow) in ttydisc_wakeup_watermark()
1342 tp->t_flags &= ~TF_HIWAT_OUT; in ttydisc_wakeup_watermark()
1348 tty_wakeup(tp, FWRITE); in ttydisc_wakeup_watermark()
1352 ttydisc_getc(struct tty *tp, void *buf, size_t len) in ttydisc_getc() argument
1355 tty_assert_locked(tp); in ttydisc_getc()
1357 if (tp->t_flags & TF_STOPPED) in ttydisc_getc()
1360 if (ttyhook_hashook(tp, getc_inject)) in ttydisc_getc()
1361 return ttyhook_getc_inject(tp, buf, len); in ttydisc_getc()
1363 len = ttyoutq_read(&tp->t_outq, buf, len); in ttydisc_getc()
1365 if (ttyhook_hashook(tp, getc_capture)) in ttydisc_getc()
1366 ttyhook_getc_capture(tp, buf, len); in ttydisc_getc()
1368 ttydisc_wakeup_watermark(tp); in ttydisc_getc()
1375 ttydisc_getc_uio(struct tty *tp, struct uio *uio) in ttydisc_getc_uio() argument
1382 tty_assert_locked(tp); in ttydisc_getc_uio()
1384 if (tp->t_flags & TF_STOPPED) in ttydisc_getc_uio()
1392 if (ttyhook_hashook(tp, getc_capture) || in ttydisc_getc_uio()
1393 ttyhook_hashook(tp, getc_inject)) { in ttydisc_getc_uio()
1396 len = ttydisc_getc(tp, buf, in ttydisc_getc_uio()
1402 tty_unlock(tp); in ttydisc_getc_uio()
1404 tty_lock(tp); in ttydisc_getc_uio()
1410 error = ttyoutq_read_uio(&tp->t_outq, tp, uio); in ttydisc_getc_uio()
1412 ttydisc_wakeup_watermark(tp); in ttydisc_getc_uio()
1420 ttydisc_getc_poll(struct tty *tp) in ttydisc_getc_poll() argument
1423 tty_assert_locked(tp); in ttydisc_getc_poll()
1425 if (tp->t_flags & TF_STOPPED) in ttydisc_getc_poll()
1428 if (ttyhook_hashook(tp, getc_poll)) in ttydisc_getc_poll()
1429 return ttyhook_getc_poll(tp); in ttydisc_getc_poll()
1431 return ttyoutq_bytesused(&tp->t_outq); in ttydisc_getc_poll()
1441 tty_putstrn(struct tty *tp, const char *p, size_t n) in tty_putstrn() argument
1445 tty_assert_locked(tp); in tty_putstrn()
1447 if (tty_gone(tp)) in tty_putstrn()
1451 ttydisc_echo_force(tp, p[i], 0); in tty_putstrn()
1453 tp->t_writepos = tp->t_column; in tty_putstrn()
1454 ttyinq_reprintpos_set(&tp->t_inq); in tty_putstrn()
1456 ttydevsw_outwakeup(tp); in tty_putstrn()
1461 tty_putchar(struct tty *tp, char c) in tty_putchar() argument
1463 return (tty_putstrn(tp, &c, 1)); in tty_putchar()