1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * n_gsm.c GSM 0710 tty multiplexor 4 * Copyright (c) 2009/10 Intel Corporation 5 * 6 * * THIS IS A DEVELOPMENT SNAPSHOT IT IS NOT A FINAL RELEASE * 7 * 8 * TO DO: 9 * Mostly done: ioctls for setting modes/timing 10 * Partly done: hooks so you can pull off frames to non tty devs 11 * Restart DLCI 0 when it closes ? 12 * Improve the tx engine 13 * Resolve tx side locking by adding a queue_head and routing 14 * all control traffic via it 15 * General tidy/document 16 * Review the locking/move to refcounts more (mux now moved to an 17 * alloc/free model ready) 18 * Use newest tty open/close port helpers and install hooks 19 * What to do about power functions ? 20 * Termios setting and negotiation 21 * Do we need a 'which mux are you' ioctl to correlate mux and tty sets 22 * 23 */ 24 25 #include <linux/types.h> 26 #include <linux/major.h> 27 #include <linux/errno.h> 28 #include <linux/signal.h> 29 #include <linux/fcntl.h> 30 #include <linux/sched/signal.h> 31 #include <linux/interrupt.h> 32 #include <linux/tty.h> 33 #include <linux/ctype.h> 34 #include <linux/mm.h> 35 #include <linux/string.h> 36 #include <linux/slab.h> 37 #include <linux/poll.h> 38 #include <linux/bitops.h> 39 #include <linux/file.h> 40 #include <linux/uaccess.h> 41 #include <linux/module.h> 42 #include <linux/timer.h> 43 #include <linux/tty_flip.h> 44 #include <linux/tty_driver.h> 45 #include <linux/serial.h> 46 #include <linux/kfifo.h> 47 #include <linux/skbuff.h> 48 #include <net/arp.h> 49 #include <linux/ip.h> 50 #include <linux/netdevice.h> 51 #include <linux/etherdevice.h> 52 #include <linux/gsmmux.h> 53 #include "tty.h" 54 55 static int debug; 56 module_param(debug, int, 0600); 57 58 /* Defaults: these are from the specification */ 59 60 #define T1 10 /* 100mS */ 61 #define T2 34 /* 333mS */ 62 #define N2 3 /* Retry 3 times */ 63 64 /* Use long timers for testing at low speed with debug on */ 65 #ifdef DEBUG_TIMING 66 #define T1 100 67 #define T2 200 68 #endif 69 70 /* 71 * Semi-arbitrary buffer size limits. 0710 is normally run with 32-64 byte 72 * limits so this is plenty 73 */ 74 #define MAX_MRU 1500 75 #define MAX_MTU 1500 76 /* SOF, ADDR, CTRL, LEN1, LEN2, ..., FCS, EOF */ 77 #define PROT_OVERHEAD 7 78 #define GSM_NET_TX_TIMEOUT (HZ*10) 79 80 /* 81 * struct gsm_mux_net - network interface 82 * 83 * Created when net interface is initialized. 84 */ 85 struct gsm_mux_net { 86 struct kref ref; 87 struct gsm_dlci *dlci; 88 }; 89 90 /* 91 * Each block of data we have queued to go out is in the form of 92 * a gsm_msg which holds everything we need in a link layer independent 93 * format 94 */ 95 96 struct gsm_msg { 97 struct list_head list; 98 u8 addr; /* DLCI address + flags */ 99 u8 ctrl; /* Control byte + flags */ 100 unsigned int len; /* Length of data block (can be zero) */ 101 unsigned char *data; /* Points into buffer but not at the start */ 102 unsigned char buffer[]; 103 }; 104 105 enum gsm_dlci_state { 106 DLCI_CLOSED, 107 DLCI_OPENING, /* Sending SABM not seen UA */ 108 DLCI_OPEN, /* SABM/UA complete */ 109 DLCI_CLOSING, /* Sending DISC not seen UA/DM */ 110 }; 111 112 enum gsm_dlci_mode { 113 DLCI_MODE_ABM, /* Normal Asynchronous Balanced Mode */ 114 DLCI_MODE_ADM, /* Asynchronous Disconnected Mode */ 115 }; 116 117 /* 118 * Each active data link has a gsm_dlci structure associated which ties 119 * the link layer to an optional tty (if the tty side is open). To avoid 120 * complexity right now these are only ever freed up when the mux is 121 * shut down. 122 * 123 * At the moment we don't free DLCI objects until the mux is torn down 124 * this avoid object life time issues but might be worth review later. 125 */ 126 127 struct gsm_dlci { 128 struct gsm_mux *gsm; 129 int addr; 130 enum gsm_dlci_state state; 131 struct mutex mutex; 132 133 /* Link layer */ 134 enum gsm_dlci_mode mode; 135 spinlock_t lock; /* Protects the internal state */ 136 struct timer_list t1; /* Retransmit timer for SABM and UA */ 137 int retries; 138 /* Uplink tty if active */ 139 struct tty_port port; /* The tty bound to this DLCI if there is one */ 140 #define TX_SIZE 4096 /* Must be power of 2. */ 141 struct kfifo fifo; /* Queue fifo for the DLCI */ 142 int adaption; /* Adaption layer in use */ 143 int prev_adaption; 144 u32 modem_rx; /* Our incoming virtual modem lines */ 145 u32 modem_tx; /* Our outgoing modem lines */ 146 bool dead; /* Refuse re-open */ 147 /* Flow control */ 148 bool throttled; /* Private copy of throttle state */ 149 bool constipated; /* Throttle status for outgoing */ 150 /* Packetised I/O */ 151 struct sk_buff *skb; /* Frame being sent */ 152 struct sk_buff_head skb_list; /* Queued frames */ 153 /* Data handling callback */ 154 void (*data)(struct gsm_dlci *dlci, const u8 *data, int len); 155 void (*prev_data)(struct gsm_dlci *dlci, const u8 *data, int len); 156 struct net_device *net; /* network interface, if created */ 157 }; 158 159 /* DLCI 0, 62/63 are special or reserved see gsmtty_open */ 160 161 #define NUM_DLCI 64 162 163 /* 164 * DLCI 0 is used to pass control blocks out of band of the data 165 * flow (and with a higher link priority). One command can be outstanding 166 * at a time and we use this structure to manage them. They are created 167 * and destroyed by the user context, and updated by the receive paths 168 * and timers 169 */ 170 171 struct gsm_control { 172 u8 cmd; /* Command we are issuing */ 173 u8 *data; /* Data for the command in case we retransmit */ 174 int len; /* Length of block for retransmission */ 175 int done; /* Done flag */ 176 int error; /* Error if any */ 177 }; 178 179 enum gsm_mux_state { 180 GSM_SEARCH, 181 GSM_START, 182 GSM_ADDRESS, 183 GSM_CONTROL, 184 GSM_LEN, 185 GSM_DATA, 186 GSM_FCS, 187 GSM_OVERRUN, 188 GSM_LEN0, 189 GSM_LEN1, 190 GSM_SSOF, 191 }; 192 193 /* 194 * Each GSM mux we have is represented by this structure. If we are 195 * operating as an ldisc then we use this structure as our ldisc 196 * state. We need to sort out lifetimes and locking with respect 197 * to the gsm mux array. For now we don't free DLCI objects that 198 * have been instantiated until the mux itself is terminated. 199 * 200 * To consider further: tty open versus mux shutdown. 201 */ 202 203 struct gsm_mux { 204 struct tty_struct *tty; /* The tty our ldisc is bound to */ 205 spinlock_t lock; 206 struct mutex mutex; 207 unsigned int num; 208 struct kref ref; 209 210 /* Events on the GSM channel */ 211 wait_queue_head_t event; 212 213 /* Bits for GSM mode decoding */ 214 215 /* Framing Layer */ 216 unsigned char *buf; 217 enum gsm_mux_state state; 218 unsigned int len; 219 unsigned int address; 220 unsigned int count; 221 bool escape; 222 int encoding; 223 u8 control; 224 u8 fcs; 225 u8 *txframe; /* TX framing buffer */ 226 227 /* Method for the receiver side */ 228 void (*receive)(struct gsm_mux *gsm, u8 ch); 229 230 /* Link Layer */ 231 unsigned int mru; 232 unsigned int mtu; 233 int initiator; /* Did we initiate connection */ 234 bool dead; /* Has the mux been shut down */ 235 struct gsm_dlci *dlci[NUM_DLCI]; 236 int old_c_iflag; /* termios c_iflag value before attach */ 237 bool constipated; /* Asked by remote to shut up */ 238 239 spinlock_t tx_lock; 240 unsigned int tx_bytes; /* TX data outstanding */ 241 #define TX_THRESH_HI 8192 242 #define TX_THRESH_LO 2048 243 struct list_head tx_list; /* Pending data packets */ 244 245 /* Control messages */ 246 struct timer_list t2_timer; /* Retransmit timer for commands */ 247 int cretries; /* Command retry counter */ 248 struct gsm_control *pending_cmd;/* Our current pending command */ 249 spinlock_t control_lock; /* Protects the pending command */ 250 251 /* Configuration */ 252 int adaption; /* 1 or 2 supported */ 253 u8 ftype; /* UI or UIH */ 254 int t1, t2; /* Timers in 1/100th of a sec */ 255 int n2; /* Retry count */ 256 257 /* Statistics (not currently exposed) */ 258 unsigned long bad_fcs; 259 unsigned long malformed; 260 unsigned long io_error; 261 unsigned long bad_size; 262 unsigned long unsupported; 263 }; 264 265 266 /* 267 * Mux objects - needed so that we can translate a tty index into the 268 * relevant mux and DLCI. 269 */ 270 271 #define MAX_MUX 4 /* 256 minors */ 272 static struct gsm_mux *gsm_mux[MAX_MUX]; /* GSM muxes */ 273 static DEFINE_SPINLOCK(gsm_mux_lock); 274 275 static struct tty_driver *gsm_tty_driver; 276 277 /* 278 * This section of the driver logic implements the GSM encodings 279 * both the basic and the 'advanced'. Reliable transport is not 280 * supported. 281 */ 282 283 #define CR 0x02 284 #define EA 0x01 285 #define PF 0x10 286 287 /* I is special: the rest are ..*/ 288 #define RR 0x01 289 #define UI 0x03 290 #define RNR 0x05 291 #define REJ 0x09 292 #define DM 0x0F 293 #define SABM 0x2F 294 #define DISC 0x43 295 #define UA 0x63 296 #define UIH 0xEF 297 298 /* Channel commands */ 299 #define CMD_NSC 0x09 300 #define CMD_TEST 0x11 301 #define CMD_PSC 0x21 302 #define CMD_RLS 0x29 303 #define CMD_FCOFF 0x31 304 #define CMD_PN 0x41 305 #define CMD_RPN 0x49 306 #define CMD_FCON 0x51 307 #define CMD_CLD 0x61 308 #define CMD_SNC 0x69 309 #define CMD_MSC 0x71 310 311 /* Virtual modem bits */ 312 #define MDM_FC 0x01 313 #define MDM_RTC 0x02 314 #define MDM_RTR 0x04 315 #define MDM_IC 0x20 316 #define MDM_DV 0x40 317 318 #define GSM0_SOF 0xF9 319 #define GSM1_SOF 0x7E 320 #define GSM1_ESCAPE 0x7D 321 #define GSM1_ESCAPE_BITS 0x20 322 #define XON 0x11 323 #define XOFF 0x13 324 #define ISO_IEC_646_MASK 0x7F 325 326 static const struct tty_port_operations gsm_port_ops; 327 328 /* 329 * CRC table for GSM 0710 330 */ 331 332 static const u8 gsm_fcs8[256] = { 333 0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 334 0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B, 335 0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69, 336 0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67, 337 0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D, 338 0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43, 339 0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51, 340 0x2A, 0xBB, 0xC9, 0x58, 0x2D, 0xBC, 0xCE, 0x5F, 341 0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05, 342 0x7E, 0xEF, 0x9D, 0x0C, 0x79, 0xE8, 0x9A, 0x0B, 343 0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19, 344 0x62, 0xF3, 0x81, 0x10, 0x65, 0xF4, 0x86, 0x17, 345 0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D, 346 0x46, 0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33, 347 0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21, 348 0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F, 349 0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04, 0x95, 350 0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B, 351 0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A, 0x18, 0x89, 352 0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87, 353 0xD8, 0x49, 0x3B, 0xAA, 0xDF, 0x4E, 0x3C, 0xAD, 354 0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3, 355 0xC4, 0x55, 0x27, 0xB6, 0xC3, 0x52, 0x20, 0xB1, 356 0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF, 357 0x90, 0x01, 0x73, 0xE2, 0x97, 0x06, 0x74, 0xE5, 358 0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB, 359 0x8C, 0x1D, 0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9, 360 0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7, 361 0xA8, 0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD, 362 0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3, 363 0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1, 364 0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF 365 }; 366 367 #define INIT_FCS 0xFF 368 #define GOOD_FCS 0xCF 369 370 static int gsmld_output(struct gsm_mux *gsm, u8 *data, int len); 371 static int gsm_modem_update(struct gsm_dlci *dlci, u8 brk); 372 373 /** 374 * gsm_fcs_add - update FCS 375 * @fcs: Current FCS 376 * @c: Next data 377 * 378 * Update the FCS to include c. Uses the algorithm in the specification 379 * notes. 380 */ 381 382 static inline u8 gsm_fcs_add(u8 fcs, u8 c) 383 { 384 return gsm_fcs8[fcs ^ c]; 385 } 386 387 /** 388 * gsm_fcs_add_block - update FCS for a block 389 * @fcs: Current FCS 390 * @c: buffer of data 391 * @len: length of buffer 392 * 393 * Update the FCS to include c. Uses the algorithm in the specification 394 * notes. 395 */ 396 397 static inline u8 gsm_fcs_add_block(u8 fcs, u8 *c, int len) 398 { 399 while (len--) 400 fcs = gsm_fcs8[fcs ^ *c++]; 401 return fcs; 402 } 403 404 /** 405 * gsm_read_ea - read a byte into an EA 406 * @val: variable holding value 407 * @c: byte going into the EA 408 * 409 * Processes one byte of an EA. Updates the passed variable 410 * and returns 1 if the EA is now completely read 411 */ 412 413 static int gsm_read_ea(unsigned int *val, u8 c) 414 { 415 /* Add the next 7 bits into the value */ 416 *val <<= 7; 417 *val |= c >> 1; 418 /* Was this the last byte of the EA 1 = yes*/ 419 return c & EA; 420 } 421 422 /** 423 * gsm_encode_modem - encode modem data bits 424 * @dlci: DLCI to encode from 425 * 426 * Returns the correct GSM encoded modem status bits (6 bit field) for 427 * the current status of the DLCI and attached tty object 428 */ 429 430 static u8 gsm_encode_modem(const struct gsm_dlci *dlci) 431 { 432 u8 modembits = 0; 433 /* FC is true flow control not modem bits */ 434 if (dlci->throttled) 435 modembits |= MDM_FC; 436 if (dlci->modem_tx & TIOCM_DTR) 437 modembits |= MDM_RTC; 438 if (dlci->modem_tx & TIOCM_RTS) 439 modembits |= MDM_RTR; 440 if (dlci->modem_tx & TIOCM_RI) 441 modembits |= MDM_IC; 442 if (dlci->modem_tx & TIOCM_CD || dlci->gsm->initiator) 443 modembits |= MDM_DV; 444 return modembits; 445 } 446 447 static void gsm_hex_dump_bytes(const char *fname, const u8 *data, 448 unsigned long len) 449 { 450 char *prefix; 451 452 if (!fname) { 453 print_hex_dump(KERN_INFO, "", DUMP_PREFIX_NONE, 16, 1, data, len, 454 true); 455 return; 456 } 457 458 prefix = kasprintf(GFP_KERNEL, "%s: ", fname); 459 if (!prefix) 460 return; 461 print_hex_dump(KERN_INFO, prefix, DUMP_PREFIX_OFFSET, 16, 1, data, len, 462 true); 463 kfree(prefix); 464 } 465 466 /** 467 * gsm_print_packet - display a frame for debug 468 * @hdr: header to print before decode 469 * @addr: address EA from the frame 470 * @cr: C/R bit seen as initiator 471 * @control: control including PF bit 472 * @data: following data bytes 473 * @dlen: length of data 474 * 475 * Displays a packet in human readable format for debugging purposes. The 476 * style is based on amateur radio LAP-B dump display. 477 */ 478 479 static void gsm_print_packet(const char *hdr, int addr, int cr, 480 u8 control, const u8 *data, int dlen) 481 { 482 if (!(debug & 1)) 483 return; 484 485 pr_info("%s %d) %c: ", hdr, addr, "RC"[cr]); 486 487 switch (control & ~PF) { 488 case SABM: 489 pr_cont("SABM"); 490 break; 491 case UA: 492 pr_cont("UA"); 493 break; 494 case DISC: 495 pr_cont("DISC"); 496 break; 497 case DM: 498 pr_cont("DM"); 499 break; 500 case UI: 501 pr_cont("UI"); 502 break; 503 case UIH: 504 pr_cont("UIH"); 505 break; 506 default: 507 if (!(control & 0x01)) { 508 pr_cont("I N(S)%d N(R)%d", 509 (control & 0x0E) >> 1, (control & 0xE0) >> 5); 510 } else switch (control & 0x0F) { 511 case RR: 512 pr_cont("RR(%d)", (control & 0xE0) >> 5); 513 break; 514 case RNR: 515 pr_cont("RNR(%d)", (control & 0xE0) >> 5); 516 break; 517 case REJ: 518 pr_cont("REJ(%d)", (control & 0xE0) >> 5); 519 break; 520 default: 521 pr_cont("[%02X]", control); 522 } 523 } 524 525 if (control & PF) 526 pr_cont("(P)"); 527 else 528 pr_cont("(F)"); 529 530 gsm_hex_dump_bytes(NULL, data, dlen); 531 } 532 533 534 /* 535 * Link level transmission side 536 */ 537 538 /** 539 * gsm_stuff_frame - bytestuff a packet 540 * @input: input buffer 541 * @output: output buffer 542 * @len: length of input 543 * 544 * Expand a buffer by bytestuffing it. The worst case size change 545 * is doubling and the caller is responsible for handing out 546 * suitable sized buffers. 547 */ 548 549 static int gsm_stuff_frame(const u8 *input, u8 *output, int len) 550 { 551 int olen = 0; 552 while (len--) { 553 if (*input == GSM1_SOF || *input == GSM1_ESCAPE 554 || (*input & ISO_IEC_646_MASK) == XON 555 || (*input & ISO_IEC_646_MASK) == XOFF) { 556 *output++ = GSM1_ESCAPE; 557 *output++ = *input++ ^ GSM1_ESCAPE_BITS; 558 olen++; 559 } else 560 *output++ = *input++; 561 olen++; 562 } 563 return olen; 564 } 565 566 /** 567 * gsm_send - send a control frame 568 * @gsm: our GSM mux 569 * @addr: address for control frame 570 * @cr: command/response bit seen as initiator 571 * @control: control byte including PF bit 572 * 573 * Format up and transmit a control frame. These do not go via the 574 * queueing logic as they should be transmitted ahead of data when 575 * they are needed. 576 * 577 * FIXME: Lock versus data TX path 578 */ 579 580 static void gsm_send(struct gsm_mux *gsm, int addr, int cr, int control) 581 { 582 int len; 583 u8 cbuf[10]; 584 u8 ibuf[3]; 585 int ocr; 586 587 /* toggle C/R coding if not initiator */ 588 ocr = cr ^ (gsm->initiator ? 0 : 1); 589 590 switch (gsm->encoding) { 591 case 0: 592 cbuf[0] = GSM0_SOF; 593 cbuf[1] = (addr << 2) | (ocr << 1) | EA; 594 cbuf[2] = control; 595 cbuf[3] = EA; /* Length of data = 0 */ 596 cbuf[4] = 0xFF - gsm_fcs_add_block(INIT_FCS, cbuf + 1, 3); 597 cbuf[5] = GSM0_SOF; 598 len = 6; 599 break; 600 case 1: 601 case 2: 602 /* Control frame + packing (but not frame stuffing) in mode 1 */ 603 ibuf[0] = (addr << 2) | (ocr << 1) | EA; 604 ibuf[1] = control; 605 ibuf[2] = 0xFF - gsm_fcs_add_block(INIT_FCS, ibuf, 2); 606 /* Stuffing may double the size worst case */ 607 len = gsm_stuff_frame(ibuf, cbuf + 1, 3); 608 /* Now add the SOF markers */ 609 cbuf[0] = GSM1_SOF; 610 cbuf[len + 1] = GSM1_SOF; 611 /* FIXME: we can omit the lead one in many cases */ 612 len += 2; 613 break; 614 default: 615 WARN_ON(1); 616 return; 617 } 618 gsmld_output(gsm, cbuf, len); 619 if (!gsm->initiator) { 620 cr = cr & gsm->initiator; 621 control = control & ~PF; 622 } 623 gsm_print_packet("-->", addr, cr, control, NULL, 0); 624 } 625 626 /** 627 * gsm_response - send a control response 628 * @gsm: our GSM mux 629 * @addr: address for control frame 630 * @control: control byte including PF bit 631 * 632 * Format up and transmit a link level response frame. 633 */ 634 635 static inline void gsm_response(struct gsm_mux *gsm, int addr, int control) 636 { 637 gsm_send(gsm, addr, 0, control); 638 } 639 640 /** 641 * gsm_command - send a control command 642 * @gsm: our GSM mux 643 * @addr: address for control frame 644 * @control: control byte including PF bit 645 * 646 * Format up and transmit a link level command frame. 647 */ 648 649 static inline void gsm_command(struct gsm_mux *gsm, int addr, int control) 650 { 651 gsm_send(gsm, addr, 1, control); 652 } 653 654 /* Data transmission */ 655 656 #define HDR_LEN 6 /* ADDR CTRL [LEN.2] DATA FCS */ 657 658 /** 659 * gsm_data_alloc - allocate data frame 660 * @gsm: GSM mux 661 * @addr: DLCI address 662 * @len: length excluding header and FCS 663 * @ctrl: control byte 664 * 665 * Allocate a new data buffer for sending frames with data. Space is left 666 * at the front for header bytes but that is treated as an implementation 667 * detail and not for the high level code to use 668 */ 669 670 static struct gsm_msg *gsm_data_alloc(struct gsm_mux *gsm, u8 addr, int len, 671 u8 ctrl) 672 { 673 struct gsm_msg *m = kmalloc(sizeof(struct gsm_msg) + len + HDR_LEN, 674 GFP_ATOMIC); 675 if (m == NULL) 676 return NULL; 677 m->data = m->buffer + HDR_LEN - 1; /* Allow for FCS */ 678 m->len = len; 679 m->addr = addr; 680 m->ctrl = ctrl; 681 INIT_LIST_HEAD(&m->list); 682 return m; 683 } 684 685 /** 686 * gsm_data_kick - poke the queue 687 * @gsm: GSM Mux 688 * @dlci: DLCI sending the data 689 * 690 * The tty device has called us to indicate that room has appeared in 691 * the transmit queue. Ram more data into the pipe if we have any 692 * If we have been flow-stopped by a CMD_FCOFF, then we can only 693 * send messages on DLCI0 until CMD_FCON 694 * 695 * FIXME: lock against link layer control transmissions 696 */ 697 698 static void gsm_data_kick(struct gsm_mux *gsm, struct gsm_dlci *dlci) 699 { 700 struct gsm_msg *msg, *nmsg; 701 int len; 702 703 list_for_each_entry_safe(msg, nmsg, &gsm->tx_list, list) { 704 if (gsm->constipated && msg->addr) 705 continue; 706 if (gsm->encoding != 0) { 707 gsm->txframe[0] = GSM1_SOF; 708 len = gsm_stuff_frame(msg->data, 709 gsm->txframe + 1, msg->len); 710 gsm->txframe[len + 1] = GSM1_SOF; 711 len += 2; 712 } else { 713 gsm->txframe[0] = GSM0_SOF; 714 memcpy(gsm->txframe + 1 , msg->data, msg->len); 715 gsm->txframe[msg->len + 1] = GSM0_SOF; 716 len = msg->len + 2; 717 } 718 719 if (debug & 4) 720 gsm_hex_dump_bytes(__func__, gsm->txframe, len); 721 if (gsmld_output(gsm, gsm->txframe, len) <= 0) 722 break; 723 /* FIXME: Can eliminate one SOF in many more cases */ 724 gsm->tx_bytes -= msg->len; 725 726 list_del(&msg->list); 727 kfree(msg); 728 729 if (dlci) { 730 tty_port_tty_wakeup(&dlci->port); 731 } else { 732 int i = 0; 733 734 for (i = 0; i < NUM_DLCI; i++) 735 if (gsm->dlci[i]) 736 tty_port_tty_wakeup(&gsm->dlci[i]->port); 737 } 738 } 739 } 740 741 /** 742 * __gsm_data_queue - queue a UI or UIH frame 743 * @dlci: DLCI sending the data 744 * @msg: message queued 745 * 746 * Add data to the transmit queue and try and get stuff moving 747 * out of the mux tty if not already doing so. The Caller must hold 748 * the gsm tx lock. 749 */ 750 751 static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg) 752 { 753 struct gsm_mux *gsm = dlci->gsm; 754 u8 *dp = msg->data; 755 u8 *fcs = dp + msg->len; 756 757 /* Fill in the header */ 758 if (gsm->encoding == 0) { 759 if (msg->len < 128) 760 *--dp = (msg->len << 1) | EA; 761 else { 762 *--dp = (msg->len >> 7); /* bits 7 - 15 */ 763 *--dp = (msg->len & 127) << 1; /* bits 0 - 6 */ 764 } 765 } 766 767 *--dp = msg->ctrl; 768 if (gsm->initiator) 769 *--dp = (msg->addr << 2) | CR | EA; 770 else 771 *--dp = (msg->addr << 2) | EA; 772 *fcs = gsm_fcs_add_block(INIT_FCS, dp , msg->data - dp); 773 /* Ugly protocol layering violation */ 774 if (msg->ctrl == UI || msg->ctrl == (UI|PF)) 775 *fcs = gsm_fcs_add_block(*fcs, msg->data, msg->len); 776 *fcs = 0xFF - *fcs; 777 778 gsm_print_packet("Q> ", msg->addr, gsm->initiator, msg->ctrl, 779 msg->data, msg->len); 780 781 /* Move the header back and adjust the length, also allow for the FCS 782 now tacked on the end */ 783 msg->len += (msg->data - dp) + 1; 784 msg->data = dp; 785 786 /* Add to the actual output queue */ 787 list_add_tail(&msg->list, &gsm->tx_list); 788 gsm->tx_bytes += msg->len; 789 gsm_data_kick(gsm, dlci); 790 } 791 792 /** 793 * gsm_data_queue - queue a UI or UIH frame 794 * @dlci: DLCI sending the data 795 * @msg: message queued 796 * 797 * Add data to the transmit queue and try and get stuff moving 798 * out of the mux tty if not already doing so. Take the 799 * the gsm tx lock and dlci lock. 800 */ 801 802 static void gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg) 803 { 804 unsigned long flags; 805 spin_lock_irqsave(&dlci->gsm->tx_lock, flags); 806 __gsm_data_queue(dlci, msg); 807 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags); 808 } 809 810 /** 811 * gsm_dlci_data_output - try and push data out of a DLCI 812 * @gsm: mux 813 * @dlci: the DLCI to pull data from 814 * 815 * Pull data from a DLCI and send it into the transmit queue if there 816 * is data. Keep to the MRU of the mux. This path handles the usual tty 817 * interface which is a byte stream with optional modem data. 818 * 819 * Caller must hold the tx_lock of the mux. 820 */ 821 822 static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci) 823 { 824 struct gsm_msg *msg; 825 u8 *dp; 826 int len, total_size, size; 827 int h = dlci->adaption - 1; 828 829 total_size = 0; 830 while (1) { 831 len = kfifo_len(&dlci->fifo); 832 if (len == 0) 833 return total_size; 834 835 /* MTU/MRU count only the data bits */ 836 if (len > gsm->mtu) 837 len = gsm->mtu; 838 839 size = len + h; 840 841 msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype); 842 /* FIXME: need a timer or something to kick this so it can't 843 get stuck with no work outstanding and no buffer free */ 844 if (msg == NULL) 845 return -ENOMEM; 846 dp = msg->data; 847 switch (dlci->adaption) { 848 case 1: /* Unstructured */ 849 break; 850 case 2: /* Unstructed with modem bits. 851 Always one byte as we never send inline break data */ 852 *dp++ = (gsm_encode_modem(dlci) << 1) | EA; 853 break; 854 } 855 WARN_ON(kfifo_out_locked(&dlci->fifo, dp , len, &dlci->lock) != len); 856 __gsm_data_queue(dlci, msg); 857 total_size += size; 858 } 859 /* Bytes of data we used up */ 860 return total_size; 861 } 862 863 /** 864 * gsm_dlci_data_output_framed - try and push data out of a DLCI 865 * @gsm: mux 866 * @dlci: the DLCI to pull data from 867 * 868 * Pull data from a DLCI and send it into the transmit queue if there 869 * is data. Keep to the MRU of the mux. This path handles framed data 870 * queued as skbuffs to the DLCI. 871 * 872 * Caller must hold the tx_lock of the mux. 873 */ 874 875 static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, 876 struct gsm_dlci *dlci) 877 { 878 struct gsm_msg *msg; 879 u8 *dp; 880 int len, size; 881 int last = 0, first = 0; 882 int overhead = 0; 883 884 /* One byte per frame is used for B/F flags */ 885 if (dlci->adaption == 4) 886 overhead = 1; 887 888 /* dlci->skb is locked by tx_lock */ 889 if (dlci->skb == NULL) { 890 dlci->skb = skb_dequeue_tail(&dlci->skb_list); 891 if (dlci->skb == NULL) 892 return 0; 893 first = 1; 894 } 895 len = dlci->skb->len + overhead; 896 897 /* MTU/MRU count only the data bits */ 898 if (len > gsm->mtu) { 899 if (dlci->adaption == 3) { 900 /* Over long frame, bin it */ 901 dev_kfree_skb_any(dlci->skb); 902 dlci->skb = NULL; 903 return 0; 904 } 905 len = gsm->mtu; 906 } else 907 last = 1; 908 909 size = len + overhead; 910 msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype); 911 912 /* FIXME: need a timer or something to kick this so it can't 913 get stuck with no work outstanding and no buffer free */ 914 if (msg == NULL) { 915 skb_queue_tail(&dlci->skb_list, dlci->skb); 916 dlci->skb = NULL; 917 return -ENOMEM; 918 } 919 dp = msg->data; 920 921 if (dlci->adaption == 4) { /* Interruptible framed (Packetised Data) */ 922 /* Flag byte to carry the start/end info */ 923 *dp++ = last << 7 | first << 6 | 1; /* EA */ 924 len--; 925 } 926 memcpy(dp, dlci->skb->data, len); 927 skb_pull(dlci->skb, len); 928 __gsm_data_queue(dlci, msg); 929 if (last) { 930 dev_kfree_skb_any(dlci->skb); 931 dlci->skb = NULL; 932 } 933 return size; 934 } 935 936 /** 937 * gsm_dlci_modem_output - try and push modem status out of a DLCI 938 * @gsm: mux 939 * @dlci: the DLCI to pull modem status from 940 * @brk: break signal 941 * 942 * Push an empty frame in to the transmit queue to update the modem status 943 * bits and to transmit an optional break. 944 * 945 * Caller must hold the tx_lock of the mux. 946 */ 947 948 static int gsm_dlci_modem_output(struct gsm_mux *gsm, struct gsm_dlci *dlci, 949 u8 brk) 950 { 951 u8 *dp = NULL; 952 struct gsm_msg *msg; 953 int size = 0; 954 955 /* for modem bits without break data */ 956 switch (dlci->adaption) { 957 case 1: /* Unstructured */ 958 break; 959 case 2: /* Unstructured with modem bits. */ 960 size++; 961 if (brk > 0) 962 size++; 963 break; 964 default: 965 pr_err("%s: unsupported adaption %d\n", __func__, 966 dlci->adaption); 967 return -EINVAL; 968 } 969 970 msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype); 971 if (!msg) { 972 pr_err("%s: gsm_data_alloc error", __func__); 973 return -ENOMEM; 974 } 975 dp = msg->data; 976 switch (dlci->adaption) { 977 case 1: /* Unstructured */ 978 break; 979 case 2: /* Unstructured with modem bits. */ 980 if (brk == 0) { 981 *dp++ = (gsm_encode_modem(dlci) << 1) | EA; 982 } else { 983 *dp++ = gsm_encode_modem(dlci) << 1; 984 *dp++ = (brk << 4) | 2 | EA; /* Length, Break, EA */ 985 } 986 break; 987 default: 988 /* Handled above */ 989 break; 990 } 991 992 __gsm_data_queue(dlci, msg); 993 return size; 994 } 995 996 /** 997 * gsm_dlci_data_sweep - look for data to send 998 * @gsm: the GSM mux 999 * 1000 * Sweep the GSM mux channels in priority order looking for ones with 1001 * data to send. We could do with optimising this scan a bit. We aim 1002 * to fill the queue totally or up to TX_THRESH_HI bytes. Once we hit 1003 * TX_THRESH_LO we get called again 1004 * 1005 * FIXME: We should round robin between groups and in theory you can 1006 * renegotiate DLCI priorities with optional stuff. Needs optimising. 1007 */ 1008 1009 static void gsm_dlci_data_sweep(struct gsm_mux *gsm) 1010 { 1011 int len; 1012 /* Priority ordering: We should do priority with RR of the groups */ 1013 int i = 1; 1014 1015 while (i < NUM_DLCI) { 1016 struct gsm_dlci *dlci; 1017 1018 if (gsm->tx_bytes > TX_THRESH_HI) 1019 break; 1020 dlci = gsm->dlci[i]; 1021 if (dlci == NULL || dlci->constipated) { 1022 i++; 1023 continue; 1024 } 1025 if (dlci->adaption < 3 && !dlci->net) 1026 len = gsm_dlci_data_output(gsm, dlci); 1027 else 1028 len = gsm_dlci_data_output_framed(gsm, dlci); 1029 if (len < 0) 1030 break; 1031 /* DLCI empty - try the next */ 1032 if (len == 0) 1033 i++; 1034 } 1035 } 1036 1037 /** 1038 * gsm_dlci_data_kick - transmit if possible 1039 * @dlci: DLCI to kick 1040 * 1041 * Transmit data from this DLCI if the queue is empty. We can't rely on 1042 * a tty wakeup except when we filled the pipe so we need to fire off 1043 * new data ourselves in other cases. 1044 */ 1045 1046 static void gsm_dlci_data_kick(struct gsm_dlci *dlci) 1047 { 1048 unsigned long flags; 1049 int sweep; 1050 1051 if (dlci->constipated) 1052 return; 1053 1054 spin_lock_irqsave(&dlci->gsm->tx_lock, flags); 1055 /* If we have nothing running then we need to fire up */ 1056 sweep = (dlci->gsm->tx_bytes < TX_THRESH_LO); 1057 if (dlci->gsm->tx_bytes == 0) { 1058 if (dlci->net) 1059 gsm_dlci_data_output_framed(dlci->gsm, dlci); 1060 else 1061 gsm_dlci_data_output(dlci->gsm, dlci); 1062 } 1063 if (sweep) 1064 gsm_dlci_data_sweep(dlci->gsm); 1065 spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags); 1066 } 1067 1068 /* 1069 * Control message processing 1070 */ 1071 1072 1073 /** 1074 * gsm_control_reply - send a response frame to a control 1075 * @gsm: gsm channel 1076 * @cmd: the command to use 1077 * @data: data to follow encoded info 1078 * @dlen: length of data 1079 * 1080 * Encode up and queue a UI/UIH frame containing our response. 1081 */ 1082 1083 static void gsm_control_reply(struct gsm_mux *gsm, int cmd, const u8 *data, 1084 int dlen) 1085 { 1086 struct gsm_msg *msg; 1087 msg = gsm_data_alloc(gsm, 0, dlen + 2, gsm->ftype); 1088 if (msg == NULL) 1089 return; 1090 msg->data[0] = (cmd & 0xFE) << 1 | EA; /* Clear C/R */ 1091 msg->data[1] = (dlen << 1) | EA; 1092 memcpy(msg->data + 2, data, dlen); 1093 gsm_data_queue(gsm->dlci[0], msg); 1094 } 1095 1096 /** 1097 * gsm_process_modem - process received modem status 1098 * @tty: virtual tty bound to the DLCI 1099 * @dlci: DLCI to affect 1100 * @modem: modem bits (full EA) 1101 * @slen: number of signal octets 1102 * 1103 * Used when a modem control message or line state inline in adaption 1104 * layer 2 is processed. Sort out the local modem state and throttles 1105 */ 1106 1107 static void gsm_process_modem(struct tty_struct *tty, struct gsm_dlci *dlci, 1108 u32 modem, int slen) 1109 { 1110 int mlines = 0; 1111 u8 brk = 0; 1112 int fc; 1113 1114 /* The modem status command can either contain one octet (V.24 signals) 1115 * or two octets (V.24 signals + break signals). This is specified in 1116 * section 5.4.6.3.7 of the 07.10 mux spec. 1117 */ 1118 1119 if (slen == 1) 1120 modem = modem & 0x7f; 1121 else { 1122 brk = modem & 0x7f; 1123 modem = (modem >> 7) & 0x7f; 1124 } 1125 1126 /* Flow control/ready to communicate */ 1127 fc = (modem & MDM_FC) || !(modem & MDM_RTR); 1128 if (fc && !dlci->constipated) { 1129 /* Need to throttle our output on this device */ 1130 dlci->constipated = true; 1131 } else if (!fc && dlci->constipated) { 1132 dlci->constipated = false; 1133 gsm_dlci_data_kick(dlci); 1134 } 1135 1136 /* Map modem bits */ 1137 if (modem & MDM_RTC) 1138 mlines |= TIOCM_DSR | TIOCM_DTR; 1139 if (modem & MDM_RTR) 1140 mlines |= TIOCM_RTS | TIOCM_CTS; 1141 if (modem & MDM_IC) 1142 mlines |= TIOCM_RI; 1143 if (modem & MDM_DV) 1144 mlines |= TIOCM_CD; 1145 1146 /* Carrier drop -> hangup */ 1147 if (tty) { 1148 if ((mlines & TIOCM_CD) == 0 && (dlci->modem_rx & TIOCM_CD)) 1149 if (!C_CLOCAL(tty)) 1150 tty_hangup(tty); 1151 } 1152 if (brk & 0x01) 1153 tty_insert_flip_char(&dlci->port, 0, TTY_BREAK); 1154 dlci->modem_rx = mlines; 1155 } 1156 1157 /** 1158 * gsm_control_modem - modem status received 1159 * @gsm: GSM channel 1160 * @data: data following command 1161 * @clen: command length 1162 * 1163 * We have received a modem status control message. This is used by 1164 * the GSM mux protocol to pass virtual modem line status and optionally 1165 * to indicate break signals. Unpack it, convert to Linux representation 1166 * and if need be stuff a break message down the tty. 1167 */ 1168 1169 static void gsm_control_modem(struct gsm_mux *gsm, const u8 *data, int clen) 1170 { 1171 unsigned int addr = 0; 1172 unsigned int modem = 0; 1173 struct gsm_dlci *dlci; 1174 int len = clen; 1175 int slen; 1176 const u8 *dp = data; 1177 struct tty_struct *tty; 1178 1179 while (gsm_read_ea(&addr, *dp++) == 0) { 1180 len--; 1181 if (len == 0) 1182 return; 1183 } 1184 /* Must be at least one byte following the EA */ 1185 len--; 1186 if (len <= 0) 1187 return; 1188 1189 addr >>= 1; 1190 /* Closed port, or invalid ? */ 1191 if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL) 1192 return; 1193 dlci = gsm->dlci[addr]; 1194 1195 slen = len; 1196 while (gsm_read_ea(&modem, *dp++) == 0) { 1197 len--; 1198 if (len == 0) 1199 return; 1200 } 1201 len--; 1202 tty = tty_port_tty_get(&dlci->port); 1203 gsm_process_modem(tty, dlci, modem, slen - len); 1204 if (tty) { 1205 tty_wakeup(tty); 1206 tty_kref_put(tty); 1207 } 1208 gsm_control_reply(gsm, CMD_MSC, data, clen); 1209 } 1210 1211 /** 1212 * gsm_control_rls - remote line status 1213 * @gsm: GSM channel 1214 * @data: data bytes 1215 * @clen: data length 1216 * 1217 * The modem sends us a two byte message on the control channel whenever 1218 * it wishes to send us an error state from the virtual link. Stuff 1219 * this into the uplink tty if present 1220 */ 1221 1222 static void gsm_control_rls(struct gsm_mux *gsm, const u8 *data, int clen) 1223 { 1224 struct tty_port *port; 1225 unsigned int addr = 0; 1226 u8 bits; 1227 int len = clen; 1228 const u8 *dp = data; 1229 1230 while (gsm_read_ea(&addr, *dp++) == 0) { 1231 len--; 1232 if (len == 0) 1233 return; 1234 } 1235 /* Must be at least one byte following ea */ 1236 len--; 1237 if (len <= 0) 1238 return; 1239 addr >>= 1; 1240 /* Closed port, or invalid ? */ 1241 if (addr == 0 || addr >= NUM_DLCI || gsm->dlci[addr] == NULL) 1242 return; 1243 /* No error ? */ 1244 bits = *dp; 1245 if ((bits & 1) == 0) 1246 return; 1247 1248 port = &gsm->dlci[addr]->port; 1249 1250 if (bits & 2) 1251 tty_insert_flip_char(port, 0, TTY_OVERRUN); 1252 if (bits & 4) 1253 tty_insert_flip_char(port, 0, TTY_PARITY); 1254 if (bits & 8) 1255 tty_insert_flip_char(port, 0, TTY_FRAME); 1256 1257 tty_flip_buffer_push(port); 1258 1259 gsm_control_reply(gsm, CMD_RLS, data, clen); 1260 } 1261 1262 static void gsm_dlci_begin_close(struct gsm_dlci *dlci); 1263 1264 /** 1265 * gsm_control_message - DLCI 0 control processing 1266 * @gsm: our GSM mux 1267 * @command: the command EA 1268 * @data: data beyond the command/length EAs 1269 * @clen: length 1270 * 1271 * Input processor for control messages from the other end of the link. 1272 * Processes the incoming request and queues a response frame or an 1273 * NSC response if not supported 1274 */ 1275 1276 static void gsm_control_message(struct gsm_mux *gsm, unsigned int command, 1277 const u8 *data, int clen) 1278 { 1279 u8 buf[1]; 1280 unsigned long flags; 1281 1282 switch (command) { 1283 case CMD_CLD: { 1284 struct gsm_dlci *dlci = gsm->dlci[0]; 1285 /* Modem wishes to close down */ 1286 if (dlci) { 1287 dlci->dead = true; 1288 gsm->dead = true; 1289 gsm_dlci_begin_close(dlci); 1290 } 1291 } 1292 break; 1293 case CMD_TEST: 1294 /* Modem wishes to test, reply with the data */ 1295 gsm_control_reply(gsm, CMD_TEST, data, clen); 1296 break; 1297 case CMD_FCON: 1298 /* Modem can accept data again */ 1299 gsm->constipated = false; 1300 gsm_control_reply(gsm, CMD_FCON, NULL, 0); 1301 /* Kick the link in case it is idling */ 1302 spin_lock_irqsave(&gsm->tx_lock, flags); 1303 gsm_data_kick(gsm, NULL); 1304 spin_unlock_irqrestore(&gsm->tx_lock, flags); 1305 break; 1306 case CMD_FCOFF: 1307 /* Modem wants us to STFU */ 1308 gsm->constipated = true; 1309 gsm_control_reply(gsm, CMD_FCOFF, NULL, 0); 1310 break; 1311 case CMD_MSC: 1312 /* Out of band modem line change indicator for a DLCI */ 1313 gsm_control_modem(gsm, data, clen); 1314 break; 1315 case CMD_RLS: 1316 /* Out of band error reception for a DLCI */ 1317 gsm_control_rls(gsm, data, clen); 1318 break; 1319 case CMD_PSC: 1320 /* Modem wishes to enter power saving state */ 1321 gsm_control_reply(gsm, CMD_PSC, NULL, 0); 1322 break; 1323 /* Optional unsupported commands */ 1324 case CMD_PN: /* Parameter negotiation */ 1325 case CMD_RPN: /* Remote port negotiation */ 1326 case CMD_SNC: /* Service negotiation command */ 1327 default: 1328 /* Reply to bad commands with an NSC */ 1329 buf[0] = command; 1330 gsm_control_reply(gsm, CMD_NSC, buf, 1); 1331 break; 1332 } 1333 } 1334 1335 /** 1336 * gsm_control_response - process a response to our control 1337 * @gsm: our GSM mux 1338 * @command: the command (response) EA 1339 * @data: data beyond the command/length EA 1340 * @clen: length 1341 * 1342 * Process a response to an outstanding command. We only allow a single 1343 * control message in flight so this is fairly easy. All the clean up 1344 * is done by the caller, we just update the fields, flag it as done 1345 * and return 1346 */ 1347 1348 static void gsm_control_response(struct gsm_mux *gsm, unsigned int command, 1349 const u8 *data, int clen) 1350 { 1351 struct gsm_control *ctrl; 1352 unsigned long flags; 1353 1354 spin_lock_irqsave(&gsm->control_lock, flags); 1355 1356 ctrl = gsm->pending_cmd; 1357 /* Does the reply match our command */ 1358 command |= 1; 1359 if (ctrl != NULL && (command == ctrl->cmd || command == CMD_NSC)) { 1360 /* Our command was replied to, kill the retry timer */ 1361 del_timer(&gsm->t2_timer); 1362 gsm->pending_cmd = NULL; 1363 /* Rejected by the other end */ 1364 if (command == CMD_NSC) 1365 ctrl->error = -EOPNOTSUPP; 1366 ctrl->done = 1; 1367 wake_up(&gsm->event); 1368 } 1369 spin_unlock_irqrestore(&gsm->control_lock, flags); 1370 } 1371 1372 /** 1373 * gsm_control_transmit - send control packet 1374 * @gsm: gsm mux 1375 * @ctrl: frame to send 1376 * 1377 * Send out a pending control command (called under control lock) 1378 */ 1379 1380 static void gsm_control_transmit(struct gsm_mux *gsm, struct gsm_control *ctrl) 1381 { 1382 struct gsm_msg *msg = gsm_data_alloc(gsm, 0, ctrl->len + 2, gsm->ftype); 1383 if (msg == NULL) 1384 return; 1385 msg->data[0] = (ctrl->cmd << 1) | CR | EA; /* command */ 1386 msg->data[1] = (ctrl->len << 1) | EA; 1387 memcpy(msg->data + 2, ctrl->data, ctrl->len); 1388 gsm_data_queue(gsm->dlci[0], msg); 1389 } 1390 1391 /** 1392 * gsm_control_retransmit - retransmit a control frame 1393 * @t: timer contained in our gsm object 1394 * 1395 * Called off the T2 timer expiry in order to retransmit control frames 1396 * that have been lost in the system somewhere. The control_lock protects 1397 * us from colliding with another sender or a receive completion event. 1398 * In that situation the timer may still occur in a small window but 1399 * gsm->pending_cmd will be NULL and we just let the timer expire. 1400 */ 1401 1402 static void gsm_control_retransmit(struct timer_list *t) 1403 { 1404 struct gsm_mux *gsm = from_timer(gsm, t, t2_timer); 1405 struct gsm_control *ctrl; 1406 unsigned long flags; 1407 spin_lock_irqsave(&gsm->control_lock, flags); 1408 ctrl = gsm->pending_cmd; 1409 if (ctrl) { 1410 if (gsm->cretries == 0) { 1411 gsm->pending_cmd = NULL; 1412 ctrl->error = -ETIMEDOUT; 1413 ctrl->done = 1; 1414 spin_unlock_irqrestore(&gsm->control_lock, flags); 1415 wake_up(&gsm->event); 1416 return; 1417 } 1418 gsm->cretries--; 1419 gsm_control_transmit(gsm, ctrl); 1420 mod_timer(&gsm->t2_timer, jiffies + gsm->t2 * HZ / 100); 1421 } 1422 spin_unlock_irqrestore(&gsm->control_lock, flags); 1423 } 1424 1425 /** 1426 * gsm_control_send - send a control frame on DLCI 0 1427 * @gsm: the GSM channel 1428 * @command: command to send including CR bit 1429 * @data: bytes of data (must be kmalloced) 1430 * @clen: length of the block to send 1431 * 1432 * Queue and dispatch a control command. Only one command can be 1433 * active at a time. In theory more can be outstanding but the matching 1434 * gets really complicated so for now stick to one outstanding. 1435 */ 1436 1437 static struct gsm_control *gsm_control_send(struct gsm_mux *gsm, 1438 unsigned int command, u8 *data, int clen) 1439 { 1440 struct gsm_control *ctrl = kzalloc(sizeof(struct gsm_control), 1441 GFP_KERNEL); 1442 unsigned long flags; 1443 if (ctrl == NULL) 1444 return NULL; 1445 retry: 1446 wait_event(gsm->event, gsm->pending_cmd == NULL); 1447 spin_lock_irqsave(&gsm->control_lock, flags); 1448 if (gsm->pending_cmd != NULL) { 1449 spin_unlock_irqrestore(&gsm->control_lock, flags); 1450 goto retry; 1451 } 1452 ctrl->cmd = command; 1453 ctrl->data = data; 1454 ctrl->len = clen; 1455 gsm->pending_cmd = ctrl; 1456 1457 /* If DLCI0 is in ADM mode skip retries, it won't respond */ 1458 if (gsm->dlci[0]->mode == DLCI_MODE_ADM) 1459 gsm->cretries = 0; 1460 else 1461 gsm->cretries = gsm->n2; 1462 1463 mod_timer(&gsm->t2_timer, jiffies + gsm->t2 * HZ / 100); 1464 gsm_control_transmit(gsm, ctrl); 1465 spin_unlock_irqrestore(&gsm->control_lock, flags); 1466 return ctrl; 1467 } 1468 1469 /** 1470 * gsm_control_wait - wait for a control to finish 1471 * @gsm: GSM mux 1472 * @control: control we are waiting on 1473 * 1474 * Waits for the control to complete or time out. Frees any used 1475 * resources and returns 0 for success, or an error if the remote 1476 * rejected or ignored the request. 1477 */ 1478 1479 static int gsm_control_wait(struct gsm_mux *gsm, struct gsm_control *control) 1480 { 1481 int err; 1482 wait_event(gsm->event, control->done == 1); 1483 err = control->error; 1484 kfree(control); 1485 return err; 1486 } 1487 1488 1489 /* 1490 * DLCI level handling: Needs krefs 1491 */ 1492 1493 /* 1494 * State transitions and timers 1495 */ 1496 1497 /** 1498 * gsm_dlci_close - a DLCI has closed 1499 * @dlci: DLCI that closed 1500 * 1501 * Perform processing when moving a DLCI into closed state. If there 1502 * is an attached tty this is hung up 1503 */ 1504 1505 static void gsm_dlci_close(struct gsm_dlci *dlci) 1506 { 1507 unsigned long flags; 1508 1509 del_timer(&dlci->t1); 1510 if (debug & 8) 1511 pr_debug("DLCI %d goes closed.\n", dlci->addr); 1512 dlci->state = DLCI_CLOSED; 1513 if (dlci->addr != 0) { 1514 tty_port_tty_hangup(&dlci->port, false); 1515 spin_lock_irqsave(&dlci->lock, flags); 1516 kfifo_reset(&dlci->fifo); 1517 spin_unlock_irqrestore(&dlci->lock, flags); 1518 /* Ensure that gsmtty_open() can return. */ 1519 tty_port_set_initialized(&dlci->port, 0); 1520 wake_up_interruptible(&dlci->port.open_wait); 1521 } else 1522 dlci->gsm->dead = true; 1523 wake_up(&dlci->gsm->event); 1524 /* A DLCI 0 close is a MUX termination so we need to kick that 1525 back to userspace somehow */ 1526 } 1527 1528 /** 1529 * gsm_dlci_open - a DLCI has opened 1530 * @dlci: DLCI that opened 1531 * 1532 * Perform processing when moving a DLCI into open state. 1533 */ 1534 1535 static void gsm_dlci_open(struct gsm_dlci *dlci) 1536 { 1537 /* Note that SABM UA .. SABM UA first UA lost can mean that we go 1538 open -> open */ 1539 del_timer(&dlci->t1); 1540 /* This will let a tty open continue */ 1541 dlci->state = DLCI_OPEN; 1542 if (debug & 8) 1543 pr_debug("DLCI %d goes open.\n", dlci->addr); 1544 /* Send current modem state */ 1545 if (dlci->addr) 1546 gsm_modem_update(dlci, 0); 1547 wake_up(&dlci->gsm->event); 1548 } 1549 1550 /** 1551 * gsm_dlci_t1 - T1 timer expiry 1552 * @t: timer contained in the DLCI that opened 1553 * 1554 * The T1 timer handles retransmits of control frames (essentially of 1555 * SABM and DISC). We resend the command until the retry count runs out 1556 * in which case an opening port goes back to closed and a closing port 1557 * is simply put into closed state (any further frames from the other 1558 * end will get a DM response) 1559 * 1560 * Some control dlci can stay in ADM mode with other dlci working just 1561 * fine. In that case we can just keep the control dlci open after the 1562 * DLCI_OPENING retries time out. 1563 */ 1564 1565 static void gsm_dlci_t1(struct timer_list *t) 1566 { 1567 struct gsm_dlci *dlci = from_timer(dlci, t, t1); 1568 struct gsm_mux *gsm = dlci->gsm; 1569 1570 switch (dlci->state) { 1571 case DLCI_OPENING: 1572 dlci->retries--; 1573 if (dlci->retries) { 1574 gsm_command(dlci->gsm, dlci->addr, SABM|PF); 1575 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); 1576 } else if (!dlci->addr && gsm->control == (DM | PF)) { 1577 if (debug & 8) 1578 pr_info("DLCI %d opening in ADM mode.\n", 1579 dlci->addr); 1580 dlci->mode = DLCI_MODE_ADM; 1581 gsm_dlci_open(dlci); 1582 } else { 1583 gsm_dlci_begin_close(dlci); /* prevent half open link */ 1584 } 1585 1586 break; 1587 case DLCI_CLOSING: 1588 dlci->retries--; 1589 if (dlci->retries) { 1590 gsm_command(dlci->gsm, dlci->addr, DISC|PF); 1591 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); 1592 } else 1593 gsm_dlci_close(dlci); 1594 break; 1595 default: 1596 pr_debug("%s: unhandled state: %d\n", __func__, dlci->state); 1597 break; 1598 } 1599 } 1600 1601 /** 1602 * gsm_dlci_begin_open - start channel open procedure 1603 * @dlci: DLCI to open 1604 * 1605 * Commence opening a DLCI from the Linux side. We issue SABM messages 1606 * to the modem which should then reply with a UA or ADM, at which point 1607 * we will move into open state. Opening is done asynchronously with retry 1608 * running off timers and the responses. 1609 */ 1610 1611 static void gsm_dlci_begin_open(struct gsm_dlci *dlci) 1612 { 1613 struct gsm_mux *gsm = dlci->gsm; 1614 if (dlci->state == DLCI_OPEN || dlci->state == DLCI_OPENING) 1615 return; 1616 dlci->retries = gsm->n2; 1617 dlci->state = DLCI_OPENING; 1618 gsm_command(dlci->gsm, dlci->addr, SABM|PF); 1619 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); 1620 } 1621 1622 /** 1623 * gsm_dlci_begin_close - start channel open procedure 1624 * @dlci: DLCI to open 1625 * 1626 * Commence closing a DLCI from the Linux side. We issue DISC messages 1627 * to the modem which should then reply with a UA, at which point we 1628 * will move into closed state. Closing is done asynchronously with retry 1629 * off timers. We may also receive a DM reply from the other end which 1630 * indicates the channel was already closed. 1631 */ 1632 1633 static void gsm_dlci_begin_close(struct gsm_dlci *dlci) 1634 { 1635 struct gsm_mux *gsm = dlci->gsm; 1636 if (dlci->state == DLCI_CLOSED || dlci->state == DLCI_CLOSING) 1637 return; 1638 dlci->retries = gsm->n2; 1639 dlci->state = DLCI_CLOSING; 1640 gsm_command(dlci->gsm, dlci->addr, DISC|PF); 1641 mod_timer(&dlci->t1, jiffies + gsm->t1 * HZ / 100); 1642 } 1643 1644 /** 1645 * gsm_dlci_data - data arrived 1646 * @dlci: channel 1647 * @data: block of bytes received 1648 * @clen: length of received block 1649 * 1650 * A UI or UIH frame has arrived which contains data for a channel 1651 * other than the control channel. If the relevant virtual tty is 1652 * open we shovel the bits down it, if not we drop them. 1653 */ 1654 1655 static void gsm_dlci_data(struct gsm_dlci *dlci, const u8 *data, int clen) 1656 { 1657 /* krefs .. */ 1658 struct tty_port *port = &dlci->port; 1659 struct tty_struct *tty; 1660 unsigned int modem = 0; 1661 int len = clen; 1662 int slen = 0; 1663 1664 if (debug & 16) 1665 pr_debug("%d bytes for tty\n", len); 1666 switch (dlci->adaption) { 1667 /* Unsupported types */ 1668 case 4: /* Packetised interruptible data */ 1669 break; 1670 case 3: /* Packetised uininterruptible voice/data */ 1671 break; 1672 case 2: /* Asynchronous serial with line state in each frame */ 1673 while (gsm_read_ea(&modem, *data++) == 0) { 1674 len--; 1675 slen++; 1676 if (len == 0) 1677 return; 1678 } 1679 len--; 1680 slen++; 1681 tty = tty_port_tty_get(port); 1682 if (tty) { 1683 gsm_process_modem(tty, dlci, modem, slen); 1684 tty_wakeup(tty); 1685 tty_kref_put(tty); 1686 } 1687 fallthrough; 1688 case 1: /* Line state will go via DLCI 0 controls only */ 1689 default: 1690 tty_insert_flip_string(port, data, len); 1691 tty_flip_buffer_push(port); 1692 } 1693 } 1694 1695 /** 1696 * gsm_dlci_command - data arrived on control channel 1697 * @dlci: channel 1698 * @data: block of bytes received 1699 * @len: length of received block 1700 * 1701 * A UI or UIH frame has arrived which contains data for DLCI 0 the 1702 * control channel. This should contain a command EA followed by 1703 * control data bytes. The command EA contains a command/response bit 1704 * and we divide up the work accordingly. 1705 */ 1706 1707 static void gsm_dlci_command(struct gsm_dlci *dlci, const u8 *data, int len) 1708 { 1709 /* See what command is involved */ 1710 unsigned int command = 0; 1711 while (len-- > 0) { 1712 if (gsm_read_ea(&command, *data++) == 1) { 1713 int clen = *data++; 1714 len--; 1715 /* FIXME: this is properly an EA */ 1716 clen >>= 1; 1717 /* Malformed command ? */ 1718 if (clen > len) 1719 return; 1720 if (command & 1) 1721 gsm_control_message(dlci->gsm, command, 1722 data, clen); 1723 else 1724 gsm_control_response(dlci->gsm, command, 1725 data, clen); 1726 return; 1727 } 1728 } 1729 } 1730 1731 /* 1732 * Allocate/Free DLCI channels 1733 */ 1734 1735 /** 1736 * gsm_dlci_alloc - allocate a DLCI 1737 * @gsm: GSM mux 1738 * @addr: address of the DLCI 1739 * 1740 * Allocate and install a new DLCI object into the GSM mux. 1741 * 1742 * FIXME: review locking races 1743 */ 1744 1745 static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr) 1746 { 1747 struct gsm_dlci *dlci = kzalloc(sizeof(struct gsm_dlci), GFP_ATOMIC); 1748 if (dlci == NULL) 1749 return NULL; 1750 spin_lock_init(&dlci->lock); 1751 mutex_init(&dlci->mutex); 1752 if (kfifo_alloc(&dlci->fifo, TX_SIZE, GFP_KERNEL) < 0) { 1753 kfree(dlci); 1754 return NULL; 1755 } 1756 1757 skb_queue_head_init(&dlci->skb_list); 1758 timer_setup(&dlci->t1, gsm_dlci_t1, 0); 1759 tty_port_init(&dlci->port); 1760 dlci->port.ops = &gsm_port_ops; 1761 dlci->gsm = gsm; 1762 dlci->addr = addr; 1763 dlci->adaption = gsm->adaption; 1764 dlci->state = DLCI_CLOSED; 1765 if (addr) 1766 dlci->data = gsm_dlci_data; 1767 else 1768 dlci->data = gsm_dlci_command; 1769 gsm->dlci[addr] = dlci; 1770 return dlci; 1771 } 1772 1773 /** 1774 * gsm_dlci_free - free DLCI 1775 * @port: tty port for DLCI to free 1776 * 1777 * Free up a DLCI. 1778 * 1779 * Can sleep. 1780 */ 1781 static void gsm_dlci_free(struct tty_port *port) 1782 { 1783 struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port); 1784 1785 del_timer_sync(&dlci->t1); 1786 dlci->gsm->dlci[dlci->addr] = NULL; 1787 kfifo_free(&dlci->fifo); 1788 while ((dlci->skb = skb_dequeue(&dlci->skb_list))) 1789 dev_kfree_skb(dlci->skb); 1790 kfree(dlci); 1791 } 1792 1793 static inline void dlci_get(struct gsm_dlci *dlci) 1794 { 1795 tty_port_get(&dlci->port); 1796 } 1797 1798 static inline void dlci_put(struct gsm_dlci *dlci) 1799 { 1800 tty_port_put(&dlci->port); 1801 } 1802 1803 static void gsm_destroy_network(struct gsm_dlci *dlci); 1804 1805 /** 1806 * gsm_dlci_release - release DLCI 1807 * @dlci: DLCI to destroy 1808 * 1809 * Release a DLCI. Actual free is deferred until either 1810 * mux is closed or tty is closed - whichever is last. 1811 * 1812 * Can sleep. 1813 */ 1814 static void gsm_dlci_release(struct gsm_dlci *dlci) 1815 { 1816 struct tty_struct *tty = tty_port_tty_get(&dlci->port); 1817 if (tty) { 1818 mutex_lock(&dlci->mutex); 1819 gsm_destroy_network(dlci); 1820 mutex_unlock(&dlci->mutex); 1821 1822 /* We cannot use tty_hangup() because in tty_kref_put() the tty 1823 * driver assumes that the hangup queue is free and reuses it to 1824 * queue release_one_tty() -> NULL pointer panic in 1825 * process_one_work(). 1826 */ 1827 tty_vhangup(tty); 1828 1829 tty_port_tty_set(&dlci->port, NULL); 1830 tty_kref_put(tty); 1831 } 1832 dlci->state = DLCI_CLOSED; 1833 dlci_put(dlci); 1834 } 1835 1836 /* 1837 * LAPBish link layer logic 1838 */ 1839 1840 /** 1841 * gsm_queue - a GSM frame is ready to process 1842 * @gsm: pointer to our gsm mux 1843 * 1844 * At this point in time a frame has arrived and been demangled from 1845 * the line encoding. All the differences between the encodings have 1846 * been handled below us and the frame is unpacked into the structures. 1847 * The fcs holds the header FCS but any data FCS must be added here. 1848 */ 1849 1850 static void gsm_queue(struct gsm_mux *gsm) 1851 { 1852 struct gsm_dlci *dlci; 1853 u8 cr; 1854 int address; 1855 1856 if (gsm->fcs != GOOD_FCS) { 1857 gsm->bad_fcs++; 1858 if (debug & 4) 1859 pr_debug("BAD FCS %02x\n", gsm->fcs); 1860 return; 1861 } 1862 address = gsm->address >> 1; 1863 if (address >= NUM_DLCI) 1864 goto invalid; 1865 1866 cr = gsm->address & 1; /* C/R bit */ 1867 cr ^= gsm->initiator ? 0 : 1; /* Flip so 1 always means command */ 1868 1869 gsm_print_packet("<--", address, cr, gsm->control, gsm->buf, gsm->len); 1870 1871 dlci = gsm->dlci[address]; 1872 1873 switch (gsm->control) { 1874 case SABM|PF: 1875 if (cr == 1) 1876 goto invalid; 1877 if (dlci == NULL) 1878 dlci = gsm_dlci_alloc(gsm, address); 1879 if (dlci == NULL) 1880 return; 1881 if (dlci->dead) 1882 gsm_response(gsm, address, DM|PF); 1883 else { 1884 gsm_response(gsm, address, UA|PF); 1885 gsm_dlci_open(dlci); 1886 } 1887 break; 1888 case DISC|PF: 1889 if (cr == 1) 1890 goto invalid; 1891 if (dlci == NULL || dlci->state == DLCI_CLOSED) { 1892 gsm_response(gsm, address, DM|PF); 1893 return; 1894 } 1895 /* Real close complete */ 1896 gsm_response(gsm, address, UA|PF); 1897 gsm_dlci_close(dlci); 1898 break; 1899 case UA|PF: 1900 if (cr == 0 || dlci == NULL) 1901 break; 1902 switch (dlci->state) { 1903 case DLCI_CLOSING: 1904 gsm_dlci_close(dlci); 1905 break; 1906 case DLCI_OPENING: 1907 gsm_dlci_open(dlci); 1908 break; 1909 default: 1910 pr_debug("%s: unhandled state: %d\n", __func__, 1911 dlci->state); 1912 break; 1913 } 1914 break; 1915 case DM: /* DM can be valid unsolicited */ 1916 case DM|PF: 1917 if (cr) 1918 goto invalid; 1919 if (dlci == NULL) 1920 return; 1921 gsm_dlci_close(dlci); 1922 break; 1923 case UI: 1924 case UI|PF: 1925 case UIH: 1926 case UIH|PF: 1927 if (dlci == NULL || dlci->state != DLCI_OPEN) { 1928 gsm_command(gsm, address, DM|PF); 1929 return; 1930 } 1931 dlci->data(dlci, gsm->buf, gsm->len); 1932 break; 1933 default: 1934 goto invalid; 1935 } 1936 return; 1937 invalid: 1938 gsm->malformed++; 1939 return; 1940 } 1941 1942 1943 /** 1944 * gsm0_receive - perform processing for non-transparency 1945 * @gsm: gsm data for this ldisc instance 1946 * @c: character 1947 * 1948 * Receive bytes in gsm mode 0 1949 */ 1950 1951 static void gsm0_receive(struct gsm_mux *gsm, unsigned char c) 1952 { 1953 unsigned int len; 1954 1955 switch (gsm->state) { 1956 case GSM_SEARCH: /* SOF marker */ 1957 if (c == GSM0_SOF) { 1958 gsm->state = GSM_ADDRESS; 1959 gsm->address = 0; 1960 gsm->len = 0; 1961 gsm->fcs = INIT_FCS; 1962 } 1963 break; 1964 case GSM_ADDRESS: /* Address EA */ 1965 gsm->fcs = gsm_fcs_add(gsm->fcs, c); 1966 if (gsm_read_ea(&gsm->address, c)) 1967 gsm->state = GSM_CONTROL; 1968 break; 1969 case GSM_CONTROL: /* Control Byte */ 1970 gsm->fcs = gsm_fcs_add(gsm->fcs, c); 1971 gsm->control = c; 1972 gsm->state = GSM_LEN0; 1973 break; 1974 case GSM_LEN0: /* Length EA */ 1975 gsm->fcs = gsm_fcs_add(gsm->fcs, c); 1976 if (gsm_read_ea(&gsm->len, c)) { 1977 if (gsm->len > gsm->mru) { 1978 gsm->bad_size++; 1979 gsm->state = GSM_SEARCH; 1980 break; 1981 } 1982 gsm->count = 0; 1983 if (!gsm->len) 1984 gsm->state = GSM_FCS; 1985 else 1986 gsm->state = GSM_DATA; 1987 break; 1988 } 1989 gsm->state = GSM_LEN1; 1990 break; 1991 case GSM_LEN1: 1992 gsm->fcs = gsm_fcs_add(gsm->fcs, c); 1993 len = c; 1994 gsm->len |= len << 7; 1995 if (gsm->len > gsm->mru) { 1996 gsm->bad_size++; 1997 gsm->state = GSM_SEARCH; 1998 break; 1999 } 2000 gsm->count = 0; 2001 if (!gsm->len) 2002 gsm->state = GSM_FCS; 2003 else 2004 gsm->state = GSM_DATA; 2005 break; 2006 case GSM_DATA: /* Data */ 2007 gsm->buf[gsm->count++] = c; 2008 if (gsm->count == gsm->len) { 2009 /* Calculate final FCS for UI frames over all data */ 2010 if ((gsm->control & ~PF) != UIH) { 2011 gsm->fcs = gsm_fcs_add_block(gsm->fcs, gsm->buf, 2012 gsm->count); 2013 } 2014 gsm->state = GSM_FCS; 2015 } 2016 break; 2017 case GSM_FCS: /* FCS follows the packet */ 2018 gsm->fcs = gsm_fcs_add(gsm->fcs, c); 2019 gsm->state = GSM_SSOF; 2020 break; 2021 case GSM_SSOF: 2022 gsm->state = GSM_SEARCH; 2023 if (c == GSM0_SOF) 2024 gsm_queue(gsm); 2025 else 2026 gsm->bad_size++; 2027 break; 2028 default: 2029 pr_debug("%s: unhandled state: %d\n", __func__, gsm->state); 2030 break; 2031 } 2032 } 2033 2034 /** 2035 * gsm1_receive - perform processing for non-transparency 2036 * @gsm: gsm data for this ldisc instance 2037 * @c: character 2038 * 2039 * Receive bytes in mode 1 (Advanced option) 2040 */ 2041 2042 static void gsm1_receive(struct gsm_mux *gsm, unsigned char c) 2043 { 2044 /* handle XON/XOFF */ 2045 if ((c & ISO_IEC_646_MASK) == XON) { 2046 gsm->constipated = true; 2047 return; 2048 } else if ((c & ISO_IEC_646_MASK) == XOFF) { 2049 gsm->constipated = false; 2050 /* Kick the link in case it is idling */ 2051 gsm_data_kick(gsm, NULL); 2052 return; 2053 } 2054 if (c == GSM1_SOF) { 2055 /* EOF is only valid in frame if we have got to the data state */ 2056 if (gsm->state == GSM_DATA) { 2057 if (gsm->count < 1) { 2058 /* Missing FSC */ 2059 gsm->malformed++; 2060 gsm->state = GSM_START; 2061 return; 2062 } 2063 /* Remove the FCS from data */ 2064 gsm->count--; 2065 if ((gsm->control & ~PF) != UIH) { 2066 /* Calculate final FCS for UI frames over all 2067 * data but FCS 2068 */ 2069 gsm->fcs = gsm_fcs_add_block(gsm->fcs, gsm->buf, 2070 gsm->count); 2071 } 2072 /* Add the FCS itself to test against GOOD_FCS */ 2073 gsm->fcs = gsm_fcs_add(gsm->fcs, gsm->buf[gsm->count]); 2074 gsm->len = gsm->count; 2075 gsm_queue(gsm); 2076 gsm->state = GSM_START; 2077 return; 2078 } 2079 /* Any partial frame was a runt so go back to start */ 2080 if (gsm->state != GSM_START) { 2081 if (gsm->state != GSM_SEARCH) 2082 gsm->malformed++; 2083 gsm->state = GSM_START; 2084 } 2085 /* A SOF in GSM_START means we are still reading idling or 2086 framing bytes */ 2087 return; 2088 } 2089 2090 if (c == GSM1_ESCAPE) { 2091 gsm->escape = true; 2092 return; 2093 } 2094 2095 /* Only an unescaped SOF gets us out of GSM search */ 2096 if (gsm->state == GSM_SEARCH) 2097 return; 2098 2099 if (gsm->escape) { 2100 c ^= GSM1_ESCAPE_BITS; 2101 gsm->escape = false; 2102 } 2103 switch (gsm->state) { 2104 case GSM_START: /* First byte after SOF */ 2105 gsm->address = 0; 2106 gsm->state = GSM_ADDRESS; 2107 gsm->fcs = INIT_FCS; 2108 fallthrough; 2109 case GSM_ADDRESS: /* Address continuation */ 2110 gsm->fcs = gsm_fcs_add(gsm->fcs, c); 2111 if (gsm_read_ea(&gsm->address, c)) 2112 gsm->state = GSM_CONTROL; 2113 break; 2114 case GSM_CONTROL: /* Control Byte */ 2115 gsm->fcs = gsm_fcs_add(gsm->fcs, c); 2116 gsm->control = c; 2117 gsm->count = 0; 2118 gsm->state = GSM_DATA; 2119 break; 2120 case GSM_DATA: /* Data */ 2121 if (gsm->count > gsm->mru) { /* Allow one for the FCS */ 2122 gsm->state = GSM_OVERRUN; 2123 gsm->bad_size++; 2124 } else 2125 gsm->buf[gsm->count++] = c; 2126 break; 2127 case GSM_OVERRUN: /* Over-long - eg a dropped SOF */ 2128 break; 2129 default: 2130 pr_debug("%s: unhandled state: %d\n", __func__, gsm->state); 2131 break; 2132 } 2133 } 2134 2135 /** 2136 * gsm_error - handle tty error 2137 * @gsm: ldisc data 2138 * 2139 * Handle an error in the receipt of data for a frame. Currently we just 2140 * go back to hunting for a SOF. 2141 * 2142 * FIXME: better diagnostics ? 2143 */ 2144 2145 static void gsm_error(struct gsm_mux *gsm) 2146 { 2147 gsm->state = GSM_SEARCH; 2148 gsm->io_error++; 2149 } 2150 2151 /** 2152 * gsm_cleanup_mux - generic GSM protocol cleanup 2153 * @gsm: our mux 2154 * @disc: disconnect link? 2155 * 2156 * Clean up the bits of the mux which are the same for all framing 2157 * protocols. Remove the mux from the mux table, stop all the timers 2158 * and then shut down each device hanging up the channels as we go. 2159 */ 2160 2161 static void gsm_cleanup_mux(struct gsm_mux *gsm, bool disc) 2162 { 2163 int i; 2164 struct gsm_dlci *dlci = gsm->dlci[0]; 2165 struct gsm_msg *txq, *ntxq; 2166 2167 gsm->dead = true; 2168 mutex_lock(&gsm->mutex); 2169 2170 if (dlci) { 2171 if (disc && dlci->state != DLCI_CLOSED) { 2172 gsm_dlci_begin_close(dlci); 2173 wait_event(gsm->event, dlci->state == DLCI_CLOSED); 2174 } 2175 dlci->dead = true; 2176 } 2177 2178 /* Finish outstanding timers, making sure they are done */ 2179 del_timer_sync(&gsm->t2_timer); 2180 2181 /* Free up any link layer users and finally the control channel */ 2182 for (i = NUM_DLCI - 1; i >= 0; i--) 2183 if (gsm->dlci[i]) 2184 gsm_dlci_release(gsm->dlci[i]); 2185 mutex_unlock(&gsm->mutex); 2186 /* Now wipe the queues */ 2187 tty_ldisc_flush(gsm->tty); 2188 list_for_each_entry_safe(txq, ntxq, &gsm->tx_list, list) 2189 kfree(txq); 2190 INIT_LIST_HEAD(&gsm->tx_list); 2191 } 2192 2193 /** 2194 * gsm_activate_mux - generic GSM setup 2195 * @gsm: our mux 2196 * 2197 * Set up the bits of the mux which are the same for all framing 2198 * protocols. Add the mux to the mux table so it can be opened and 2199 * finally kick off connecting to DLCI 0 on the modem. 2200 */ 2201 2202 static int gsm_activate_mux(struct gsm_mux *gsm) 2203 { 2204 struct gsm_dlci *dlci; 2205 2206 timer_setup(&gsm->t2_timer, gsm_control_retransmit, 0); 2207 init_waitqueue_head(&gsm->event); 2208 spin_lock_init(&gsm->control_lock); 2209 spin_lock_init(&gsm->tx_lock); 2210 2211 if (gsm->encoding == 0) 2212 gsm->receive = gsm0_receive; 2213 else 2214 gsm->receive = gsm1_receive; 2215 2216 dlci = gsm_dlci_alloc(gsm, 0); 2217 if (dlci == NULL) 2218 return -ENOMEM; 2219 gsm->dead = false; /* Tty opens are now permissible */ 2220 return 0; 2221 } 2222 2223 /** 2224 * gsm_free_mux - free up a mux 2225 * @gsm: mux to free 2226 * 2227 * Dispose of allocated resources for a dead mux 2228 */ 2229 static void gsm_free_mux(struct gsm_mux *gsm) 2230 { 2231 int i; 2232 2233 for (i = 0; i < MAX_MUX; i++) { 2234 if (gsm == gsm_mux[i]) { 2235 gsm_mux[i] = NULL; 2236 break; 2237 } 2238 } 2239 mutex_destroy(&gsm->mutex); 2240 kfree(gsm->txframe); 2241 kfree(gsm->buf); 2242 kfree(gsm); 2243 } 2244 2245 /** 2246 * gsm_free_muxr - free up a mux 2247 * @ref: kreference to the mux to free 2248 * 2249 * Dispose of allocated resources for a dead mux 2250 */ 2251 static void gsm_free_muxr(struct kref *ref) 2252 { 2253 struct gsm_mux *gsm = container_of(ref, struct gsm_mux, ref); 2254 gsm_free_mux(gsm); 2255 } 2256 2257 static inline void mux_get(struct gsm_mux *gsm) 2258 { 2259 unsigned long flags; 2260 2261 spin_lock_irqsave(&gsm_mux_lock, flags); 2262 kref_get(&gsm->ref); 2263 spin_unlock_irqrestore(&gsm_mux_lock, flags); 2264 } 2265 2266 static inline void mux_put(struct gsm_mux *gsm) 2267 { 2268 unsigned long flags; 2269 2270 spin_lock_irqsave(&gsm_mux_lock, flags); 2271 kref_put(&gsm->ref, gsm_free_muxr); 2272 spin_unlock_irqrestore(&gsm_mux_lock, flags); 2273 } 2274 2275 static inline unsigned int mux_num_to_base(struct gsm_mux *gsm) 2276 { 2277 return gsm->num * NUM_DLCI; 2278 } 2279 2280 static inline unsigned int mux_line_to_num(unsigned int line) 2281 { 2282 return line / NUM_DLCI; 2283 } 2284 2285 /** 2286 * gsm_alloc_mux - allocate a mux 2287 * 2288 * Creates a new mux ready for activation. 2289 */ 2290 2291 static struct gsm_mux *gsm_alloc_mux(void) 2292 { 2293 int i; 2294 struct gsm_mux *gsm = kzalloc(sizeof(struct gsm_mux), GFP_KERNEL); 2295 if (gsm == NULL) 2296 return NULL; 2297 gsm->buf = kmalloc(MAX_MRU + 1, GFP_KERNEL); 2298 if (gsm->buf == NULL) { 2299 kfree(gsm); 2300 return NULL; 2301 } 2302 gsm->txframe = kmalloc(2 * (MAX_MTU + PROT_OVERHEAD - 1), GFP_KERNEL); 2303 if (gsm->txframe == NULL) { 2304 kfree(gsm->buf); 2305 kfree(gsm); 2306 return NULL; 2307 } 2308 spin_lock_init(&gsm->lock); 2309 mutex_init(&gsm->mutex); 2310 kref_init(&gsm->ref); 2311 INIT_LIST_HEAD(&gsm->tx_list); 2312 2313 gsm->t1 = T1; 2314 gsm->t2 = T2; 2315 gsm->n2 = N2; 2316 gsm->ftype = UIH; 2317 gsm->adaption = 1; 2318 gsm->encoding = 1; 2319 gsm->mru = 64; /* Default to encoding 1 so these should be 64 */ 2320 gsm->mtu = 64; 2321 gsm->dead = true; /* Avoid early tty opens */ 2322 2323 /* Store the instance to the mux array or abort if no space is 2324 * available. 2325 */ 2326 spin_lock(&gsm_mux_lock); 2327 for (i = 0; i < MAX_MUX; i++) { 2328 if (!gsm_mux[i]) { 2329 gsm_mux[i] = gsm; 2330 gsm->num = i; 2331 break; 2332 } 2333 } 2334 spin_unlock(&gsm_mux_lock); 2335 if (i == MAX_MUX) { 2336 mutex_destroy(&gsm->mutex); 2337 kfree(gsm->txframe); 2338 kfree(gsm->buf); 2339 kfree(gsm); 2340 return NULL; 2341 } 2342 2343 return gsm; 2344 } 2345 2346 static void gsm_copy_config_values(struct gsm_mux *gsm, 2347 struct gsm_config *c) 2348 { 2349 memset(c, 0, sizeof(*c)); 2350 c->adaption = gsm->adaption; 2351 c->encapsulation = gsm->encoding; 2352 c->initiator = gsm->initiator; 2353 c->t1 = gsm->t1; 2354 c->t2 = gsm->t2; 2355 c->t3 = 0; /* Not supported */ 2356 c->n2 = gsm->n2; 2357 if (gsm->ftype == UIH) 2358 c->i = 1; 2359 else 2360 c->i = 2; 2361 pr_debug("Ftype %d i %d\n", gsm->ftype, c->i); 2362 c->mru = gsm->mru; 2363 c->mtu = gsm->mtu; 2364 c->k = 0; 2365 } 2366 2367 static int gsm_config(struct gsm_mux *gsm, struct gsm_config *c) 2368 { 2369 int ret = 0; 2370 int need_close = 0; 2371 int need_restart = 0; 2372 2373 /* Stuff we don't support yet - UI or I frame transport, windowing */ 2374 if ((c->adaption != 1 && c->adaption != 2) || c->k) 2375 return -EOPNOTSUPP; 2376 /* Check the MRU/MTU range looks sane */ 2377 if (c->mru > MAX_MRU || c->mtu > MAX_MTU || c->mru < 8 || c->mtu < 8) 2378 return -EINVAL; 2379 if (c->n2 > 255) 2380 return -EINVAL; 2381 if (c->encapsulation > 1) /* Basic, advanced, no I */ 2382 return -EINVAL; 2383 if (c->initiator > 1) 2384 return -EINVAL; 2385 if (c->i == 0 || c->i > 2) /* UIH and UI only */ 2386 return -EINVAL; 2387 /* 2388 * See what is needed for reconfiguration 2389 */ 2390 2391 /* Timing fields */ 2392 if (c->t1 != 0 && c->t1 != gsm->t1) 2393 need_restart = 1; 2394 if (c->t2 != 0 && c->t2 != gsm->t2) 2395 need_restart = 1; 2396 if (c->encapsulation != gsm->encoding) 2397 need_restart = 1; 2398 if (c->adaption != gsm->adaption) 2399 need_restart = 1; 2400 /* Requires care */ 2401 if (c->initiator != gsm->initiator) 2402 need_close = 1; 2403 if (c->mru != gsm->mru) 2404 need_restart = 1; 2405 if (c->mtu != gsm->mtu) 2406 need_restart = 1; 2407 2408 /* 2409 * Close down what is needed, restart and initiate the new 2410 * configuration. On the first time there is no DLCI[0] 2411 * and closing or cleaning up is not necessary. 2412 */ 2413 if (need_close || need_restart) 2414 gsm_cleanup_mux(gsm, true); 2415 2416 gsm->initiator = c->initiator; 2417 gsm->mru = c->mru; 2418 gsm->mtu = c->mtu; 2419 gsm->encoding = c->encapsulation; 2420 gsm->adaption = c->adaption; 2421 gsm->n2 = c->n2; 2422 2423 if (c->i == 1) 2424 gsm->ftype = UIH; 2425 else if (c->i == 2) 2426 gsm->ftype = UI; 2427 2428 if (c->t1) 2429 gsm->t1 = c->t1; 2430 if (c->t2) 2431 gsm->t2 = c->t2; 2432 2433 /* 2434 * FIXME: We need to separate activation/deactivation from adding 2435 * and removing from the mux array 2436 */ 2437 if (gsm->dead) { 2438 ret = gsm_activate_mux(gsm); 2439 if (ret) 2440 return ret; 2441 if (gsm->initiator) 2442 gsm_dlci_begin_open(gsm->dlci[0]); 2443 } 2444 return 0; 2445 } 2446 2447 /** 2448 * gsmld_output - write to link 2449 * @gsm: our mux 2450 * @data: bytes to output 2451 * @len: size 2452 * 2453 * Write a block of data from the GSM mux to the data channel. This 2454 * will eventually be serialized from above but at the moment isn't. 2455 */ 2456 2457 static int gsmld_output(struct gsm_mux *gsm, u8 *data, int len) 2458 { 2459 if (tty_write_room(gsm->tty) < len) { 2460 set_bit(TTY_DO_WRITE_WAKEUP, &gsm->tty->flags); 2461 return -ENOSPC; 2462 } 2463 if (debug & 4) 2464 gsm_hex_dump_bytes(__func__, data, len); 2465 return gsm->tty->ops->write(gsm->tty, data, len); 2466 } 2467 2468 /** 2469 * gsmld_attach_gsm - mode set up 2470 * @tty: our tty structure 2471 * @gsm: our mux 2472 * 2473 * Set up the MUX for basic mode and commence connecting to the 2474 * modem. Currently called from the line discipline set up but 2475 * will need moving to an ioctl path. 2476 */ 2477 2478 static int gsmld_attach_gsm(struct tty_struct *tty, struct gsm_mux *gsm) 2479 { 2480 unsigned int base; 2481 int ret, i; 2482 2483 gsm->tty = tty_kref_get(tty); 2484 /* Turn off tty XON/XOFF handling to handle it explicitly. */ 2485 gsm->old_c_iflag = tty->termios.c_iflag; 2486 tty->termios.c_iflag &= (IXON | IXOFF); 2487 ret = gsm_activate_mux(gsm); 2488 if (ret != 0) 2489 tty_kref_put(gsm->tty); 2490 else { 2491 /* Don't register device 0 - this is the control channel and not 2492 a usable tty interface */ 2493 base = mux_num_to_base(gsm); /* Base for this MUX */ 2494 for (i = 1; i < NUM_DLCI; i++) { 2495 struct device *dev; 2496 2497 dev = tty_register_device(gsm_tty_driver, 2498 base + i, NULL); 2499 if (IS_ERR(dev)) { 2500 for (i--; i >= 1; i--) 2501 tty_unregister_device(gsm_tty_driver, 2502 base + i); 2503 return PTR_ERR(dev); 2504 } 2505 } 2506 } 2507 return ret; 2508 } 2509 2510 2511 /** 2512 * gsmld_detach_gsm - stop doing 0710 mux 2513 * @tty: tty attached to the mux 2514 * @gsm: mux 2515 * 2516 * Shutdown and then clean up the resources used by the line discipline 2517 */ 2518 2519 static void gsmld_detach_gsm(struct tty_struct *tty, struct gsm_mux *gsm) 2520 { 2521 unsigned int base = mux_num_to_base(gsm); /* Base for this MUX */ 2522 int i; 2523 2524 WARN_ON(tty != gsm->tty); 2525 for (i = 1; i < NUM_DLCI; i++) 2526 tty_unregister_device(gsm_tty_driver, base + i); 2527 /* Restore tty XON/XOFF handling. */ 2528 gsm->tty->termios.c_iflag = gsm->old_c_iflag; 2529 tty_kref_put(gsm->tty); 2530 gsm->tty = NULL; 2531 } 2532 2533 static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp, 2534 const char *fp, int count) 2535 { 2536 struct gsm_mux *gsm = tty->disc_data; 2537 char flags = TTY_NORMAL; 2538 2539 if (debug & 4) 2540 gsm_hex_dump_bytes(__func__, cp, count); 2541 2542 for (; count; count--, cp++) { 2543 if (fp) 2544 flags = *fp++; 2545 switch (flags) { 2546 case TTY_NORMAL: 2547 gsm->receive(gsm, *cp); 2548 break; 2549 case TTY_OVERRUN: 2550 case TTY_BREAK: 2551 case TTY_PARITY: 2552 case TTY_FRAME: 2553 gsm_error(gsm); 2554 break; 2555 default: 2556 WARN_ONCE(1, "%s: unknown flag %d\n", 2557 tty_name(tty), flags); 2558 break; 2559 } 2560 } 2561 /* FASYNC if needed ? */ 2562 /* If clogged call tty_throttle(tty); */ 2563 } 2564 2565 /** 2566 * gsmld_flush_buffer - clean input queue 2567 * @tty: terminal device 2568 * 2569 * Flush the input buffer. Called when the line discipline is 2570 * being closed, when the tty layer wants the buffer flushed (eg 2571 * at hangup). 2572 */ 2573 2574 static void gsmld_flush_buffer(struct tty_struct *tty) 2575 { 2576 } 2577 2578 /** 2579 * gsmld_close - close the ldisc for this tty 2580 * @tty: device 2581 * 2582 * Called from the terminal layer when this line discipline is 2583 * being shut down, either because of a close or becsuse of a 2584 * discipline change. The function will not be called while other 2585 * ldisc methods are in progress. 2586 */ 2587 2588 static void gsmld_close(struct tty_struct *tty) 2589 { 2590 struct gsm_mux *gsm = tty->disc_data; 2591 2592 /* The ldisc locks and closes the port before calling our close. This 2593 * means we have no way to do a proper disconnect. We will not bother 2594 * to do one. 2595 */ 2596 gsm_cleanup_mux(gsm, false); 2597 2598 gsmld_detach_gsm(tty, gsm); 2599 2600 gsmld_flush_buffer(tty); 2601 /* Do other clean up here */ 2602 mux_put(gsm); 2603 } 2604 2605 /** 2606 * gsmld_open - open an ldisc 2607 * @tty: terminal to open 2608 * 2609 * Called when this line discipline is being attached to the 2610 * terminal device. Can sleep. Called serialized so that no 2611 * other events will occur in parallel. No further open will occur 2612 * until a close. 2613 */ 2614 2615 static int gsmld_open(struct tty_struct *tty) 2616 { 2617 struct gsm_mux *gsm; 2618 int ret; 2619 2620 if (tty->ops->write == NULL) 2621 return -EINVAL; 2622 2623 /* Attach our ldisc data */ 2624 gsm = gsm_alloc_mux(); 2625 if (gsm == NULL) 2626 return -ENOMEM; 2627 2628 tty->disc_data = gsm; 2629 tty->receive_room = 65536; 2630 2631 /* Attach the initial passive connection */ 2632 gsm->encoding = 1; 2633 2634 ret = gsmld_attach_gsm(tty, gsm); 2635 if (ret != 0) { 2636 gsm_cleanup_mux(gsm, false); 2637 mux_put(gsm); 2638 } 2639 return ret; 2640 } 2641 2642 /** 2643 * gsmld_write_wakeup - asynchronous I/O notifier 2644 * @tty: tty device 2645 * 2646 * Required for the ptys, serial driver etc. since processes 2647 * that attach themselves to the master and rely on ASYNC 2648 * IO must be woken up 2649 */ 2650 2651 static void gsmld_write_wakeup(struct tty_struct *tty) 2652 { 2653 struct gsm_mux *gsm = tty->disc_data; 2654 unsigned long flags; 2655 2656 /* Queue poll */ 2657 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); 2658 spin_lock_irqsave(&gsm->tx_lock, flags); 2659 gsm_data_kick(gsm, NULL); 2660 if (gsm->tx_bytes < TX_THRESH_LO) { 2661 gsm_dlci_data_sweep(gsm); 2662 } 2663 spin_unlock_irqrestore(&gsm->tx_lock, flags); 2664 } 2665 2666 /** 2667 * gsmld_read - read function for tty 2668 * @tty: tty device 2669 * @file: file object 2670 * @buf: userspace buffer pointer 2671 * @nr: size of I/O 2672 * @cookie: unused 2673 * @offset: unused 2674 * 2675 * Perform reads for the line discipline. We are guaranteed that the 2676 * line discipline will not be closed under us but we may get multiple 2677 * parallel readers and must handle this ourselves. We may also get 2678 * a hangup. Always called in user context, may sleep. 2679 * 2680 * This code must be sure never to sleep through a hangup. 2681 */ 2682 2683 static ssize_t gsmld_read(struct tty_struct *tty, struct file *file, 2684 unsigned char *buf, size_t nr, 2685 void **cookie, unsigned long offset) 2686 { 2687 return -EOPNOTSUPP; 2688 } 2689 2690 /** 2691 * gsmld_write - write function for tty 2692 * @tty: tty device 2693 * @file: file object 2694 * @buf: userspace buffer pointer 2695 * @nr: size of I/O 2696 * 2697 * Called when the owner of the device wants to send a frame 2698 * itself (or some other control data). The data is transferred 2699 * as-is and must be properly framed and checksummed as appropriate 2700 * by userspace. Frames are either sent whole or not at all as this 2701 * avoids pain user side. 2702 */ 2703 2704 static ssize_t gsmld_write(struct tty_struct *tty, struct file *file, 2705 const unsigned char *buf, size_t nr) 2706 { 2707 int space = tty_write_room(tty); 2708 if (space >= nr) 2709 return tty->ops->write(tty, buf, nr); 2710 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); 2711 return -ENOBUFS; 2712 } 2713 2714 /** 2715 * gsmld_poll - poll method for N_GSM0710 2716 * @tty: terminal device 2717 * @file: file accessing it 2718 * @wait: poll table 2719 * 2720 * Called when the line discipline is asked to poll() for data or 2721 * for special events. This code is not serialized with respect to 2722 * other events save open/close. 2723 * 2724 * This code must be sure never to sleep through a hangup. 2725 * Called without the kernel lock held - fine 2726 */ 2727 2728 static __poll_t gsmld_poll(struct tty_struct *tty, struct file *file, 2729 poll_table *wait) 2730 { 2731 __poll_t mask = 0; 2732 struct gsm_mux *gsm = tty->disc_data; 2733 2734 poll_wait(file, &tty->read_wait, wait); 2735 poll_wait(file, &tty->write_wait, wait); 2736 if (tty_hung_up_p(file)) 2737 mask |= EPOLLHUP; 2738 if (!tty_is_writelocked(tty) && tty_write_room(tty) > 0) 2739 mask |= EPOLLOUT | EPOLLWRNORM; 2740 if (gsm->dead) 2741 mask |= EPOLLHUP; 2742 return mask; 2743 } 2744 2745 static int gsmld_ioctl(struct tty_struct *tty, unsigned int cmd, 2746 unsigned long arg) 2747 { 2748 struct gsm_config c; 2749 struct gsm_mux *gsm = tty->disc_data; 2750 unsigned int base; 2751 2752 switch (cmd) { 2753 case GSMIOC_GETCONF: 2754 gsm_copy_config_values(gsm, &c); 2755 if (copy_to_user((void __user *)arg, &c, sizeof(c))) 2756 return -EFAULT; 2757 return 0; 2758 case GSMIOC_SETCONF: 2759 if (copy_from_user(&c, (void __user *)arg, sizeof(c))) 2760 return -EFAULT; 2761 return gsm_config(gsm, &c); 2762 case GSMIOC_GETFIRST: 2763 base = mux_num_to_base(gsm); 2764 return put_user(base + 1, (__u32 __user *)arg); 2765 default: 2766 return n_tty_ioctl_helper(tty, cmd, arg); 2767 } 2768 } 2769 2770 /* 2771 * Network interface 2772 * 2773 */ 2774 2775 static int gsm_mux_net_open(struct net_device *net) 2776 { 2777 pr_debug("%s called\n", __func__); 2778 netif_start_queue(net); 2779 return 0; 2780 } 2781 2782 static int gsm_mux_net_close(struct net_device *net) 2783 { 2784 netif_stop_queue(net); 2785 return 0; 2786 } 2787 2788 static void dlci_net_free(struct gsm_dlci *dlci) 2789 { 2790 if (!dlci->net) { 2791 WARN_ON(1); 2792 return; 2793 } 2794 dlci->adaption = dlci->prev_adaption; 2795 dlci->data = dlci->prev_data; 2796 free_netdev(dlci->net); 2797 dlci->net = NULL; 2798 } 2799 static void net_free(struct kref *ref) 2800 { 2801 struct gsm_mux_net *mux_net; 2802 struct gsm_dlci *dlci; 2803 2804 mux_net = container_of(ref, struct gsm_mux_net, ref); 2805 dlci = mux_net->dlci; 2806 2807 if (dlci->net) { 2808 unregister_netdev(dlci->net); 2809 dlci_net_free(dlci); 2810 } 2811 } 2812 2813 static inline void muxnet_get(struct gsm_mux_net *mux_net) 2814 { 2815 kref_get(&mux_net->ref); 2816 } 2817 2818 static inline void muxnet_put(struct gsm_mux_net *mux_net) 2819 { 2820 kref_put(&mux_net->ref, net_free); 2821 } 2822 2823 static netdev_tx_t gsm_mux_net_start_xmit(struct sk_buff *skb, 2824 struct net_device *net) 2825 { 2826 struct gsm_mux_net *mux_net = netdev_priv(net); 2827 struct gsm_dlci *dlci = mux_net->dlci; 2828 muxnet_get(mux_net); 2829 2830 skb_queue_head(&dlci->skb_list, skb); 2831 net->stats.tx_packets++; 2832 net->stats.tx_bytes += skb->len; 2833 gsm_dlci_data_kick(dlci); 2834 /* And tell the kernel when the last transmit started. */ 2835 netif_trans_update(net); 2836 muxnet_put(mux_net); 2837 return NETDEV_TX_OK; 2838 } 2839 2840 /* called when a packet did not ack after watchdogtimeout */ 2841 static void gsm_mux_net_tx_timeout(struct net_device *net, unsigned int txqueue) 2842 { 2843 /* Tell syslog we are hosed. */ 2844 dev_dbg(&net->dev, "Tx timed out.\n"); 2845 2846 /* Update statistics */ 2847 net->stats.tx_errors++; 2848 } 2849 2850 static void gsm_mux_rx_netchar(struct gsm_dlci *dlci, 2851 const unsigned char *in_buf, int size) 2852 { 2853 struct net_device *net = dlci->net; 2854 struct sk_buff *skb; 2855 struct gsm_mux_net *mux_net = netdev_priv(net); 2856 muxnet_get(mux_net); 2857 2858 /* Allocate an sk_buff */ 2859 skb = dev_alloc_skb(size + NET_IP_ALIGN); 2860 if (!skb) { 2861 /* We got no receive buffer. */ 2862 net->stats.rx_dropped++; 2863 muxnet_put(mux_net); 2864 return; 2865 } 2866 skb_reserve(skb, NET_IP_ALIGN); 2867 skb_put_data(skb, in_buf, size); 2868 2869 skb->dev = net; 2870 skb->protocol = htons(ETH_P_IP); 2871 2872 /* Ship it off to the kernel */ 2873 netif_rx(skb); 2874 2875 /* update out statistics */ 2876 net->stats.rx_packets++; 2877 net->stats.rx_bytes += size; 2878 muxnet_put(mux_net); 2879 return; 2880 } 2881 2882 static void gsm_mux_net_init(struct net_device *net) 2883 { 2884 static const struct net_device_ops gsm_netdev_ops = { 2885 .ndo_open = gsm_mux_net_open, 2886 .ndo_stop = gsm_mux_net_close, 2887 .ndo_start_xmit = gsm_mux_net_start_xmit, 2888 .ndo_tx_timeout = gsm_mux_net_tx_timeout, 2889 }; 2890 2891 net->netdev_ops = &gsm_netdev_ops; 2892 2893 /* fill in the other fields */ 2894 net->watchdog_timeo = GSM_NET_TX_TIMEOUT; 2895 net->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; 2896 net->type = ARPHRD_NONE; 2897 net->tx_queue_len = 10; 2898 } 2899 2900 2901 /* caller holds the dlci mutex */ 2902 static void gsm_destroy_network(struct gsm_dlci *dlci) 2903 { 2904 struct gsm_mux_net *mux_net; 2905 2906 pr_debug("destroy network interface\n"); 2907 if (!dlci->net) 2908 return; 2909 mux_net = netdev_priv(dlci->net); 2910 muxnet_put(mux_net); 2911 } 2912 2913 2914 /* caller holds the dlci mutex */ 2915 static int gsm_create_network(struct gsm_dlci *dlci, struct gsm_netconfig *nc) 2916 { 2917 char *netname; 2918 int retval = 0; 2919 struct net_device *net; 2920 struct gsm_mux_net *mux_net; 2921 2922 if (!capable(CAP_NET_ADMIN)) 2923 return -EPERM; 2924 2925 /* Already in a non tty mode */ 2926 if (dlci->adaption > 2) 2927 return -EBUSY; 2928 2929 if (nc->protocol != htons(ETH_P_IP)) 2930 return -EPROTONOSUPPORT; 2931 2932 if (nc->adaption != 3 && nc->adaption != 4) 2933 return -EPROTONOSUPPORT; 2934 2935 pr_debug("create network interface\n"); 2936 2937 netname = "gsm%d"; 2938 if (nc->if_name[0] != '\0') 2939 netname = nc->if_name; 2940 net = alloc_netdev(sizeof(struct gsm_mux_net), netname, 2941 NET_NAME_UNKNOWN, gsm_mux_net_init); 2942 if (!net) { 2943 pr_err("alloc_netdev failed\n"); 2944 return -ENOMEM; 2945 } 2946 net->mtu = dlci->gsm->mtu; 2947 net->min_mtu = 8; 2948 net->max_mtu = dlci->gsm->mtu; 2949 mux_net = netdev_priv(net); 2950 mux_net->dlci = dlci; 2951 kref_init(&mux_net->ref); 2952 strncpy(nc->if_name, net->name, IFNAMSIZ); /* return net name */ 2953 2954 /* reconfigure dlci for network */ 2955 dlci->prev_adaption = dlci->adaption; 2956 dlci->prev_data = dlci->data; 2957 dlci->adaption = nc->adaption; 2958 dlci->data = gsm_mux_rx_netchar; 2959 dlci->net = net; 2960 2961 pr_debug("register netdev\n"); 2962 retval = register_netdev(net); 2963 if (retval) { 2964 pr_err("network register fail %d\n", retval); 2965 dlci_net_free(dlci); 2966 return retval; 2967 } 2968 return net->ifindex; /* return network index */ 2969 } 2970 2971 /* Line discipline for real tty */ 2972 static struct tty_ldisc_ops tty_ldisc_packet = { 2973 .owner = THIS_MODULE, 2974 .num = N_GSM0710, 2975 .name = "n_gsm", 2976 .open = gsmld_open, 2977 .close = gsmld_close, 2978 .flush_buffer = gsmld_flush_buffer, 2979 .read = gsmld_read, 2980 .write = gsmld_write, 2981 .ioctl = gsmld_ioctl, 2982 .poll = gsmld_poll, 2983 .receive_buf = gsmld_receive_buf, 2984 .write_wakeup = gsmld_write_wakeup 2985 }; 2986 2987 /* 2988 * Virtual tty side 2989 */ 2990 2991 /** 2992 * gsm_modem_upd_via_data - send modem bits via convergence layer 2993 * @dlci: channel 2994 * @brk: break signal 2995 * 2996 * Send an empty frame to signal mobile state changes and to transmit the 2997 * break signal for adaption 2. 2998 */ 2999 3000 static void gsm_modem_upd_via_data(struct gsm_dlci *dlci, u8 brk) 3001 { 3002 struct gsm_mux *gsm = dlci->gsm; 3003 unsigned long flags; 3004 3005 if (dlci->state != DLCI_OPEN || dlci->adaption != 2) 3006 return; 3007 3008 spin_lock_irqsave(&gsm->tx_lock, flags); 3009 gsm_dlci_modem_output(gsm, dlci, brk); 3010 spin_unlock_irqrestore(&gsm->tx_lock, flags); 3011 } 3012 3013 /** 3014 * gsm_modem_upd_via_msc - send modem bits via control frame 3015 * @dlci: channel 3016 * @brk: break signal 3017 */ 3018 3019 static int gsm_modem_upd_via_msc(struct gsm_dlci *dlci, u8 brk) 3020 { 3021 u8 modembits[3]; 3022 struct gsm_control *ctrl; 3023 int len = 2; 3024 3025 if (dlci->gsm->encoding != 0) 3026 return 0; 3027 3028 modembits[0] = (dlci->addr << 2) | 2 | EA; /* DLCI, Valid, EA */ 3029 if (!brk) { 3030 modembits[1] = (gsm_encode_modem(dlci) << 1) | EA; 3031 } else { 3032 modembits[1] = gsm_encode_modem(dlci) << 1; 3033 modembits[2] = (brk << 4) | 2 | EA; /* Length, Break, EA */ 3034 len++; 3035 } 3036 ctrl = gsm_control_send(dlci->gsm, CMD_MSC, modembits, len); 3037 if (ctrl == NULL) 3038 return -ENOMEM; 3039 return gsm_control_wait(dlci->gsm, ctrl); 3040 } 3041 3042 /** 3043 * gsm_modem_update - send modem status line state 3044 * @dlci: channel 3045 * @brk: break signal 3046 */ 3047 3048 static int gsm_modem_update(struct gsm_dlci *dlci, u8 brk) 3049 { 3050 if (dlci->adaption == 2) { 3051 /* Send convergence layer type 2 empty data frame. */ 3052 gsm_modem_upd_via_data(dlci, brk); 3053 return 0; 3054 } else if (dlci->gsm->encoding == 0) { 3055 /* Send as MSC control message. */ 3056 return gsm_modem_upd_via_msc(dlci, brk); 3057 } 3058 3059 /* Modem status lines are not supported. */ 3060 return -EPROTONOSUPPORT; 3061 } 3062 3063 static int gsm_carrier_raised(struct tty_port *port) 3064 { 3065 struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port); 3066 struct gsm_mux *gsm = dlci->gsm; 3067 3068 /* Not yet open so no carrier info */ 3069 if (dlci->state != DLCI_OPEN) 3070 return 0; 3071 if (debug & 2) 3072 return 1; 3073 3074 /* 3075 * Basic mode with control channel in ADM mode may not respond 3076 * to CMD_MSC at all and modem_rx is empty. 3077 */ 3078 if (gsm->encoding == 0 && gsm->dlci[0]->mode == DLCI_MODE_ADM && 3079 !dlci->modem_rx) 3080 return 1; 3081 3082 return dlci->modem_rx & TIOCM_CD; 3083 } 3084 3085 static void gsm_dtr_rts(struct tty_port *port, int onoff) 3086 { 3087 struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port); 3088 unsigned int modem_tx = dlci->modem_tx; 3089 if (onoff) 3090 modem_tx |= TIOCM_DTR | TIOCM_RTS; 3091 else 3092 modem_tx &= ~(TIOCM_DTR | TIOCM_RTS); 3093 if (modem_tx != dlci->modem_tx) { 3094 dlci->modem_tx = modem_tx; 3095 gsm_modem_update(dlci, 0); 3096 } 3097 } 3098 3099 static const struct tty_port_operations gsm_port_ops = { 3100 .carrier_raised = gsm_carrier_raised, 3101 .dtr_rts = gsm_dtr_rts, 3102 .destruct = gsm_dlci_free, 3103 }; 3104 3105 static int gsmtty_install(struct tty_driver *driver, struct tty_struct *tty) 3106 { 3107 struct gsm_mux *gsm; 3108 struct gsm_dlci *dlci; 3109 unsigned int line = tty->index; 3110 unsigned int mux = mux_line_to_num(line); 3111 bool alloc = false; 3112 int ret; 3113 3114 line = line & 0x3F; 3115 3116 if (mux >= MAX_MUX) 3117 return -ENXIO; 3118 /* FIXME: we need to lock gsm_mux for lifetimes of ttys eventually */ 3119 if (gsm_mux[mux] == NULL) 3120 return -EUNATCH; 3121 if (line == 0 || line > 61) /* 62/63 reserved */ 3122 return -ECHRNG; 3123 gsm = gsm_mux[mux]; 3124 if (gsm->dead) 3125 return -EL2HLT; 3126 /* If DLCI 0 is not yet fully open return an error. 3127 This is ok from a locking 3128 perspective as we don't have to worry about this 3129 if DLCI0 is lost */ 3130 mutex_lock(&gsm->mutex); 3131 if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN) { 3132 mutex_unlock(&gsm->mutex); 3133 return -EL2NSYNC; 3134 } 3135 dlci = gsm->dlci[line]; 3136 if (dlci == NULL) { 3137 alloc = true; 3138 dlci = gsm_dlci_alloc(gsm, line); 3139 } 3140 if (dlci == NULL) { 3141 mutex_unlock(&gsm->mutex); 3142 return -ENOMEM; 3143 } 3144 ret = tty_port_install(&dlci->port, driver, tty); 3145 if (ret) { 3146 if (alloc) 3147 dlci_put(dlci); 3148 mutex_unlock(&gsm->mutex); 3149 return ret; 3150 } 3151 3152 dlci_get(dlci); 3153 dlci_get(gsm->dlci[0]); 3154 mux_get(gsm); 3155 tty->driver_data = dlci; 3156 mutex_unlock(&gsm->mutex); 3157 3158 return 0; 3159 } 3160 3161 static int gsmtty_open(struct tty_struct *tty, struct file *filp) 3162 { 3163 struct gsm_dlci *dlci = tty->driver_data; 3164 struct tty_port *port = &dlci->port; 3165 struct gsm_mux *gsm = dlci->gsm; 3166 3167 port->count++; 3168 tty_port_tty_set(port, tty); 3169 3170 dlci->modem_rx = 0; 3171 /* We could in theory open and close before we wait - eg if we get 3172 a DM straight back. This is ok as that will have caused a hangup */ 3173 tty_port_set_initialized(port, 1); 3174 /* Start sending off SABM messages */ 3175 if (gsm->initiator) 3176 gsm_dlci_begin_open(dlci); 3177 /* And wait for virtual carrier */ 3178 return tty_port_block_til_ready(port, tty, filp); 3179 } 3180 3181 static void gsmtty_close(struct tty_struct *tty, struct file *filp) 3182 { 3183 struct gsm_dlci *dlci = tty->driver_data; 3184 3185 if (dlci == NULL) 3186 return; 3187 if (dlci->state == DLCI_CLOSED) 3188 return; 3189 mutex_lock(&dlci->mutex); 3190 gsm_destroy_network(dlci); 3191 mutex_unlock(&dlci->mutex); 3192 if (tty_port_close_start(&dlci->port, tty, filp) == 0) 3193 return; 3194 gsm_dlci_begin_close(dlci); 3195 if (tty_port_initialized(&dlci->port) && C_HUPCL(tty)) 3196 tty_port_lower_dtr_rts(&dlci->port); 3197 tty_port_close_end(&dlci->port, tty); 3198 tty_port_tty_set(&dlci->port, NULL); 3199 return; 3200 } 3201 3202 static void gsmtty_hangup(struct tty_struct *tty) 3203 { 3204 struct gsm_dlci *dlci = tty->driver_data; 3205 if (dlci->state == DLCI_CLOSED) 3206 return; 3207 tty_port_hangup(&dlci->port); 3208 gsm_dlci_begin_close(dlci); 3209 } 3210 3211 static int gsmtty_write(struct tty_struct *tty, const unsigned char *buf, 3212 int len) 3213 { 3214 int sent; 3215 struct gsm_dlci *dlci = tty->driver_data; 3216 if (dlci->state == DLCI_CLOSED) 3217 return -EINVAL; 3218 /* Stuff the bytes into the fifo queue */ 3219 sent = kfifo_in_locked(&dlci->fifo, buf, len, &dlci->lock); 3220 /* Need to kick the channel */ 3221 gsm_dlci_data_kick(dlci); 3222 return sent; 3223 } 3224 3225 static unsigned int gsmtty_write_room(struct tty_struct *tty) 3226 { 3227 struct gsm_dlci *dlci = tty->driver_data; 3228 if (dlci->state == DLCI_CLOSED) 3229 return 0; 3230 return kfifo_avail(&dlci->fifo); 3231 } 3232 3233 static unsigned int gsmtty_chars_in_buffer(struct tty_struct *tty) 3234 { 3235 struct gsm_dlci *dlci = tty->driver_data; 3236 if (dlci->state == DLCI_CLOSED) 3237 return 0; 3238 return kfifo_len(&dlci->fifo); 3239 } 3240 3241 static void gsmtty_flush_buffer(struct tty_struct *tty) 3242 { 3243 struct gsm_dlci *dlci = tty->driver_data; 3244 unsigned long flags; 3245 3246 if (dlci->state == DLCI_CLOSED) 3247 return; 3248 /* Caution needed: If we implement reliable transport classes 3249 then the data being transmitted can't simply be junked once 3250 it has first hit the stack. Until then we can just blow it 3251 away */ 3252 spin_lock_irqsave(&dlci->lock, flags); 3253 kfifo_reset(&dlci->fifo); 3254 spin_unlock_irqrestore(&dlci->lock, flags); 3255 /* Need to unhook this DLCI from the transmit queue logic */ 3256 } 3257 3258 static void gsmtty_wait_until_sent(struct tty_struct *tty, int timeout) 3259 { 3260 /* The FIFO handles the queue so the kernel will do the right 3261 thing waiting on chars_in_buffer before calling us. No work 3262 to do here */ 3263 } 3264 3265 static int gsmtty_tiocmget(struct tty_struct *tty) 3266 { 3267 struct gsm_dlci *dlci = tty->driver_data; 3268 if (dlci->state == DLCI_CLOSED) 3269 return -EINVAL; 3270 return dlci->modem_rx; 3271 } 3272 3273 static int gsmtty_tiocmset(struct tty_struct *tty, 3274 unsigned int set, unsigned int clear) 3275 { 3276 struct gsm_dlci *dlci = tty->driver_data; 3277 unsigned int modem_tx = dlci->modem_tx; 3278 3279 if (dlci->state == DLCI_CLOSED) 3280 return -EINVAL; 3281 modem_tx &= ~clear; 3282 modem_tx |= set; 3283 3284 if (modem_tx != dlci->modem_tx) { 3285 dlci->modem_tx = modem_tx; 3286 return gsm_modem_update(dlci, 0); 3287 } 3288 return 0; 3289 } 3290 3291 3292 static int gsmtty_ioctl(struct tty_struct *tty, 3293 unsigned int cmd, unsigned long arg) 3294 { 3295 struct gsm_dlci *dlci = tty->driver_data; 3296 struct gsm_netconfig nc; 3297 int index; 3298 3299 if (dlci->state == DLCI_CLOSED) 3300 return -EINVAL; 3301 switch (cmd) { 3302 case GSMIOC_ENABLE_NET: 3303 if (copy_from_user(&nc, (void __user *)arg, sizeof(nc))) 3304 return -EFAULT; 3305 nc.if_name[IFNAMSIZ-1] = '\0'; 3306 /* return net interface index or error code */ 3307 mutex_lock(&dlci->mutex); 3308 index = gsm_create_network(dlci, &nc); 3309 mutex_unlock(&dlci->mutex); 3310 if (copy_to_user((void __user *)arg, &nc, sizeof(nc))) 3311 return -EFAULT; 3312 return index; 3313 case GSMIOC_DISABLE_NET: 3314 if (!capable(CAP_NET_ADMIN)) 3315 return -EPERM; 3316 mutex_lock(&dlci->mutex); 3317 gsm_destroy_network(dlci); 3318 mutex_unlock(&dlci->mutex); 3319 return 0; 3320 default: 3321 return -ENOIOCTLCMD; 3322 } 3323 } 3324 3325 static void gsmtty_set_termios(struct tty_struct *tty, struct ktermios *old) 3326 { 3327 struct gsm_dlci *dlci = tty->driver_data; 3328 if (dlci->state == DLCI_CLOSED) 3329 return; 3330 /* For the moment its fixed. In actual fact the speed information 3331 for the virtual channel can be propogated in both directions by 3332 the RPN control message. This however rapidly gets nasty as we 3333 then have to remap modem signals each way according to whether 3334 our virtual cable is null modem etc .. */ 3335 tty_termios_copy_hw(&tty->termios, old); 3336 } 3337 3338 static void gsmtty_throttle(struct tty_struct *tty) 3339 { 3340 struct gsm_dlci *dlci = tty->driver_data; 3341 if (dlci->state == DLCI_CLOSED) 3342 return; 3343 if (C_CRTSCTS(tty)) 3344 dlci->modem_tx &= ~TIOCM_RTS; 3345 dlci->throttled = true; 3346 /* Send an MSC with RTS cleared */ 3347 gsm_modem_update(dlci, 0); 3348 } 3349 3350 static void gsmtty_unthrottle(struct tty_struct *tty) 3351 { 3352 struct gsm_dlci *dlci = tty->driver_data; 3353 if (dlci->state == DLCI_CLOSED) 3354 return; 3355 if (C_CRTSCTS(tty)) 3356 dlci->modem_tx |= TIOCM_RTS; 3357 dlci->throttled = false; 3358 /* Send an MSC with RTS set */ 3359 gsm_modem_update(dlci, 0); 3360 } 3361 3362 static int gsmtty_break_ctl(struct tty_struct *tty, int state) 3363 { 3364 struct gsm_dlci *dlci = tty->driver_data; 3365 int encode = 0; /* Off */ 3366 if (dlci->state == DLCI_CLOSED) 3367 return -EINVAL; 3368 3369 if (state == -1) /* "On indefinitely" - we can't encode this 3370 properly */ 3371 encode = 0x0F; 3372 else if (state > 0) { 3373 encode = state / 200; /* mS to encoding */ 3374 if (encode > 0x0F) 3375 encode = 0x0F; /* Best effort */ 3376 } 3377 return gsm_modem_update(dlci, encode); 3378 } 3379 3380 static void gsmtty_cleanup(struct tty_struct *tty) 3381 { 3382 struct gsm_dlci *dlci = tty->driver_data; 3383 struct gsm_mux *gsm = dlci->gsm; 3384 3385 dlci_put(dlci); 3386 dlci_put(gsm->dlci[0]); 3387 mux_put(gsm); 3388 } 3389 3390 /* Virtual ttys for the demux */ 3391 static const struct tty_operations gsmtty_ops = { 3392 .install = gsmtty_install, 3393 .open = gsmtty_open, 3394 .close = gsmtty_close, 3395 .write = gsmtty_write, 3396 .write_room = gsmtty_write_room, 3397 .chars_in_buffer = gsmtty_chars_in_buffer, 3398 .flush_buffer = gsmtty_flush_buffer, 3399 .ioctl = gsmtty_ioctl, 3400 .throttle = gsmtty_throttle, 3401 .unthrottle = gsmtty_unthrottle, 3402 .set_termios = gsmtty_set_termios, 3403 .hangup = gsmtty_hangup, 3404 .wait_until_sent = gsmtty_wait_until_sent, 3405 .tiocmget = gsmtty_tiocmget, 3406 .tiocmset = gsmtty_tiocmset, 3407 .break_ctl = gsmtty_break_ctl, 3408 .cleanup = gsmtty_cleanup, 3409 }; 3410 3411 3412 3413 static int __init gsm_init(void) 3414 { 3415 /* Fill in our line protocol discipline, and register it */ 3416 int status = tty_register_ldisc(&tty_ldisc_packet); 3417 if (status != 0) { 3418 pr_err("n_gsm: can't register line discipline (err = %d)\n", 3419 status); 3420 return status; 3421 } 3422 3423 gsm_tty_driver = tty_alloc_driver(256, TTY_DRIVER_REAL_RAW | 3424 TTY_DRIVER_DYNAMIC_DEV | TTY_DRIVER_HARDWARE_BREAK); 3425 if (IS_ERR(gsm_tty_driver)) { 3426 pr_err("gsm_init: tty allocation failed.\n"); 3427 status = PTR_ERR(gsm_tty_driver); 3428 goto err_unreg_ldisc; 3429 } 3430 gsm_tty_driver->driver_name = "gsmtty"; 3431 gsm_tty_driver->name = "gsmtty"; 3432 gsm_tty_driver->major = 0; /* Dynamic */ 3433 gsm_tty_driver->minor_start = 0; 3434 gsm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL; 3435 gsm_tty_driver->subtype = SERIAL_TYPE_NORMAL; 3436 gsm_tty_driver->init_termios = tty_std_termios; 3437 /* Fixme */ 3438 gsm_tty_driver->init_termios.c_lflag &= ~ECHO; 3439 tty_set_operations(gsm_tty_driver, &gsmtty_ops); 3440 3441 if (tty_register_driver(gsm_tty_driver)) { 3442 pr_err("gsm_init: tty registration failed.\n"); 3443 status = -EBUSY; 3444 goto err_put_driver; 3445 } 3446 pr_debug("gsm_init: loaded as %d,%d.\n", 3447 gsm_tty_driver->major, gsm_tty_driver->minor_start); 3448 return 0; 3449 err_put_driver: 3450 tty_driver_kref_put(gsm_tty_driver); 3451 err_unreg_ldisc: 3452 tty_unregister_ldisc(&tty_ldisc_packet); 3453 return status; 3454 } 3455 3456 static void __exit gsm_exit(void) 3457 { 3458 tty_unregister_ldisc(&tty_ldisc_packet); 3459 tty_unregister_driver(gsm_tty_driver); 3460 tty_driver_kref_put(gsm_tty_driver); 3461 } 3462 3463 module_init(gsm_init); 3464 module_exit(gsm_exit); 3465 3466 3467 MODULE_LICENSE("GPL"); 3468 MODULE_ALIAS_LDISC(N_GSM0710); 3469