]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/usb/usbip/vhci_hcd.c
Merge tag 'xfs-4.12-fixes-4' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[karo-tx-linux.git] / drivers / usb / usbip / vhci_hcd.c
1 /*
2  * Copyright (C) 2003-2008 Takahiro Hirofuchi
3  * Copyright (C) 2015-2016 Nobuo Iwata
4  *
5  * This is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
18  * USA.
19  */
20
21 #include <linux/init.h>
22 #include <linux/file.h>
23 #include <linux/kernel.h>
24 #include <linux/kthread.h>
25 #include <linux/module.h>
26 #include <linux/platform_device.h>
27 #include <linux/slab.h>
28
29 #include "usbip_common.h"
30 #include "vhci.h"
31
32 #define DRIVER_AUTHOR "Takahiro Hirofuchi"
33 #define DRIVER_DESC "USB/IP 'Virtual' Host Controller (VHCI) Driver"
34
35 /*
36  * TODO
37  *      - update root hub emulation
38  *      - move the emulation code to userland ?
39  *              porting to other operating systems
40  *              minimize kernel code
41  *      - add suspend/resume code
42  *      - clean up everything
43  */
44
45 /* See usb gadget dummy hcd */
46
47 static int vhci_hub_status(struct usb_hcd *hcd, char *buff);
48 static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
49                             u16 wIndex, char *buff, u16 wLength);
50 static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
51                             gfp_t mem_flags);
52 static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status);
53 static int vhci_start(struct usb_hcd *vhci_hcd);
54 static void vhci_stop(struct usb_hcd *hcd);
55 static int vhci_get_frame_number(struct usb_hcd *hcd);
56
57 static const char driver_name[] = "vhci_hcd";
58 static const char driver_desc[] = "USB/IP Virtual Host Controller";
59
60 int vhci_num_controllers = VHCI_NR_HCS;
61
62 struct platform_device **vhci_pdevs;
63
64 static const char * const bit_desc[] = {
65         "CONNECTION",           /*0*/
66         "ENABLE",               /*1*/
67         "SUSPEND",              /*2*/
68         "OVER_CURRENT",         /*3*/
69         "RESET",                /*4*/
70         "R5",                   /*5*/
71         "R6",                   /*6*/
72         "R7",                   /*7*/
73         "POWER",                /*8*/
74         "LOWSPEED",             /*9*/
75         "HIGHSPEED",            /*10*/
76         "PORT_TEST",            /*11*/
77         "INDICATOR",            /*12*/
78         "R13",                  /*13*/
79         "R14",                  /*14*/
80         "R15",                  /*15*/
81         "C_CONNECTION",         /*16*/
82         "C_ENABLE",             /*17*/
83         "C_SUSPEND",            /*18*/
84         "C_OVER_CURRENT",       /*19*/
85         "C_RESET",              /*20*/
86         "R21",                  /*21*/
87         "R22",                  /*22*/
88         "R23",                  /*23*/
89         "R24",                  /*24*/
90         "R25",                  /*25*/
91         "R26",                  /*26*/
92         "R27",                  /*27*/
93         "R28",                  /*28*/
94         "R29",                  /*29*/
95         "R30",                  /*30*/
96         "R31",                  /*31*/
97 };
98
99 static void dump_port_status_diff(u32 prev_status, u32 new_status)
100 {
101         int i = 0;
102         u32 bit = 1;
103
104         pr_debug("status prev -> new: %08x -> %08x\n", prev_status, new_status);
105         while (bit) {
106                 u32 prev = prev_status & bit;
107                 u32 new = new_status & bit;
108                 char change;
109
110                 if (!prev && new)
111                         change = '+';
112                 else if (prev && !new)
113                         change = '-';
114                 else
115                         change = ' ';
116
117                 if (prev || new)
118                         pr_debug(" %c%s\n", change, bit_desc[i]);
119                 bit <<= 1;
120                 i++;
121         }
122         pr_debug("\n");
123 }
124
125 void rh_port_connect(struct vhci_device *vdev, enum usb_device_speed speed)
126 {
127         struct vhci_hcd *vhci = vdev_to_vhci(vdev);
128         int             rhport = vdev->rhport;
129         u32             status;
130         unsigned long   flags;
131
132         usbip_dbg_vhci_rh("rh_port_connect %d\n", rhport);
133
134         spin_lock_irqsave(&vhci->lock, flags);
135
136         status = vhci->port_status[rhport];
137
138         status |= USB_PORT_STAT_CONNECTION | (1 << USB_PORT_FEAT_C_CONNECTION);
139
140         switch (speed) {
141         case USB_SPEED_HIGH:
142                 status |= USB_PORT_STAT_HIGH_SPEED;
143                 break;
144         case USB_SPEED_LOW:
145                 status |= USB_PORT_STAT_LOW_SPEED;
146                 break;
147         default:
148                 break;
149         }
150
151         vhci->port_status[rhport] = status;
152
153         spin_unlock_irqrestore(&vhci->lock, flags);
154
155         usb_hcd_poll_rh_status(vhci_to_hcd(vhci));
156 }
157
158 static void rh_port_disconnect(struct vhci_device *vdev)
159 {
160         struct vhci_hcd *vhci = vdev_to_vhci(vdev);
161         int             rhport = vdev->rhport;
162         u32             status;
163         unsigned long   flags;
164
165         usbip_dbg_vhci_rh("rh_port_disconnect %d\n", rhport);
166
167         spin_lock_irqsave(&vhci->lock, flags);
168
169         status = vhci->port_status[rhport];
170
171         status &= ~USB_PORT_STAT_CONNECTION;
172         status |= (1 << USB_PORT_FEAT_C_CONNECTION);
173
174         vhci->port_status[rhport] = status;
175
176         spin_unlock_irqrestore(&vhci->lock, flags);
177         usb_hcd_poll_rh_status(vhci_to_hcd(vhci));
178 }
179
180 #define PORT_C_MASK                             \
181         ((USB_PORT_STAT_C_CONNECTION            \
182           | USB_PORT_STAT_C_ENABLE              \
183           | USB_PORT_STAT_C_SUSPEND             \
184           | USB_PORT_STAT_C_OVERCURRENT         \
185           | USB_PORT_STAT_C_RESET) << 16)
186
187 /*
188  * Returns 0 if the status hasn't changed, or the number of bytes in buf.
189  * Ports are 0-indexed from the HCD point of view,
190  * and 1-indexed from the USB core pointer of view.
191  *
192  * @buf: a bitmap to show which port status has been changed.
193  *  bit  0: reserved
194  *  bit  1: the status of port 0 has been changed.
195  *  bit  2: the status of port 1 has been changed.
196  *  ...
197  */
198 static int vhci_hub_status(struct usb_hcd *hcd, char *buf)
199 {
200         struct vhci_hcd *vhci;
201         int             retval;
202         int             rhport;
203         int             changed = 0;
204         unsigned long   flags;
205
206         retval = DIV_ROUND_UP(VHCI_HC_PORTS + 1, 8);
207         memset(buf, 0, retval);
208
209         vhci = hcd_to_vhci(hcd);
210
211         spin_lock_irqsave(&vhci->lock, flags);
212         if (!HCD_HW_ACCESSIBLE(hcd)) {
213                 usbip_dbg_vhci_rh("hw accessible flag not on?\n");
214                 goto done;
215         }
216
217         /* check pseudo status register for each port */
218         for (rhport = 0; rhport < VHCI_HC_PORTS; rhport++) {
219                 if ((vhci->port_status[rhport] & PORT_C_MASK)) {
220                         /* The status of a port has been changed, */
221                         usbip_dbg_vhci_rh("port %d status changed\n", rhport);
222
223                         buf[(rhport + 1) / 8] |= 1 << (rhport + 1) % 8;
224                         changed = 1;
225                 }
226         }
227
228         if ((hcd->state == HC_STATE_SUSPENDED) && (changed == 1))
229                 usb_hcd_resume_root_hub(hcd);
230
231 done:
232         spin_unlock_irqrestore(&vhci->lock, flags);
233         return changed ? retval : 0;
234 }
235
236 static inline void hub_descriptor(struct usb_hub_descriptor *desc)
237 {
238         int width;
239
240         memset(desc, 0, sizeof(*desc));
241         desc->bDescriptorType = USB_DT_HUB;
242         desc->wHubCharacteristics = cpu_to_le16(
243                 HUB_CHAR_INDV_PORT_LPSM | HUB_CHAR_COMMON_OCPM);
244
245         desc->bNbrPorts = VHCI_HC_PORTS;
246         BUILD_BUG_ON(VHCI_HC_PORTS > USB_MAXCHILDREN);
247         width = desc->bNbrPorts / 8 + 1;
248         desc->bDescLength = USB_DT_HUB_NONVAR_SIZE + 2 * width;
249         memset(&desc->u.hs.DeviceRemovable[0], 0, width);
250         memset(&desc->u.hs.DeviceRemovable[width], 0xff, width);
251 }
252
253 static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
254                             u16 wIndex, char *buf, u16 wLength)
255 {
256         struct vhci_hcd *dum;
257         int             retval = 0;
258         int             rhport;
259         unsigned long   flags;
260
261         u32 prev_port_status[VHCI_HC_PORTS];
262
263         if (!HCD_HW_ACCESSIBLE(hcd))
264                 return -ETIMEDOUT;
265
266         /*
267          * NOTE:
268          * wIndex shows the port number and begins from 1.
269          */
270         usbip_dbg_vhci_rh("typeReq %x wValue %x wIndex %x\n", typeReq, wValue,
271                           wIndex);
272         if (wIndex > VHCI_HC_PORTS)
273                 pr_err("invalid port number %d\n", wIndex);
274         rhport = ((__u8)(wIndex & 0x00ff)) - 1;
275
276         dum = hcd_to_vhci(hcd);
277
278         spin_lock_irqsave(&dum->lock, flags);
279
280         /* store old status and compare now and old later */
281         if (usbip_dbg_flag_vhci_rh) {
282                 memcpy(prev_port_status, dum->port_status,
283                         sizeof(prev_port_status));
284         }
285
286         switch (typeReq) {
287         case ClearHubFeature:
288                 usbip_dbg_vhci_rh(" ClearHubFeature\n");
289                 break;
290         case ClearPortFeature:
291                 switch (wValue) {
292                 case USB_PORT_FEAT_SUSPEND:
293                         if (dum->port_status[rhport] & USB_PORT_STAT_SUSPEND) {
294                                 /* 20msec signaling */
295                                 dum->resuming = 1;
296                                 dum->re_timeout =
297                                         jiffies + msecs_to_jiffies(20);
298                         }
299                         break;
300                 case USB_PORT_FEAT_POWER:
301                         usbip_dbg_vhci_rh(
302                                 " ClearPortFeature: USB_PORT_FEAT_POWER\n");
303                         dum->port_status[rhport] = 0;
304                         dum->resuming = 0;
305                         break;
306                 case USB_PORT_FEAT_C_RESET:
307                         usbip_dbg_vhci_rh(
308                                 " ClearPortFeature: USB_PORT_FEAT_C_RESET\n");
309                         switch (dum->vdev[rhport].speed) {
310                         case USB_SPEED_HIGH:
311                                 dum->port_status[rhport] |=
312                                         USB_PORT_STAT_HIGH_SPEED;
313                                 break;
314                         case USB_SPEED_LOW:
315                                 dum->port_status[rhport] |=
316                                         USB_PORT_STAT_LOW_SPEED;
317                                 break;
318                         default:
319                                 break;
320                         }
321                         break;
322                 default:
323                         usbip_dbg_vhci_rh(" ClearPortFeature: default %x\n",
324                                           wValue);
325                         dum->port_status[rhport] &= ~(1 << wValue);
326                         break;
327                 }
328                 break;
329         case GetHubDescriptor:
330                 usbip_dbg_vhci_rh(" GetHubDescriptor\n");
331                 hub_descriptor((struct usb_hub_descriptor *) buf);
332                 break;
333         case GetHubStatus:
334                 usbip_dbg_vhci_rh(" GetHubStatus\n");
335                 *(__le32 *) buf = cpu_to_le32(0);
336                 break;
337         case GetPortStatus:
338                 usbip_dbg_vhci_rh(" GetPortStatus port %x\n", wIndex);
339                 if (wIndex > VHCI_HC_PORTS || wIndex < 1) {
340                         pr_err("invalid port number %d\n", wIndex);
341                         retval = -EPIPE;
342                 }
343
344                 /* we do not care about resume. */
345
346                 /* whoever resets or resumes must GetPortStatus to
347                  * complete it!!
348                  */
349                 if (dum->resuming && time_after(jiffies, dum->re_timeout)) {
350                         dum->port_status[rhport] |=
351                                 (1 << USB_PORT_FEAT_C_SUSPEND);
352                         dum->port_status[rhport] &=
353                                 ~(1 << USB_PORT_FEAT_SUSPEND);
354                         dum->resuming = 0;
355                         dum->re_timeout = 0;
356                 }
357
358                 if ((dum->port_status[rhport] & (1 << USB_PORT_FEAT_RESET)) !=
359                     0 && time_after(jiffies, dum->re_timeout)) {
360                         dum->port_status[rhport] |=
361                                 (1 << USB_PORT_FEAT_C_RESET);
362                         dum->port_status[rhport] &=
363                                 ~(1 << USB_PORT_FEAT_RESET);
364                         dum->re_timeout = 0;
365
366                         if (dum->vdev[rhport].ud.status ==
367                             VDEV_ST_NOTASSIGNED) {
368                                 usbip_dbg_vhci_rh(
369                                         " enable rhport %d (status %u)\n",
370                                         rhport,
371                                         dum->vdev[rhport].ud.status);
372                                 dum->port_status[rhport] |=
373                                         USB_PORT_STAT_ENABLE;
374                         }
375                 }
376                 ((__le16 *) buf)[0] = cpu_to_le16(dum->port_status[rhport]);
377                 ((__le16 *) buf)[1] =
378                         cpu_to_le16(dum->port_status[rhport] >> 16);
379
380                 usbip_dbg_vhci_rh(" GetPortStatus bye %x %x\n", ((u16 *)buf)[0],
381                                   ((u16 *)buf)[1]);
382                 break;
383         case SetHubFeature:
384                 usbip_dbg_vhci_rh(" SetHubFeature\n");
385                 retval = -EPIPE;
386                 break;
387         case SetPortFeature:
388                 switch (wValue) {
389                 case USB_PORT_FEAT_SUSPEND:
390                         usbip_dbg_vhci_rh(
391                                 " SetPortFeature: USB_PORT_FEAT_SUSPEND\n");
392                         break;
393                 case USB_PORT_FEAT_RESET:
394                         usbip_dbg_vhci_rh(
395                                 " SetPortFeature: USB_PORT_FEAT_RESET\n");
396                         /* if it's already running, disconnect first */
397                         if (dum->port_status[rhport] & USB_PORT_STAT_ENABLE) {
398                                 dum->port_status[rhport] &=
399                                         ~(USB_PORT_STAT_ENABLE |
400                                           USB_PORT_STAT_LOW_SPEED |
401                                           USB_PORT_STAT_HIGH_SPEED);
402                                 /* FIXME test that code path! */
403                         }
404                         /* 50msec reset signaling */
405                         dum->re_timeout = jiffies + msecs_to_jiffies(50);
406
407                         /* FALLTHROUGH */
408                 default:
409                         usbip_dbg_vhci_rh(" SetPortFeature: default %d\n",
410                                           wValue);
411                         dum->port_status[rhport] |= (1 << wValue);
412                         break;
413                 }
414                 break;
415
416         default:
417                 pr_err("default: no such request\n");
418
419                 /* "protocol stall" on error */
420                 retval = -EPIPE;
421         }
422
423         if (usbip_dbg_flag_vhci_rh) {
424                 pr_debug("port %d\n", rhport);
425                 /* Only dump valid port status */
426                 if (rhport >= 0) {
427                         dump_port_status_diff(prev_port_status[rhport],
428                                               dum->port_status[rhport]);
429                 }
430         }
431         usbip_dbg_vhci_rh(" bye\n");
432
433         spin_unlock_irqrestore(&dum->lock, flags);
434
435         return retval;
436 }
437
438 static void vhci_tx_urb(struct urb *urb, struct vhci_device *vdev)
439 {
440         struct vhci_priv *priv;
441         struct vhci_hcd *vhci;
442         unsigned long flags;
443
444         if (!vdev) {
445                 pr_err("could not get virtual device");
446                 return;
447         }
448         vhci = vdev_to_vhci(vdev);
449
450         priv = kzalloc(sizeof(struct vhci_priv), GFP_ATOMIC);
451         if (!priv) {
452                 usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC);
453                 return;
454         }
455
456         spin_lock_irqsave(&vdev->priv_lock, flags);
457
458         priv->seqnum = atomic_inc_return(&vhci->seqnum);
459         if (priv->seqnum == 0xffff)
460                 dev_info(&urb->dev->dev, "seqnum max\n");
461
462         priv->vdev = vdev;
463         priv->urb = urb;
464
465         urb->hcpriv = (void *) priv;
466
467         list_add_tail(&priv->list, &vdev->priv_tx);
468
469         wake_up(&vdev->waitq_tx);
470         spin_unlock_irqrestore(&vdev->priv_lock, flags);
471 }
472
473 static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
474                             gfp_t mem_flags)
475 {
476         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
477         struct device *dev = &urb->dev->dev;
478         u8 portnum = urb->dev->portnum;
479         int ret = 0;
480         struct vhci_device *vdev;
481         unsigned long flags;
482
483         usbip_dbg_vhci_hc("enter, usb_hcd %p urb %p mem_flags %d\n",
484                           hcd, urb, mem_flags);
485
486         if (portnum > VHCI_HC_PORTS) {
487                 pr_err("invalid port number %d\n", portnum);
488                 return -ENODEV;
489         }
490         vdev = &vhci->vdev[portnum-1];
491
492         /* patch to usb_sg_init() is in 2.5.60 */
493         BUG_ON(!urb->transfer_buffer && urb->transfer_buffer_length);
494
495         spin_lock_irqsave(&vhci->lock, flags);
496
497         if (urb->status != -EINPROGRESS) {
498                 dev_err(dev, "URB already unlinked!, status %d\n", urb->status);
499                 spin_unlock_irqrestore(&vhci->lock, flags);
500                 return urb->status;
501         }
502
503         /* refuse enqueue for dead connection */
504         spin_lock(&vdev->ud.lock);
505         if (vdev->ud.status == VDEV_ST_NULL ||
506             vdev->ud.status == VDEV_ST_ERROR) {
507                 dev_err(dev, "enqueue for inactive port %d\n", vdev->rhport);
508                 spin_unlock(&vdev->ud.lock);
509                 spin_unlock_irqrestore(&vhci->lock, flags);
510                 return -ENODEV;
511         }
512         spin_unlock(&vdev->ud.lock);
513
514         ret = usb_hcd_link_urb_to_ep(hcd, urb);
515         if (ret)
516                 goto no_need_unlink;
517
518         /*
519          * The enumeration process is as follows;
520          *
521          *  1. Get_Descriptor request to DevAddrs(0) EndPoint(0)
522          *     to get max packet length of default pipe
523          *
524          *  2. Set_Address request to DevAddr(0) EndPoint(0)
525          *
526          */
527         if (usb_pipedevice(urb->pipe) == 0) {
528                 __u8 type = usb_pipetype(urb->pipe);
529                 struct usb_ctrlrequest *ctrlreq =
530                         (struct usb_ctrlrequest *) urb->setup_packet;
531
532                 if (type != PIPE_CONTROL || !ctrlreq) {
533                         dev_err(dev, "invalid request to devnum 0\n");
534                         ret = -EINVAL;
535                         goto no_need_xmit;
536                 }
537
538                 switch (ctrlreq->bRequest) {
539                 case USB_REQ_SET_ADDRESS:
540                         /* set_address may come when a device is reset */
541                         dev_info(dev, "SetAddress Request (%d) to port %d\n",
542                                  ctrlreq->wValue, vdev->rhport);
543
544                         usb_put_dev(vdev->udev);
545                         vdev->udev = usb_get_dev(urb->dev);
546
547                         spin_lock(&vdev->ud.lock);
548                         vdev->ud.status = VDEV_ST_USED;
549                         spin_unlock(&vdev->ud.lock);
550
551                         if (urb->status == -EINPROGRESS) {
552                                 /* This request is successfully completed. */
553                                 /* If not -EINPROGRESS, possibly unlinked. */
554                                 urb->status = 0;
555                         }
556
557                         goto no_need_xmit;
558
559                 case USB_REQ_GET_DESCRIPTOR:
560                         if (ctrlreq->wValue == cpu_to_le16(USB_DT_DEVICE << 8))
561                                 usbip_dbg_vhci_hc(
562                                         "Not yet?:Get_Descriptor to device 0 (get max pipe size)\n");
563
564                         usb_put_dev(vdev->udev);
565                         vdev->udev = usb_get_dev(urb->dev);
566                         goto out;
567
568                 default:
569                         /* NOT REACHED */
570                         dev_err(dev,
571                                 "invalid request to devnum 0 bRequest %u, wValue %u\n",
572                                 ctrlreq->bRequest,
573                                 ctrlreq->wValue);
574                         ret =  -EINVAL;
575                         goto no_need_xmit;
576                 }
577
578         }
579
580 out:
581         vhci_tx_urb(urb, vdev);
582         spin_unlock_irqrestore(&vhci->lock, flags);
583
584         return 0;
585
586 no_need_xmit:
587         usb_hcd_unlink_urb_from_ep(hcd, urb);
588 no_need_unlink:
589         spin_unlock_irqrestore(&vhci->lock, flags);
590         if (!ret)
591                 usb_hcd_giveback_urb(hcd, urb, urb->status);
592         return ret;
593 }
594
595 /*
596  * vhci_rx gives back the urb after receiving the reply of the urb.  If an
597  * unlink pdu is sent or not, vhci_rx receives a normal return pdu and gives
598  * back its urb. For the driver unlinking the urb, the content of the urb is
599  * not important, but the calling to its completion handler is important; the
600  * completion of unlinking is notified by the completion handler.
601  *
602  *
603  * CLIENT SIDE
604  *
605  * - When vhci_hcd receives RET_SUBMIT,
606  *
607  *      - case 1a). the urb of the pdu is not unlinking.
608  *              - normal case
609  *              => just give back the urb
610  *
611  *      - case 1b). the urb of the pdu is unlinking.
612  *              - usbip.ko will return a reply of the unlinking request.
613  *              => give back the urb now and go to case 2b).
614  *
615  * - When vhci_hcd receives RET_UNLINK,
616  *
617  *      - case 2a). a submit request is still pending in vhci_hcd.
618  *              - urb was really pending in usbip.ko and urb_unlink_urb() was
619  *                completed there.
620  *              => free a pending submit request
621  *              => notify unlink completeness by giving back the urb
622  *
623  *      - case 2b). a submit request is *not* pending in vhci_hcd.
624  *              - urb was already given back to the core driver.
625  *              => do not give back the urb
626  *
627  *
628  * SERVER SIDE
629  *
630  * - When usbip receives CMD_UNLINK,
631  *
632  *      - case 3a). the urb of the unlink request is now in submission.
633  *              => do usb_unlink_urb().
634  *              => after the unlink is completed, send RET_UNLINK.
635  *
636  *      - case 3b). the urb of the unlink request is not in submission.
637  *              - may be already completed or never be received
638  *              => send RET_UNLINK
639  *
640  */
641 static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
642 {
643         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
644         struct vhci_priv *priv;
645         struct vhci_device *vdev;
646         unsigned long flags;
647
648         pr_info("dequeue a urb %p\n", urb);
649
650         spin_lock_irqsave(&vhci->lock, flags);
651
652         priv = urb->hcpriv;
653         if (!priv) {
654                 /* URB was never linked! or will be soon given back by
655                  * vhci_rx. */
656                 spin_unlock_irqrestore(&vhci->lock, flags);
657                 return -EIDRM;
658         }
659
660         {
661                 int ret = 0;
662
663                 ret = usb_hcd_check_unlink_urb(hcd, urb, status);
664                 if (ret) {
665                         spin_unlock_irqrestore(&vhci->lock, flags);
666                         return ret;
667                 }
668         }
669
670          /* send unlink request here? */
671         vdev = priv->vdev;
672
673         if (!vdev->ud.tcp_socket) {
674                 /* tcp connection is closed */
675                 spin_lock(&vdev->priv_lock);
676
677                 pr_info("device %p seems to be disconnected\n", vdev);
678                 list_del(&priv->list);
679                 kfree(priv);
680                 urb->hcpriv = NULL;
681
682                 spin_unlock(&vdev->priv_lock);
683
684                 /*
685                  * If tcp connection is alive, we have sent CMD_UNLINK.
686                  * vhci_rx will receive RET_UNLINK and give back the URB.
687                  * Otherwise, we give back it here.
688                  */
689                 pr_info("gives back urb %p\n", urb);
690
691                 usb_hcd_unlink_urb_from_ep(hcd, urb);
692
693                 spin_unlock_irqrestore(&vhci->lock, flags);
694                 usb_hcd_giveback_urb(vhci_to_hcd(vhci), urb, urb->status);
695                 spin_lock_irqsave(&vhci->lock, flags);
696
697         } else {
698                 /* tcp connection is alive */
699                 struct vhci_unlink *unlink;
700
701                 spin_lock(&vdev->priv_lock);
702
703                 /* setup CMD_UNLINK pdu */
704                 unlink = kzalloc(sizeof(struct vhci_unlink), GFP_ATOMIC);
705                 if (!unlink) {
706                         spin_unlock(&vdev->priv_lock);
707                         spin_unlock_irqrestore(&vhci->lock, flags);
708                         usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC);
709                         return -ENOMEM;
710                 }
711
712                 unlink->seqnum = atomic_inc_return(&vhci->seqnum);
713                 if (unlink->seqnum == 0xffff)
714                         pr_info("seqnum max\n");
715
716                 unlink->unlink_seqnum = priv->seqnum;
717
718                 pr_info("device %p seems to be still connected\n", vdev);
719
720                 /* send cmd_unlink and try to cancel the pending URB in the
721                  * peer */
722                 list_add_tail(&unlink->list, &vdev->unlink_tx);
723                 wake_up(&vdev->waitq_tx);
724
725                 spin_unlock(&vdev->priv_lock);
726         }
727
728         spin_unlock_irqrestore(&vhci->lock, flags);
729
730         usbip_dbg_vhci_hc("leave\n");
731         return 0;
732 }
733
734 static void vhci_device_unlink_cleanup(struct vhci_device *vdev)
735 {
736         struct vhci_hcd *vhci = vdev_to_vhci(vdev);
737         struct usb_hcd *hcd = vhci_to_hcd(vhci);
738         struct vhci_unlink *unlink, *tmp;
739         unsigned long flags;
740
741         spin_lock_irqsave(&vhci->lock, flags);
742         spin_lock(&vdev->priv_lock);
743
744         list_for_each_entry_safe(unlink, tmp, &vdev->unlink_tx, list) {
745                 pr_info("unlink cleanup tx %lu\n", unlink->unlink_seqnum);
746                 list_del(&unlink->list);
747                 kfree(unlink);
748         }
749
750         while (!list_empty(&vdev->unlink_rx)) {
751                 struct urb *urb;
752
753                 unlink = list_first_entry(&vdev->unlink_rx, struct vhci_unlink,
754                         list);
755
756                 /* give back URB of unanswered unlink request */
757                 pr_info("unlink cleanup rx %lu\n", unlink->unlink_seqnum);
758
759                 urb = pickup_urb_and_free_priv(vdev, unlink->unlink_seqnum);
760                 if (!urb) {
761                         pr_info("the urb (seqnum %lu) was already given back\n",
762                                 unlink->unlink_seqnum);
763                         list_del(&unlink->list);
764                         kfree(unlink);
765                         continue;
766                 }
767
768                 urb->status = -ENODEV;
769
770                 usb_hcd_unlink_urb_from_ep(hcd, urb);
771
772                 list_del(&unlink->list);
773
774                 spin_unlock(&vdev->priv_lock);
775                 spin_unlock_irqrestore(&vhci->lock, flags);
776
777                 usb_hcd_giveback_urb(hcd, urb, urb->status);
778
779                 spin_lock_irqsave(&vhci->lock, flags);
780                 spin_lock(&vdev->priv_lock);
781
782                 kfree(unlink);
783         }
784
785         spin_unlock(&vdev->priv_lock);
786         spin_unlock_irqrestore(&vhci->lock, flags);
787 }
788
789 /*
790  * The important thing is that only one context begins cleanup.
791  * This is why error handling and cleanup become simple.
792  * We do not want to consider race condition as possible.
793  */
794 static void vhci_shutdown_connection(struct usbip_device *ud)
795 {
796         struct vhci_device *vdev = container_of(ud, struct vhci_device, ud);
797
798         /* need this? see stub_dev.c */
799         if (ud->tcp_socket) {
800                 pr_debug("shutdown tcp_socket %p\n", ud->tcp_socket);
801                 kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR);
802         }
803
804         /* kill threads related to this sdev */
805         if (vdev->ud.tcp_rx) {
806                 kthread_stop_put(vdev->ud.tcp_rx);
807                 vdev->ud.tcp_rx = NULL;
808         }
809         if (vdev->ud.tcp_tx) {
810                 kthread_stop_put(vdev->ud.tcp_tx);
811                 vdev->ud.tcp_tx = NULL;
812         }
813         pr_info("stop threads\n");
814
815         /* active connection is closed */
816         if (vdev->ud.tcp_socket) {
817                 sockfd_put(vdev->ud.tcp_socket);
818                 vdev->ud.tcp_socket = NULL;
819         }
820         pr_info("release socket\n");
821
822         vhci_device_unlink_cleanup(vdev);
823
824         /*
825          * rh_port_disconnect() is a trigger of ...
826          *   usb_disable_device():
827          *      disable all the endpoints for a USB device.
828          *   usb_disable_endpoint():
829          *      disable endpoints. pending urbs are unlinked(dequeued).
830          *
831          * NOTE: After calling rh_port_disconnect(), the USB device drivers of a
832          * detached device should release used urbs in a cleanup function (i.e.
833          * xxx_disconnect()). Therefore, vhci_hcd does not need to release
834          * pushed urbs and their private data in this function.
835          *
836          * NOTE: vhci_dequeue() must be considered carefully. When shutting down
837          * a connection, vhci_shutdown_connection() expects vhci_dequeue()
838          * gives back pushed urbs and frees their private data by request of
839          * the cleanup function of a USB driver. When unlinking a urb with an
840          * active connection, vhci_dequeue() does not give back the urb which
841          * is actually given back by vhci_rx after receiving its return pdu.
842          *
843          */
844         rh_port_disconnect(vdev);
845
846         pr_info("disconnect device\n");
847 }
848
849
850 static void vhci_device_reset(struct usbip_device *ud)
851 {
852         struct vhci_device *vdev = container_of(ud, struct vhci_device, ud);
853         unsigned long flags;
854
855         spin_lock_irqsave(&ud->lock, flags);
856
857         vdev->speed  = 0;
858         vdev->devid  = 0;
859
860         usb_put_dev(vdev->udev);
861         vdev->udev = NULL;
862
863         if (ud->tcp_socket) {
864                 sockfd_put(ud->tcp_socket);
865                 ud->tcp_socket = NULL;
866         }
867         ud->status = VDEV_ST_NULL;
868
869         spin_unlock_irqrestore(&ud->lock, flags);
870 }
871
872 static void vhci_device_unusable(struct usbip_device *ud)
873 {
874         unsigned long flags;
875
876         spin_lock_irqsave(&ud->lock, flags);
877         ud->status = VDEV_ST_ERROR;
878         spin_unlock_irqrestore(&ud->lock, flags);
879 }
880
881 static void vhci_device_init(struct vhci_device *vdev)
882 {
883         memset(vdev, 0, sizeof(struct vhci_device));
884
885         vdev->ud.side   = USBIP_VHCI;
886         vdev->ud.status = VDEV_ST_NULL;
887         spin_lock_init(&vdev->ud.lock);
888
889         INIT_LIST_HEAD(&vdev->priv_rx);
890         INIT_LIST_HEAD(&vdev->priv_tx);
891         INIT_LIST_HEAD(&vdev->unlink_tx);
892         INIT_LIST_HEAD(&vdev->unlink_rx);
893         spin_lock_init(&vdev->priv_lock);
894
895         init_waitqueue_head(&vdev->waitq_tx);
896
897         vdev->ud.eh_ops.shutdown = vhci_shutdown_connection;
898         vdev->ud.eh_ops.reset = vhci_device_reset;
899         vdev->ud.eh_ops.unusable = vhci_device_unusable;
900
901         usbip_start_eh(&vdev->ud);
902 }
903
904 static int hcd_name_to_id(const char *name)
905 {
906         char *c;
907         long val;
908         int ret;
909
910         c = strchr(name, '.');
911         if (c == NULL)
912                 return 0;
913
914         ret = kstrtol(c+1, 10, &val);
915         if (ret < 0)
916                 return ret;
917
918         return val;
919 }
920
921 static int vhci_start(struct usb_hcd *hcd)
922 {
923         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
924         int id, rhport;
925         int err = 0;
926
927         usbip_dbg_vhci_hc("enter vhci_start\n");
928
929         /* initialize private data of usb_hcd */
930
931         for (rhport = 0; rhport < VHCI_HC_PORTS; rhport++) {
932                 struct vhci_device *vdev = &vhci->vdev[rhport];
933
934                 vhci_device_init(vdev);
935                 vdev->rhport = rhport;
936         }
937
938         atomic_set(&vhci->seqnum, 0);
939         spin_lock_init(&vhci->lock);
940
941         hcd->power_budget = 0; /* no limit */
942         hcd->uses_new_polling = 1;
943
944         id = hcd_name_to_id(hcd_name(hcd));
945         if (id < 0) {
946                 pr_err("invalid vhci name %s\n", hcd_name(hcd));
947                 return -EINVAL;
948         }
949
950         /* vhci_hcd is now ready to be controlled through sysfs */
951         if (id == 0) {
952                 err = vhci_init_attr_group();
953                 if (err) {
954                         pr_err("init attr group\n");
955                         return err;
956                 }
957                 err = sysfs_create_group(&hcd_dev(hcd)->kobj, &vhci_attr_group);
958                 if (err) {
959                         pr_err("create sysfs files\n");
960                         vhci_finish_attr_group();
961                         return err;
962                 }
963                 pr_info("created sysfs %s\n", hcd_name(hcd));
964         }
965
966         return 0;
967 }
968
969 static void vhci_stop(struct usb_hcd *hcd)
970 {
971         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
972         int id, rhport;
973
974         usbip_dbg_vhci_hc("stop VHCI controller\n");
975
976         /* 1. remove the userland interface of vhci_hcd */
977         id = hcd_name_to_id(hcd_name(hcd));
978         if (id == 0) {
979                 sysfs_remove_group(&hcd_dev(hcd)->kobj, &vhci_attr_group);
980                 vhci_finish_attr_group();
981         }
982
983         /* 2. shutdown all the ports of vhci_hcd */
984         for (rhport = 0; rhport < VHCI_HC_PORTS; rhport++) {
985                 struct vhci_device *vdev = &vhci->vdev[rhport];
986
987                 usbip_event_add(&vdev->ud, VDEV_EVENT_REMOVED);
988                 usbip_stop_eh(&vdev->ud);
989         }
990 }
991
992 static int vhci_get_frame_number(struct usb_hcd *hcd)
993 {
994         dev_err_ratelimited(&hcd->self.root_hub->dev, "Not yet implemented\n");
995         return 0;
996 }
997
998 #ifdef CONFIG_PM
999
1000 /* FIXME: suspend/resume */
1001 static int vhci_bus_suspend(struct usb_hcd *hcd)
1002 {
1003         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
1004         unsigned long flags;
1005
1006         dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
1007
1008         spin_lock_irqsave(&vhci->lock, flags);
1009         hcd->state = HC_STATE_SUSPENDED;
1010         spin_unlock_irqrestore(&vhci->lock, flags);
1011
1012         return 0;
1013 }
1014
1015 static int vhci_bus_resume(struct usb_hcd *hcd)
1016 {
1017         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
1018         int rc = 0;
1019         unsigned long flags;
1020
1021         dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
1022
1023         spin_lock_irqsave(&vhci->lock, flags);
1024         if (!HCD_HW_ACCESSIBLE(hcd))
1025                 rc = -ESHUTDOWN;
1026         else
1027                 hcd->state = HC_STATE_RUNNING;
1028         spin_unlock_irqrestore(&vhci->lock, flags);
1029
1030         return rc;
1031 }
1032
1033 #else
1034
1035 #define vhci_bus_suspend      NULL
1036 #define vhci_bus_resume       NULL
1037 #endif
1038
1039 static struct hc_driver vhci_hc_driver = {
1040         .description    = driver_name,
1041         .product_desc   = driver_desc,
1042         .hcd_priv_size  = sizeof(struct vhci_hcd),
1043
1044         .flags          = HCD_USB2,
1045
1046         .start          = vhci_start,
1047         .stop           = vhci_stop,
1048
1049         .urb_enqueue    = vhci_urb_enqueue,
1050         .urb_dequeue    = vhci_urb_dequeue,
1051
1052         .get_frame_number = vhci_get_frame_number,
1053
1054         .hub_status_data = vhci_hub_status,
1055         .hub_control    = vhci_hub_control,
1056         .bus_suspend    = vhci_bus_suspend,
1057         .bus_resume     = vhci_bus_resume,
1058 };
1059
1060 static int vhci_hcd_probe(struct platform_device *pdev)
1061 {
1062         struct usb_hcd          *hcd;
1063         int                     ret;
1064
1065         usbip_dbg_vhci_hc("name %s id %d\n", pdev->name, pdev->id);
1066
1067         /*
1068          * Allocate and initialize hcd.
1069          * Our private data is also allocated automatically.
1070          */
1071         hcd = usb_create_hcd(&vhci_hc_driver, &pdev->dev, dev_name(&pdev->dev));
1072         if (!hcd) {
1073                 pr_err("create hcd failed\n");
1074                 return -ENOMEM;
1075         }
1076         hcd->has_tt = 1;
1077
1078         /*
1079          * Finish generic HCD structure initialization and register.
1080          * Call the driver's reset() and start() routines.
1081          */
1082         ret = usb_add_hcd(hcd, 0, 0);
1083         if (ret != 0) {
1084                 pr_err("usb_add_hcd failed %d\n", ret);
1085                 usb_put_hcd(hcd);
1086                 return ret;
1087         }
1088
1089         usbip_dbg_vhci_hc("bye\n");
1090         return 0;
1091 }
1092
1093 static int vhci_hcd_remove(struct platform_device *pdev)
1094 {
1095         struct usb_hcd  *hcd;
1096
1097         hcd = platform_get_drvdata(pdev);
1098         if (!hcd)
1099                 return 0;
1100
1101         /*
1102          * Disconnects the root hub,
1103          * then reverses the effects of usb_add_hcd(),
1104          * invoking the HCD's stop() methods.
1105          */
1106         usb_remove_hcd(hcd);
1107         usb_put_hcd(hcd);
1108
1109         return 0;
1110 }
1111
1112 #ifdef CONFIG_PM
1113
1114 /* what should happen for USB/IP under suspend/resume? */
1115 static int vhci_hcd_suspend(struct platform_device *pdev, pm_message_t state)
1116 {
1117         struct usb_hcd *hcd;
1118         struct vhci_hcd *vhci;
1119         int rhport;
1120         int connected = 0;
1121         int ret = 0;
1122         unsigned long flags;
1123
1124         hcd = platform_get_drvdata(pdev);
1125         if (!hcd)
1126                 return 0;
1127         vhci = hcd_to_vhci(hcd);
1128
1129         spin_lock_irqsave(&vhci->lock, flags);
1130
1131         for (rhport = 0; rhport < VHCI_HC_PORTS; rhport++)
1132                 if (vhci->port_status[rhport] & USB_PORT_STAT_CONNECTION)
1133                         connected += 1;
1134
1135         spin_unlock_irqrestore(&vhci->lock, flags);
1136
1137         if (connected > 0) {
1138                 dev_info(&pdev->dev,
1139                          "We have %d active connection%s. Do not suspend.\n",
1140                          connected, (connected == 1 ? "" : "s"));
1141                 ret =  -EBUSY;
1142         } else {
1143                 dev_info(&pdev->dev, "suspend vhci_hcd");
1144                 clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
1145         }
1146
1147         return ret;
1148 }
1149
1150 static int vhci_hcd_resume(struct platform_device *pdev)
1151 {
1152         struct usb_hcd *hcd;
1153
1154         dev_dbg(&pdev->dev, "%s\n", __func__);
1155
1156         hcd = platform_get_drvdata(pdev);
1157         if (!hcd)
1158                 return 0;
1159         set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
1160         usb_hcd_poll_rh_status(hcd);
1161
1162         return 0;
1163 }
1164
1165 #else
1166
1167 #define vhci_hcd_suspend        NULL
1168 #define vhci_hcd_resume         NULL
1169
1170 #endif
1171
1172 static struct platform_driver vhci_driver = {
1173         .probe  = vhci_hcd_probe,
1174         .remove = vhci_hcd_remove,
1175         .suspend = vhci_hcd_suspend,
1176         .resume = vhci_hcd_resume,
1177         .driver = {
1178                 .name = driver_name,
1179         },
1180 };
1181
1182 static int add_platform_device(int id)
1183 {
1184         struct platform_device *pdev;
1185         int dev_nr;
1186
1187         if (id == 0)
1188                 dev_nr = -1;
1189         else
1190                 dev_nr = id;
1191
1192         pdev = platform_device_register_simple(driver_name, dev_nr, NULL, 0);
1193         if (IS_ERR(pdev))
1194                 return PTR_ERR(pdev);
1195
1196         *(vhci_pdevs + id) = pdev;
1197         return 0;
1198 }
1199
1200 static void del_platform_devices(void)
1201 {
1202         struct platform_device *pdev;
1203         int i;
1204
1205         for (i = 0; i < vhci_num_controllers; i++) {
1206                 pdev = *(vhci_pdevs + i);
1207                 if (pdev != NULL)
1208                         platform_device_unregister(pdev);
1209                 *(vhci_pdevs + i) = NULL;
1210         }
1211         sysfs_remove_link(&platform_bus.kobj, driver_name);
1212 }
1213
1214 static int __init vhci_hcd_init(void)
1215 {
1216         int i, ret;
1217
1218         if (usb_disabled())
1219                 return -ENODEV;
1220
1221         if (vhci_num_controllers < 1)
1222                 vhci_num_controllers = 1;
1223
1224         vhci_pdevs = kcalloc(vhci_num_controllers, sizeof(void *), GFP_KERNEL);
1225         if (vhci_pdevs == NULL)
1226                 return -ENOMEM;
1227
1228         ret = platform_driver_register(&vhci_driver);
1229         if (ret)
1230                 goto err_driver_register;
1231
1232         for (i = 0; i < vhci_num_controllers; i++) {
1233                 ret = add_platform_device(i);
1234                 if (ret)
1235                         goto err_platform_device_register;
1236         }
1237
1238         pr_info(DRIVER_DESC " v" USBIP_VERSION "\n");
1239         return ret;
1240
1241 err_platform_device_register:
1242         del_platform_devices();
1243         platform_driver_unregister(&vhci_driver);
1244 err_driver_register:
1245         kfree(vhci_pdevs);
1246         return ret;
1247 }
1248
1249 static void __exit vhci_hcd_exit(void)
1250 {
1251         del_platform_devices();
1252         platform_driver_unregister(&vhci_driver);
1253         kfree(vhci_pdevs);
1254 }
1255
1256 module_init(vhci_hcd_init);
1257 module_exit(vhci_hcd_exit);
1258
1259 MODULE_AUTHOR(DRIVER_AUTHOR);
1260 MODULE_DESCRIPTION(DRIVER_DESC);
1261 MODULE_LICENSE("GPL");
1262 MODULE_VERSION(USBIP_VERSION);