root/drivers/usb/serial/quatech2.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. qt2_release
  2. calc_baud_divisor
  3. qt2_set_port_config
  4. qt2_control_msg
  5. qt2_setdevice
  6. qt2_getregister
  7. qt2_setregister
  8. update_mctrl
  9. qt2_calc_num_ports
  10. qt2_set_termios
  11. qt2_open
  12. qt2_close
  13. qt2_disconnect
  14. get_serial_info
  15. qt2_process_status
  16. qt2_process_xmit_empty
  17. qt2_process_flush
  18. qt2_process_read_urb
  19. qt2_write_bulk_callback
  20. qt2_read_bulk_callback
  21. qt2_setup_urbs
  22. qt2_attach
  23. qt2_port_probe
  24. qt2_port_remove
  25. qt2_tiocmget
  26. qt2_tiocmset
  27. qt2_break_ctl
  28. qt2_dtr_rts
  29. qt2_update_msr
  30. qt2_update_lsr
  31. qt2_write_room
  32. qt2_write

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * usb-serial driver for Quatech USB 2 devices
   4  *
   5  * Copyright (C) 2012 Bill Pemberton (wfp5p@virginia.edu)
   6  *
   7  *  These devices all have only 1 bulk in and 1 bulk out that is shared
   8  *  for all serial ports.
   9  *
  10  */
  11 
  12 #include <asm/unaligned.h>
  13 #include <linux/errno.h>
  14 #include <linux/slab.h>
  15 #include <linux/tty.h>
  16 #include <linux/tty_driver.h>
  17 #include <linux/tty_flip.h>
  18 #include <linux/module.h>
  19 #include <linux/serial.h>
  20 #include <linux/usb.h>
  21 #include <linux/usb/serial.h>
  22 #include <linux/serial_reg.h>
  23 #include <linux/uaccess.h>
  24 
  25 /* default urb timeout for usb operations */
  26 #define QT2_USB_TIMEOUT USB_CTRL_SET_TIMEOUT
  27 
  28 #define QT_OPEN_CLOSE_CHANNEL       0xca
  29 #define QT_SET_GET_DEVICE           0xc2
  30 #define QT_SET_GET_REGISTER         0xc0
  31 #define QT_GET_SET_PREBUF_TRIG_LVL  0xcc
  32 #define QT_SET_ATF                  0xcd
  33 #define QT_TRANSFER_IN              0xc0
  34 #define QT_HW_FLOW_CONTROL_MASK     0xc5
  35 #define QT_SW_FLOW_CONTROL_MASK     0xc6
  36 #define QT2_BREAK_CONTROL           0xc8
  37 #define QT2_GET_SET_UART            0xc1
  38 #define QT2_FLUSH_DEVICE            0xc4
  39 #define QT2_GET_SET_QMCR            0xe1
  40 #define QT2_QMCR_RS232              0x40
  41 #define QT2_QMCR_RS422              0x10
  42 
  43 #define  SERIAL_CRTSCTS ((UART_MCR_RTS << 8) | UART_MSR_CTS)
  44 
  45 #define  SERIAL_EVEN_PARITY         (UART_LCR_PARITY | UART_LCR_EPAR)
  46 
  47 /* status bytes for the device */
  48 #define QT2_CONTROL_BYTE    0x1b
  49 #define QT2_LINE_STATUS     0x00  /* following 1 byte is line status */
  50 #define QT2_MODEM_STATUS    0x01  /* following 1 byte is modem status */
  51 #define QT2_XMIT_HOLD       0x02  /* following 2 bytes are ?? */
  52 #define QT2_CHANGE_PORT     0x03  /* following 1 byte is port to change to */
  53 #define QT2_REC_FLUSH       0x04  /* no following info */
  54 #define QT2_XMIT_FLUSH      0x05  /* no following info */
  55 #define QT2_CONTROL_ESCAPE  0xff  /* pass through previous 2 control bytes */
  56 
  57 #define  MAX_BAUD_RATE              921600
  58 #define  DEFAULT_BAUD_RATE          9600
  59 
  60 #define QT2_READ_BUFFER_SIZE    512  /* size of read buffer */
  61 #define QT2_WRITE_BUFFER_SIZE   512  /* size of write buffer */
  62 #define QT2_WRITE_CONTROL_SIZE  5    /* control bytes used for a write */
  63 
  64 #define DRIVER_DESC "Quatech 2nd gen USB to Serial Driver"
  65 
  66 #define USB_VENDOR_ID_QUATECH   0x061d
  67 #define QUATECH_SSU2_100        0xC120  /* RS232 single port */
  68 #define QUATECH_DSU2_100        0xC140  /* RS232 dual port */
  69 #define QUATECH_DSU2_400        0xC150  /* RS232/422/485 dual port */
  70 #define QUATECH_QSU2_100        0xC160  /* RS232 four port */
  71 #define QUATECH_QSU2_400        0xC170  /* RS232/422/485 four port */
  72 #define QUATECH_ESU2_100        0xC1A0  /* RS232 eight port */
  73 #define QUATECH_ESU2_400        0xC180  /* RS232/422/485 eight port */
  74 
  75 struct qt2_device_detail {
  76         int product_id;
  77         int num_ports;
  78 };
  79 
  80 #define QT_DETAILS(prod, ports) \
  81         .product_id = (prod),   \
  82         .num_ports = (ports)
  83 
  84 static const struct qt2_device_detail qt2_device_details[] = {
  85         {QT_DETAILS(QUATECH_SSU2_100, 1)},
  86         {QT_DETAILS(QUATECH_DSU2_400, 2)},
  87         {QT_DETAILS(QUATECH_DSU2_100, 2)},
  88         {QT_DETAILS(QUATECH_QSU2_400, 4)},
  89         {QT_DETAILS(QUATECH_QSU2_100, 4)},
  90         {QT_DETAILS(QUATECH_ESU2_400, 8)},
  91         {QT_DETAILS(QUATECH_ESU2_100, 8)},
  92         {QT_DETAILS(0, 0)}      /* Terminating entry */
  93 };
  94 
  95 static const struct usb_device_id id_table[] = {
  96         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_SSU2_100)},
  97         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU2_100)},
  98         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_DSU2_400)},
  99         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU2_100)},
 100         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_QSU2_400)},
 101         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU2_100)},
 102         {USB_DEVICE(USB_VENDOR_ID_QUATECH, QUATECH_ESU2_400)},
 103         {}                      /* Terminating entry */
 104 };
 105 MODULE_DEVICE_TABLE(usb, id_table);
 106 
 107 struct qt2_serial_private {
 108         unsigned char current_port;  /* current port for incoming data */
 109 
 110         struct urb      *read_urb;   /* shared among all ports */
 111         char            *read_buffer;
 112 };
 113 
 114 struct qt2_port_private {
 115         u8   device_port;
 116 
 117         spinlock_t urb_lock;
 118         bool       urb_in_use;
 119         struct urb *write_urb;
 120         char       *write_buffer;
 121 
 122         spinlock_t  lock;
 123         u8          shadowLSR;
 124         u8          shadowMSR;
 125 
 126         struct usb_serial_port *port;
 127 };
 128 
 129 static void qt2_update_lsr(struct usb_serial_port *port, unsigned char *ch);
 130 static void qt2_update_msr(struct usb_serial_port *port, unsigned char *ch);
 131 static void qt2_write_bulk_callback(struct urb *urb);
 132 static void qt2_read_bulk_callback(struct urb *urb);
 133 
 134 static void qt2_release(struct usb_serial *serial)
 135 {
 136         struct qt2_serial_private *serial_priv;
 137 
 138         serial_priv = usb_get_serial_data(serial);
 139 
 140         usb_kill_urb(serial_priv->read_urb);
 141         usb_free_urb(serial_priv->read_urb);
 142         kfree(serial_priv->read_buffer);
 143         kfree(serial_priv);
 144 }
 145 
 146 static inline int calc_baud_divisor(int baudrate)
 147 {
 148         int divisor, rem;
 149 
 150         divisor = MAX_BAUD_RATE / baudrate;
 151         rem = MAX_BAUD_RATE % baudrate;
 152         /* Round to nearest divisor */
 153         if (((rem * 2) >= baudrate) && (baudrate != 110))
 154                 divisor++;
 155 
 156         return divisor;
 157 }
 158 
 159 static inline int qt2_set_port_config(struct usb_device *dev,
 160                                       unsigned char port_number,
 161                                       u16 baudrate, u16 lcr)
 162 {
 163         int divisor = calc_baud_divisor(baudrate);
 164         u16 index = ((u16) (lcr << 8) | (u16) (port_number));
 165 
 166         return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 167                                QT2_GET_SET_UART, 0x40,
 168                                divisor, index, NULL, 0, QT2_USB_TIMEOUT);
 169 }
 170 
 171 static inline int qt2_control_msg(struct usb_device *dev,
 172                                   u8 request, u16 data, u16 index)
 173 {
 174         return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 175                                request, 0x40, data, index,
 176                                NULL, 0, QT2_USB_TIMEOUT);
 177 }
 178 
 179 static inline int qt2_setdevice(struct usb_device *dev, u8 *data)
 180 {
 181         u16 x = ((u16) (data[1] << 8) | (u16) (data[0]));
 182 
 183         return qt2_control_msg(dev, QT_SET_GET_DEVICE, x, 0);
 184 }
 185 
 186 
 187 static inline int qt2_getregister(struct usb_device *dev,
 188                                   u8 uart,
 189                                   u8 reg,
 190                                   u8 *data)
 191 {
 192         int ret;
 193 
 194         ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
 195                               QT_SET_GET_REGISTER, 0xc0, reg,
 196                               uart, data, sizeof(*data), QT2_USB_TIMEOUT);
 197         if (ret < (int)sizeof(*data)) {
 198                 if (ret >= 0)
 199                         ret = -EIO;
 200         }
 201 
 202         return ret;
 203 }
 204 
 205 static inline int qt2_setregister(struct usb_device *dev,
 206                                   u8 uart, u8 reg, u16 data)
 207 {
 208         u16 value = (data << 8) | reg;
 209 
 210         return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 211                                QT_SET_GET_REGISTER, 0x40, value, uart,
 212                                NULL, 0, QT2_USB_TIMEOUT);
 213 }
 214 
 215 static inline int update_mctrl(struct qt2_port_private *port_priv,
 216                                unsigned int set, unsigned int clear)
 217 {
 218         struct usb_serial_port *port = port_priv->port;
 219         struct usb_device *dev = port->serial->dev;
 220         unsigned urb_value;
 221         int status;
 222 
 223         if (((set | clear) & (TIOCM_DTR | TIOCM_RTS)) == 0) {
 224                 dev_dbg(&port->dev,
 225                         "update_mctrl - DTR|RTS not being set|cleared\n");
 226                 return 0;       /* no change */
 227         }
 228 
 229         clear &= ~set;  /* 'set' takes precedence over 'clear' */
 230         urb_value = 0;
 231         if (set & TIOCM_DTR)
 232                 urb_value |= UART_MCR_DTR;
 233         if (set & TIOCM_RTS)
 234                 urb_value |= UART_MCR_RTS;
 235 
 236         status = qt2_setregister(dev, port_priv->device_port, UART_MCR,
 237                                  urb_value);
 238         if (status < 0)
 239                 dev_err(&port->dev,
 240                         "update_mctrl - Error from MODEM_CTRL urb: %i\n",
 241                         status);
 242         return status;
 243 }
 244 
 245 static int qt2_calc_num_ports(struct usb_serial *serial,
 246                                         struct usb_serial_endpoints *epds)
 247 {
 248         struct qt2_device_detail d;
 249         int i;
 250 
 251         for (i = 0; d = qt2_device_details[i], d.product_id != 0; i++) {
 252                 if (d.product_id == le16_to_cpu(serial->dev->descriptor.idProduct))
 253                         return d.num_ports;
 254         }
 255 
 256         /* we didn't recognize the device */
 257         dev_err(&serial->dev->dev,
 258                  "don't know the number of ports, assuming 1\n");
 259 
 260         return 1;
 261 }
 262 
 263 static void qt2_set_termios(struct tty_struct *tty,
 264                             struct usb_serial_port *port,
 265                             struct ktermios *old_termios)
 266 {
 267         struct usb_device *dev = port->serial->dev;
 268         struct qt2_port_private *port_priv;
 269         struct ktermios *termios = &tty->termios;
 270         u16 baud;
 271         unsigned int cflag = termios->c_cflag;
 272         u16 new_lcr = 0;
 273         int status;
 274 
 275         port_priv = usb_get_serial_port_data(port);
 276 
 277         if (cflag & PARENB) {
 278                 if (cflag & PARODD)
 279                         new_lcr |= UART_LCR_PARITY;
 280                 else
 281                         new_lcr |= SERIAL_EVEN_PARITY;
 282         }
 283 
 284         switch (cflag & CSIZE) {
 285         case CS5:
 286                 new_lcr |= UART_LCR_WLEN5;
 287                 break;
 288         case CS6:
 289                 new_lcr |= UART_LCR_WLEN6;
 290                 break;
 291         case CS7:
 292                 new_lcr |= UART_LCR_WLEN7;
 293                 break;
 294         default:
 295         case CS8:
 296                 new_lcr |= UART_LCR_WLEN8;
 297                 break;
 298         }
 299 
 300         baud = tty_get_baud_rate(tty);
 301         if (!baud)
 302                 baud = 9600;
 303 
 304         status = qt2_set_port_config(dev, port_priv->device_port, baud,
 305                                      new_lcr);
 306         if (status < 0)
 307                 dev_err(&port->dev, "%s - qt2_set_port_config failed: %i\n",
 308                         __func__, status);
 309 
 310         if (cflag & CRTSCTS)
 311                 status = qt2_control_msg(dev, QT_HW_FLOW_CONTROL_MASK,
 312                                          SERIAL_CRTSCTS,
 313                                          port_priv->device_port);
 314         else
 315                 status = qt2_control_msg(dev, QT_HW_FLOW_CONTROL_MASK,
 316                                          0, port_priv->device_port);
 317         if (status < 0)
 318                 dev_err(&port->dev, "%s - set HW flow control failed: %i\n",
 319                         __func__, status);
 320 
 321         if (I_IXOFF(tty) || I_IXON(tty)) {
 322                 u16 x = ((u16) (START_CHAR(tty) << 8) | (u16) (STOP_CHAR(tty)));
 323 
 324                 status = qt2_control_msg(dev, QT_SW_FLOW_CONTROL_MASK,
 325                                          x, port_priv->device_port);
 326         } else
 327                 status = qt2_control_msg(dev, QT_SW_FLOW_CONTROL_MASK,
 328                                          0, port_priv->device_port);
 329 
 330         if (status < 0)
 331                 dev_err(&port->dev, "%s - set SW flow control failed: %i\n",
 332                         __func__, status);
 333 
 334 }
 335 
 336 static int qt2_open(struct tty_struct *tty, struct usb_serial_port *port)
 337 {
 338         struct usb_serial *serial;
 339         struct qt2_port_private *port_priv;
 340         u8 *data;
 341         u16 device_port;
 342         int status;
 343         unsigned long flags;
 344 
 345         device_port = port->port_number;
 346 
 347         serial = port->serial;
 348 
 349         port_priv = usb_get_serial_port_data(port);
 350 
 351         /* set the port to RS232 mode */
 352         status = qt2_control_msg(serial->dev, QT2_GET_SET_QMCR,
 353                                  QT2_QMCR_RS232, device_port);
 354         if (status < 0) {
 355                 dev_err(&port->dev,
 356                         "%s failed to set RS232 mode for port %i error %i\n",
 357                         __func__, device_port, status);
 358                 return status;
 359         }
 360 
 361         data = kzalloc(2, GFP_KERNEL);
 362         if (!data)
 363                 return -ENOMEM;
 364 
 365         /* open the port */
 366         status = usb_control_msg(serial->dev,
 367                                  usb_rcvctrlpipe(serial->dev, 0),
 368                                  QT_OPEN_CLOSE_CHANNEL,
 369                                  0xc0, 0,
 370                                  device_port, data, 2, QT2_USB_TIMEOUT);
 371 
 372         if (status < 2) {
 373                 dev_err(&port->dev, "%s - open port failed %i\n", __func__,
 374                         status);
 375                 if (status >= 0)
 376                         status = -EIO;
 377                 kfree(data);
 378                 return status;
 379         }
 380 
 381         spin_lock_irqsave(&port_priv->lock, flags);
 382         port_priv->shadowLSR = data[0];
 383         port_priv->shadowMSR = data[1];
 384         spin_unlock_irqrestore(&port_priv->lock, flags);
 385 
 386         kfree(data);
 387 
 388         /* set to default speed and 8bit word size */
 389         status = qt2_set_port_config(serial->dev, device_port,
 390                                      DEFAULT_BAUD_RATE, UART_LCR_WLEN8);
 391         if (status < 0) {
 392                 dev_err(&port->dev, "%s - initial setup failed (%i)\n",
 393                         __func__, device_port);
 394                 return status;
 395         }
 396 
 397         port_priv->device_port = (u8) device_port;
 398 
 399         if (tty)
 400                 qt2_set_termios(tty, port, &tty->termios);
 401 
 402         return 0;
 403 
 404 }
 405 
 406 static void qt2_close(struct usb_serial_port *port)
 407 {
 408         struct usb_serial *serial;
 409         struct qt2_port_private *port_priv;
 410         int i;
 411 
 412         serial = port->serial;
 413         port_priv = usb_get_serial_port_data(port);
 414 
 415         usb_kill_urb(port_priv->write_urb);
 416 
 417         /* flush the port transmit buffer */
 418         i = usb_control_msg(serial->dev,
 419                             usb_rcvctrlpipe(serial->dev, 0),
 420                             QT2_FLUSH_DEVICE, 0x40, 1,
 421                             port_priv->device_port, NULL, 0, QT2_USB_TIMEOUT);
 422 
 423         if (i < 0)
 424                 dev_err(&port->dev, "%s - transmit buffer flush failed: %i\n",
 425                         __func__, i);
 426 
 427         /* flush the port receive buffer */
 428         i = usb_control_msg(serial->dev,
 429                             usb_rcvctrlpipe(serial->dev, 0),
 430                             QT2_FLUSH_DEVICE, 0x40, 0,
 431                             port_priv->device_port, NULL, 0, QT2_USB_TIMEOUT);
 432 
 433         if (i < 0)
 434                 dev_err(&port->dev, "%s - receive buffer flush failed: %i\n",
 435                         __func__, i);
 436 
 437         /* close the port */
 438         i = usb_control_msg(serial->dev,
 439                             usb_sndctrlpipe(serial->dev, 0),
 440                             QT_OPEN_CLOSE_CHANNEL,
 441                             0x40, 0,
 442                             port_priv->device_port, NULL, 0, QT2_USB_TIMEOUT);
 443 
 444         if (i < 0)
 445                 dev_err(&port->dev, "%s - close port failed %i\n",
 446                         __func__, i);
 447 }
 448 
 449 static void qt2_disconnect(struct usb_serial *serial)
 450 {
 451         struct qt2_serial_private *serial_priv = usb_get_serial_data(serial);
 452 
 453         usb_kill_urb(serial_priv->read_urb);
 454 }
 455 
 456 static int get_serial_info(struct tty_struct *tty,
 457                            struct serial_struct *ss)
 458 {
 459         struct usb_serial_port *port = tty->driver_data;
 460 
 461         ss->line                = port->minor;
 462         ss->port                = 0;
 463         ss->irq                 = 0;
 464         ss->xmit_fifo_size      = port->bulk_out_size;
 465         ss->baud_base           = 9600;
 466         ss->close_delay         = 5*HZ;
 467         ss->closing_wait        = 30*HZ;
 468         return 0;
 469 }
 470 
 471 static void qt2_process_status(struct usb_serial_port *port, unsigned char *ch)
 472 {
 473         switch (*ch) {
 474         case QT2_LINE_STATUS:
 475                 qt2_update_lsr(port, ch + 1);
 476                 break;
 477         case QT2_MODEM_STATUS:
 478                 qt2_update_msr(port, ch + 1);
 479                 break;
 480         }
 481 }
 482 
 483 /* not needed, kept to document functionality */
 484 static void qt2_process_xmit_empty(struct usb_serial_port *port,
 485                                    unsigned char *ch)
 486 {
 487         int bytes_written;
 488 
 489         bytes_written = (int)(*ch) + (int)(*(ch + 1) << 4);
 490 }
 491 
 492 /* not needed, kept to document functionality */
 493 static void qt2_process_flush(struct usb_serial_port *port, unsigned char *ch)
 494 {
 495         return;
 496 }
 497 
 498 static void qt2_process_read_urb(struct urb *urb)
 499 {
 500         struct usb_serial *serial;
 501         struct qt2_serial_private *serial_priv;
 502         struct usb_serial_port *port;
 503         bool escapeflag;
 504         unsigned char *ch;
 505         int i;
 506         unsigned char newport;
 507         int len = urb->actual_length;
 508 
 509         if (!len)
 510                 return;
 511 
 512         ch = urb->transfer_buffer;
 513         serial = urb->context;
 514         serial_priv = usb_get_serial_data(serial);
 515         port = serial->port[serial_priv->current_port];
 516 
 517         for (i = 0; i < urb->actual_length; i++) {
 518                 ch = (unsigned char *)urb->transfer_buffer + i;
 519                 if ((i <= (len - 3)) &&
 520                     (*ch == QT2_CONTROL_BYTE) &&
 521                     (*(ch + 1) == QT2_CONTROL_BYTE)) {
 522                         escapeflag = false;
 523                         switch (*(ch + 2)) {
 524                         case QT2_LINE_STATUS:
 525                         case QT2_MODEM_STATUS:
 526                                 if (i > (len - 4)) {
 527                                         dev_warn(&port->dev,
 528                                                  "%s - status message too short\n",
 529                                                 __func__);
 530                                         break;
 531                                 }
 532                                 qt2_process_status(port, ch + 2);
 533                                 i += 3;
 534                                 escapeflag = true;
 535                                 break;
 536                         case QT2_XMIT_HOLD:
 537                                 if (i > (len - 5)) {
 538                                         dev_warn(&port->dev,
 539                                                  "%s - xmit_empty message too short\n",
 540                                                  __func__);
 541                                         break;
 542                                 }
 543                                 qt2_process_xmit_empty(port, ch + 3);
 544                                 i += 4;
 545                                 escapeflag = true;
 546                                 break;
 547                         case QT2_CHANGE_PORT:
 548                                 if (i > (len - 4)) {
 549                                         dev_warn(&port->dev,
 550                                                  "%s - change_port message too short\n",
 551                                                  __func__);
 552                                         break;
 553                                 }
 554                                 tty_flip_buffer_push(&port->port);
 555 
 556                                 newport = *(ch + 3);
 557 
 558                                 if (newport > serial->num_ports) {
 559                                         dev_err(&port->dev,
 560                                                 "%s - port change to invalid port: %i\n",
 561                                                 __func__, newport);
 562                                         break;
 563                                 }
 564 
 565                                 serial_priv->current_port = newport;
 566                                 port = serial->port[serial_priv->current_port];
 567                                 i += 3;
 568                                 escapeflag = true;
 569                                 break;
 570                         case QT2_REC_FLUSH:
 571                         case QT2_XMIT_FLUSH:
 572                                 qt2_process_flush(port, ch + 2);
 573                                 i += 2;
 574                                 escapeflag = true;
 575                                 break;
 576                         case QT2_CONTROL_ESCAPE:
 577                                 tty_insert_flip_string(&port->port, ch, 2);
 578                                 i += 2;
 579                                 escapeflag = true;
 580                                 break;
 581                         default:
 582                                 dev_warn(&port->dev,
 583                                          "%s - unsupported command %i\n",
 584                                          __func__, *(ch + 2));
 585                                 break;
 586                         }
 587                         if (escapeflag)
 588                                 continue;
 589                 }
 590 
 591                 tty_insert_flip_char(&port->port, *ch, TTY_NORMAL);
 592         }
 593 
 594         tty_flip_buffer_push(&port->port);
 595 }
 596 
 597 static void qt2_write_bulk_callback(struct urb *urb)
 598 {
 599         struct usb_serial_port *port;
 600         struct qt2_port_private *port_priv;
 601         unsigned long flags;
 602 
 603         port = urb->context;
 604         port_priv = usb_get_serial_port_data(port);
 605 
 606         spin_lock_irqsave(&port_priv->urb_lock, flags);
 607 
 608         port_priv->urb_in_use = false;
 609         usb_serial_port_softint(port);
 610 
 611         spin_unlock_irqrestore(&port_priv->urb_lock, flags);
 612 
 613 }
 614 
 615 static void qt2_read_bulk_callback(struct urb *urb)
 616 {
 617         struct usb_serial *serial = urb->context;
 618         int status;
 619 
 620         if (urb->status) {
 621                 dev_warn(&serial->dev->dev,
 622                          "%s - non-zero urb status: %i\n", __func__,
 623                          urb->status);
 624                 return;
 625         }
 626 
 627         qt2_process_read_urb(urb);
 628 
 629         status = usb_submit_urb(urb, GFP_ATOMIC);
 630         if (status != 0)
 631                 dev_err(&serial->dev->dev,
 632                         "%s - resubmit read urb failed: %i\n",
 633                         __func__, status);
 634 }
 635 
 636 static int qt2_setup_urbs(struct usb_serial *serial)
 637 {
 638         struct usb_serial_port *port0;
 639         struct qt2_serial_private *serial_priv;
 640         int status;
 641 
 642         port0 = serial->port[0];
 643 
 644         serial_priv = usb_get_serial_data(serial);
 645         serial_priv->read_urb = usb_alloc_urb(0, GFP_KERNEL);
 646         if (!serial_priv->read_urb)
 647                 return -ENOMEM;
 648 
 649         usb_fill_bulk_urb(serial_priv->read_urb, serial->dev,
 650                           usb_rcvbulkpipe(serial->dev,
 651                                           port0->bulk_in_endpointAddress),
 652                           serial_priv->read_buffer,
 653                           QT2_READ_BUFFER_SIZE,
 654                           qt2_read_bulk_callback, serial);
 655 
 656         status = usb_submit_urb(serial_priv->read_urb, GFP_KERNEL);
 657         if (status != 0) {
 658                 dev_err(&serial->dev->dev,
 659                         "%s - submit read urb failed %i\n", __func__, status);
 660                 usb_free_urb(serial_priv->read_urb);
 661                 return status;
 662         }
 663 
 664         return 0;
 665 }
 666 
 667 static int qt2_attach(struct usb_serial *serial)
 668 {
 669         struct qt2_serial_private *serial_priv;
 670         int status;
 671 
 672         /* power on unit */
 673         status = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
 674                                  0xc2, 0x40, 0x8000, 0, NULL, 0,
 675                                  QT2_USB_TIMEOUT);
 676         if (status < 0) {
 677                 dev_err(&serial->dev->dev,
 678                         "%s - failed to power on unit: %i\n", __func__, status);
 679                 return status;
 680         }
 681 
 682         serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL);
 683         if (!serial_priv)
 684                 return -ENOMEM;
 685 
 686         serial_priv->read_buffer = kmalloc(QT2_READ_BUFFER_SIZE, GFP_KERNEL);
 687         if (!serial_priv->read_buffer) {
 688                 status = -ENOMEM;
 689                 goto err_buf;
 690         }
 691 
 692         usb_set_serial_data(serial, serial_priv);
 693 
 694         status = qt2_setup_urbs(serial);
 695         if (status != 0)
 696                 goto attach_failed;
 697 
 698         return 0;
 699 
 700 attach_failed:
 701         kfree(serial_priv->read_buffer);
 702 err_buf:
 703         kfree(serial_priv);
 704         return status;
 705 }
 706 
 707 static int qt2_port_probe(struct usb_serial_port *port)
 708 {
 709         struct usb_serial *serial = port->serial;
 710         struct qt2_port_private *port_priv;
 711         u8 bEndpointAddress;
 712 
 713         port_priv = kzalloc(sizeof(*port_priv), GFP_KERNEL);
 714         if (!port_priv)
 715                 return -ENOMEM;
 716 
 717         spin_lock_init(&port_priv->lock);
 718         spin_lock_init(&port_priv->urb_lock);
 719         port_priv->port = port;
 720 
 721         port_priv->write_buffer = kmalloc(QT2_WRITE_BUFFER_SIZE, GFP_KERNEL);
 722         if (!port_priv->write_buffer)
 723                 goto err_buf;
 724 
 725         port_priv->write_urb = usb_alloc_urb(0, GFP_KERNEL);
 726         if (!port_priv->write_urb)
 727                 goto err_urb;
 728 
 729         bEndpointAddress = serial->port[0]->bulk_out_endpointAddress;
 730         usb_fill_bulk_urb(port_priv->write_urb, serial->dev,
 731                                 usb_sndbulkpipe(serial->dev, bEndpointAddress),
 732                                 port_priv->write_buffer,
 733                                 QT2_WRITE_BUFFER_SIZE,
 734                                 qt2_write_bulk_callback, port);
 735 
 736         usb_set_serial_port_data(port, port_priv);
 737 
 738         return 0;
 739 err_urb:
 740         kfree(port_priv->write_buffer);
 741 err_buf:
 742         kfree(port_priv);
 743         return -ENOMEM;
 744 }
 745 
 746 static int qt2_port_remove(struct usb_serial_port *port)
 747 {
 748         struct qt2_port_private *port_priv;
 749 
 750         port_priv = usb_get_serial_port_data(port);
 751         usb_free_urb(port_priv->write_urb);
 752         kfree(port_priv->write_buffer);
 753         kfree(port_priv);
 754 
 755         return 0;
 756 }
 757 
 758 static int qt2_tiocmget(struct tty_struct *tty)
 759 {
 760         struct usb_serial_port *port = tty->driver_data;
 761         struct usb_device *dev = port->serial->dev;
 762         struct qt2_port_private *port_priv = usb_get_serial_port_data(port);
 763         u8 *d;
 764         int r;
 765 
 766         d = kzalloc(2, GFP_KERNEL);
 767         if (!d)
 768                 return -ENOMEM;
 769 
 770         r = qt2_getregister(dev, port_priv->device_port, UART_MCR, d);
 771         if (r < 0)
 772                 goto mget_out;
 773 
 774         r = qt2_getregister(dev, port_priv->device_port, UART_MSR, d + 1);
 775         if (r < 0)
 776                 goto mget_out;
 777 
 778         r = (d[0] & UART_MCR_DTR ? TIOCM_DTR : 0) |
 779             (d[0] & UART_MCR_RTS ? TIOCM_RTS : 0) |
 780             (d[1] & UART_MSR_CTS ? TIOCM_CTS : 0) |
 781             (d[1] & UART_MSR_DCD ? TIOCM_CAR : 0) |
 782             (d[1] & UART_MSR_RI ? TIOCM_RI : 0) |
 783             (d[1] & UART_MSR_DSR ? TIOCM_DSR : 0);
 784 
 785 mget_out:
 786         kfree(d);
 787         return r;
 788 }
 789 
 790 static int qt2_tiocmset(struct tty_struct *tty,
 791                         unsigned int set, unsigned int clear)
 792 {
 793         struct qt2_port_private *port_priv;
 794 
 795         port_priv = usb_get_serial_port_data(tty->driver_data);
 796         return update_mctrl(port_priv, set, clear);
 797 }
 798 
 799 static void qt2_break_ctl(struct tty_struct *tty, int break_state)
 800 {
 801         struct usb_serial_port *port = tty->driver_data;
 802         struct qt2_port_private *port_priv;
 803         int status;
 804         u16 val;
 805 
 806         port_priv = usb_get_serial_port_data(port);
 807 
 808         val = (break_state == -1) ? 1 : 0;
 809 
 810         status = qt2_control_msg(port->serial->dev, QT2_BREAK_CONTROL,
 811                                  val, port_priv->device_port);
 812         if (status < 0)
 813                 dev_warn(&port->dev,
 814                          "%s - failed to send control message: %i\n", __func__,
 815                          status);
 816 }
 817 
 818 
 819 
 820 static void qt2_dtr_rts(struct usb_serial_port *port, int on)
 821 {
 822         struct usb_device *dev = port->serial->dev;
 823         struct qt2_port_private *port_priv = usb_get_serial_port_data(port);
 824 
 825         /* Disable flow control */
 826         if (!on) {
 827                 if (qt2_setregister(dev, port_priv->device_port,
 828                                            UART_MCR, 0) < 0)
 829                         dev_warn(&port->dev, "error from flowcontrol urb\n");
 830         }
 831         /* drop RTS and DTR */
 832         if (on)
 833                 update_mctrl(port_priv, TIOCM_DTR | TIOCM_RTS, 0);
 834         else
 835                 update_mctrl(port_priv, 0, TIOCM_DTR | TIOCM_RTS);
 836 }
 837 
 838 static void qt2_update_msr(struct usb_serial_port *port, unsigned char *ch)
 839 {
 840         struct qt2_port_private *port_priv;
 841         u8 newMSR = (u8) *ch;
 842         unsigned long flags;
 843 
 844         /* May be called from qt2_process_read_urb() for an unbound port. */
 845         port_priv = usb_get_serial_port_data(port);
 846         if (!port_priv)
 847                 return;
 848 
 849         spin_lock_irqsave(&port_priv->lock, flags);
 850         port_priv->shadowMSR = newMSR;
 851         spin_unlock_irqrestore(&port_priv->lock, flags);
 852 
 853         if (newMSR & UART_MSR_ANY_DELTA) {
 854                 /* update input line counters */
 855                 if (newMSR & UART_MSR_DCTS)
 856                         port->icount.cts++;
 857                 if (newMSR & UART_MSR_DDSR)
 858                         port->icount.dsr++;
 859                 if (newMSR & UART_MSR_DDCD)
 860                         port->icount.dcd++;
 861                 if (newMSR & UART_MSR_TERI)
 862                         port->icount.rng++;
 863 
 864                 wake_up_interruptible(&port->port.delta_msr_wait);
 865         }
 866 }
 867 
 868 static void qt2_update_lsr(struct usb_serial_port *port, unsigned char *ch)
 869 {
 870         struct qt2_port_private *port_priv;
 871         struct async_icount *icount;
 872         unsigned long flags;
 873         u8 newLSR = (u8) *ch;
 874 
 875         /* May be called from qt2_process_read_urb() for an unbound port. */
 876         port_priv = usb_get_serial_port_data(port);
 877         if (!port_priv)
 878                 return;
 879 
 880         if (newLSR & UART_LSR_BI)
 881                 newLSR &= (u8) (UART_LSR_OE | UART_LSR_BI);
 882 
 883         spin_lock_irqsave(&port_priv->lock, flags);
 884         port_priv->shadowLSR = newLSR;
 885         spin_unlock_irqrestore(&port_priv->lock, flags);
 886 
 887         icount = &port->icount;
 888 
 889         if (newLSR & UART_LSR_BRK_ERROR_BITS) {
 890 
 891                 if (newLSR & UART_LSR_BI)
 892                         icount->brk++;
 893 
 894                 if (newLSR & UART_LSR_OE)
 895                         icount->overrun++;
 896 
 897                 if (newLSR & UART_LSR_PE)
 898                         icount->parity++;
 899 
 900                 if (newLSR & UART_LSR_FE)
 901                         icount->frame++;
 902         }
 903 
 904 }
 905 
 906 static int qt2_write_room(struct tty_struct *tty)
 907 {
 908         struct usb_serial_port *port = tty->driver_data;
 909         struct qt2_port_private *port_priv;
 910         unsigned long flags = 0;
 911         int r;
 912 
 913         port_priv = usb_get_serial_port_data(port);
 914 
 915         spin_lock_irqsave(&port_priv->urb_lock, flags);
 916 
 917         if (port_priv->urb_in_use)
 918                 r = 0;
 919         else
 920                 r = QT2_WRITE_BUFFER_SIZE - QT2_WRITE_CONTROL_SIZE;
 921 
 922         spin_unlock_irqrestore(&port_priv->urb_lock, flags);
 923 
 924         return r;
 925 }
 926 
 927 static int qt2_write(struct tty_struct *tty,
 928                      struct usb_serial_port *port,
 929                      const unsigned char *buf, int count)
 930 {
 931         struct qt2_port_private *port_priv;
 932         struct urb *write_urb;
 933         unsigned char *data;
 934         unsigned long flags;
 935         int status;
 936         int bytes_out = 0;
 937 
 938         port_priv = usb_get_serial_port_data(port);
 939 
 940         if (port_priv->write_urb == NULL) {
 941                 dev_err(&port->dev, "%s - no output urb\n", __func__);
 942                 return 0;
 943         }
 944         write_urb = port_priv->write_urb;
 945 
 946         count = min(count, QT2_WRITE_BUFFER_SIZE - QT2_WRITE_CONTROL_SIZE);
 947 
 948         data = write_urb->transfer_buffer;
 949         spin_lock_irqsave(&port_priv->urb_lock, flags);
 950         if (port_priv->urb_in_use) {
 951                 dev_err(&port->dev, "qt2_write - urb is in use\n");
 952                 goto write_out;
 953         }
 954 
 955         *data++ = QT2_CONTROL_BYTE;
 956         *data++ = QT2_CONTROL_BYTE;
 957         *data++ = port_priv->device_port;
 958         put_unaligned_le16(count, data);
 959         data += 2;
 960         memcpy(data, buf, count);
 961 
 962         write_urb->transfer_buffer_length = count + QT2_WRITE_CONTROL_SIZE;
 963 
 964         status = usb_submit_urb(write_urb, GFP_ATOMIC);
 965         if (status == 0) {
 966                 port_priv->urb_in_use = true;
 967                 bytes_out += count;
 968         }
 969 
 970 write_out:
 971         spin_unlock_irqrestore(&port_priv->urb_lock, flags);
 972         return bytes_out;
 973 }
 974 
 975 
 976 static struct usb_serial_driver qt2_device = {
 977         .driver = {
 978                 .owner = THIS_MODULE,
 979                 .name = "quatech-serial",
 980         },
 981         .description         = DRIVER_DESC,
 982         .id_table            = id_table,
 983         .open                = qt2_open,
 984         .close               = qt2_close,
 985         .write               = qt2_write,
 986         .write_room          = qt2_write_room,
 987         .calc_num_ports      = qt2_calc_num_ports,
 988         .attach              = qt2_attach,
 989         .release             = qt2_release,
 990         .disconnect          = qt2_disconnect,
 991         .port_probe          = qt2_port_probe,
 992         .port_remove         = qt2_port_remove,
 993         .dtr_rts             = qt2_dtr_rts,
 994         .break_ctl           = qt2_break_ctl,
 995         .tiocmget            = qt2_tiocmget,
 996         .tiocmset            = qt2_tiocmset,
 997         .tiocmiwait          = usb_serial_generic_tiocmiwait,
 998         .get_icount          = usb_serial_generic_get_icount,
 999         .get_serial          = get_serial_info,
1000         .set_termios         = qt2_set_termios,
1001 };
1002 
1003 static struct usb_serial_driver *const serial_drivers[] = {
1004         &qt2_device, NULL
1005 };
1006 
1007 module_usb_serial_driver(serial_drivers, id_table);
1008 
1009 MODULE_DESCRIPTION(DRIVER_DESC);
1010 MODULE_LICENSE("GPL v2");

/* [<][>][^][v][top][bottom][index][help] */