linux/drivers/usb/serial/keyspan_pda.c
<<
>>
Prefs
   1/*
   2 * USB Keyspan PDA / Xircom / Entregra Converter driver
   3 *
   4 * Copyright (C) 1999 - 2001 Greg Kroah-Hartman <greg@kroah.com>
   5 * Copyright (C) 1999, 2000 Brian Warner        <warner@lothar.com>
   6 * Copyright (C) 2000 Al Borchers               <borchers@steinerpoint.com>
   7 *
   8 *      This program is free software; you can redistribute it and/or modify
   9 *      it under the terms of the GNU General Public License as published by
  10 *      the Free Software Foundation; either version 2 of the License, or
  11 *      (at your option) any later version.
  12 *
  13 * See Documentation/usb/usb-serial.txt for more information on using this
  14 * driver
  15 *
  16 * (09/07/2001) gkh
  17 *      cleaned up the Xircom support.  Added ids for Entregra device which is
  18 *      the same as the Xircom device.  Enabled the code to be compiled for
  19 *      either Xircom or Keyspan devices.
  20 *
  21 * (08/11/2001) Cristian M. Craciunescu
  22 *      support for Xircom PGSDB9
  23 *
  24 * (05/31/2001) gkh
  25 *      switched from using spinlock to a semaphore, which fixes lots of
  26 *      problems.
  27 *
  28 * (04/08/2001) gb
  29 *      Identify version on module load.
  30 *
  31 * (11/01/2000) Adam J. Richter
  32 *      usb_device_id table support
  33 *
  34 * (10/05/2000) gkh
  35 *      Fixed bug with urb->dev not being set properly, now that the usb
  36 *      core needs it.
  37 *
  38 * (08/28/2000) gkh
  39 *      Added locks for SMP safeness.
  40 *      Fixed MOD_INC and MOD_DEC logic and the ability to open a port more
  41 *      than once.
  42 *
  43 * (07/20/2000) borchers
  44 *      - keyspan_pda_write no longer sleeps if it is called on interrupt time;
  45 *        PPP and the line discipline with stty echo on can call write on
  46 *        interrupt time and this would cause an oops if write slept
  47 *      - if keyspan_pda_write is in an interrupt, it will not call
  48 *        usb_control_msg (which sleeps) to query the room in the device
  49 *        buffer, it simply uses the current room value it has
  50 *      - if the urb is busy or if it is throttled keyspan_pda_write just
  51 *        returns 0, rather than sleeping to wait for this to change; the
  52 *        write_chan code in n_tty.c will sleep if needed before calling
  53 *        keyspan_pda_write again
  54 *      - if the device needs to be unthrottled, write now queues up the
  55 *        call to usb_control_msg (which sleeps) to unthrottle the device
  56 *      - the wakeups from keyspan_pda_write_bulk_callback are queued rather
  57 *        than done directly from the callback to avoid the race in write_chan
  58 *      - keyspan_pda_chars_in_buffer also indicates its buffer is full if the
  59 *        urb status is -EINPROGRESS, meaning it cannot write at the moment
  60 *
  61 * (07/19/2000) gkh
  62 *      Added module_init and module_exit functions to handle the fact that this
  63 *      driver is a loadable module now.
  64 *
  65 * (03/26/2000) gkh
  66 *      Split driver up into device specific pieces.
  67 *
  68 */
  69
  70
  71#include <linux/kernel.h>
  72#include <linux/errno.h>
  73#include <linux/init.h>
  74#include <linux/slab.h>
  75#include <linux/tty.h>
  76#include <linux/tty_driver.h>
  77#include <linux/tty_flip.h>
  78#include <linux/module.h>
  79#include <linux/spinlock.h>
  80#include <linux/workqueue.h>
  81#include <linux/firmware.h>
  82#include <linux/ihex.h>
  83#include <linux/uaccess.h>
  84#include <linux/usb.h>
  85#include <linux/usb/serial.h>
  86
  87static int debug;
  88
  89/* make a simple define to handle if we are compiling keyspan_pda or xircom support */
  90#if defined(CONFIG_USB_SERIAL_KEYSPAN_PDA) || defined(CONFIG_USB_SERIAL_KEYSPAN_PDA_MODULE)
  91        #define KEYSPAN
  92#else
  93        #undef KEYSPAN
  94#endif
  95#if defined(CONFIG_USB_SERIAL_XIRCOM) || defined(CONFIG_USB_SERIAL_XIRCOM_MODULE)
  96        #define XIRCOM
  97#else
  98        #undef XIRCOM
  99#endif
 100
 101/*
 102 * Version Information
 103 */
 104#define DRIVER_VERSION "v1.1"
 105#define DRIVER_AUTHOR "Brian Warner <warner@lothar.com>"
 106#define DRIVER_DESC "USB Keyspan PDA Converter driver"
 107
 108struct keyspan_pda_private {
 109        int                     tx_room;
 110        int                     tx_throttled;
 111        struct work_struct                      wakeup_work;
 112        struct work_struct                      unthrottle_work;
 113        struct usb_serial       *serial;
 114        struct usb_serial_port  *port;
 115};
 116
 117
 118#define KEYSPAN_VENDOR_ID               0x06cd
 119#define KEYSPAN_PDA_FAKE_ID             0x0103
 120#define KEYSPAN_PDA_ID                  0x0104 /* no clue */
 121
 122/* For Xircom PGSDB9 and older Entregra version of the same device */
 123#define XIRCOM_VENDOR_ID                0x085a
 124#define XIRCOM_FAKE_ID                  0x8027
 125#define ENTREGRA_VENDOR_ID              0x1645
 126#define ENTREGRA_FAKE_ID                0x8093
 127
 128static const struct usb_device_id id_table_combined[] = {
 129#ifdef KEYSPAN
 130        { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_FAKE_ID) },
 131#endif
 132#ifdef XIRCOM
 133        { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
 134        { USB_DEVICE(ENTREGRA_VENDOR_ID, ENTREGRA_FAKE_ID) },
 135#endif
 136        { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) },
 137        { }                                             /* Terminating entry */
 138};
 139
 140MODULE_DEVICE_TABLE(usb, id_table_combined);
 141
 142static struct usb_driver keyspan_pda_driver = {
 143        .name =         "keyspan_pda",
 144        .probe =        usb_serial_probe,
 145        .disconnect =   usb_serial_disconnect,
 146        .id_table =     id_table_combined,
 147        .no_dynamic_id =        1,
 148};
 149
 150static const struct usb_device_id id_table_std[] = {
 151        { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) },
 152        { }                                             /* Terminating entry */
 153};
 154
 155#ifdef KEYSPAN
 156static const struct usb_device_id id_table_fake[] = {
 157        { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_FAKE_ID) },
 158        { }                                             /* Terminating entry */
 159};
 160#endif
 161
 162#ifdef XIRCOM
 163static const struct usb_device_id id_table_fake_xircom[] = {
 164        { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
 165        { USB_DEVICE(ENTREGRA_VENDOR_ID, ENTREGRA_FAKE_ID) },
 166        { }
 167};
 168#endif
 169
 170static void keyspan_pda_wakeup_write(struct work_struct *work)
 171{
 172        struct keyspan_pda_private *priv =
 173                container_of(work, struct keyspan_pda_private, wakeup_work);
 174        struct usb_serial_port *port = priv->port;
 175        struct tty_struct *tty = tty_port_tty_get(&port->port);
 176        tty_wakeup(tty);
 177        tty_kref_put(tty);
 178}
 179
 180static void keyspan_pda_request_unthrottle(struct work_struct *work)
 181{
 182        struct keyspan_pda_private *priv =
 183                container_of(work, struct keyspan_pda_private, unthrottle_work);
 184        struct usb_serial *serial = priv->serial;
 185        int result;
 186
 187        dbg(" request_unthrottle");
 188        /* ask the device to tell us when the tx buffer becomes
 189           sufficiently empty */
 190        result = usb_control_msg(serial->dev,
 191                                 usb_sndctrlpipe(serial->dev, 0),
 192                                 7, /* request_unthrottle */
 193                                 USB_TYPE_VENDOR | USB_RECIP_INTERFACE
 194                                 | USB_DIR_OUT,
 195                                 16, /* value: threshold */
 196                                 0, /* index */
 197                                 NULL,
 198                                 0,
 199                                 2000);
 200        if (result < 0)
 201                dbg("%s - error %d from usb_control_msg",
 202                    __func__, result);
 203}
 204
 205
 206static void keyspan_pda_rx_interrupt(struct urb *urb)
 207{
 208        struct usb_serial_port *port = urb->context;
 209        struct tty_struct *tty = tty_port_tty_get(&port->port);
 210        unsigned char *data = urb->transfer_buffer;
 211        int retval;
 212        int status = urb->status;
 213        struct keyspan_pda_private *priv;
 214        priv = usb_get_serial_port_data(port);
 215
 216        switch (status) {
 217        case 0:
 218                /* success */
 219                break;
 220        case -ECONNRESET:
 221        case -ENOENT:
 222        case -ESHUTDOWN:
 223                /* this urb is terminated, clean up */
 224                dbg("%s - urb shutting down with status: %d",
 225                    __func__, status);
 226                goto out;
 227        default:
 228                dbg("%s - nonzero urb status received: %d",
 229                    __func__, status);
 230                goto exit;
 231        }
 232
 233        /* see if the message is data or a status interrupt */
 234        switch (data[0]) {
 235        case 0:
 236                /* rest of message is rx data */
 237                if (urb->actual_length) {
 238                        tty_insert_flip_string(tty, data + 1,
 239                                                urb->actual_length - 1);
 240                        tty_flip_buffer_push(tty);
 241                }
 242                break;
 243        case 1:
 244                /* status interrupt */
 245                dbg(" rx int, d1=%d, d2=%d", data[1], data[2]);
 246                switch (data[1]) {
 247                case 1: /* modemline change */
 248                        break;
 249                case 2: /* tx unthrottle interrupt */
 250                        priv->tx_throttled = 0;
 251                        /* queue up a wakeup at scheduler time */
 252                        schedule_work(&priv->wakeup_work);
 253                        break;
 254                default:
 255                        break;
 256                }
 257                break;
 258        default:
 259                break;
 260        }
 261
 262exit:
 263        retval = usb_submit_urb(urb, GFP_ATOMIC);
 264        if (retval)
 265                dev_err(&port->dev,
 266                        "%s - usb_submit_urb failed with result %d",
 267                        __func__, retval);
 268out:
 269        tty_kref_put(tty);                   
 270}
 271
 272
 273static void keyspan_pda_rx_throttle(struct tty_struct *tty)
 274{
 275        /* stop receiving characters. We just turn off the URB request, and
 276           let chars pile up in the device. If we're doing hardware
 277           flowcontrol, the device will signal the other end when its buffer
 278           fills up. If we're doing XON/XOFF, this would be a good time to
 279           send an XOFF, although it might make sense to foist that off
 280           upon the device too. */
 281        struct usb_serial_port *port = tty->driver_data;
 282        dbg("keyspan_pda_rx_throttle port %d", port->number);
 283        usb_kill_urb(port->interrupt_in_urb);
 284}
 285
 286
 287static void keyspan_pda_rx_unthrottle(struct tty_struct *tty)
 288{
 289        struct usb_serial_port *port = tty->driver_data;
 290        /* just restart the receive interrupt URB */
 291        dbg("keyspan_pda_rx_unthrottle port %d", port->number);
 292        port->interrupt_in_urb->dev = port->serial->dev;
 293        if (usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL))
 294                dbg(" usb_submit_urb(read urb) failed");
 295}
 296
 297
 298static speed_t keyspan_pda_setbaud(struct usb_serial *serial, speed_t baud)
 299{
 300        int rc;
 301        int bindex;
 302
 303        switch (baud) {
 304        case 110:
 305                bindex = 0;
 306                break;
 307        case 300:
 308                bindex = 1;
 309                break;
 310        case 1200:
 311                bindex = 2;
 312                break;
 313        case 2400:
 314                bindex = 3;
 315                break;
 316        case 4800:
 317                bindex = 4;
 318                break;
 319        case 9600:
 320                bindex = 5;
 321                break;
 322        case 19200:
 323                bindex = 6;
 324                break;
 325        case 38400:
 326                bindex = 7;
 327                break;
 328        case 57600:
 329                bindex = 8;
 330                break;
 331        case 115200:
 332                bindex = 9;
 333                break;
 334        default:
 335                bindex = 5;     /* Default to 9600 */
 336                baud = 9600;
 337        }
 338
 339        /* rather than figure out how to sleep while waiting for this
 340           to complete, I just use the "legacy" API. */
 341        rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
 342                             0, /* set baud */
 343                             USB_TYPE_VENDOR
 344                             | USB_RECIP_INTERFACE
 345                             | USB_DIR_OUT, /* type */
 346                             bindex, /* value */
 347                             0, /* index */
 348                             NULL, /* &data */
 349                             0, /* size */
 350                             2000); /* timeout */
 351        if (rc < 0)
 352                return 0;
 353        return baud;
 354}
 355
 356
 357static void keyspan_pda_break_ctl(struct tty_struct *tty, int break_state)
 358{
 359        struct usb_serial_port *port = tty->driver_data;
 360        struct usb_serial *serial = port->serial;
 361        int value;
 362        int result;
 363
 364        if (break_state == -1)
 365                value = 1; /* start break */
 366        else
 367                value = 0; /* clear break */
 368        result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
 369                        4, /* set break */
 370                        USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT,
 371                        value, 0, NULL, 0, 2000);
 372        if (result < 0)
 373                dbg("%s - error %d from usb_control_msg",
 374                    __func__, result);
 375        /* there is something funky about this.. the TCSBRK that 'cu' performs
 376           ought to translate into a break_ctl(-1),break_ctl(0) pair HZ/4
 377           seconds apart, but it feels like the break sent isn't as long as it
 378           is on /dev/ttyS0 */
 379}
 380
 381
 382static void keyspan_pda_set_termios(struct tty_struct *tty,
 383                struct usb_serial_port *port, struct ktermios *old_termios)
 384{
 385        struct usb_serial *serial = port->serial;
 386        speed_t speed;
 387
 388        /* cflag specifies lots of stuff: number of stop bits, parity, number
 389           of data bits, baud. What can the device actually handle?:
 390           CSTOPB (1 stop bit or 2)
 391           PARENB (parity)
 392           CSIZE (5bit .. 8bit)
 393           There is minimal hw support for parity (a PSW bit seems to hold the
 394           parity of whatever is in the accumulator). The UART either deals
 395           with 10 bits (start, 8 data, stop) or 11 bits (start, 8 data,
 396           1 special, stop). So, with firmware changes, we could do:
 397           8N1: 10 bit
 398           8N2: 11 bit, extra bit always (mark?)
 399           8[EOMS]1: 11 bit, extra bit is parity
 400           7[EOMS]1: 10 bit, b0/b7 is parity
 401           7[EOMS]2: 11 bit, b0/b7 is parity, extra bit always (mark?)
 402
 403           HW flow control is dictated by the tty->termios->c_cflags & CRTSCTS
 404           bit.
 405
 406           For now, just do baud. */
 407
 408        speed = tty_get_baud_rate(tty);
 409        speed = keyspan_pda_setbaud(serial, speed);
 410
 411        if (speed == 0) {
 412                dbg("can't handle requested baud rate");
 413                /* It hasn't changed so.. */
 414                speed = tty_termios_baud_rate(old_termios);
 415        }
 416        /* Only speed can change so copy the old h/w parameters
 417           then encode the new speed */
 418        tty_termios_copy_hw(tty->termios, old_termios);
 419        tty_encode_baud_rate(tty, speed, speed);
 420}
 421
 422
 423/* modem control pins: DTR and RTS are outputs and can be controlled.
 424   DCD, RI, DSR, CTS are inputs and can be read. All outputs can also be
 425   read. The byte passed is: DTR(b7) DCD RI DSR CTS RTS(b2) unused unused */
 426
 427static int keyspan_pda_get_modem_info(struct usb_serial *serial,
 428                                      unsigned char *value)
 429{
 430        int rc;
 431        u8 *data;
 432
 433        data = kmalloc(1, GFP_KERNEL);
 434        if (!data)
 435                return -ENOMEM;
 436
 437        rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
 438                             3, /* get pins */
 439                             USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_IN,
 440                             0, 0, data, 1, 2000);
 441        if (rc >= 0)
 442                *value = *data;
 443
 444        kfree(data);
 445        return rc;
 446}
 447
 448
 449static int keyspan_pda_set_modem_info(struct usb_serial *serial,
 450                                      unsigned char value)
 451{
 452        int rc;
 453        rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
 454                             3, /* set pins */
 455                             USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_OUT,
 456                             value, 0, NULL, 0, 2000);
 457        return rc;
 458}
 459
 460static int keyspan_pda_tiocmget(struct tty_struct *tty, struct file *file)
 461{
 462        struct usb_serial_port *port = tty->driver_data;
 463        struct usb_serial *serial = port->serial;
 464        int rc;
 465        unsigned char status;
 466        int value;
 467
 468        rc = keyspan_pda_get_modem_info(serial, &status);
 469        if (rc < 0)
 470                return rc;
 471        value =
 472                ((status & (1<<7)) ? TIOCM_DTR : 0) |
 473                ((status & (1<<6)) ? TIOCM_CAR : 0) |
 474                ((status & (1<<5)) ? TIOCM_RNG : 0) |
 475                ((status & (1<<4)) ? TIOCM_DSR : 0) |
 476                ((status & (1<<3)) ? TIOCM_CTS : 0) |
 477                ((status & (1<<2)) ? TIOCM_RTS : 0);
 478        return value;
 479}
 480
 481static int keyspan_pda_tiocmset(struct tty_struct *tty, struct file *file,
 482                                unsigned int set, unsigned int clear)
 483{
 484        struct usb_serial_port *port = tty->driver_data;
 485        struct usb_serial *serial = port->serial;
 486        int rc;
 487        unsigned char status;
 488
 489        rc = keyspan_pda_get_modem_info(serial, &status);
 490        if (rc < 0)
 491                return rc;
 492
 493        if (set & TIOCM_RTS)
 494                status |= (1<<2);
 495        if (set & TIOCM_DTR)
 496                status |= (1<<7);
 497
 498        if (clear & TIOCM_RTS)
 499                status &= ~(1<<2);
 500        if (clear & TIOCM_DTR)
 501                status &= ~(1<<7);
 502        rc = keyspan_pda_set_modem_info(serial, status);
 503        return rc;
 504}
 505
 506static int keyspan_pda_write(struct tty_struct *tty,
 507        struct usb_serial_port *port, const unsigned char *buf, int count)
 508{
 509        struct usb_serial *serial = port->serial;
 510        int request_unthrottle = 0;
 511        int rc = 0;
 512        struct keyspan_pda_private *priv;
 513
 514        priv = usb_get_serial_port_data(port);
 515        /* guess how much room is left in the device's ring buffer, and if we
 516           want to send more than that, check first, updating our notion of
 517           what is left. If our write will result in no room left, ask the
 518           device to give us an interrupt when the room available rises above
 519           a threshold, and hold off all writers (eventually, those using
 520           select() or poll() too) until we receive that unthrottle interrupt.
 521           Block if we can't write anything at all, otherwise write as much as
 522           we can. */
 523        dbg("keyspan_pda_write(%d)", count);
 524        if (count == 0) {
 525                dbg(" write request of 0 bytes");
 526                return 0;
 527        }
 528
 529        /* we might block because of:
 530           the TX urb is in-flight (wait until it completes)
 531           the device is full (wait until it says there is room)
 532        */
 533        spin_lock_bh(&port->lock);
 534        if (port->write_urb_busy || priv->tx_throttled) {
 535                spin_unlock_bh(&port->lock);
 536                return 0;
 537        }
 538        port->write_urb_busy = 1;
 539        spin_unlock_bh(&port->lock);
 540
 541        /* At this point the URB is in our control, nobody else can submit it
 542           again (the only sudden transition was the one from EINPROGRESS to
 543           finished).  Also, the tx process is not throttled. So we are
 544           ready to write. */
 545
 546        count = (count > port->bulk_out_size) ? port->bulk_out_size : count;
 547
 548        /* Check if we might overrun the Tx buffer.   If so, ask the
 549           device how much room it really has.  This is done only on
 550           scheduler time, since usb_control_msg() sleeps. */
 551        if (count > priv->tx_room && !in_interrupt()) {
 552                u8 *room;
 553
 554                room = kmalloc(1, GFP_KERNEL);
 555                if (!room) {
 556                        rc = -ENOMEM;
 557                        goto exit;
 558                }
 559
 560                rc = usb_control_msg(serial->dev,
 561                                     usb_rcvctrlpipe(serial->dev, 0),
 562                                     6, /* write_room */
 563                                     USB_TYPE_VENDOR | USB_RECIP_INTERFACE
 564                                     | USB_DIR_IN,
 565                                     0, /* value: 0 means "remaining room" */
 566                                     0, /* index */
 567                                     room,
 568                                     1,
 569                                     2000);
 570                if (rc > 0) {
 571                        dbg(" roomquery says %d", *room);
 572                        priv->tx_room = *room;
 573                }
 574                kfree(room);
 575                if (rc < 0) {
 576                        dbg(" roomquery failed");
 577                        goto exit;
 578                }
 579                if (rc == 0) {
 580                        dbg(" roomquery returned 0 bytes");
 581                        rc = -EIO; /* device didn't return any data */
 582                        goto exit;
 583                }
 584        }
 585        if (count > priv->tx_room) {
 586                /* we're about to completely fill the Tx buffer, so
 587                   we'll be throttled afterwards. */
 588                count = priv->tx_room;
 589                request_unthrottle = 1;
 590        }
 591
 592        if (count) {
 593                /* now transfer data */
 594                memcpy(port->write_urb->transfer_buffer, buf, count);
 595                /* send the data out the bulk port */
 596                port->write_urb->transfer_buffer_length = count;
 597
 598                priv->tx_room -= count;
 599
 600                port->write_urb->dev = port->serial->dev;
 601                rc = usb_submit_urb(port->write_urb, GFP_ATOMIC);
 602                if (rc) {
 603                        dbg(" usb_submit_urb(write bulk) failed");
 604                        goto exit;
 605                }
 606        } else {
 607                /* There wasn't any room left, so we are throttled until
 608                   the buffer empties a bit */
 609                request_unthrottle = 1;
 610        }
 611
 612        if (request_unthrottle) {
 613                priv->tx_throttled = 1; /* block writers */
 614                schedule_work(&priv->unthrottle_work);
 615        }
 616
 617        rc = count;
 618exit:
 619        if (rc < 0)
 620                port->write_urb_busy = 0;
 621        return rc;
 622}
 623
 624
 625static void keyspan_pda_write_bulk_callback(struct urb *urb)
 626{
 627        struct usb_serial_port *port = urb->context;
 628        struct keyspan_pda_private *priv;
 629
 630        port->write_urb_busy = 0;
 631        priv = usb_get_serial_port_data(port);
 632
 633        /* queue up a wakeup at scheduler time */
 634        schedule_work(&priv->wakeup_work);
 635}
 636
 637
 638static int keyspan_pda_write_room(struct tty_struct *tty)
 639{
 640        struct usb_serial_port *port = tty->driver_data;
 641        struct keyspan_pda_private *priv;
 642        priv = usb_get_serial_port_data(port);
 643        /* used by n_tty.c for processing of tabs and such. Giving it our
 644           conservative guess is probably good enough, but needs testing by
 645           running a console through the device. */
 646        return priv->tx_room;
 647}
 648
 649
 650static int keyspan_pda_chars_in_buffer(struct tty_struct *tty)
 651{
 652        struct usb_serial_port *port = tty->driver_data;
 653        struct keyspan_pda_private *priv;
 654        unsigned long flags;
 655        int ret = 0;
 656
 657        priv = usb_get_serial_port_data(port);
 658
 659        /* when throttled, return at least WAKEUP_CHARS to tell select() (via
 660           n_tty.c:normal_poll() ) that we're not writeable. */
 661
 662        spin_lock_irqsave(&port->lock, flags);
 663        if (port->write_urb_busy || priv->tx_throttled)
 664                ret = 256;
 665        spin_unlock_irqrestore(&port->lock, flags);
 666        return ret;
 667}
 668
 669
 670static void keyspan_pda_dtr_rts(struct usb_serial_port *port, int on)
 671{
 672        struct usb_serial *serial = port->serial;
 673
 674        if (serial->dev) {
 675                if (on)
 676                        keyspan_pda_set_modem_info(serial, (1<<7) | (1<< 2));
 677                else
 678                        keyspan_pda_set_modem_info(serial, 0);
 679        }
 680}
 681
 682
 683static int keyspan_pda_open(struct tty_struct *tty,
 684                                        struct usb_serial_port *port)
 685{
 686        struct usb_serial *serial = port->serial;
 687        u8 *room;
 688        int rc = 0;
 689        struct keyspan_pda_private *priv;
 690
 691        /* find out how much room is in the Tx ring */
 692        room = kmalloc(1, GFP_KERNEL);
 693        if (!room)
 694                return -ENOMEM;
 695
 696        rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
 697                             6, /* write_room */
 698                             USB_TYPE_VENDOR | USB_RECIP_INTERFACE
 699                             | USB_DIR_IN,
 700                             0, /* value */
 701                             0, /* index */
 702                             room,
 703                             1,
 704                             2000);
 705        if (rc < 0) {
 706                dbg("%s - roomquery failed", __func__);
 707                goto error;
 708        }
 709        if (rc == 0) {
 710                dbg("%s - roomquery returned 0 bytes", __func__);
 711                rc = -EIO;
 712                goto error;
 713        }
 714        priv = usb_get_serial_port_data(port);
 715        priv->tx_room = *room;
 716        priv->tx_throttled = *room ? 0 : 1;
 717
 718        /*Start reading from the device*/
 719        port->interrupt_in_urb->dev = serial->dev;
 720        rc = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
 721        if (rc) {
 722                dbg("%s - usb_submit_urb(read int) failed", __func__);
 723                goto error;
 724        }
 725error:
 726        kfree(room);
 727        return rc;
 728}
 729static void keyspan_pda_close(struct usb_serial_port *port)
 730{
 731        struct usb_serial *serial = port->serial;
 732
 733        if (serial->dev) {
 734                /* shutdown our bulk reads and writes */
 735                usb_kill_urb(port->write_urb);
 736                usb_kill_urb(port->interrupt_in_urb);
 737        }
 738}
 739
 740
 741/* download the firmware to a "fake" device (pre-renumeration) */
 742static int keyspan_pda_fake_startup(struct usb_serial *serial)
 743{
 744        int response;
 745        const char *fw_name;
 746        const struct ihex_binrec *record;
 747        const struct firmware *fw;
 748
 749        /* download the firmware here ... */
 750        response = ezusb_set_reset(serial, 1);
 751
 752        if (0) { ; }
 753#ifdef KEYSPAN
 754        else if (le16_to_cpu(serial->dev->descriptor.idVendor) == KEYSPAN_VENDOR_ID)
 755                fw_name = "keyspan_pda/keyspan_pda.fw";
 756#endif
 757#ifdef XIRCOM
 758        else if ((le16_to_cpu(serial->dev->descriptor.idVendor) == XIRCOM_VENDOR_ID) ||
 759                 (le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGRA_VENDOR_ID))
 760                fw_name = "keyspan_pda/xircom_pgs.fw";
 761#endif
 762        else {
 763                dev_err(&serial->dev->dev, "%s: unknown vendor, aborting.\n",
 764                        __func__);
 765                return -ENODEV;
 766        }
 767        if (request_ihex_firmware(&fw, fw_name, &serial->dev->dev)) {
 768                dev_err(&serial->dev->dev, "failed to load firmware \"%s\"\n",
 769                        fw_name);
 770                return -ENOENT;
 771        }
 772        record = (const struct ihex_binrec *)fw->data;
 773
 774        while (record) {
 775                response = ezusb_writememory(serial, be32_to_cpu(record->addr),
 776                                             (unsigned char *)record->data,
 777                                             be16_to_cpu(record->len), 0xa0);
 778                if (response < 0) {
 779                        dev_err(&serial->dev->dev, "ezusb_writememory failed "
 780                                "for Keyspan PDA firmware (%d %04X %p %d)\n",
 781                                response, be32_to_cpu(record->addr),
 782                                record->data, be16_to_cpu(record->len));
 783                        break;
 784                }
 785                record = ihex_next_binrec(record);
 786        }
 787        release_firmware(fw);
 788        /* bring device out of reset. Renumeration will occur in a moment
 789           and the new device will bind to the real driver */
 790        response = ezusb_set_reset(serial, 0);
 791
 792        /* we want this device to fail to have a driver assigned to it. */
 793        return 1;
 794}
 795
 796#ifdef KEYSPAN
 797MODULE_FIRMWARE("keyspan_pda/keyspan_pda.fw");
 798#endif
 799#ifdef XIRCOM
 800MODULE_FIRMWARE("keyspan_pda/xircom_pgs.fw");
 801#endif
 802
 803static int keyspan_pda_startup(struct usb_serial *serial)
 804{
 805
 806        struct keyspan_pda_private *priv;
 807
 808        /* allocate the private data structures for all ports. Well, for all
 809           one ports. */
 810
 811        priv = kmalloc(sizeof(struct keyspan_pda_private), GFP_KERNEL);
 812        if (!priv)
 813                return 1; /* error */
 814        usb_set_serial_port_data(serial->port[0], priv);
 815        init_waitqueue_head(&serial->port[0]->write_wait);
 816        INIT_WORK(&priv->wakeup_work, keyspan_pda_wakeup_write);
 817        INIT_WORK(&priv->unthrottle_work, keyspan_pda_request_unthrottle);
 818        priv->serial = serial;
 819        priv->port = serial->port[0];
 820        return 0;
 821}
 822
 823static void keyspan_pda_release(struct usb_serial *serial)
 824{
 825        dbg("%s", __func__);
 826
 827        kfree(usb_get_serial_port_data(serial->port[0]));
 828}
 829
 830#ifdef KEYSPAN
 831static struct usb_serial_driver keyspan_pda_fake_device = {
 832        .driver = {
 833                .owner =        THIS_MODULE,
 834                .name =         "keyspan_pda_pre",
 835        },
 836        .description =          "Keyspan PDA - (prerenumeration)",
 837        .usb_driver =           &keyspan_pda_driver,
 838        .id_table =             id_table_fake,
 839        .num_ports =            1,
 840        .attach =               keyspan_pda_fake_startup,
 841};
 842#endif
 843
 844#ifdef XIRCOM
 845static struct usb_serial_driver xircom_pgs_fake_device = {
 846        .driver = {
 847                .owner =        THIS_MODULE,
 848                .name =         "xircom_no_firm",
 849        },
 850        .description =          "Xircom / Entregra PGS - (prerenumeration)",
 851        .usb_driver =           &keyspan_pda_driver,
 852        .id_table =             id_table_fake_xircom,
 853        .num_ports =            1,
 854        .attach =               keyspan_pda_fake_startup,
 855};
 856#endif
 857
 858static struct usb_serial_driver keyspan_pda_device = {
 859        .driver = {
 860                .owner =        THIS_MODULE,
 861                .name =         "keyspan_pda",
 862        },
 863        .description =          "Keyspan PDA",
 864        .usb_driver =           &keyspan_pda_driver,
 865        .id_table =             id_table_std,
 866        .num_ports =            1,
 867        .dtr_rts =              keyspan_pda_dtr_rts,
 868        .open =                 keyspan_pda_open,
 869        .close =                keyspan_pda_close,
 870        .write =                keyspan_pda_write,
 871        .write_room =           keyspan_pda_write_room,
 872        .write_bulk_callback =  keyspan_pda_write_bulk_callback,
 873        .read_int_callback =    keyspan_pda_rx_interrupt,
 874        .chars_in_buffer =      keyspan_pda_chars_in_buffer,
 875        .throttle =             keyspan_pda_rx_throttle,
 876        .unthrottle =           keyspan_pda_rx_unthrottle,
 877        .set_termios =          keyspan_pda_set_termios,
 878        .break_ctl =            keyspan_pda_break_ctl,
 879        .tiocmget =             keyspan_pda_tiocmget,
 880        .tiocmset =             keyspan_pda_tiocmset,
 881        .attach =               keyspan_pda_startup,
 882        .release =              keyspan_pda_release,
 883};
 884
 885
 886static int __init keyspan_pda_init(void)
 887{
 888        int retval;
 889        retval = usb_serial_register(&keyspan_pda_device);
 890        if (retval)
 891                goto failed_pda_register;
 892#ifdef KEYSPAN
 893        retval = usb_serial_register(&keyspan_pda_fake_device);
 894        if (retval)
 895                goto failed_pda_fake_register;
 896#endif
 897#ifdef XIRCOM
 898        retval = usb_serial_register(&xircom_pgs_fake_device);
 899        if (retval)
 900                goto failed_xircom_register;
 901#endif
 902        retval = usb_register(&keyspan_pda_driver);
 903        if (retval)
 904                goto failed_usb_register;
 905        printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
 906               DRIVER_DESC "\n");
 907        return 0;
 908failed_usb_register:
 909#ifdef XIRCOM
 910        usb_serial_deregister(&xircom_pgs_fake_device);
 911failed_xircom_register:
 912#endif /* XIRCOM */
 913#ifdef KEYSPAN
 914        usb_serial_deregister(&keyspan_pda_fake_device);
 915#endif
 916#ifdef KEYSPAN
 917failed_pda_fake_register:
 918#endif
 919        usb_serial_deregister(&keyspan_pda_device);
 920failed_pda_register:
 921        return retval;
 922}
 923
 924
 925static void __exit keyspan_pda_exit(void)
 926{
 927        usb_deregister(&keyspan_pda_driver);
 928        usb_serial_deregister(&keyspan_pda_device);
 929#ifdef KEYSPAN
 930        usb_serial_deregister(&keyspan_pda_fake_device);
 931#endif
 932#ifdef XIRCOM
 933        usb_serial_deregister(&xircom_pgs_fake_device);
 934#endif
 935}
 936
 937
 938module_init(keyspan_pda_init);
 939module_exit(keyspan_pda_exit);
 940
 941MODULE_AUTHOR(DRIVER_AUTHOR);
 942MODULE_DESCRIPTION(DRIVER_DESC);
 943MODULE_LICENSE("GPL");
 944
 945module_param(debug, bool, S_IRUGO | S_IWUSR);
 946MODULE_PARM_DESC(debug, "Debug enabled or not");
 947
 948