Lines Matching defs:gsm
155 struct gsm_mux *gsm;
263 * to the gsm mux array. For now we don't free DLCI objects that
297 void (*receive)(struct gsm_mux *gsm, u8 ch);
453 static int gsmld_output(struct gsm_mux *gsm, u8 *data, int len);
455 static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len,
457 static int gsm_send_packet(struct gsm_mux *gsm, struct gsm_msg *msg);
458 static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr);
459 static void gsmld_write_trigger(struct gsm_mux *gsm);
552 if (dlci->modem_tx & TIOCM_CD || dlci->gsm->initiator)
592 const struct gsm_mux *gsm = dlci->gsm;
624 params->t_bits = FIELD_PREP(PN_T_FIELD_T1, gsm->t1);
626 params->na_bits = FIELD_PREP(PN_NA_FIELD_N2, gsm->n2);
800 * @gsm: our GSM mux
808 static int gsm_send(struct gsm_mux *gsm, int addr, int cr, int control)
815 msg = gsm_data_alloc(gsm, addr, 0, control);
820 ocr = cr ^ (gsm->initiator ? 0 : 1);
827 if (gsm->encoding == GSM_BASIC_OPT)
835 spin_lock_irqsave(&gsm->tx_lock, flags);
836 list_add_tail(&msg->list, &gsm->tx_ctrl_list);
837 gsm->tx_bytes += msg->len;
838 spin_unlock_irqrestore(&gsm->tx_lock, flags);
839 gsmld_write_trigger(gsm);
846 * @gsm: mux
851 static void gsm_dlci_clear_queues(struct gsm_mux *gsm, struct gsm_dlci *dlci)
863 spin_lock_irqsave(&gsm->tx_lock, flags);
864 list_for_each_entry_safe(msg, nmsg, &gsm->tx_data_list, list) {
867 gsm->tx_bytes -= msg->len;
871 spin_unlock_irqrestore(&gsm->tx_lock, flags);
876 * @gsm: our GSM mux
883 static inline void gsm_response(struct gsm_mux *gsm, int addr, int control)
885 gsm_send(gsm, addr, 0, control);
890 * @gsm: our GSM mux
897 static inline void gsm_command(struct gsm_mux *gsm, int addr, int control)
899 gsm_send(gsm, addr, 1, control);
908 * @gsm: GSM mux
918 static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len,
935 * @gsm: GSM Mux
939 * The caller must hold the gsm tx lock.
941 static int gsm_send_packet(struct gsm_mux *gsm, struct gsm_msg *msg)
946 if (gsm->encoding == GSM_BASIC_OPT) {
947 gsm->txframe[0] = GSM0_SOF;
948 memcpy(gsm->txframe + 1, msg->data, msg->len);
949 gsm->txframe[msg->len + 1] = GSM0_SOF;
952 gsm->txframe[0] = GSM1_SOF;
953 len = gsm_stuff_frame(msg->data, gsm->txframe + 1, msg->len);
954 gsm->txframe[len + 1] = GSM1_SOF;
959 gsm_hex_dump_bytes(__func__, gsm->txframe, len);
960 gsm_print_packet("-->", msg->addr, gsm->initiator, msg->ctrl, msg->data,
963 ret = gsmld_output(gsm, gsm->txframe, len);
967 gsm->tx_bytes -= msg->len;
1005 * @gsm: GSM Mux
1011 * the gsm tx lock.
1013 static int gsm_data_kick(struct gsm_mux *gsm)
1019 clear_bit(TTY_DO_WRITE_WAKEUP, &gsm->tty->flags);
1022 list_for_each_entry_safe(msg, nmsg, &gsm->tx_ctrl_list, list) {
1023 if (gsm->constipated && !gsm_is_flow_ctrl_msg(msg))
1025 ret = gsm_send_packet(gsm, msg);
1031 gsm->tx_bytes -= msg->len;
1044 if (gsm->constipated)
1048 if (list_empty(&gsm->tx_data_list))
1050 list_for_each_entry_safe(msg, nmsg, &gsm->tx_data_list, list) {
1051 dlci = gsm->dlci[msg->addr];
1054 gsm->tx_bytes -= msg->len;
1059 ret = gsm_send_packet(gsm, msg);
1065 gsm->tx_bytes -= msg->len;
1088 * the gsm tx lock.
1093 struct gsm_mux *gsm = dlci->gsm;
1098 if (gsm->encoding == GSM_BASIC_OPT) {
1108 if (gsm->initiator)
1118 gsm_print_packet("Q> ", msg->addr, gsm->initiator, msg->ctrl,
1131 list_add_tail(&msg->list, &gsm->tx_data_list);
1136 list_add_tail(&msg->list, &gsm->tx_ctrl_list);
1139 gsm->tx_bytes += msg->len;
1141 gsmld_write_trigger(gsm);
1142 mod_timer(&gsm->kick_timer, jiffies + 10 * gsm->t1 * HZ / 100);
1152 * the gsm tx lock and dlci lock.
1158 spin_lock_irqsave(&dlci->gsm->tx_lock, flags);
1160 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags);
1165 * @gsm: mux
1175 static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci)
1194 msg = gsm_data_alloc(gsm, dlci->addr, size, dlci->ftype);
1225 * @gsm: mux
1235 static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,
1270 msg = gsm_data_alloc(gsm, dlci->addr, size, dlci->ftype);
1295 * @gsm: mux
1305 static int gsm_dlci_modem_output(struct gsm_mux *gsm, struct gsm_dlci *dlci,
1327 msg = gsm_data_alloc(gsm, dlci->addr, size, dlci->ftype);
1355 * @gsm: the GSM mux
1366 static int gsm_dlci_data_sweep(struct gsm_mux *gsm)
1373 while (gsm->tx_bytes < TX_THRESH_HI) {
1375 dlci = gsm->dlci[i];
1384 len = gsm_dlci_data_output(gsm, dlci);
1386 len = gsm_dlci_data_output_framed(gsm, dlci);
1422 spin_lock_irqsave(&dlci->gsm->tx_lock, flags);
1424 sweep = (dlci->gsm->tx_bytes < TX_THRESH_LO);
1425 if (dlci->gsm->tx_bytes == 0) {
1427 gsm_dlci_data_output_framed(dlci->gsm, dlci);
1429 gsm_dlci_data_output(dlci->gsm, dlci);
1432 gsm_dlci_data_sweep(dlci->gsm);
1433 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags);
1443 * @gsm: gsm channel
1450 static int gsm_control_command(struct gsm_mux *gsm, int cmd, const u8 *data,
1454 struct gsm_dlci *dlci = gsm->dlci[0];
1456 msg = gsm_data_alloc(gsm, 0, dlen + 2, dlci->ftype);
1470 * @gsm: gsm channel
1478 static void gsm_control_reply(struct gsm_mux *gsm, int cmd, const u8 *data,
1482 struct gsm_dlci *dlci = gsm->dlci[0];
1484 msg = gsm_data_alloc(gsm, 0, dlen + 2, dlci->ftype);
1552 wake_up_interruptible(&dlci->gsm->event);
1557 * @gsm: GSM channel
1565 static int gsm_process_negotiation(struct gsm_mux *gsm, unsigned int addr,
1569 struct gsm_dlci *dlci = gsm->dlci[addr];
1595 gsm->unsupported++;
1603 if (!cr && gsm->initiator) {
1616 if (n1 > gsm->mru || n1 > dlci->mtu) {
1638 } else if (cr && !gsm->initiator) {
1647 if (n1 > gsm->mru) {
1649 dlci->mtu = gsm->mru;
1668 * @gsm: GSM channel
1678 static void gsm_control_modem(struct gsm_mux *gsm, const u8 *data, int clen)
1694 if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL)
1696 dlci = gsm->dlci[addr];
1716 gsm_control_reply(gsm, CMD_MSC, data, clen);
1721 * @gsm: GSM channel
1729 static void gsm_control_negotiation(struct gsm_mux *gsm, unsigned int cr,
1738 gsm->open_error++;
1745 if (addr == 0 || addr >= NUM_DLCI || !gsm->dlci[addr]) {
1746 gsm->open_error++;
1749 dlci = gsm->dlci[addr];
1753 gsm->open_error++;
1758 if (gsm_process_negotiation(gsm, addr, cr, params) != 0) {
1762 gsm->open_error++;
1770 gsm_control_reply(gsm, CMD_PN, (const u8 *)&pn_reply,
1777 gsm_command(gsm, dlci->addr, SABM|PF);
1778 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
1782 gsm->open_error++;
1788 * @gsm: GSM channel
1797 static void gsm_control_rls(struct gsm_mux *gsm, const u8 *data, int clen)
1816 if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL)
1823 port = &gsm->dlci[addr]->port;
1834 gsm_control_reply(gsm, CMD_RLS, data, clen);
1841 * @gsm: our GSM mux
1851 static void gsm_control_message(struct gsm_mux *gsm, unsigned int command,
1858 struct gsm_dlci *dlci = gsm->dlci[0];
1862 gsm->dead = true;
1869 gsm_control_reply(gsm, CMD_TEST, data, clen);
1873 gsm->constipated = false;
1874 gsm_control_reply(gsm, CMD_FCON, NULL, 0);
1876 gsmld_write_trigger(gsm);
1880 gsm->constipated = true;
1881 gsm_control_reply(gsm, CMD_FCOFF, NULL, 0);
1885 gsm_control_modem(gsm, data, clen);
1889 gsm_control_rls(gsm, data, clen);
1893 gsm_control_reply(gsm, CMD_PSC, NULL, 0);
1898 gsm_control_negotiation(gsm, 1, data, clen);
1903 gsm->unsupported++;
1908 gsm_control_reply(gsm, CMD_NSC, buf, 1);
1915 * @gsm: our GSM mux
1926 static void gsm_control_response(struct gsm_mux *gsm, unsigned int command,
1933 spin_lock_irqsave(&gsm->control_lock, flags);
1935 ctrl = gsm->pending_cmd;
1936 dlci = gsm->dlci[0];
1941 del_timer(&gsm->t2_timer);
1942 gsm->pending_cmd = NULL;
1947 wake_up(&gsm->event);
1950 gsm_control_negotiation(gsm, 0, data, clen);
1952 } else if (command == CMD_TEST && clen == 1 && *data == gsm->ka_num) {
1953 gsm->ka_retries = -1; /* trigger new keep-alive message */
1955 mod_timer(&gsm->ka_timer, jiffies + gsm->keep_alive * HZ / 100);
1957 spin_unlock_irqrestore(&gsm->control_lock, flags);
1962 * @t: timer contained in our gsm object
1971 struct gsm_mux *gsm = from_timer(gsm, t, ka_timer);
1974 spin_lock_irqsave(&gsm->control_lock, flags);
1975 if (gsm->ka_num && gsm->ka_retries == 0) {
1979 spin_unlock_irqrestore(&gsm->control_lock, flags);
1980 if (gsm->dlci[0])
1981 gsm_dlci_begin_close(gsm->dlci[0]);
1983 } else if (gsm->keep_alive && gsm->dlci[0] && !gsm->dlci[0]->dead) {
1984 if (gsm->ka_retries > 0) {
1986 gsm->ka_retries--;
1989 gsm->ka_num++;
1990 if (!gsm->ka_num)
1991 gsm->ka_num++;
1992 gsm->ka_retries = (signed int)gsm->n2;
1994 gsm_control_command(gsm, CMD_TEST, &gsm->ka_num,
1995 sizeof(gsm->ka_num));
1996 mod_timer(&gsm->ka_timer,
1997 jiffies + gsm->t2 * HZ / 100);
1999 spin_unlock_irqrestore(&gsm->control_lock, flags);
2004 * @gsm: gsm mux
2010 static void gsm_control_transmit(struct gsm_mux *gsm, struct gsm_control *ctrl)
2012 gsm_control_command(gsm, ctrl->cmd, ctrl->data, ctrl->len);
2017 * @t: timer contained in our gsm object
2023 * gsm->pending_cmd will be NULL and we just let the timer expire.
2028 struct gsm_mux *gsm = from_timer(gsm, t, t2_timer);
2031 spin_lock_irqsave(&gsm->control_lock, flags);
2032 ctrl = gsm->pending_cmd;
2034 if (gsm->cretries == 0 || !gsm->dlci[0] || gsm->dlci[0]->dead) {
2035 gsm->pending_cmd = NULL;
2038 spin_unlock_irqrestore(&gsm->control_lock, flags);
2039 wake_up(&gsm->event);
2042 gsm->cretries--;
2043 gsm_control_transmit(gsm, ctrl);
2044 mod_timer(&gsm->t2_timer, jiffies + gsm->t2 * HZ / 100);
2046 spin_unlock_irqrestore(&gsm->control_lock, flags);
2051 * @gsm: the GSM channel
2061 static struct gsm_control *gsm_control_send(struct gsm_mux *gsm,
2070 wait_event(gsm->event, gsm->pending_cmd == NULL);
2071 spin_lock_irqsave(&gsm->control_lock, flags);
2072 if (gsm->pending_cmd != NULL) {
2073 spin_unlock_irqrestore(&gsm->control_lock, flags);
2079 gsm->pending_cmd = ctrl;
2082 if (gsm->dlci[0]->mode == DLCI_MODE_ADM)
2083 gsm->cretries = 0;
2085 gsm->cretries = gsm->n2;
2087 mod_timer(&gsm->t2_timer, jiffies + gsm->t2 * HZ / 100);
2088 gsm_control_transmit(gsm, ctrl);
2089 spin_unlock_irqrestore(&gsm->control_lock, flags);
2095 * @gsm: GSM mux
2103 static int gsm_control_wait(struct gsm_mux *gsm, struct gsm_control *control)
2106 wait_event(gsm->event, control->done == 1);
2139 gsm_dlci_clear_queues(dlci->gsm, dlci);
2144 del_timer(&dlci->gsm->ka_timer);
2145 dlci->gsm->dead = true;
2150 wake_up_all(&dlci->gsm->event);
2162 struct gsm_mux *gsm = dlci->gsm;
2177 gsm->ka_num = 0;
2178 gsm->ka_retries = -1;
2179 mod_timer(&gsm->ka_timer,
2180 jiffies + gsm->keep_alive * HZ / 100);
2183 wake_up(&dlci->gsm->event);
2195 struct gsm_mux *gsm = dlci->gsm;
2206 ret = gsm_control_command(gsm, CMD_PN, (const u8 *)¶ms,
2230 struct gsm_mux *gsm = dlci->gsm;
2236 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
2238 gsm->open_error++;
2245 gsm_command(dlci->gsm, dlci->addr, SABM|PF);
2246 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
2247 } else if (!dlci->addr && gsm->control == (DM | PF)) {
2254 gsm->open_error++;
2262 gsm_command(dlci->gsm, dlci->addr, DISC|PF);
2263 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
2286 struct gsm_mux *gsm = dlci ? dlci->gsm : NULL;
2289 if (!gsm)
2293 if (gsm->adaption != 1 || gsm->adaption != dlci->adaption)
2297 if (gsm->ftype != dlci->ftype)
2305 dlci->retries = gsm->n2;
2308 gsm_command(gsm, dlci->addr, SABM|PF);
2317 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
2375 struct gsm_mux *gsm = dlci->gsm;
2378 dlci->retries = gsm->n2;
2380 gsm_command(dlci->gsm, dlci->addr, DISC|PF);
2381 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100);
2382 wake_up_interruptible(&gsm->event);
2464 dlci->gsm->malformed++;
2469 gsm_control_message(dlci->gsm, command, data, clen);
2471 gsm_control_response(dlci->gsm, command, data, clen);
2476 * @t: timer contained in our gsm object
2484 struct gsm_mux *gsm = from_timer(gsm, t, kick_timer);
2488 spin_lock_irqsave(&gsm->tx_lock, flags);
2490 if (gsm->tx_bytes < TX_THRESH_LO)
2491 sent = gsm_dlci_data_sweep(gsm);
2492 spin_unlock_irqrestore(&gsm->tx_lock, flags);
2525 struct gsm_mux *gsm;
2540 gsm = dlci->gsm;
2545 if (dc->mtu > MAX_MTU || dc->mtu < MIN_MTU || dc->mtu > gsm->mru)
2572 if ((open && gsm->wait_config) || need_restart)
2585 wait_event_interruptible(gsm->event, dlci->state == DLCI_CLOSED);
2597 dlci->mtu = gsm->mtu;
2612 dlci->k = gsm->k;
2615 if (gsm->initiator)
2630 * @gsm: GSM mux
2638 static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr)
2654 dlci->gsm = gsm;
2656 dlci->adaption = gsm->adaption;
2657 dlci->mtu = gsm->mtu;
2662 dlci->ftype = gsm->ftype;
2663 dlci->k = gsm->k;
2672 gsm->dlci[addr] = dlci;
2689 dlci->gsm->dlci[dlci->addr] = NULL;
2745 * @gsm: pointer to our gsm mux
2753 static void gsm_queue(struct gsm_mux *gsm)
2759 if (gsm->fcs != GOOD_FCS) {
2760 gsm->bad_fcs++;
2762 pr_debug("BAD FCS %02x\n", gsm->fcs);
2765 address = gsm->address >> 1;
2769 cr = gsm->address & 1; /* C/R bit */
2770 cr ^= gsm->initiator ? 0 : 1; /* Flip so 1 always means command */
2772 gsm_print_packet("<--", address, cr, gsm->control, gsm->buf, gsm->len);
2774 dlci = gsm->dlci[address];
2776 switch (gsm->control) {
2779 gsm->open_error++;
2783 dlci = gsm_dlci_alloc(gsm, address);
2785 gsm->open_error++;
2789 gsm_response(gsm, address, DM|PF);
2791 gsm_response(gsm, address, UA|PF);
2799 gsm_response(gsm, address, DM|PF);
2803 gsm_response(gsm, address, UA|PF);
2835 gsm_response(gsm, address, DM|PF);
2838 dlci->data(dlci, gsm->buf, gsm->len);
2845 gsm->malformed++;
2852 * @gsm: gsm data for this ldisc instance
2855 * Receive bytes in gsm mode 0
2858 static void gsm0_receive(struct gsm_mux *gsm, unsigned char c)
2862 switch (gsm->state) {
2865 gsm->state = GSM_ADDRESS;
2866 gsm->address = 0;
2867 gsm->len = 0;
2868 gsm->fcs = INIT_FCS;
2872 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
2873 if (gsm_read_ea(&gsm->address, c))
2874 gsm->state = GSM_CONTROL;
2877 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
2878 gsm->control = c;
2879 gsm->state = GSM_LEN0;
2882 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
2883 if (gsm_read_ea(&gsm->len, c)) {
2884 if (gsm->len > gsm->mru) {
2885 gsm->bad_size++;
2886 gsm->state = GSM_SEARCH;
2889 gsm->count = 0;
2890 if (!gsm->len)
2891 gsm->state = GSM_FCS;
2893 gsm->state = GSM_DATA;
2896 gsm->state = GSM_LEN1;
2899 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
2901 gsm->len |= len << 7;
2902 if (gsm->len > gsm->mru) {
2903 gsm->bad_size++;
2904 gsm->state = GSM_SEARCH;
2907 gsm->count = 0;
2908 if (!gsm->len)
2909 gsm->state = GSM_FCS;
2911 gsm->state = GSM_DATA;
2914 gsm->buf[gsm->count++] = c;
2915 if (gsm->count == gsm->len) {
2917 if ((gsm->control & ~PF) != UIH) {
2918 gsm->fcs = gsm_fcs_add_block(gsm->fcs, gsm->buf,
2919 gsm->count);
2921 gsm->state = GSM_FCS;
2925 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
2926 gsm->state = GSM_SSOF;
2929 gsm->state = GSM_SEARCH;
2931 gsm_queue(gsm);
2933 gsm->bad_size++;
2936 pr_debug("%s: unhandled state: %d\n", __func__, gsm->state);
2943 * @gsm: gsm data for this ldisc instance
2949 static void gsm1_receive(struct gsm_mux *gsm, unsigned char c)
2953 gsm->constipated = true;
2956 gsm->constipated = false;
2958 gsmld_write_trigger(gsm);
2963 if (gsm->state == GSM_DATA) {
2964 if (gsm->count < 1) {
2966 gsm->malformed++;
2967 gsm->state = GSM_START;
2971 gsm->count--;
2972 if ((gsm->control & ~PF) != UIH) {
2976 gsm->fcs = gsm_fcs_add_block(gsm->fcs, gsm->buf,
2977 gsm->count);
2980 gsm->fcs = gsm_fcs_add(gsm->fcs, gsm->buf[gsm->count]);
2981 gsm->len = gsm->count;
2982 gsm_queue(gsm);
2983 gsm->state = GSM_START;
2987 if (gsm->state != GSM_START) {
2988 if (gsm->state != GSM_SEARCH)
2989 gsm->malformed++;
2990 gsm->state = GSM_START;
2998 gsm->escape = true;
3003 if (gsm->state == GSM_SEARCH)
3006 if (gsm->escape) {
3008 gsm->escape = false;
3010 switch (gsm->state) {
3012 gsm->address = 0;
3013 gsm->state = GSM_ADDRESS;
3014 gsm->fcs = INIT_FCS;
3017 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
3018 if (gsm_read_ea(&gsm->address, c))
3019 gsm->state = GSM_CONTROL;
3022 gsm->fcs = gsm_fcs_add(gsm->fcs, c);
3023 gsm->control = c;
3024 gsm->count = 0;
3025 gsm->state = GSM_DATA;
3028 if (gsm->count > gsm->mru) { /* Allow one for the FCS */
3029 gsm->state = GSM_OVERRUN;
3030 gsm->bad_size++;
3032 gsm->buf[gsm->count++] = c;
3037 pr_debug("%s: unhandled state: %d\n", __func__, gsm->state);
3044 * @gsm: ldisc data
3052 static void gsm_error(struct gsm_mux *gsm)
3054 gsm->state = GSM_SEARCH;
3055 gsm->io_error++;
3060 * @gsm: our mux
3068 static void gsm_cleanup_mux(struct gsm_mux *gsm, bool disc)
3074 gsm->dead = true;
3075 mutex_lock(&gsm->mutex);
3077 dlci = gsm->dlci[0];
3081 wait_event(gsm->event, dlci->state == DLCI_CLOSED);
3087 del_timer_sync(&gsm->kick_timer);
3088 del_timer_sync(&gsm->t2_timer);
3089 del_timer_sync(&gsm->ka_timer);
3092 flush_work(&gsm->tx_work);
3095 if (gsm->has_devices) {
3096 gsm_unregister_devices(gsm_tty_driver, gsm->num);
3097 gsm->has_devices = false;
3100 if (gsm->dlci[i])
3101 gsm_dlci_release(gsm->dlci[i]);
3102 mutex_unlock(&gsm->mutex);
3104 tty_ldisc_flush(gsm->tty);
3105 list_for_each_entry_safe(txq, ntxq, &gsm->tx_ctrl_list, list)
3107 INIT_LIST_HEAD(&gsm->tx_ctrl_list);
3108 list_for_each_entry_safe(txq, ntxq, &gsm->tx_data_list, list)
3110 INIT_LIST_HEAD(&gsm->tx_data_list);
3115 * @gsm: our mux
3122 static int gsm_activate_mux(struct gsm_mux *gsm)
3127 dlci = gsm_dlci_alloc(gsm, 0);
3131 if (gsm->encoding == GSM_BASIC_OPT)
3132 gsm->receive = gsm0_receive;
3134 gsm->receive = gsm1_receive;
3136 ret = gsm_register_devices(gsm_tty_driver, gsm->num);
3140 gsm->has_devices = true;
3141 gsm->dead = false; /* Tty opens are now permissible */
3147 * @gsm: mux to free
3151 static void gsm_free_mux(struct gsm_mux *gsm)
3156 if (gsm == gsm_mux[i]) {
3161 mutex_destroy(&gsm->mutex);
3162 kfree(gsm->txframe);
3163 kfree(gsm->buf);
3164 kfree(gsm);
3175 struct gsm_mux *gsm = container_of(ref, struct gsm_mux, ref);
3176 gsm_free_mux(gsm);
3179 static inline void mux_get(struct gsm_mux *gsm)
3184 kref_get(&gsm->ref);
3188 static inline void mux_put(struct gsm_mux *gsm)
3193 kref_put(&gsm->ref, gsm_free_muxr);
3197 static inline unsigned int mux_num_to_base(struct gsm_mux *gsm)
3199 return gsm->num * NUM_DLCI;
3216 struct gsm_mux *gsm = kzalloc(sizeof(struct gsm_mux), GFP_KERNEL);
3217 if (gsm == NULL)
3219 gsm->buf = kmalloc(MAX_MRU + 1, GFP_KERNEL);
3220 if (gsm->buf == NULL) {
3221 kfree(gsm);
3224 gsm->txframe = kmalloc(2 * (MAX_MTU + PROT_OVERHEAD - 1), GFP_KERNEL);
3225 if (gsm->txframe == NULL) {
3226 kfree(gsm->buf);
3227 kfree(gsm);
3230 spin_lock_init(&gsm->lock);
3231 mutex_init(&gsm->mutex);
3232 kref_init(&gsm->ref);
3233 INIT_LIST_HEAD(&gsm->tx_ctrl_list);
3234 INIT_LIST_HEAD(&gsm->tx_data_list);
3235 timer_setup(&gsm->kick_timer, gsm_kick_timer, 0);
3236 timer_setup(&gsm->t2_timer, gsm_control_retransmit, 0);
3237 timer_setup(&gsm->ka_timer, gsm_control_keep_alive, 0);
3238 INIT_WORK(&gsm->tx_work, gsmld_write_task);
3239 init_waitqueue_head(&gsm->event);
3240 spin_lock_init(&gsm->control_lock);
3241 spin_lock_init(&gsm->tx_lock);
3243 gsm->t1 = T1;
3244 gsm->t2 = T2;
3245 gsm->t3 = T3;
3246 gsm->n2 = N2;
3247 gsm->k = K;
3248 gsm->ftype = UIH;
3249 gsm->adaption = 1;
3250 gsm->encoding = GSM_ADV_OPT;
3251 gsm->mru = 64; /* Default to encoding 1 so these should be 64 */
3252 gsm->mtu = 64;
3253 gsm->dead = true; /* Avoid early tty opens */
3254 gsm->wait_config = false; /* Disabled */
3255 gsm->keep_alive = 0; /* Disabled */
3263 gsm_mux[i] = gsm;
3264 gsm->num = i;
3270 mutex_destroy(&gsm->mutex);
3271 kfree(gsm->txframe);
3272 kfree(gsm->buf);
3273 kfree(gsm);
3277 return gsm;
3280 static void gsm_copy_config_values(struct gsm_mux *gsm,
3284 c->adaption = gsm->adaption;
3285 c->encapsulation = gsm->encoding;
3286 c->initiator = gsm->initiator;
3287 c->t1 = gsm->t1;
3288 c->t2 = gsm->t2;
3289 c->t3 = gsm->t3;
3290 c->n2 = gsm->n2;
3291 if (gsm->ftype == UIH)
3295 pr_debug("Ftype %d i %d\n", gsm->ftype, c->i);
3296 c->mru = gsm->mru;
3297 c->mtu = gsm->mtu;
3298 c->k = gsm->k;
3301 static int gsm_config(struct gsm_mux *gsm, struct gsm_config *c)
3331 if (c->t1 != 0 && c->t1 != gsm->t1)
3333 if (c->t2 != 0 && c->t2 != gsm->t2)
3335 if (c->encapsulation != gsm->encoding)
3337 if (c->adaption != gsm->adaption)
3340 if (c->initiator != gsm->initiator)
3342 if (c->mru != gsm->mru)
3344 if (c->mtu != gsm->mtu)
3353 gsm_cleanup_mux(gsm, true);
3355 gsm->initiator = c->initiator;
3356 gsm->mru = c->mru;
3357 gsm->mtu = c->mtu;
3358 gsm->encoding = c->encapsulation ? GSM_ADV_OPT : GSM_BASIC_OPT;
3359 gsm->adaption = c->adaption;
3360 gsm->n2 = c->n2;
3363 gsm->ftype = UIH;
3365 gsm->ftype = UI;
3368 gsm->t1 = c->t1;
3370 gsm->t2 = c->t2;
3372 gsm->t3 = c->t3;
3374 gsm->k = c->k;
3380 if (gsm->dead) {
3381 int ret = gsm_activate_mux(gsm);
3384 if (gsm->initiator)
3385 gsm_dlci_begin_open(gsm->dlci[0]);
3390 static void gsm_copy_config_ext_values(struct gsm_mux *gsm,
3394 ce->wait_config = gsm->wait_config ? 1 : 0;
3395 ce->keep_alive = gsm->keep_alive;
3398 static int gsm_config_ext(struct gsm_mux *gsm, struct gsm_config_ext *ce)
3423 gsm_cleanup_mux(gsm, true);
3428 gsm->wait_config = ce->wait_config ? true : false;
3429 gsm->keep_alive = ce->keep_alive;
3431 if (gsm->dead) {
3432 int ret = gsm_activate_mux(gsm);
3435 if (gsm->initiator)
3436 gsm_dlci_begin_open(gsm->dlci[0]);
3444 * @gsm: our mux
3452 static int gsmld_output(struct gsm_mux *gsm, u8 *data, int len)
3454 if (tty_write_room(gsm->tty) < len) {
3455 set_bit(TTY_DO_WRITE_WAKEUP, &gsm->tty->flags);
3460 return gsm->tty->ops->write(gsm->tty, data, len);
3466 * @gsm: our mux
3468 static void gsmld_write_trigger(struct gsm_mux *gsm)
3470 if (!gsm || !gsm->dlci[0] || gsm->dlci[0]->dead)
3472 schedule_work(&gsm->tx_work);
3485 struct gsm_mux *gsm = container_of(work, struct gsm_mux, tx_work);
3493 spin_lock_irqsave(&gsm->tx_lock, flags);
3494 if (gsm->tty)
3495 ret = gsm_data_kick(gsm);
3496 spin_unlock_irqrestore(&gsm->tx_lock, flags);
3500 if (gsm->dlci[i])
3501 tty_port_tty_wakeup(&gsm->dlci[i]->port);
3507 * @gsm: our mux
3514 static void gsmld_attach_gsm(struct tty_struct *tty, struct gsm_mux *gsm)
3516 gsm->tty = tty_kref_get(tty);
3518 gsm->old_c_iflag = tty->termios.c_iflag;
3525 * @gsm: mux
3530 static void gsmld_detach_gsm(struct tty_struct *tty, struct gsm_mux *gsm)
3532 WARN_ON(tty != gsm->tty);
3534 gsm->tty->termios.c_iflag = gsm->old_c_iflag;
3535 tty_kref_put(gsm->tty);
3536 gsm->tty = NULL;
3542 struct gsm_mux *gsm = tty->disc_data;
3553 if (gsm->receive)
3554 gsm->receive(gsm, *cp);
3560 gsm_error(gsm);
3597 struct gsm_mux *gsm = tty->disc_data;
3603 gsm_cleanup_mux(gsm, false);
3605 gsmld_detach_gsm(tty, gsm);
3609 mux_put(gsm);
3624 struct gsm_mux *gsm;
3633 gsm = gsm_alloc_mux();
3634 if (gsm == NULL)
3637 tty->disc_data = gsm;
3641 gsmld_attach_gsm(tty, gsm);
3646 if (gsm->encoding == GSM_BASIC_OPT)
3647 gsm->receive = gsm0_receive;
3649 gsm->receive = gsm1_receive;
3665 struct gsm_mux *gsm = tty->disc_data;
3668 gsmld_write_trigger(gsm);
3711 struct gsm_mux *gsm = tty->disc_data;
3716 if (!gsm)
3720 spin_lock_irqsave(&gsm->tx_lock, flags);
3726 spin_unlock_irqrestore(&gsm->tx_lock, flags);
3749 struct gsm_mux *gsm = tty->disc_data;
3754 if (gsm->dead)
3771 struct gsm_mux *gsm = tty->disc_data;
3777 gsm_copy_config_values(gsm, &c);
3784 return gsm_config(gsm, &c);
3786 base = mux_num_to_base(gsm);
3789 gsm_copy_config_ext_values(gsm, &ce);
3796 return gsm_config_ext(gsm, &ce);
3803 dlci = gsm->dlci[addr];
3805 dlci = gsm_dlci_alloc(gsm, addr);
3819 dlci = gsm->dlci[addr];
3821 dlci = gsm_dlci_alloc(gsm, addr);
3998 netname = "gsm%d";
4063 struct gsm_mux *gsm = dlci->gsm;
4069 spin_lock_irqsave(&gsm->tx_lock, flags);
4070 gsm_dlci_modem_output(gsm, dlci, brk);
4071 spin_unlock_irqrestore(&gsm->tx_lock, flags);
4086 if (dlci->gsm->encoding != GSM_BASIC_OPT)
4097 ctrl = gsm_control_send(dlci->gsm, CMD_MSC, modembits, len);
4100 return gsm_control_wait(dlci->gsm, ctrl);
4111 if (dlci->gsm->dead)
4117 } else if (dlci->gsm->encoding == GSM_BASIC_OPT) {
4139 struct gsm_mux *gsm = dlci->gsm;
4143 ret = wait_event_interruptible(gsm->event, gsm->dead ||
4146 if (gsm->dead)
4156 struct gsm_mux *gsm = dlci->gsm;
4168 if (gsm->encoding == GSM_BASIC_OPT &&
4169 gsm->dlci[0]->mode == DLCI_MODE_ADM && !dlci->modem_rx)
4197 struct gsm_mux *gsm;
4213 gsm = gsm_mux[mux];
4214 if (gsm->dead)
4220 mutex_lock(&gsm->mutex);
4221 if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN) {
4222 mutex_unlock(&gsm->mutex);
4225 dlci = gsm->dlci[line];
4228 dlci = gsm_dlci_alloc(gsm, line);
4231 mutex_unlock(&gsm->mutex);
4238 mutex_unlock(&gsm->mutex);
4243 dlci_get(gsm->dlci[0]);
4244 mux_get(gsm);
4246 mutex_unlock(&gsm->mutex);
4264 if (!dlci->gsm->wait_config) {
4266 if (dlci->gsm->initiator)
4499 struct gsm_mux *gsm = dlci->gsm;
4502 dlci_put(gsm->dlci[0]);
4503 mux_put(gsm);