Lines Matching refs:gsm
130 struct gsm_mux *gsm; member
231 void (*receive)(struct gsm_mux *gsm, u8 ch);
232 void (*error)(struct gsm_mux *gsm, u8 ch, u8 flag);
572 static void gsm_send(struct gsm_mux *gsm, int addr, int cr, int control) in gsm_send() argument
578 switch (gsm->encoding) { in gsm_send()
606 gsm->output(gsm, cbuf, len); in gsm_send()
619 static inline void gsm_response(struct gsm_mux *gsm, int addr, int control) in gsm_response() argument
621 gsm_send(gsm, addr, 0, control); in gsm_response()
633 static inline void gsm_command(struct gsm_mux *gsm, int addr, int control) in gsm_command() argument
635 gsm_send(gsm, addr, 1, control); in gsm_command()
654 static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len, in gsm_data_alloc() argument
681 static void gsm_data_kick(struct gsm_mux *gsm) in gsm_data_kick() argument
687 list_for_each_entry_safe(msg, nmsg, &gsm->tx_list, list) { in gsm_data_kick()
688 if (gsm->constipated && msg->addr) in gsm_data_kick()
690 if (gsm->encoding != 0) { in gsm_data_kick()
691 gsm->txframe[0] = GSM1_SOF; in gsm_data_kick()
693 gsm->txframe + 1, msg->len); in gsm_data_kick()
694 gsm->txframe[len + 1] = GSM1_SOF; in gsm_data_kick()
697 gsm->txframe[0] = GSM0_SOF; in gsm_data_kick()
698 memcpy(gsm->txframe + 1 , msg->data, msg->len); in gsm_data_kick()
699 gsm->txframe[msg->len + 1] = GSM0_SOF; in gsm_data_kick()
706 gsm->txframe, len); in gsm_data_kick()
708 if (gsm->output(gsm, gsm->txframe + skip_sof, in gsm_data_kick()
712 gsm->tx_bytes -= msg->len; in gsm_data_kick()
734 struct gsm_mux *gsm = dlci->gsm; in __gsm_data_queue() local
739 if (gsm->encoding == 0) { in __gsm_data_queue()
749 if (gsm->initiator) in __gsm_data_queue()
759 gsm_print_packet("Q> ", msg->addr, gsm->initiator, msg->ctrl, in __gsm_data_queue()
768 list_add_tail(&msg->list, &gsm->tx_list); in __gsm_data_queue()
769 gsm->tx_bytes += msg->len; in __gsm_data_queue()
770 gsm_data_kick(gsm); in __gsm_data_queue()
786 spin_lock_irqsave(&dlci->gsm->tx_lock, flags); in gsm_data_queue()
788 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags); in gsm_data_queue()
803 static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci) in gsm_dlci_data_output() argument
817 if (len > gsm->mtu) in gsm_dlci_data_output()
818 len = gsm->mtu; in gsm_dlci_data_output()
822 msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype); in gsm_dlci_data_output()
856 static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, in gsm_dlci_data_output_framed() argument
879 if (len > gsm->mtu) { in gsm_dlci_data_output_framed()
886 len = gsm->mtu; in gsm_dlci_data_output_framed()
891 msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype); in gsm_dlci_data_output_framed()
930 static void gsm_dlci_data_sweep(struct gsm_mux *gsm) in gsm_dlci_data_sweep() argument
939 if (gsm->tx_bytes > TX_THRESH_HI) in gsm_dlci_data_sweep()
941 dlci = gsm->dlci[i]; in gsm_dlci_data_sweep()
947 len = gsm_dlci_data_output(gsm, dlci); in gsm_dlci_data_sweep()
949 len = gsm_dlci_data_output_framed(gsm, dlci); in gsm_dlci_data_sweep()
975 spin_lock_irqsave(&dlci->gsm->tx_lock, flags); in gsm_dlci_data_kick()
977 sweep = (dlci->gsm->tx_bytes < TX_THRESH_LO); in gsm_dlci_data_kick()
978 if (dlci->gsm->tx_bytes == 0) { in gsm_dlci_data_kick()
980 gsm_dlci_data_output_framed(dlci->gsm, dlci); in gsm_dlci_data_kick()
982 gsm_dlci_data_output(dlci->gsm, dlci); in gsm_dlci_data_kick()
985 gsm_dlci_data_sweep(dlci->gsm); in gsm_dlci_data_kick()
986 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags); in gsm_dlci_data_kick()
1004 static void gsm_control_reply(struct gsm_mux *gsm, int cmd, u8 *data, in gsm_control_reply() argument
1008 msg = gsm_data_alloc(gsm, 0, dlen + 2, gsm->ftype); in gsm_control_reply()
1014 gsm_data_queue(gsm->dlci[0], msg); in gsm_control_reply()
1089 static void gsm_control_modem(struct gsm_mux *gsm, u8 *data, int clen) in gsm_control_modem() argument
1111 if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL) in gsm_control_modem()
1113 dlci = gsm->dlci[addr]; in gsm_control_modem()
1136 gsm_control_reply(gsm, CMD_MSC, data, clen); in gsm_control_modem()
1150 static void gsm_control_rls(struct gsm_mux *gsm, u8 *data, int clen) in gsm_control_rls() argument
1169 if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL) in gsm_control_rls()
1176 port = &gsm->dlci[addr]->port; in gsm_control_rls()
1187 gsm_control_reply(gsm, CMD_RLS, data, clen); in gsm_control_rls()
1204 static void gsm_control_message(struct gsm_mux *gsm, unsigned int command, in gsm_control_message() argument
1212 struct gsm_dlci *dlci = gsm->dlci[0]; in gsm_control_message()
1216 gsm->dead = 1; in gsm_control_message()
1223 gsm_control_reply(gsm, CMD_TEST, data, clen); in gsm_control_message()
1227 gsm->constipated = 0; in gsm_control_message()
1228 gsm_control_reply(gsm, CMD_FCON, NULL, 0); in gsm_control_message()
1230 spin_lock_irqsave(&gsm->tx_lock, flags); in gsm_control_message()
1231 gsm_data_kick(gsm); in gsm_control_message()
1232 spin_unlock_irqrestore(&gsm->tx_lock, flags); in gsm_control_message()
1236 gsm->constipated = 1; in gsm_control_message()
1237 gsm_control_reply(gsm, CMD_FCOFF, NULL, 0); in gsm_control_message()
1241 gsm_control_modem(gsm, data, clen); in gsm_control_message()
1245 gsm_control_rls(gsm, data, clen); in gsm_control_message()
1249 gsm_control_reply(gsm, CMD_PSC, NULL, 0); in gsm_control_message()
1258 gsm_control_reply(gsm, CMD_NSC, buf, 1); in gsm_control_message()
1276 static void gsm_control_response(struct gsm_mux *gsm, unsigned int command, in gsm_control_response() argument
1282 spin_lock_irqsave(&gsm->control_lock, flags); in gsm_control_response()
1284 ctrl = gsm->pending_cmd; in gsm_control_response()
1289 del_timer(&gsm->t2_timer); in gsm_control_response()
1290 gsm->pending_cmd = NULL; in gsm_control_response()
1295 wake_up(&gsm->event); in gsm_control_response()
1297 spin_unlock_irqrestore(&gsm->control_lock, flags); in gsm_control_response()
1308 static void gsm_control_transmit(struct gsm_mux *gsm, struct gsm_control *ctrl) in gsm_control_transmit() argument
1310 struct gsm_msg *msg = gsm_data_alloc(gsm, 0, ctrl->len + 1, gsm->ftype); in gsm_control_transmit()
1315 gsm_data_queue(gsm->dlci[0], msg); in gsm_control_transmit()
1331 struct gsm_mux *gsm = (struct gsm_mux *)data; in gsm_control_retransmit() local
1334 spin_lock_irqsave(&gsm->control_lock, flags); in gsm_control_retransmit()
1335 ctrl = gsm->pending_cmd; in gsm_control_retransmit()
1337 gsm->cretries--; in gsm_control_retransmit()
1338 if (gsm->cretries == 0) { in gsm_control_retransmit()
1339 gsm->pending_cmd = NULL; in gsm_control_retransmit()
1342 spin_unlock_irqrestore(&gsm->control_lock, flags); in gsm_control_retransmit()
1343 wake_up(&gsm->event); in gsm_control_retransmit()
1346 gsm_control_transmit(gsm, ctrl); in gsm_control_retransmit()
1347 mod_timer(&gsm->t2_timer, jiffies + gsm->t2 * HZ / 100); in gsm_control_retransmit()
1349 spin_unlock_irqrestore(&gsm->control_lock, flags); in gsm_control_retransmit()
1364 static struct gsm_control *gsm_control_send(struct gsm_mux *gsm, in gsm_control_send() argument
1373 wait_event(gsm->event, gsm->pending_cmd == NULL); in gsm_control_send()
1374 spin_lock_irqsave(&gsm->control_lock, flags); in gsm_control_send()
1375 if (gsm->pending_cmd != NULL) { in gsm_control_send()
1376 spin_unlock_irqrestore(&gsm->control_lock, flags); in gsm_control_send()
1382 gsm->pending_cmd = ctrl; in gsm_control_send()
1383 gsm->cretries = gsm->n2; in gsm_control_send()
1384 mod_timer(&gsm->t2_timer, jiffies + gsm->t2 * HZ / 100); in gsm_control_send()
1385 gsm_control_transmit(gsm, ctrl); in gsm_control_send()
1386 spin_unlock_irqrestore(&gsm->control_lock, flags); in gsm_control_send()
1400 static int gsm_control_wait(struct gsm_mux *gsm, struct gsm_control *control) in gsm_control_wait() argument
1403 wait_event(gsm->event, control->done == 1); in gsm_control_wait()
1436 dlci->gsm->dead = 1; in gsm_dlci_close()
1437 wake_up(&dlci->gsm->event); in gsm_dlci_close()
1458 wake_up(&dlci->gsm->event); in gsm_dlci_open()
1475 struct gsm_mux *gsm = dlci->gsm; in gsm_dlci_t1() local
1481 gsm_command(dlci->gsm, dlci->addr, SABM|PF); in gsm_dlci_t1()
1482 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_t1()
1489 gsm_command(dlci->gsm, dlci->addr, DISC|PF); in gsm_dlci_t1()
1490 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_t1()
1509 struct gsm_mux *gsm = dlci->gsm; in gsm_dlci_begin_open() local
1512 dlci->retries = gsm->n2; in gsm_dlci_begin_open()
1514 gsm_command(dlci->gsm, dlci->addr, SABM|PF); in gsm_dlci_begin_open()
1515 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_begin_open()
1531 struct gsm_mux *gsm = dlci->gsm; in gsm_dlci_begin_close() local
1534 dlci->retries = gsm->n2; in gsm_dlci_begin_close()
1536 gsm_command(dlci->gsm, dlci->addr, DISC|PF); in gsm_dlci_begin_close()
1537 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_begin_close()
1615 gsm_control_message(dlci->gsm, command, in gsm_dlci_command()
1618 gsm_control_response(dlci->gsm, command, in gsm_dlci_command()
1639 static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr) in gsm_dlci_alloc() argument
1658 dlci->gsm = gsm; in gsm_dlci_alloc()
1660 dlci->adaption = gsm->adaption; in gsm_dlci_alloc()
1666 gsm->dlci[addr] = dlci; in gsm_dlci_alloc()
1683 dlci->gsm->dlci[dlci->addr] = NULL; in gsm_dlci_free()
1742 static void gsm_queue(struct gsm_mux *gsm) in gsm_queue() argument
1750 if ((gsm->control & ~PF) == UI) in gsm_queue()
1751 gsm->fcs = gsm_fcs_add_block(gsm->fcs, gsm->buf, gsm->len); in gsm_queue()
1752 if (gsm->encoding == 0) { in gsm_queue()
1757 gsm->fcs = gsm_fcs_add(gsm->fcs, gsm->received_fcs); in gsm_queue()
1759 if (gsm->fcs != GOOD_FCS) { in gsm_queue()
1760 gsm->bad_fcs++; in gsm_queue()
1762 pr_debug("BAD FCS %02x\n", gsm->fcs); in gsm_queue()
1765 address = gsm->address >> 1; in gsm_queue()
1769 cr = gsm->address & 1; /* C/R bit */ in gsm_queue()
1771 gsm_print_packet("<--", address, cr, gsm->control, gsm->buf, gsm->len); in gsm_queue()
1773 cr ^= 1 - gsm->initiator; /* Flip so 1 always means command */ in gsm_queue()
1774 dlci = gsm->dlci[address]; in gsm_queue()
1776 switch (gsm->control) { in gsm_queue()
1781 dlci = gsm_dlci_alloc(gsm, address); in gsm_queue()
1785 gsm_response(gsm, address, DM); in gsm_queue()
1787 gsm_response(gsm, address, UA); in gsm_queue()
1795 gsm_response(gsm, address, DM); in gsm_queue()
1799 gsm_response(gsm, address, UA); in gsm_queue()
1832 gsm_command(gsm, address, DM|PF); in gsm_queue()
1835 dlci->data(dlci, gsm->buf, gsm->len); in gsm_queue()
1842 gsm->malformed++; in gsm_queue()
1855 static void gsm0_receive(struct gsm_mux *gsm, unsigned char c) in gsm0_receive() argument
1859 switch (gsm->state) { in gsm0_receive()
1862 gsm->state = GSM_ADDRESS; in gsm0_receive()
1863 gsm->address = 0; in gsm0_receive()
1864 gsm->len = 0; in gsm0_receive()
1865 gsm->fcs = INIT_FCS; in gsm0_receive()
1869 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm0_receive()
1870 if (gsm_read_ea(&gsm->address, c)) in gsm0_receive()
1871 gsm->state = GSM_CONTROL; in gsm0_receive()
1874 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm0_receive()
1875 gsm->control = c; in gsm0_receive()
1876 gsm->state = GSM_LEN0; in gsm0_receive()
1879 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm0_receive()
1880 if (gsm_read_ea(&gsm->len, c)) { in gsm0_receive()
1881 if (gsm->len > gsm->mru) { in gsm0_receive()
1882 gsm->bad_size++; in gsm0_receive()
1883 gsm->state = GSM_SEARCH; in gsm0_receive()
1886 gsm->count = 0; in gsm0_receive()
1887 if (!gsm->len) in gsm0_receive()
1888 gsm->state = GSM_FCS; in gsm0_receive()
1890 gsm->state = GSM_DATA; in gsm0_receive()
1893 gsm->state = GSM_LEN1; in gsm0_receive()
1896 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm0_receive()
1898 gsm->len |= len << 7; in gsm0_receive()
1899 if (gsm->len > gsm->mru) { in gsm0_receive()
1900 gsm->bad_size++; in gsm0_receive()
1901 gsm->state = GSM_SEARCH; in gsm0_receive()
1904 gsm->count = 0; in gsm0_receive()
1905 if (!gsm->len) in gsm0_receive()
1906 gsm->state = GSM_FCS; in gsm0_receive()
1908 gsm->state = GSM_DATA; in gsm0_receive()
1911 gsm->buf[gsm->count++] = c; in gsm0_receive()
1912 if (gsm->count == gsm->len) in gsm0_receive()
1913 gsm->state = GSM_FCS; in gsm0_receive()
1916 gsm->received_fcs = c; in gsm0_receive()
1917 gsm_queue(gsm); in gsm0_receive()
1918 gsm->state = GSM_SSOF; in gsm0_receive()
1922 gsm->state = GSM_SEARCH; in gsm0_receive()
1937 static void gsm1_receive(struct gsm_mux *gsm, unsigned char c) in gsm1_receive() argument
1942 if (gsm->state == GSM_DATA && gsm->count) { in gsm1_receive()
1944 gsm->count--; in gsm1_receive()
1945 gsm->fcs = gsm_fcs_add(gsm->fcs, gsm->buf[gsm->count]); in gsm1_receive()
1946 gsm->len = gsm->count; in gsm1_receive()
1947 gsm_queue(gsm); in gsm1_receive()
1948 gsm->state = GSM_START; in gsm1_receive()
1952 if (gsm->state != GSM_START) { in gsm1_receive()
1953 gsm->malformed++; in gsm1_receive()
1954 gsm->state = GSM_START; in gsm1_receive()
1962 gsm->escape = 1; in gsm1_receive()
1967 if (gsm->state == GSM_SEARCH) in gsm1_receive()
1970 if (gsm->escape) { in gsm1_receive()
1972 gsm->escape = 0; in gsm1_receive()
1974 switch (gsm->state) { in gsm1_receive()
1976 gsm->address = 0; in gsm1_receive()
1977 gsm->state = GSM_ADDRESS; in gsm1_receive()
1978 gsm->fcs = INIT_FCS; in gsm1_receive()
1981 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm1_receive()
1982 if (gsm_read_ea(&gsm->address, c)) in gsm1_receive()
1983 gsm->state = GSM_CONTROL; in gsm1_receive()
1986 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm1_receive()
1987 gsm->control = c; in gsm1_receive()
1988 gsm->count = 0; in gsm1_receive()
1989 gsm->state = GSM_DATA; in gsm1_receive()
1992 if (gsm->count > gsm->mru) { /* Allow one for the FCS */ in gsm1_receive()
1993 gsm->state = GSM_OVERRUN; in gsm1_receive()
1994 gsm->bad_size++; in gsm1_receive()
1996 gsm->buf[gsm->count++] = c; in gsm1_receive()
2015 static void gsm_error(struct gsm_mux *gsm, in gsm_error() argument
2018 gsm->state = GSM_SEARCH; in gsm_error()
2019 gsm->io_error++; in gsm_error()
2031 static void gsm_cleanup_mux(struct gsm_mux *gsm) in gsm_cleanup_mux() argument
2034 struct gsm_dlci *dlci = gsm->dlci[0]; in gsm_cleanup_mux()
2038 gsm->dead = 1; in gsm_cleanup_mux()
2042 if (gsm_mux[i] == gsm) { in gsm_cleanup_mux()
2055 gc = gsm_control_send(gsm, CMD_CLD, NULL, 0); in gsm_cleanup_mux()
2057 gsm_control_wait(gsm, gc); in gsm_cleanup_mux()
2059 del_timer_sync(&gsm->t2_timer); in gsm_cleanup_mux()
2064 wait_event_interruptible(gsm->event, in gsm_cleanup_mux()
2068 mutex_lock(&gsm->mutex); in gsm_cleanup_mux()
2070 if (gsm->dlci[i]) in gsm_cleanup_mux()
2071 gsm_dlci_release(gsm->dlci[i]); in gsm_cleanup_mux()
2072 mutex_unlock(&gsm->mutex); in gsm_cleanup_mux()
2074 list_for_each_entry_safe(txq, ntxq, &gsm->tx_list, list) in gsm_cleanup_mux()
2076 INIT_LIST_HEAD(&gsm->tx_list); in gsm_cleanup_mux()
2088 static int gsm_activate_mux(struct gsm_mux *gsm) in gsm_activate_mux() argument
2093 setup_timer(&gsm->t2_timer, gsm_control_retransmit, (unsigned long)gsm); in gsm_activate_mux()
2094 init_waitqueue_head(&gsm->event); in gsm_activate_mux()
2095 spin_lock_init(&gsm->control_lock); in gsm_activate_mux()
2096 spin_lock_init(&gsm->tx_lock); in gsm_activate_mux()
2098 if (gsm->encoding == 0) in gsm_activate_mux()
2099 gsm->receive = gsm0_receive; in gsm_activate_mux()
2101 gsm->receive = gsm1_receive; in gsm_activate_mux()
2102 gsm->error = gsm_error; in gsm_activate_mux()
2107 gsm->num = i; in gsm_activate_mux()
2108 gsm_mux[i] = gsm; in gsm_activate_mux()
2116 dlci = gsm_dlci_alloc(gsm, 0); in gsm_activate_mux()
2119 gsm->dead = 0; /* Tty opens are now permissible */ in gsm_activate_mux()
2129 static void gsm_free_mux(struct gsm_mux *gsm) in gsm_free_mux() argument
2131 kfree(gsm->txframe); in gsm_free_mux()
2132 kfree(gsm->buf); in gsm_free_mux()
2133 kfree(gsm); in gsm_free_mux()
2144 struct gsm_mux *gsm = container_of(ref, struct gsm_mux, ref); in gsm_free_muxr() local
2145 gsm_free_mux(gsm); in gsm_free_muxr()
2148 static inline void mux_get(struct gsm_mux *gsm) in mux_get() argument
2150 kref_get(&gsm->ref); in mux_get()
2153 static inline void mux_put(struct gsm_mux *gsm) in mux_put() argument
2155 kref_put(&gsm->ref, gsm_free_muxr); in mux_put()
2166 struct gsm_mux *gsm = kzalloc(sizeof(struct gsm_mux), GFP_KERNEL); in gsm_alloc_mux() local
2167 if (gsm == NULL) in gsm_alloc_mux()
2169 gsm->buf = kmalloc(MAX_MRU + 1, GFP_KERNEL); in gsm_alloc_mux()
2170 if (gsm->buf == NULL) { in gsm_alloc_mux()
2171 kfree(gsm); in gsm_alloc_mux()
2174 gsm->txframe = kmalloc(2 * MAX_MRU + 2, GFP_KERNEL); in gsm_alloc_mux()
2175 if (gsm->txframe == NULL) { in gsm_alloc_mux()
2176 kfree(gsm->buf); in gsm_alloc_mux()
2177 kfree(gsm); in gsm_alloc_mux()
2180 spin_lock_init(&gsm->lock); in gsm_alloc_mux()
2181 mutex_init(&gsm->mutex); in gsm_alloc_mux()
2182 kref_init(&gsm->ref); in gsm_alloc_mux()
2183 INIT_LIST_HEAD(&gsm->tx_list); in gsm_alloc_mux()
2185 gsm->t1 = T1; in gsm_alloc_mux()
2186 gsm->t2 = T2; in gsm_alloc_mux()
2187 gsm->n2 = N2; in gsm_alloc_mux()
2188 gsm->ftype = UIH; in gsm_alloc_mux()
2189 gsm->adaption = 1; in gsm_alloc_mux()
2190 gsm->encoding = 1; in gsm_alloc_mux()
2191 gsm->mru = 64; /* Default to encoding 1 so these should be 64 */ in gsm_alloc_mux()
2192 gsm->mtu = 64; in gsm_alloc_mux()
2193 gsm->dead = 1; /* Avoid early tty opens */ in gsm_alloc_mux()
2195 return gsm; in gsm_alloc_mux()
2208 static int gsmld_output(struct gsm_mux *gsm, u8 *data, int len) in gsmld_output() argument
2210 if (tty_write_room(gsm->tty) < len) { in gsmld_output()
2211 set_bit(TTY_DO_WRITE_WAKEUP, &gsm->tty->flags); in gsmld_output()
2217 gsm->tty->ops->write(gsm->tty, data, len); in gsmld_output()
2231 static int gsmld_attach_gsm(struct tty_struct *tty, struct gsm_mux *gsm) in gsmld_attach_gsm() argument
2235 gsm->tty = tty_kref_get(tty); in gsmld_attach_gsm()
2236 gsm->output = gsmld_output; in gsmld_attach_gsm()
2237 ret = gsm_activate_mux(gsm); in gsmld_attach_gsm()
2239 tty_kref_put(gsm->tty); in gsmld_attach_gsm()
2243 base = gsm->num << 6; /* Base for this MUX */ in gsmld_attach_gsm()
2259 static void gsmld_detach_gsm(struct tty_struct *tty, struct gsm_mux *gsm) in gsmld_detach_gsm() argument
2262 int base = gsm->num << 6; /* Base for this MUX */ in gsmld_detach_gsm()
2264 WARN_ON(tty != gsm->tty); in gsmld_detach_gsm()
2267 gsm_cleanup_mux(gsm); in gsmld_detach_gsm()
2268 tty_kref_put(gsm->tty); in gsmld_detach_gsm()
2269 gsm->tty = NULL; in gsmld_detach_gsm()
2275 struct gsm_mux *gsm = tty->disc_data; in gsmld_receive_buf() local
2291 gsm->receive(gsm, *dp); in gsmld_receive_buf()
2297 gsm->error(gsm, *dp, flags); in gsmld_receive_buf()
2349 struct gsm_mux *gsm = tty->disc_data; in gsmld_close() local
2351 gsmld_detach_gsm(tty, gsm); in gsmld_close()
2355 mux_put(gsm); in gsmld_close()
2370 struct gsm_mux *gsm; in gsmld_open() local
2377 gsm = gsm_alloc_mux(); in gsmld_open()
2378 if (gsm == NULL) in gsmld_open()
2381 tty->disc_data = gsm; in gsmld_open()
2385 gsm->encoding = 1; in gsmld_open()
2387 ret = gsmld_attach_gsm(tty, gsm); in gsmld_open()
2389 gsm_cleanup_mux(gsm); in gsmld_open()
2390 mux_put(gsm); in gsmld_open()
2406 struct gsm_mux *gsm = tty->disc_data; in gsmld_write_wakeup() local
2411 spin_lock_irqsave(&gsm->tx_lock, flags); in gsmld_write_wakeup()
2412 gsm_data_kick(gsm); in gsmld_write_wakeup()
2413 if (gsm->tx_bytes < TX_THRESH_LO) { in gsmld_write_wakeup()
2414 gsm_dlci_data_sweep(gsm); in gsmld_write_wakeup()
2416 spin_unlock_irqrestore(&gsm->tx_lock, flags); in gsmld_write_wakeup()
2482 struct gsm_mux *gsm = tty->disc_data; in gsmld_poll() local
2490 if (gsm->dead) in gsmld_poll()
2495 static int gsmld_config(struct tty_struct *tty, struct gsm_mux *gsm, in gsmld_config() argument
2520 if (c->t1 != 0 && c->t1 != gsm->t1) in gsmld_config()
2522 if (c->t2 != 0 && c->t2 != gsm->t2) in gsmld_config()
2524 if (c->encapsulation != gsm->encoding) in gsmld_config()
2526 if (c->adaption != gsm->adaption) in gsmld_config()
2529 if (c->initiator != gsm->initiator) in gsmld_config()
2531 if (c->mru != gsm->mru) in gsmld_config()
2533 if (c->mtu != gsm->mtu) in gsmld_config()
2542 gsm_dlci_begin_close(gsm->dlci[0]); in gsmld_config()
2544 wait_event_interruptible(gsm->event, in gsmld_config()
2545 gsm->dlci[0]->state == DLCI_CLOSED); in gsmld_config()
2550 gsm_cleanup_mux(gsm); in gsmld_config()
2552 gsm->initiator = c->initiator; in gsmld_config()
2553 gsm->mru = c->mru; in gsmld_config()
2554 gsm->mtu = c->mtu; in gsmld_config()
2555 gsm->encoding = c->encapsulation; in gsmld_config()
2556 gsm->adaption = c->adaption; in gsmld_config()
2557 gsm->n2 = c->n2; in gsmld_config()
2560 gsm->ftype = UIH; in gsmld_config()
2562 gsm->ftype = UI; in gsmld_config()
2565 gsm->t1 = c->t1; in gsmld_config()
2567 gsm->t2 = c->t2; in gsmld_config()
2572 gsm_activate_mux(gsm); in gsmld_config()
2573 if (gsm->initiator && need_close) in gsmld_config()
2574 gsm_dlci_begin_open(gsm->dlci[0]); in gsmld_config()
2582 struct gsm_mux *gsm = tty->disc_data; in gsmld_ioctl() local
2587 c.adaption = gsm->adaption; in gsmld_ioctl()
2588 c.encapsulation = gsm->encoding; in gsmld_ioctl()
2589 c.initiator = gsm->initiator; in gsmld_ioctl()
2590 c.t1 = gsm->t1; in gsmld_ioctl()
2591 c.t2 = gsm->t2; in gsmld_ioctl()
2593 c.n2 = gsm->n2; in gsmld_ioctl()
2594 if (gsm->ftype == UIH) in gsmld_ioctl()
2598 pr_debug("Ftype %d i %d\n", gsm->ftype, c.i); in gsmld_ioctl()
2599 c.mru = gsm->mru; in gsmld_ioctl()
2600 c.mtu = gsm->mtu; in gsmld_ioctl()
2608 return gsmld_config(tty, gsm, &c); in gsmld_ioctl()
2733 if ((new_mtu < 8) || (new_mtu > mux_net->dlci->gsm->mtu)) in gsm_change_mtu()
2805 net->mtu = dlci->gsm->mtu; in gsm_create_network()
2865 ctrl = gsm_control_send(dlci->gsm, CMD_MSC, modembits, len + 1); in gsmtty_modem_update()
2868 return gsm_control_wait(dlci->gsm, ctrl); in gsmtty_modem_update()
2904 struct gsm_mux *gsm; in gsmtty_install() local
2920 gsm = gsm_mux[mux]; in gsmtty_install()
2921 if (gsm->dead) in gsmtty_install()
2927 mutex_lock(&gsm->mutex); in gsmtty_install()
2928 if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN) { in gsmtty_install()
2929 mutex_unlock(&gsm->mutex); in gsmtty_install()
2932 dlci = gsm->dlci[line]; in gsmtty_install()
2935 dlci = gsm_dlci_alloc(gsm, line); in gsmtty_install()
2938 mutex_unlock(&gsm->mutex); in gsmtty_install()
2945 mutex_unlock(&gsm->mutex); in gsmtty_install()
2950 dlci_get(gsm->dlci[0]); in gsmtty_install()
2951 mux_get(gsm); in gsmtty_install()
2953 mutex_unlock(&gsm->mutex); in gsmtty_install()
2979 struct gsm_mux *gsm; in gsmtty_close() local
2988 gsm = dlci->gsm; in gsmtty_close()
3178 struct gsm_mux *gsm = dlci->gsm; in gsmtty_cleanup() local
3181 dlci_put(gsm->dlci[0]); in gsmtty_cleanup()
3182 mux_put(gsm); in gsmtty_cleanup()