2 * Copyright (c) 2012-2014, 2017-2019, Linux Foundation. All rights reserved.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 and
6 * only version 2 as published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
14 /* add additional information to our printk's */
15 #define pr_fmt(fmt) "%s: " fmt "\n", __func__
17 #include <linux/kernel.h>
18 #include <linux/errno.h>
19 #include <linux/init.h>
20 #include <linux/slab.h>
21 #include <linux/module.h>
22 #include <linux/kref.h>
23 #include <linux/platform_device.h>
24 #include <linux/ratelimit.h>
25 #include <linux/uaccess.h>
26 #include <linux/usb.h>
27 #include <linux/debugfs.h>
28 #include <linux/seq_file.h>
29 #include <linux/cdev.h>
30 #include <linux/list.h>
31 #include <linux/wait.h>
32 #include <linux/poll.h>
33 #include <linux/kobject.h>
35 #define DRIVER_DESC "USB host ks bridge driver"
43 #define BUSNAME_LEN 20
45 static enum bus_id str_to_busid(const char *name)
47 if (!strncasecmp("msm_hsic_host", name, BUSNAME_LEN))
49 if (!strncasecmp("msm_ehci_host.0", name, BUSNAME_LEN))
51 if (!strncasecmp("xhci-hcd.0.auto", name, BUSNAME_LEN) ||
52 !strncasecmp("xhci-hcd.1.auto", name, BUSNAME_LEN))
62 struct list_head list;
66 #define FILE_OPENED BIT(0)
67 #define USB_DEV_CONNECTED BIT(1)
69 #define NO_BRIDGE_INSTANCES 4
70 #define EFS_HSIC_BRIDGE_INDEX 2
71 #define EFS_USB_BRIDGE_INDEX 3
72 #define MAX_DATA_PKT_SIZE 16384
73 #define PENDING_URB_TIMEOUT 10
82 struct workqueue_struct *wq;
83 struct work_struct to_mdm_work;
84 struct work_struct start_rx_work;
85 struct list_head to_mdm_list;
86 struct list_head to_ks_list;
87 wait_queue_head_t ks_wait_q;
88 wait_queue_head_t pending_urb_wait;
89 atomic_t tx_pending_cnt;
90 atomic_t rx_pending_cnt;
92 struct ksb_dev_info id_info;
98 struct device *device;
101 struct usb_device *udev;
102 struct usb_interface *ifc;
105 unsigned int in_pipe;
106 unsigned int out_pipe;
107 struct usb_anchor submitted;
111 /* to handle INT IN ep */
114 #define DBG_MSG_LEN 40
115 #define DBG_MAX_MSG 500
116 unsigned int dbg_idx;
119 char (dbgbuf[DBG_MAX_MSG])[DBG_MSG_LEN]; /* buffer */
122 struct ks_bridge *__ksb[NO_BRIDGE_INSTANCES];
124 /* by default debugging is enabled */
125 static unsigned int enable_dbg = 1;
126 module_param(enable_dbg, uint, S_IRUGO | S_IWUSR);
129 dbg_log_event(struct ks_bridge *ksb, char *event, int d1, int d2)
132 unsigned long long t;
133 unsigned long nanosec;
138 write_lock_irqsave(&ksb->dbg_lock, flags);
139 t = cpu_clock(smp_processor_id());
140 nanosec = do_div(t, 1000000000)/1000;
141 scnprintf(ksb->dbgbuf[ksb->dbg_idx], DBG_MSG_LEN, "%5lu.%06lu:%s:%x:%x",
142 (unsigned long)t, nanosec, event, d1, d2);
145 ksb->dbg_idx = ksb->dbg_idx % DBG_MAX_MSG;
146 write_unlock_irqrestore(&ksb->dbg_lock, flags);
150 struct data_pkt *ksb_alloc_data_pkt(size_t count, gfp_t flags, void *ctxt)
152 struct data_pkt *pkt;
154 pkt = kzalloc(sizeof(struct data_pkt), flags);
156 return ERR_PTR(-ENOMEM);
158 pkt->buf = kmalloc(count, flags);
161 return ERR_PTR(-ENOMEM);
165 INIT_LIST_HEAD(&pkt->list);
171 static void ksb_free_data_pkt(struct data_pkt *pkt)
179 submit_one_urb(struct ks_bridge *ksb, gfp_t flags, struct data_pkt *pkt);
180 static ssize_t ksb_fs_read(struct file *fp, char __user *buf,
181 size_t count, loff_t *pos)
185 struct ks_bridge *ksb = fp->private_data;
186 struct data_pkt *pkt = NULL;
187 size_t space, copied;
190 if (!test_bit(USB_DEV_CONNECTED, &ksb->flags))
193 spin_lock_irqsave(&ksb->lock, flags);
194 if (list_empty(&ksb->to_ks_list)) {
195 spin_unlock_irqrestore(&ksb->lock, flags);
196 ret = wait_event_interruptible(ksb->ks_wait_q,
197 !list_empty(&ksb->to_ks_list) ||
198 !test_bit(USB_DEV_CONNECTED, &ksb->flags));
207 while (!list_empty(&ksb->to_ks_list) && space &&
208 test_bit(USB_DEV_CONNECTED, &ksb->flags)) {
211 pkt = list_first_entry(&ksb->to_ks_list, struct data_pkt, list);
212 list_del_init(&pkt->list);
213 len = min_t(size_t, space, pkt->len - pkt->n_read);
214 spin_unlock_irqrestore(&ksb->lock, flags);
216 ret = copy_to_user(buf + copied, pkt->buf + pkt->n_read, len);
219 "copy_to_user failed err:%d\n", ret);
220 ksb_free_data_pkt(pkt);
228 if (pkt->n_read == pkt->len) {
230 * re-init the packet and queue it
234 pkt->len = MAX_DATA_PKT_SIZE;
235 submit_one_urb(ksb, GFP_KERNEL, pkt);
238 spin_lock_irqsave(&ksb->lock, flags);
241 /* put the partial packet back in the list */
242 if (!space && pkt && pkt->n_read != pkt->len) {
243 if (test_bit(USB_DEV_CONNECTED, &ksb->flags))
244 list_add(&pkt->list, &ksb->to_ks_list);
246 ksb_free_data_pkt(pkt);
248 spin_unlock_irqrestore(&ksb->lock, flags);
250 dbg_log_event(ksb, "KS_READ", copied, 0);
252 dev_dbg(ksb->device, "count:%zu space:%zu copied:%zu", count,
258 static void ksb_tx_cb(struct urb *urb)
260 struct data_pkt *pkt = urb->context;
261 struct ks_bridge *ksb = pkt->ctxt;
263 dbg_log_event(ksb, "C TX_URB", urb->status, 0);
264 dev_dbg(&ksb->udev->dev, "status:%d", urb->status);
266 if (test_bit(USB_DEV_CONNECTED, &ksb->flags))
267 usb_autopm_put_interface_async(ksb->ifc);
270 pr_err_ratelimited("%s: urb failed with err:%d",
271 ksb->id_info.name, urb->status);
273 ksb_free_data_pkt(pkt);
275 atomic_dec(&ksb->tx_pending_cnt);
276 wake_up(&ksb->pending_urb_wait);
279 static void ksb_tomdm_work(struct work_struct *w)
281 struct ks_bridge *ksb = container_of(w, struct ks_bridge, to_mdm_work);
282 struct data_pkt *pkt;
287 spin_lock_irqsave(&ksb->lock, flags);
288 while (!list_empty(&ksb->to_mdm_list)
289 && test_bit(USB_DEV_CONNECTED, &ksb->flags)) {
290 pkt = list_first_entry(&ksb->to_mdm_list,
291 struct data_pkt, list);
292 list_del_init(&pkt->list);
293 spin_unlock_irqrestore(&ksb->lock, flags);
295 urb = usb_alloc_urb(0, GFP_KERNEL);
297 dbg_log_event(ksb, "TX_URB_MEM_FAIL", -ENOMEM, 0);
298 pr_err_ratelimited("%s: unable to allocate urb",
300 ksb_free_data_pkt(pkt);
304 ret = usb_autopm_get_interface(ksb->ifc);
305 if (ret < 0 && ret != -EAGAIN && ret != -EACCES) {
306 dbg_log_event(ksb, "TX_URB_AUTOPM_FAIL", ret, 0);
307 pr_err_ratelimited("%s: autopm_get failed:%d",
308 ksb->id_info.name, ret);
310 ksb_free_data_pkt(pkt);
313 usb_fill_bulk_urb(urb, ksb->udev, ksb->out_pipe,
314 pkt->buf, pkt->len, ksb_tx_cb, pkt);
315 usb_anchor_urb(urb, &ksb->submitted);
317 dbg_log_event(ksb, "S TX_URB", pkt->len, 0);
319 atomic_inc(&ksb->tx_pending_cnt);
320 ret = usb_submit_urb(urb, GFP_KERNEL);
322 dev_err(&ksb->udev->dev, "out urb submission failed");
323 usb_unanchor_urb(urb);
325 ksb_free_data_pkt(pkt);
326 usb_autopm_put_interface(ksb->ifc);
327 atomic_dec(&ksb->tx_pending_cnt);
328 wake_up(&ksb->pending_urb_wait);
334 spin_lock_irqsave(&ksb->lock, flags);
336 spin_unlock_irqrestore(&ksb->lock, flags);
339 static ssize_t ksb_fs_write(struct file *fp, const char __user *buf,
340 size_t count, loff_t *pos)
343 struct data_pkt *pkt;
345 struct ks_bridge *ksb = fp->private_data;
347 if (!test_bit(USB_DEV_CONNECTED, &ksb->flags))
350 if (count > MAX_DATA_PKT_SIZE)
351 count = MAX_DATA_PKT_SIZE;
353 pkt = ksb_alloc_data_pkt(count, GFP_KERNEL, ksb);
356 "unable to allocate data packet");
360 ret = copy_from_user(pkt->buf, buf, count);
363 "copy_from_user failed: err:%d", ret);
364 ksb_free_data_pkt(pkt);
368 spin_lock_irqsave(&ksb->lock, flags);
369 list_add_tail(&pkt->list, &ksb->to_mdm_list);
370 spin_unlock_irqrestore(&ksb->lock, flags);
372 queue_work(ksb->wq, &ksb->to_mdm_work);
374 dbg_log_event(ksb, "KS_WRITE", count, 0);
379 static int ksb_fs_open(struct inode *ip, struct file *fp)
381 struct ks_bridge *ksb =
382 container_of(ip->i_cdev, struct ks_bridge, cdev);
385 pr_err("ksb device not found");
389 dev_dbg(ksb->device, ":%s", ksb->id_info.name);
390 dbg_log_event(ksb, "FS-OPEN", 0, 0);
392 fp->private_data = ksb;
393 set_bit(FILE_OPENED, &ksb->flags);
395 if (test_bit(USB_DEV_CONNECTED, &ksb->flags))
396 queue_work(ksb->wq, &ksb->start_rx_work);
401 static unsigned int ksb_fs_poll(struct file *file, poll_table *wait)
403 struct ks_bridge *ksb = file->private_data;
407 if (!test_bit(USB_DEV_CONNECTED, &ksb->flags))
410 poll_wait(file, &ksb->ks_wait_q, wait);
411 if (!test_bit(USB_DEV_CONNECTED, &ksb->flags))
414 spin_lock_irqsave(&ksb->lock, flags);
415 if (!list_empty(&ksb->to_ks_list))
416 ret = POLLIN | POLLRDNORM;
417 spin_unlock_irqrestore(&ksb->lock, flags);
422 static int ksb_fs_release(struct inode *ip, struct file *fp)
424 struct ks_bridge *ksb = fp->private_data;
426 if (test_bit(USB_DEV_CONNECTED, &ksb->flags))
427 dev_dbg(ksb->device, ":%s", ksb->id_info.name);
428 dbg_log_event(ksb, "FS-RELEASE", 0, 0);
430 clear_bit(FILE_OPENED, &ksb->flags);
431 fp->private_data = NULL;
436 static const struct file_operations ksb_fops = {
437 .owner = THIS_MODULE,
439 .write = ksb_fs_write,
441 .release = ksb_fs_release,
445 static struct ksb_dev_info ksb_fboot_dev[] = {
447 .name = "ks_hsic_bridge",
450 .name = "ks_usb_bridge",
454 static struct ksb_dev_info ksb_efs_hsic_dev = {
455 .name = "efs_hsic_bridge",
458 static struct ksb_dev_info ksb_efs_usb_dev = {
459 .name = "efs_usb_bridge",
461 static const struct usb_device_id ksb_usb_ids[] = {
462 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x9008, 0),
463 .driver_info = (unsigned long)&ksb_fboot_dev, },
464 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x9025, 0), },
465 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x9091, 0), },
466 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x901D, 0), },
467 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x901F, 0), },
468 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x900E, 0), },
469 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x9900, 0), },
470 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x9901, 0), },
471 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x9902, 3),
472 .driver_info = (unsigned long)&ksb_fboot_dev, },
473 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x9903, 5),
474 .driver_info = (unsigned long)&ksb_fboot_dev, },
475 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x9048, 2),
476 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
477 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x904C, 2),
478 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
479 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x9075, 2),
480 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
481 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x9079, 2),
482 .driver_info = (unsigned long)&ksb_efs_usb_dev, },
483 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x908A, 2),
484 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
485 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x908E, 3),
486 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
487 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x909C, 2),
488 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
489 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x909D, 2),
490 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
491 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x909E, 3),
492 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
493 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x909F, 2),
494 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
495 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x90A0, 2),
496 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
497 { USB_DEVICE_INTERFACE_NUMBER(0x5c6, 0x90A4, 3),
498 .driver_info = (unsigned long)&ksb_efs_hsic_dev, },
500 {} /* terminating entry */
502 MODULE_DEVICE_TABLE(usb, ksb_usb_ids);
504 static void ksb_rx_cb(struct urb *urb);
506 submit_one_urb(struct ks_bridge *ksb, gfp_t flags, struct data_pkt *pkt)
511 urb = usb_alloc_urb(0, flags);
513 dev_err(&ksb->udev->dev, "unable to allocate urb");
514 ksb_free_data_pkt(pkt);
519 usb_fill_int_urb(urb, ksb->udev, ksb->in_pipe,
521 ksb_rx_cb, pkt, ksb->period);
523 usb_fill_bulk_urb(urb, ksb->udev, ksb->in_pipe,
527 usb_anchor_urb(urb, &ksb->submitted);
529 if (!test_bit(USB_DEV_CONNECTED, &ksb->flags)) {
530 usb_unanchor_urb(urb);
532 ksb_free_data_pkt(pkt);
536 atomic_inc(&ksb->rx_pending_cnt);
537 ret = usb_submit_urb(urb, flags);
539 dev_err(&ksb->udev->dev, "in urb submission failed");
540 usb_unanchor_urb(urb);
542 ksb_free_data_pkt(pkt);
543 atomic_dec(&ksb->rx_pending_cnt);
544 wake_up(&ksb->pending_urb_wait);
548 dbg_log_event(ksb, "S RX_URB", pkt->len, 0);
552 static void ksb_rx_cb(struct urb *urb)
554 struct data_pkt *pkt = urb->context;
555 struct ks_bridge *ksb = pkt->ctxt;
558 dbg_log_event(ksb, "C RX_URB", urb->status, urb->actual_length);
560 dev_dbg(&ksb->udev->dev, "status:%d actual:%d", urb->status,
563 /*non zero len of data received while unlinking urb*/
564 if (urb->status == -ENOENT && (urb->actual_length > 0)) {
566 * If we wakeup the reader process now, it may
567 * queue the URB before its reject flag gets
574 if (urb->status < 0) {
575 if (urb->status != -ESHUTDOWN && urb->status != -ENOENT
576 && urb->status != -EPROTO)
577 pr_err_ratelimited("%s: urb failed with err:%d",
578 ksb->id_info.name, urb->status);
580 if (!urb->actual_length) {
581 ksb_free_data_pkt(pkt);
586 usb_mark_last_busy(ksb->udev);
588 if (urb->actual_length == 0) {
589 submit_one_urb(ksb, GFP_ATOMIC, pkt);
594 spin_lock(&ksb->lock);
595 pkt->len = urb->actual_length;
596 list_add_tail(&pkt->list, &ksb->to_ks_list);
597 spin_unlock(&ksb->lock);
598 /* wake up read thread */
600 wake_up(&ksb->ks_wait_q);
602 atomic_dec(&ksb->rx_pending_cnt);
603 wake_up(&ksb->pending_urb_wait);
606 static void ksb_start_rx_work(struct work_struct *w)
608 struct ks_bridge *ksb =
609 container_of(w, struct ks_bridge, start_rx_work);
610 struct data_pkt *pkt;
616 ret = usb_autopm_get_interface(ksb->ifc);
618 if (ret != -EAGAIN && ret != -EACCES) {
619 pr_err_ratelimited("%s: autopm_get failed:%d",
620 ksb->id_info.name, ret);
625 for (i = 0; i < NO_RX_REQS; i++) {
627 if (!test_bit(USB_DEV_CONNECTED, &ksb->flags))
630 pkt = ksb_alloc_data_pkt(MAX_DATA_PKT_SIZE, GFP_KERNEL, ksb);
632 dev_err(&ksb->udev->dev, "unable to allocate data pkt");
636 urb = usb_alloc_urb(0, GFP_KERNEL);
638 dev_err(&ksb->udev->dev, "unable to allocate urb");
639 ksb_free_data_pkt(pkt);
644 usb_fill_int_urb(urb, ksb->udev, ksb->in_pipe,
646 ksb_rx_cb, pkt, ksb->period);
648 usb_fill_bulk_urb(urb, ksb->udev, ksb->in_pipe,
652 usb_anchor_urb(urb, &ksb->submitted);
654 dbg_log_event(ksb, "S RX_URB", pkt->len, 0);
656 atomic_inc(&ksb->rx_pending_cnt);
657 ret = usb_submit_urb(urb, GFP_KERNEL);
659 dev_err(&ksb->udev->dev, "in urb submission failed");
660 usb_unanchor_urb(urb);
662 ksb_free_data_pkt(pkt);
663 atomic_dec(&ksb->rx_pending_cnt);
664 wake_up(&ksb->pending_urb_wait);
671 usb_autopm_put_interface_async(ksb->ifc);
674 static void ks_bridge_notify_status(struct kobject *kobj,
675 const struct usb_device_id *id)
677 char product_info[32];
678 char *envp[2] = { product_info, NULL };
680 snprintf(product_info, sizeof(product_info), "PRODUCT=%x/%x/%x",
681 id->idVendor, id->idProduct, id->bDeviceProtocol);
682 kobject_uevent_env(kobj, KOBJ_ONLINE, envp);
686 ksb_usb_probe(struct usb_interface *ifc, const struct usb_device_id *id)
688 __u8 ifc_num, ifc_count, ksb_port_num;
689 struct usb_host_interface *ifc_desc;
690 struct usb_endpoint_descriptor *ep_desc;
692 struct ks_bridge *ksb;
694 struct data_pkt *pkt;
695 struct ksb_dev_info *mdev, *fbdev;
696 struct usb_device *udev;
699 bool free_mdev = false;
701 ifc_num = ifc->cur_altsetting->desc.bInterfaceNumber;
703 udev = interface_to_usbdev(ifc);
704 ifc_count = udev->actconfig->desc.bNumInterfaces;
705 fbdev = mdev = (struct ksb_dev_info *)id->driver_info;
707 bus_id = str_to_busid(udev->bus->bus_name);
708 if (bus_id == BUS_UNDEF) {
709 dev_err(&udev->dev, "unknown usb bus %s, probe failed\n",
710 udev->bus->bus_name);
714 switch (id->idProduct) {
720 /* 1-1 mapping between ksb and udev port which starts with 1 */
721 ksb_port_num = udev->portnum - 1;
722 dev_dbg(&udev->dev, "ifc_count: %u, port_num:%u\n", ifc_count,
726 if (ksb_port_num >= NO_BRIDGE_INSTANCES) {
727 dev_err(&udev->dev, "port-num:%u invalid. Try first\n",
731 ksb = __ksb[ksb_port_num];
733 dev_err(&udev->dev, "port already in use\n");
736 mdev = kzalloc(sizeof(struct ksb_dev_info), GFP_KERNEL);
740 mdev->name = ksb->name;
746 mdev = &fbdev[bus_id];
759 ksb = __ksb[EFS_HSIC_BRIDGE_INDEX];
764 ksb = __ksb[EFS_USB_BRIDGE_INDEX];
771 pr_err("ksb is not initialized");
775 ksb->udev = usb_get_dev(interface_to_usbdev(ifc));
777 ifc_desc = ifc->cur_altsetting;
778 ksb->id_info = *mdev;
780 for (i = 0; i < ifc_desc->desc.bNumEndpoints; i++) {
781 ep_desc = &ifc_desc->endpoint[i].desc;
783 if (!ksb->in_epAddr && (usb_endpoint_is_bulk_in(ep_desc))) {
784 ksb->in_epAddr = ep_desc->bEndpointAddress;
788 if (!ksb->in_epAddr && (usb_endpoint_is_int_in(ep_desc))) {
789 ksb->in_epAddr = ep_desc->bEndpointAddress;
790 ksb->period = ep_desc->bInterval;
793 if (!ksb->out_epAddr && usb_endpoint_is_bulk_out(ep_desc))
794 ksb->out_epAddr = ep_desc->bEndpointAddress;
797 if (!(ksb->in_epAddr && ksb->out_epAddr)) {
799 "could not find bulk in and bulk out endpoints");
800 usb_put_dev(ksb->udev);
807 ksb->in_pipe = ksb->period ?
808 usb_rcvintpipe(ksb->udev, ksb->in_epAddr) :
809 usb_rcvbulkpipe(ksb->udev, ksb->in_epAddr);
811 ksb->out_pipe = usb_sndbulkpipe(ksb->udev, ksb->out_epAddr);
813 usb_set_intfdata(ifc, ksb);
814 set_bit(USB_DEV_CONNECTED, &ksb->flags);
815 atomic_set(&ksb->tx_pending_cnt, 0);
816 atomic_set(&ksb->rx_pending_cnt, 0);
818 dbg_log_event(ksb, "PID-ATT", id->idProduct, 0);
820 /*free up stale buffers if any from previous disconnect*/
821 spin_lock_irqsave(&ksb->lock, flags);
822 while (!list_empty(&ksb->to_ks_list)) {
823 pkt = list_first_entry(&ksb->to_ks_list,
824 struct data_pkt, list);
825 list_del_init(&pkt->list);
826 ksb_free_data_pkt(pkt);
828 while (!list_empty(&ksb->to_mdm_list)) {
829 pkt = list_first_entry(&ksb->to_mdm_list,
830 struct data_pkt, list);
831 list_del_init(&pkt->list);
832 ksb_free_data_pkt(pkt);
834 spin_unlock_irqrestore(&ksb->lock, flags);
836 ret = alloc_chrdev_region(&ksb->cdev_start_no, 0, 1, mdev->name);
838 dbg_log_event(ksb, "chr reg failed", ret, 0);
839 goto fail_chrdev_region;
842 ksb->class = class_create(THIS_MODULE, mdev->name);
843 if (IS_ERR(ksb->class)) {
844 dbg_log_event(ksb, "clscr failed", PTR_ERR(ksb->class), 0);
845 goto fail_class_create;
848 cdev_init(&ksb->cdev, &ksb_fops);
849 ksb->cdev.owner = THIS_MODULE;
851 ret = cdev_add(&ksb->cdev, ksb->cdev_start_no, 1);
853 dbg_log_event(ksb, "cdev_add failed", ret, 0);
854 goto fail_class_create;
857 ksb->device = device_create(ksb->class, &udev->dev, ksb->cdev_start_no,
859 if (IS_ERR(ksb->device)) {
860 dbg_log_event(ksb, "devcrfailed", PTR_ERR(ksb->device), 0);
861 goto fail_device_create;
864 if (device_can_wakeup(&ksb->udev->dev))
865 ifc->needs_remote_wakeup = 1;
870 ks_bridge_notify_status(&ksb->device->kobj, id);
871 dev_dbg(&udev->dev, "usb dev connected");
876 cdev_del(&ksb->cdev);
878 unregister_chrdev_region(ksb->cdev_start_no, 1);
880 usb_set_intfdata(ifc, NULL);
881 clear_bit(USB_DEV_CONNECTED, &ksb->flags);
890 static int ksb_usb_suspend(struct usb_interface *ifc, pm_message_t message)
892 struct ks_bridge *ksb = usb_get_intfdata(ifc);
895 dbg_log_event(ksb, "SUSPEND", 0, 0);
897 if (pm_runtime_autosuspend_expiration(&ksb->udev->dev)) {
898 dbg_log_event(ksb, "SUSP ABORT-TimeCheck", 0, 0);
902 usb_kill_anchored_urbs(&ksb->submitted);
904 spin_lock_irqsave(&ksb->lock, flags);
905 if (!list_empty(&ksb->to_ks_list)) {
906 spin_unlock_irqrestore(&ksb->lock, flags);
907 dbg_log_event(ksb, "SUSPEND ABORT", 0, 0);
909 * Now wakeup the reader process and queue
910 * Rx URBs for more data.
912 wake_up(&ksb->ks_wait_q);
913 queue_work(ksb->wq, &ksb->start_rx_work);
916 spin_unlock_irqrestore(&ksb->lock, flags);
921 static int ksb_usb_resume(struct usb_interface *ifc)
923 struct ks_bridge *ksb = usb_get_intfdata(ifc);
925 dbg_log_event(ksb, "RESUME", 0, 0);
927 if (test_bit(FILE_OPENED, &ksb->flags))
928 queue_work(ksb->wq, &ksb->start_rx_work);
933 static void ksb_usb_disconnect(struct usb_interface *ifc)
935 struct ks_bridge *ksb = usb_get_intfdata(ifc);
937 struct data_pkt *pkt;
939 dbg_log_event(ksb, "PID-DETACH", 0, 0);
941 clear_bit(USB_DEV_CONNECTED, &ksb->flags);
942 kobject_uevent(&ksb->device->kobj, KOBJ_OFFLINE);
943 wake_up(&ksb->ks_wait_q);
944 cancel_work_sync(&ksb->to_mdm_work);
945 cancel_work_sync(&ksb->start_rx_work);
947 device_destroy(ksb->class, ksb->cdev_start_no);
948 cdev_del(&ksb->cdev);
949 class_destroy(ksb->class);
950 unregister_chrdev_region(ksb->cdev_start_no, 1);
952 usb_kill_anchored_urbs(&ksb->submitted);
954 wait_event_interruptible_timeout(
955 ksb->pending_urb_wait,
956 !atomic_read(&ksb->tx_pending_cnt) &&
957 !atomic_read(&ksb->rx_pending_cnt),
958 msecs_to_jiffies(PENDING_URB_TIMEOUT));
960 spin_lock_irqsave(&ksb->lock, flags);
961 while (!list_empty(&ksb->to_ks_list)) {
962 pkt = list_first_entry(&ksb->to_ks_list,
963 struct data_pkt, list);
964 list_del_init(&pkt->list);
965 ksb_free_data_pkt(pkt);
967 while (!list_empty(&ksb->to_mdm_list)) {
968 pkt = list_first_entry(&ksb->to_mdm_list,
969 struct data_pkt, list);
970 list_del_init(&pkt->list);
971 ksb_free_data_pkt(pkt);
973 spin_unlock_irqrestore(&ksb->lock, flags);
975 ifc->needs_remote_wakeup = 0;
976 usb_put_dev(ksb->udev);
978 usb_set_intfdata(ifc, NULL);
981 static struct usb_driver ksb_usb_driver = {
983 .probe = ksb_usb_probe,
984 .disconnect = ksb_usb_disconnect,
985 .suspend = ksb_usb_suspend,
986 .resume = ksb_usb_resume,
987 .reset_resume = ksb_usb_resume,
988 .id_table = ksb_usb_ids,
989 .supports_autosuspend = 1,
992 static int ksb_debug_show(struct seq_file *s, void *unused)
995 struct ks_bridge *ksb = s->private;
998 read_lock_irqsave(&ksb->dbg_lock, flags);
999 for (i = 0; i < DBG_MAX_MSG; i++) {
1000 if (i == (ksb->dbg_idx - 1))
1001 seq_printf(s, "-->%s\n", ksb->dbgbuf[i]);
1003 seq_printf(s, "%s\n", ksb->dbgbuf[i]);
1005 read_unlock_irqrestore(&ksb->dbg_lock, flags);
1010 static int ksb_debug_open(struct inode *ip, struct file *fp)
1012 return single_open(fp, ksb_debug_show, ip->i_private);
1017 static const struct file_operations dbg_fops = {
1018 .open = ksb_debug_open,
1020 .llseek = seq_lseek,
1021 .release = single_release,
1024 static struct dentry *dbg_dir;
1026 static int __init ksb_init(void)
1028 struct ks_bridge *ksb;
1029 int num_instances = 0;
1033 dbg_dir = debugfs_create_dir("ks_bridge", NULL);
1034 if (IS_ERR(dbg_dir))
1035 pr_err("unable to create debug dir");
1037 for (i = 0; i < NO_BRIDGE_INSTANCES; i++) {
1038 ksb = kzalloc(sizeof(struct ks_bridge), GFP_KERNEL);
1040 pr_err("unable to allocat mem for ks_bridge");
1046 ksb->name = kasprintf(GFP_KERNEL, "ks_usb_bridge.%i", i);
1048 pr_info("unable to allocate name");
1054 spin_lock_init(&ksb->lock);
1055 INIT_LIST_HEAD(&ksb->to_mdm_list);
1056 INIT_LIST_HEAD(&ksb->to_ks_list);
1057 init_waitqueue_head(&ksb->ks_wait_q);
1058 init_waitqueue_head(&ksb->pending_urb_wait);
1059 ksb->wq = create_singlethread_workqueue(ksb->name);
1061 pr_err("unable to allocate workqueue");
1068 INIT_WORK(&ksb->to_mdm_work, ksb_tomdm_work);
1069 INIT_WORK(&ksb->start_rx_work, ksb_start_rx_work);
1070 init_usb_anchor(&ksb->submitted);
1073 ksb->dbg_lock = __RW_LOCK_UNLOCKED(lck);
1075 if (!IS_ERR(dbg_dir))
1076 debugfs_create_file(ksb->name, S_IRUGO, dbg_dir,
1082 ret = usb_register(&ksb_usb_driver);
1084 pr_err("unable to register ks bridge driver");
1088 pr_info("init done");
1093 if (!IS_ERR(dbg_dir))
1094 debugfs_remove_recursive(dbg_dir);
1096 for (i = 0; i < num_instances; i++) {
1099 destroy_workqueue(ksb->wq);
1108 static void __exit ksb_exit(void)
1110 struct ks_bridge *ksb;
1113 if (!IS_ERR(dbg_dir))
1114 debugfs_remove_recursive(dbg_dir);
1116 usb_deregister(&ksb_usb_driver);
1118 for (i = 0; i < NO_BRIDGE_INSTANCES; i++) {
1121 destroy_workqueue(ksb->wq);
1127 module_init(ksb_init);
1128 module_exit(ksb_exit);
1130 MODULE_DESCRIPTION(DRIVER_DESC);
1131 MODULE_LICENSE("GPL v2");