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