Lines Matching refs:tp

99 static void ptsd_start(struct tty *tp);
100 static void ptmx_wakeup(struct tty *tp, int flag);
558 struct tty *tp;
570 tp = pti->pt_tty;
571 tty_lock(tp);
573 if ((tp->t_state & TS_ISOPEN) == 0) {
574 termioschars(&tp->t_termios); /* Set up default chars */
575 tp->t_iflag = TTYDEF_IFLAG;
576 tp->t_oflag = TTYDEF_OFLAG;
577 tp->t_lflag = TTYDEF_LFLAG;
578 tp->t_cflag = TTYDEF_CFLAG;
579 tp->t_ispeed = tp->t_ospeed = TTYDEF_SPEED;
580 ttsetwater(tp); /* would be done in xxparam() */
581 } else if (tp->t_state&TS_XCLUDE && suser(kauth_cred_get(), NULL)) {
585 if (tp->t_oproc) /* Ctrlr still around. */
586 (void)(*linesw[tp->t_line].l_modem)(tp, 1);
587 while ((tp->t_state & TS_CARR_ON) == 0) {
590 error = ttysleep(tp, TSA_CARR_ON(tp), TTIPRI | PCATCH,
595 error = (*linesw[tp->t_line].l_open)(dev, tp);
598 CLR(tp->t_state, TS_IOCTL_NOT_OK);
600 ptmx_wakeup(tp, FREAD|FWRITE);
602 tty_unlock(tp);
611 struct tty *tp;
626 tp = pti->pt_tty;
627 tty_lock(tp);
630 save_timeout = tp->t_timeout;
631 tp->t_timeout = 60;
633 err = (*linesw[tp->t_line].l_close)(tp, flag);
634 ptsd_stop(tp, FREAD|FWRITE);
635 (void) ttyclose(tp);
637 tp->t_timeout = save_timeout;
639 tty_unlock(tp);
642 ptsd_revoke_knotes(dev, tp);
655 struct tty *tp;
663 tp = pti->pt_tty;
664 tty_lock(tp);
669 while (isbackground(p, tp)) {
685 tty_unlock(tp);
688 tty_lock(tp);
694 tty_lock(tp);
696 error = ttysleep(tp, &lbolt, TTIPRI | PCATCH | PTTYBLOCK, "ptsd_bg",
701 if (tp->t_canq.c_cc == 0) {
706 error = ttysleep(tp, TSA_PTS_READ(tp), TTIPRI | PCATCH,
712 while (tp->t_canq.c_cc > 1 && uio_resid(uio) > 0) {
718 cc = min(cc, tp->t_canq.c_cc - 1);
719 cc = q_to_b(&tp->t_canq, (u_char *)buf, cc);
724 if (tp->t_canq.c_cc == 1)
725 (void) getc(&tp->t_canq);
726 if (tp->t_canq.c_cc)
729 if (tp->t_oproc)
730 error = (*linesw[tp->t_line].l_read)(tp, uio, flag);
731 ptmx_wakeup(tp, FWRITE);
733 tty_unlock(tp);
745 struct tty *tp;
751 tp = pti->pt_tty;
752 tty_lock(tp);
754 if (tp->t_oproc == 0)
757 error = (*linesw[tp->t_line].l_write)(tp, uio, flag);
759 tty_unlock(tp);
769 * Locks: Assumes tp is locked on entry, remains locked on exit
772 ptsd_start(struct tty *tp)
776 pti = ptmx_get_ioctl(minor(tp->t_dev), 0);
778 if (tp->t_state & TS_TTSTOP)
784 ptmx_wakeup(tp, FREAD);
793 ptmx_wakeup(struct tty *tp, int flag)
797 pti = ptmx_get_ioctl(minor(tp->t_dev), 0);
801 wakeup(TSA_PTC_READ(tp));
805 wakeup(TSA_PTC_WRITE(tp));
812 struct tty *tp;
823 tp = pti->pt_tty;
824 tty_lock(tp);
827 if (tp->t_oproc || (tp->t_state & TS_ISOPEN)) {
828 tty_unlock(tp);
833 if (!tp->t_oproc)
838 tp->t_oproc = ptsd_start;
839 CLR(tp->t_state, TS_ZOMBIE);
840 SET(tp->t_state, TS_IOCTL_NOT_OK);
842 tp->t_stop = ptsd_stop;
844 (void)(*linesw[tp->t_line].l_modem)(tp, 1);
845 tp->t_lflag &= ~EXTPROC;
847 tty_unlock(tp);
855 struct tty *tp;
860 tp = pti->pt_tty;
861 tty_lock(tp);
863 (void)(*linesw[tp->t_line].l_modem)(tp, 0);
873 if (tp->t_state & TS_ISOPEN) {
874 tp->t_state &= ~(TS_CARR_ON | TS_CONNECTED);
875 tp->t_state |= TS_ZOMBIE;
876 ttyflush(tp, FREAD | FWRITE);
879 tp->t_oproc = 0; /* mark closed */
881 tty_unlock(tp);
891 struct tty *tp;
898 tp = pti->pt_tty;
899 tty_lock(tp);
908 if (tp->t_state&TS_ISOPEN) {
915 sizeof(tp->t_termios));
916 uiomove((caddr_t)&tp->t_termios, cc,
929 if (tp->t_outq.c_cc && (tp->t_state&TS_TTSTOP) == 0)
932 if ((tp->t_state & TS_CONNECTED) == 0)
938 error = ttysleep(tp, TSA_PTC_READ(tp), TTIPRI | PCATCH, "ptmx_in", 0);
945 cc = q_to_b(&tp->t_outq, (u_char *)buf, min(uio_resid(uio), BUFSIZ));
950 (*linesw[tp->t_line].l_start)(tp);
953 tty_unlock(tp);
963 ptsd_stop(struct tty *tp, int flush)
968 pti = ptmx_get_ioctl(minor(tp->t_dev), 0);
983 ptmx_wakeup(tp, flag);
1001 ttypend(struct tty *tp)
1006 CLR(tp->t_lflag, PENDIN);
1007 SET(tp->t_state, TS_TYPEN);
1008 tq = tp->t_rawq;
1009 tp->t_rawq.c_cc = 0;
1010 tp->t_rawq.c_cf = tp->t_rawq.c_cl = 0;
1012 ttyinput(c, tp);
1013 CLR(tp->t_state, TS_TYPEN);
1022 ttnread(struct tty *tp)
1026 if (ISSET(tp->t_lflag, PENDIN))
1027 ttypend(tp);
1028 nread = tp->t_canq.c_cc;
1029 if (!ISSET(tp->t_lflag, ICANON)) {
1030 nread += tp->t_rawq.c_cc;
1031 if (nread < tp->t_cc[VMIN] && tp->t_cc[VTIME] == 0)
1041 struct tty *tp;
1046 tp = pti->pt_tty;
1048 if (tp == NULL)
1051 tty_lock(tp);
1055 if (ISSET(tp->t_state, TS_ZOMBIE)) {
1060 retval = ttnread(tp);
1065 selrecord(p, &tp->t_rsel, wql);
1068 if (ISSET(tp->t_state, TS_ZOMBIE)) {
1073 if ((tp->t_outq.c_cc <= tp->t_lowat) &&
1074 ISSET(tp->t_state, TS_CONNECTED)) {
1075 retval = tp->t_hiwat - tp->t_outq.c_cc;
1079 selrecord(p, &tp->t_wsel, wql);
1083 tty_unlock(tp);
1090 struct tty *tp;
1096 tp = pti->pt_tty;
1097 tty_lock(tp);
1099 if ((tp->t_state & TS_CONNECTED) == 0) {
1108 if ((tp->t_state&TS_ISOPEN) &&
1109 tp->t_outq.c_cc && (tp->t_state&TS_TTSTOP) == 0) {
1110 retval = tp->t_outq.c_cc;
1116 if ((tp->t_state&TS_ISOPEN) &&
1126 if (tp->t_state&TS_ISOPEN) {
1128 if (tp->t_canq.c_cc == 0) {
1133 retval = (TTYHOG - 2) - (tp->t_rawq.c_cc + tp->t_canq.c_cc);
1137 if (tp->t_canq.c_cc == 0 && (tp->t_lflag&ICANON)) {
1149 tty_unlock(tp);
1154 ptmx_stop(__unused struct tty *tp, __unused int flush)
1168 struct tty *tp;
1178 tp = pti->pt_tty;
1179 tty_lock(tp);
1182 if ((tp->t_state&TS_ISOPEN) == 0)
1185 if (tp->t_canq.c_cc)
1188 tp->t_canq.c_cc < TTYHOG - 1) {
1191 cc = min(cc, TTYHOG - 1 - tp->t_canq.c_cc);
1197 if ((tp->t_state & TS_ISOPEN) == 0) {
1205 cc = b_to_q((u_char *)cp, cc, &tp->t_canq);
1220 (void) putc(0, &tp->t_canq);
1221 ttwakeup(tp);
1222 wakeup(TSA_PTS_READ(tp));
1233 if ((tp->t_state & TS_ISOPEN) == 0) {
1241 if ((tp->t_rawq.c_cc + tp->t_canq.c_cc) >= TTYHOG - 2 &&
1242 (tp->t_canq.c_cc > 0 || !(tp->t_lflag&ICANON))) {
1243 wakeup(TSA_HUP_OR_INPUT(tp));
1246 (*linesw[tp->t_line].l_rint)(*cp++, tp);
1254 tty_unlock(tp);
1262 if ((tp->t_state & TS_CONNECTED) == 0) {
1275 error = ttysleep(tp, TSA_PTC_WRITE(tp), TTOPRI | PCATCH, "ptmx_out", 0);
1288 struct tty *tp;
1296 tp = pti->pt_tty;
1297 tty_lock(tp);
1299 cc = tp->t_cc;
1305 if (cdevsw[major(dev)].d_open == ptmx_open && ISSET(tp->t_state, TS_IOCTL_NOT_OK))
1310 * ttywflush(tp) will hang if there are characters in the outq.
1321 ptmx_wakeup(tp, FREAD);
1323 tp->t_lflag |= EXTPROC;
1325 if ((tp->t_lflag & EXTPROC) &&
1328 ptmx_wakeup(tp, FREAD);
1330 tp->t_lflag &= ~EXTPROC;
1340 * in that case, tp must be the controlling terminal.
1342 *(int *)data = tp->t_pgrp ? tp->t_pgrp->pg_id : 0;
1372 ttyflush(tp, FREAD|FWRITE);
1384 ndflush(&tp->t_outq, tp->t_outq.c_cc);
1393 if ((tp->t_lflag&NOFLSH) == 0)
1394 ttyflush(tp, FREAD|FWRITE);
1396 ((tp->t_lflag&NOKERNINFO) == 0))
1397 ttyinfo_locked(tp);
1404 tty_unlock(tp);
1405 tty_pgsignal(tp, *(unsigned int *)data, 1);
1406 tty_lock(tp);
1449 error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, p);
1451 error = ttioctl_locked(tp, cmd, data, flag, p);
1457 ptmx_wakeup(tp, FREAD);
1479 if ((tp->t_lflag&EXTPROC) && (pti->pt_flags & PF_PKT)) {
1495 ptmx_wakeup(tp, FREAD);
1500 stop = (tp->t_iflag & IXON) && CCEQ(cc[VSTOP], CTRL('s'))
1507 ptmx_wakeup(tp, FREAD);
1514 ptmx_wakeup(tp, FREAD);
1518 tty_unlock(tp);
1551 struct tty *tp;
1558 if (pti != NULL && (tp = pti->pt_tty) != NULL) {
1559 tty_lock(tp);
1561 KNOTE_DETACH(&tp->t_rsel.si_note, kn);
1563 KNOTE_DETACH(&tp->t_wsel.si_note, kn);
1564 tty_unlock(tp);
1576 struct tty *tp;
1592 if (pti == NULL || (tp = pti->pt_tty) == NULL) {
1600 tty_lock(tp);
1603 kn->kn_data = ttnread(tp);
1606 if (ISSET(tp->t_state, TS_ZOMBIE)) {
1611 if ((tp->t_outq.c_cc <= tp->t_lowat) &&
1612 ISSET(tp->t_state, TS_CONNECTED)) {
1613 kn->kn_data = tp->t_outq.c_cn - tp->t_outq.c_cc;
1616 if (ISSET(tp->t_state, TS_ZOMBIE)) {
1623 tty_unlock(tp);
1633 struct tty *tp = NULL;
1646 tp = pti->pt_tty;
1647 tty_lock(tp);
1655 KNOTE_ATTACH(&tp->t_rsel.si_note, kn);
1658 KNOTE_ATTACH(&tp->t_wsel.si_note, kn);
1665 tty_unlock(tp);
1681 ptsd_revoke_knotes(dev_t dev, struct tty *tp)
1689 tty_lock(tp);
1691 list = &tp->t_rsel.si_note;
1695 list = &tp->t_wsel.si_note;
1699 tty_unlock(tp);
1702 tty_lock(tp);
1703 ttwakeup(tp);
1704 ttwwakeup(tp);
1705 tty_unlock(tp);
1708 tty_lock(tp);
1710 list = &tp->t_rsel.si_note;
1716 list = &tp->t_wsel.si_note;
1722 tty_unlock(tp);