1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#include <linux/kernel.h>
19#include <linux/errno.h>
20#include <linux/slab.h>
21#include <linux/tty.h>
22#include <linux/tty_driver.h>
23#include <linux/tty_flip.h>
24#include <linux/module.h>
25#include <linux/spinlock.h>
26#include <linux/workqueue.h>
27#include <linux/uaccess.h>
28#include <linux/usb.h>
29#include <linux/usb/serial.h>
30#include <linux/usb/ezusb.h>
31
32
33#if IS_ENABLED(CONFIG_USB_SERIAL_KEYSPAN_PDA)
34 #define KEYSPAN
35#else
36 #undef KEYSPAN
37#endif
38#if IS_ENABLED(CONFIG_USB_SERIAL_XIRCOM)
39 #define XIRCOM
40#else
41 #undef XIRCOM
42#endif
43
44#define DRIVER_AUTHOR "Brian Warner <warner@lothar.com>"
45#define DRIVER_DESC "USB Keyspan PDA Converter driver"
46
47struct keyspan_pda_private {
48 int tx_room;
49 int tx_throttled;
50 struct work_struct wakeup_work;
51 struct work_struct unthrottle_work;
52 struct usb_serial *serial;
53 struct usb_serial_port *port;
54};
55
56
57#define KEYSPAN_VENDOR_ID 0x06cd
58#define KEYSPAN_PDA_FAKE_ID 0x0103
59#define KEYSPAN_PDA_ID 0x0104
60
61
62#define XIRCOM_VENDOR_ID 0x085a
63#define XIRCOM_FAKE_ID 0x8027
64#define XIRCOM_FAKE_ID_2 0x8025
65#define ENTREGA_VENDOR_ID 0x1645
66#define ENTREGA_FAKE_ID 0x8093
67
68static const struct usb_device_id id_table_combined[] = {
69#ifdef KEYSPAN
70 { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_FAKE_ID) },
71#endif
72#ifdef XIRCOM
73 { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
74 { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID_2) },
75 { USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) },
76#endif
77 { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) },
78 { }
79};
80
81MODULE_DEVICE_TABLE(usb, id_table_combined);
82
83static const struct usb_device_id id_table_std[] = {
84 { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) },
85 { }
86};
87
88#ifdef KEYSPAN
89static const struct usb_device_id id_table_fake[] = {
90 { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_FAKE_ID) },
91 { }
92};
93#endif
94
95#ifdef XIRCOM
96static const struct usb_device_id id_table_fake_xircom[] = {
97 { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
98 { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID_2) },
99 { USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) },
100 { }
101};
102#endif
103
104static void keyspan_pda_wakeup_write(struct work_struct *work)
105{
106 struct keyspan_pda_private *priv =
107 container_of(work, struct keyspan_pda_private, wakeup_work);
108 struct usb_serial_port *port = priv->port;
109
110 tty_port_tty_wakeup(&port->port);
111}
112
113static void keyspan_pda_request_unthrottle(struct work_struct *work)
114{
115 struct keyspan_pda_private *priv =
116 container_of(work, struct keyspan_pda_private, unthrottle_work);
117 struct usb_serial *serial = priv->serial;
118 int result;
119
120
121
122 result = usb_control_msg(serial->dev,
123 usb_sndctrlpipe(serial->dev, 0),
124 7,
125 USB_TYPE_VENDOR | USB_RECIP_INTERFACE
126 | USB_DIR_OUT,
127 16,
128 0,
129 NULL,
130 0,
131 2000);
132 if (result < 0)
133 dev_dbg(&serial->dev->dev, "%s - error %d from usb_control_msg\n",
134 __func__, result);
135}
136
137
138static void keyspan_pda_rx_interrupt(struct urb *urb)
139{
140 struct usb_serial_port *port = urb->context;
141 unsigned char *data = urb->transfer_buffer;
142 int retval;
143 int status = urb->status;
144 struct keyspan_pda_private *priv;
145 priv = usb_get_serial_port_data(port);
146
147 switch (status) {
148 case 0:
149
150 break;
151 case -ECONNRESET:
152 case -ENOENT:
153 case -ESHUTDOWN:
154
155 dev_dbg(&urb->dev->dev, "%s - urb shutting down with status: %d\n", __func__, status);
156 return;
157 default:
158 dev_dbg(&urb->dev->dev, "%s - nonzero urb status received: %d\n", __func__, status);
159 goto exit;
160 }
161
162
163 switch (data[0]) {
164 case 0:
165
166 if (urb->actual_length) {
167 tty_insert_flip_string(&port->port, data + 1,
168 urb->actual_length - 1);
169 tty_flip_buffer_push(&port->port);
170 }
171 break;
172 case 1:
173
174 dev_dbg(&port->dev, "rx int, d1=%d, d2=%d\n", data[1], data[2]);
175 switch (data[1]) {
176 case 1:
177 break;
178 case 2:
179 priv->tx_throttled = 0;
180
181 schedule_work(&priv->wakeup_work);
182 break;
183 default:
184 break;
185 }
186 break;
187 default:
188 break;
189 }
190
191exit:
192 retval = usb_submit_urb(urb, GFP_ATOMIC);
193 if (retval)
194 dev_err(&port->dev,
195 "%s - usb_submit_urb failed with result %d\n",
196 __func__, retval);
197}
198
199
200static void keyspan_pda_rx_throttle(struct tty_struct *tty)
201{
202
203
204
205
206
207
208 struct usb_serial_port *port = tty->driver_data;
209
210 usb_kill_urb(port->interrupt_in_urb);
211}
212
213
214static void keyspan_pda_rx_unthrottle(struct tty_struct *tty)
215{
216 struct usb_serial_port *port = tty->driver_data;
217
218
219 if (usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL))
220 dev_dbg(&port->dev, "usb_submit_urb(read urb) failed\n");
221}
222
223
224static speed_t keyspan_pda_setbaud(struct usb_serial *serial, speed_t baud)
225{
226 int rc;
227 int bindex;
228
229 switch (baud) {
230 case 110:
231 bindex = 0;
232 break;
233 case 300:
234 bindex = 1;
235 break;
236 case 1200:
237 bindex = 2;
238 break;
239 case 2400:
240 bindex = 3;
241 break;
242 case 4800:
243 bindex = 4;
244 break;
245 case 9600:
246 bindex = 5;
247 break;
248 case 19200:
249 bindex = 6;
250 break;
251 case 38400:
252 bindex = 7;
253 break;
254 case 57600:
255 bindex = 8;
256 break;
257 case 115200:
258 bindex = 9;
259 break;
260 default:
261 bindex = 5;
262 baud = 9600;
263 }
264
265
266
267 rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
268 0,
269 USB_TYPE_VENDOR
270 | USB_RECIP_INTERFACE
271 | USB_DIR_OUT,
272 bindex,
273 0,
274 NULL,
275 0,
276 2000);
277 if (rc < 0)
278 return 0;
279 return baud;
280}
281
282
283static void keyspan_pda_break_ctl(struct tty_struct *tty, int break_state)
284{
285 struct usb_serial_port *port = tty->driver_data;
286 struct usb_serial *serial = port->serial;
287 int value;
288 int result;
289
290 if (break_state == -1)
291 value = 1;
292 else
293 value = 0;
294 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
295 4,
296 USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT,
297 value, 0, NULL, 0, 2000);
298 if (result < 0)
299 dev_dbg(&port->dev, "%s - error %d from usb_control_msg\n",
300 __func__, result);
301
302
303
304
305}
306
307
308static void keyspan_pda_set_termios(struct tty_struct *tty,
309 struct usb_serial_port *port, struct ktermios *old_termios)
310{
311 struct usb_serial *serial = port->serial;
312 speed_t speed;
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334 speed = tty_get_baud_rate(tty);
335 speed = keyspan_pda_setbaud(serial, speed);
336
337 if (speed == 0) {
338 dev_dbg(&port->dev, "can't handle requested baud rate\n");
339
340 speed = tty_termios_baud_rate(old_termios);
341 }
342
343
344 tty_termios_copy_hw(&tty->termios, old_termios);
345 tty_encode_baud_rate(tty, speed, speed);
346}
347
348
349
350
351
352
353static int keyspan_pda_get_modem_info(struct usb_serial *serial,
354 unsigned char *value)
355{
356 int rc;
357 u8 *data;
358
359 data = kmalloc(1, GFP_KERNEL);
360 if (!data)
361 return -ENOMEM;
362
363 rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
364 3,
365 USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_IN,
366 0, 0, data, 1, 2000);
367 if (rc >= 0)
368 *value = *data;
369
370 kfree(data);
371 return rc;
372}
373
374
375static int keyspan_pda_set_modem_info(struct usb_serial *serial,
376 unsigned char value)
377{
378 int rc;
379 rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
380 3,
381 USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_OUT,
382 value, 0, NULL, 0, 2000);
383 return rc;
384}
385
386static int keyspan_pda_tiocmget(struct tty_struct *tty)
387{
388 struct usb_serial_port *port = tty->driver_data;
389 struct usb_serial *serial = port->serial;
390 int rc;
391 unsigned char status;
392 int value;
393
394 rc = keyspan_pda_get_modem_info(serial, &status);
395 if (rc < 0)
396 return rc;
397 value =
398 ((status & (1<<7)) ? TIOCM_DTR : 0) |
399 ((status & (1<<6)) ? TIOCM_CAR : 0) |
400 ((status & (1<<5)) ? TIOCM_RNG : 0) |
401 ((status & (1<<4)) ? TIOCM_DSR : 0) |
402 ((status & (1<<3)) ? TIOCM_CTS : 0) |
403 ((status & (1<<2)) ? TIOCM_RTS : 0);
404 return value;
405}
406
407static int keyspan_pda_tiocmset(struct tty_struct *tty,
408 unsigned int set, unsigned int clear)
409{
410 struct usb_serial_port *port = tty->driver_data;
411 struct usb_serial *serial = port->serial;
412 int rc;
413 unsigned char status;
414
415 rc = keyspan_pda_get_modem_info(serial, &status);
416 if (rc < 0)
417 return rc;
418
419 if (set & TIOCM_RTS)
420 status |= (1<<2);
421 if (set & TIOCM_DTR)
422 status |= (1<<7);
423
424 if (clear & TIOCM_RTS)
425 status &= ~(1<<2);
426 if (clear & TIOCM_DTR)
427 status &= ~(1<<7);
428 rc = keyspan_pda_set_modem_info(serial, status);
429 return rc;
430}
431
432static int keyspan_pda_write(struct tty_struct *tty,
433 struct usb_serial_port *port, const unsigned char *buf, int count)
434{
435 struct usb_serial *serial = port->serial;
436 int request_unthrottle = 0;
437 int rc = 0;
438 struct keyspan_pda_private *priv;
439
440 priv = usb_get_serial_port_data(port);
441
442
443
444
445
446
447
448
449 if (count == 0) {
450 dev_dbg(&port->dev, "write request of 0 bytes\n");
451 return 0;
452 }
453
454
455
456
457
458 spin_lock_bh(&port->lock);
459 if (!test_bit(0, &port->write_urbs_free) || priv->tx_throttled) {
460 spin_unlock_bh(&port->lock);
461 return 0;
462 }
463 clear_bit(0, &port->write_urbs_free);
464 spin_unlock_bh(&port->lock);
465
466
467
468
469
470
471 count = (count > port->bulk_out_size) ? port->bulk_out_size : count;
472
473
474
475
476 if (count > priv->tx_room && !in_interrupt()) {
477 u8 *room;
478
479 room = kmalloc(1, GFP_KERNEL);
480 if (!room) {
481 rc = -ENOMEM;
482 goto exit;
483 }
484
485 rc = usb_control_msg(serial->dev,
486 usb_rcvctrlpipe(serial->dev, 0),
487 6,
488 USB_TYPE_VENDOR | USB_RECIP_INTERFACE
489 | USB_DIR_IN,
490 0,
491 0,
492 room,
493 1,
494 2000);
495 if (rc > 0) {
496 dev_dbg(&port->dev, "roomquery says %d\n", *room);
497 priv->tx_room = *room;
498 }
499 kfree(room);
500 if (rc < 0) {
501 dev_dbg(&port->dev, "roomquery failed\n");
502 goto exit;
503 }
504 if (rc == 0) {
505 dev_dbg(&port->dev, "roomquery returned 0 bytes\n");
506 rc = -EIO;
507 goto exit;
508 }
509 }
510 if (count > priv->tx_room) {
511
512
513 count = priv->tx_room;
514 request_unthrottle = 1;
515 }
516
517 if (count) {
518
519 memcpy(port->write_urb->transfer_buffer, buf, count);
520
521 port->write_urb->transfer_buffer_length = count;
522
523 priv->tx_room -= count;
524
525 rc = usb_submit_urb(port->write_urb, GFP_ATOMIC);
526 if (rc) {
527 dev_dbg(&port->dev, "usb_submit_urb(write bulk) failed\n");
528 goto exit;
529 }
530 } else {
531
532
533 request_unthrottle = 1;
534 }
535
536 if (request_unthrottle) {
537 priv->tx_throttled = 1;
538 schedule_work(&priv->unthrottle_work);
539 }
540
541 rc = count;
542exit:
543 if (rc < 0)
544 set_bit(0, &port->write_urbs_free);
545 return rc;
546}
547
548
549static void keyspan_pda_write_bulk_callback(struct urb *urb)
550{
551 struct usb_serial_port *port = urb->context;
552 struct keyspan_pda_private *priv;
553
554 set_bit(0, &port->write_urbs_free);
555 priv = usb_get_serial_port_data(port);
556
557
558 schedule_work(&priv->wakeup_work);
559}
560
561
562static int keyspan_pda_write_room(struct tty_struct *tty)
563{
564 struct usb_serial_port *port = tty->driver_data;
565 struct keyspan_pda_private *priv;
566 priv = usb_get_serial_port_data(port);
567
568
569
570 return priv->tx_room;
571}
572
573
574static int keyspan_pda_chars_in_buffer(struct tty_struct *tty)
575{
576 struct usb_serial_port *port = tty->driver_data;
577 struct keyspan_pda_private *priv;
578 unsigned long flags;
579 int ret = 0;
580
581 priv = usb_get_serial_port_data(port);
582
583
584
585
586 spin_lock_irqsave(&port->lock, flags);
587 if (!test_bit(0, &port->write_urbs_free) || priv->tx_throttled)
588 ret = 256;
589 spin_unlock_irqrestore(&port->lock, flags);
590 return ret;
591}
592
593
594static void keyspan_pda_dtr_rts(struct usb_serial_port *port, int on)
595{
596 struct usb_serial *serial = port->serial;
597
598 if (on)
599 keyspan_pda_set_modem_info(serial, (1 << 7) | (1 << 2));
600 else
601 keyspan_pda_set_modem_info(serial, 0);
602}
603
604
605static int keyspan_pda_open(struct tty_struct *tty,
606 struct usb_serial_port *port)
607{
608 struct usb_serial *serial = port->serial;
609 u8 *room;
610 int rc = 0;
611 struct keyspan_pda_private *priv;
612
613
614 room = kmalloc(1, GFP_KERNEL);
615 if (!room)
616 return -ENOMEM;
617
618 rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
619 6,
620 USB_TYPE_VENDOR | USB_RECIP_INTERFACE
621 | USB_DIR_IN,
622 0,
623 0,
624 room,
625 1,
626 2000);
627 if (rc < 0) {
628 dev_dbg(&port->dev, "%s - roomquery failed\n", __func__);
629 goto error;
630 }
631 if (rc == 0) {
632 dev_dbg(&port->dev, "%s - roomquery returned 0 bytes\n", __func__);
633 rc = -EIO;
634 goto error;
635 }
636 priv = usb_get_serial_port_data(port);
637 priv->tx_room = *room;
638 priv->tx_throttled = *room ? 0 : 1;
639
640
641 rc = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
642 if (rc) {
643 dev_dbg(&port->dev, "%s - usb_submit_urb(read int) failed\n", __func__);
644 goto error;
645 }
646error:
647 kfree(room);
648 return rc;
649}
650static void keyspan_pda_close(struct usb_serial_port *port)
651{
652 usb_kill_urb(port->write_urb);
653 usb_kill_urb(port->interrupt_in_urb);
654}
655
656
657
658static int keyspan_pda_fake_startup(struct usb_serial *serial)
659{
660 int response;
661 const char *fw_name;
662
663
664 response = ezusb_fx1_set_reset(serial->dev, 1);
665
666 if (0) { ; }
667#ifdef KEYSPAN
668 else if (le16_to_cpu(serial->dev->descriptor.idVendor) == KEYSPAN_VENDOR_ID)
669 fw_name = "keyspan_pda/keyspan_pda.fw";
670#endif
671#ifdef XIRCOM
672 else if ((le16_to_cpu(serial->dev->descriptor.idVendor) == XIRCOM_VENDOR_ID) ||
673 (le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGA_VENDOR_ID))
674 fw_name = "keyspan_pda/xircom_pgs.fw";
675#endif
676 else {
677 dev_err(&serial->dev->dev, "%s: unknown vendor, aborting.\n",
678 __func__);
679 return -ENODEV;
680 }
681
682 if (ezusb_fx1_ihex_firmware_download(serial->dev, fw_name) < 0) {
683 dev_err(&serial->dev->dev, "failed to load firmware \"%s\"\n",
684 fw_name);
685 return -ENOENT;
686 }
687
688
689
690
691
692 return 1;
693}
694
695#ifdef KEYSPAN
696MODULE_FIRMWARE("keyspan_pda/keyspan_pda.fw");
697#endif
698#ifdef XIRCOM
699MODULE_FIRMWARE("keyspan_pda/xircom_pgs.fw");
700#endif
701
702static int keyspan_pda_attach(struct usb_serial *serial)
703{
704 unsigned char num_ports = serial->num_ports;
705
706 if (serial->num_bulk_out < num_ports ||
707 serial->num_interrupt_in < num_ports) {
708 dev_err(&serial->interface->dev, "missing endpoints\n");
709 return -ENODEV;
710 }
711
712 return 0;
713}
714
715static int keyspan_pda_port_probe(struct usb_serial_port *port)
716{
717
718 struct keyspan_pda_private *priv;
719
720 priv = kmalloc(sizeof(struct keyspan_pda_private), GFP_KERNEL);
721 if (!priv)
722 return -ENOMEM;
723
724 INIT_WORK(&priv->wakeup_work, keyspan_pda_wakeup_write);
725 INIT_WORK(&priv->unthrottle_work, keyspan_pda_request_unthrottle);
726 priv->serial = port->serial;
727 priv->port = port;
728
729 usb_set_serial_port_data(port, priv);
730
731 return 0;
732}
733
734static int keyspan_pda_port_remove(struct usb_serial_port *port)
735{
736 struct keyspan_pda_private *priv;
737
738 priv = usb_get_serial_port_data(port);
739 kfree(priv);
740
741 return 0;
742}
743
744#ifdef KEYSPAN
745static struct usb_serial_driver keyspan_pda_fake_device = {
746 .driver = {
747 .owner = THIS_MODULE,
748 .name = "keyspan_pda_pre",
749 },
750 .description = "Keyspan PDA - (prerenumeration)",
751 .id_table = id_table_fake,
752 .num_ports = 1,
753 .attach = keyspan_pda_fake_startup,
754};
755#endif
756
757#ifdef XIRCOM
758static struct usb_serial_driver xircom_pgs_fake_device = {
759 .driver = {
760 .owner = THIS_MODULE,
761 .name = "xircom_no_firm",
762 },
763 .description = "Xircom / Entrega PGS - (prerenumeration)",
764 .id_table = id_table_fake_xircom,
765 .num_ports = 1,
766 .attach = keyspan_pda_fake_startup,
767};
768#endif
769
770static struct usb_serial_driver keyspan_pda_device = {
771 .driver = {
772 .owner = THIS_MODULE,
773 .name = "keyspan_pda",
774 },
775 .description = "Keyspan PDA",
776 .id_table = id_table_std,
777 .num_ports = 1,
778 .dtr_rts = keyspan_pda_dtr_rts,
779 .open = keyspan_pda_open,
780 .close = keyspan_pda_close,
781 .write = keyspan_pda_write,
782 .write_room = keyspan_pda_write_room,
783 .write_bulk_callback = keyspan_pda_write_bulk_callback,
784 .read_int_callback = keyspan_pda_rx_interrupt,
785 .chars_in_buffer = keyspan_pda_chars_in_buffer,
786 .throttle = keyspan_pda_rx_throttle,
787 .unthrottle = keyspan_pda_rx_unthrottle,
788 .set_termios = keyspan_pda_set_termios,
789 .break_ctl = keyspan_pda_break_ctl,
790 .tiocmget = keyspan_pda_tiocmget,
791 .tiocmset = keyspan_pda_tiocmset,
792 .attach = keyspan_pda_attach,
793 .port_probe = keyspan_pda_port_probe,
794 .port_remove = keyspan_pda_port_remove,
795};
796
797static struct usb_serial_driver * const serial_drivers[] = {
798 &keyspan_pda_device,
799#ifdef KEYSPAN
800 &keyspan_pda_fake_device,
801#endif
802#ifdef XIRCOM
803 &xircom_pgs_fake_device,
804#endif
805 NULL
806};
807
808module_usb_serial_driver(serial_drivers, id_table_combined);
809
810MODULE_AUTHOR(DRIVER_AUTHOR);
811MODULE_DESCRIPTION(DRIVER_DESC);
812MODULE_LICENSE("GPL");
813