Lines Matching refs:gsm

114 	struct gsm_mux *gsm;  member
218 void (*receive)(struct gsm_mux *gsm, u8 ch);
219 void (*error)(struct gsm_mux *gsm, u8 ch, u8 flag);
559 static void gsm_send(struct gsm_mux *gsm, int addr, int cr, int control) in gsm_send() argument
565 switch (gsm->encoding) { in gsm_send()
593 gsm->output(gsm, cbuf, len); in gsm_send()
606 static inline void gsm_response(struct gsm_mux *gsm, int addr, int control) in gsm_response() argument
608 gsm_send(gsm, addr, 0, control); in gsm_response()
620 static inline void gsm_command(struct gsm_mux *gsm, int addr, int control) in gsm_command() argument
622 gsm_send(gsm, addr, 1, control); in gsm_command()
641 static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len, in gsm_data_alloc() argument
668 static void gsm_data_kick(struct gsm_mux *gsm) in gsm_data_kick() argument
674 list_for_each_entry_safe(msg, nmsg, &gsm->tx_list, list) { in gsm_data_kick()
675 if (gsm->constipated && msg->addr) in gsm_data_kick()
677 if (gsm->encoding != 0) { in gsm_data_kick()
678 gsm->txframe[0] = GSM1_SOF; in gsm_data_kick()
680 gsm->txframe + 1, msg->len); in gsm_data_kick()
681 gsm->txframe[len + 1] = GSM1_SOF; in gsm_data_kick()
684 gsm->txframe[0] = GSM0_SOF; in gsm_data_kick()
685 memcpy(gsm->txframe + 1 , msg->data, msg->len); in gsm_data_kick()
686 gsm->txframe[msg->len + 1] = GSM0_SOF; in gsm_data_kick()
693 gsm->txframe, len); in gsm_data_kick()
695 if (gsm->output(gsm, gsm->txframe + skip_sof, in gsm_data_kick()
699 gsm->tx_bytes -= msg->len; in gsm_data_kick()
721 struct gsm_mux *gsm = dlci->gsm; in __gsm_data_queue() local
726 if (gsm->encoding == 0) { in __gsm_data_queue()
736 if (gsm->initiator) in __gsm_data_queue()
746 gsm_print_packet("Q> ", msg->addr, gsm->initiator, msg->ctrl, in __gsm_data_queue()
755 list_add_tail(&msg->list, &gsm->tx_list); in __gsm_data_queue()
756 gsm->tx_bytes += msg->len; in __gsm_data_queue()
757 gsm_data_kick(gsm); in __gsm_data_queue()
773 spin_lock_irqsave(&dlci->gsm->tx_lock, flags); in gsm_data_queue()
775 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags); in gsm_data_queue()
790 static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci) in gsm_dlci_data_output() argument
804 if (len > gsm->mtu) in gsm_dlci_data_output()
805 len = gsm->mtu; in gsm_dlci_data_output()
809 msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype); in gsm_dlci_data_output()
843 static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, in gsm_dlci_data_output_framed() argument
866 if (len > gsm->mtu) { in gsm_dlci_data_output_framed()
873 len = gsm->mtu; in gsm_dlci_data_output_framed()
878 msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype); in gsm_dlci_data_output_framed()
917 static void gsm_dlci_data_sweep(struct gsm_mux *gsm) in gsm_dlci_data_sweep() argument
926 if (gsm->tx_bytes > TX_THRESH_HI) in gsm_dlci_data_sweep()
928 dlci = gsm->dlci[i]; in gsm_dlci_data_sweep()
934 len = gsm_dlci_data_output(gsm, dlci); in gsm_dlci_data_sweep()
936 len = gsm_dlci_data_output_framed(gsm, dlci); in gsm_dlci_data_sweep()
962 spin_lock_irqsave(&dlci->gsm->tx_lock, flags); in gsm_dlci_data_kick()
964 sweep = (dlci->gsm->tx_bytes < TX_THRESH_LO); in gsm_dlci_data_kick()
965 if (dlci->gsm->tx_bytes == 0) { in gsm_dlci_data_kick()
967 gsm_dlci_data_output_framed(dlci->gsm, dlci); in gsm_dlci_data_kick()
969 gsm_dlci_data_output(dlci->gsm, dlci); in gsm_dlci_data_kick()
972 gsm_dlci_data_sweep(dlci->gsm); in gsm_dlci_data_kick()
973 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags); in gsm_dlci_data_kick()
991 static void gsm_control_reply(struct gsm_mux *gsm, int cmd, u8 *data, in gsm_control_reply() argument
995 msg = gsm_data_alloc(gsm, 0, dlen + 2, gsm->ftype); in gsm_control_reply()
1001 gsm_data_queue(gsm->dlci[0], msg); in gsm_control_reply()
1076 static void gsm_control_modem(struct gsm_mux *gsm, u8 *data, int clen) in gsm_control_modem() argument
1098 if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL) in gsm_control_modem()
1100 dlci = gsm->dlci[addr]; in gsm_control_modem()
1123 gsm_control_reply(gsm, CMD_MSC, data, clen); in gsm_control_modem()
1137 static void gsm_control_rls(struct gsm_mux *gsm, u8 *data, int clen) in gsm_control_rls() argument
1156 if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL) in gsm_control_rls()
1163 port = &gsm->dlci[addr]->port; in gsm_control_rls()
1174 gsm_control_reply(gsm, CMD_RLS, data, clen); in gsm_control_rls()
1191 static void gsm_control_message(struct gsm_mux *gsm, unsigned int command, in gsm_control_message() argument
1199 struct gsm_dlci *dlci = gsm->dlci[0]; in gsm_control_message()
1203 gsm->dead = 1; in gsm_control_message()
1210 gsm_control_reply(gsm, CMD_TEST, data, clen); in gsm_control_message()
1214 gsm->constipated = 0; in gsm_control_message()
1215 gsm_control_reply(gsm, CMD_FCON, NULL, 0); in gsm_control_message()
1217 spin_lock_irqsave(&gsm->tx_lock, flags); in gsm_control_message()
1218 gsm_data_kick(gsm); in gsm_control_message()
1219 spin_unlock_irqrestore(&gsm->tx_lock, flags); in gsm_control_message()
1223 gsm->constipated = 1; in gsm_control_message()
1224 gsm_control_reply(gsm, CMD_FCOFF, NULL, 0); in gsm_control_message()
1228 gsm_control_modem(gsm, data, clen); in gsm_control_message()
1232 gsm_control_rls(gsm, data, clen); in gsm_control_message()
1236 gsm_control_reply(gsm, CMD_PSC, NULL, 0); in gsm_control_message()
1245 gsm_control_reply(gsm, CMD_NSC, buf, 1); in gsm_control_message()
1263 static void gsm_control_response(struct gsm_mux *gsm, unsigned int command, in gsm_control_response() argument
1269 spin_lock_irqsave(&gsm->control_lock, flags); in gsm_control_response()
1271 ctrl = gsm->pending_cmd; in gsm_control_response()
1276 del_timer(&gsm->t2_timer); in gsm_control_response()
1277 gsm->pending_cmd = NULL; in gsm_control_response()
1282 wake_up(&gsm->event); in gsm_control_response()
1284 spin_unlock_irqrestore(&gsm->control_lock, flags); in gsm_control_response()
1295 static void gsm_control_transmit(struct gsm_mux *gsm, struct gsm_control *ctrl) in gsm_control_transmit() argument
1297 struct gsm_msg *msg = gsm_data_alloc(gsm, 0, ctrl->len + 1, gsm->ftype); in gsm_control_transmit()
1302 gsm_data_queue(gsm->dlci[0], msg); in gsm_control_transmit()
1318 struct gsm_mux *gsm = from_timer(gsm, t, t2_timer); in gsm_control_retransmit() local
1321 spin_lock_irqsave(&gsm->control_lock, flags); in gsm_control_retransmit()
1322 ctrl = gsm->pending_cmd; in gsm_control_retransmit()
1324 gsm->cretries--; in gsm_control_retransmit()
1325 if (gsm->cretries == 0) { in gsm_control_retransmit()
1326 gsm->pending_cmd = NULL; in gsm_control_retransmit()
1329 spin_unlock_irqrestore(&gsm->control_lock, flags); in gsm_control_retransmit()
1330 wake_up(&gsm->event); in gsm_control_retransmit()
1333 gsm_control_transmit(gsm, ctrl); in gsm_control_retransmit()
1334 mod_timer(&gsm->t2_timer, jiffies + gsm->t2 * HZ / 100); in gsm_control_retransmit()
1336 spin_unlock_irqrestore(&gsm->control_lock, flags); in gsm_control_retransmit()
1351 static struct gsm_control *gsm_control_send(struct gsm_mux *gsm, in gsm_control_send() argument
1360 wait_event(gsm->event, gsm->pending_cmd == NULL); in gsm_control_send()
1361 spin_lock_irqsave(&gsm->control_lock, flags); in gsm_control_send()
1362 if (gsm->pending_cmd != NULL) { in gsm_control_send()
1363 spin_unlock_irqrestore(&gsm->control_lock, flags); in gsm_control_send()
1369 gsm->pending_cmd = ctrl; in gsm_control_send()
1372 if (gsm->dlci[0]->mode == DLCI_MODE_ADM) in gsm_control_send()
1373 gsm->cretries = 1; in gsm_control_send()
1375 gsm->cretries = gsm->n2; in gsm_control_send()
1377 mod_timer(&gsm->t2_timer, jiffies + gsm->t2 * HZ / 100); in gsm_control_send()
1378 gsm_control_transmit(gsm, ctrl); in gsm_control_send()
1379 spin_unlock_irqrestore(&gsm->control_lock, flags); in gsm_control_send()
1393 static int gsm_control_wait(struct gsm_mux *gsm, struct gsm_control *control) in gsm_control_wait() argument
1396 wait_event(gsm->event, control->done == 1); in gsm_control_wait()
1429 dlci->gsm->dead = 1; in gsm_dlci_close()
1430 wake_up(&dlci->gsm->event); in gsm_dlci_close()
1451 wake_up(&dlci->gsm->event); in gsm_dlci_open()
1472 struct gsm_mux *gsm = dlci->gsm; in gsm_dlci_t1() local
1478 gsm_command(dlci->gsm, dlci->addr, SABM|PF); in gsm_dlci_t1()
1479 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_t1()
1480 } else if (!dlci->addr && gsm->control == (DM | PF)) { in gsm_dlci_t1()
1494 gsm_command(dlci->gsm, dlci->addr, DISC|PF); in gsm_dlci_t1()
1495 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_t1()
1514 struct gsm_mux *gsm = dlci->gsm; in gsm_dlci_begin_open() local
1517 dlci->retries = gsm->n2; in gsm_dlci_begin_open()
1519 gsm_command(dlci->gsm, dlci->addr, SABM|PF); in gsm_dlci_begin_open()
1520 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_begin_open()
1536 struct gsm_mux *gsm = dlci->gsm; in gsm_dlci_begin_close() local
1539 dlci->retries = gsm->n2; in gsm_dlci_begin_close()
1541 gsm_command(dlci->gsm, dlci->addr, DISC|PF); in gsm_dlci_begin_close()
1542 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); in gsm_dlci_begin_close()
1620 gsm_control_message(dlci->gsm, command, in gsm_dlci_command()
1623 gsm_control_response(dlci->gsm, command, in gsm_dlci_command()
1644 static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr) in gsm_dlci_alloc() argument
1661 dlci->gsm = gsm; in gsm_dlci_alloc()
1663 dlci->adaption = gsm->adaption; in gsm_dlci_alloc()
1669 gsm->dlci[addr] = dlci; in gsm_dlci_alloc()
1686 dlci->gsm->dlci[dlci->addr] = NULL; in gsm_dlci_free()
1745 static void gsm_queue(struct gsm_mux *gsm) in gsm_queue() argument
1753 if ((gsm->control & ~PF) == UI) in gsm_queue()
1754 gsm->fcs = gsm_fcs_add_block(gsm->fcs, gsm->buf, gsm->len); in gsm_queue()
1755 if (gsm->encoding == 0) { in gsm_queue()
1760 gsm->fcs = gsm_fcs_add(gsm->fcs, gsm->received_fcs); in gsm_queue()
1762 if (gsm->fcs != GOOD_FCS) { in gsm_queue()
1763 gsm->bad_fcs++; in gsm_queue()
1765 pr_debug("BAD FCS %02x\n", gsm->fcs); in gsm_queue()
1768 address = gsm->address >> 1; in gsm_queue()
1772 cr = gsm->address & 1; /* C/R bit */ in gsm_queue()
1774 gsm_print_packet("<--", address, cr, gsm->control, gsm->buf, gsm->len); in gsm_queue()
1776 cr ^= 1 - gsm->initiator; /* Flip so 1 always means command */ in gsm_queue()
1777 dlci = gsm->dlci[address]; in gsm_queue()
1779 switch (gsm->control) { in gsm_queue()
1784 dlci = gsm_dlci_alloc(gsm, address); in gsm_queue()
1788 gsm_response(gsm, address, DM); in gsm_queue()
1790 gsm_response(gsm, address, UA); in gsm_queue()
1798 gsm_response(gsm, address, DM); in gsm_queue()
1802 gsm_response(gsm, address, UA); in gsm_queue()
1835 gsm_command(gsm, address, DM|PF); in gsm_queue()
1838 dlci->data(dlci, gsm->buf, gsm->len); in gsm_queue()
1845 gsm->malformed++; in gsm_queue()
1858 static void gsm0_receive(struct gsm_mux *gsm, unsigned char c) in gsm0_receive() argument
1862 switch (gsm->state) { in gsm0_receive()
1865 gsm->state = GSM_ADDRESS; in gsm0_receive()
1866 gsm->address = 0; in gsm0_receive()
1867 gsm->len = 0; in gsm0_receive()
1868 gsm->fcs = INIT_FCS; in gsm0_receive()
1872 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm0_receive()
1873 if (gsm_read_ea(&gsm->address, c)) in gsm0_receive()
1874 gsm->state = GSM_CONTROL; in gsm0_receive()
1877 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm0_receive()
1878 gsm->control = c; in gsm0_receive()
1879 gsm->state = GSM_LEN0; in gsm0_receive()
1882 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm0_receive()
1883 if (gsm_read_ea(&gsm->len, c)) { in gsm0_receive()
1884 if (gsm->len > gsm->mru) { in gsm0_receive()
1885 gsm->bad_size++; in gsm0_receive()
1886 gsm->state = GSM_SEARCH; in gsm0_receive()
1889 gsm->count = 0; in gsm0_receive()
1890 if (!gsm->len) in gsm0_receive()
1891 gsm->state = GSM_FCS; in gsm0_receive()
1893 gsm->state = GSM_DATA; in gsm0_receive()
1896 gsm->state = GSM_LEN1; in gsm0_receive()
1899 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm0_receive()
1901 gsm->len |= len << 7; in gsm0_receive()
1902 if (gsm->len > gsm->mru) { in gsm0_receive()
1903 gsm->bad_size++; in gsm0_receive()
1904 gsm->state = GSM_SEARCH; in gsm0_receive()
1907 gsm->count = 0; in gsm0_receive()
1908 if (!gsm->len) in gsm0_receive()
1909 gsm->state = GSM_FCS; in gsm0_receive()
1911 gsm->state = GSM_DATA; in gsm0_receive()
1914 gsm->buf[gsm->count++] = c; in gsm0_receive()
1915 if (gsm->count == gsm->len) in gsm0_receive()
1916 gsm->state = GSM_FCS; in gsm0_receive()
1919 gsm->received_fcs = c; in gsm0_receive()
1920 gsm_queue(gsm); in gsm0_receive()
1921 gsm->state = GSM_SSOF; in gsm0_receive()
1925 gsm->state = GSM_SEARCH; in gsm0_receive()
1940 static void gsm1_receive(struct gsm_mux *gsm, unsigned char c) in gsm1_receive() argument
1945 if (gsm->state == GSM_DATA && gsm->count) { in gsm1_receive()
1947 gsm->count--; in gsm1_receive()
1948 gsm->fcs = gsm_fcs_add(gsm->fcs, gsm->buf[gsm->count]); in gsm1_receive()
1949 gsm->len = gsm->count; in gsm1_receive()
1950 gsm_queue(gsm); in gsm1_receive()
1951 gsm->state = GSM_START; in gsm1_receive()
1955 if (gsm->state != GSM_START) { in gsm1_receive()
1956 gsm->malformed++; in gsm1_receive()
1957 gsm->state = GSM_START; in gsm1_receive()
1965 gsm->escape = 1; in gsm1_receive()
1970 if (gsm->state == GSM_SEARCH) in gsm1_receive()
1973 if (gsm->escape) { in gsm1_receive()
1975 gsm->escape = 0; in gsm1_receive()
1977 switch (gsm->state) { in gsm1_receive()
1979 gsm->address = 0; in gsm1_receive()
1980 gsm->state = GSM_ADDRESS; in gsm1_receive()
1981 gsm->fcs = INIT_FCS; in gsm1_receive()
1984 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm1_receive()
1985 if (gsm_read_ea(&gsm->address, c)) in gsm1_receive()
1986 gsm->state = GSM_CONTROL; in gsm1_receive()
1989 gsm->fcs = gsm_fcs_add(gsm->fcs, c); in gsm1_receive()
1990 gsm->control = c; in gsm1_receive()
1991 gsm->count = 0; in gsm1_receive()
1992 gsm->state = GSM_DATA; in gsm1_receive()
1995 if (gsm->count > gsm->mru) { /* Allow one for the FCS */ in gsm1_receive()
1996 gsm->state = GSM_OVERRUN; in gsm1_receive()
1997 gsm->bad_size++; in gsm1_receive()
1999 gsm->buf[gsm->count++] = c; in gsm1_receive()
2018 static void gsm_error(struct gsm_mux *gsm, in gsm_error() argument
2021 gsm->state = GSM_SEARCH; in gsm_error()
2022 gsm->io_error++; in gsm_error()
2025 static int gsm_disconnect(struct gsm_mux *gsm) in gsm_disconnect() argument
2027 struct gsm_dlci *dlci = gsm->dlci[0]; in gsm_disconnect()
2035 gc = gsm_control_send(gsm, CMD_CLD, NULL, 0); in gsm_disconnect()
2037 gsm_control_wait(gsm, gc); in gsm_disconnect()
2039 del_timer_sync(&gsm->t2_timer); in gsm_disconnect()
2043 wait_event_interruptible(gsm->event, in gsm_disconnect()
2061 static void gsm_cleanup_mux(struct gsm_mux *gsm) in gsm_cleanup_mux() argument
2064 struct gsm_dlci *dlci = gsm->dlci[0]; in gsm_cleanup_mux()
2067 gsm->dead = 1; in gsm_cleanup_mux()
2071 if (gsm_mux[i] == gsm) { in gsm_cleanup_mux()
2081 del_timer_sync(&gsm->t2_timer); in gsm_cleanup_mux()
2087 mutex_lock(&gsm->mutex); in gsm_cleanup_mux()
2089 if (gsm->dlci[i]) in gsm_cleanup_mux()
2090 gsm_dlci_release(gsm->dlci[i]); in gsm_cleanup_mux()
2091 mutex_unlock(&gsm->mutex); in gsm_cleanup_mux()
2093 list_for_each_entry_safe(txq, ntxq, &gsm->tx_list, list) in gsm_cleanup_mux()
2095 INIT_LIST_HEAD(&gsm->tx_list); in gsm_cleanup_mux()
2107 static int gsm_activate_mux(struct gsm_mux *gsm) in gsm_activate_mux() argument
2112 timer_setup(&gsm->t2_timer, gsm_control_retransmit, 0); in gsm_activate_mux()
2113 init_waitqueue_head(&gsm->event); in gsm_activate_mux()
2114 spin_lock_init(&gsm->control_lock); in gsm_activate_mux()
2115 spin_lock_init(&gsm->tx_lock); in gsm_activate_mux()
2117 if (gsm->encoding == 0) in gsm_activate_mux()
2118 gsm->receive = gsm0_receive; in gsm_activate_mux()
2120 gsm->receive = gsm1_receive; in gsm_activate_mux()
2121 gsm->error = gsm_error; in gsm_activate_mux()
2126 gsm->num = i; in gsm_activate_mux()
2127 gsm_mux[i] = gsm; in gsm_activate_mux()
2135 dlci = gsm_dlci_alloc(gsm, 0); in gsm_activate_mux()
2138 gsm->dead = 0; /* Tty opens are now permissible */ in gsm_activate_mux()
2148 static void gsm_free_mux(struct gsm_mux *gsm) in gsm_free_mux() argument
2150 kfree(gsm->txframe); in gsm_free_mux()
2151 kfree(gsm->buf); in gsm_free_mux()
2152 kfree(gsm); in gsm_free_mux()
2163 struct gsm_mux *gsm = container_of(ref, struct gsm_mux, ref); in gsm_free_muxr() local
2164 gsm_free_mux(gsm); in gsm_free_muxr()
2167 static inline void mux_get(struct gsm_mux *gsm) in mux_get() argument
2169 kref_get(&gsm->ref); in mux_get()
2172 static inline void mux_put(struct gsm_mux *gsm) in mux_put() argument
2174 kref_put(&gsm->ref, gsm_free_muxr); in mux_put()
2185 struct gsm_mux *gsm = kzalloc(sizeof(struct gsm_mux), GFP_KERNEL); in gsm_alloc_mux() local
2186 if (gsm == NULL) in gsm_alloc_mux()
2188 gsm->buf = kmalloc(MAX_MRU + 1, GFP_KERNEL); in gsm_alloc_mux()
2189 if (gsm->buf == NULL) { in gsm_alloc_mux()
2190 kfree(gsm); in gsm_alloc_mux()
2193 gsm->txframe = kmalloc(2 * MAX_MRU + 2, GFP_KERNEL); in gsm_alloc_mux()
2194 if (gsm->txframe == NULL) { in gsm_alloc_mux()
2195 kfree(gsm->buf); in gsm_alloc_mux()
2196 kfree(gsm); in gsm_alloc_mux()
2199 spin_lock_init(&gsm->lock); in gsm_alloc_mux()
2200 mutex_init(&gsm->mutex); in gsm_alloc_mux()
2201 kref_init(&gsm->ref); in gsm_alloc_mux()
2202 INIT_LIST_HEAD(&gsm->tx_list); in gsm_alloc_mux()
2204 gsm->t1 = T1; in gsm_alloc_mux()
2205 gsm->t2 = T2; in gsm_alloc_mux()
2206 gsm->n2 = N2; in gsm_alloc_mux()
2207 gsm->ftype = UIH; in gsm_alloc_mux()
2208 gsm->adaption = 1; in gsm_alloc_mux()
2209 gsm->encoding = 1; in gsm_alloc_mux()
2210 gsm->mru = 64; /* Default to encoding 1 so these should be 64 */ in gsm_alloc_mux()
2211 gsm->mtu = 64; in gsm_alloc_mux()
2212 gsm->dead = 1; /* Avoid early tty opens */ in gsm_alloc_mux()
2214 return gsm; in gsm_alloc_mux()
2227 static int gsmld_output(struct gsm_mux *gsm, u8 *data, int len) in gsmld_output() argument
2229 if (tty_write_room(gsm->tty) < len) { in gsmld_output()
2230 set_bit(TTY_DO_WRITE_WAKEUP, &gsm->tty->flags); in gsmld_output()
2236 gsm->tty->ops->write(gsm->tty, data, len); in gsmld_output()
2250 static int gsmld_attach_gsm(struct tty_struct *tty, struct gsm_mux *gsm) in gsmld_attach_gsm() argument
2254 gsm->tty = tty_kref_get(tty); in gsmld_attach_gsm()
2255 gsm->output = gsmld_output; in gsmld_attach_gsm()
2256 ret = gsm_activate_mux(gsm); in gsmld_attach_gsm()
2258 tty_kref_put(gsm->tty); in gsmld_attach_gsm()
2262 base = gsm->num << 6; /* Base for this MUX */ in gsmld_attach_gsm()
2278 static void gsmld_detach_gsm(struct tty_struct *tty, struct gsm_mux *gsm) in gsmld_detach_gsm() argument
2281 int base = gsm->num << 6; /* Base for this MUX */ in gsmld_detach_gsm()
2283 WARN_ON(tty != gsm->tty); in gsmld_detach_gsm()
2286 gsm_cleanup_mux(gsm); in gsmld_detach_gsm()
2287 tty_kref_put(gsm->tty); in gsmld_detach_gsm()
2288 gsm->tty = NULL; in gsmld_detach_gsm()
2294 struct gsm_mux *gsm = tty->disc_data; in gsmld_receive_buf() local
2309 gsm->receive(gsm, *dp); in gsmld_receive_buf()
2315 gsm->error(gsm, *dp, flags); in gsmld_receive_buf()
2352 struct gsm_mux *gsm = tty->disc_data; in gsmld_close() local
2354 gsmld_detach_gsm(tty, gsm); in gsmld_close()
2358 mux_put(gsm); in gsmld_close()
2373 struct gsm_mux *gsm; in gsmld_open() local
2380 gsm = gsm_alloc_mux(); in gsmld_open()
2381 if (gsm == NULL) in gsmld_open()
2384 tty->disc_data = gsm; in gsmld_open()
2388 gsm->encoding = 1; in gsmld_open()
2390 ret = gsmld_attach_gsm(tty, gsm); in gsmld_open()
2392 gsm_cleanup_mux(gsm); in gsmld_open()
2393 mux_put(gsm); in gsmld_open()
2409 struct gsm_mux *gsm = tty->disc_data; in gsmld_write_wakeup() local
2414 spin_lock_irqsave(&gsm->tx_lock, flags); in gsmld_write_wakeup()
2415 gsm_data_kick(gsm); in gsmld_write_wakeup()
2416 if (gsm->tx_bytes < TX_THRESH_LO) { in gsmld_write_wakeup()
2417 gsm_dlci_data_sweep(gsm); in gsmld_write_wakeup()
2419 spin_unlock_irqrestore(&gsm->tx_lock, flags); in gsmld_write_wakeup()
2485 struct gsm_mux *gsm = tty->disc_data; in gsmld_poll() local
2493 if (gsm->dead) in gsmld_poll()
2498 static int gsmld_config(struct tty_struct *tty, struct gsm_mux *gsm, in gsmld_config() argument
2523 if (c->t1 != 0 && c->t1 != gsm->t1) in gsmld_config()
2525 if (c->t2 != 0 && c->t2 != gsm->t2) in gsmld_config()
2527 if (c->encapsulation != gsm->encoding) in gsmld_config()
2529 if (c->adaption != gsm->adaption) in gsmld_config()
2532 if (c->initiator != gsm->initiator) in gsmld_config()
2534 if (c->mru != gsm->mru) in gsmld_config()
2536 if (c->mtu != gsm->mtu) in gsmld_config()
2547 ret = gsm_disconnect(gsm); in gsmld_config()
2553 gsm_cleanup_mux(gsm); in gsmld_config()
2555 gsm->initiator = c->initiator; in gsmld_config()
2556 gsm->mru = c->mru; in gsmld_config()
2557 gsm->mtu = c->mtu; in gsmld_config()
2558 gsm->encoding = c->encapsulation; in gsmld_config()
2559 gsm->adaption = c->adaption; in gsmld_config()
2560 gsm->n2 = c->n2; in gsmld_config()
2563 gsm->ftype = UIH; in gsmld_config()
2565 gsm->ftype = UI; in gsmld_config()
2568 gsm->t1 = c->t1; in gsmld_config()
2570 gsm->t2 = c->t2; in gsmld_config()
2575 gsm_activate_mux(gsm); in gsmld_config()
2576 if (gsm->initiator && need_close) in gsmld_config()
2577 gsm_dlci_begin_open(gsm->dlci[0]); in gsmld_config()
2585 struct gsm_mux *gsm = tty->disc_data; in gsmld_ioctl() local
2590 c.adaption = gsm->adaption; in gsmld_ioctl()
2591 c.encapsulation = gsm->encoding; in gsmld_ioctl()
2592 c.initiator = gsm->initiator; in gsmld_ioctl()
2593 c.t1 = gsm->t1; in gsmld_ioctl()
2594 c.t2 = gsm->t2; in gsmld_ioctl()
2596 c.n2 = gsm->n2; in gsmld_ioctl()
2597 if (gsm->ftype == UIH) in gsmld_ioctl()
2601 pr_debug("Ftype %d i %d\n", gsm->ftype, c.i); in gsmld_ioctl()
2602 c.mru = gsm->mru; in gsmld_ioctl()
2603 c.mtu = gsm->mtu; in gsmld_ioctl()
2611 return gsmld_config(tty, gsm, &c); in gsmld_ioctl()
2801 net->mtu = dlci->gsm->mtu; in gsm_create_network()
2803 net->max_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()
2874 struct gsm_mux *gsm = dlci->gsm; in gsm_carrier_raised() local
2886 if (gsm->encoding == 0 && gsm->dlci[0]->mode == DLCI_MODE_ADM && in gsm_carrier_raised()
2915 struct gsm_mux *gsm; in gsmtty_install() local
2931 gsm = gsm_mux[mux]; in gsmtty_install()
2932 if (gsm->dead) in gsmtty_install()
2938 mutex_lock(&gsm->mutex); in gsmtty_install()
2939 if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN) { in gsmtty_install()
2940 mutex_unlock(&gsm->mutex); in gsmtty_install()
2943 dlci = gsm->dlci[line]; in gsmtty_install()
2946 dlci = gsm_dlci_alloc(gsm, line); in gsmtty_install()
2949 mutex_unlock(&gsm->mutex); in gsmtty_install()
2956 mutex_unlock(&gsm->mutex); in gsmtty_install()
2961 dlci_get(gsm->dlci[0]); in gsmtty_install()
2962 mux_get(gsm); in gsmtty_install()
2964 mutex_unlock(&gsm->mutex); in gsmtty_install()
3185 struct gsm_mux *gsm = dlci->gsm; in gsmtty_cleanup() local
3188 dlci_put(gsm->dlci[0]); in gsmtty_cleanup()
3189 mux_put(gsm); in gsmtty_cleanup()