Lines Matching refs:uqi
305 sm_is_flag_set(sm_uqi_t *uqi, uint_t flag, uint_t howmany) in sm_is_flag_set() argument
312 for (lqi = uqi->sm_lqs; lqi; lqi = lqi->sm_nlqi) { in sm_is_flag_set()
324 sm_uwq_error(sm_uqi_t *uqi) in sm_uwq_error() argument
326 return (sm_is_flag_set(uqi, (WERROR_MODE|HANGUP_MODE), uqi->sm_nlqs)); in sm_uwq_error()
334 sm_q_count(sm_uqi_t *uqi, uint_t flag) in sm_q_count() argument
339 for (lqi = uqi->sm_lqs; lqi; lqi = lqi->sm_nlqi) { in sm_q_count()
351 sm_qs_without(sm_uqi_t *uqi, uint_t flag, uint_t ioflag) in sm_qs_without() argument
356 for (lqi = uqi->sm_lqs; lqi; lqi = lqi->sm_nlqi) { in sm_qs_without()
368 sm_good_qs(sm_uqi_t *uqi) in sm_good_qs() argument
370 return (sm_q_count(uqi, (WERROR_MODE|HANGUP_MODE))); in sm_good_qs()
374 sm_cnt_oqs(sm_uqi_t *uqi) in sm_cnt_oqs() argument
376 return (sm_qs_without(uqi, (WERROR_MODE|HANGUP_MODE), in sm_cnt_oqs()
474 sm_uqi_t *uqi; in sm_associate() local
485 (uqi = get_uqi(sm_ssp, unit)) == 0) { in sm_associate()
486 sm_dbg('@', (" invalid: lqi=0x%p lui=0x%p:", plqi, uqi)); in sm_associate()
507 LOCK_UNIT(uqi); in sm_associate()
512 plqi->sm_ttycommon->t_cflag = uqi->sm_ttycommon-> in sm_associate()
514 plqi->sm_ttycommon->t_flags = uqi->sm_ttycommon-> in sm_associate()
516 plqi->sm_uqi = uqi; in sm_associate()
527 plqi->sm_nlqi = uqi->sm_lqs; in sm_associate()
528 uqi->sm_lqs = plqi; in sm_associate()
531 if (uqi->sm_lqs) { in sm_associate()
533 for (lq = uqi->sm_lqs; lq->sm_nlqi; in sm_associate()
538 uqi->sm_lqs = plqi; in sm_associate()
540 uqi->sm_nlqs++; in sm_associate()
544 UNLOCK_UNIT(uqi); in sm_associate()
554 if ((uqi->sm_flags & FULLY_OPEN) || uqi->sm_waitq) in sm_associate()
592 sm_uqi_t *uqi; in sm_disassociate() local
602 (uqi = get_uqi(sm_ssp, unit)) == 0) { in sm_disassociate()
603 sm_dbg('@', ("invalid: lqi=0x%p lui=0x%p", plqi, uqi)); in sm_disassociate()
657 sm_uqi_t *uqi = q->q_ptr; in sm_sched_uqcb() local
659 if (uqi->sm_ttybid != 0) in sm_sched_uqcb()
660 qunbufcall(q, uqi->sm_ttybid); in sm_sched_uqcb()
664 uqi->sm_ttybid = qbufcall(q, memreq, pri, fn, uqi); in sm_sched_uqcb()
671 sm_reenable_q(sm_uqi_t *uqi) in sm_reenable_q() argument
673 queue_t *wq = SM_WQ(uqi); in sm_reenable_q()
675 if ((uqi->sm_flags & SM_STOPPED) == 0) { in sm_reenable_q()
686 sm_senddown(sm_uqi_t *uqi) in sm_senddown() argument
690 for (lqi = uqi->sm_lqs; lqi != 0; lqi = lqi->sm_nlqi) { in sm_senddown()
703 sm_dupmsg(sm_uqi_t *uqi, mblk_t *mp) in sm_dupmsg() argument
708 for (lqi = uqi->sm_lqs; lqi != 0; lqi = lqi->sm_nlqi) { in sm_dupmsg()
723 for (flqi = uqi->sm_lqs; flqi != lqi; in sm_dupmsg()
731 return (sm_cnt_oqs(uqi) * msgdsize(mp)); in sm_dupmsg()
744 sm_cansenddown(sm_uqi_t *uqi) in sm_cansenddown() argument
749 if (uqi->sm_lqs == 0) in sm_cansenddown()
752 for (lqi = uqi->sm_lqs; lqi != 0; lqi = lqi->sm_nlqi) { in sm_cansenddown()
767 register sm_uqi_t *uqi = (sm_uqi_t *)q->q_ptr; in sm_putqs() local
772 if (uqi->sm_lqs == 0 || (uqi->sm_flags & WERROR_MODE)) { in sm_putqs()
774 sm_dbg('Q', ("sm_putqs: freeing (0x%p 0x%p).\n", uqi->sm_lqs, in sm_putqs()
775 uqi->sm_flags)); in sm_putqs()
777 } else if (pri != BPRI_HI && sm_cansenddown(uqi) == 0) { in sm_putqs()
781 } else if ((memreq = sm_dupmsg(uqi, mp)) == 0) { in sm_putqs()
783 sm_senddown(uqi); in sm_putqs()
874 sm_uqi_t *uqi; in sm_link_req() local
892 uqi = plqi->sm_uqi; in sm_link_req()
897 if (uqi) in sm_link_req()
898 (void) sm_disassociate(uqi->sm_lunit, in sm_link_req()
922 if (uqi && in sm_link_req()
924 (uqi->sm_flags & FULLY_OPEN) && in sm_link_req()
925 sm_uwq_error(uqi) && in sm_link_req()
926 putnextctl(SM_RQ(uqi), M_HANGUP) == 0) { in sm_link_req()
994 sm_update_ttyinfo(mblk_t *mp, sm_uqi_t *uqi) in sm_update_ttyinfo() argument
1015 uqi->sm_flags |= FLUSHR_PEND; in sm_update_ttyinfo()
1023 (tcflag_t)(~uqi->sm_cmask); in sm_update_ttyinfo()
1024 uqi->sm_ttycommon->t_cflag = in sm_update_ttyinfo()
1030 uqi->sm_flags |= FLUSHR_PEND; in sm_update_ttyinfo()
1037 (tcflag_t)(~uqi->sm_cmask); in sm_update_ttyinfo()
1038 uqi->sm_ttycommon->t_cflag = in sm_update_ttyinfo()
1046 uqi->sm_ttycommon->t_flags |= TS_SOFTCAR; in sm_update_ttyinfo()
1048 uqi->sm_ttycommon->t_flags &= ~TS_SOFTCAR; in sm_update_ttyinfo()
1054 uqi->sm_mbits = *(int *)info.sm_data; in sm_update_ttyinfo()
1058 uqi->sm_mbits |= *(int *)info.sm_data; in sm_update_ttyinfo()
1062 uqi->sm_mbits &= ~(*(int *)info.sm_data); in sm_update_ttyinfo()
1069 if ((uqi->sm_mbits & TIOCM_CD) || in sm_update_ttyinfo()
1070 (uqi->sm_ttycommon->t_flags & TS_SOFTCAR) || in sm_update_ttyinfo()
1071 (uqi->sm_ttycommon->t_cflag & CLOCAL)) in sm_update_ttyinfo()
1072 uqi->sm_flags |= SM_CARON; in sm_update_ttyinfo()
1074 uqi->sm_flags &= ~SM_CARON; in sm_update_ttyinfo()
1093 sm_uqi_t *uqi = (sm_uqi_t *)(wq->q_ptr); in sm_hp_uwput() local
1129 for (plqi = uqi->sm_lqs; plqi != 0; plqi = plqi->sm_nlqi) { in sm_hp_uwput()
1142 for (plqi = uqi->sm_lqs; plqi != 0; plqi = plqi->sm_nlqi) { in sm_hp_uwput()
1150 for (plqi = uqi->sm_lqs; plqi != 0; plqi = plqi->sm_nlqi) { in sm_hp_uwput()
1158 uqi->sm_flags |= SM_STOPPED; in sm_hp_uwput()
1160 for (plqi = uqi->sm_lqs; plqi != 0; plqi = plqi->sm_nlqi) in sm_hp_uwput()
1168 uqi->sm_flags &= ~SM_STOPPED; in sm_hp_uwput()
1171 for (plqi = uqi->sm_lqs; plqi != 0; plqi = plqi->sm_nlqi) in sm_hp_uwput()
1202 sm_uqi_t *uqi; in sm_default_uwioctl() local
1204 uqi = (sm_uqi_t *)(wq->q_ptr); in sm_default_uwioctl()
1219 (void) ttycommon_ioctl(uqi->sm_ttycommon, wq, mp, &err); in sm_default_uwioctl()
1228 if ((err = sm_update_ttyinfo(mp, uqi)) != 0) { in sm_default_uwioctl()
1237 uqi->sm_siocdata.sm_iocid = iobp->ioc_id; in sm_default_uwioctl()
1238 uqi->sm_siocdata.sm_acked = 0; in sm_default_uwioctl()
1239 uqi->sm_siocdata.sm_nacks = sm_good_qs(uqi); in sm_default_uwioctl()
1240 uqi->sm_siocdata.sm_acnt = 0; in sm_default_uwioctl()
1241 uqi->sm_siocdata.sm_policy = uqi->sm_policy; in sm_default_uwioctl()
1242 uqi->sm_siocdata.sm_flags = 0; in sm_default_uwioctl()
1244 uqi->sm_siocdata.sm_nacks, iobp->ioc_id)); in sm_default_uwioctl()
1256 sm_uqi_t *uqi; in sm_uwput() local
1261 uqi = (sm_uqi_t *)(wq->q_ptr); in sm_uwput()
1264 ASSERT(uqi != 0 && sm_ssp != 0); in sm_uwput()
1329 (void) sm_ioctl_cmd(uqi, mp); in sm_uwput()
1372 sm_uqi_t *uqi = (sm_uqi_t *)(q->q_ptr); in sm_uwsrv() local
1375 ASSERT(q == SM_WQ(uqi)); in sm_uwsrv()
1391 if (uqi->sm_flags & SM_STOPPED) { in sm_uwsrv()
1453 sm_uqi_t *uqi = (sm_uqi_t *)rq->q_ptr; in sm_uriocack() local
1463 if (info.sm_id == uqi->sm_piocdata.sm_iocid) { in sm_uriocack()
1464 iodp = &uqi->sm_piocdata; in sm_uriocack()
1465 } else if (info.sm_id == uqi->sm_siocdata.sm_iocid) { in sm_uriocack()
1466 iodp = &uqi->sm_siocdata; in sm_uriocack()
1530 (void) sm_update_ttyinfo(mp, uqi); in sm_uriocack()
1532 if (iodp == &uqi->sm_piocdata) { in sm_uriocack()
1534 uqi->sm_flags &= ~SM_IOCPENDING; in sm_uriocack()
1555 sm_uqi_t *uqi = (sm_uqi_t *)q->q_ptr; in sm_ursendup() local
1570 if (sm_uwq_error(uqi)) { in sm_ursendup()
1572 uqi->sm_flags &= ~SM_CARON; in sm_ursendup()
1580 if (sm_uwq_error(uqi)) { in sm_ursendup()
1582 uqi->sm_flags &= ~SM_CARON; in sm_ursendup()
1586 uqi->sm_flags &= ~ERROR_MODE; in sm_ursendup()
1599 uqi->sm_flags |= SM_CLOSE; in sm_ursendup()
1605 uqi->sm_flags |= SM_CARON; in sm_ursendup()
1634 sm_uqi_t *uqi = (sm_uqi_t *)q->q_ptr; in sm_ursrv() local
1636 int flags = uqi->sm_flags; in sm_ursrv()
1642 uqi->sm_flags |= WANT_RENB; in sm_ursrv()
1651 if ((flags & WANT_RENB) && !(uqi->sm_flags & WANT_RENB)) { in sm_ursrv()
1655 uqi->sm_flags &= ~WANT_RENB; in sm_ursrv()
1656 for (lqi = uqi->sm_lqs; lqi != 0; lqi = lqi->sm_nlqi) { in sm_ursrv()
1919 sm_ok_to_open(sm_uqi_t *uqi, int protocol, cred_t *credp, int *abort_waiters) in sm_ok_to_open() argument
1928 if ((uqi->sm_protocol == NULL_PROTOCOL) || in sm_ok_to_open()
1929 (uqi->sm_protocol == ASYN_PROTOCOL)) { in sm_ok_to_open()
1940 if ((uqi->sm_protocol == NULL_PROTOCOL) || in sm_ok_to_open()
1941 (uqi->sm_protocol == OUTD_PROTOCOL)) { in sm_ok_to_open()
1944 } else if (uqi->sm_protocol == ASYN_PROTOCOL) { in sm_ok_to_open()
1950 if (uqi->sm_flags & FULLY_OPEN) in sm_ok_to_open()
1964 (uqi->sm_ttycommon->t_flags & TS_XCLUDE) && in sm_ok_to_open()
1967 if (uqi->sm_flags & FULLY_OPEN) { in sm_ok_to_open()
1977 uqi->sm_protocol = proto; in sm_ok_to_open()
1980 uqi, protocol, uqi->sm_protocol, rval, *abort_waiters)); in sm_ok_to_open()
2003 sm_qwait_sig(sm_uqi_t *uqi, queue_t *q) in sm_qwait_sig() argument
2009 uqi->sm_waitq = q; in sm_qwait_sig()
2010 uqi->sm_nwaiters++; /* required by the close routine */ in sm_qwait_sig()
2012 if (--uqi->sm_nwaiters == 0) in sm_qwait_sig()
2013 uqi->sm_waitq = 0; in sm_qwait_sig()
2019 else if (uqi->sm_flags & SM_CLOSE) { in sm_qwait_sig()
2020 uqi->sm_flags &= ~SM_CLOSE; in sm_qwait_sig()
2035 sm_defer_open(sm_uqi_t *uqi, queue_t *q) in sm_defer_open() argument
2040 while ((nqs = sm_good_qs(uqi)) == 0) { in sm_defer_open()
2042 if (err = sm_qwait_sig(uqi, q)) in sm_defer_open()
2046 while ((uqi->sm_flags & SM_CARON) == 0) { in sm_defer_open()
2051 uqi->sm_flags, cmdflags)); in sm_defer_open()
2053 if (err = sm_qwait_sig(uqi, q)) in sm_defer_open()
2067 if (uqi->sm_piocdata.sm_iocid == 0) { in sm_defer_open()
2072 if (err = sm_qwait_sig(uqi, q)) { in sm_defer_open()
2080 uqi->sm_flags |= SM_IOCPENDING; in sm_defer_open()
2082 uqi->sm_piocdata.sm_iocid = in sm_defer_open()
2084 uqi->sm_piocdata.sm_acked = 0; in sm_defer_open()
2085 uqi->sm_piocdata.sm_nacks = nqs; in sm_defer_open()
2086 uqi->sm_piocdata.sm_acnt = 0; in sm_defer_open()
2087 uqi->sm_piocdata.sm_ackcnt = uqi-> in sm_defer_open()
2089 uqi->sm_piocdata.sm_policy = uqi->sm_policy; in sm_defer_open()
2090 uqi->sm_piocdata.sm_flags = SM_INTERNALIOC; in sm_defer_open()
2092 uqi->sm_piocdata.sm_iocid = 0; in sm_defer_open()
2098 sm_dbg('C', ("sm_defer_open: flags 0x%x\n", uqi->sm_flags)); in sm_defer_open()
2099 while ((uqi->sm_flags & SM_CARON) == 0 && in sm_defer_open()
2100 (uqi->sm_flags & SM_IOCPENDING) != 0) in sm_defer_open()
2101 if (err = sm_qwait_sig(uqi, q)) in sm_defer_open()
2104 sm_dbg('C', ("defer_open: uq flags 0x%x.\n", uqi->sm_flags)); in sm_defer_open()
2116 sm_uqi_t *uqi; in sm_open() local
2132 uqi = get_uqi(sm_ssp, unit); in sm_open()
2135 rq, *devp, flag, unit, protocol, uqi)); in sm_open()
2137 if (uqi == 0) in sm_open()
2140 if (sm_refuse_opens && unit > smctlunit && uqi->sm_nlqs == 0) in sm_open()
2143 if (uqi->sm_flags & EXCL_OPEN && (flag & FEXCL)) { in sm_open()
2151 if ((uqi->sm_flags & FULLY_OPEN) || uqi->sm_nwaiters > 0) in sm_open()
2154 uqi->sm_flags |= EXCL_OPEN; in sm_open()
2157 if (uqi->sm_protocol == NULL_PROTOCOL) { in sm_open()
2169 uqi->sm_ttycommon->t_iflag = termiosp->c_iflag; in sm_open()
2170 uqi->sm_ttycommon->t_cflag = termiosp->c_cflag; in sm_open()
2171 uqi->sm_ttycommon->t_stopc = termiosp->c_cc[VSTOP]; in sm_open()
2172 uqi->sm_ttycommon->t_startc = termiosp->c_cc[VSTART]; in sm_open()
2187 bzero((caddr_t)uqi->sm_ttycommon, in sm_open()
2188 sizeof (uqi->sm_ttycommon)); in sm_open()
2191 uqi->sm_cmask = sm_cmask; in sm_open()
2192 uqi->sm_ttycommon->t_flags |= TS_SOFTCAR; in sm_open()
2194 uqi->sm_ttycommon->t_flags &= ~TS_SOFTCAR; in sm_open()
2202 uqi->sm_ttycommon->t_cflag &= ~(uqi->sm_cmask|CLOCAL); in sm_open()
2203 uqi->sm_mbits = 0; in sm_open()
2204 uqi->sm_policy = FIRSTACK; in sm_open()
2211 sm_ssp->sm_lconsole = uqi; in sm_open()
2220 !(flag & (FNDELAY|FNONBLOCK)), !(protocol == OUTLINE), uqi->sm_lqs, in sm_open()
2221 uqi->sm_flags)); in sm_open()
2226 if (ftstat = sm_ok_to_open(uqi, protocol, credp, &abort_waiters)) { in sm_open()
2229 if ((uqi->sm_flags & FULLY_OPEN) == 0 && uqi->sm_nwaiters == 0) in sm_open()
2230 uqi->sm_protocol = NULL_PROTOCOL; in sm_open()
2232 uqi->sm_flags &= ~EXCL_OPEN; in sm_open()
2237 uqi->sm_dev = *devp; in sm_open()
2239 SM_RQ(uqi) = rq; in sm_open()
2240 SM_WQ(uqi) = WR(rq); in sm_open()
2245 uqi->sm_dev = *devp; in sm_open()
2246 rq->q_ptr = WR(rq)->q_ptr = uqi; in sm_open()
2247 SM_RQ(uqi) = rq; in sm_open()
2248 SM_WQ(uqi) = WR(rq); in sm_open()
2250 for (lqi = uqi->sm_lqs; lqi != 0; lqi = lqi->sm_nlqi) { in sm_open()
2259 if (*devp != rconsdev && BLOCKING(uqi, protocol, flag)) { in sm_open()
2261 uqi->sm_flags |= WANT_CDSTAT; in sm_open()
2270 if ((ftstat = sm_defer_open(uqi, rq)) != EINTR) { in sm_open()
2278 if (uqi->sm_nwaiters == 0) { /* clean up */ in sm_open()
2286 if ((uqi->sm_flags & FULLY_OPEN) == 0) { in sm_open()
2290 uqi->sm_dev = NODEV; in sm_open()
2292 for (lqi = uqi->sm_lqs; lqi != 0; in sm_open()
2301 SM_RQ(uqi) = 0; in sm_open()
2302 SM_WQ(uqi) = 0; in sm_open()
2305 if ((uqi->sm_flags & FULLY_OPEN) == 0 && in sm_open()
2306 uqi->sm_nwaiters == 0) in sm_open()
2307 uqi->sm_protocol = NULL_PROTOCOL; in sm_open()
2309 uqi->sm_flags &= ~EXCL_OPEN; in sm_open()
2312 } while (BLOCKING(uqi, protocol, flag)); in sm_open()
2315 uqi->sm_flags |= FULLY_OPEN; in sm_open()
2328 sm_uqi_t *uqi = (sm_uqi_t *)rq->q_ptr; in sm_close() local
2334 if (uqi == NULL) { in sm_close()
2339 sm_dbg('C', ("close: uqi=0x%p unit=%d q=0x%p)\n", uqi, uqi->sm_lunit, in sm_close()
2342 if (SM_RQ(uqi) != rq) in sm_close()
2345 if (uqi->sm_ttybid) { in sm_close()
2346 qunbufcall(SM_RQ(uqi), uqi->sm_ttybid); in sm_close()
2347 uqi->sm_ttybid = 0; in sm_close()
2357 for (lqi = uqi->sm_lqs; lqi != 0; lqi = lqi->sm_nlqi) { in sm_close()
2372 LOCK_UNIT(uqi); in sm_close()
2373 if (uqi->sm_waitq == 0) in sm_close()
2374 uqi->sm_flags = (uqi->sm_flags & SM_OBPCNDEV) ? SM_OBPCNDEV : in sm_close()
2377 uqi->sm_dev = NODEV; in sm_close()
2378 uqi->sm_protocol = NULL_PROTOCOL; in sm_close()
2379 ttycommon_close(uqi->sm_ttycommon); in sm_close()
2382 uqi->sm_ttycommon->t_cflag = 0; in sm_close()
2383 uqi->sm_ttycommon->t_flags = 0; in sm_close()
2392 UNLOCK_UNIT(uqi); in sm_close()
2394 if (sm_ssp->sm_lconsole == uqi) { in sm_close()
2402 if (uqi->sm_waitq) { in sm_close()
2404 rq, uqi->sm_waitq)); in sm_close()
2405 if (rq == uqi->sm_waitq) in sm_close()
2407 (void) putctl(uqi->sm_waitq, M_CTL); in sm_close()
2410 uqi->sm_flags &= ~(EXCL_OPEN | FULLY_OPEN); in sm_close()
2463 sm_uqi_t *uqi; in sm_attach() local
2570 uqi = get_uqi(sm_ssp, unit); in sm_attach()
2571 uqi->sm_lqs = 0; in sm_attach()
2572 uqi->sm_dev = NODEV; in sm_attach()
2573 uqi->sm_nlqs = 0; in sm_attach()
2574 uqi->sm_lunit = unit; in sm_attach()
2575 uqi->sm_protocol = NULL_PROTOCOL; in sm_attach()
2576 mutex_init(uqi->sm_umutex, NULL, MUTEX_DRIVER, NULL); in sm_attach()
2577 cv_init(uqi->sm_ucv, NULL, CV_DRIVER, NULL); in sm_attach()
2578 mutex_init(&uqi->sm_ttycommon->t_excl, NULL, in sm_attach()