Lines Matching refs:pty

55 extern struct pty *pty_softc;
118 static void ptslioctl(struct pty *, queue_t *, mblk_t *);
119 static void pt_sendstop(struct pty *);
120 static void ptcpollwakeup(struct pty *, int);
237 struct pty *pty; in ptslopen() local
243 pty = &pty_softc[unit]; in ptslopen()
245 mutex_enter(&pty->ptc_lock); in ptslopen()
251 if (pty->pt_ttycommon.t_writeq == NULL) { in ptslopen()
252 pty->pt_ttycommon.t_iflag = 0; in ptslopen()
253 pty->pt_ttycommon.t_cflag = (B38400 << IBSHIFT)|B38400|IFLAGS; in ptslopen()
254 pty->pt_ttycommon.t_iocpending = NULL; in ptslopen()
255 pty->pt_wbufcid = 0; in ptslopen()
256 pty->pt_ttycommon.t_size.ws_row = 0; in ptslopen()
257 pty->pt_ttycommon.t_size.ws_col = 0; in ptslopen()
258 pty->pt_ttycommon.t_size.ws_xpixel = 0; in ptslopen()
259 pty->pt_ttycommon.t_size.ws_ypixel = 0; in ptslopen()
260 } else if ((pty->pt_ttycommon.t_flags & TS_XCLUDE) && in ptslopen()
262 mutex_exit(&pty->ptc_lock); in ptslopen()
266 !(pty->pt_ttycommon.t_cflag & CLOCAL)) { in ptslopen()
267 if (!(pty->pt_flags & PF_CARR_ON)) { in ptslopen()
268 pty->pt_flags |= PF_WOPEN; in ptslopen()
269 if (!cv_wait_sig(&pty->pt_cv_flags, &pty->ptc_lock)) { in ptslopen()
270 pty->pt_flags &= ~PF_WOPEN; in ptslopen()
271 mutex_exit(&pty->ptc_lock); in ptslopen()
278 pty->pt_sdev = dev; in ptslopen()
279 q->q_ptr = WR(q)->q_ptr = pty; in ptslopen()
280 pty->pt_flags &= ~PF_SLAVEGONE; in ptslopen()
281 pty->pt_ttycommon.t_readq = pty->pt_ttycommon.t_writeq = NULL; in ptslopen()
289 mutex_exit(&pty->ptc_lock); in ptslopen()
297 mutex_enter(&pty->ptc_lock); in ptslopen()
302 pty->pt_vnode = strq2vp(q); in ptslopen()
303 VN_RELE(pty->pt_vnode); in ptslopen()
304 pty->pt_ttycommon.t_readq = q; in ptslopen()
305 pty->pt_ttycommon.t_writeq = WR(q); in ptslopen()
307 if (pty->pt_flags & PF_CARR_ON) in ptslopen()
308 cv_broadcast(&pty->pt_cv_readq); in ptslopen()
309 mutex_exit(&pty->ptc_lock); in ptslopen()
317 struct pty *pty; in ptslclose() local
325 if ((pty = (struct pty *)q->q_ptr) == NULL) in ptslclose()
334 mutex_enter(&pty->ptc_lock); in ptslclose()
335 pty->pt_ttycommon.t_readq = NULL; in ptslclose()
336 pty->pt_ttycommon.t_writeq = NULL; in ptslclose()
337 while (pty->pt_flags & PF_IOCTL) { in ptslclose()
338 pty->pt_flags |= PF_WAIT; in ptslclose()
339 cv_wait(&pty->pt_cv_flags, &pty->ptc_lock); in ptslclose()
341 pty->pt_vnode = NULL; in ptslclose()
342 mutex_exit(&pty->ptc_lock); in ptslclose()
346 mutex_enter(&pty->ptc_lock); in ptslclose()
351 ttycommon_close(&pty->pt_ttycommon); in ptslclose()
356 if (pty->pt_wbufcid) { in ptslclose()
357 pt_wbufcid = pty->pt_wbufcid; in ptslclose()
358 pty->pt_wbufcid = 0; in ptslclose()
364 pty->pt_flags &= ~(PF_WOPEN|PF_STOPPED|PF_NOSTOP); in ptslclose()
365 if (pty->pt_flags & PF_CARR_ON) { in ptslclose()
366 pty->pt_flags |= PF_SLAVEGONE; /* let the controller know */ in ptslclose()
367 ptcpollwakeup(pty, 0); /* wake up readers/selectors */ in ptslclose()
368 ptcpollwakeup(pty, FWRITE); /* wake up writers/selectors */ in ptslclose()
369 cv_broadcast(&pty->pt_cv_flags); in ptslclose()
371 pty->pt_sdev = 0; in ptslclose()
373 mutex_exit(&pty->ptc_lock); in ptslclose()
390 struct pty *pty; in ptslwput() local
393 pty = (struct pty *)q->q_ptr; in ptslwput()
395 mutex_enter(&pty->ptc_lock); in ptslwput()
400 if (!(pty->pt_flags & PF_STOPPED)) { in ptslwput()
401 pty->pt_flags |= PF_STOPPED; in ptslwput()
402 pty->pt_send |= TIOCPKT_STOP; in ptslwput()
403 ptcpollwakeup(pty, 0); in ptslwput()
409 if (pty->pt_flags & PF_STOPPED) { in ptslwput()
410 pty->pt_flags &= ~PF_STOPPED; in ptslwput()
411 pty->pt_send = TIOCPKT_START; in ptslwput()
412 ptcpollwakeup(pty, 0); in ptslwput()
414 ptcpollwakeup(pty, FREAD); /* permit controller to read */ in ptslwput()
419 ptslioctl(pty, q, mp); in ptslwput()
429 if (!(pty->pt_send & TIOCPKT_FLUSHWRITE)) { in ptslwput()
430 pty->pt_send |= TIOCPKT_FLUSHWRITE; in ptslwput()
431 ptcpollwakeup(pty, 0); in ptslwput()
445 if (!(pty->pt_send & TIOCPKT_FLUSHREAD)) { in ptslwput()
446 pty->pt_send |= TIOCPKT_FLUSHREAD; in ptslwput()
447 ptcpollwakeup(pty, 0); in ptslwput()
450 mutex_exit(&pty->ptc_lock); in ptslwput()
462 if (pty->pt_flags & PF_CARR_ON) { in ptslwput()
468 mutex_exit(&pty->ptc_lock); in ptslwput()
474 ptcpollwakeup(pty, FREAD); /* soup's on! */ in ptslwput()
487 (pty->pt_flags & PF_REMOTE) ? in ptslwput()
501 mutex_exit(&pty->ptc_lock); in ptslwput()
511 struct pty *pty = arg; in ptslreioctl() local
515 mutex_enter(&pty->ptc_lock); in ptslreioctl()
519 if (pty->pt_wbufcid == 0) { in ptslreioctl()
520 mutex_exit(&pty->ptc_lock); in ptslreioctl()
524 pty->pt_wbufcid = 0; in ptslreioctl()
525 if ((q = pty->pt_ttycommon.t_writeq) == NULL) { in ptslreioctl()
526 mutex_exit(&pty->ptc_lock); in ptslreioctl()
529 if ((mp = pty->pt_ttycommon.t_iocpending) != NULL) { in ptslreioctl()
531 pty->pt_ttycommon.t_iocpending = NULL; in ptslreioctl()
532 ptslioctl(pty, q, mp); in ptslreioctl()
534 mutex_exit(&pty->ptc_lock); in ptslreioctl()
542 ptslioctl(struct pty *pty, queue_t *q, mblk_t *mp) in ptslioctl() argument
549 ASSERT(MUTEX_HELD(&pty->ptc_lock)); in ptslioctl()
573 if (!(pty->pt_flags & PF_REMOTE)) { in ptslioctl()
574 if (!canput(pty->pt_ttycommon.t_readq)) { in ptslioctl()
575 mutex_exit(&pty->ptc_lock); in ptslioctl()
576 ttycommon_qfull(&pty->pt_ttycommon, q); in ptslioctl()
577 mutex_enter(&pty->ptc_lock); in ptslioctl()
583 pty->pt_ttycommon.t_readq, bp); in ptslioctl()
585 if (pty->pt_flags & PF_UCNTL) { in ptslioctl()
590 if (pty->pt_stuffqfirst != NULL) { in ptslioctl()
591 pty->pt_stuffqlast->b_next = bp; in ptslioctl()
592 bp->b_prev = pty->pt_stuffqlast; in ptslioctl()
594 pty->pt_stuffqfirst = bp; in ptslioctl()
598 pty->pt_stuffqlast = bp; in ptslioctl()
599 pty->pt_stuffqlen++; in ptslioctl()
600 ptcpollwakeup(pty, 0); in ptslioctl()
617 tty_common_t *tc = &pty->pt_ttycommon; in ptslioctl()
642 tty_common_t *tc = &pty->pt_ttycommon; in ptslioctl()
648 if (pty->pt_wbufcid) { in ptslioctl()
649 if (pty->pt_ttycommon.t_iocpending) in ptslioctl()
650 freemsg(pty->pt_ttycommon.t_iocpending); in ptslioctl()
651 pty->pt_ttycommon.t_iocpending = mp; in ptslioctl()
654 pty->pt_wbufcid = bufcall(sizeof (struct ttysize), in ptslioctl()
655 BPRI_HI, ptslreioctl, pty); in ptslioctl()
656 if (pty->pt_wbufcid == 0) { in ptslioctl()
660 pty->pt_ttycommon.t_iocpending = mp; in ptslioctl()
684 tty_common_t *tc = &pty->pt_ttycommon; in ptslioctl()
694 mutex_exit(&pty->ptc_lock); in ptslioctl()
696 mutex_enter(&pty->ptc_lock); in ptslioctl()
713 tty_common_t *tc = &pty->pt_ttycommon; in ptslioctl()
723 mutex_exit(&pty->ptc_lock); in ptslioctl()
725 mutex_enter(&pty->ptc_lock); in ptslioctl()
740 tty_common_t *tc = &pty->pt_ttycommon; in ptslioctl()
755 mutex_exit(&pty->ptc_lock); in ptslioctl()
757 mutex_enter(&pty->ptc_lock); in ptslioctl()
801 ttycommon_ioctl(&pty->pt_ttycommon, q, mp, &error)) != 0) { in ptslioctl()
802 if (pty->pt_wbufcid) { in ptslioctl()
803 if (pty->pt_ttycommon.t_iocpending) in ptslioctl()
804 freemsg(pty->pt_ttycommon.t_iocpending); in ptslioctl()
805 pty->pt_ttycommon.t_iocpending = mp; in ptslioctl()
808 pty->pt_wbufcid = bufcall(datasize, BPRI_HI, ptslreioctl, pty); in ptslioctl()
809 if (pty->pt_wbufcid == 0) { in ptslioctl()
813 pty->pt_ttycommon.t_iocpending = mp; in ptslioctl()
832 if (!(pty->pt_send & TIOCPKT_FLUSHREAD)) { in ptslioctl()
833 pty->pt_send |= TIOCPKT_FLUSHREAD; in ptslioctl()
834 ptcpollwakeup(pty, 0); in ptslioctl()
841 pt_sendstop(pty); in ptslioctl()
847 pt_sendstop(pty); in ptslioctl()
852 if (pty->pt_flags & PF_43UCNTL) { in ptslioctl()
856 pty->pt_ucntl = (uchar_t)cmd & 0xff; in ptslioctl()
857 ptcpollwakeup(pty, FREAD); in ptslioctl()
865 if ((pty->pt_flags & PF_UCNTL) && in ptslioctl()
868 pty->pt_ucntl = (uchar_t)cmd & 0xff; in ptslioctl()
869 ptcpollwakeup(pty, FREAD); in ptslioctl()
882 mutex_exit(&pty->ptc_lock); in ptslioctl()
884 mutex_enter(&pty->ptc_lock); in ptslioctl()
895 struct pty *pty = (struct pty *)q->q_ptr; in ptslrserv() local
902 mutex_enter(&pty->ptc_lock); in ptslrserv()
919 ptcpollwakeup((struct pty *)q->q_ptr, FWRITE); in ptslrserv()
921 mutex_exit(&pty->ptc_lock); in ptslrserv()
934 pt_sendstop(struct pty *pty) in pt_sendstop() argument
938 ASSERT(MUTEX_HELD(&pty->ptc_lock)); in pt_sendstop()
940 if ((pty->pt_ttycommon.t_cflag&CBAUD) == 0) { in pt_sendstop()
941 if (pty->pt_flags & PF_CARR_ON) { in pt_sendstop()
946 pty->pt_flags |= PF_SLAVEGONE; in pt_sendstop()
947 ptcpollwakeup(pty, 0); in pt_sendstop()
948 ptcpollwakeup(pty, FWRITE); in pt_sendstop()
952 stop = (pty->pt_ttycommon.t_iflag & IXON) && in pt_sendstop()
953 pty->pt_ttycommon.t_stopc == CTRL('s') && in pt_sendstop()
954 pty->pt_ttycommon.t_startc == CTRL('q'); in pt_sendstop()
956 if (pty->pt_flags & PF_NOSTOP) { in pt_sendstop()
958 pty->pt_send &= ~TIOCPKT_NOSTOP; in pt_sendstop()
959 pty->pt_send |= TIOCPKT_DOSTOP; in pt_sendstop()
960 pty->pt_flags &= ~PF_NOSTOP; in pt_sendstop()
961 ptcpollwakeup(pty, 0); in pt_sendstop()
965 pty->pt_send &= ~TIOCPKT_DOSTOP; in pt_sendstop()
966 pty->pt_send |= TIOCPKT_NOSTOP; in pt_sendstop()
967 pty->pt_flags |= PF_NOSTOP; in pt_sendstop()
968 ptcpollwakeup(pty, 0); in pt_sendstop()
981 ptcpollwakeup(struct pty *pty, int flag) in ptcpollwakeup() argument
983 ASSERT(MUTEX_HELD(&pty->ptc_lock)); in ptcpollwakeup()
992 if (pty->pt_flags & PF_ASYNC) in ptcpollwakeup()
993 gsignal(pty->pt_pgrp, SIGURG); in ptcpollwakeup()
1001 cv_broadcast(&pty->pt_cv_writeq); in ptcpollwakeup()
1002 if (pty->pt_flags & PF_ASYNC) in ptcpollwakeup()
1003 gsignal(pty->pt_pgrp, SIGIO); in ptcpollwakeup()
1012 cv_broadcast(&pty->pt_cv_readq); in ptcpollwakeup()
1013 if (pty->pt_flags & PF_ASYNC) in ptcpollwakeup()
1014 gsignal(pty->pt_pgrp, SIGIO); in ptcpollwakeup()