Lines Matching refs:zss
163 static int zsh_start(struct zscom *zs, struct syncline *zss);
268 static void zsh_rxbad(struct zscom *zs, struct syncline *zss);
269 static void zsh_txbad(struct zscom *zs, struct syncline *zss);
272 static int zsh_hdp_ok_or_rts_state(struct zscom *zs, struct syncline *zss);
273 static void zsh_init_port(struct zscom *zs, struct syncline *zss);
274 static int zsh_setmode(struct zscom *zs, struct syncline *zss,
296 if (!zss->sl_rstandby[n]) { \
297 if ((zss->sl_rstandby[n] = \
298 allocb(zss->sl_mru, BPRI_MED)) == NULL) { \
299 if (zss->sl_bufcid == 0) { \
301 if (zss->sl_txstate != TX_OFF) { \
303 zss->sl_bufcid = bufcall(zss->sl_mru, \
323 if ((mp = zss->sl_rstandby[n]) != NULL) { \
324 zss->sl_rstandby[n] = NULL; \
333 wptr = zss->sl_rdone_wptr; \
334 rptr = zss->sl_rdone_rptr; \
335 zss->sl_rdone[wptr] = mp; \
337 zss->sl_rdone_wptr = wptr = 0; \
339 zss->sl_rdone_wptr = ++wptr; \
342 zss->sl_m_error = ENOSR; \
358 if (zss->sl_rdone_rptr != zss->sl_rdone_wptr) { \
359 mp = zss->sl_rdone[zss->sl_rdone_rptr++]; \
360 if (zss->sl_rdone_rptr == ZSH_RDONE_MAX) \
361 zss->sl_rdone_rptr = 0; \
479 zsh_init_port(struct zscom *zs, struct syncline *zss) in zsh_init_port() argument
485 zss->sl_rr0 = SCC_READ0(); in zsh_init_port()
486 if (zss->sl_flags & SF_FDXPTP) { in zsh_init_port()
491 !(zss->sl_mode.sm_config & (CONN_SIGNAL | CONN_IBM))) { in zsh_init_port()
495 zss->sl_rr0 |= ZSRR0_CTS; in zsh_init_port()
496 zss->sl_txstate = TX_IDLE; in zsh_init_port()
498 zss->sl_flags |= SF_XMT_INPROG; in zsh_init_port()
499 zss->sl_txstate = TX_RTS; in zsh_init_port()
500 zss->sl_rr0 &= ~ZSRR0_CTS; in zsh_init_port()
501 zss->sl_wd_count = zsh_timer_count; in zsh_init_port()
502 if (!zss->sl_wd_id) in zsh_init_port()
503 zss->sl_wd_id = timeout(zsh_watchdog, in zsh_init_port()
510 zss->sl_flags &= ~SF_FLUSH_WQ; in zsh_init_port()
523 register struct syncline *zss; in zsh_open() local
559 zss = (struct syncline *)&zscom[unit].zs_priv_str; in zsh_open()
560 stp = &zss->sl_stream; in zsh_open()
564 zss->sl_xhead = NULL; in zsh_open()
565 zss->sl_xactb = NULL; in zsh_open()
570 zss->sl_rhead = NULL; in zsh_open()
571 zss->sl_ractb = NULL; in zsh_open()
574 zss->sl_mstat = NULL; in zsh_open()
575 zss->sl_xstandby = NULL; in zsh_open()
576 zss->sl_wd_id = 0; in zsh_open()
577 zss->sl_soft_active = 0; in zsh_open()
578 zss->sl_stream.str_rq = NULL; in zsh_open()
580 zs->zs_priv = (caddr_t)zss; in zsh_open()
582 zss->sl_mru = zsh_default_mru; in zsh_open()
585 if (zss->sl_rstandby[0] == NULL) { in zsh_open()
591 ZSH_ALLOCB(zss->sl_ractb); in zsh_open()
592 zss->sl_txstate = TX_OFF; in zsh_open()
593 zss->sl_rr0 = SCC_READ0(); in zsh_open()
594 zss->sl_flags &= (SF_INITIALIZED | SF_FDXPTP); in zsh_open()
595 if (zss->sl_flags & SF_INITIALIZED) in zsh_open()
596 zsh_init_port(zs, zss); in zsh_open()
640 struct syncline *zss; in zsh_close() local
665 zss = (struct syncline *)zs->zs_priv; in zsh_close()
669 if (zss->sl_xstandby) { in zsh_close()
670 zss->sl_xstandby->b_wptr = zss->sl_xstandby->b_rptr; in zsh_close()
671 ZSH_FREEMSG(zss->sl_xstandby); in zsh_close()
672 zss->sl_xstandby = NULL; in zsh_close()
681 if ((sl_wd_id = zss->sl_wd_id) != 0) in zsh_close()
682 zss->sl_wd_id = 0; in zsh_close()
687 if ((sl_bufcid = zss->sl_bufcid) != 0) in zsh_close()
688 zss->sl_bufcid = 0; in zsh_close()
698 zss->sl_txstate = TX_OFF; /* so it can't rearm in close */ in zsh_close()
705 if (zsh_tx_enable_in_close && !(zss->sl_flags & SF_FDXPTP)) { in zsh_close()
725 if ((mp = zss->sl_rhead) != NULL) { in zsh_close()
726 zss->sl_ractb = NULL; /* already freed */ in zsh_close()
729 zss->sl_rhead = NULL; in zsh_close()
736 if ((mp = zss->sl_ractb) != NULL) { in zsh_close()
739 zss->sl_ractb = NULL; in zsh_close()
747 mp = zss->sl_rstandby[i]; in zsh_close()
748 zss->sl_rstandby[i] = NULL; in zsh_close()
755 if ((mp = zss->sl_xhead) != NULL) { in zsh_close()
756 zss->sl_xhead = NULL; in zsh_close()
757 zss->sl_xactb = NULL; in zsh_close()
766 if ((mp = zss->sl_xstandby) != NULL) in zsh_close()
767 zss->sl_xstandby = NULL; in zsh_close()
773 if ((mp = zss->sl_mstat) != NULL) in zsh_close()
774 zss->sl_mstat = NULL; in zsh_close()
775 zss->sl_txstate = TX_OFF; /* so it can't rearm in close */ in zsh_close()
780 zss->sl_stream.str_rq = NULL; in zsh_close()
787 while (zss->sl_soft_active) in zsh_close()
804 zsh_hdp_ok_or_rts_state(struct zscom *zs, struct syncline *zss) in zsh_hdp_ok_or_rts_state() argument
813 zss->sl_rr0 |= ZSRR0_CTS; in zsh_hdp_ok_or_rts_state()
816 zss->sl_flags |= SF_XMT_INPROG; in zsh_hdp_ok_or_rts_state()
817 zss->sl_txstate = TX_RTS; in zsh_hdp_ok_or_rts_state()
818 zss->sl_rr0 &= ~ZSRR0_CTS; in zsh_hdp_ok_or_rts_state()
819 zss->sl_wd_count = zsh_timer_count; in zsh_hdp_ok_or_rts_state()
831 register struct syncline *zss = NULL; in zsh_wput() local
883 zss = (struct syncline *)zs->zs_priv; in zsh_wput()
894 if (!(zss->sl_flags & SF_INITIALIZED)) { in zsh_wput()
919 if (zss->sl_flags & SF_FLUSH_WQ) { in zsh_wput()
931 if (!zss->sl_xstandby) { in zsh_wput()
933 zss->sl_xstandby = tmp; in zsh_wput()
947 if (zss->sl_flags & SF_XMT_INPROG) { in zsh_wput()
957 if (!zss->sl_wd_id) { in zsh_wput()
958 zss->sl_wd_count = zsh_timer_count; in zsh_wput()
959 zss->sl_txstate = TX_IDLE; in zsh_wput()
961 zss->sl_wd_id = timeout(zsh_watchdog, zs, in zsh_wput()
966 zss->sl_flags |= SF_XMT_INPROG; in zsh_wput()
967 if ((zss->sl_flags & SF_FDXPTP) || in zsh_wput()
968 zsh_hdp_ok_or_rts_state(zs, zss)) in zsh_wput()
969 (void) zsh_start(zs, zss); in zsh_wput()
1057 zss = (struct syncline *)&zs->zs_priv_str; in zsh_wput()
1059 error = zsh_setmode(zs, zss, in zsh_wput()
1073 zss = (struct syncline *)&zs->zs_priv_str; in zsh_wput()
1075 zss->sl_mru = *(int *)mp->b_cont->b_rptr; in zsh_wput()
1097 tmp = zss->sl_xstandby; in zsh_wput()
1098 zss->sl_xstandby = NULL; in zsh_wput()
1133 zsh_start(struct zscom *zs, struct syncline *zss) in zsh_start() argument
1138 register uchar_t sl_flags = zss->sl_flags; in zsh_start()
1160 zss->sl_rr0 &= ~ZSRR0_CTS; in zsh_start()
1161 zss->sl_txstate = TX_IDLE; in zsh_start()
1166 zss->sl_flags = sl_flags; in zsh_start()
1173 mp = zss->sl_xstandby; in zsh_start()
1185 zss->sl_flags = sl_flags; in zsh_start()
1194 zss->sl_xstandby = NULL; in zsh_start()
1200 if (zss->sl_xhead || zss->sl_xactb) { in zsh_start()
1205 zss->sl_xhead = mp; in zsh_start()
1206 zss->sl_xactb = mp; in zsh_start()
1207 zss->sl_wd_count = zsh_timer_count; in zsh_start()
1208 zss->sl_txstate = TX_ACTIVE; in zsh_start()
1209 zss->sl_ocnt = 0; in zsh_start()
1212 zss->sl_ocnt = wptr - rptr; in zsh_start()
1223 zss->sl_flags = sl_flags; in zsh_start()
1236 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str; in zsh_ioctl() local
1268 bcopy(&zss->sl_mode, sm, sizeof (struct scc_mode)); in zsh_ioctl()
1282 bcopy(&zss->sl_st, st, sizeof (struct sl_stats)); in zsh_ioctl()
1295 *(int *)mp->b_cont->b_rptr = zss->sl_mode.sm_baudrate; in zsh_ioctl()
1309 *msignals = zss->sl_rr0 & (ZSRR0_CD | ZSRR0_CTS); in zsh_ioctl()
1322 *(int *)mp->b_cont->b_rptr = zss->sl_mru; in zsh_ioctl()
1330 error = zsh_setmode(zs, zss, in zsh_ioctl()
1340 bzero(&zss->sl_st, sizeof (struct sl_stats)); in zsh_ioctl()
1350 zss->sl_mru = *(int *)mp->b_cont->b_rptr; in zsh_ioctl()
1389 zsh_setmode(struct zscom *zs, struct syncline *zss, struct scc_mode *sm) in zsh_setmode() argument
1396 zss->sl_mode.sm_retval = SMERR_RXC; in zsh_setmode()
1400 if (((zss->sl_mode.sm_config ^ sm->sm_config) & in zsh_setmode()
1403 if (zss->sl_mstat == NULL) { in zsh_setmode()
1409 zss->sl_mstat = mp; in zsh_setmode()
1412 if ((mp = zss->sl_mstat) != NULL) in zsh_setmode()
1413 zss->sl_mstat = NULL; in zsh_setmode()
1422 zss->sl_mode.sm_retval = SMERR_HDX; in zsh_setmode()
1427 zss->sl_mode.sm_retval = SMERR_MPT; in zsh_setmode()
1432 zss->sl_flags &= ~SF_FDXPTP; /* "conmode" */ in zsh_setmode()
1434 zss->sl_flags |= SF_FDXPTP; in zsh_setmode()
1438 zsh_init_port(zs, zss); in zsh_setmode()
1452 register struct syncline *zss; in zsh_txint() local
1466 zss = (struct syncline *)&zs->zs_priv_str; in zsh_txint()
1468 switch (zss->sl_txstate) { in zsh_txint()
1475 mp = zss->sl_xactb; in zsh_txint()
1480 zss->sl_xactb = mp; in zsh_txint()
1481 zss->sl_ocnt += tmp = mp->b_wptr - mp->b_rptr; in zsh_txint()
1499 zss->sl_txstate = TX_CRC; in zsh_txint()
1501 if (!(zss->sl_flags & SF_PHONY)) { in zsh_txint()
1503 zss->sl_st.opack++; in zsh_txint()
1504 zss->sl_st.ochar += zss->sl_ocnt; in zsh_txint()
1506 zss->sl_ocnt = 0; in zsh_txint()
1507 ZSH_FREEMSG(zss->sl_xhead); in zsh_txint()
1508 zss->sl_xhead = zss->sl_xactb = NULL; in zsh_txint()
1518 if (!(zss->sl_flags & SF_FDXPTP)) { in zsh_txint()
1519 zss->sl_txstate = TX_FLAG; /* HDX path */ in zsh_txint()
1521 if (!zsh_start(zs, zss)) { in zsh_txint()
1522 zss->sl_txstate = TX_IDLE; in zsh_txint()
1533 zss->sl_txstate = TX_LAST; in zsh_txint()
1534 (void) zsh_start(zs, zss); in zsh_txint()
1542 zss->sl_txstate = TX_IDLE; in zsh_txint()
1565 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str; in zsh_xsint() local
1571 x0 = s0 ^ zss->sl_rr0; in zsh_xsint()
1572 zss->sl_rr0 = s0; in zsh_xsint()
1576 switch (zss->sl_txstate) { in zsh_xsint()
1589 zss->sl_st.underrun++; in zsh_xsint()
1590 zsh_txbad(zs, zss); in zsh_xsint()
1592 zss->sl_txstate = TX_ABORTED; in zsh_xsint()
1593 zss->sl_wd_count = 0; in zsh_xsint()
1617 zss->sl_st.abort++; in zsh_xsint()
1618 zsh_rxbad(zs, zss); in zsh_xsint()
1632 zss->sl_st.abort++; in zsh_xsint()
1633 zsh_rxbad(zs, zss); in zsh_xsint()
1637 if (zss->sl_txstate == TX_RTS) { in zsh_xsint()
1638 if (!(zss->sl_flags & SF_FDXPTP)) { in zsh_xsint()
1641 (void) zsh_start(zs, zss); in zsh_xsint()
1642 } else if ((zss->sl_mode.sm_config & in zsh_xsint()
1644 zss->sl_flags &= ~SF_FLUSH_WQ; in zsh_xsint()
1655 (zss->sl_txstate != TX_OFF) && in zsh_xsint()
1656 (zss->sl_mode.sm_config & (CONN_IBM | CONN_SIGNAL))) { in zsh_xsint()
1659 zss->sl_flags &= ~SF_XMT_INPROG; in zsh_xsint()
1660 zss->sl_flags |= SF_FLUSH_WQ; in zsh_xsint()
1661 zss->sl_st.cts++; in zsh_xsint()
1662 if (zss->sl_txstate != TX_IDLE) in zsh_xsint()
1666 zss->sl_wd_count = 0; in zsh_xsint()
1667 zsh_txbad(zs, zss); in zsh_xsint()
1678 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str; in zsh_rxint() local
1679 register mblk_t *bp = zss->sl_ractb; in zsh_rxint()
1693 zss->sl_ractb = bp; in zsh_rxint()
1695 zss->sl_rhead = bp; in zsh_rxint()
1699 bp = zss->sl_ractb = bp->b_cont; in zsh_rxint()
1702 zss->sl_st.nobuffers++; in zsh_rxint()
1703 zsh_rxbad(zs, zss); in zsh_rxint()
1718 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str; in zsh_srint() local
1730 zss->sl_st.crc++; in zsh_srint()
1731 zsh_rxbad(zs, zss); in zsh_srint()
1742 zss->sl_ractb->b_wptr = rd_cur - 1; in zsh_srint()
1747 ZSH_PUTQ(zss->sl_rhead); in zsh_srint()
1748 zss->sl_rhead = NULL; in zsh_srint()
1749 zss->sl_ractb = NULL; in zsh_srint()
1757 zss->sl_st.overrun++; in zsh_srint()
1758 zsh_rxbad(zs, zss); in zsh_srint()
1770 register struct syncline *zss; in zsh_softint() local
1780 zss = (struct syncline *)zs->zs_priv; in zsh_softint()
1781 if (!zss || (q = zss->sl_stream.str_rq) == NULL) { in zsh_softint()
1785 m_error = zss->sl_m_error; in zsh_softint()
1787 zss->sl_m_error = 0; in zsh_softint()
1790 if (!zss->sl_mstat) in zsh_softint()
1791 zss->sl_mstat = allocb(sizeof (struct sl_status), BPRI_MED); in zsh_softint()
1794 if (zss->sl_flags & SF_FLUSH_WQ) { in zsh_softint()
1795 if (!(zss->sl_flags & SF_FDXPTP)) { in zsh_softint()
1796 zss->sl_flags &= ~SF_FLUSH_WQ; in zsh_softint()
1802 zss->sl_rr0 |= ZSRR0_CTS; in zsh_softint()
1804 zss->sl_flags &= ~SF_FLUSH_WQ; in zsh_softint()
1807 if (zss->sl_flags & SF_FLUSH_WQ) { in zsh_softint()
1830 zss->sl_st.ichar += msgdsize(mp); in zsh_softint()
1831 zss->sl_st.ipack++; in zsh_softint()
1833 zss->sl_st.ierror++; in zsh_softint()
1846 zss->sl_soft_active = 1; in zsh_softint()
1861 if (!zss->sl_xstandby) { in zsh_softint()
1863 zss->sl_xstandby = tmp; in zsh_softint()
1893 zss->sl_soft_active = 0; in zsh_softint()
1907 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str; in zsh_program() local
1936 zss->sl_mode.sm_retval = SMERR_TXC; in zsh_program()
1956 zss->sl_mode.sm_retval = SMERR_RXC; in zsh_program()
1961 zss->sl_mode.sm_retval = SMERR_PLL; in zsh_program()
1966 zss->sl_mode.sm_retval = SMERR_PLL; in zsh_program()
1977 zss->sl_mode.sm_retval = SMERR_BAUDRATE; in zsh_program()
1992 zss->sl_mode.sm_retval = SMERR_BAUDRATE; in zsh_program()
2002 zss->sl_mode.sm_retval = SMERR_LPBKS; in zsh_program()
2025 if (zss->sl_flags & SF_FDXPTP) { in zsh_program()
2027 zss->sl_rr0 |= ZSRR0_CTS; /* Assume CTS is high */ in zsh_program()
2032 if (!(zss->sl_flags & SF_FDXPTP)) in zsh_program()
2045 zss->sl_flags |= SF_INITIALIZED; in zsh_program()
2046 bzero(&zss->sl_st, sizeof (struct sl_stats)); in zsh_program()
2047 bcopy(sm, &zss->sl_mode, sizeof (struct scc_mode)); in zsh_program()
2048 zss->sl_mode.sm_retval = 0; /* successful */ in zsh_program()
2062 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str; in zsh_setmstat() local
2066 if (((mp = zss->sl_mstat) != NULL) && in zsh_setmstat()
2067 (zss->sl_mode.sm_config & (CONN_SIGNAL))) { in zsh_setmstat()
2069 mstat->type = (zss->sl_mode.sm_config & CONN_IBM) ? in zsh_setmstat()
2076 zss->sl_mstat = NULL; in zsh_setmstat()
2085 zsh_rxbad(struct zscom *zs, struct syncline *zss) in zsh_rxbad() argument
2096 zss->sl_st.ierror++; in zsh_rxbad()
2101 if (zss->sl_rhead) { in zsh_rxbad()
2102 zss->sl_rhead->b_wptr = zss->sl_rhead->b_rptr; in zsh_rxbad()
2103 zss->sl_rhead->b_datap->db_type = M_RSE; in zsh_rxbad()
2104 ZSH_FREEMSG(zss->sl_rhead); in zsh_rxbad()
2105 zss->sl_ractb = NULL; in zsh_rxbad()
2109 if (zss->sl_rhead) { in zsh_rxbad()
2110 zss->sl_rhead = NULL; in zsh_rxbad()
2111 ZSH_ALLOCB(zss->sl_ractb); in zsh_rxbad()
2123 zsh_txbad(struct zscom *zs, struct syncline *zss) in zsh_txbad() argument
2125 if (zss->sl_xhead) { /* free the message we were sending */ in zsh_txbad()
2126 zss->sl_xhead->b_wptr = zss->sl_xhead->b_rptr; in zsh_txbad()
2127 ZSH_FREEMSG(zss->sl_xhead); in zsh_txbad()
2128 zss->sl_xactb = NULL; in zsh_txbad()
2132 zss->sl_xhead = NULL; in zsh_txbad()
2134 if (!(zss->sl_flags & SF_FDXPTP)) { in zsh_txbad()
2140 zss->sl_rr0 &= ~ZSRR0_CTS; in zsh_txbad()
2142 zss->sl_txstate = TX_IDLE; in zsh_txbad()
2143 if (!(zss->sl_flags & SF_PHONY)) in zsh_txbad()
2144 zss->sl_st.oerror++; in zsh_txbad()
2154 struct syncline *zss = (struct syncline *)&zs->zs_priv_str; in zsh_watchdog() local
2172 if (zss->sl_stream.str_rq) in zsh_watchdog()
2173 wq = WR(zss->sl_stream.str_rq); in zsh_watchdog()
2180 if (!(zss->sl_flags & SF_XMT_INPROG) && wq->q_first) { in zsh_watchdog()
2181 zss->sl_flags |= SF_XMT_INPROG; in zsh_watchdog()
2182 if ((zss->sl_flags & SF_FDXPTP) || in zsh_watchdog()
2183 zsh_hdp_ok_or_rts_state(zs, zss)) in zsh_watchdog()
2184 (void) zsh_start(zs, zss); in zsh_watchdog()
2188 if (zss->sl_wd_count-- > 0) in zsh_watchdog()
2191 if (zss->sl_flags & SF_FLUSH_WQ) { in zsh_watchdog()
2192 if (!(zss->sl_flags & SF_FDXPTP)) in zsh_watchdog()
2193 zss->sl_flags &= ~SF_FLUSH_WQ; in zsh_watchdog()
2197 zss->sl_rr0 |= ZSRR0_CTS; in zsh_watchdog()
2199 zss->sl_flags &= ~SF_FLUSH_WQ; in zsh_watchdog()
2205 switch (zss->sl_txstate) { in zsh_watchdog()
2211 if (zss->sl_flags & SF_FDXPTP) { in zsh_watchdog()
2212 zss->sl_flags |= SF_XMT_INPROG; in zsh_watchdog()
2213 (void) zsh_start(zs, zss); in zsh_watchdog()
2231 if (--zss->sl_wd_count <= 0) { in zsh_watchdog()
2235 zsh_txbad(zs, zss); in zsh_watchdog()
2236 zss->sl_txstate = TX_ABORTED; /* must be after txbad */ in zsh_watchdog()
2245 zss->sl_st.cts++; in zsh_watchdog()
2248 zss->sl_flags &= ~SF_XMT_INPROG; in zsh_watchdog()
2249 zss->sl_flags |= SF_FLUSH_WQ; in zsh_watchdog()
2262 if (zss->sl_txstate != TX_OFF) { in zsh_watchdog()
2264 zss->sl_wd_id = timeout(zsh_watchdog, zs, SIO_WATCHDOG_TICK); in zsh_watchdog()
2266 zss->sl_wd_id = 0; /* safety */ in zsh_watchdog()
2272 if ((mp = zss->sl_xstandby) != NULL) in zsh_watchdog()
2273 zss->sl_xstandby = NULL; in zsh_watchdog()
2287 struct syncline *zss = (struct syncline *)&zs->zs_priv_str; in zsh_callback() local
2291 if (zss->sl_bufcid) { in zsh_callback()
2292 zss->sl_bufcid = 0; in zsh_callback()