Lines Matching refs:pp

477 	usbser_port_t	*pp;  in usbser_open()  local
510 pp = &usp->us_ports[port_num]; in usbser_open()
513 rval = usbser_open_setup(rq, pp, minor, flag, cr); in usbser_open()
515 USB_DPRINTF_L4(DPRINT_OPEN, pp->port_lh, "usbser_open: rval=%d", rval); in usbser_open()
536 usbser_port_t *pp = (usbser_port_t *)rq->q_ptr; in usbser_close() local
539 if (pp == NULL) { in usbser_close()
544 online = usbser_dev_is_online(pp->port_usp); in usbser_close()
549 mutex_enter(&pp->port_mutex); in usbser_close()
550 pp->port_state = USBSER_PORT_CLOSING; in usbser_close()
554 usbser_close_drain(pp); in usbser_close()
558 usbser_close_cancel_break(pp); in usbser_close()
562 usbser_close_hangup(pp); in usbser_close()
568 usbser_close_cleanup(pp); in usbser_close()
569 mutex_exit(&pp->port_mutex); in usbser_close()
571 USB_DPRINTF_L4(DPRINT_CLOSE, pp->port_lh, "usbser_close: end"); in usbser_close()
584 usbser_port_t *pp = (usbser_port_t *)q->q_ptr; in usbser_rsrv() local
588 USB_DPRINTF_L4(DPRINT_RQ, pp->port_lh, "usbser_rsrv"); in usbser_rsrv()
595 mutex_enter(&pp->port_mutex); in usbser_rsrv()
596 ASSERT(pp->port_state != USBSER_PORT_CLOSED); in usbser_rsrv()
598 if (USBSER_PORT_ACCESS_OK(pp)) { in usbser_rsrv()
599 usbser_thr_wake(&pp->port_rq_thread); in usbser_rsrv()
601 mutex_exit(&pp->port_mutex); in usbser_rsrv()
614 usbser_port_t *pp = (usbser_port_t *)q->q_ptr; in usbser_wput() local
616 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, "usbser_wput"); in usbser_wput()
618 mutex_enter(&pp->port_mutex); in usbser_wput()
619 ASSERT(pp->port_state != USBSER_PORT_CLOSED); in usbser_wput()
622 if (pp->port_state == USBSER_PORT_CLOSING) { in usbser_wput()
630 pp->port_wq_data_cnt += msgdsize(mp); in usbser_wput()
634 mutex_exit(&pp->port_mutex); in usbser_wput()
647 usbser_port_t *pp = (usbser_port_t *)q->q_ptr; in usbser_wsrv() local
649 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, "usbser_wsrv"); in usbser_wsrv()
651 mutex_enter(&pp->port_mutex); in usbser_wsrv()
652 ASSERT(pp->port_state != USBSER_PORT_CLOSED); in usbser_wsrv()
654 if (USBSER_PORT_ACCESS_OK(pp)) { in usbser_wsrv()
655 usbser_thr_wake(&pp->port_wq_thread); in usbser_wsrv()
657 mutex_exit(&pp->port_mutex); in usbser_wsrv()
816 usbser_port_t *pp; in usbser_attach_ports() local
834 pp = &usp->us_ports[i]; in usbser_attach_ports()
839 pp->port_num = i; in usbser_attach_ports()
840 pp->port_usp = usp; in usbser_attach_ports()
841 pp->port_ds_ops = usp->us_ds_ops; in usbser_attach_ports()
842 pp->port_ds_hdl = usp->us_ds_hdl; in usbser_attach_ports()
845 (void) sprintf(pp->port_lh_name, "usbs[%d].", i); in usbser_attach_ports()
846 pp->port_lh = usb_alloc_log_hdl(usp->us_dip, in usbser_attach_ports()
847 pp->port_lh_name, &usbser_errlevel, &usbser_errmask, in usbser_attach_ports()
850 mutex_init(&pp->port_mutex, NULL, MUTEX_DRIVER, (void *)NULL); in usbser_attach_ports()
851 cv_init(&pp->port_state_cv, NULL, CV_DEFAULT, NULL); in usbser_attach_ports()
852 cv_init(&pp->port_act_cv, NULL, CV_DEFAULT, NULL); in usbser_attach_ports()
853 cv_init(&pp->port_car_cv, NULL, CV_DEFAULT, NULL); in usbser_attach_ports()
858 pp->port_wq_thread.thr_port = pp; in usbser_attach_ports()
859 pp->port_wq_thread.thr_func = usbser_wq_thread; in usbser_attach_ports()
860 pp->port_wq_thread.thr_arg = (void *)&pp->port_wq_thread; in usbser_attach_ports()
861 cv_init(&pp->port_wq_thread.thr_cv, NULL, CV_DEFAULT, NULL); in usbser_attach_ports()
863 pp->port_rq_thread.thr_port = pp; in usbser_attach_ports()
864 pp->port_rq_thread.thr_func = usbser_rq_thread; in usbser_attach_ports()
865 pp->port_rq_thread.thr_arg = (void *)&pp->port_rq_thread; in usbser_attach_ports()
866 cv_init(&pp->port_rq_thread.thr_cv, NULL, CV_DEFAULT, NULL); in usbser_attach_ports()
871 ds_cb.cb_arg = (caddr_t)pp; in usbser_attach_ports()
874 pp->port_state = USBSER_PORT_CLOSED; in usbser_attach_ports()
933 usbser_port_t *pp; in usbser_detach_ports() local
941 pp = &usp->us_ports[i]; in usbser_detach_ports()
943 if (pp->port_state != USBSER_PORT_CLOSED) { in usbser_detach_ports()
944 ASSERT(pp->port_state == USBSER_PORT_NOT_INIT); in usbser_detach_ports()
951 mutex_destroy(&pp->port_mutex); in usbser_detach_ports()
952 cv_destroy(&pp->port_state_cv); in usbser_detach_ports()
953 cv_destroy(&pp->port_act_cv); in usbser_detach_ports()
954 cv_destroy(&pp->port_car_cv); in usbser_detach_ports()
956 cv_destroy(&pp->port_wq_thread.thr_cv); in usbser_detach_ports()
957 cv_destroy(&pp->port_rq_thread.thr_cv); in usbser_detach_ports()
959 usb_free_log_hdl(pp->port_lh); in usbser_detach_ports()
1079 usbser_port_t *pp; in usbser_disconnect_ports() local
1091 pp = &usp->us_ports[i]; in usbser_disconnect_ports()
1093 mutex_enter(&pp->port_mutex); in usbser_disconnect_ports()
1094 if (pp->port_state == USBSER_PORT_OPEN || in usbser_disconnect_ports()
1095 USBSER_IS_OPENING(pp) || in usbser_disconnect_ports()
1096 pp->port_state == USBSER_PORT_CLOSING) { in usbser_disconnect_ports()
1100 if (pp->port_state == USBSER_PORT_OPEN) { in usbser_disconnect_ports()
1101 rq = pp->port_ttycommon.t_readq; in usbser_disconnect_ports()
1107 pp->port_flags |= USBSER_FL_HUNGUP; in usbser_disconnect_ports()
1113 usbser_release_port_act(pp, USBSER_ACT_ALL); in usbser_disconnect_ports()
1115 delay_id = pp->port_delay_id; in usbser_disconnect_ports()
1116 pp->port_delay_id = 0; in usbser_disconnect_ports()
1119 pp->port_state = USBSER_PORT_DISCONNECTED; in usbser_disconnect_ports()
1120 cv_broadcast(&pp->port_state_cv); in usbser_disconnect_ports()
1122 mutex_exit(&pp->port_mutex); in usbser_disconnect_ports()
1198 usbser_port_t *pp; in usbser_suspend_ports() local
1202 pp = &usp->us_ports[i]; in usbser_suspend_ports()
1204 mutex_enter(&pp->port_mutex); in usbser_suspend_ports()
1205 if (pp->port_state != USBSER_PORT_CLOSED) { in usbser_suspend_ports()
1206 mutex_exit(&pp->port_mutex); in usbser_suspend_ports()
1210 mutex_exit(&pp->port_mutex); in usbser_suspend_ports()
1288 usbser_port_t *pp; in usbser_restore_ports_state() local
1293 pp = &usp->us_ports[i]; in usbser_restore_ports_state()
1295 mutex_enter(&pp->port_mutex); in usbser_restore_ports_state()
1299 if ((pp->port_state != USBSER_PORT_SUSPENDED) && in usbser_restore_ports_state()
1300 (pp->port_state != USBSER_PORT_DISCONNECTED)) { in usbser_restore_ports_state()
1301 mutex_exit(&pp->port_mutex); in usbser_restore_ports_state()
1306 pp->port_state = USBSER_PORT_OPEN; in usbser_restore_ports_state()
1311 if (pp->port_flags & USBSER_FL_HUNGUP) { in usbser_restore_ports_state()
1312 pp->port_flags &= ~USBSER_FL_HUNGUP; in usbser_restore_ports_state()
1313 rq = pp->port_ttycommon.t_readq; in usbser_restore_ports_state()
1315 mutex_exit(&pp->port_mutex); in usbser_restore_ports_state()
1317 mutex_enter(&pp->port_mutex); in usbser_restore_ports_state()
1323 (void) usbser_port_program(pp); in usbser_restore_ports_state()
1328 cv_broadcast(&pp->port_state_cv); in usbser_restore_ports_state()
1329 cv_broadcast(&pp->port_act_cv); in usbser_restore_ports_state()
1330 usbser_thr_wake(&pp->port_wq_thread); in usbser_restore_ports_state()
1331 usbser_thr_wake(&pp->port_rq_thread); in usbser_restore_ports_state()
1332 mutex_exit(&pp->port_mutex); in usbser_restore_ports_state()
1364 usbser_open_setup(queue_t *rq, usbser_port_t *pp, int minor, int flag, in usbser_open_setup() argument
1369 mutex_enter(&pp->port_mutex); in usbser_open_setup()
1374 switch (pp->port_state) { in usbser_open_setup()
1379 rval = usbser_open_init(pp, minor); in usbser_open_setup()
1387 if ((minor & OUTLINE) && (pp->port_flags & USBSER_FL_WOPEN)) { in usbser_open_setup()
1388 pp->port_state = USBSER_PORT_OPENING_OUT; in usbser_open_setup()
1390 USB_DPRINTF_L3(DPRINT_OPEN, pp->port_lh, in usbser_open_setup()
1399 if (USBSER_NO_OTHER_OPEN(pp, minor)) { in usbser_open_setup()
1400 rval = usbser_open_line_setup(pp, minor, flag); in usbser_open_setup()
1410 if (cv_wait_sig(&pp->port_state_cv, &pp->port_mutex) == 0) { in usbser_open_setup()
1416 if ((pp->port_ttycommon.t_flags & TS_XCLUDE) && in usbser_open_setup()
1422 } else if (USBSER_OPEN_IN_OTHER_MODE(pp, minor)) { in usbser_open_setup()
1431 rval = usbser_open_line_setup(pp, minor, flag); in usbser_open_setup()
1449 if (USBSER_IS_OPENING(pp)) { in usbser_open_setup()
1451 if (pp->port_state == USBSER_PORT_OPENING_OUT) { in usbser_open_setup()
1452 pp->port_flags |= USBSER_FL_OUT; in usbser_open_setup()
1454 pp->port_state = USBSER_PORT_OPEN; in usbser_open_setup()
1455 cv_broadcast(&pp->port_state_cv); in usbser_open_setup()
1457 usbser_open_queues_init(pp, rq); in usbser_open_setup()
1459 usbser_open_fini(pp); in usbser_open_setup()
1462 mutex_exit(&pp->port_mutex); in usbser_open_setup()
1472 usbser_open_init(usbser_port_t *pp, int minor) in usbser_open_init() argument
1474 usbser_state_t *usp = pp->port_usp; in usbser_open_init()
1475 tty_common_t *tp = &pp->port_ttycommon; in usbser_open_init()
1478 ASSERT(pp->port_state == USBSER_PORT_CLOSED); in usbser_open_init()
1483 pp->port_act = 0; in usbser_open_init()
1484 pp->port_flags &= USBSER_FL_PRESERVE; in usbser_open_init()
1485 pp->port_flowc = '\0'; in usbser_open_init()
1486 pp->port_wq_data_cnt = 0; in usbser_open_init()
1489 pp->port_state = USBSER_PORT_OPENING_OUT; in usbser_open_init()
1491 pp->port_state = USBSER_PORT_OPENING_TTY; in usbser_open_init()
1504 usbser_check_port_props(pp); in usbser_open_init()
1511 usbser_thr_dispatch(&pp->port_wq_thread); in usbser_open_init()
1512 usbser_thr_dispatch(&pp->port_rq_thread); in usbser_open_init()
1517 mutex_exit(&pp->port_mutex); in usbser_open_init()
1518 rval = USBSER_DS_OPEN_PORT(usp, pp->port_num); in usbser_open_init()
1519 mutex_enter(&pp->port_mutex); in usbser_open_init()
1525 pp->port_flags |= USBSER_FL_DSD_OPEN; in usbser_open_init()
1530 if ((rval = usbser_port_program(pp)) != 0) { in usbser_open_init()
1543 usbser_check_port_props(usbser_port_t *pp) in usbser_check_port_props() argument
1545 dev_info_t *dip = pp->port_usp->us_dip; in usbser_check_port_props()
1546 tty_common_t *tp = &pp->port_ttycommon; in usbser_check_port_props()
1573 (void) sprintf(name, "port-%d-ignore-cd", pp->port_num); in usbser_check_port_props()
1577 pp->port_flags |= USBSER_FL_IGNORE_CD; in usbser_check_port_props()
1579 pp->port_flags &= ~USBSER_FL_IGNORE_CD; in usbser_check_port_props()
1588 usbser_open_fini(usbser_port_t *pp) in usbser_open_fini() argument
1590 uint_t port_num = pp->port_num; in usbser_open_fini()
1591 usbser_state_t *usp = pp->port_usp; in usbser_open_fini()
1596 if (pp->port_flags & USBSER_FL_DSD_OPEN) { in usbser_open_fini()
1597 mutex_exit(&pp->port_mutex); in usbser_open_fini()
1599 USB_DPRINTF_L2(DPRINT_CLOSE, pp->port_lh, in usbser_open_fini()
1602 mutex_enter(&pp->port_mutex); in usbser_open_fini()
1608 usbser_thr_cancel(&pp->port_wq_thread); in usbser_open_fini()
1609 usbser_thr_cancel(&pp->port_rq_thread); in usbser_open_fini()
1614 pp->port_state = USBSER_PORT_CLOSED; in usbser_open_fini()
1615 cv_broadcast(&pp->port_state_cv); in usbser_open_fini()
1616 cv_broadcast(&pp->port_car_cv); in usbser_open_fini()
1624 usbser_open_line_setup(usbser_port_t *pp, int minor, int flag) in usbser_open_line_setup() argument
1628 mutex_exit(&pp->port_mutex); in usbser_open_line_setup()
1632 if (!usbser_dev_is_online(pp->port_usp)) { in usbser_open_line_setup()
1633 mutex_enter(&pp->port_mutex); in usbser_open_line_setup()
1639 (void) USBSER_DS_SET_MODEM_CTL(pp, TIOCM_DTR, TIOCM_DTR); in usbser_open_line_setup()
1641 mutex_enter(&pp->port_mutex); in usbser_open_line_setup()
1645 rval = usbser_open_carrier_check(pp, minor, flag); in usbser_open_line_setup()
1655 usbser_open_carrier_check(usbser_port_t *pp, int minor, int flag) in usbser_open_carrier_check() argument
1657 tty_common_t *tp = &pp->port_ttycommon; in usbser_open_carrier_check()
1661 if (pp->port_flags & USBSER_FL_IGNORE_CD) { in usbser_open_carrier_check()
1669 pp->port_flags |= USBSER_FL_CARR_ON; in usbser_open_carrier_check()
1670 } else if (USBSER_DS_GET_MODEM_CTL(pp, TIOCM_CD, &val) != USB_SUCCESS) { in usbser_open_carrier_check()
1674 pp->port_flags |= USBSER_FL_CARR_ON; in usbser_open_carrier_check()
1676 pp->port_flags &= ~USBSER_FL_CARR_ON; in usbser_open_carrier_check()
1684 (minor & OUTLINE) || (pp->port_flags & USBSER_FL_CARR_ON)) { in usbser_open_carrier_check()
1692 USB_DPRINTF_L4(DPRINT_OPEN, pp->port_lh, in usbser_open_carrier_check()
1695 pp->port_flags |= USBSER_FL_WOPEN; in usbser_open_carrier_check()
1697 rval = cv_wait_sig(&pp->port_car_cv, &pp->port_mutex); in usbser_open_carrier_check()
1699 pp->port_flags &= ~USBSER_FL_WOPEN; in usbser_open_carrier_check()
1719 usbser_open_queues_init(usbser_port_t *pp, queue_t *rq) in usbser_open_queues_init() argument
1721 pp->port_ttycommon.t_readq = rq; in usbser_open_queues_init()
1722 pp->port_ttycommon.t_writeq = WR(rq); in usbser_open_queues_init()
1723 rq->q_ptr = WR(rq)->q_ptr = (caddr_t)pp; in usbser_open_queues_init()
1733 usbser_open_queues_fini(usbser_port_t *pp) in usbser_open_queues_fini() argument
1735 queue_t *rq = pp->port_ttycommon.t_readq; in usbser_open_queues_fini()
1737 mutex_exit(&pp->port_mutex); in usbser_open_queues_fini()
1750 ttycommon_close(&pp->port_ttycommon); in usbser_open_queues_fini()
1751 mutex_enter(&pp->port_mutex); in usbser_open_queues_fini()
1759 usbser_close_drain(usbser_port_t *pp) in usbser_close_drain() argument
1774 while ((pp->port_wq_data_cnt > 0) && USBSER_PORT_IS_BUSY(pp)) { in usbser_close_drain()
1775 if ((rval = cv_timedwait_sig(&pp->port_act_cv, &pp->port_mutex, in usbser_close_drain()
1783 need_drain = (pp->port_wq_data_cnt == 0) || !USBSER_PORT_IS_BUSY(pp) || in usbser_close_drain()
1786 mutex_exit(&pp->port_mutex); in usbser_close_drain()
1793 rval = USBSER_DS_FIFO_DRAIN(pp, USBSER_TX_FIFO_DRAIN_TIMEOUT); in usbser_close_drain()
1795 (void) USBSER_DS_FIFO_FLUSH(pp, DS_TX); in usbser_close_drain()
1798 (void) USBSER_DS_FIFO_FLUSH(pp, DS_TX); in usbser_close_drain()
1800 mutex_enter(&pp->port_mutex); in usbser_close_drain()
1808 usbser_close_cancel_break(usbser_port_t *pp) in usbser_close_cancel_break() argument
1812 if (pp->port_act & USBSER_ACT_BREAK) { in usbser_close_cancel_break()
1813 delay_id = pp->port_delay_id; in usbser_close_cancel_break()
1814 pp->port_delay_id = 0; in usbser_close_cancel_break()
1816 mutex_exit(&pp->port_mutex); in usbser_close_cancel_break()
1818 (void) USBSER_DS_BREAK_CTL(pp, DS_OFF); in usbser_close_cancel_break()
1819 mutex_enter(&pp->port_mutex); in usbser_close_cancel_break()
1821 pp->port_act &= ~USBSER_ACT_BREAK; in usbser_close_cancel_break()
1830 usbser_close_hangup(usbser_port_t *pp) in usbser_close_hangup() argument
1835 if (pp->port_ttycommon.t_cflag & HUPCL) { in usbser_close_hangup()
1836 mutex_exit(&pp->port_mutex); in usbser_close_hangup()
1837 (void) USBSER_DS_SET_MODEM_CTL(pp, TIOCM_RTS | TIOCM_DTR, 0); in usbser_close_hangup()
1838 mutex_enter(&pp->port_mutex); in usbser_close_hangup()
1847 usbser_close_cleanup(usbser_port_t *pp) in usbser_close_cleanup() argument
1849 usbser_open_queues_fini(pp); in usbser_close_cleanup()
1851 usbser_open_fini(pp); in usbser_close_cleanup()
1866 usbser_port_t *pp = thr->thr_port; in usbser_thr_dispatch() local
1867 usbser_state_t *usp = pp->port_usp; in usbser_thr_dispatch()
1870 ASSERT(mutex_owned(&pp->port_mutex)); in usbser_thr_dispatch()
1887 usbser_port_t *pp = thr->thr_port; in usbser_thr_cancel() local
1889 ASSERT(mutex_owned(&pp->port_mutex)); in usbser_thr_cancel()
1896 cv_wait(&thr->thr_cv, &pp->port_mutex); in usbser_thr_cancel()
1922 usbser_port_t *pp = thr->thr_port; in usbser_wq_thread() local
1924 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, "usbser_wq_thread: enter"); in usbser_wq_thread()
1926 mutex_enter(&pp->port_mutex); in usbser_wq_thread()
1937 if (pp->port_flags & USBSER_FL_STATUS_CB) { in usbser_wq_thread()
1938 usbser_status_proc_cb(pp); in usbser_wq_thread()
1941 usbser_wmsg(pp); in usbser_wq_thread()
1950 cv_wait(&thr->thr_cv, &pp->port_mutex); in usbser_wq_thread()
1951 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, in usbser_wq_thread()
1957 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, "usbser_wq_thread: exit"); in usbser_wq_thread()
1958 mutex_exit(&pp->port_mutex); in usbser_wq_thread()
1969 usbser_port_t *pp = thr->thr_port; in usbser_rq_thread() local
1971 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, "usbser_rq_thread: enter"); in usbser_rq_thread()
1973 mutex_enter(&pp->port_mutex); in usbser_rq_thread()
1985 if (!pp->port_ttycommon.t_readq) { in usbser_rq_thread()
1993 if (pp->port_flags & USBSER_FL_RX_STOPPED) { in usbser_rq_thread()
1994 pp->port_flowc = pp->port_ttycommon.t_startc; in usbser_rq_thread()
1995 usbser_inbound_flow_ctl(pp); in usbser_rq_thread()
2001 mutex_exit(&pp->port_mutex); in usbser_rq_thread()
2002 usbser_rx_cb((caddr_t)pp); in usbser_rq_thread()
2003 mutex_enter(&pp->port_mutex); in usbser_rq_thread()
2005 cv_wait(&thr->thr_cv, &pp->port_mutex); in usbser_rq_thread()
2006 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, in usbser_rq_thread()
2012 USB_DPRINTF_L4(DPRINT_RQ, pp->port_lh, "usbser_rq_thread: exit"); in usbser_rq_thread()
2013 mutex_exit(&pp->port_mutex); in usbser_rq_thread()
2032 usbser_port_t *pp = (usbser_port_t *)arg; in usbser_tx_cb() local
2035 online = usbser_dev_is_online(pp->port_usp); in usbser_tx_cb()
2037 mutex_enter(&pp->port_mutex); in usbser_tx_cb()
2038 USB_DPRINTF_L4(DPRINT_TX_CB, pp->port_lh, in usbser_tx_cb()
2039 "usbser_tx_cb: act=%x curthread=%p", pp->port_act, in usbser_tx_cb()
2042 usbser_release_port_act(pp, USBSER_ACT_TX); in usbser_tx_cb()
2049 if (online && USBSER_PORT_ACCESS_OK(pp) && in usbser_tx_cb()
2050 !USBSER_PORT_IS_BUSY_NON_RX(pp)) { in usbser_tx_cb()
2054 usbser_thr_wake(&pp->port_wq_thread); in usbser_tx_cb()
2056 mutex_exit(&pp->port_mutex); in usbser_tx_cb()
2068 usbser_port_t *pp = (usbser_port_t *)arg; in usbser_rx_cb() local
2074 USB_DPRINTF_L4(DPRINT_RX_CB, pp->port_lh, "usbser_rx_cb"); in usbser_rx_cb()
2076 if (!usbser_dev_is_online(pp->port_usp)) { in usbser_rx_cb()
2082 if ((mp = USBSER_DS_RX(pp)) == NULL) { in usbser_rx_cb()
2087 mutex_enter(&pp->port_mutex); in usbser_rx_cb()
2088 if ((!USBSER_PORT_ACCESS_OK(pp)) || in usbser_rx_cb()
2089 ((pp->port_ttycommon.t_cflag & CREAD) == 0)) { in usbser_rx_cb()
2091 mutex_exit(&pp->port_mutex); in usbser_rx_cb()
2092 USB_DPRINTF_L3(DPRINT_RX_CB, pp->port_lh, in usbser_rx_cb()
2098 usbser_serialize_port_act(pp, USBSER_ACT_RX); in usbser_rx_cb()
2100 rq = pp->port_ttycommon.t_readq; in usbser_rx_cb()
2101 wq = pp->port_ttycommon.t_writeq; in usbser_rx_cb()
2102 mutex_exit(&pp->port_mutex); in usbser_rx_cb()
2141 USB_DPRINTF_L2(DPRINT_RX_CB, pp->port_lh, in usbser_rx_cb()
2151 usbser_rx_massage_data(pp, data); in usbser_rx_cb()
2152 usbser_rx_cb_put(pp, rq, wq, data); in usbser_rx_cb()
2159 mutex_enter(&pp->port_mutex); in usbser_rx_cb()
2160 usbser_rx_massage_mbreak(pp, emp); in usbser_rx_cb()
2161 mutex_exit(&pp->port_mutex); in usbser_rx_cb()
2162 usbser_rx_cb_put(pp, rq, wq, emp); in usbser_rx_cb()
2167 usbser_rx_massage_data(pp, data); in usbser_rx_cb()
2168 usbser_rx_cb_put(pp, rq, wq, data); in usbser_rx_cb()
2171 mutex_enter(&pp->port_mutex); in usbser_rx_cb()
2172 usbser_release_port_act(pp, USBSER_ACT_RX); in usbser_rx_cb()
2173 mutex_exit(&pp->port_mutex); in usbser_rx_cb()
2188 usbser_rx_massage_data(usbser_port_t *pp, mblk_t *mp) in usbser_rx_massage_data() argument
2190 tty_common_t *tp = &pp->port_ttycommon; in usbser_rx_massage_data()
2196 mutex_enter(&pp->port_mutex); in usbser_rx_massage_data()
2200 mutex_exit(&pp->port_mutex); in usbser_rx_massage_data()
2204 mutex_exit(&pp->port_mutex); in usbser_rx_massage_data()
2212 USB_DPRINTF_L4(DPRINT_RX_CB, pp->port_lh, in usbser_rx_massage_data()
2223 USB_DPRINTF_L2(DPRINT_RX_CB, pp->port_lh, in usbser_rx_massage_data()
2251 usbser_rx_massage_mbreak(usbser_port_t *pp, mblk_t *mp) in usbser_rx_massage_mbreak() argument
2253 tty_common_t *tp = &pp->port_ttycommon; in usbser_rx_massage_mbreak()
2271 USB_DPRINTF_L4(DPRINT_RX_CB, pp->port_lh, in usbser_rx_massage_mbreak()
2281 usbser_rx_cb_put(usbser_port_t *pp, queue_t *rq, queue_t *wq, mblk_t *mp) in usbser_rx_cb_put() argument
2292 USB_DPRINTF_L3(DPRINT_RX_CB, pp->port_lh, in usbser_rx_cb_put()
2300 USB_DPRINTF_L1(DPRINT_RX_CB, pp->port_lh, in usbser_rx_cb_put()
2314 usbser_port_t *pp = (usbser_port_t *)arg; in usbser_status_cb() local
2316 USB_DPRINTF_L4(DPRINT_STATUS_CB, pp->port_lh, "usbser_status_cb"); in usbser_status_cb()
2318 if (!usbser_dev_is_online(pp->port_usp)) { in usbser_status_cb()
2327 mutex_enter(&pp->port_mutex); in usbser_status_cb()
2328 if (USBSER_PORT_ACCESS_OK(pp) || USBSER_IS_OPENING(pp)) { in usbser_status_cb()
2329 pp->port_flags |= USBSER_FL_STATUS_CB; in usbser_status_cb()
2330 usbser_thr_wake(&pp->port_wq_thread); in usbser_status_cb()
2332 mutex_exit(&pp->port_mutex); in usbser_status_cb()
2340 usbser_status_proc_cb(usbser_port_t *pp) in usbser_status_proc_cb() argument
2342 tty_common_t *tp = &pp->port_ttycommon; in usbser_status_proc_cb()
2348 USB_DPRINTF_L4(DPRINT_STATUS_CB, pp->port_lh, "usbser_status_proc_cb"); in usbser_status_proc_cb()
2350 pp->port_flags &= ~USBSER_FL_STATUS_CB; in usbser_status_proc_cb()
2352 mutex_exit(&pp->port_mutex); in usbser_status_proc_cb()
2353 if (!usbser_dev_is_online(pp->port_usp)) { in usbser_status_proc_cb()
2354 mutex_enter(&pp->port_mutex); in usbser_status_proc_cb()
2360 if (USBSER_DS_GET_MODEM_CTL(pp, -1, &status) != USB_SUCCESS) { in usbser_status_proc_cb()
2361 mutex_enter(&pp->port_mutex); in usbser_status_proc_cb()
2366 mutex_enter(&pp->port_mutex); in usbser_status_proc_cb()
2367 usbser_serialize_port_act(pp, USBSER_ACT_CTL); in usbser_status_proc_cb()
2369 rq = pp->port_ttycommon.t_readq; in usbser_status_proc_cb()
2370 wq = pp->port_ttycommon.t_writeq; in usbser_status_proc_cb()
2380 if (!(pp->port_flags & USBSER_FL_TX_STOPPED)) { in usbser_status_proc_cb()
2383 } else if (pp->port_flags & USBSER_FL_TX_STOPPED) { in usbser_status_proc_cb()
2398 if ((pp->port_flags & USBSER_FL_CARR_ON) == 0) { in usbser_status_proc_cb()
2399 pp->port_flags |= USBSER_FL_CARR_ON; in usbser_status_proc_cb()
2405 if (pp->port_flags & USBSER_FL_WOPEN) { in usbser_status_proc_cb()
2406 cv_broadcast(&pp->port_car_cv); in usbser_status_proc_cb()
2409 USB_DPRINTF_L4(DPRINT_STATUS_CB, pp->port_lh, in usbser_status_proc_cb()
2412 } else if (pp->port_flags & USBSER_FL_CARR_ON) { in usbser_status_proc_cb()
2413 pp->port_flags &= ~USBSER_FL_CARR_ON; in usbser_status_proc_cb()
2421 if ((pp->port_flags & USBSER_FL_TX_STOPPED) && (wq_msg == 0)) { in usbser_status_proc_cb()
2425 USB_DPRINTF_L4(DPRINT_STATUS_CB, pp->port_lh, in usbser_status_proc_cb()
2428 mutex_exit(&pp->port_mutex); in usbser_status_proc_cb()
2430 USB_DPRINTF_L4(DPRINT_STATUS_CB, pp->port_lh, in usbser_status_proc_cb()
2442 (void) USBSER_DS_SET_MODEM_CTL(pp, TIOCM_DTR, 0); in usbser_status_proc_cb()
2449 mutex_enter(&pp->port_mutex); in usbser_status_proc_cb()
2450 usbser_release_port_act(pp, USBSER_ACT_CTL); in usbser_status_proc_cb()
2463 usbser_wmsg(usbser_port_t *pp) in usbser_wmsg() argument
2465 queue_t *q = pp->port_ttycommon.t_writeq; in usbser_wmsg()
2469 ASSERT(mutex_owned(&pp->port_mutex)); in usbser_wmsg()
2472 USB_DPRINTF_L3(DPRINT_WQ, pp->port_lh, "usbser_wmsg: q=NULL"); in usbser_wmsg()
2476 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, "usbser_wmsg: q=%p act=%x 0x%x", in usbser_wmsg()
2477 (void *)q, pp->port_act, q->q_first ? DB_TYPE(q->q_first) : 0xff); in usbser_wmsg()
2481 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, "usbser_wmsg: " in usbser_wmsg()
2489 usbser_stop(pp, mp); in usbser_wmsg()
2493 usbser_start(pp, mp); in usbser_wmsg()
2497 usbser_stopi(pp, mp); in usbser_wmsg()
2501 usbser_starti(pp, mp); in usbser_wmsg()
2505 usbser_iocdata(pp, mp); in usbser_wmsg()
2509 usbser_flush(pp, mp); in usbser_wmsg()
2516 usbser_break(pp, mp); in usbser_wmsg()
2520 usbser_delay(pp, mp); in usbser_wmsg()
2524 if (usbser_data(pp, mp) != USB_SUCCESS) { in usbser_wmsg()
2532 if (usbser_ioctl(pp, mp) != USB_SUCCESS) { in usbser_wmsg()
2552 usbser_data(usbser_port_t *pp, mblk_t *mp) in usbser_data() argument
2555 if ((pp->port_act & USBSER_ACT_TX) || in usbser_data()
2556 (pp->port_act & USBSER_ACT_DELAY)) { in usbser_data()
2566 pp->port_act |= USBSER_ACT_TX; in usbser_data()
2567 pp->port_wq_data_cnt -= msgdsize(mp); in usbser_data()
2569 mutex_exit(&pp->port_mutex); in usbser_data()
2571 (void) USBSER_DS_TX(pp, mp); in usbser_data()
2572 mutex_enter(&pp->port_mutex); in usbser_data()
2582 usbser_ioctl(usbser_port_t *pp, mblk_t *mp) in usbser_ioctl() argument
2584 tty_common_t *tp = &pp->port_ttycommon; in usbser_ioctl()
2592 ASSERT(mutex_owned(&pp->port_mutex)); in usbser_ioctl()
2598 USB_DPRINTF_L4(DPRINT_IOCTL, pp->port_lh, "usbser_ioctl: " in usbser_ioctl()
2628 usbser_serialize_port_act(pp, USBSER_ACT_CTL); in usbser_ioctl()
2629 mutex_exit(&pp->port_mutex); in usbser_ioctl()
2634 if (pp->port_act & USBSER_ACT_BREAK) in usbser_ioctl()
2638 usbser_serialize_port_act(pp, USBSER_ACT_CTL); in usbser_ioctl()
2639 mutex_exit(&pp->port_mutex); in usbser_ioctl()
2655 (void) USBSER_DS_FIFO_DRAIN(pp, DS_TX); in usbser_ioctl()
2659 mutex_enter(&pp->port_mutex); in usbser_ioctl()
2660 error = usbser_port_program(pp); in usbser_ioctl()
2661 mutex_exit(&pp->port_mutex); in usbser_ioctl()
2667 USB_DPRINTF_L3(DPRINT_IOCTL, pp->port_lh, "usbser_ioctl: " in usbser_ioctl()
2682 (void) USBSER_DS_FIFO_DRAIN(pp, USBSER_TX_FIFO_DRAIN_TIMEOUT); in usbser_ioctl()
2688 if (USBSER_DS_BREAK_CTL(pp, DS_ON) != USB_SUCCESS) { in usbser_ioctl()
2693 mutex_enter(&pp->port_mutex); in usbser_ioctl()
2694 pp->port_act |= USBSER_ACT_BREAK; in usbser_ioctl()
2695 pp->port_delay_id = timeout(usbser_restart, pp, in usbser_ioctl()
2697 mutex_exit(&pp->port_mutex); in usbser_ioctl()
2703 if (USBSER_DS_BREAK_CTL(pp, DS_ON) != USB_SUCCESS) in usbser_ioctl()
2710 if (USBSER_DS_BREAK_CTL(pp, DS_OFF) != USB_SUCCESS) in usbser_ioctl()
2728 rval = USBSER_DS_SET_MODEM_CTL(pp, -1, val); in usbser_ioctl()
2730 rval = USBSER_DS_SET_MODEM_CTL(pp, val, -1); in usbser_ioctl()
2732 rval = USBSER_DS_SET_MODEM_CTL(pp, val, 0); in usbser_ioctl()
2741 if (USBSER_DS_LOOPBACK_SUPPORTED(pp)) { in usbser_ioctl()
2742 if (USBSER_DS_LOOPBACK(pp, DS_ON) == USB_SUCCESS) in usbser_ioctl()
2752 if (USBSER_DS_LOOPBACK_SUPPORTED(pp)) { in usbser_ioctl()
2753 if (USBSER_DS_LOOPBACK(pp, DS_OFF) == USB_SUCCESS) in usbser_ioctl()
2767 rval = USBSER_DS_GET_MODEM_CTL(pp, -1, (int *)datamp->b_rptr); in usbser_ioctl()
2779 error = usbser_polledio_init(pp); in usbser_ioctl()
2793 usbser_polledio_fini(pp); in usbser_ioctl()
2848 mutex_enter(&pp->port_mutex); in usbser_ioctl()
2849 usbser_release_port_act(pp, USBSER_ACT_CTL); in usbser_ioctl()
2859 usbser_iocdata(usbser_port_t *pp, mblk_t *mp) in usbser_iocdata() argument
2861 tty_common_t *tp = &pp->port_ttycommon; in usbser_iocdata()
2868 ASSERT(mutex_owned(&pp->port_mutex)); in usbser_iocdata()
2889 usbser_serialize_port_act(pp, USBSER_ACT_CTL); in usbser_iocdata()
2890 mutex_exit(&pp->port_mutex); in usbser_iocdata()
2893 rval = USBSER_DS_SET_MODEM_CTL(pp, -1, val); in usbser_iocdata()
2895 rval = USBSER_DS_SET_MODEM_CTL(pp, val, -1); in usbser_iocdata()
2897 rval = USBSER_DS_SET_MODEM_CTL(pp, val, 0); in usbser_iocdata()
2910 mutex_enter(&pp->port_mutex); in usbser_iocdata()
2911 usbser_release_port_act(pp, USBSER_ACT_CTL); in usbser_iocdata()
2915 mutex_exit(&pp->port_mutex); in usbser_iocdata()
2917 mutex_enter(&pp->port_mutex); in usbser_iocdata()
2921 mutex_exit(&pp->port_mutex); in usbser_iocdata()
2923 mutex_enter(&pp->port_mutex); in usbser_iocdata()
2933 usbser_stop(usbser_port_t *pp, mblk_t *mp) in usbser_stop() argument
2936 if (!(pp->port_flags & USBSER_FL_TX_STOPPED)) { in usbser_stop()
2937 usbser_serialize_port_act(pp, USBSER_ACT_CTL); in usbser_stop()
2938 pp->port_flags |= USBSER_FL_TX_STOPPED; in usbser_stop()
2940 mutex_exit(&pp->port_mutex); in usbser_stop()
2941 USBSER_DS_STOP(pp, DS_TX); in usbser_stop()
2942 mutex_enter(&pp->port_mutex); in usbser_stop()
2944 usbser_release_port_act(pp, USBSER_ACT_TX); in usbser_stop()
2945 usbser_release_port_act(pp, USBSER_ACT_CTL); in usbser_stop()
2952 usbser_start(usbser_port_t *pp, mblk_t *mp) in usbser_start() argument
2955 if (pp->port_flags & USBSER_FL_TX_STOPPED) { in usbser_start()
2956 usbser_serialize_port_act(pp, USBSER_ACT_CTL); in usbser_start()
2957 pp->port_flags &= ~USBSER_FL_TX_STOPPED; in usbser_start()
2959 mutex_exit(&pp->port_mutex); in usbser_start()
2960 USBSER_DS_START(pp, DS_TX); in usbser_start()
2961 mutex_enter(&pp->port_mutex); in usbser_start()
2962 usbser_release_port_act(pp, USBSER_ACT_CTL); in usbser_start()
2969 usbser_stopi(usbser_port_t *pp, mblk_t *mp) in usbser_stopi() argument
2972 usbser_serialize_port_act(pp, USBSER_ACT_CTL); in usbser_stopi()
2973 pp->port_flowc = pp->port_ttycommon.t_stopc; in usbser_stopi()
2974 usbser_inbound_flow_ctl(pp); in usbser_stopi()
2975 usbser_release_port_act(pp, USBSER_ACT_CTL); in usbser_stopi()
2980 usbser_starti(usbser_port_t *pp, mblk_t *mp) in usbser_starti() argument
2983 usbser_serialize_port_act(pp, USBSER_ACT_CTL); in usbser_starti()
2984 pp->port_flowc = pp->port_ttycommon.t_startc; in usbser_starti()
2985 usbser_inbound_flow_ctl(pp); in usbser_starti()
2986 usbser_release_port_act(pp, USBSER_ACT_CTL); in usbser_starti()
2994 usbser_flush(usbser_port_t *pp, mblk_t *mp) in usbser_flush() argument
2996 queue_t *q = pp->port_ttycommon.t_writeq; in usbser_flush()
2999 mutex_exit(&pp->port_mutex); in usbser_flush()
3000 (void) USBSER_DS_FIFO_FLUSH(pp, DS_TX); /* flush FIFO buffers */ in usbser_flush()
3002 mutex_enter(&pp->port_mutex); in usbser_flush()
3004 usbser_release_port_act(pp, USBSER_ACT_TX); in usbser_flush()
3012 mutex_exit(&pp->port_mutex); in usbser_flush()
3013 (void) USBSER_DS_FIFO_FLUSH(pp, DS_RX); in usbser_flush()
3016 mutex_enter(&pp->port_mutex); in usbser_flush()
3026 usbser_break(usbser_port_t *pp, mblk_t *mp) in usbser_break() argument
3033 mutex_exit(&pp->port_mutex); in usbser_break()
3034 rval = USBSER_DS_BREAK_CTL(pp, DS_ON); in usbser_break()
3035 mutex_enter(&pp->port_mutex); in usbser_break()
3038 pp->port_act |= USBSER_ACT_BREAK; in usbser_break()
3039 pp->port_delay_id = timeout(usbser_restart, pp, in usbser_break()
3050 usbser_delay(usbser_port_t *pp, mblk_t *mp) in usbser_delay() argument
3055 pp->port_act |= USBSER_ACT_DELAY; in usbser_delay()
3056 pp->port_delay_id = timeout(usbser_restart, pp, in usbser_delay()
3068 usbser_port_t *pp = (usbser_port_t *)arg; in usbser_restart() local
3070 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, "usbser_restart"); in usbser_restart()
3072 mutex_enter(&pp->port_mutex); in usbser_restart()
3074 if (pp->port_delay_id == 0) { in usbser_restart()
3075 mutex_exit(&pp->port_mutex); in usbser_restart()
3079 pp->port_delay_id = 0; in usbser_restart()
3082 if (pp->port_act & USBSER_ACT_BREAK) { in usbser_restart()
3083 mutex_exit(&pp->port_mutex); in usbser_restart()
3084 (void) USBSER_DS_BREAK_CTL(pp, DS_OFF); in usbser_restart()
3085 mutex_enter(&pp->port_mutex); in usbser_restart()
3088 usbser_release_port_act(pp, USBSER_ACT_BREAK | USBSER_ACT_DELAY); in usbser_restart()
3091 usbser_thr_wake(&pp->port_wq_thread); in usbser_restart()
3092 mutex_exit(&pp->port_mutex); in usbser_restart()
3101 usbser_port_program(usbser_port_t *pp) in usbser_port_program() argument
3103 tty_common_t *tp = &pp->port_ttycommon; in usbser_port_program()
3181 if (pp->port_flags & USBSER_FL_RX_STOPPED) { in usbser_port_program()
3186 mutex_exit(&pp->port_mutex); in usbser_port_program()
3187 err = USBSER_DS_SET_PORT_PARAMS(pp, &params); in usbser_port_program()
3189 mutex_enter(&pp->port_mutex); in usbser_port_program()
3194 err = USBSER_DS_SET_MODEM_CTL(pp, TIOCM_DTR | TIOCM_RTS, ctl_val); in usbser_port_program()
3195 mutex_enter(&pp->port_mutex); in usbser_port_program()
3205 usbser_inbound_flow_ctl(usbser_port_t *pp) in usbser_inbound_flow_ctl() argument
3209 char c = pp->port_flowc; in usbser_inbound_flow_ctl()
3212 USB_DPRINTF_L4(DPRINT_WQ, pp->port_lh, in usbser_inbound_flow_ctl()
3214 c, pp->port_ttycommon.t_cflag, pp->port_flags); in usbser_inbound_flow_ctl()
3220 pp->port_flowc = '\0'; in usbser_inbound_flow_ctl()
3225 need_hw = (pp->port_ttycommon.t_cflag & CRTSXOFF); in usbser_inbound_flow_ctl()
3226 if (c == pp->port_ttycommon.t_startc) { in usbser_inbound_flow_ctl()
3228 pp->port_flags &= ~USBSER_FL_RX_STOPPED; in usbser_inbound_flow_ctl()
3231 pp->port_flags |= USBSER_FL_RX_STOPPED; in usbser_inbound_flow_ctl()
3237 if (pp->port_ttycommon.t_iflag & IXOFF) { in usbser_inbound_flow_ctl()
3239 USB_DPRINTF_L2(DPRINT_WQ, pp->port_lh, in usbser_inbound_flow_ctl()
3243 pp->port_flags |= USBSER_ACT_TX; in usbser_inbound_flow_ctl()
3247 mutex_exit(&pp->port_mutex); in usbser_inbound_flow_ctl()
3249 (void) USBSER_DS_SET_MODEM_CTL(pp, TIOCM_RTS, rts); in usbser_inbound_flow_ctl()
3252 (void) USBSER_DS_TX(pp, mp); in usbser_inbound_flow_ctl()
3254 mutex_enter(&pp->port_mutex); in usbser_inbound_flow_ctl()
3281 usbser_serialize_port_act(usbser_port_t *pp, int act) in usbser_serialize_port_act() argument
3283 while (pp->port_act & act) in usbser_serialize_port_act()
3284 cv_wait(&pp->port_act_cv, &pp->port_mutex); in usbser_serialize_port_act()
3285 pp->port_act |= act; in usbser_serialize_port_act()
3293 usbser_release_port_act(usbser_port_t *pp, int act) in usbser_release_port_act() argument
3295 pp->port_act &= ~act; in usbser_release_port_act()
3296 cv_broadcast(&pp->port_act_cv); in usbser_release_port_act()
3372 usbser_polledio_init(usbser_port_t *pp) in usbser_polledio_init() argument
3376 ds_ops_t *ds_ops = pp->port_ds_ops; in usbser_polledio_init()
3388 hdl = ds_ops->ds_in_pipe(pp->port_ds_hdl, pp->port_num); in usbser_polledio_init()
3389 err = usb_console_input_init(pp->port_usp->us_dip, hdl, in usbser_polledio_init()
3395 hdl = ds_ops->ds_out_pipe(pp->port_ds_hdl, pp->port_num); in usbser_polledio_init()
3396 err = usb_console_output_init(pp->port_usp->us_dip, hdl, in usbser_polledio_init()
3409 static void usbser_polledio_fini(usbser_port_t *pp) in usbser_polledio_fini() argument