1 /* 2 Keyspan USB to Serial Converter driver 3 4 (C) Copyright (C) 2000-2001 Hugh Blemings <hugh@blemings.org> 5 (C) Copyright (C) 2002 Greg Kroah-Hartman <greg@kroah.com> 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2 of the License, or 10 (at your option) any later version. 11 12 See http://blemings.org/hugh/keyspan.html for more information. 13 14 Code in this driver inspired by and in a number of places taken 15 from Brian Warner's original Keyspan-PDA driver. 16 17 This driver has been put together with the support of Innosys, Inc. 18 and Keyspan, Inc the manufacturers of the Keyspan USB-serial products. 19 Thanks Guys :) 20 21 Thanks to Paulus for miscellaneous tidy ups, some largish chunks 22 of much nicer and/or completely new code and (perhaps most uniquely) 23 having the patience to sit down and explain why and where he'd changed 24 stuff. 25 26 Tip 'o the hat to IBM (and previously Linuxcare :) for supporting 27 staff in their work on open source projects. 28 */ 29 30 31 #include <linux/kernel.h> 32 #include <linux/jiffies.h> 33 #include <linux/errno.h> 34 #include <linux/init.h> 35 #include <linux/slab.h> 36 #include <linux/tty.h> 37 #include <linux/tty_driver.h> 38 #include <linux/tty_flip.h> 39 #include <linux/module.h> 40 #include <linux/spinlock.h> 41 #include <linux/uaccess.h> 42 #include <linux/usb.h> 43 #include <linux/usb/serial.h> 44 #include <linux/usb/ezusb.h> 45 #include "keyspan.h" 46 47 #define DRIVER_AUTHOR "Hugh Blemings <hugh@misc.nu" 48 #define DRIVER_DESC "Keyspan USB to Serial Converter Driver" 49 50 #define INSTAT_BUFLEN 32 51 #define GLOCONT_BUFLEN 64 52 #define INDAT49W_BUFLEN 512 53 #define IN_BUFLEN 64 54 #define OUT_BUFLEN 64 55 #define INACK_BUFLEN 1 56 #define OUTCONT_BUFLEN 64 57 58 /* Per device and per port private data */ 59 struct keyspan_serial_private { 60 const struct keyspan_device_details *device_details; 61 62 struct urb *instat_urb; 63 char *instat_buf; 64 65 /* added to support 49wg, where data from all 4 ports comes in 66 on 1 EP and high-speed supported */ 67 struct urb *indat_urb; 68 char *indat_buf; 69 70 /* XXX this one probably will need a lock */ 71 struct urb *glocont_urb; 72 char *glocont_buf; 73 char *ctrl_buf; /* for EP0 control message */ 74 }; 75 76 struct keyspan_port_private { 77 /* Keep track of which input & output endpoints to use */ 78 int in_flip; 79 int out_flip; 80 81 /* Keep duplicate of device details in each port 82 structure as well - simplifies some of the 83 callback functions etc. */ 84 const struct keyspan_device_details *device_details; 85 86 /* Input endpoints and buffer for this port */ 87 struct urb *in_urbs[2]; 88 char *in_buffer[2]; 89 /* Output endpoints and buffer for this port */ 90 struct urb *out_urbs[2]; 91 char *out_buffer[2]; 92 93 /* Input ack endpoint */ 94 struct urb *inack_urb; 95 char *inack_buffer; 96 97 /* Output control endpoint */ 98 struct urb *outcont_urb; 99 char *outcont_buffer; 100 101 /* Settings for the port */ 102 int baud; 103 int old_baud; 104 unsigned int cflag; 105 unsigned int old_cflag; 106 enum {flow_none, flow_cts, flow_xon} flow_control; 107 int rts_state; /* Handshaking pins (outputs) */ 108 int dtr_state; 109 int cts_state; /* Handshaking pins (inputs) */ 110 int dsr_state; 111 int dcd_state; 112 int ri_state; 113 int break_on; 114 115 unsigned long tx_start_time[2]; 116 int resend_cont; /* need to resend control packet */ 117 }; 118 119 /* Include Keyspan message headers. All current Keyspan Adapters 120 make use of one of five message formats which are referred 121 to as USA-26, USA-28, USA-49, USA-90, USA-67 by Keyspan and 122 within this driver. */ 123 #include "keyspan_usa26msg.h" 124 #include "keyspan_usa28msg.h" 125 #include "keyspan_usa49msg.h" 126 #include "keyspan_usa90msg.h" 127 #include "keyspan_usa67msg.h" 128 129 130 module_usb_serial_driver(serial_drivers, keyspan_ids_combined); 131 132 static void keyspan_break_ctl(struct tty_struct *tty, int break_state) 133 { 134 struct usb_serial_port *port = tty->driver_data; 135 struct keyspan_port_private *p_priv; 136 137 p_priv = usb_get_serial_port_data(port); 138 139 if (break_state == -1) 140 p_priv->break_on = 1; 141 else 142 p_priv->break_on = 0; 143 144 keyspan_send_setup(port, 0); 145 } 146 147 148 static void keyspan_set_termios(struct tty_struct *tty, 149 struct usb_serial_port *port, struct ktermios *old_termios) 150 { 151 int baud_rate, device_port; 152 struct keyspan_port_private *p_priv; 153 const struct keyspan_device_details *d_details; 154 unsigned int cflag; 155 156 p_priv = usb_get_serial_port_data(port); 157 d_details = p_priv->device_details; 158 cflag = tty->termios.c_cflag; 159 device_port = port->port_number; 160 161 /* Baud rate calculation takes baud rate as an integer 162 so other rates can be generated if desired. */ 163 baud_rate = tty_get_baud_rate(tty); 164 /* If no match or invalid, don't change */ 165 if (d_details->calculate_baud_rate(port, baud_rate, d_details->baudclk, 166 NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) { 167 /* FIXME - more to do here to ensure rate changes cleanly */ 168 /* FIXME - calculate exact rate from divisor ? */ 169 p_priv->baud = baud_rate; 170 } else 171 baud_rate = tty_termios_baud_rate(old_termios); 172 173 tty_encode_baud_rate(tty, baud_rate, baud_rate); 174 /* set CTS/RTS handshake etc. */ 175 p_priv->cflag = cflag; 176 p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none; 177 178 /* Mark/Space not supported */ 179 tty->termios.c_cflag &= ~CMSPAR; 180 181 keyspan_send_setup(port, 0); 182 } 183 184 static int keyspan_tiocmget(struct tty_struct *tty) 185 { 186 struct usb_serial_port *port = tty->driver_data; 187 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port); 188 unsigned int value; 189 190 value = ((p_priv->rts_state) ? TIOCM_RTS : 0) | 191 ((p_priv->dtr_state) ? TIOCM_DTR : 0) | 192 ((p_priv->cts_state) ? TIOCM_CTS : 0) | 193 ((p_priv->dsr_state) ? TIOCM_DSR : 0) | 194 ((p_priv->dcd_state) ? TIOCM_CAR : 0) | 195 ((p_priv->ri_state) ? TIOCM_RNG : 0); 196 197 return value; 198 } 199 200 static int keyspan_tiocmset(struct tty_struct *tty, 201 unsigned int set, unsigned int clear) 202 { 203 struct usb_serial_port *port = tty->driver_data; 204 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port); 205 206 if (set & TIOCM_RTS) 207 p_priv->rts_state = 1; 208 if (set & TIOCM_DTR) 209 p_priv->dtr_state = 1; 210 if (clear & TIOCM_RTS) 211 p_priv->rts_state = 0; 212 if (clear & TIOCM_DTR) 213 p_priv->dtr_state = 0; 214 keyspan_send_setup(port, 0); 215 return 0; 216 } 217 218 /* Write function is similar for the four protocols used 219 with only a minor change for usa90 (usa19hs) required */ 220 static int keyspan_write(struct tty_struct *tty, 221 struct usb_serial_port *port, const unsigned char *buf, int count) 222 { 223 struct keyspan_port_private *p_priv; 224 const struct keyspan_device_details *d_details; 225 int flip; 226 int left, todo; 227 struct urb *this_urb; 228 int err, maxDataLen, dataOffset; 229 230 p_priv = usb_get_serial_port_data(port); 231 d_details = p_priv->device_details; 232 233 if (d_details->msg_format == msg_usa90) { 234 maxDataLen = 64; 235 dataOffset = 0; 236 } else { 237 maxDataLen = 63; 238 dataOffset = 1; 239 } 240 241 dev_dbg(&port->dev, "%s - %d chars, flip=%d\n", __func__, count, 242 p_priv->out_flip); 243 244 for (left = count; left > 0; left -= todo) { 245 todo = left; 246 if (todo > maxDataLen) 247 todo = maxDataLen; 248 249 flip = p_priv->out_flip; 250 251 /* Check we have a valid urb/endpoint before we use it... */ 252 this_urb = p_priv->out_urbs[flip]; 253 if (this_urb == NULL) { 254 /* no bulk out, so return 0 bytes written */ 255 dev_dbg(&port->dev, "%s - no output urb :(\n", __func__); 256 return count; 257 } 258 259 dev_dbg(&port->dev, "%s - endpoint %d flip %d\n", 260 __func__, usb_pipeendpoint(this_urb->pipe), flip); 261 262 if (this_urb->status == -EINPROGRESS) { 263 if (time_before(jiffies, 264 p_priv->tx_start_time[flip] + 10 * HZ)) 265 break; 266 usb_unlink_urb(this_urb); 267 break; 268 } 269 270 /* First byte in buffer is "last flag" (except for usa19hx) 271 - unused so for now so set to zero */ 272 ((char *)this_urb->transfer_buffer)[0] = 0; 273 274 memcpy(this_urb->transfer_buffer + dataOffset, buf, todo); 275 buf += todo; 276 277 /* send the data out the bulk port */ 278 this_urb->transfer_buffer_length = todo + dataOffset; 279 280 err = usb_submit_urb(this_urb, GFP_ATOMIC); 281 if (err != 0) 282 dev_dbg(&port->dev, "usb_submit_urb(write bulk) failed (%d)\n", err); 283 p_priv->tx_start_time[flip] = jiffies; 284 285 /* Flip for next time if usa26 or usa28 interface 286 (not used on usa49) */ 287 p_priv->out_flip = (flip + 1) & d_details->outdat_endp_flip; 288 } 289 290 return count - left; 291 } 292 293 static void usa26_indat_callback(struct urb *urb) 294 { 295 int i, err; 296 int endpoint; 297 struct usb_serial_port *port; 298 unsigned char *data = urb->transfer_buffer; 299 int status = urb->status; 300 301 endpoint = usb_pipeendpoint(urb->pipe); 302 303 if (status) { 304 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n", 305 __func__, status, endpoint); 306 return; 307 } 308 309 port = urb->context; 310 if (urb->actual_length) { 311 /* 0x80 bit is error flag */ 312 if ((data[0] & 0x80) == 0) { 313 /* no errors on individual bytes, only 314 possible overrun err */ 315 if (data[0] & RXERROR_OVERRUN) 316 err = TTY_OVERRUN; 317 else 318 err = 0; 319 for (i = 1; i < urb->actual_length ; ++i) 320 tty_insert_flip_char(&port->port, data[i], err); 321 } else { 322 /* some bytes had errors, every byte has status */ 323 dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__); 324 for (i = 0; i + 1 < urb->actual_length; i += 2) { 325 int stat = data[i], flag = 0; 326 if (stat & RXERROR_OVERRUN) 327 flag |= TTY_OVERRUN; 328 if (stat & RXERROR_FRAMING) 329 flag |= TTY_FRAME; 330 if (stat & RXERROR_PARITY) 331 flag |= TTY_PARITY; 332 /* XXX should handle break (0x10) */ 333 tty_insert_flip_char(&port->port, data[i+1], 334 flag); 335 } 336 } 337 tty_flip_buffer_push(&port->port); 338 } 339 340 /* Resubmit urb so we continue receiving */ 341 err = usb_submit_urb(urb, GFP_ATOMIC); 342 if (err != 0) 343 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err); 344 } 345 346 /* Outdat handling is common for all devices */ 347 static void usa2x_outdat_callback(struct urb *urb) 348 { 349 struct usb_serial_port *port; 350 struct keyspan_port_private *p_priv; 351 352 port = urb->context; 353 p_priv = usb_get_serial_port_data(port); 354 dev_dbg(&port->dev, "%s - urb %d\n", __func__, urb == p_priv->out_urbs[1]); 355 356 usb_serial_port_softint(port); 357 } 358 359 static void usa26_inack_callback(struct urb *urb) 360 { 361 } 362 363 static void usa26_outcont_callback(struct urb *urb) 364 { 365 struct usb_serial_port *port; 366 struct keyspan_port_private *p_priv; 367 368 port = urb->context; 369 p_priv = usb_get_serial_port_data(port); 370 371 if (p_priv->resend_cont) { 372 dev_dbg(&port->dev, "%s - sending setup\n", __func__); 373 keyspan_usa26_send_setup(port->serial, port, 374 p_priv->resend_cont - 1); 375 } 376 } 377 378 static void usa26_instat_callback(struct urb *urb) 379 { 380 unsigned char *data = urb->transfer_buffer; 381 struct keyspan_usa26_portStatusMessage *msg; 382 struct usb_serial *serial; 383 struct usb_serial_port *port; 384 struct keyspan_port_private *p_priv; 385 int old_dcd_state, err; 386 int status = urb->status; 387 388 serial = urb->context; 389 390 if (status) { 391 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status); 392 return; 393 } 394 if (urb->actual_length != 9) { 395 dev_dbg(&urb->dev->dev, "%s - %d byte report??\n", __func__, urb->actual_length); 396 goto exit; 397 } 398 399 msg = (struct keyspan_usa26_portStatusMessage *)data; 400 401 #if 0 402 dev_dbg(&urb->dev->dev, 403 "%s - port status: port %d cts %d dcd %d dsr %d ri %d toff %d txoff %d rxen %d cr %d", 404 __func__, msg->port, msg->hskia_cts, msg->gpia_dcd, msg->dsr, 405 msg->ri, msg->_txOff, msg->_txXoff, msg->rxEnabled, 406 msg->controlResponse); 407 #endif 408 409 /* Now do something useful with the data */ 410 411 412 /* Check port number from message and retrieve private data */ 413 if (msg->port >= serial->num_ports) { 414 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port); 415 goto exit; 416 } 417 port = serial->port[msg->port]; 418 p_priv = usb_get_serial_port_data(port); 419 420 /* Update handshaking pin state information */ 421 old_dcd_state = p_priv->dcd_state; 422 p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0); 423 p_priv->dsr_state = ((msg->dsr) ? 1 : 0); 424 p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0); 425 p_priv->ri_state = ((msg->ri) ? 1 : 0); 426 427 if (old_dcd_state != p_priv->dcd_state) 428 tty_port_tty_hangup(&port->port, true); 429 430 /* Resubmit urb so we continue receiving */ 431 err = usb_submit_urb(urb, GFP_ATOMIC); 432 if (err != 0) 433 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err); 434 exit: ; 435 } 436 437 static void usa26_glocont_callback(struct urb *urb) 438 { 439 } 440 441 442 static void usa28_indat_callback(struct urb *urb) 443 { 444 int err; 445 struct usb_serial_port *port; 446 unsigned char *data; 447 struct keyspan_port_private *p_priv; 448 int status = urb->status; 449 450 port = urb->context; 451 p_priv = usb_get_serial_port_data(port); 452 data = urb->transfer_buffer; 453 454 if (urb != p_priv->in_urbs[p_priv->in_flip]) 455 return; 456 457 do { 458 if (status) { 459 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n", 460 __func__, status, usb_pipeendpoint(urb->pipe)); 461 return; 462 } 463 464 port = urb->context; 465 p_priv = usb_get_serial_port_data(port); 466 data = urb->transfer_buffer; 467 468 if (urb->actual_length) { 469 tty_insert_flip_string(&port->port, data, 470 urb->actual_length); 471 tty_flip_buffer_push(&port->port); 472 } 473 474 /* Resubmit urb so we continue receiving */ 475 err = usb_submit_urb(urb, GFP_ATOMIC); 476 if (err != 0) 477 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", 478 __func__, err); 479 p_priv->in_flip ^= 1; 480 481 urb = p_priv->in_urbs[p_priv->in_flip]; 482 } while (urb->status != -EINPROGRESS); 483 } 484 485 static void usa28_inack_callback(struct urb *urb) 486 { 487 } 488 489 static void usa28_outcont_callback(struct urb *urb) 490 { 491 struct usb_serial_port *port; 492 struct keyspan_port_private *p_priv; 493 494 port = urb->context; 495 p_priv = usb_get_serial_port_data(port); 496 497 if (p_priv->resend_cont) { 498 dev_dbg(&port->dev, "%s - sending setup\n", __func__); 499 keyspan_usa28_send_setup(port->serial, port, 500 p_priv->resend_cont - 1); 501 } 502 } 503 504 static void usa28_instat_callback(struct urb *urb) 505 { 506 int err; 507 unsigned char *data = urb->transfer_buffer; 508 struct keyspan_usa28_portStatusMessage *msg; 509 struct usb_serial *serial; 510 struct usb_serial_port *port; 511 struct keyspan_port_private *p_priv; 512 int old_dcd_state; 513 int status = urb->status; 514 515 serial = urb->context; 516 517 if (status) { 518 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status); 519 return; 520 } 521 522 if (urb->actual_length != sizeof(struct keyspan_usa28_portStatusMessage)) { 523 dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length); 524 goto exit; 525 } 526 527 /*dev_dbg(&urb->dev->dev, "%s %12ph", __func__, data);*/ 528 529 /* Now do something useful with the data */ 530 msg = (struct keyspan_usa28_portStatusMessage *)data; 531 532 /* Check port number from message and retrieve private data */ 533 if (msg->port >= serial->num_ports) { 534 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port); 535 goto exit; 536 } 537 port = serial->port[msg->port]; 538 p_priv = usb_get_serial_port_data(port); 539 540 /* Update handshaking pin state information */ 541 old_dcd_state = p_priv->dcd_state; 542 p_priv->cts_state = ((msg->cts) ? 1 : 0); 543 p_priv->dsr_state = ((msg->dsr) ? 1 : 0); 544 p_priv->dcd_state = ((msg->dcd) ? 1 : 0); 545 p_priv->ri_state = ((msg->ri) ? 1 : 0); 546 547 if (old_dcd_state != p_priv->dcd_state && old_dcd_state) 548 tty_port_tty_hangup(&port->port, true); 549 550 /* Resubmit urb so we continue receiving */ 551 err = usb_submit_urb(urb, GFP_ATOMIC); 552 if (err != 0) 553 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err); 554 exit: ; 555 } 556 557 static void usa28_glocont_callback(struct urb *urb) 558 { 559 } 560 561 562 static void usa49_glocont_callback(struct urb *urb) 563 { 564 struct usb_serial *serial; 565 struct usb_serial_port *port; 566 struct keyspan_port_private *p_priv; 567 int i; 568 569 serial = urb->context; 570 for (i = 0; i < serial->num_ports; ++i) { 571 port = serial->port[i]; 572 p_priv = usb_get_serial_port_data(port); 573 574 if (p_priv->resend_cont) { 575 dev_dbg(&port->dev, "%s - sending setup\n", __func__); 576 keyspan_usa49_send_setup(serial, port, 577 p_priv->resend_cont - 1); 578 break; 579 } 580 } 581 } 582 583 /* This is actually called glostat in the Keyspan 584 doco */ 585 static void usa49_instat_callback(struct urb *urb) 586 { 587 int err; 588 unsigned char *data = urb->transfer_buffer; 589 struct keyspan_usa49_portStatusMessage *msg; 590 struct usb_serial *serial; 591 struct usb_serial_port *port; 592 struct keyspan_port_private *p_priv; 593 int old_dcd_state; 594 int status = urb->status; 595 596 serial = urb->context; 597 598 if (status) { 599 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status); 600 return; 601 } 602 603 if (urb->actual_length != 604 sizeof(struct keyspan_usa49_portStatusMessage)) { 605 dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length); 606 goto exit; 607 } 608 609 /*dev_dbg(&urb->dev->dev, "%s: %11ph", __func__, data);*/ 610 611 /* Now do something useful with the data */ 612 msg = (struct keyspan_usa49_portStatusMessage *)data; 613 614 /* Check port number from message and retrieve private data */ 615 if (msg->portNumber >= serial->num_ports) { 616 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", 617 __func__, msg->portNumber); 618 goto exit; 619 } 620 port = serial->port[msg->portNumber]; 621 p_priv = usb_get_serial_port_data(port); 622 623 /* Update handshaking pin state information */ 624 old_dcd_state = p_priv->dcd_state; 625 p_priv->cts_state = ((msg->cts) ? 1 : 0); 626 p_priv->dsr_state = ((msg->dsr) ? 1 : 0); 627 p_priv->dcd_state = ((msg->dcd) ? 1 : 0); 628 p_priv->ri_state = ((msg->ri) ? 1 : 0); 629 630 if (old_dcd_state != p_priv->dcd_state && old_dcd_state) 631 tty_port_tty_hangup(&port->port, true); 632 633 /* Resubmit urb so we continue receiving */ 634 err = usb_submit_urb(urb, GFP_ATOMIC); 635 if (err != 0) 636 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err); 637 exit: ; 638 } 639 640 static void usa49_inack_callback(struct urb *urb) 641 { 642 } 643 644 static void usa49_indat_callback(struct urb *urb) 645 { 646 int i, err; 647 int endpoint; 648 struct usb_serial_port *port; 649 unsigned char *data = urb->transfer_buffer; 650 int status = urb->status; 651 652 endpoint = usb_pipeendpoint(urb->pipe); 653 654 if (status) { 655 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n", 656 __func__, status, endpoint); 657 return; 658 } 659 660 port = urb->context; 661 if (urb->actual_length) { 662 /* 0x80 bit is error flag */ 663 if ((data[0] & 0x80) == 0) { 664 /* no error on any byte */ 665 tty_insert_flip_string(&port->port, data + 1, 666 urb->actual_length - 1); 667 } else { 668 /* some bytes had errors, every byte has status */ 669 for (i = 0; i + 1 < urb->actual_length; i += 2) { 670 int stat = data[i], flag = 0; 671 if (stat & RXERROR_OVERRUN) 672 flag |= TTY_OVERRUN; 673 if (stat & RXERROR_FRAMING) 674 flag |= TTY_FRAME; 675 if (stat & RXERROR_PARITY) 676 flag |= TTY_PARITY; 677 /* XXX should handle break (0x10) */ 678 tty_insert_flip_char(&port->port, data[i+1], 679 flag); 680 } 681 } 682 tty_flip_buffer_push(&port->port); 683 } 684 685 /* Resubmit urb so we continue receiving */ 686 err = usb_submit_urb(urb, GFP_ATOMIC); 687 if (err != 0) 688 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err); 689 } 690 691 static void usa49wg_indat_callback(struct urb *urb) 692 { 693 int i, len, x, err; 694 struct usb_serial *serial; 695 struct usb_serial_port *port; 696 unsigned char *data = urb->transfer_buffer; 697 int status = urb->status; 698 699 serial = urb->context; 700 701 if (status) { 702 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status); 703 return; 704 } 705 706 /* inbound data is in the form P#, len, status, data */ 707 i = 0; 708 len = 0; 709 710 while (i < urb->actual_length) { 711 712 /* Check port number from message */ 713 if (data[i] >= serial->num_ports) { 714 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", 715 __func__, data[i]); 716 return; 717 } 718 port = serial->port[data[i++]]; 719 len = data[i++]; 720 721 /* 0x80 bit is error flag */ 722 if ((data[i] & 0x80) == 0) { 723 /* no error on any byte */ 724 i++; 725 for (x = 1; x < len && i < urb->actual_length; ++x) 726 tty_insert_flip_char(&port->port, 727 data[i++], 0); 728 } else { 729 /* 730 * some bytes had errors, every byte has status 731 */ 732 for (x = 0; x + 1 < len && 733 i + 1 < urb->actual_length; x += 2) { 734 int stat = data[i], flag = 0; 735 736 if (stat & RXERROR_OVERRUN) 737 flag |= TTY_OVERRUN; 738 if (stat & RXERROR_FRAMING) 739 flag |= TTY_FRAME; 740 if (stat & RXERROR_PARITY) 741 flag |= TTY_PARITY; 742 /* XXX should handle break (0x10) */ 743 tty_insert_flip_char(&port->port, data[i+1], 744 flag); 745 i += 2; 746 } 747 } 748 tty_flip_buffer_push(&port->port); 749 } 750 751 /* Resubmit urb so we continue receiving */ 752 err = usb_submit_urb(urb, GFP_ATOMIC); 753 if (err != 0) 754 dev_dbg(&urb->dev->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err); 755 } 756 757 /* not used, usa-49 doesn't have per-port control endpoints */ 758 static void usa49_outcont_callback(struct urb *urb) 759 { 760 } 761 762 static void usa90_indat_callback(struct urb *urb) 763 { 764 int i, err; 765 int endpoint; 766 struct usb_serial_port *port; 767 struct keyspan_port_private *p_priv; 768 unsigned char *data = urb->transfer_buffer; 769 int status = urb->status; 770 771 endpoint = usb_pipeendpoint(urb->pipe); 772 773 if (status) { 774 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x on endpoint %d.\n", 775 __func__, status, endpoint); 776 return; 777 } 778 779 port = urb->context; 780 p_priv = usb_get_serial_port_data(port); 781 782 if (urb->actual_length) { 783 /* if current mode is DMA, looks like usa28 format 784 otherwise looks like usa26 data format */ 785 786 if (p_priv->baud > 57600) 787 tty_insert_flip_string(&port->port, data, 788 urb->actual_length); 789 else { 790 /* 0x80 bit is error flag */ 791 if ((data[0] & 0x80) == 0) { 792 /* no errors on individual bytes, only 793 possible overrun err*/ 794 if (data[0] & RXERROR_OVERRUN) 795 err = TTY_OVERRUN; 796 else 797 err = 0; 798 for (i = 1; i < urb->actual_length ; ++i) 799 tty_insert_flip_char(&port->port, 800 data[i], err); 801 } else { 802 /* some bytes had errors, every byte has status */ 803 dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__); 804 for (i = 0; i + 1 < urb->actual_length; i += 2) { 805 int stat = data[i], flag = 0; 806 if (stat & RXERROR_OVERRUN) 807 flag |= TTY_OVERRUN; 808 if (stat & RXERROR_FRAMING) 809 flag |= TTY_FRAME; 810 if (stat & RXERROR_PARITY) 811 flag |= TTY_PARITY; 812 /* XXX should handle break (0x10) */ 813 tty_insert_flip_char(&port->port, 814 data[i+1], flag); 815 } 816 } 817 } 818 tty_flip_buffer_push(&port->port); 819 } 820 821 /* Resubmit urb so we continue receiving */ 822 err = usb_submit_urb(urb, GFP_ATOMIC); 823 if (err != 0) 824 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err); 825 } 826 827 828 static void usa90_instat_callback(struct urb *urb) 829 { 830 unsigned char *data = urb->transfer_buffer; 831 struct keyspan_usa90_portStatusMessage *msg; 832 struct usb_serial *serial; 833 struct usb_serial_port *port; 834 struct keyspan_port_private *p_priv; 835 int old_dcd_state, err; 836 int status = urb->status; 837 838 serial = urb->context; 839 840 if (status) { 841 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status); 842 return; 843 } 844 if (urb->actual_length < 14) { 845 dev_dbg(&urb->dev->dev, "%s - %d byte report??\n", __func__, urb->actual_length); 846 goto exit; 847 } 848 849 msg = (struct keyspan_usa90_portStatusMessage *)data; 850 851 /* Now do something useful with the data */ 852 853 port = serial->port[0]; 854 p_priv = usb_get_serial_port_data(port); 855 856 /* Update handshaking pin state information */ 857 old_dcd_state = p_priv->dcd_state; 858 p_priv->cts_state = ((msg->cts) ? 1 : 0); 859 p_priv->dsr_state = ((msg->dsr) ? 1 : 0); 860 p_priv->dcd_state = ((msg->dcd) ? 1 : 0); 861 p_priv->ri_state = ((msg->ri) ? 1 : 0); 862 863 if (old_dcd_state != p_priv->dcd_state && old_dcd_state) 864 tty_port_tty_hangup(&port->port, true); 865 866 /* Resubmit urb so we continue receiving */ 867 err = usb_submit_urb(urb, GFP_ATOMIC); 868 if (err != 0) 869 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err); 870 exit: 871 ; 872 } 873 874 static void usa90_outcont_callback(struct urb *urb) 875 { 876 struct usb_serial_port *port; 877 struct keyspan_port_private *p_priv; 878 879 port = urb->context; 880 p_priv = usb_get_serial_port_data(port); 881 882 if (p_priv->resend_cont) { 883 dev_dbg(&urb->dev->dev, "%s - sending setup\n", __func__); 884 keyspan_usa90_send_setup(port->serial, port, 885 p_priv->resend_cont - 1); 886 } 887 } 888 889 /* Status messages from the 28xg */ 890 static void usa67_instat_callback(struct urb *urb) 891 { 892 int err; 893 unsigned char *data = urb->transfer_buffer; 894 struct keyspan_usa67_portStatusMessage *msg; 895 struct usb_serial *serial; 896 struct usb_serial_port *port; 897 struct keyspan_port_private *p_priv; 898 int old_dcd_state; 899 int status = urb->status; 900 901 serial = urb->context; 902 903 if (status) { 904 dev_dbg(&urb->dev->dev, "%s - nonzero status: %x\n", __func__, status); 905 return; 906 } 907 908 if (urb->actual_length != 909 sizeof(struct keyspan_usa67_portStatusMessage)) { 910 dev_dbg(&urb->dev->dev, "%s - bad length %d\n", __func__, urb->actual_length); 911 return; 912 } 913 914 915 /* Now do something useful with the data */ 916 msg = (struct keyspan_usa67_portStatusMessage *)data; 917 918 /* Check port number from message and retrieve private data */ 919 if (msg->port >= serial->num_ports) { 920 dev_dbg(&urb->dev->dev, "%s - Unexpected port number %d\n", __func__, msg->port); 921 return; 922 } 923 924 port = serial->port[msg->port]; 925 p_priv = usb_get_serial_port_data(port); 926 927 /* Update handshaking pin state information */ 928 old_dcd_state = p_priv->dcd_state; 929 p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0); 930 p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0); 931 932 if (old_dcd_state != p_priv->dcd_state && old_dcd_state) 933 tty_port_tty_hangup(&port->port, true); 934 935 /* Resubmit urb so we continue receiving */ 936 err = usb_submit_urb(urb, GFP_ATOMIC); 937 if (err != 0) 938 dev_dbg(&port->dev, "%s - resubmit read urb failed. (%d)\n", __func__, err); 939 } 940 941 static void usa67_glocont_callback(struct urb *urb) 942 { 943 struct usb_serial *serial; 944 struct usb_serial_port *port; 945 struct keyspan_port_private *p_priv; 946 int i; 947 948 serial = urb->context; 949 for (i = 0; i < serial->num_ports; ++i) { 950 port = serial->port[i]; 951 p_priv = usb_get_serial_port_data(port); 952 953 if (p_priv->resend_cont) { 954 dev_dbg(&port->dev, "%s - sending setup\n", __func__); 955 keyspan_usa67_send_setup(serial, port, 956 p_priv->resend_cont - 1); 957 break; 958 } 959 } 960 } 961 962 static int keyspan_write_room(struct tty_struct *tty) 963 { 964 struct usb_serial_port *port = tty->driver_data; 965 struct keyspan_port_private *p_priv; 966 const struct keyspan_device_details *d_details; 967 int flip; 968 int data_len; 969 struct urb *this_urb; 970 971 p_priv = usb_get_serial_port_data(port); 972 d_details = p_priv->device_details; 973 974 /* FIXME: locking */ 975 if (d_details->msg_format == msg_usa90) 976 data_len = 64; 977 else 978 data_len = 63; 979 980 flip = p_priv->out_flip; 981 982 /* Check both endpoints to see if any are available. */ 983 this_urb = p_priv->out_urbs[flip]; 984 if (this_urb != NULL) { 985 if (this_urb->status != -EINPROGRESS) 986 return data_len; 987 flip = (flip + 1) & d_details->outdat_endp_flip; 988 this_urb = p_priv->out_urbs[flip]; 989 if (this_urb != NULL) { 990 if (this_urb->status != -EINPROGRESS) 991 return data_len; 992 } 993 } 994 return 0; 995 } 996 997 998 static int keyspan_open(struct tty_struct *tty, struct usb_serial_port *port) 999 { 1000 struct keyspan_port_private *p_priv; 1001 const struct keyspan_device_details *d_details; 1002 int i, err; 1003 int baud_rate, device_port; 1004 struct urb *urb; 1005 unsigned int cflag = 0; 1006 1007 p_priv = usb_get_serial_port_data(port); 1008 d_details = p_priv->device_details; 1009 1010 /* Set some sane defaults */ 1011 p_priv->rts_state = 1; 1012 p_priv->dtr_state = 1; 1013 p_priv->baud = 9600; 1014 1015 /* force baud and lcr to be set on open */ 1016 p_priv->old_baud = 0; 1017 p_priv->old_cflag = 0; 1018 1019 p_priv->out_flip = 0; 1020 p_priv->in_flip = 0; 1021 1022 /* Reset low level data toggle and start reading from endpoints */ 1023 for (i = 0; i < 2; i++) { 1024 urb = p_priv->in_urbs[i]; 1025 if (urb == NULL) 1026 continue; 1027 1028 /* make sure endpoint data toggle is synchronized 1029 with the device */ 1030 usb_clear_halt(urb->dev, urb->pipe); 1031 err = usb_submit_urb(urb, GFP_KERNEL); 1032 if (err != 0) 1033 dev_dbg(&port->dev, "%s - submit urb %d failed (%d)\n", __func__, i, err); 1034 } 1035 1036 /* Reset low level data toggle on out endpoints */ 1037 for (i = 0; i < 2; i++) { 1038 urb = p_priv->out_urbs[i]; 1039 if (urb == NULL) 1040 continue; 1041 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), 1042 usb_pipeout(urb->pipe), 0); */ 1043 } 1044 1045 /* get the terminal config for the setup message now so we don't 1046 * need to send 2 of them */ 1047 1048 device_port = port->port_number; 1049 if (tty) { 1050 cflag = tty->termios.c_cflag; 1051 /* Baud rate calculation takes baud rate as an integer 1052 so other rates can be generated if desired. */ 1053 baud_rate = tty_get_baud_rate(tty); 1054 /* If no match or invalid, leave as default */ 1055 if (baud_rate >= 0 1056 && d_details->calculate_baud_rate(port, baud_rate, d_details->baudclk, 1057 NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) { 1058 p_priv->baud = baud_rate; 1059 } 1060 } 1061 /* set CTS/RTS handshake etc. */ 1062 p_priv->cflag = cflag; 1063 p_priv->flow_control = (cflag & CRTSCTS) ? flow_cts : flow_none; 1064 1065 keyspan_send_setup(port, 1); 1066 /* mdelay(100); */ 1067 /* keyspan_set_termios(port, NULL); */ 1068 1069 return 0; 1070 } 1071 1072 static inline void stop_urb(struct urb *urb) 1073 { 1074 if (urb && urb->status == -EINPROGRESS) 1075 usb_kill_urb(urb); 1076 } 1077 1078 static void keyspan_dtr_rts(struct usb_serial_port *port, int on) 1079 { 1080 struct keyspan_port_private *p_priv = usb_get_serial_port_data(port); 1081 1082 p_priv->rts_state = on; 1083 p_priv->dtr_state = on; 1084 keyspan_send_setup(port, 0); 1085 } 1086 1087 static void keyspan_close(struct usb_serial_port *port) 1088 { 1089 int i; 1090 struct keyspan_port_private *p_priv; 1091 1092 p_priv = usb_get_serial_port_data(port); 1093 1094 p_priv->rts_state = 0; 1095 p_priv->dtr_state = 0; 1096 1097 keyspan_send_setup(port, 2); 1098 /* pilot-xfer seems to work best with this delay */ 1099 mdelay(100); 1100 1101 p_priv->out_flip = 0; 1102 p_priv->in_flip = 0; 1103 1104 stop_urb(p_priv->inack_urb); 1105 for (i = 0; i < 2; i++) { 1106 stop_urb(p_priv->in_urbs[i]); 1107 stop_urb(p_priv->out_urbs[i]); 1108 } 1109 } 1110 1111 /* download the firmware to a pre-renumeration device */ 1112 static int keyspan_fake_startup(struct usb_serial *serial) 1113 { 1114 char *fw_name; 1115 1116 dev_dbg(&serial->dev->dev, "Keyspan startup version %04x product %04x\n", 1117 le16_to_cpu(serial->dev->descriptor.bcdDevice), 1118 le16_to_cpu(serial->dev->descriptor.idProduct)); 1119 1120 if ((le16_to_cpu(serial->dev->descriptor.bcdDevice) & 0x8000) 1121 != 0x8000) { 1122 dev_dbg(&serial->dev->dev, "Firmware already loaded. Quitting.\n"); 1123 return 1; 1124 } 1125 1126 /* Select firmware image on the basis of idProduct */ 1127 switch (le16_to_cpu(serial->dev->descriptor.idProduct)) { 1128 case keyspan_usa28_pre_product_id: 1129 fw_name = "keyspan/usa28.fw"; 1130 break; 1131 1132 case keyspan_usa28x_pre_product_id: 1133 fw_name = "keyspan/usa28x.fw"; 1134 break; 1135 1136 case keyspan_usa28xa_pre_product_id: 1137 fw_name = "keyspan/usa28xa.fw"; 1138 break; 1139 1140 case keyspan_usa28xb_pre_product_id: 1141 fw_name = "keyspan/usa28xb.fw"; 1142 break; 1143 1144 case keyspan_usa19_pre_product_id: 1145 fw_name = "keyspan/usa19.fw"; 1146 break; 1147 1148 case keyspan_usa19qi_pre_product_id: 1149 fw_name = "keyspan/usa19qi.fw"; 1150 break; 1151 1152 case keyspan_mpr_pre_product_id: 1153 fw_name = "keyspan/mpr.fw"; 1154 break; 1155 1156 case keyspan_usa19qw_pre_product_id: 1157 fw_name = "keyspan/usa19qw.fw"; 1158 break; 1159 1160 case keyspan_usa18x_pre_product_id: 1161 fw_name = "keyspan/usa18x.fw"; 1162 break; 1163 1164 case keyspan_usa19w_pre_product_id: 1165 fw_name = "keyspan/usa19w.fw"; 1166 break; 1167 1168 case keyspan_usa49w_pre_product_id: 1169 fw_name = "keyspan/usa49w.fw"; 1170 break; 1171 1172 case keyspan_usa49wlc_pre_product_id: 1173 fw_name = "keyspan/usa49wlc.fw"; 1174 break; 1175 1176 default: 1177 dev_err(&serial->dev->dev, "Unknown product ID (%04x)\n", 1178 le16_to_cpu(serial->dev->descriptor.idProduct)); 1179 return 1; 1180 } 1181 1182 dev_dbg(&serial->dev->dev, "Uploading Keyspan %s firmware.\n", fw_name); 1183 1184 if (ezusb_fx1_ihex_firmware_download(serial->dev, fw_name) < 0) { 1185 dev_err(&serial->dev->dev, "failed to load firmware \"%s\"\n", 1186 fw_name); 1187 return -ENOENT; 1188 } 1189 1190 /* after downloading firmware Renumeration will occur in a 1191 moment and the new device will bind to the real driver */ 1192 1193 /* we don't want this device to have a driver assigned to it. */ 1194 return 1; 1195 } 1196 1197 /* Helper functions used by keyspan_setup_urbs */ 1198 static struct usb_endpoint_descriptor const *find_ep(struct usb_serial const *serial, 1199 int endpoint) 1200 { 1201 struct usb_host_interface *iface_desc; 1202 struct usb_endpoint_descriptor *ep; 1203 int i; 1204 1205 iface_desc = serial->interface->cur_altsetting; 1206 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { 1207 ep = &iface_desc->endpoint[i].desc; 1208 if (ep->bEndpointAddress == endpoint) 1209 return ep; 1210 } 1211 dev_warn(&serial->interface->dev, "found no endpoint descriptor for " 1212 "endpoint %x\n", endpoint); 1213 return NULL; 1214 } 1215 1216 static struct urb *keyspan_setup_urb(struct usb_serial *serial, int endpoint, 1217 int dir, void *ctx, char *buf, int len, 1218 void (*callback)(struct urb *)) 1219 { 1220 struct urb *urb; 1221 struct usb_endpoint_descriptor const *ep_desc; 1222 char const *ep_type_name; 1223 1224 if (endpoint == -1) 1225 return NULL; /* endpoint not needed */ 1226 1227 dev_dbg(&serial->interface->dev, "%s - alloc for endpoint %d.\n", __func__, endpoint); 1228 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */ 1229 if (!urb) 1230 return NULL; 1231 1232 if (endpoint == 0) { 1233 /* control EP filled in when used */ 1234 return urb; 1235 } 1236 1237 ep_desc = find_ep(serial, endpoint); 1238 if (!ep_desc) { 1239 /* leak the urb, something's wrong and the callers don't care */ 1240 return urb; 1241 } 1242 if (usb_endpoint_xfer_int(ep_desc)) { 1243 ep_type_name = "INT"; 1244 usb_fill_int_urb(urb, serial->dev, 1245 usb_sndintpipe(serial->dev, endpoint) | dir, 1246 buf, len, callback, ctx, 1247 ep_desc->bInterval); 1248 } else if (usb_endpoint_xfer_bulk(ep_desc)) { 1249 ep_type_name = "BULK"; 1250 usb_fill_bulk_urb(urb, serial->dev, 1251 usb_sndbulkpipe(serial->dev, endpoint) | dir, 1252 buf, len, callback, ctx); 1253 } else { 1254 dev_warn(&serial->interface->dev, 1255 "unsupported endpoint type %x\n", 1256 usb_endpoint_type(ep_desc)); 1257 usb_free_urb(urb); 1258 return NULL; 1259 } 1260 1261 dev_dbg(&serial->interface->dev, "%s - using urb %p for %s endpoint %x\n", 1262 __func__, urb, ep_type_name, endpoint); 1263 return urb; 1264 } 1265 1266 static struct callbacks { 1267 void (*instat_callback)(struct urb *); 1268 void (*glocont_callback)(struct urb *); 1269 void (*indat_callback)(struct urb *); 1270 void (*outdat_callback)(struct urb *); 1271 void (*inack_callback)(struct urb *); 1272 void (*outcont_callback)(struct urb *); 1273 } keyspan_callbacks[] = { 1274 { 1275 /* msg_usa26 callbacks */ 1276 .instat_callback = usa26_instat_callback, 1277 .glocont_callback = usa26_glocont_callback, 1278 .indat_callback = usa26_indat_callback, 1279 .outdat_callback = usa2x_outdat_callback, 1280 .inack_callback = usa26_inack_callback, 1281 .outcont_callback = usa26_outcont_callback, 1282 }, { 1283 /* msg_usa28 callbacks */ 1284 .instat_callback = usa28_instat_callback, 1285 .glocont_callback = usa28_glocont_callback, 1286 .indat_callback = usa28_indat_callback, 1287 .outdat_callback = usa2x_outdat_callback, 1288 .inack_callback = usa28_inack_callback, 1289 .outcont_callback = usa28_outcont_callback, 1290 }, { 1291 /* msg_usa49 callbacks */ 1292 .instat_callback = usa49_instat_callback, 1293 .glocont_callback = usa49_glocont_callback, 1294 .indat_callback = usa49_indat_callback, 1295 .outdat_callback = usa2x_outdat_callback, 1296 .inack_callback = usa49_inack_callback, 1297 .outcont_callback = usa49_outcont_callback, 1298 }, { 1299 /* msg_usa90 callbacks */ 1300 .instat_callback = usa90_instat_callback, 1301 .glocont_callback = usa28_glocont_callback, 1302 .indat_callback = usa90_indat_callback, 1303 .outdat_callback = usa2x_outdat_callback, 1304 .inack_callback = usa28_inack_callback, 1305 .outcont_callback = usa90_outcont_callback, 1306 }, { 1307 /* msg_usa67 callbacks */ 1308 .instat_callback = usa67_instat_callback, 1309 .glocont_callback = usa67_glocont_callback, 1310 .indat_callback = usa26_indat_callback, 1311 .outdat_callback = usa2x_outdat_callback, 1312 .inack_callback = usa26_inack_callback, 1313 .outcont_callback = usa26_outcont_callback, 1314 } 1315 }; 1316 1317 /* Generic setup urbs function that uses 1318 data in device_details */ 1319 static void keyspan_setup_urbs(struct usb_serial *serial) 1320 { 1321 struct keyspan_serial_private *s_priv; 1322 const struct keyspan_device_details *d_details; 1323 struct callbacks *cback; 1324 1325 s_priv = usb_get_serial_data(serial); 1326 d_details = s_priv->device_details; 1327 1328 /* Setup values for the various callback routines */ 1329 cback = &keyspan_callbacks[d_details->msg_format]; 1330 1331 /* Allocate and set up urbs for each one that is in use, 1332 starting with instat endpoints */ 1333 s_priv->instat_urb = keyspan_setup_urb 1334 (serial, d_details->instat_endpoint, USB_DIR_IN, 1335 serial, s_priv->instat_buf, INSTAT_BUFLEN, 1336 cback->instat_callback); 1337 1338 s_priv->indat_urb = keyspan_setup_urb 1339 (serial, d_details->indat_endpoint, USB_DIR_IN, 1340 serial, s_priv->indat_buf, INDAT49W_BUFLEN, 1341 usa49wg_indat_callback); 1342 1343 s_priv->glocont_urb = keyspan_setup_urb 1344 (serial, d_details->glocont_endpoint, USB_DIR_OUT, 1345 serial, s_priv->glocont_buf, GLOCONT_BUFLEN, 1346 cback->glocont_callback); 1347 } 1348 1349 /* usa19 function doesn't require prescaler */ 1350 static int keyspan_usa19_calc_baud(struct usb_serial_port *port, 1351 u32 baud_rate, u32 baudclk, u8 *rate_hi, 1352 u8 *rate_low, u8 *prescaler, int portnum) 1353 { 1354 u32 b16, /* baud rate times 16 (actual rate used internally) */ 1355 div, /* divisor */ 1356 cnt; /* inverse of divisor (programmed into 8051) */ 1357 1358 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate); 1359 1360 /* prevent divide by zero... */ 1361 b16 = baud_rate * 16L; 1362 if (b16 == 0) 1363 return KEYSPAN_INVALID_BAUD_RATE; 1364 /* Any "standard" rate over 57k6 is marginal on the USA-19 1365 as we run out of divisor resolution. */ 1366 if (baud_rate > 57600) 1367 return KEYSPAN_INVALID_BAUD_RATE; 1368 1369 /* calculate the divisor and the counter (its inverse) */ 1370 div = baudclk / b16; 1371 if (div == 0) 1372 return KEYSPAN_INVALID_BAUD_RATE; 1373 else 1374 cnt = 0 - div; 1375 1376 if (div > 0xffff) 1377 return KEYSPAN_INVALID_BAUD_RATE; 1378 1379 /* return the counter values if non-null */ 1380 if (rate_low) 1381 *rate_low = (u8) (cnt & 0xff); 1382 if (rate_hi) 1383 *rate_hi = (u8) ((cnt >> 8) & 0xff); 1384 if (rate_low && rate_hi) 1385 dev_dbg(&port->dev, "%s - %d %02x %02x.\n", 1386 __func__, baud_rate, *rate_hi, *rate_low); 1387 return KEYSPAN_BAUD_RATE_OK; 1388 } 1389 1390 /* usa19hs function doesn't require prescaler */ 1391 static int keyspan_usa19hs_calc_baud(struct usb_serial_port *port, 1392 u32 baud_rate, u32 baudclk, u8 *rate_hi, 1393 u8 *rate_low, u8 *prescaler, int portnum) 1394 { 1395 u32 b16, /* baud rate times 16 (actual rate used internally) */ 1396 div; /* divisor */ 1397 1398 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate); 1399 1400 /* prevent divide by zero... */ 1401 b16 = baud_rate * 16L; 1402 if (b16 == 0) 1403 return KEYSPAN_INVALID_BAUD_RATE; 1404 1405 /* calculate the divisor */ 1406 div = baudclk / b16; 1407 if (div == 0) 1408 return KEYSPAN_INVALID_BAUD_RATE; 1409 1410 if (div > 0xffff) 1411 return KEYSPAN_INVALID_BAUD_RATE; 1412 1413 /* return the counter values if non-null */ 1414 if (rate_low) 1415 *rate_low = (u8) (div & 0xff); 1416 1417 if (rate_hi) 1418 *rate_hi = (u8) ((div >> 8) & 0xff); 1419 1420 if (rate_low && rate_hi) 1421 dev_dbg(&port->dev, "%s - %d %02x %02x.\n", 1422 __func__, baud_rate, *rate_hi, *rate_low); 1423 1424 return KEYSPAN_BAUD_RATE_OK; 1425 } 1426 1427 static int keyspan_usa19w_calc_baud(struct usb_serial_port *port, 1428 u32 baud_rate, u32 baudclk, u8 *rate_hi, 1429 u8 *rate_low, u8 *prescaler, int portnum) 1430 { 1431 u32 b16, /* baud rate times 16 (actual rate used internally) */ 1432 clk, /* clock with 13/8 prescaler */ 1433 div, /* divisor using 13/8 prescaler */ 1434 res, /* resulting baud rate using 13/8 prescaler */ 1435 diff, /* error using 13/8 prescaler */ 1436 smallest_diff; 1437 u8 best_prescaler; 1438 int i; 1439 1440 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate); 1441 1442 /* prevent divide by zero */ 1443 b16 = baud_rate * 16L; 1444 if (b16 == 0) 1445 return KEYSPAN_INVALID_BAUD_RATE; 1446 1447 /* Calculate prescaler by trying them all and looking 1448 for best fit */ 1449 1450 /* start with largest possible difference */ 1451 smallest_diff = 0xffffffff; 1452 1453 /* 0 is an invalid prescaler, used as a flag */ 1454 best_prescaler = 0; 1455 1456 for (i = 8; i <= 0xff; ++i) { 1457 clk = (baudclk * 8) / (u32) i; 1458 1459 div = clk / b16; 1460 if (div == 0) 1461 continue; 1462 1463 res = clk / div; 1464 diff = (res > b16) ? (res-b16) : (b16-res); 1465 1466 if (diff < smallest_diff) { 1467 best_prescaler = i; 1468 smallest_diff = diff; 1469 } 1470 } 1471 1472 if (best_prescaler == 0) 1473 return KEYSPAN_INVALID_BAUD_RATE; 1474 1475 clk = (baudclk * 8) / (u32) best_prescaler; 1476 div = clk / b16; 1477 1478 /* return the divisor and prescaler if non-null */ 1479 if (rate_low) 1480 *rate_low = (u8) (div & 0xff); 1481 if (rate_hi) 1482 *rate_hi = (u8) ((div >> 8) & 0xff); 1483 if (prescaler) { 1484 *prescaler = best_prescaler; 1485 /* dev_dbg(&port->dev, "%s - %d %d\n", __func__, *prescaler, div); */ 1486 } 1487 return KEYSPAN_BAUD_RATE_OK; 1488 } 1489 1490 /* USA-28 supports different maximum baud rates on each port */ 1491 static int keyspan_usa28_calc_baud(struct usb_serial_port *port, 1492 u32 baud_rate, u32 baudclk, u8 *rate_hi, 1493 u8 *rate_low, u8 *prescaler, int portnum) 1494 { 1495 u32 b16, /* baud rate times 16 (actual rate used internally) */ 1496 div, /* divisor */ 1497 cnt; /* inverse of divisor (programmed into 8051) */ 1498 1499 dev_dbg(&port->dev, "%s - %d.\n", __func__, baud_rate); 1500 1501 /* prevent divide by zero */ 1502 b16 = baud_rate * 16L; 1503 if (b16 == 0) 1504 return KEYSPAN_INVALID_BAUD_RATE; 1505 1506 /* calculate the divisor and the counter (its inverse) */ 1507 div = KEYSPAN_USA28_BAUDCLK / b16; 1508 if (div == 0) 1509 return KEYSPAN_INVALID_BAUD_RATE; 1510 else 1511 cnt = 0 - div; 1512 1513 /* check for out of range, based on portnum, 1514 and return result */ 1515 if (portnum == 0) { 1516 if (div > 0xffff) 1517 return KEYSPAN_INVALID_BAUD_RATE; 1518 } else { 1519 if (portnum == 1) { 1520 if (div > 0xff) 1521 return KEYSPAN_INVALID_BAUD_RATE; 1522 } else 1523 return KEYSPAN_INVALID_BAUD_RATE; 1524 } 1525 1526 /* return the counter values if not NULL 1527 (port 1 will ignore retHi) */ 1528 if (rate_low) 1529 *rate_low = (u8) (cnt & 0xff); 1530 if (rate_hi) 1531 *rate_hi = (u8) ((cnt >> 8) & 0xff); 1532 dev_dbg(&port->dev, "%s - %d OK.\n", __func__, baud_rate); 1533 return KEYSPAN_BAUD_RATE_OK; 1534 } 1535 1536 static int keyspan_usa26_send_setup(struct usb_serial *serial, 1537 struct usb_serial_port *port, 1538 int reset_port) 1539 { 1540 struct keyspan_usa26_portControlMessage msg; 1541 struct keyspan_serial_private *s_priv; 1542 struct keyspan_port_private *p_priv; 1543 const struct keyspan_device_details *d_details; 1544 struct urb *this_urb; 1545 int device_port, err; 1546 1547 dev_dbg(&port->dev, "%s reset=%d\n", __func__, reset_port); 1548 1549 s_priv = usb_get_serial_data(serial); 1550 p_priv = usb_get_serial_port_data(port); 1551 d_details = s_priv->device_details; 1552 device_port = port->port_number; 1553 1554 this_urb = p_priv->outcont_urb; 1555 1556 dev_dbg(&port->dev, "%s - endpoint %d\n", __func__, usb_pipeendpoint(this_urb->pipe)); 1557 1558 /* Make sure we have an urb then send the message */ 1559 if (this_urb == NULL) { 1560 dev_dbg(&port->dev, "%s - oops no urb.\n", __func__); 1561 return -1; 1562 } 1563 1564 /* Save reset port val for resend. 1565 Don't overwrite resend for open/close condition. */ 1566 if ((reset_port + 1) > p_priv->resend_cont) 1567 p_priv->resend_cont = reset_port + 1; 1568 if (this_urb->status == -EINPROGRESS) { 1569 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */ 1570 mdelay(5); 1571 return -1; 1572 } 1573 1574 memset(&msg, 0, sizeof(struct keyspan_usa26_portControlMessage)); 1575 1576 /* Only set baud rate if it's changed */ 1577 if (p_priv->old_baud != p_priv->baud) { 1578 p_priv->old_baud = p_priv->baud; 1579 msg.setClocking = 0xff; 1580 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk, 1581 &msg.baudHi, &msg.baudLo, &msg.prescaler, 1582 device_port) == KEYSPAN_INVALID_BAUD_RATE) { 1583 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n", 1584 __func__, p_priv->baud); 1585 msg.baudLo = 0; 1586 msg.baudHi = 125; /* Values for 9600 baud */ 1587 msg.prescaler = 10; 1588 } 1589 msg.setPrescaler = 0xff; 1590 } 1591 1592 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1; 1593 switch (p_priv->cflag & CSIZE) { 1594 case CS5: 1595 msg.lcr |= USA_DATABITS_5; 1596 break; 1597 case CS6: 1598 msg.lcr |= USA_DATABITS_6; 1599 break; 1600 case CS7: 1601 msg.lcr |= USA_DATABITS_7; 1602 break; 1603 case CS8: 1604 msg.lcr |= USA_DATABITS_8; 1605 break; 1606 } 1607 if (p_priv->cflag & PARENB) { 1608 /* note USA_PARITY_NONE == 0 */ 1609 msg.lcr |= (p_priv->cflag & PARODD) ? 1610 USA_PARITY_ODD : USA_PARITY_EVEN; 1611 } 1612 msg.setLcr = 0xff; 1613 1614 msg.ctsFlowControl = (p_priv->flow_control == flow_cts); 1615 msg.xonFlowControl = 0; 1616 msg.setFlowControl = 0xff; 1617 msg.forwardingLength = 16; 1618 msg.xonChar = 17; 1619 msg.xoffChar = 19; 1620 1621 /* Opening port */ 1622 if (reset_port == 1) { 1623 msg._txOn = 1; 1624 msg._txOff = 0; 1625 msg.txFlush = 0; 1626 msg.txBreak = 0; 1627 msg.rxOn = 1; 1628 msg.rxOff = 0; 1629 msg.rxFlush = 1; 1630 msg.rxForward = 0; 1631 msg.returnStatus = 0; 1632 msg.resetDataToggle = 0xff; 1633 } 1634 1635 /* Closing port */ 1636 else if (reset_port == 2) { 1637 msg._txOn = 0; 1638 msg._txOff = 1; 1639 msg.txFlush = 0; 1640 msg.txBreak = 0; 1641 msg.rxOn = 0; 1642 msg.rxOff = 1; 1643 msg.rxFlush = 1; 1644 msg.rxForward = 0; 1645 msg.returnStatus = 0; 1646 msg.resetDataToggle = 0; 1647 } 1648 1649 /* Sending intermediate configs */ 1650 else { 1651 msg._txOn = (!p_priv->break_on); 1652 msg._txOff = 0; 1653 msg.txFlush = 0; 1654 msg.txBreak = (p_priv->break_on); 1655 msg.rxOn = 0; 1656 msg.rxOff = 0; 1657 msg.rxFlush = 0; 1658 msg.rxForward = 0; 1659 msg.returnStatus = 0; 1660 msg.resetDataToggle = 0x0; 1661 } 1662 1663 /* Do handshaking outputs */ 1664 msg.setTxTriState_setRts = 0xff; 1665 msg.txTriState_rts = p_priv->rts_state; 1666 1667 msg.setHskoa_setDtr = 0xff; 1668 msg.hskoa_dtr = p_priv->dtr_state; 1669 1670 p_priv->resend_cont = 0; 1671 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg)); 1672 1673 /* send the data out the device on control endpoint */ 1674 this_urb->transfer_buffer_length = sizeof(msg); 1675 1676 err = usb_submit_urb(this_urb, GFP_ATOMIC); 1677 if (err != 0) 1678 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err); 1679 return 0; 1680 } 1681 1682 static int keyspan_usa28_send_setup(struct usb_serial *serial, 1683 struct usb_serial_port *port, 1684 int reset_port) 1685 { 1686 struct keyspan_usa28_portControlMessage msg; 1687 struct keyspan_serial_private *s_priv; 1688 struct keyspan_port_private *p_priv; 1689 const struct keyspan_device_details *d_details; 1690 struct urb *this_urb; 1691 int device_port, err; 1692 1693 s_priv = usb_get_serial_data(serial); 1694 p_priv = usb_get_serial_port_data(port); 1695 d_details = s_priv->device_details; 1696 device_port = port->port_number; 1697 1698 /* only do something if we have a bulk out endpoint */ 1699 this_urb = p_priv->outcont_urb; 1700 if (this_urb == NULL) { 1701 dev_dbg(&port->dev, "%s - oops no urb.\n", __func__); 1702 return -1; 1703 } 1704 1705 /* Save reset port val for resend. 1706 Don't overwrite resend for open/close condition. */ 1707 if ((reset_port + 1) > p_priv->resend_cont) 1708 p_priv->resend_cont = reset_port + 1; 1709 if (this_urb->status == -EINPROGRESS) { 1710 dev_dbg(&port->dev, "%s already writing\n", __func__); 1711 mdelay(5); 1712 return -1; 1713 } 1714 1715 memset(&msg, 0, sizeof(struct keyspan_usa28_portControlMessage)); 1716 1717 msg.setBaudRate = 1; 1718 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk, 1719 &msg.baudHi, &msg.baudLo, NULL, 1720 device_port) == KEYSPAN_INVALID_BAUD_RATE) { 1721 dev_dbg(&port->dev, "%s - Invalid baud rate requested %d.\n", 1722 __func__, p_priv->baud); 1723 msg.baudLo = 0xff; 1724 msg.baudHi = 0xb2; /* Values for 9600 baud */ 1725 } 1726 1727 /* If parity is enabled, we must calculate it ourselves. */ 1728 msg.parity = 0; /* XXX for now */ 1729 1730 msg.ctsFlowControl = (p_priv->flow_control == flow_cts); 1731 msg.xonFlowControl = 0; 1732 1733 /* Do handshaking outputs, DTR is inverted relative to RTS */ 1734 msg.rts = p_priv->rts_state; 1735 msg.dtr = p_priv->dtr_state; 1736 1737 msg.forwardingLength = 16; 1738 msg.forwardMs = 10; 1739 msg.breakThreshold = 45; 1740 msg.xonChar = 17; 1741 msg.xoffChar = 19; 1742 1743 /*msg.returnStatus = 1; 1744 msg.resetDataToggle = 0xff;*/ 1745 /* Opening port */ 1746 if (reset_port == 1) { 1747 msg._txOn = 1; 1748 msg._txOff = 0; 1749 msg.txFlush = 0; 1750 msg.txForceXoff = 0; 1751 msg.txBreak = 0; 1752 msg.rxOn = 1; 1753 msg.rxOff = 0; 1754 msg.rxFlush = 1; 1755 msg.rxForward = 0; 1756 msg.returnStatus = 0; 1757 msg.resetDataToggle = 0xff; 1758 } 1759 /* Closing port */ 1760 else if (reset_port == 2) { 1761 msg._txOn = 0; 1762 msg._txOff = 1; 1763 msg.txFlush = 0; 1764 msg.txForceXoff = 0; 1765 msg.txBreak = 0; 1766 msg.rxOn = 0; 1767 msg.rxOff = 1; 1768 msg.rxFlush = 1; 1769 msg.rxForward = 0; 1770 msg.returnStatus = 0; 1771 msg.resetDataToggle = 0; 1772 } 1773 /* Sending intermediate configs */ 1774 else { 1775 msg._txOn = (!p_priv->break_on); 1776 msg._txOff = 0; 1777 msg.txFlush = 0; 1778 msg.txForceXoff = 0; 1779 msg.txBreak = (p_priv->break_on); 1780 msg.rxOn = 0; 1781 msg.rxOff = 0; 1782 msg.rxFlush = 0; 1783 msg.rxForward = 0; 1784 msg.returnStatus = 0; 1785 msg.resetDataToggle = 0x0; 1786 } 1787 1788 p_priv->resend_cont = 0; 1789 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg)); 1790 1791 /* send the data out the device on control endpoint */ 1792 this_urb->transfer_buffer_length = sizeof(msg); 1793 1794 err = usb_submit_urb(this_urb, GFP_ATOMIC); 1795 if (err != 0) 1796 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed\n", __func__); 1797 #if 0 1798 else { 1799 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) OK %d bytes\n", __func__, 1800 this_urb->transfer_buffer_length); 1801 } 1802 #endif 1803 1804 return 0; 1805 } 1806 1807 static int keyspan_usa49_send_setup(struct usb_serial *serial, 1808 struct usb_serial_port *port, 1809 int reset_port) 1810 { 1811 struct keyspan_usa49_portControlMessage msg; 1812 struct usb_ctrlrequest *dr = NULL; 1813 struct keyspan_serial_private *s_priv; 1814 struct keyspan_port_private *p_priv; 1815 const struct keyspan_device_details *d_details; 1816 struct urb *this_urb; 1817 int err, device_port; 1818 1819 s_priv = usb_get_serial_data(serial); 1820 p_priv = usb_get_serial_port_data(port); 1821 d_details = s_priv->device_details; 1822 1823 this_urb = s_priv->glocont_urb; 1824 1825 /* Work out which port within the device is being setup */ 1826 device_port = port->port_number; 1827 1828 /* Make sure we have an urb then send the message */ 1829 if (this_urb == NULL) { 1830 dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__); 1831 return -1; 1832 } 1833 1834 dev_dbg(&port->dev, "%s - endpoint %d (%d)\n", 1835 __func__, usb_pipeendpoint(this_urb->pipe), device_port); 1836 1837 /* Save reset port val for resend. 1838 Don't overwrite resend for open/close condition. */ 1839 if ((reset_port + 1) > p_priv->resend_cont) 1840 p_priv->resend_cont = reset_port + 1; 1841 1842 if (this_urb->status == -EINPROGRESS) { 1843 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */ 1844 mdelay(5); 1845 return -1; 1846 } 1847 1848 memset(&msg, 0, sizeof(struct keyspan_usa49_portControlMessage)); 1849 1850 msg.portNumber = device_port; 1851 1852 /* Only set baud rate if it's changed */ 1853 if (p_priv->old_baud != p_priv->baud) { 1854 p_priv->old_baud = p_priv->baud; 1855 msg.setClocking = 0xff; 1856 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk, 1857 &msg.baudHi, &msg.baudLo, &msg.prescaler, 1858 device_port) == KEYSPAN_INVALID_BAUD_RATE) { 1859 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n", 1860 __func__, p_priv->baud); 1861 msg.baudLo = 0; 1862 msg.baudHi = 125; /* Values for 9600 baud */ 1863 msg.prescaler = 10; 1864 } 1865 /* msg.setPrescaler = 0xff; */ 1866 } 1867 1868 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1; 1869 switch (p_priv->cflag & CSIZE) { 1870 case CS5: 1871 msg.lcr |= USA_DATABITS_5; 1872 break; 1873 case CS6: 1874 msg.lcr |= USA_DATABITS_6; 1875 break; 1876 case CS7: 1877 msg.lcr |= USA_DATABITS_7; 1878 break; 1879 case CS8: 1880 msg.lcr |= USA_DATABITS_8; 1881 break; 1882 } 1883 if (p_priv->cflag & PARENB) { 1884 /* note USA_PARITY_NONE == 0 */ 1885 msg.lcr |= (p_priv->cflag & PARODD) ? 1886 USA_PARITY_ODD : USA_PARITY_EVEN; 1887 } 1888 msg.setLcr = 0xff; 1889 1890 msg.ctsFlowControl = (p_priv->flow_control == flow_cts); 1891 msg.xonFlowControl = 0; 1892 msg.setFlowControl = 0xff; 1893 1894 msg.forwardingLength = 16; 1895 msg.xonChar = 17; 1896 msg.xoffChar = 19; 1897 1898 /* Opening port */ 1899 if (reset_port == 1) { 1900 msg._txOn = 1; 1901 msg._txOff = 0; 1902 msg.txFlush = 0; 1903 msg.txBreak = 0; 1904 msg.rxOn = 1; 1905 msg.rxOff = 0; 1906 msg.rxFlush = 1; 1907 msg.rxForward = 0; 1908 msg.returnStatus = 0; 1909 msg.resetDataToggle = 0xff; 1910 msg.enablePort = 1; 1911 msg.disablePort = 0; 1912 } 1913 /* Closing port */ 1914 else if (reset_port == 2) { 1915 msg._txOn = 0; 1916 msg._txOff = 1; 1917 msg.txFlush = 0; 1918 msg.txBreak = 0; 1919 msg.rxOn = 0; 1920 msg.rxOff = 1; 1921 msg.rxFlush = 1; 1922 msg.rxForward = 0; 1923 msg.returnStatus = 0; 1924 msg.resetDataToggle = 0; 1925 msg.enablePort = 0; 1926 msg.disablePort = 1; 1927 } 1928 /* Sending intermediate configs */ 1929 else { 1930 msg._txOn = (!p_priv->break_on); 1931 msg._txOff = 0; 1932 msg.txFlush = 0; 1933 msg.txBreak = (p_priv->break_on); 1934 msg.rxOn = 0; 1935 msg.rxOff = 0; 1936 msg.rxFlush = 0; 1937 msg.rxForward = 0; 1938 msg.returnStatus = 0; 1939 msg.resetDataToggle = 0x0; 1940 msg.enablePort = 0; 1941 msg.disablePort = 0; 1942 } 1943 1944 /* Do handshaking outputs */ 1945 msg.setRts = 0xff; 1946 msg.rts = p_priv->rts_state; 1947 1948 msg.setDtr = 0xff; 1949 msg.dtr = p_priv->dtr_state; 1950 1951 p_priv->resend_cont = 0; 1952 1953 /* if the device is a 49wg, we send control message on usb 1954 control EP 0 */ 1955 1956 if (d_details->product_id == keyspan_usa49wg_product_id) { 1957 dr = (void *)(s_priv->ctrl_buf); 1958 dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_OUT; 1959 dr->bRequest = 0xB0; /* 49wg control message */; 1960 dr->wValue = 0; 1961 dr->wIndex = 0; 1962 dr->wLength = cpu_to_le16(sizeof(msg)); 1963 1964 memcpy(s_priv->glocont_buf, &msg, sizeof(msg)); 1965 1966 usb_fill_control_urb(this_urb, serial->dev, 1967 usb_sndctrlpipe(serial->dev, 0), 1968 (unsigned char *)dr, s_priv->glocont_buf, 1969 sizeof(msg), usa49_glocont_callback, serial); 1970 1971 } else { 1972 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg)); 1973 1974 /* send the data out the device on control endpoint */ 1975 this_urb->transfer_buffer_length = sizeof(msg); 1976 } 1977 err = usb_submit_urb(this_urb, GFP_ATOMIC); 1978 if (err != 0) 1979 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err); 1980 #if 0 1981 else { 1982 dev_dbg(&port->dev, "%s - usb_submit_urb(%d) OK %d bytes (end %d)\n", __func__, 1983 outcont_urb, this_urb->transfer_buffer_length, 1984 usb_pipeendpoint(this_urb->pipe)); 1985 } 1986 #endif 1987 1988 return 0; 1989 } 1990 1991 static int keyspan_usa90_send_setup(struct usb_serial *serial, 1992 struct usb_serial_port *port, 1993 int reset_port) 1994 { 1995 struct keyspan_usa90_portControlMessage msg; 1996 struct keyspan_serial_private *s_priv; 1997 struct keyspan_port_private *p_priv; 1998 const struct keyspan_device_details *d_details; 1999 struct urb *this_urb; 2000 int err; 2001 u8 prescaler; 2002 2003 s_priv = usb_get_serial_data(serial); 2004 p_priv = usb_get_serial_port_data(port); 2005 d_details = s_priv->device_details; 2006 2007 /* only do something if we have a bulk out endpoint */ 2008 this_urb = p_priv->outcont_urb; 2009 if (this_urb == NULL) { 2010 dev_dbg(&port->dev, "%s - oops no urb.\n", __func__); 2011 return -1; 2012 } 2013 2014 /* Save reset port val for resend. 2015 Don't overwrite resend for open/close condition. */ 2016 if ((reset_port + 1) > p_priv->resend_cont) 2017 p_priv->resend_cont = reset_port + 1; 2018 if (this_urb->status == -EINPROGRESS) { 2019 dev_dbg(&port->dev, "%s already writing\n", __func__); 2020 mdelay(5); 2021 return -1; 2022 } 2023 2024 memset(&msg, 0, sizeof(struct keyspan_usa90_portControlMessage)); 2025 2026 /* Only set baud rate if it's changed */ 2027 if (p_priv->old_baud != p_priv->baud) { 2028 p_priv->old_baud = p_priv->baud; 2029 msg.setClocking = 0x01; 2030 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk, 2031 &msg.baudHi, &msg.baudLo, &prescaler, 0) == KEYSPAN_INVALID_BAUD_RATE) { 2032 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n", 2033 __func__, p_priv->baud); 2034 p_priv->baud = 9600; 2035 d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk, 2036 &msg.baudHi, &msg.baudLo, &prescaler, 0); 2037 } 2038 msg.setRxMode = 1; 2039 msg.setTxMode = 1; 2040 } 2041 2042 /* modes must always be correctly specified */ 2043 if (p_priv->baud > 57600) { 2044 msg.rxMode = RXMODE_DMA; 2045 msg.txMode = TXMODE_DMA; 2046 } else { 2047 msg.rxMode = RXMODE_BYHAND; 2048 msg.txMode = TXMODE_BYHAND; 2049 } 2050 2051 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1; 2052 switch (p_priv->cflag & CSIZE) { 2053 case CS5: 2054 msg.lcr |= USA_DATABITS_5; 2055 break; 2056 case CS6: 2057 msg.lcr |= USA_DATABITS_6; 2058 break; 2059 case CS7: 2060 msg.lcr |= USA_DATABITS_7; 2061 break; 2062 case CS8: 2063 msg.lcr |= USA_DATABITS_8; 2064 break; 2065 } 2066 if (p_priv->cflag & PARENB) { 2067 /* note USA_PARITY_NONE == 0 */ 2068 msg.lcr |= (p_priv->cflag & PARODD) ? 2069 USA_PARITY_ODD : USA_PARITY_EVEN; 2070 } 2071 if (p_priv->old_cflag != p_priv->cflag) { 2072 p_priv->old_cflag = p_priv->cflag; 2073 msg.setLcr = 0x01; 2074 } 2075 2076 if (p_priv->flow_control == flow_cts) 2077 msg.txFlowControl = TXFLOW_CTS; 2078 msg.setTxFlowControl = 0x01; 2079 msg.setRxFlowControl = 0x01; 2080 2081 msg.rxForwardingLength = 16; 2082 msg.rxForwardingTimeout = 16; 2083 msg.txAckSetting = 0; 2084 msg.xonChar = 17; 2085 msg.xoffChar = 19; 2086 2087 /* Opening port */ 2088 if (reset_port == 1) { 2089 msg.portEnabled = 1; 2090 msg.rxFlush = 1; 2091 msg.txBreak = (p_priv->break_on); 2092 } 2093 /* Closing port */ 2094 else if (reset_port == 2) 2095 msg.portEnabled = 0; 2096 /* Sending intermediate configs */ 2097 else { 2098 msg.portEnabled = 1; 2099 msg.txBreak = (p_priv->break_on); 2100 } 2101 2102 /* Do handshaking outputs */ 2103 msg.setRts = 0x01; 2104 msg.rts = p_priv->rts_state; 2105 2106 msg.setDtr = 0x01; 2107 msg.dtr = p_priv->dtr_state; 2108 2109 p_priv->resend_cont = 0; 2110 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg)); 2111 2112 /* send the data out the device on control endpoint */ 2113 this_urb->transfer_buffer_length = sizeof(msg); 2114 2115 err = usb_submit_urb(this_urb, GFP_ATOMIC); 2116 if (err != 0) 2117 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err); 2118 return 0; 2119 } 2120 2121 static int keyspan_usa67_send_setup(struct usb_serial *serial, 2122 struct usb_serial_port *port, 2123 int reset_port) 2124 { 2125 struct keyspan_usa67_portControlMessage msg; 2126 struct keyspan_serial_private *s_priv; 2127 struct keyspan_port_private *p_priv; 2128 const struct keyspan_device_details *d_details; 2129 struct urb *this_urb; 2130 int err, device_port; 2131 2132 s_priv = usb_get_serial_data(serial); 2133 p_priv = usb_get_serial_port_data(port); 2134 d_details = s_priv->device_details; 2135 2136 this_urb = s_priv->glocont_urb; 2137 2138 /* Work out which port within the device is being setup */ 2139 device_port = port->port_number; 2140 2141 /* Make sure we have an urb then send the message */ 2142 if (this_urb == NULL) { 2143 dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__); 2144 return -1; 2145 } 2146 2147 /* Save reset port val for resend. 2148 Don't overwrite resend for open/close condition. */ 2149 if ((reset_port + 1) > p_priv->resend_cont) 2150 p_priv->resend_cont = reset_port + 1; 2151 if (this_urb->status == -EINPROGRESS) { 2152 /* dev_dbg(&port->dev, "%s - already writing\n", __func__); */ 2153 mdelay(5); 2154 return -1; 2155 } 2156 2157 memset(&msg, 0, sizeof(struct keyspan_usa67_portControlMessage)); 2158 2159 msg.port = device_port; 2160 2161 /* Only set baud rate if it's changed */ 2162 if (p_priv->old_baud != p_priv->baud) { 2163 p_priv->old_baud = p_priv->baud; 2164 msg.setClocking = 0xff; 2165 if (d_details->calculate_baud_rate(port, p_priv->baud, d_details->baudclk, 2166 &msg.baudHi, &msg.baudLo, &msg.prescaler, 2167 device_port) == KEYSPAN_INVALID_BAUD_RATE) { 2168 dev_dbg(&port->dev, "%s - Invalid baud rate %d requested, using 9600.\n", 2169 __func__, p_priv->baud); 2170 msg.baudLo = 0; 2171 msg.baudHi = 125; /* Values for 9600 baud */ 2172 msg.prescaler = 10; 2173 } 2174 msg.setPrescaler = 0xff; 2175 } 2176 2177 msg.lcr = (p_priv->cflag & CSTOPB) ? STOPBITS_678_2 : STOPBITS_5678_1; 2178 switch (p_priv->cflag & CSIZE) { 2179 case CS5: 2180 msg.lcr |= USA_DATABITS_5; 2181 break; 2182 case CS6: 2183 msg.lcr |= USA_DATABITS_6; 2184 break; 2185 case CS7: 2186 msg.lcr |= USA_DATABITS_7; 2187 break; 2188 case CS8: 2189 msg.lcr |= USA_DATABITS_8; 2190 break; 2191 } 2192 if (p_priv->cflag & PARENB) { 2193 /* note USA_PARITY_NONE == 0 */ 2194 msg.lcr |= (p_priv->cflag & PARODD) ? 2195 USA_PARITY_ODD : USA_PARITY_EVEN; 2196 } 2197 msg.setLcr = 0xff; 2198 2199 msg.ctsFlowControl = (p_priv->flow_control == flow_cts); 2200 msg.xonFlowControl = 0; 2201 msg.setFlowControl = 0xff; 2202 msg.forwardingLength = 16; 2203 msg.xonChar = 17; 2204 msg.xoffChar = 19; 2205 2206 if (reset_port == 1) { 2207 /* Opening port */ 2208 msg._txOn = 1; 2209 msg._txOff = 0; 2210 msg.txFlush = 0; 2211 msg.txBreak = 0; 2212 msg.rxOn = 1; 2213 msg.rxOff = 0; 2214 msg.rxFlush = 1; 2215 msg.rxForward = 0; 2216 msg.returnStatus = 0; 2217 msg.resetDataToggle = 0xff; 2218 } else if (reset_port == 2) { 2219 /* Closing port */ 2220 msg._txOn = 0; 2221 msg._txOff = 1; 2222 msg.txFlush = 0; 2223 msg.txBreak = 0; 2224 msg.rxOn = 0; 2225 msg.rxOff = 1; 2226 msg.rxFlush = 1; 2227 msg.rxForward = 0; 2228 msg.returnStatus = 0; 2229 msg.resetDataToggle = 0; 2230 } else { 2231 /* Sending intermediate configs */ 2232 msg._txOn = (!p_priv->break_on); 2233 msg._txOff = 0; 2234 msg.txFlush = 0; 2235 msg.txBreak = (p_priv->break_on); 2236 msg.rxOn = 0; 2237 msg.rxOff = 0; 2238 msg.rxFlush = 0; 2239 msg.rxForward = 0; 2240 msg.returnStatus = 0; 2241 msg.resetDataToggle = 0x0; 2242 } 2243 2244 /* Do handshaking outputs */ 2245 msg.setTxTriState_setRts = 0xff; 2246 msg.txTriState_rts = p_priv->rts_state; 2247 2248 msg.setHskoa_setDtr = 0xff; 2249 msg.hskoa_dtr = p_priv->dtr_state; 2250 2251 p_priv->resend_cont = 0; 2252 2253 memcpy(this_urb->transfer_buffer, &msg, sizeof(msg)); 2254 2255 /* send the data out the device on control endpoint */ 2256 this_urb->transfer_buffer_length = sizeof(msg); 2257 2258 err = usb_submit_urb(this_urb, GFP_ATOMIC); 2259 if (err != 0) 2260 dev_dbg(&port->dev, "%s - usb_submit_urb(setup) failed (%d)\n", __func__, err); 2261 return 0; 2262 } 2263 2264 static void keyspan_send_setup(struct usb_serial_port *port, int reset_port) 2265 { 2266 struct usb_serial *serial = port->serial; 2267 struct keyspan_serial_private *s_priv; 2268 const struct keyspan_device_details *d_details; 2269 2270 s_priv = usb_get_serial_data(serial); 2271 d_details = s_priv->device_details; 2272 2273 switch (d_details->msg_format) { 2274 case msg_usa26: 2275 keyspan_usa26_send_setup(serial, port, reset_port); 2276 break; 2277 case msg_usa28: 2278 keyspan_usa28_send_setup(serial, port, reset_port); 2279 break; 2280 case msg_usa49: 2281 keyspan_usa49_send_setup(serial, port, reset_port); 2282 break; 2283 case msg_usa90: 2284 keyspan_usa90_send_setup(serial, port, reset_port); 2285 break; 2286 case msg_usa67: 2287 keyspan_usa67_send_setup(serial, port, reset_port); 2288 break; 2289 } 2290 } 2291 2292 2293 /* Gets called by the "real" driver (ie once firmware is loaded 2294 and renumeration has taken place. */ 2295 static int keyspan_startup(struct usb_serial *serial) 2296 { 2297 int i, err; 2298 struct keyspan_serial_private *s_priv; 2299 const struct keyspan_device_details *d_details; 2300 2301 for (i = 0; (d_details = keyspan_devices[i]) != NULL; ++i) 2302 if (d_details->product_id == 2303 le16_to_cpu(serial->dev->descriptor.idProduct)) 2304 break; 2305 if (d_details == NULL) { 2306 dev_err(&serial->dev->dev, "%s - unknown product id %x\n", 2307 __func__, le16_to_cpu(serial->dev->descriptor.idProduct)); 2308 return -ENODEV; 2309 } 2310 2311 /* Setup private data for serial driver */ 2312 s_priv = kzalloc(sizeof(struct keyspan_serial_private), GFP_KERNEL); 2313 if (!s_priv) 2314 return -ENOMEM; 2315 2316 s_priv->instat_buf = kzalloc(INSTAT_BUFLEN, GFP_KERNEL); 2317 if (!s_priv->instat_buf) 2318 goto err_instat_buf; 2319 2320 s_priv->indat_buf = kzalloc(INDAT49W_BUFLEN, GFP_KERNEL); 2321 if (!s_priv->indat_buf) 2322 goto err_indat_buf; 2323 2324 s_priv->glocont_buf = kzalloc(GLOCONT_BUFLEN, GFP_KERNEL); 2325 if (!s_priv->glocont_buf) 2326 goto err_glocont_buf; 2327 2328 s_priv->ctrl_buf = kzalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL); 2329 if (!s_priv->ctrl_buf) 2330 goto err_ctrl_buf; 2331 2332 s_priv->device_details = d_details; 2333 usb_set_serial_data(serial, s_priv); 2334 2335 keyspan_setup_urbs(serial); 2336 2337 if (s_priv->instat_urb != NULL) { 2338 err = usb_submit_urb(s_priv->instat_urb, GFP_KERNEL); 2339 if (err != 0) 2340 dev_dbg(&serial->dev->dev, "%s - submit instat urb failed %d\n", __func__, err); 2341 } 2342 if (s_priv->indat_urb != NULL) { 2343 err = usb_submit_urb(s_priv->indat_urb, GFP_KERNEL); 2344 if (err != 0) 2345 dev_dbg(&serial->dev->dev, "%s - submit indat urb failed %d\n", __func__, err); 2346 } 2347 2348 return 0; 2349 2350 err_ctrl_buf: 2351 kfree(s_priv->glocont_buf); 2352 err_glocont_buf: 2353 kfree(s_priv->indat_buf); 2354 err_indat_buf: 2355 kfree(s_priv->instat_buf); 2356 err_instat_buf: 2357 kfree(s_priv); 2358 2359 return -ENOMEM; 2360 } 2361 2362 static void keyspan_disconnect(struct usb_serial *serial) 2363 { 2364 struct keyspan_serial_private *s_priv; 2365 2366 s_priv = usb_get_serial_data(serial); 2367 2368 stop_urb(s_priv->instat_urb); 2369 stop_urb(s_priv->glocont_urb); 2370 stop_urb(s_priv->indat_urb); 2371 } 2372 2373 static void keyspan_release(struct usb_serial *serial) 2374 { 2375 struct keyspan_serial_private *s_priv; 2376 2377 s_priv = usb_get_serial_data(serial); 2378 2379 usb_free_urb(s_priv->instat_urb); 2380 usb_free_urb(s_priv->indat_urb); 2381 usb_free_urb(s_priv->glocont_urb); 2382 2383 kfree(s_priv->ctrl_buf); 2384 kfree(s_priv->glocont_buf); 2385 kfree(s_priv->indat_buf); 2386 kfree(s_priv->instat_buf); 2387 2388 kfree(s_priv); 2389 } 2390 2391 static int keyspan_port_probe(struct usb_serial_port *port) 2392 { 2393 struct usb_serial *serial = port->serial; 2394 struct keyspan_serial_private *s_priv; 2395 struct keyspan_port_private *p_priv; 2396 const struct keyspan_device_details *d_details; 2397 struct callbacks *cback; 2398 int endp; 2399 int port_num; 2400 int i; 2401 2402 s_priv = usb_get_serial_data(serial); 2403 d_details = s_priv->device_details; 2404 2405 p_priv = kzalloc(sizeof(*p_priv), GFP_KERNEL); 2406 if (!p_priv) 2407 return -ENOMEM; 2408 2409 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) { 2410 p_priv->in_buffer[i] = kzalloc(IN_BUFLEN, GFP_KERNEL); 2411 if (!p_priv->in_buffer[i]) 2412 goto err_in_buffer; 2413 } 2414 2415 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) { 2416 p_priv->out_buffer[i] = kzalloc(OUT_BUFLEN, GFP_KERNEL); 2417 if (!p_priv->out_buffer[i]) 2418 goto err_out_buffer; 2419 } 2420 2421 p_priv->inack_buffer = kzalloc(INACK_BUFLEN, GFP_KERNEL); 2422 if (!p_priv->inack_buffer) 2423 goto err_inack_buffer; 2424 2425 p_priv->outcont_buffer = kzalloc(OUTCONT_BUFLEN, GFP_KERNEL); 2426 if (!p_priv->outcont_buffer) 2427 goto err_outcont_buffer; 2428 2429 p_priv->device_details = d_details; 2430 2431 /* Setup values for the various callback routines */ 2432 cback = &keyspan_callbacks[d_details->msg_format]; 2433 2434 port_num = port->port_number; 2435 2436 /* Do indat endpoints first, once for each flip */ 2437 endp = d_details->indat_endpoints[port_num]; 2438 for (i = 0; i <= d_details->indat_endp_flip; ++i, ++endp) { 2439 p_priv->in_urbs[i] = keyspan_setup_urb(serial, endp, 2440 USB_DIR_IN, port, 2441 p_priv->in_buffer[i], 2442 IN_BUFLEN, 2443 cback->indat_callback); 2444 } 2445 /* outdat endpoints also have flip */ 2446 endp = d_details->outdat_endpoints[port_num]; 2447 for (i = 0; i <= d_details->outdat_endp_flip; ++i, ++endp) { 2448 p_priv->out_urbs[i] = keyspan_setup_urb(serial, endp, 2449 USB_DIR_OUT, port, 2450 p_priv->out_buffer[i], 2451 OUT_BUFLEN, 2452 cback->outdat_callback); 2453 } 2454 /* inack endpoint */ 2455 p_priv->inack_urb = keyspan_setup_urb(serial, 2456 d_details->inack_endpoints[port_num], 2457 USB_DIR_IN, port, 2458 p_priv->inack_buffer, 2459 INACK_BUFLEN, 2460 cback->inack_callback); 2461 /* outcont endpoint */ 2462 p_priv->outcont_urb = keyspan_setup_urb(serial, 2463 d_details->outcont_endpoints[port_num], 2464 USB_DIR_OUT, port, 2465 p_priv->outcont_buffer, 2466 OUTCONT_BUFLEN, 2467 cback->outcont_callback); 2468 2469 usb_set_serial_port_data(port, p_priv); 2470 2471 return 0; 2472 2473 err_outcont_buffer: 2474 kfree(p_priv->inack_buffer); 2475 err_inack_buffer: 2476 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) 2477 kfree(p_priv->out_buffer[i]); 2478 err_out_buffer: 2479 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) 2480 kfree(p_priv->in_buffer[i]); 2481 err_in_buffer: 2482 kfree(p_priv); 2483 2484 return -ENOMEM; 2485 } 2486 2487 static int keyspan_port_remove(struct usb_serial_port *port) 2488 { 2489 struct keyspan_port_private *p_priv; 2490 int i; 2491 2492 p_priv = usb_get_serial_port_data(port); 2493 2494 stop_urb(p_priv->inack_urb); 2495 stop_urb(p_priv->outcont_urb); 2496 for (i = 0; i < 2; i++) { 2497 stop_urb(p_priv->in_urbs[i]); 2498 stop_urb(p_priv->out_urbs[i]); 2499 } 2500 2501 usb_free_urb(p_priv->inack_urb); 2502 usb_free_urb(p_priv->outcont_urb); 2503 for (i = 0; i < 2; i++) { 2504 usb_free_urb(p_priv->in_urbs[i]); 2505 usb_free_urb(p_priv->out_urbs[i]); 2506 } 2507 2508 kfree(p_priv->outcont_buffer); 2509 kfree(p_priv->inack_buffer); 2510 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) 2511 kfree(p_priv->out_buffer[i]); 2512 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) 2513 kfree(p_priv->in_buffer[i]); 2514 2515 kfree(p_priv); 2516 2517 return 0; 2518 } 2519 2520 MODULE_AUTHOR(DRIVER_AUTHOR); 2521 MODULE_DESCRIPTION(DRIVER_DESC); 2522 MODULE_LICENSE("GPL"); 2523 2524 MODULE_FIRMWARE("keyspan/usa28.fw"); 2525 MODULE_FIRMWARE("keyspan/usa28x.fw"); 2526 MODULE_FIRMWARE("keyspan/usa28xa.fw"); 2527 MODULE_FIRMWARE("keyspan/usa28xb.fw"); 2528 MODULE_FIRMWARE("keyspan/usa19.fw"); 2529 MODULE_FIRMWARE("keyspan/usa19qi.fw"); 2530 MODULE_FIRMWARE("keyspan/mpr.fw"); 2531 MODULE_FIRMWARE("keyspan/usa19qw.fw"); 2532 MODULE_FIRMWARE("keyspan/usa18x.fw"); 2533 MODULE_FIRMWARE("keyspan/usa19w.fw"); 2534 MODULE_FIRMWARE("keyspan/usa49w.fw"); 2535 MODULE_FIRMWARE("keyspan/usa49wlc.fw"); 2536