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