1 /* 2 * spcp8x5 USB to serial adaptor driver 3 * 4 * Copyright (C) 2006 Linxb (xubin.lin@worldplus.com.cn) 5 * Copyright (C) 2006 S1 Corp. 6 * 7 * Original driver for 2.6.10 pl2303 driver by 8 * Greg Kroah-Hartman (greg@kroah.com) 9 * Changes for 2.6.20 by Harald Klein <hari@vt100.at> 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or 14 * (at your option) any later version. 15 * 16 * 17 */ 18 #include <linux/kernel.h> 19 #include <linux/errno.h> 20 #include <linux/init.h> 21 #include <linux/slab.h> 22 #include <linux/tty.h> 23 #include <linux/tty_driver.h> 24 #include <linux/tty_flip.h> 25 #include <linux/module.h> 26 #include <linux/spinlock.h> 27 #include <linux/usb.h> 28 #include <linux/usb/serial.h> 29 30 31 /* Version Information */ 32 #define DRIVER_VERSION "v0.04" 33 #define DRIVER_DESC "SPCP8x5 USB to serial adaptor driver" 34 35 static int debug; 36 37 #define SPCP8x5_007_VID 0x04FC 38 #define SPCP8x5_007_PID 0x0201 39 #define SPCP8x5_008_VID 0x04fc 40 #define SPCP8x5_008_PID 0x0235 41 #define SPCP8x5_PHILIPS_VID 0x0471 42 #define SPCP8x5_PHILIPS_PID 0x081e 43 #define SPCP8x5_INTERMATIC_VID 0x04FC 44 #define SPCP8x5_INTERMATIC_PID 0x0204 45 #define SPCP8x5_835_VID 0x04fc 46 #define SPCP8x5_835_PID 0x0231 47 48 static struct usb_device_id id_table [] = { 49 { USB_DEVICE(SPCP8x5_PHILIPS_VID , SPCP8x5_PHILIPS_PID)}, 50 { USB_DEVICE(SPCP8x5_INTERMATIC_VID, SPCP8x5_INTERMATIC_PID)}, 51 { USB_DEVICE(SPCP8x5_835_VID, SPCP8x5_835_PID)}, 52 { USB_DEVICE(SPCP8x5_008_VID, SPCP8x5_008_PID)}, 53 { USB_DEVICE(SPCP8x5_007_VID, SPCP8x5_007_PID)}, 54 { } /* Terminating entry */ 55 }; 56 MODULE_DEVICE_TABLE(usb, id_table); 57 58 struct spcp8x5_usb_ctrl_arg { 59 u8 type; 60 u8 cmd; 61 u8 cmd_type; 62 u16 value; 63 u16 index; 64 u16 length; 65 }; 66 67 /* wait 30s before close */ 68 #define SPCP8x5_CLOSING_WAIT (30*HZ) 69 70 #define SPCP8x5_BUF_SIZE 1024 71 72 73 /* spcp8x5 spec register define */ 74 #define MCR_CONTROL_LINE_RTS 0x02 75 #define MCR_CONTROL_LINE_DTR 0x01 76 #define MCR_DTR 0x01 77 #define MCR_RTS 0x02 78 79 #define MSR_STATUS_LINE_DCD 0x80 80 #define MSR_STATUS_LINE_RI 0x40 81 #define MSR_STATUS_LINE_DSR 0x20 82 #define MSR_STATUS_LINE_CTS 0x10 83 84 /* verdor command here , we should define myself */ 85 #define SET_DEFAULT 0x40 86 #define SET_DEFAULT_TYPE 0x20 87 88 #define SET_UART_FORMAT 0x40 89 #define SET_UART_FORMAT_TYPE 0x21 90 #define SET_UART_FORMAT_SIZE_5 0x00 91 #define SET_UART_FORMAT_SIZE_6 0x01 92 #define SET_UART_FORMAT_SIZE_7 0x02 93 #define SET_UART_FORMAT_SIZE_8 0x03 94 #define SET_UART_FORMAT_STOP_1 0x00 95 #define SET_UART_FORMAT_STOP_2 0x04 96 #define SET_UART_FORMAT_PAR_NONE 0x00 97 #define SET_UART_FORMAT_PAR_ODD 0x10 98 #define SET_UART_FORMAT_PAR_EVEN 0x30 99 #define SET_UART_FORMAT_PAR_MASK 0xD0 100 #define SET_UART_FORMAT_PAR_SPACE 0x90 101 102 #define GET_UART_STATUS_TYPE 0xc0 103 #define GET_UART_STATUS 0x22 104 #define GET_UART_STATUS_MSR 0x06 105 106 #define SET_UART_STATUS 0x40 107 #define SET_UART_STATUS_TYPE 0x23 108 #define SET_UART_STATUS_MCR 0x0004 109 #define SET_UART_STATUS_MCR_DTR 0x01 110 #define SET_UART_STATUS_MCR_RTS 0x02 111 #define SET_UART_STATUS_MCR_LOOP 0x10 112 113 #define SET_WORKING_MODE 0x40 114 #define SET_WORKING_MODE_TYPE 0x24 115 #define SET_WORKING_MODE_U2C 0x00 116 #define SET_WORKING_MODE_RS485 0x01 117 #define SET_WORKING_MODE_PDMA 0x02 118 #define SET_WORKING_MODE_SPP 0x03 119 120 #define SET_FLOWCTL_CHAR 0x40 121 #define SET_FLOWCTL_CHAR_TYPE 0x25 122 123 #define GET_VERSION 0xc0 124 #define GET_VERSION_TYPE 0x26 125 126 #define SET_REGISTER 0x40 127 #define SET_REGISTER_TYPE 0x27 128 129 #define GET_REGISTER 0xc0 130 #define GET_REGISTER_TYPE 0x28 131 132 #define SET_RAM 0x40 133 #define SET_RAM_TYPE 0x31 134 135 #define GET_RAM 0xc0 136 #define GET_RAM_TYPE 0x32 137 138 /* how come ??? */ 139 #define UART_STATE 0x08 140 #define UART_STATE_TRANSIENT_MASK 0x74 141 #define UART_DCD 0x01 142 #define UART_DSR 0x02 143 #define UART_BREAK_ERROR 0x04 144 #define UART_RING 0x08 145 #define UART_FRAME_ERROR 0x10 146 #define UART_PARITY_ERROR 0x20 147 #define UART_OVERRUN_ERROR 0x40 148 #define UART_CTS 0x80 149 150 enum spcp8x5_type { 151 SPCP825_007_TYPE, 152 SPCP825_008_TYPE, 153 SPCP825_PHILIP_TYPE, 154 SPCP825_INTERMATIC_TYPE, 155 SPCP835_TYPE, 156 }; 157 158 /* 1st in 1st out buffer 4 driver */ 159 struct ringbuf { 160 unsigned int buf_size; 161 char *buf_buf; 162 char *buf_get; 163 char *buf_put; 164 }; 165 166 /* alloc the ring buf and alloc the buffer itself */ 167 static inline struct ringbuf *alloc_ringbuf(unsigned int size) 168 { 169 struct ringbuf *pb; 170 171 if (size == 0) 172 return NULL; 173 174 pb = kmalloc(sizeof(*pb), GFP_KERNEL); 175 if (pb == NULL) 176 return NULL; 177 178 pb->buf_buf = kmalloc(size, GFP_KERNEL); 179 if (pb->buf_buf == NULL) { 180 kfree(pb); 181 return NULL; 182 } 183 184 pb->buf_size = size; 185 pb->buf_get = pb->buf_put = pb->buf_buf; 186 187 return pb; 188 } 189 190 /* free the ring buf and the buffer itself */ 191 static inline void free_ringbuf(struct ringbuf *pb) 192 { 193 if (pb != NULL) { 194 kfree(pb->buf_buf); 195 kfree(pb); 196 } 197 } 198 199 /* clear pipo , juest repoint the pointer here */ 200 static inline void clear_ringbuf(struct ringbuf *pb) 201 { 202 if (pb != NULL) 203 pb->buf_get = pb->buf_put; 204 } 205 206 /* get the number of data in the pipo */ 207 static inline unsigned int ringbuf_avail_data(struct ringbuf *pb) 208 { 209 if (pb == NULL) 210 return 0; 211 return (pb->buf_size + pb->buf_put - pb->buf_get) % pb->buf_size; 212 } 213 214 /* get the number of space in the pipo */ 215 static inline unsigned int ringbuf_avail_space(struct ringbuf *pb) 216 { 217 if (pb == NULL) 218 return 0; 219 return (pb->buf_size + pb->buf_get - pb->buf_put - 1) % pb->buf_size; 220 } 221 222 /* put count data into pipo */ 223 static unsigned int put_ringbuf(struct ringbuf *pb, const char *buf, 224 unsigned int count) 225 { 226 unsigned int len; 227 228 if (pb == NULL) 229 return 0; 230 231 len = ringbuf_avail_space(pb); 232 if (count > len) 233 count = len; 234 235 if (count == 0) 236 return 0; 237 238 len = pb->buf_buf + pb->buf_size - pb->buf_put; 239 if (count > len) { 240 memcpy(pb->buf_put, buf, len); 241 memcpy(pb->buf_buf, buf+len, count - len); 242 pb->buf_put = pb->buf_buf + count - len; 243 } else { 244 memcpy(pb->buf_put, buf, count); 245 if (count < len) 246 pb->buf_put += count; 247 else /* count == len */ 248 pb->buf_put = pb->buf_buf; 249 } 250 return count; 251 } 252 253 /* get count data from pipo */ 254 static unsigned int get_ringbuf(struct ringbuf *pb, char *buf, 255 unsigned int count) 256 { 257 unsigned int len; 258 259 if (pb == NULL || buf == NULL) 260 return 0; 261 262 len = ringbuf_avail_data(pb); 263 if (count > len) 264 count = len; 265 266 if (count == 0) 267 return 0; 268 269 len = pb->buf_buf + pb->buf_size - pb->buf_get; 270 if (count > len) { 271 memcpy(buf, pb->buf_get, len); 272 memcpy(buf+len, pb->buf_buf, count - len); 273 pb->buf_get = pb->buf_buf + count - len; 274 } else { 275 memcpy(buf, pb->buf_get, count); 276 if (count < len) 277 pb->buf_get += count; 278 else /* count == len */ 279 pb->buf_get = pb->buf_buf; 280 } 281 282 return count; 283 } 284 285 static struct usb_driver spcp8x5_driver = { 286 .name = "spcp8x5", 287 .probe = usb_serial_probe, 288 .disconnect = usb_serial_disconnect, 289 .id_table = id_table, 290 .no_dynamic_id = 1, 291 }; 292 293 294 struct spcp8x5_private { 295 spinlock_t lock; 296 struct ringbuf *buf; 297 int write_urb_in_use; 298 enum spcp8x5_type type; 299 wait_queue_head_t delta_msr_wait; 300 u8 line_control; 301 u8 line_status; 302 u8 termios_initialized; 303 }; 304 305 /* desc : when device plug in,this function would be called. 306 * thanks to usb_serial subsystem,then do almost every things for us. And what 307 * we should do just alloc the buffer */ 308 static int spcp8x5_startup(struct usb_serial *serial) 309 { 310 struct spcp8x5_private *priv; 311 int i; 312 enum spcp8x5_type type = SPCP825_007_TYPE; 313 u16 product = le16_to_cpu(serial->dev->descriptor.idProduct); 314 315 if (product == 0x0201) 316 type = SPCP825_007_TYPE; 317 else if (product == 0x0231) 318 type = SPCP835_TYPE; 319 else if (product == 0x0235) 320 type = SPCP825_008_TYPE; 321 else if (product == 0x0204) 322 type = SPCP825_INTERMATIC_TYPE; 323 else if (product == 0x0471 && 324 serial->dev->descriptor.idVendor == cpu_to_le16(0x081e)) 325 type = SPCP825_PHILIP_TYPE; 326 dev_dbg(&serial->dev->dev, "device type = %d\n", (int)type); 327 328 for (i = 0; i < serial->num_ports; ++i) { 329 priv = kzalloc(sizeof(struct spcp8x5_private), GFP_KERNEL); 330 if (!priv) 331 goto cleanup; 332 333 spin_lock_init(&priv->lock); 334 priv->buf = alloc_ringbuf(SPCP8x5_BUF_SIZE); 335 if (priv->buf == NULL) 336 goto cleanup2; 337 338 init_waitqueue_head(&priv->delta_msr_wait); 339 priv->type = type; 340 usb_set_serial_port_data(serial->port[i] , priv); 341 342 } 343 344 return 0; 345 346 cleanup2: 347 kfree(priv); 348 cleanup: 349 for (--i; i >= 0; --i) { 350 priv = usb_get_serial_port_data(serial->port[i]); 351 free_ringbuf(priv->buf); 352 kfree(priv); 353 usb_set_serial_port_data(serial->port[i] , NULL); 354 } 355 return -ENOMEM; 356 } 357 358 /* call when the device plug out. free all the memory alloced by probe */ 359 static void spcp8x5_release(struct usb_serial *serial) 360 { 361 int i; 362 struct spcp8x5_private *priv; 363 364 for (i = 0; i < serial->num_ports; i++) { 365 priv = usb_get_serial_port_data(serial->port[i]); 366 if (priv) { 367 free_ringbuf(priv->buf); 368 kfree(priv); 369 } 370 } 371 } 372 373 /* set the modem control line of the device. 374 * NOTE spcp825-007 not supported this */ 375 static int spcp8x5_set_ctrlLine(struct usb_device *dev, u8 value, 376 enum spcp8x5_type type) 377 { 378 int retval; 379 u8 mcr = 0 ; 380 381 if (type == SPCP825_007_TYPE) 382 return -EPERM; 383 384 mcr = (unsigned short)value; 385 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 386 SET_UART_STATUS_TYPE, SET_UART_STATUS, 387 mcr, 0x04, NULL, 0, 100); 388 if (retval != 0) 389 dev_dbg(&dev->dev, "usb_control_msg return %#x\n", retval); 390 return retval; 391 } 392 393 /* get the modem status register of the device 394 * NOTE spcp825-007 not supported this */ 395 static int spcp8x5_get_msr(struct usb_device *dev, u8 *status, 396 enum spcp8x5_type type) 397 { 398 u8 *status_buffer; 399 int ret; 400 401 /* I return Permited not support here but seem inval device 402 * is more fix */ 403 if (type == SPCP825_007_TYPE) 404 return -EPERM; 405 if (status == NULL) 406 return -EINVAL; 407 408 status_buffer = kmalloc(1, GFP_KERNEL); 409 if (!status_buffer) 410 return -ENOMEM; 411 status_buffer[0] = status[0]; 412 413 ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 414 GET_UART_STATUS, GET_UART_STATUS_TYPE, 415 0, GET_UART_STATUS_MSR, status_buffer, 1, 100); 416 if (ret < 0) 417 dev_dbg(&dev->dev, "Get MSR = 0x%p failed (error = %d)", 418 status_buffer, ret); 419 420 dev_dbg(&dev->dev, "0xc0:0x22:0:6 %d - 0x%p ", ret, status_buffer); 421 status[0] = status_buffer[0]; 422 kfree(status_buffer); 423 424 return ret; 425 } 426 427 /* select the work mode. 428 * NOTE this function not supported by spcp825-007 */ 429 static void spcp8x5_set_workMode(struct usb_device *dev, u16 value, 430 u16 index, enum spcp8x5_type type) 431 { 432 int ret; 433 434 /* I return Permited not support here but seem inval device 435 * is more fix */ 436 if (type == SPCP825_007_TYPE) 437 return; 438 439 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 440 SET_WORKING_MODE_TYPE, SET_WORKING_MODE, 441 value, index, NULL, 0, 100); 442 dev_dbg(&dev->dev, "value = %#x , index = %#x\n", value, index); 443 if (ret < 0) 444 dev_dbg(&dev->dev, 445 "RTSCTS usb_control_msg(enable flowctrl) = %d\n", ret); 446 } 447 448 static int spcp8x5_carrier_raised(struct usb_serial_port *port) 449 { 450 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 451 if (priv->line_status & MSR_STATUS_LINE_DCD) 452 return 1; 453 return 0; 454 } 455 456 static void spcp8x5_dtr_rts(struct usb_serial_port *port, int on) 457 { 458 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 459 unsigned long flags; 460 u8 control; 461 462 spin_lock_irqsave(&priv->lock, flags); 463 if (on) 464 priv->line_control = MCR_CONTROL_LINE_DTR 465 | MCR_CONTROL_LINE_RTS; 466 else 467 priv->line_control &= ~ (MCR_CONTROL_LINE_DTR 468 | MCR_CONTROL_LINE_RTS); 469 control = priv->line_control; 470 spin_unlock_irqrestore(&priv->lock, flags); 471 spcp8x5_set_ctrlLine(port->serial->dev, control , priv->type); 472 } 473 474 /* close the serial port. We should wait for data sending to device 1st and 475 * then kill all urb. */ 476 static void spcp8x5_close(struct usb_serial_port *port) 477 { 478 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 479 unsigned long flags; 480 int result; 481 482 dbg("%s - port %d", __func__, port->number); 483 484 spin_lock_irqsave(&priv->lock, flags); 485 /* clear out any remaining data in the buffer */ 486 clear_ringbuf(priv->buf); 487 spin_unlock_irqrestore(&priv->lock, flags); 488 489 /* kill urb */ 490 if (port->write_urb != NULL) { 491 result = usb_unlink_urb(port->write_urb); 492 if (result) 493 dev_dbg(&port->dev, 494 "usb_unlink_urb(write_urb) = %d\n", result); 495 } 496 result = usb_unlink_urb(port->read_urb); 497 if (result) 498 dev_dbg(&port->dev, "usb_unlink_urb(read_urb) = %d\n", result); 499 } 500 501 /* set the serial param for transfer. we should check if we really need to 502 * transfer. if we set flow control we should do this too. */ 503 static void spcp8x5_set_termios(struct tty_struct *tty, 504 struct usb_serial_port *port, struct ktermios *old_termios) 505 { 506 struct usb_serial *serial = port->serial; 507 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 508 unsigned long flags; 509 unsigned int cflag = tty->termios->c_cflag; 510 unsigned int old_cflag = old_termios->c_cflag; 511 unsigned short uartdata; 512 unsigned char buf[2] = {0, 0}; 513 int baud; 514 int i; 515 u8 control; 516 517 /* for the 1st time call this function */ 518 spin_lock_irqsave(&priv->lock, flags); 519 if (!priv->termios_initialized) { 520 *(tty->termios) = tty_std_termios; 521 tty->termios->c_cflag = B115200 | CS8 | CREAD | HUPCL | CLOCAL; 522 tty->termios->c_ispeed = 115200; 523 tty->termios->c_ospeed = 115200; 524 priv->termios_initialized = 1; 525 } 526 spin_unlock_irqrestore(&priv->lock, flags); 527 528 /* check that they really want us to change something */ 529 if (!tty_termios_hw_change(tty->termios, old_termios)) 530 return; 531 532 /* set DTR/RTS active */ 533 spin_lock_irqsave(&priv->lock, flags); 534 control = priv->line_control; 535 if ((old_cflag & CBAUD) == B0) { 536 priv->line_control |= MCR_DTR; 537 if (!(old_cflag & CRTSCTS)) 538 priv->line_control |= MCR_RTS; 539 } 540 if (control != priv->line_control) { 541 control = priv->line_control; 542 spin_unlock_irqrestore(&priv->lock, flags); 543 spcp8x5_set_ctrlLine(serial->dev, control , priv->type); 544 } else { 545 spin_unlock_irqrestore(&priv->lock, flags); 546 } 547 548 /* Set Baud Rate */ 549 baud = tty_get_baud_rate(tty);; 550 switch (baud) { 551 case 300: buf[0] = 0x00; break; 552 case 600: buf[0] = 0x01; break; 553 case 1200: buf[0] = 0x02; break; 554 case 2400: buf[0] = 0x03; break; 555 case 4800: buf[0] = 0x04; break; 556 case 9600: buf[0] = 0x05; break; 557 case 19200: buf[0] = 0x07; break; 558 case 38400: buf[0] = 0x09; break; 559 case 57600: buf[0] = 0x0a; break; 560 case 115200: buf[0] = 0x0b; break; 561 case 230400: buf[0] = 0x0c; break; 562 case 460800: buf[0] = 0x0d; break; 563 case 921600: buf[0] = 0x0e; break; 564 /* case 1200000: buf[0] = 0x0f; break; */ 565 /* case 2400000: buf[0] = 0x10; break; */ 566 case 3000000: buf[0] = 0x11; break; 567 /* case 6000000: buf[0] = 0x12; break; */ 568 case 0: 569 case 1000000: 570 buf[0] = 0x0b; break; 571 default: 572 dev_err(&port->dev, "spcp825 driver does not support the " 573 "baudrate requested, using default of 9600.\n"); 574 } 575 576 /* Set Data Length : 00:5bit, 01:6bit, 10:7bit, 11:8bit */ 577 if (cflag & CSIZE) { 578 switch (cflag & CSIZE) { 579 case CS5: 580 buf[1] |= SET_UART_FORMAT_SIZE_5; 581 break; 582 case CS6: 583 buf[1] |= SET_UART_FORMAT_SIZE_6; 584 break; 585 case CS7: 586 buf[1] |= SET_UART_FORMAT_SIZE_7; 587 break; 588 default: 589 case CS8: 590 buf[1] |= SET_UART_FORMAT_SIZE_8; 591 break; 592 } 593 } 594 595 /* Set Stop bit2 : 0:1bit 1:2bit */ 596 buf[1] |= (cflag & CSTOPB) ? SET_UART_FORMAT_STOP_2 : 597 SET_UART_FORMAT_STOP_1; 598 599 /* Set Parity bit3-4 01:Odd 11:Even */ 600 if (cflag & PARENB) { 601 buf[1] |= (cflag & PARODD) ? 602 SET_UART_FORMAT_PAR_ODD : SET_UART_FORMAT_PAR_EVEN ; 603 } else 604 buf[1] |= SET_UART_FORMAT_PAR_NONE; 605 606 uartdata = buf[0] | buf[1]<<8; 607 608 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 609 SET_UART_FORMAT_TYPE, SET_UART_FORMAT, 610 uartdata, 0, NULL, 0, 100); 611 if (i < 0) 612 dev_err(&port->dev, "Set UART format %#x failed (error = %d)\n", 613 uartdata, i); 614 dbg("0x21:0x40:0:0 %d\n", i); 615 616 if (cflag & CRTSCTS) { 617 /* enable hardware flow control */ 618 spcp8x5_set_workMode(serial->dev, 0x000a, 619 SET_WORKING_MODE_U2C, priv->type); 620 } 621 return; 622 } 623 624 /* open the serial port. do some usb system call. set termios and get the line 625 * status of the device. then submit the read urb */ 626 static int spcp8x5_open(struct tty_struct *tty, 627 struct usb_serial_port *port, struct file *filp) 628 { 629 struct ktermios tmp_termios; 630 struct usb_serial *serial = port->serial; 631 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 632 int ret; 633 unsigned long flags; 634 u8 status = 0x30; 635 /* status 0x30 means DSR and CTS = 1 other CDC RI and delta = 0 */ 636 637 dbg("%s - port %d", __func__, port->number); 638 639 usb_clear_halt(serial->dev, port->write_urb->pipe); 640 usb_clear_halt(serial->dev, port->read_urb->pipe); 641 642 ret = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 643 0x09, 0x00, 644 0x01, 0x00, NULL, 0x00, 100); 645 if (ret) 646 return ret; 647 648 spcp8x5_set_ctrlLine(serial->dev, priv->line_control , priv->type); 649 650 /* Setup termios */ 651 if (tty) 652 spcp8x5_set_termios(tty, port, &tmp_termios); 653 654 spcp8x5_get_msr(serial->dev, &status, priv->type); 655 656 /* may be we should update uart status here but now we did not do */ 657 spin_lock_irqsave(&priv->lock, flags); 658 priv->line_status = status & 0xf0 ; 659 spin_unlock_irqrestore(&priv->lock, flags); 660 661 /* FIXME: need to assert RTS and DTR if CRTSCTS off */ 662 663 dbg("%s - submitting read urb", __func__); 664 port->read_urb->dev = serial->dev; 665 ret = usb_submit_urb(port->read_urb, GFP_KERNEL); 666 if (ret) { 667 spcp8x5_close(port); 668 return -EPROTO; 669 } 670 port->port.drain_delay = 256; 671 return 0; 672 } 673 674 /* bulk read call back function. check the status of the urb. if transfer 675 * failed return. then update the status and the tty send data to tty subsys. 676 * submit urb again. 677 */ 678 static void spcp8x5_read_bulk_callback(struct urb *urb) 679 { 680 struct usb_serial_port *port = urb->context; 681 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 682 struct tty_struct *tty; 683 unsigned char *data = urb->transfer_buffer; 684 unsigned long flags; 685 int i; 686 int result = urb->status; 687 u8 status; 688 char tty_flag; 689 690 dev_dbg(&port->dev, "start, result = %d, urb->actual_length = %d\n,", 691 result, urb->actual_length); 692 693 /* check the urb status */ 694 if (result) { 695 if (!port->port.count) 696 return; 697 if (result == -EPROTO) { 698 /* spcp8x5 mysteriously fails with -EPROTO */ 699 /* reschedule the read */ 700 urb->dev = port->serial->dev; 701 result = usb_submit_urb(urb , GFP_ATOMIC); 702 if (result) 703 dev_dbg(&port->dev, 704 "failed submitting read urb %d\n", 705 result); 706 return; 707 } 708 dev_dbg(&port->dev, "unable to handle the error, exiting.\n"); 709 return; 710 } 711 712 /* get tty_flag from status */ 713 tty_flag = TTY_NORMAL; 714 715 spin_lock_irqsave(&priv->lock, flags); 716 status = priv->line_status; 717 priv->line_status &= ~UART_STATE_TRANSIENT_MASK; 718 spin_unlock_irqrestore(&priv->lock, flags); 719 /* wake up the wait for termios */ 720 wake_up_interruptible(&priv->delta_msr_wait); 721 722 /* break takes precedence over parity, which takes precedence over 723 * framing errors */ 724 if (status & UART_BREAK_ERROR) 725 tty_flag = TTY_BREAK; 726 else if (status & UART_PARITY_ERROR) 727 tty_flag = TTY_PARITY; 728 else if (status & UART_FRAME_ERROR) 729 tty_flag = TTY_FRAME; 730 dev_dbg(&port->dev, "tty_flag = %d\n", tty_flag); 731 732 tty = tty_port_tty_get(&port->port); 733 if (tty && urb->actual_length) { 734 tty_buffer_request_room(tty, urb->actual_length + 1); 735 /* overrun is special, not associated with a char */ 736 if (status & UART_OVERRUN_ERROR) 737 tty_insert_flip_char(tty, 0, TTY_OVERRUN); 738 for (i = 0; i < urb->actual_length; ++i) 739 tty_insert_flip_char(tty, data[i], tty_flag); 740 tty_flip_buffer_push(tty); 741 } 742 tty_kref_put(tty); 743 744 /* Schedule the next read _if_ we are still open */ 745 if (port->port.count) { 746 urb->dev = port->serial->dev; 747 result = usb_submit_urb(urb , GFP_ATOMIC); 748 if (result) 749 dev_dbg(&port->dev, "failed submitting read urb %d\n", 750 result); 751 } 752 753 return; 754 } 755 756 /* get data from ring buffer and then write to usb bus */ 757 static void spcp8x5_send(struct usb_serial_port *port) 758 { 759 int count, result; 760 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 761 unsigned long flags; 762 763 spin_lock_irqsave(&priv->lock, flags); 764 765 if (priv->write_urb_in_use) { 766 dev_dbg(&port->dev, "write urb still used\n"); 767 spin_unlock_irqrestore(&priv->lock, flags); 768 return; 769 } 770 771 /* send the 1st urb for writting */ 772 memset(port->write_urb->transfer_buffer , 0x00 , port->bulk_out_size); 773 count = get_ringbuf(priv->buf, port->write_urb->transfer_buffer, 774 port->bulk_out_size); 775 776 if (count == 0) { 777 spin_unlock_irqrestore(&priv->lock, flags); 778 return; 779 } 780 781 /* update the urb status */ 782 priv->write_urb_in_use = 1; 783 784 spin_unlock_irqrestore(&priv->lock, flags); 785 786 port->write_urb->transfer_buffer_length = count; 787 port->write_urb->dev = port->serial->dev; 788 789 result = usb_submit_urb(port->write_urb, GFP_ATOMIC); 790 if (result) { 791 dev_dbg(&port->dev, "failed submitting write urb, error %d\n", 792 result); 793 priv->write_urb_in_use = 0; 794 /* TODO: reschedule spcp8x5_send */ 795 } 796 797 798 schedule_work(&port->work); 799 } 800 801 /* this is the call back function for write urb. NOTE we should not sleep in 802 * this routine. check the urb return code and then submit the write urb again 803 * to hold the write loop */ 804 static void spcp8x5_write_bulk_callback(struct urb *urb) 805 { 806 struct usb_serial_port *port = urb->context; 807 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 808 int result; 809 int status = urb->status; 810 811 switch (status) { 812 case 0: 813 /* success */ 814 break; 815 case -ECONNRESET: 816 case -ENOENT: 817 case -ESHUTDOWN: 818 /* this urb is terminated, clean up */ 819 dev_dbg(&port->dev, "urb shutting down with status: %d\n", 820 status); 821 priv->write_urb_in_use = 0; 822 return; 823 default: 824 /* error in the urb, so we have to resubmit it */ 825 dbg("%s - Overflow in write", __func__); 826 dbg("%s - nonzero write bulk status received: %d", 827 __func__, status); 828 port->write_urb->transfer_buffer_length = 1; 829 port->write_urb->dev = port->serial->dev; 830 result = usb_submit_urb(port->write_urb, GFP_ATOMIC); 831 if (result) 832 dev_dbg(&port->dev, 833 "failed resubmitting write urb %d\n", result); 834 else 835 return; 836 } 837 838 priv->write_urb_in_use = 0; 839 840 /* send any buffered data */ 841 spcp8x5_send(port); 842 } 843 844 /* write data to ring buffer. and then start the write transfer */ 845 static int spcp8x5_write(struct tty_struct *tty, struct usb_serial_port *port, 846 const unsigned char *buf, int count) 847 { 848 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 849 unsigned long flags; 850 851 dev_dbg(&port->dev, "%d bytes\n", count); 852 853 if (!count) 854 return count; 855 856 spin_lock_irqsave(&priv->lock, flags); 857 count = put_ringbuf(priv->buf, buf, count); 858 spin_unlock_irqrestore(&priv->lock, flags); 859 860 spcp8x5_send(port); 861 862 return count; 863 } 864 865 static int spcp8x5_wait_modem_info(struct usb_serial_port *port, 866 unsigned int arg) 867 { 868 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 869 unsigned long flags; 870 unsigned int prevstatus; 871 unsigned int status; 872 unsigned int changed; 873 874 spin_lock_irqsave(&priv->lock, flags); 875 prevstatus = priv->line_status; 876 spin_unlock_irqrestore(&priv->lock, flags); 877 878 while (1) { 879 /* wake up in bulk read */ 880 interruptible_sleep_on(&priv->delta_msr_wait); 881 882 /* see if a signal did it */ 883 if (signal_pending(current)) 884 return -ERESTARTSYS; 885 886 spin_lock_irqsave(&priv->lock, flags); 887 status = priv->line_status; 888 spin_unlock_irqrestore(&priv->lock, flags); 889 890 changed = prevstatus^status; 891 892 if (((arg & TIOCM_RNG) && (changed & MSR_STATUS_LINE_RI)) || 893 ((arg & TIOCM_DSR) && (changed & MSR_STATUS_LINE_DSR)) || 894 ((arg & TIOCM_CD) && (changed & MSR_STATUS_LINE_DCD)) || 895 ((arg & TIOCM_CTS) && (changed & MSR_STATUS_LINE_CTS))) 896 return 0; 897 898 prevstatus = status; 899 } 900 /* NOTREACHED */ 901 return 0; 902 } 903 904 static int spcp8x5_ioctl(struct tty_struct *tty, struct file *file, 905 unsigned int cmd, unsigned long arg) 906 { 907 struct usb_serial_port *port = tty->driver_data; 908 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd); 909 910 switch (cmd) { 911 case TIOCMIWAIT: 912 dbg("%s (%d) TIOCMIWAIT", __func__, port->number); 913 return spcp8x5_wait_modem_info(port, arg); 914 915 default: 916 dbg("%s not supported = 0x%04x", __func__, cmd); 917 break; 918 } 919 920 return -ENOIOCTLCMD; 921 } 922 923 static int spcp8x5_tiocmset(struct tty_struct *tty, struct file *file, 924 unsigned int set, unsigned int clear) 925 { 926 struct usb_serial_port *port = tty->driver_data; 927 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 928 unsigned long flags; 929 u8 control; 930 931 spin_lock_irqsave(&priv->lock, flags); 932 if (set & TIOCM_RTS) 933 priv->line_control |= MCR_RTS; 934 if (set & TIOCM_DTR) 935 priv->line_control |= MCR_DTR; 936 if (clear & TIOCM_RTS) 937 priv->line_control &= ~MCR_RTS; 938 if (clear & TIOCM_DTR) 939 priv->line_control &= ~MCR_DTR; 940 control = priv->line_control; 941 spin_unlock_irqrestore(&priv->lock, flags); 942 943 return spcp8x5_set_ctrlLine(port->serial->dev, control , priv->type); 944 } 945 946 static int spcp8x5_tiocmget(struct tty_struct *tty, struct file *file) 947 { 948 struct usb_serial_port *port = tty->driver_data; 949 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 950 unsigned long flags; 951 unsigned int mcr; 952 unsigned int status; 953 unsigned int result; 954 955 spin_lock_irqsave(&priv->lock, flags); 956 mcr = priv->line_control; 957 status = priv->line_status; 958 spin_unlock_irqrestore(&priv->lock, flags); 959 960 result = ((mcr & MCR_DTR) ? TIOCM_DTR : 0) 961 | ((mcr & MCR_RTS) ? TIOCM_RTS : 0) 962 | ((status & MSR_STATUS_LINE_CTS) ? TIOCM_CTS : 0) 963 | ((status & MSR_STATUS_LINE_DSR) ? TIOCM_DSR : 0) 964 | ((status & MSR_STATUS_LINE_RI) ? TIOCM_RI : 0) 965 | ((status & MSR_STATUS_LINE_DCD) ? TIOCM_CD : 0); 966 967 return result; 968 } 969 970 /* get the avail space room in ring buffer */ 971 static int spcp8x5_write_room(struct tty_struct *tty) 972 { 973 struct usb_serial_port *port = tty->driver_data; 974 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 975 int room = 0; 976 unsigned long flags; 977 978 spin_lock_irqsave(&priv->lock, flags); 979 room = ringbuf_avail_space(priv->buf); 980 spin_unlock_irqrestore(&priv->lock, flags); 981 982 return room; 983 } 984 985 /* get the number of avail data in write ring buffer */ 986 static int spcp8x5_chars_in_buffer(struct tty_struct *tty) 987 { 988 struct usb_serial_port *port = tty->driver_data; 989 struct spcp8x5_private *priv = usb_get_serial_port_data(port); 990 int chars = 0; 991 unsigned long flags; 992 993 spin_lock_irqsave(&priv->lock, flags); 994 chars = ringbuf_avail_data(priv->buf); 995 spin_unlock_irqrestore(&priv->lock, flags); 996 997 return chars; 998 } 999 1000 /* All of the device info needed for the spcp8x5 SIO serial converter */ 1001 static struct usb_serial_driver spcp8x5_device = { 1002 .driver = { 1003 .owner = THIS_MODULE, 1004 .name = "SPCP8x5", 1005 }, 1006 .id_table = id_table, 1007 .num_ports = 1, 1008 .open = spcp8x5_open, 1009 .close = spcp8x5_close, 1010 .dtr_rts = spcp8x5_dtr_rts, 1011 .carrier_raised = spcp8x5_carrier_raised, 1012 .write = spcp8x5_write, 1013 .set_termios = spcp8x5_set_termios, 1014 .ioctl = spcp8x5_ioctl, 1015 .tiocmget = spcp8x5_tiocmget, 1016 .tiocmset = spcp8x5_tiocmset, 1017 .write_room = spcp8x5_write_room, 1018 .read_bulk_callback = spcp8x5_read_bulk_callback, 1019 .write_bulk_callback = spcp8x5_write_bulk_callback, 1020 .chars_in_buffer = spcp8x5_chars_in_buffer, 1021 .attach = spcp8x5_startup, 1022 .release = spcp8x5_release, 1023 }; 1024 1025 static int __init spcp8x5_init(void) 1026 { 1027 int retval; 1028 retval = usb_serial_register(&spcp8x5_device); 1029 if (retval) 1030 goto failed_usb_serial_register; 1031 retval = usb_register(&spcp8x5_driver); 1032 if (retval) 1033 goto failed_usb_register; 1034 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":" 1035 DRIVER_DESC "\n"); 1036 return 0; 1037 failed_usb_register: 1038 usb_serial_deregister(&spcp8x5_device); 1039 failed_usb_serial_register: 1040 return retval; 1041 } 1042 1043 static void __exit spcp8x5_exit(void) 1044 { 1045 usb_deregister(&spcp8x5_driver); 1046 usb_serial_deregister(&spcp8x5_device); 1047 } 1048 1049 module_init(spcp8x5_init); 1050 module_exit(spcp8x5_exit); 1051 1052 MODULE_DESCRIPTION(DRIVER_DESC); 1053 MODULE_VERSION(DRIVER_VERSION); 1054 MODULE_LICENSE("GPL"); 1055 1056 module_param(debug, bool, S_IRUGO | S_IWUSR); 1057 MODULE_PARM_DESC(debug, "Debug enabled or not"); 1058