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