Lines Matching refs:zss

165 static int zsh_start(struct zscom *zs, struct syncline *zss);
270 static void zsh_rxbad(struct zscom *zs, struct syncline *zss);
271 static void zsh_txbad(struct zscom *zs, struct syncline *zss);
274 static int zsh_hdp_ok_or_rts_state(struct zscom *zs, struct syncline *zss);
275 static void zsh_init_port(struct zscom *zs, struct syncline *zss);
276 static int zsh_setmode(struct zscom *zs, struct syncline *zss,
298 if (!zss->sl_rstandby[n]) { \
299 if ((zss->sl_rstandby[n] = \
300 allocb(zss->sl_mru, BPRI_MED)) == NULL) { \
301 if (zss->sl_bufcid == 0) { \
303 if (zss->sl_txstate != TX_OFF) { \
305 zss->sl_bufcid = bufcall(zss->sl_mru, \
325 if ((mp = zss->sl_rstandby[n]) != NULL) { \
326 zss->sl_rstandby[n] = NULL; \
335 wptr = zss->sl_rdone_wptr; \
336 rptr = zss->sl_rdone_rptr; \
337 zss->sl_rdone[wptr] = mp; \
339 zss->sl_rdone_wptr = wptr = 0; \
341 zss->sl_rdone_wptr = ++wptr; \
344 zss->sl_m_error = ENOSR; \
360 if (zss->sl_rdone_rptr != zss->sl_rdone_wptr) { \
361 mp = zss->sl_rdone[zss->sl_rdone_rptr++]; \
362 if (zss->sl_rdone_rptr == ZSH_RDONE_MAX) \
363 zss->sl_rdone_rptr = 0; \
481 zsh_init_port(struct zscom *zs, struct syncline *zss)
487 zss->sl_rr0 = SCC_READ0();
488 if (zss->sl_flags & SF_FDXPTP) {
493 !(zss->sl_mode.sm_config & (CONN_SIGNAL | CONN_IBM))) {
497 zss->sl_rr0 |= ZSRR0_CTS;
498 zss->sl_txstate = TX_IDLE;
500 zss->sl_flags |= SF_XMT_INPROG;
501 zss->sl_txstate = TX_RTS;
502 zss->sl_rr0 &= ~ZSRR0_CTS;
503 zss->sl_wd_count = zsh_timer_count;
504 if (!zss->sl_wd_id)
505 zss->sl_wd_id = timeout(zsh_watchdog,
512 zss->sl_flags &= ~SF_FLUSH_WQ;
525 register struct syncline *zss;
561 zss = (struct syncline *)&zscom[unit].zs_priv_str;
562 stp = &zss->sl_stream;
566 zss->sl_xhead = NULL;
567 zss->sl_xactb = NULL;
572 zss->sl_rhead = NULL;
573 zss->sl_ractb = NULL;
576 zss->sl_mstat = NULL;
577 zss->sl_xstandby = NULL;
578 zss->sl_wd_id = 0;
579 zss->sl_soft_active = 0;
580 zss->sl_stream.str_rq = NULL;
582 zs->zs_priv = (caddr_t)zss;
584 zss->sl_mru = zsh_default_mru;
587 if (zss->sl_rstandby[0] == NULL) {
593 ZSH_ALLOCB(zss->sl_ractb);
594 zss->sl_txstate = TX_OFF;
595 zss->sl_rr0 = SCC_READ0();
596 zss->sl_flags &= (SF_INITIALIZED | SF_FDXPTP);
597 if (zss->sl_flags & SF_INITIALIZED)
598 zsh_init_port(zs, zss);
642 struct syncline *zss;
667 zss = (struct syncline *)zs->zs_priv;
671 if (zss->sl_xstandby) {
672 zss->sl_xstandby->b_wptr = zss->sl_xstandby->b_rptr;
673 ZSH_FREEMSG(zss->sl_xstandby);
674 zss->sl_xstandby = NULL;
683 if ((sl_wd_id = zss->sl_wd_id) != 0)
684 zss->sl_wd_id = 0;
689 if ((sl_bufcid = zss->sl_bufcid) != 0)
690 zss->sl_bufcid = 0;
700 zss->sl_txstate = TX_OFF; /* so it can't rearm in close */
707 if (zsh_tx_enable_in_close && !(zss->sl_flags & SF_FDXPTP)) {
727 if ((mp = zss->sl_rhead) != NULL) {
728 zss->sl_ractb = NULL; /* already freed */
731 zss->sl_rhead = NULL;
738 if ((mp = zss->sl_ractb) != NULL) {
741 zss->sl_ractb = NULL;
749 mp = zss->sl_rstandby[i];
750 zss->sl_rstandby[i] = NULL;
757 if ((mp = zss->sl_xhead) != NULL) {
758 zss->sl_xhead = NULL;
759 zss->sl_xactb = NULL;
768 if ((mp = zss->sl_xstandby) != NULL)
769 zss->sl_xstandby = NULL;
775 if ((mp = zss->sl_mstat) != NULL)
776 zss->sl_mstat = NULL;
777 zss->sl_txstate = TX_OFF; /* so it can't rearm in close */
782 zss->sl_stream.str_rq = NULL;
789 while (zss->sl_soft_active)
806 zsh_hdp_ok_or_rts_state(struct zscom *zs, struct syncline *zss)
815 zss->sl_rr0 |= ZSRR0_CTS;
818 zss->sl_flags |= SF_XMT_INPROG;
819 zss->sl_txstate = TX_RTS;
820 zss->sl_rr0 &= ~ZSRR0_CTS;
821 zss->sl_wd_count = zsh_timer_count;
833 register struct syncline *zss = NULL;
885 zss = (struct syncline *)zs->zs_priv;
896 if (!(zss->sl_flags & SF_INITIALIZED)) {
921 if (zss->sl_flags & SF_FLUSH_WQ) {
933 if (!zss->sl_xstandby) {
935 zss->sl_xstandby = tmp;
949 if (zss->sl_flags & SF_XMT_INPROG) {
959 if (!zss->sl_wd_id) {
960 zss->sl_wd_count = zsh_timer_count;
961 zss->sl_txstate = TX_IDLE;
963 zss->sl_wd_id = timeout(zsh_watchdog, zs,
968 zss->sl_flags |= SF_XMT_INPROG;
969 if ((zss->sl_flags & SF_FDXPTP) ||
970 zsh_hdp_ok_or_rts_state(zs, zss))
971 (void) zsh_start(zs, zss);
1059 zss = (struct syncline *)&zs->zs_priv_str;
1061 error = zsh_setmode(zs, zss,
1075 zss = (struct syncline *)&zs->zs_priv_str;
1077 zss->sl_mru = *(int *)mp->b_cont->b_rptr;
1099 tmp = zss->sl_xstandby;
1100 zss->sl_xstandby = NULL;
1135 zsh_start(struct zscom *zs, struct syncline *zss)
1140 register uchar_t sl_flags = zss->sl_flags;
1162 zss->sl_rr0 &= ~ZSRR0_CTS;
1163 zss->sl_txstate = TX_IDLE;
1168 zss->sl_flags = sl_flags;
1175 mp = zss->sl_xstandby;
1187 zss->sl_flags = sl_flags;
1196 zss->sl_xstandby = NULL;
1202 if (zss->sl_xhead || zss->sl_xactb) {
1207 zss->sl_xhead = mp;
1208 zss->sl_xactb = mp;
1209 zss->sl_wd_count = zsh_timer_count;
1210 zss->sl_txstate = TX_ACTIVE;
1211 zss->sl_ocnt = 0;
1214 zss->sl_ocnt = wptr - rptr;
1225 zss->sl_flags = sl_flags;
1238 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str;
1270 bcopy(&zss->sl_mode, sm, sizeof (struct scc_mode));
1284 bcopy(&zss->sl_st, st, sizeof (struct sl_stats));
1297 *(int *)mp->b_cont->b_rptr = zss->sl_mode.sm_baudrate;
1311 *msignals = zss->sl_rr0 & (ZSRR0_CD | ZSRR0_CTS);
1324 *(int *)mp->b_cont->b_rptr = zss->sl_mru;
1332 error = zsh_setmode(zs, zss,
1342 bzero(&zss->sl_st, sizeof (struct sl_stats));
1352 zss->sl_mru = *(int *)mp->b_cont->b_rptr;
1391 zsh_setmode(struct zscom *zs, struct syncline *zss, struct scc_mode *sm)
1398 zss->sl_mode.sm_retval = SMERR_RXC;
1402 if (((zss->sl_mode.sm_config ^ sm->sm_config) &
1405 if (zss->sl_mstat == NULL) {
1411 zss->sl_mstat = mp;
1414 if ((mp = zss->sl_mstat) != NULL)
1415 zss->sl_mstat = NULL;
1424 zss->sl_mode.sm_retval = SMERR_HDX;
1429 zss->sl_mode.sm_retval = SMERR_MPT;
1434 zss->sl_flags &= ~SF_FDXPTP; /* "conmode" */
1436 zss->sl_flags |= SF_FDXPTP;
1440 zsh_init_port(zs, zss);
1454 register struct syncline *zss;
1468 zss = (struct syncline *)&zs->zs_priv_str;
1470 switch (zss->sl_txstate) {
1477 mp = zss->sl_xactb;
1482 zss->sl_xactb = mp;
1483 zss->sl_ocnt += tmp = mp->b_wptr - mp->b_rptr;
1501 zss->sl_txstate = TX_CRC;
1503 if (!(zss->sl_flags & SF_PHONY)) {
1505 zss->sl_st.opack++;
1506 zss->sl_st.ochar += zss->sl_ocnt;
1508 zss->sl_ocnt = 0;
1509 ZSH_FREEMSG(zss->sl_xhead);
1510 zss->sl_xhead = zss->sl_xactb = NULL;
1520 if (!(zss->sl_flags & SF_FDXPTP)) {
1521 zss->sl_txstate = TX_FLAG; /* HDX path */
1523 if (!zsh_start(zs, zss)) {
1524 zss->sl_txstate = TX_IDLE;
1535 zss->sl_txstate = TX_LAST;
1536 (void) zsh_start(zs, zss);
1544 zss->sl_txstate = TX_IDLE;
1567 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str;
1573 x0 = s0 ^ zss->sl_rr0;
1574 zss->sl_rr0 = s0;
1578 switch (zss->sl_txstate) {
1591 zss->sl_st.underrun++;
1592 zsh_txbad(zs, zss);
1594 zss->sl_txstate = TX_ABORTED;
1595 zss->sl_wd_count = 0;
1619 zss->sl_st.abort++;
1620 zsh_rxbad(zs, zss);
1634 zss->sl_st.abort++;
1635 zsh_rxbad(zs, zss);
1639 if (zss->sl_txstate == TX_RTS) {
1640 if (!(zss->sl_flags & SF_FDXPTP)) {
1643 (void) zsh_start(zs, zss);
1644 } else if ((zss->sl_mode.sm_config &
1646 zss->sl_flags &= ~SF_FLUSH_WQ;
1657 (zss->sl_txstate != TX_OFF) &&
1658 (zss->sl_mode.sm_config & (CONN_IBM | CONN_SIGNAL))) {
1661 zss->sl_flags &= ~SF_XMT_INPROG;
1662 zss->sl_flags |= SF_FLUSH_WQ;
1663 zss->sl_st.cts++;
1664 if (zss->sl_txstate != TX_IDLE)
1668 zss->sl_wd_count = 0;
1669 zsh_txbad(zs, zss);
1680 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str;
1681 register mblk_t *bp = zss->sl_ractb;
1695 zss->sl_ractb = bp;
1697 zss->sl_rhead = bp;
1701 bp = zss->sl_ractb = bp->b_cont;
1704 zss->sl_st.nobuffers++;
1705 zsh_rxbad(zs, zss);
1720 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str;
1732 zss->sl_st.crc++;
1733 zsh_rxbad(zs, zss);
1744 zss->sl_ractb->b_wptr = rd_cur - 1;
1749 ZSH_PUTQ(zss->sl_rhead);
1750 zss->sl_rhead = NULL;
1751 zss->sl_ractb = NULL;
1759 zss->sl_st.overrun++;
1760 zsh_rxbad(zs, zss);
1772 register struct syncline *zss;
1782 zss = (struct syncline *)zs->zs_priv;
1783 if (!zss || (q = zss->sl_stream.str_rq) == NULL) {
1787 m_error = zss->sl_m_error;
1789 zss->sl_m_error = 0;
1792 if (!zss->sl_mstat)
1793 zss->sl_mstat = allocb(sizeof (struct sl_status), BPRI_MED);
1796 if (zss->sl_flags & SF_FLUSH_WQ) {
1797 if (!(zss->sl_flags & SF_FDXPTP)) {
1798 zss->sl_flags &= ~SF_FLUSH_WQ;
1804 zss->sl_rr0 |= ZSRR0_CTS;
1806 zss->sl_flags &= ~SF_FLUSH_WQ;
1809 if (zss->sl_flags & SF_FLUSH_WQ) {
1832 zss->sl_st.ichar += msgdsize(mp);
1833 zss->sl_st.ipack++;
1835 zss->sl_st.ierror++;
1848 zss->sl_soft_active = 1;
1863 if (!zss->sl_xstandby) {
1865 zss->sl_xstandby = tmp;
1895 zss->sl_soft_active = 0;
1909 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str;
1938 zss->sl_mode.sm_retval = SMERR_TXC;
1958 zss->sl_mode.sm_retval = SMERR_RXC;
1963 zss->sl_mode.sm_retval = SMERR_PLL;
1968 zss->sl_mode.sm_retval = SMERR_PLL;
1979 zss->sl_mode.sm_retval = SMERR_BAUDRATE;
1994 zss->sl_mode.sm_retval = SMERR_BAUDRATE;
2004 zss->sl_mode.sm_retval = SMERR_LPBKS;
2027 if (zss->sl_flags & SF_FDXPTP) {
2029 zss->sl_rr0 |= ZSRR0_CTS; /* Assume CTS is high */
2034 if (!(zss->sl_flags & SF_FDXPTP))
2047 zss->sl_flags |= SF_INITIALIZED;
2048 bzero(&zss->sl_st, sizeof (struct sl_stats));
2049 bcopy(sm, &zss->sl_mode, sizeof (struct scc_mode));
2050 zss->sl_mode.sm_retval = 0; /* successful */
2064 register struct syncline *zss = (struct syncline *)&zs->zs_priv_str;
2068 if (((mp = zss->sl_mstat) != NULL) &&
2069 (zss->sl_mode.sm_config & (CONN_SIGNAL))) {
2071 mstat->type = (zss->sl_mode.sm_config & CONN_IBM) ?
2078 zss->sl_mstat = NULL;
2087 zsh_rxbad(struct zscom *zs, struct syncline *zss)
2098 zss->sl_st.ierror++;
2103 if (zss->sl_rhead) {
2104 zss->sl_rhead->b_wptr = zss->sl_rhead->b_rptr;
2105 zss->sl_rhead->b_datap->db_type = M_RSE;
2106 ZSH_FREEMSG(zss->sl_rhead);
2107 zss->sl_ractb = NULL;
2111 if (zss->sl_rhead) {
2112 zss->sl_rhead = NULL;
2113 ZSH_ALLOCB(zss->sl_ractb);
2125 zsh_txbad(struct zscom *zs, struct syncline *zss)
2127 if (zss->sl_xhead) { /* free the message we were sending */
2128 zss->sl_xhead->b_wptr = zss->sl_xhead->b_rptr;
2129 ZSH_FREEMSG(zss->sl_xhead);
2130 zss->sl_xactb = NULL;
2134 zss->sl_xhead = NULL;
2136 if (!(zss->sl_flags & SF_FDXPTP)) {
2142 zss->sl_rr0 &= ~ZSRR0_CTS;
2144 zss->sl_txstate = TX_IDLE;
2145 if (!(zss->sl_flags & SF_PHONY))
2146 zss->sl_st.oerror++;
2156 struct syncline *zss = (struct syncline *)&zs->zs_priv_str;
2174 if (zss->sl_stream.str_rq)
2175 wq = WR(zss->sl_stream.str_rq);
2182 if (!(zss->sl_flags & SF_XMT_INPROG) && wq->q_first) {
2183 zss->sl_flags |= SF_XMT_INPROG;
2184 if ((zss->sl_flags & SF_FDXPTP) ||
2185 zsh_hdp_ok_or_rts_state(zs, zss))
2186 (void) zsh_start(zs, zss);
2190 if (zss->sl_wd_count-- > 0)
2193 if (zss->sl_flags & SF_FLUSH_WQ) {
2194 if (!(zss->sl_flags & SF_FDXPTP))
2195 zss->sl_flags &= ~SF_FLUSH_WQ;
2199 zss->sl_rr0 |= ZSRR0_CTS;
2201 zss->sl_flags &= ~SF_FLUSH_WQ;
2207 switch (zss->sl_txstate) {
2213 if (zss->sl_flags & SF_FDXPTP) {
2214 zss->sl_flags |= SF_XMT_INPROG;
2215 (void) zsh_start(zs, zss);
2233 if (--zss->sl_wd_count <= 0) {
2237 zsh_txbad(zs, zss);
2238 zss->sl_txstate = TX_ABORTED; /* must be after txbad */
2247 zss->sl_st.cts++;
2250 zss->sl_flags &= ~SF_XMT_INPROG;
2251 zss->sl_flags |= SF_FLUSH_WQ;
2264 if (zss->sl_txstate != TX_OFF) {
2266 zss->sl_wd_id = timeout(zsh_watchdog, zs, SIO_WATCHDOG_TICK);
2268 zss->sl_wd_id = 0; /* safety */
2274 if ((mp = zss->sl_xstandby) != NULL)
2275 zss->sl_xstandby = NULL;
2289 struct syncline *zss = (struct syncline *)&zs->zs_priv_str;
2293 if (zss->sl_bufcid) {
2294 zss->sl_bufcid = 0;