Lines Matching refs:dlci

86 	struct gsm_dlci *dlci;  member
152 void (*data)(struct gsm_dlci *dlci, const u8 *data, int len);
153 void (*prev_data)(struct gsm_dlci *dlci, const u8 *data, int len);
234 struct gsm_dlci *dlci[NUM_DLCI]; member
449 static u8 gsm_encode_modem(const struct gsm_dlci *dlci) in gsm_encode_modem() argument
453 if (dlci->throttled) in gsm_encode_modem()
455 if (dlci->modem_tx & TIOCM_DTR) in gsm_encode_modem()
457 if (dlci->modem_tx & TIOCM_RTS) in gsm_encode_modem()
459 if (dlci->modem_tx & TIOCM_RI) in gsm_encode_modem()
461 if (dlci->modem_tx & TIOCM_CD || dlci->gsm->initiator) in gsm_encode_modem()
720 static void gsm_data_kick(struct gsm_mux *gsm, struct gsm_dlci *dlci) in gsm_data_kick() argument
753 if (dlci) { in gsm_data_kick()
754 tty_port_tty_wakeup(&dlci->port); in gsm_data_kick()
759 if (gsm->dlci[i]) in gsm_data_kick()
760 tty_port_tty_wakeup(&gsm->dlci[i]->port); in gsm_data_kick()
775 static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg) in __gsm_data_queue() argument
777 struct gsm_mux *gsm = dlci->gsm; in __gsm_data_queue()
813 gsm_data_kick(gsm, dlci); in __gsm_data_queue()
826 static void gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg) in gsm_data_queue() argument
829 spin_lock_irqsave(&dlci->gsm->tx_lock, flags); in gsm_data_queue()
830 __gsm_data_queue(dlci, msg); in gsm_data_queue()
831 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags); in gsm_data_queue()
846 static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci) in gsm_dlci_data_output() argument
853 h = ((dlci->adaption == 1) ? 0 : 1); in gsm_dlci_data_output()
855 len = kfifo_len(&dlci->fifo); in gsm_dlci_data_output()
865 msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype); in gsm_dlci_data_output()
872 switch (dlci->adaption) { in gsm_dlci_data_output()
878 *dp++ = (gsm_encode_modem(dlci) << 1) | EA; in gsm_dlci_data_output()
882 dlci->adaption); in gsm_dlci_data_output()
886 WARN_ON(len != kfifo_out_locked(&dlci->fifo, dp, len, in gsm_dlci_data_output()
887 &dlci->lock)); in gsm_dlci_data_output()
890 tty_port_tty_wakeup(&dlci->port); in gsm_dlci_data_output()
892 __gsm_data_queue(dlci, msg); in gsm_dlci_data_output()
910 struct gsm_dlci *dlci) in gsm_dlci_data_output_framed() argument
919 if (dlci->adaption == 4) in gsm_dlci_data_output_framed()
923 if (dlci->skb == NULL) { in gsm_dlci_data_output_framed()
924 dlci->skb = skb_dequeue_tail(&dlci->skb_list); in gsm_dlci_data_output_framed()
925 if (dlci->skb == NULL) in gsm_dlci_data_output_framed()
929 len = dlci->skb->len + overhead; in gsm_dlci_data_output_framed()
933 if (dlci->adaption == 3) { in gsm_dlci_data_output_framed()
935 dev_kfree_skb_any(dlci->skb); in gsm_dlci_data_output_framed()
936 dlci->skb = NULL; in gsm_dlci_data_output_framed()
944 msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype); in gsm_dlci_data_output_framed()
949 skb_queue_tail(&dlci->skb_list, dlci->skb); in gsm_dlci_data_output_framed()
950 dlci->skb = NULL; in gsm_dlci_data_output_framed()
955 if (dlci->adaption == 4) { /* Interruptible framed (Packetised Data) */ in gsm_dlci_data_output_framed()
960 memcpy(dp, dlci->skb->data, len); in gsm_dlci_data_output_framed()
961 skb_pull(dlci->skb, len); in gsm_dlci_data_output_framed()
962 __gsm_data_queue(dlci, msg); in gsm_dlci_data_output_framed()
964 dev_kfree_skb_any(dlci->skb); in gsm_dlci_data_output_framed()
965 dlci->skb = NULL; in gsm_dlci_data_output_framed()
990 struct gsm_dlci *dlci; in gsm_dlci_data_sweep() local
994 dlci = gsm->dlci[i]; in gsm_dlci_data_sweep()
995 if (dlci == NULL || dlci->constipated) { in gsm_dlci_data_sweep()
999 if (dlci->adaption < 3 && !dlci->net) in gsm_dlci_data_sweep()
1000 len = gsm_dlci_data_output(gsm, dlci); in gsm_dlci_data_sweep()
1002 len = gsm_dlci_data_output_framed(gsm, dlci); in gsm_dlci_data_sweep()
1020 static void gsm_dlci_data_kick(struct gsm_dlci *dlci) in gsm_dlci_data_kick() argument
1025 if (dlci->constipated) in gsm_dlci_data_kick()
1028 spin_lock_irqsave(&dlci->gsm->tx_lock, flags); in gsm_dlci_data_kick()
1030 sweep = (dlci->gsm->tx_bytes < TX_THRESH_LO); in gsm_dlci_data_kick()
1031 if (dlci->gsm->tx_bytes == 0) { in gsm_dlci_data_kick()
1032 if (dlci->net) in gsm_dlci_data_kick()
1033 gsm_dlci_data_output_framed(dlci->gsm, dlci); in gsm_dlci_data_kick()
1035 gsm_dlci_data_output(dlci->gsm, dlci); in gsm_dlci_data_kick()
1038 gsm_dlci_data_sweep(dlci->gsm); in gsm_dlci_data_kick()
1039 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags); in gsm_dlci_data_kick()
1067 gsm_data_queue(gsm->dlci[0], msg); in gsm_control_reply()
1080 static void gsm_process_modem(struct tty_struct *tty, struct gsm_dlci *dlci, in gsm_process_modem() argument
1101 if (fc && !dlci->constipated) { in gsm_process_modem()
1103 dlci->constipated = true; in gsm_process_modem()
1104 } else if (!fc && dlci->constipated) { in gsm_process_modem()
1105 dlci->constipated = false; in gsm_process_modem()
1106 gsm_dlci_data_kick(dlci); in gsm_process_modem()
1121 if ((mlines & TIOCM_CD) == 0 && (dlci->modem_rx & TIOCM_CD)) in gsm_process_modem()
1126 tty_insert_flip_char(&dlci->port, 0, TTY_BREAK); in gsm_process_modem()
1127 dlci->modem_rx = mlines; in gsm_process_modem()
1147 struct gsm_dlci *dlci; in gsm_control_modem() local
1164 if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL) in gsm_control_modem()
1166 dlci = gsm->dlci[addr]; in gsm_control_modem()
1183 tty = tty_port_tty_get(&dlci->port); in gsm_control_modem()
1184 gsm_process_modem(tty, dlci, modem, clen); in gsm_control_modem()
1222 if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL) in gsm_control_rls()
1229 port = &gsm->dlci[addr]->port; in gsm_control_rls()
1243 static void gsm_dlci_begin_close(struct gsm_dlci *dlci);
1265 struct gsm_dlci *dlci = gsm->dlci[0]; in gsm_control_message() local
1267 if (dlci) { in gsm_control_message()
1268 dlci->dead = true; in gsm_control_message()
1270 gsm_dlci_begin_close(dlci); in gsm_control_message()
1369 gsm_data_queue(gsm->dlci[0], msg); in gsm_control_transmit()
1391 if (gsm->cretries == 0 || !gsm->dlci[0] || gsm->dlci[0]->dead) { in gsm_control_retransmit()
1439 if (gsm->dlci[0]->mode == DLCI_MODE_ADM) in gsm_control_send()
1486 static void gsm_dlci_close(struct gsm_dlci *dlci) in gsm_dlci_close() argument
1490 del_timer(&dlci->t1); in gsm_dlci_close()
1492 pr_debug("DLCI %d goes closed.\n", dlci->addr); in gsm_dlci_close()
1493 dlci->state = DLCI_CLOSED; in gsm_dlci_close()
1495 dlci->constipated = true; in gsm_dlci_close()
1496 if (dlci->addr != 0) { in gsm_dlci_close()
1497 tty_port_tty_hangup(&dlci->port, false); in gsm_dlci_close()
1498 spin_lock_irqsave(&dlci->lock, flags); in gsm_dlci_close()
1499 kfifo_reset(&dlci->fifo); in gsm_dlci_close()
1500 spin_unlock_irqrestore(&dlci->lock, flags); in gsm_dlci_close()
1502 tty_port_set_initialized(&dlci->port, 0); in gsm_dlci_close()
1503 wake_up_interruptible(&dlci->port.open_wait); in gsm_dlci_close()
1505 dlci->gsm->dead = true; in gsm_dlci_close()
1506 wake_up(&dlci->gsm->event); in gsm_dlci_close()
1518 static void gsm_dlci_open(struct gsm_dlci *dlci) in gsm_dlci_open() argument
1522 del_timer(&dlci->t1); in gsm_dlci_open()
1524 dlci->state = DLCI_OPEN; in gsm_dlci_open()
1525 dlci->constipated = false; in gsm_dlci_open()
1527 pr_debug("DLCI %d goes open.\n", dlci->addr); in gsm_dlci_open()
1528 wake_up(&dlci->gsm->event); in gsm_dlci_open()
1548 struct gsm_dlci *dlci = from_timer(dlci, t, t1); in gsm_dlci_t1() local
1549 struct gsm_mux *gsm = dlci->gsm; in gsm_dlci_t1()
1551 switch (dlci->state) { in gsm_dlci_t1()
1553 if (dlci->retries) { in gsm_dlci_t1()
1554 dlci->retries--; in gsm_dlci_t1()
1555 gsm_command(dlci->gsm, dlci->addr, SABM|PF); in gsm_dlci_t1()
1556 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_t1()
1557 } else if (!dlci->addr && gsm->control == (DM | PF)) { in gsm_dlci_t1()
1560 dlci->addr); in gsm_dlci_t1()
1561 dlci->mode = DLCI_MODE_ADM; in gsm_dlci_t1()
1562 gsm_dlci_open(dlci); in gsm_dlci_t1()
1564 gsm_dlci_begin_close(dlci); /* prevent half open link */ in gsm_dlci_t1()
1569 if (dlci->retries) { in gsm_dlci_t1()
1570 dlci->retries--; in gsm_dlci_t1()
1571 gsm_command(dlci->gsm, dlci->addr, DISC|PF); in gsm_dlci_t1()
1572 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_t1()
1574 gsm_dlci_close(dlci); in gsm_dlci_t1()
1577 pr_debug("%s: unhandled state: %d\n", __func__, dlci->state); in gsm_dlci_t1()
1592 static void gsm_dlci_begin_open(struct gsm_dlci *dlci) in gsm_dlci_begin_open() argument
1594 struct gsm_mux *gsm = dlci->gsm; in gsm_dlci_begin_open()
1595 if (dlci->state == DLCI_OPEN || dlci->state == DLCI_OPENING) in gsm_dlci_begin_open()
1597 dlci->retries = gsm->n2; in gsm_dlci_begin_open()
1598 dlci->state = DLCI_OPENING; in gsm_dlci_begin_open()
1599 gsm_command(dlci->gsm, dlci->addr, SABM|PF); in gsm_dlci_begin_open()
1600 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_begin_open()
1610 static void gsm_dlci_set_opening(struct gsm_dlci *dlci) in gsm_dlci_set_opening() argument
1612 switch (dlci->state) { in gsm_dlci_set_opening()
1615 dlci->state = DLCI_OPENING; in gsm_dlci_set_opening()
1633 static void gsm_dlci_begin_close(struct gsm_dlci *dlci) in gsm_dlci_begin_close() argument
1635 struct gsm_mux *gsm = dlci->gsm; in gsm_dlci_begin_close()
1636 if (dlci->state == DLCI_CLOSED || dlci->state == DLCI_CLOSING) in gsm_dlci_begin_close()
1638 dlci->retries = gsm->n2; in gsm_dlci_begin_close()
1639 dlci->state = DLCI_CLOSING; in gsm_dlci_begin_close()
1640 gsm_command(dlci->gsm, dlci->addr, DISC|PF); in gsm_dlci_begin_close()
1641 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_begin_close()
1655 static void gsm_dlci_data(struct gsm_dlci *dlci, const u8 *data, int clen) in gsm_dlci_data() argument
1658 struct tty_port *port = &dlci->port; in gsm_dlci_data()
1665 switch (dlci->adaption) { in gsm_dlci_data()
1679 gsm_process_modem(tty, dlci, modem, clen); in gsm_dlci_data()
1702 static void gsm_dlci_command(struct gsm_dlci *dlci, const u8 *data, int len) in gsm_dlci_command() argument
1716 gsm_control_message(dlci->gsm, command, in gsm_dlci_command()
1719 gsm_control_response(dlci->gsm, command, in gsm_dlci_command()
1742 struct gsm_dlci *dlci = kzalloc(sizeof(struct gsm_dlci), GFP_ATOMIC); in gsm_dlci_alloc() local
1743 if (dlci == NULL) in gsm_dlci_alloc()
1745 spin_lock_init(&dlci->lock); in gsm_dlci_alloc()
1746 mutex_init(&dlci->mutex); in gsm_dlci_alloc()
1747 if (kfifo_alloc(&dlci->fifo, 4096, GFP_KERNEL) < 0) { in gsm_dlci_alloc()
1748 kfree(dlci); in gsm_dlci_alloc()
1752 skb_queue_head_init(&dlci->skb_list); in gsm_dlci_alloc()
1753 timer_setup(&dlci->t1, gsm_dlci_t1, 0); in gsm_dlci_alloc()
1754 tty_port_init(&dlci->port); in gsm_dlci_alloc()
1755 dlci->port.ops = &gsm_port_ops; in gsm_dlci_alloc()
1756 dlci->gsm = gsm; in gsm_dlci_alloc()
1757 dlci->addr = addr; in gsm_dlci_alloc()
1758 dlci->adaption = gsm->adaption; in gsm_dlci_alloc()
1759 dlci->state = DLCI_CLOSED; in gsm_dlci_alloc()
1761 dlci->data = gsm_dlci_data; in gsm_dlci_alloc()
1763 dlci->constipated = true; in gsm_dlci_alloc()
1765 dlci->data = gsm_dlci_command; in gsm_dlci_alloc()
1767 gsm->dlci[addr] = dlci; in gsm_dlci_alloc()
1768 return dlci; in gsm_dlci_alloc()
1781 struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port); in gsm_dlci_free() local
1783 del_timer_sync(&dlci->t1); in gsm_dlci_free()
1784 dlci->gsm->dlci[dlci->addr] = NULL; in gsm_dlci_free()
1785 kfifo_free(&dlci->fifo); in gsm_dlci_free()
1786 while ((dlci->skb = skb_dequeue(&dlci->skb_list))) in gsm_dlci_free()
1787 dev_kfree_skb(dlci->skb); in gsm_dlci_free()
1788 kfree(dlci); in gsm_dlci_free()
1791 static inline void dlci_get(struct gsm_dlci *dlci) in dlci_get() argument
1793 tty_port_get(&dlci->port); in dlci_get()
1796 static inline void dlci_put(struct gsm_dlci *dlci) in dlci_put() argument
1798 tty_port_put(&dlci->port); in dlci_put()
1801 static void gsm_destroy_network(struct gsm_dlci *dlci);
1812 static void gsm_dlci_release(struct gsm_dlci *dlci) in gsm_dlci_release() argument
1814 struct tty_struct *tty = tty_port_tty_get(&dlci->port); in gsm_dlci_release()
1816 mutex_lock(&dlci->mutex); in gsm_dlci_release()
1817 gsm_destroy_network(dlci); in gsm_dlci_release()
1818 mutex_unlock(&dlci->mutex); in gsm_dlci_release()
1827 tty_port_tty_set(&dlci->port, NULL); in gsm_dlci_release()
1830 dlci->state = DLCI_CLOSED; in gsm_dlci_release()
1831 dlci_put(dlci); in gsm_dlci_release()
1850 struct gsm_dlci *dlci; in gsm_queue() local
1880 dlci = gsm->dlci[address]; in gsm_queue()
1886 if (dlci == NULL) in gsm_queue()
1887 dlci = gsm_dlci_alloc(gsm, address); in gsm_queue()
1888 if (dlci == NULL) in gsm_queue()
1890 if (dlci->dead) in gsm_queue()
1894 gsm_dlci_open(dlci); in gsm_queue()
1900 if (dlci == NULL || dlci->state == DLCI_CLOSED) { in gsm_queue()
1906 gsm_dlci_close(dlci); in gsm_queue()
1909 if (cr == 0 || dlci == NULL) in gsm_queue()
1911 switch (dlci->state) { in gsm_queue()
1913 gsm_dlci_close(dlci); in gsm_queue()
1916 gsm_dlci_open(dlci); in gsm_queue()
1920 dlci->state); in gsm_queue()
1928 if (dlci == NULL) in gsm_queue()
1930 gsm_dlci_close(dlci); in gsm_queue()
1940 if (dlci == NULL || dlci->state != DLCI_OPEN) { in gsm_queue()
1944 dlci->data(dlci, gsm->buf, gsm->len); in gsm_queue()
2161 struct gsm_dlci *dlci = gsm->dlci[0]; in gsm_cleanup_mux() local
2167 if (dlci) { in gsm_cleanup_mux()
2168 if (disc && dlci->state != DLCI_CLOSED) { in gsm_cleanup_mux()
2169 gsm_dlci_begin_close(dlci); in gsm_cleanup_mux()
2170 wait_event(gsm->event, dlci->state == DLCI_CLOSED); in gsm_cleanup_mux()
2172 dlci->dead = true; in gsm_cleanup_mux()
2180 if (gsm->dlci[i]) in gsm_cleanup_mux()
2181 gsm_dlci_release(gsm->dlci[i]); in gsm_cleanup_mux()
2201 struct gsm_dlci *dlci; in gsm_activate_mux() local
2208 dlci = gsm_dlci_alloc(gsm, 0); in gsm_activate_mux()
2209 if (dlci == NULL) in gsm_activate_mux()
2438 gsm_dlci_begin_open(gsm->dlci[0]); in gsm_config()
2804 static void dlci_net_free(struct gsm_dlci *dlci) in dlci_net_free() argument
2806 if (!dlci->net) { in dlci_net_free()
2810 dlci->adaption = dlci->prev_adaption; in dlci_net_free()
2811 dlci->data = dlci->prev_data; in dlci_net_free()
2812 free_netdev(dlci->net); in dlci_net_free()
2813 dlci->net = NULL; in dlci_net_free()
2818 struct gsm_dlci *dlci; in net_free() local
2821 dlci = mux_net->dlci; in net_free()
2823 if (dlci->net) { in net_free()
2824 unregister_netdev(dlci->net); in net_free()
2825 dlci_net_free(dlci); in net_free()
2843 struct gsm_dlci *dlci = mux_net->dlci; in gsm_mux_net_start_xmit() local
2846 skb_queue_head(&dlci->skb_list, skb); in gsm_mux_net_start_xmit()
2849 gsm_dlci_data_kick(dlci); in gsm_mux_net_start_xmit()
2866 static void gsm_mux_rx_netchar(struct gsm_dlci *dlci, in gsm_mux_rx_netchar() argument
2869 struct net_device *net = dlci->net; in gsm_mux_rx_netchar()
2918 static void gsm_destroy_network(struct gsm_dlci *dlci) in gsm_destroy_network() argument
2923 if (!dlci->net) in gsm_destroy_network()
2925 mux_net = netdev_priv(dlci->net); in gsm_destroy_network()
2931 static int gsm_create_network(struct gsm_dlci *dlci, struct gsm_netconfig *nc) in gsm_create_network() argument
2942 if (dlci->adaption > 2) in gsm_create_network()
2962 net->mtu = dlci->gsm->mtu; in gsm_create_network()
2964 net->max_mtu = dlci->gsm->mtu; in gsm_create_network()
2966 mux_net->dlci = dlci; in gsm_create_network()
2971 dlci->prev_adaption = dlci->adaption; in gsm_create_network()
2972 dlci->prev_data = dlci->data; in gsm_create_network()
2973 dlci->adaption = nc->adaption; in gsm_create_network()
2974 dlci->data = gsm_mux_rx_netchar; in gsm_create_network()
2975 dlci->net = net; in gsm_create_network()
2981 dlci_net_free(dlci); in gsm_create_network()
3009 static int gsmtty_modem_update(struct gsm_dlci *dlci, u8 brk) in gsmtty_modem_update() argument
3015 modembits[0] = (dlci->addr << 2) | 2 | EA; /* DLCI, Valid, EA */ in gsmtty_modem_update()
3016 modembits[1] = (gsm_encode_modem(dlci) << 1) | EA; in gsmtty_modem_update()
3021 ctrl = gsm_control_send(dlci->gsm, CMD_MSC, modembits, len); in gsmtty_modem_update()
3024 return gsm_control_wait(dlci->gsm, ctrl); in gsmtty_modem_update()
3029 struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port); in gsm_carrier_raised() local
3030 struct gsm_mux *gsm = dlci->gsm; in gsm_carrier_raised()
3033 if (dlci->state != DLCI_OPEN) in gsm_carrier_raised()
3042 if (gsm->encoding == 0 && gsm->dlci[0]->mode == DLCI_MODE_ADM && in gsm_carrier_raised()
3043 !dlci->modem_rx) in gsm_carrier_raised()
3046 return dlci->modem_rx & TIOCM_CD; in gsm_carrier_raised()
3051 struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port); in gsm_dtr_rts() local
3052 unsigned int modem_tx = dlci->modem_tx; in gsm_dtr_rts()
3057 if (modem_tx != dlci->modem_tx) { in gsm_dtr_rts()
3058 dlci->modem_tx = modem_tx; in gsm_dtr_rts()
3059 gsmtty_modem_update(dlci, 0); in gsm_dtr_rts()
3072 struct gsm_dlci *dlci; in gsmtty_install() local
3095 if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN) { in gsmtty_install()
3099 dlci = gsm->dlci[line]; in gsmtty_install()
3100 if (dlci == NULL) { in gsmtty_install()
3102 dlci = gsm_dlci_alloc(gsm, line); in gsmtty_install()
3104 if (dlci == NULL) { in gsmtty_install()
3108 ret = tty_port_install(&dlci->port, driver, tty); in gsmtty_install()
3111 dlci_put(dlci); in gsmtty_install()
3116 dlci_get(dlci); in gsmtty_install()
3117 dlci_get(gsm->dlci[0]); in gsmtty_install()
3119 tty->driver_data = dlci; in gsmtty_install()
3127 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_open() local
3128 struct tty_port *port = &dlci->port; in gsmtty_open()
3129 struct gsm_mux *gsm = dlci->gsm; in gsmtty_open()
3134 dlci->modem_rx = 0; in gsmtty_open()
3140 gsm_dlci_begin_open(dlci); in gsmtty_open()
3142 gsm_dlci_set_opening(dlci); in gsmtty_open()
3149 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_close() local
3151 if (dlci == NULL) in gsmtty_close()
3153 if (dlci->state == DLCI_CLOSED) in gsmtty_close()
3155 mutex_lock(&dlci->mutex); in gsmtty_close()
3156 gsm_destroy_network(dlci); in gsmtty_close()
3157 mutex_unlock(&dlci->mutex); in gsmtty_close()
3158 if (tty_port_close_start(&dlci->port, tty, filp) == 0) in gsmtty_close()
3160 gsm_dlci_begin_close(dlci); in gsmtty_close()
3161 if (tty_port_initialized(&dlci->port) && C_HUPCL(tty)) in gsmtty_close()
3162 tty_port_lower_dtr_rts(&dlci->port); in gsmtty_close()
3163 tty_port_close_end(&dlci->port, tty); in gsmtty_close()
3164 tty_port_tty_set(&dlci->port, NULL); in gsmtty_close()
3170 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_hangup() local
3171 if (dlci->state == DLCI_CLOSED) in gsmtty_hangup()
3173 tty_port_hangup(&dlci->port); in gsmtty_hangup()
3174 gsm_dlci_begin_close(dlci); in gsmtty_hangup()
3181 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_write() local
3182 if (dlci->state == DLCI_CLOSED) in gsmtty_write()
3185 sent = kfifo_in_locked(&dlci->fifo, buf, len, &dlci->lock); in gsmtty_write()
3187 gsm_dlci_data_kick(dlci); in gsmtty_write()
3193 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_write_room() local
3194 if (dlci->state == DLCI_CLOSED) in gsmtty_write_room()
3196 return TX_SIZE - kfifo_len(&dlci->fifo); in gsmtty_write_room()
3201 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_chars_in_buffer() local
3202 if (dlci->state == DLCI_CLOSED) in gsmtty_chars_in_buffer()
3204 return kfifo_len(&dlci->fifo); in gsmtty_chars_in_buffer()
3209 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_flush_buffer() local
3212 if (dlci->state == DLCI_CLOSED) in gsmtty_flush_buffer()
3218 spin_lock_irqsave(&dlci->lock, flags); in gsmtty_flush_buffer()
3219 kfifo_reset(&dlci->fifo); in gsmtty_flush_buffer()
3220 spin_unlock_irqrestore(&dlci->lock, flags); in gsmtty_flush_buffer()
3233 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_tiocmget() local
3234 if (dlci->state == DLCI_CLOSED) in gsmtty_tiocmget()
3236 return dlci->modem_rx; in gsmtty_tiocmget()
3242 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_tiocmset() local
3243 unsigned int modem_tx = dlci->modem_tx; in gsmtty_tiocmset()
3245 if (dlci->state == DLCI_CLOSED) in gsmtty_tiocmset()
3250 if (modem_tx != dlci->modem_tx) { in gsmtty_tiocmset()
3251 dlci->modem_tx = modem_tx; in gsmtty_tiocmset()
3252 return gsmtty_modem_update(dlci, 0); in gsmtty_tiocmset()
3261 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_ioctl() local
3265 if (dlci->state == DLCI_CLOSED) in gsmtty_ioctl()
3273 mutex_lock(&dlci->mutex); in gsmtty_ioctl()
3274 index = gsm_create_network(dlci, &nc); in gsmtty_ioctl()
3275 mutex_unlock(&dlci->mutex); in gsmtty_ioctl()
3282 mutex_lock(&dlci->mutex); in gsmtty_ioctl()
3283 gsm_destroy_network(dlci); in gsmtty_ioctl()
3284 mutex_unlock(&dlci->mutex); in gsmtty_ioctl()
3293 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_set_termios() local
3294 if (dlci->state == DLCI_CLOSED) in gsmtty_set_termios()
3306 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_throttle() local
3307 if (dlci->state == DLCI_CLOSED) in gsmtty_throttle()
3310 dlci->modem_tx &= ~TIOCM_RTS; in gsmtty_throttle()
3311 dlci->throttled = true; in gsmtty_throttle()
3313 gsmtty_modem_update(dlci, 0); in gsmtty_throttle()
3318 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_unthrottle() local
3319 if (dlci->state == DLCI_CLOSED) in gsmtty_unthrottle()
3322 dlci->modem_tx |= TIOCM_RTS; in gsmtty_unthrottle()
3323 dlci->throttled = false; in gsmtty_unthrottle()
3325 gsmtty_modem_update(dlci, 0); in gsmtty_unthrottle()
3330 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_break_ctl() local
3332 if (dlci->state == DLCI_CLOSED) in gsmtty_break_ctl()
3343 return gsmtty_modem_update(dlci, encode); in gsmtty_break_ctl()
3348 struct gsm_dlci *dlci = tty->driver_data; in gsmtty_cleanup() local
3349 struct gsm_mux *gsm = dlci->gsm; in gsmtty_cleanup()
3351 dlci_put(dlci); in gsmtty_cleanup()
3352 dlci_put(gsm->dlci[0]); in gsmtty_cleanup()