GNU Linux-libre 4.9.315-gnu1
[releases.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] &= ~USB_PORT_STAT_POWER;
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 struct vhci_device *get_vdev(struct usb_device *udev)
439 {
440         struct platform_device *pdev;
441         struct usb_hcd *hcd;
442         struct vhci_hcd *vhci;
443         int pdev_nr, rhport;
444
445         if (!udev)
446                 return NULL;
447
448         for (pdev_nr = 0; pdev_nr < vhci_num_controllers; pdev_nr++) {
449                 pdev = *(vhci_pdevs + pdev_nr);
450                 if (pdev == NULL)
451                         continue;
452                 hcd = platform_get_drvdata(pdev);
453                 if (hcd == NULL)
454                         continue;
455                 vhci = hcd_to_vhci(hcd);
456                 for (rhport = 0; rhport < VHCI_HC_PORTS; rhport++) {
457                         if (vhci->vdev[rhport].udev == udev)
458                                 return &vhci->vdev[rhport];
459                 }
460         }
461
462         return NULL;
463 }
464
465 static void vhci_tx_urb(struct urb *urb)
466 {
467         struct vhci_device *vdev = get_vdev(urb->dev);
468         struct vhci_priv *priv;
469         struct vhci_hcd *vhci;
470         unsigned long flags;
471
472         if (!vdev) {
473                 pr_err("could not get virtual device");
474                 return;
475         }
476         vhci = vdev_to_vhci(vdev);
477
478         priv = kzalloc(sizeof(struct vhci_priv), GFP_ATOMIC);
479         if (!priv) {
480                 usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC);
481                 return;
482         }
483
484         spin_lock_irqsave(&vdev->priv_lock, flags);
485
486         priv->seqnum = atomic_inc_return(&vhci->seqnum);
487         if (priv->seqnum == 0xffff)
488                 dev_info(&urb->dev->dev, "seqnum max\n");
489
490         priv->vdev = vdev;
491         priv->urb = urb;
492
493         urb->hcpriv = (void *) priv;
494
495         list_add_tail(&priv->list, &vdev->priv_tx);
496
497         wake_up(&vdev->waitq_tx);
498         spin_unlock_irqrestore(&vdev->priv_lock, flags);
499 }
500
501 static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
502                             gfp_t mem_flags)
503 {
504         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
505         struct device *dev = &urb->dev->dev;
506         u8 portnum = urb->dev->portnum;
507         int ret = 0;
508         struct vhci_device *vdev;
509         unsigned long flags;
510
511         if (portnum > VHCI_HC_PORTS) {
512                 pr_err("invalid port number %d\n", portnum);
513                 return -ENODEV;
514         }
515         vdev = &vhci->vdev[portnum-1];
516
517         if (!urb->transfer_buffer && urb->transfer_buffer_length) {
518                 dev_dbg(dev, "Null URB transfer buffer\n");
519                 return -EINVAL;
520         }
521
522         spin_lock_irqsave(&vhci->lock, flags);
523
524         if (urb->status != -EINPROGRESS) {
525                 dev_err(dev, "URB already unlinked!, status %d\n", urb->status);
526                 spin_unlock_irqrestore(&vhci->lock, flags);
527                 return urb->status;
528         }
529
530         /* refuse enqueue for dead connection */
531         spin_lock(&vdev->ud.lock);
532         if (vdev->ud.status == VDEV_ST_NULL ||
533             vdev->ud.status == VDEV_ST_ERROR) {
534                 dev_err(dev, "enqueue for inactive port %d\n", vdev->rhport);
535                 spin_unlock(&vdev->ud.lock);
536                 spin_unlock_irqrestore(&vhci->lock, flags);
537                 return -ENODEV;
538         }
539         spin_unlock(&vdev->ud.lock);
540
541         ret = usb_hcd_link_urb_to_ep(hcd, urb);
542         if (ret)
543                 goto no_need_unlink;
544
545         /*
546          * The enumeration process is as follows;
547          *
548          *  1. Get_Descriptor request to DevAddrs(0) EndPoint(0)
549          *     to get max packet length of default pipe
550          *
551          *  2. Set_Address request to DevAddr(0) EndPoint(0)
552          *
553          */
554         if (usb_pipedevice(urb->pipe) == 0) {
555                 __u8 type = usb_pipetype(urb->pipe);
556                 struct usb_ctrlrequest *ctrlreq =
557                         (struct usb_ctrlrequest *) urb->setup_packet;
558
559                 if (type != PIPE_CONTROL || !ctrlreq) {
560                         dev_err(dev, "invalid request to devnum 0\n");
561                         ret = -EINVAL;
562                         goto no_need_xmit;
563                 }
564
565                 switch (ctrlreq->bRequest) {
566                 case USB_REQ_SET_ADDRESS:
567                         /* set_address may come when a device is reset */
568                         dev_info(dev, "SetAddress Request (%d) to port %d\n",
569                                  ctrlreq->wValue, vdev->rhport);
570
571                         usb_put_dev(vdev->udev);
572                         vdev->udev = usb_get_dev(urb->dev);
573
574                         spin_lock(&vdev->ud.lock);
575                         vdev->ud.status = VDEV_ST_USED;
576                         spin_unlock(&vdev->ud.lock);
577
578                         if (urb->status == -EINPROGRESS) {
579                                 /* This request is successfully completed. */
580                                 /* If not -EINPROGRESS, possibly unlinked. */
581                                 urb->status = 0;
582                         }
583
584                         goto no_need_xmit;
585
586                 case USB_REQ_GET_DESCRIPTOR:
587                         if (ctrlreq->wValue == cpu_to_le16(USB_DT_DEVICE << 8))
588                                 usbip_dbg_vhci_hc(
589                                         "Not yet?:Get_Descriptor to device 0 (get max pipe size)\n");
590
591                         usb_put_dev(vdev->udev);
592                         vdev->udev = usb_get_dev(urb->dev);
593                         goto out;
594
595                 default:
596                         /* NOT REACHED */
597                         dev_err(dev,
598                                 "invalid request to devnum 0 bRequest %u, wValue %u\n",
599                                 ctrlreq->bRequest,
600                                 ctrlreq->wValue);
601                         ret =  -EINVAL;
602                         goto no_need_xmit;
603                 }
604
605         }
606
607 out:
608         vhci_tx_urb(urb);
609         spin_unlock_irqrestore(&vhci->lock, flags);
610
611         return 0;
612
613 no_need_xmit:
614         usb_hcd_unlink_urb_from_ep(hcd, urb);
615 no_need_unlink:
616         spin_unlock_irqrestore(&vhci->lock, flags);
617         if (!ret)
618                 usb_hcd_giveback_urb(hcd, urb, urb->status);
619         return ret;
620 }
621
622 /*
623  * vhci_rx gives back the urb after receiving the reply of the urb.  If an
624  * unlink pdu is sent or not, vhci_rx receives a normal return pdu and gives
625  * back its urb. For the driver unlinking the urb, the content of the urb is
626  * not important, but the calling to its completion handler is important; the
627  * completion of unlinking is notified by the completion handler.
628  *
629  *
630  * CLIENT SIDE
631  *
632  * - When vhci_hcd receives RET_SUBMIT,
633  *
634  *      - case 1a). the urb of the pdu is not unlinking.
635  *              - normal case
636  *              => just give back the urb
637  *
638  *      - case 1b). the urb of the pdu is unlinking.
639  *              - usbip.ko will return a reply of the unlinking request.
640  *              => give back the urb now and go to case 2b).
641  *
642  * - When vhci_hcd receives RET_UNLINK,
643  *
644  *      - case 2a). a submit request is still pending in vhci_hcd.
645  *              - urb was really pending in usbip.ko and urb_unlink_urb() was
646  *                completed there.
647  *              => free a pending submit request
648  *              => notify unlink completeness by giving back the urb
649  *
650  *      - case 2b). a submit request is *not* pending in vhci_hcd.
651  *              - urb was already given back to the core driver.
652  *              => do not give back the urb
653  *
654  *
655  * SERVER SIDE
656  *
657  * - When usbip receives CMD_UNLINK,
658  *
659  *      - case 3a). the urb of the unlink request is now in submission.
660  *              => do usb_unlink_urb().
661  *              => after the unlink is completed, send RET_UNLINK.
662  *
663  *      - case 3b). the urb of the unlink request is not in submission.
664  *              - may be already completed or never be received
665  *              => send RET_UNLINK
666  *
667  */
668 static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
669 {
670         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
671         struct vhci_priv *priv;
672         struct vhci_device *vdev;
673         unsigned long flags;
674
675         spin_lock_irqsave(&vhci->lock, flags);
676
677         priv = urb->hcpriv;
678         if (!priv) {
679                 /* URB was never linked! or will be soon given back by
680                  * vhci_rx. */
681                 spin_unlock_irqrestore(&vhci->lock, flags);
682                 return -EIDRM;
683         }
684
685         {
686                 int ret = 0;
687
688                 ret = usb_hcd_check_unlink_urb(hcd, urb, status);
689                 if (ret) {
690                         spin_unlock_irqrestore(&vhci->lock, flags);
691                         return ret;
692                 }
693         }
694
695          /* send unlink request here? */
696         vdev = priv->vdev;
697
698         if (!vdev->ud.tcp_socket) {
699                 /* tcp connection is closed */
700                 spin_lock(&vdev->priv_lock);
701
702                 list_del(&priv->list);
703                 kfree(priv);
704                 urb->hcpriv = NULL;
705
706                 spin_unlock(&vdev->priv_lock);
707
708                 /*
709                  * If tcp connection is alive, we have sent CMD_UNLINK.
710                  * vhci_rx will receive RET_UNLINK and give back the URB.
711                  * Otherwise, we give back it here.
712                  */
713                 usb_hcd_unlink_urb_from_ep(hcd, urb);
714
715                 spin_unlock_irqrestore(&vhci->lock, flags);
716                 usb_hcd_giveback_urb(vhci_to_hcd(vhci), urb, urb->status);
717                 spin_lock_irqsave(&vhci->lock, flags);
718
719         } else {
720                 /* tcp connection is alive */
721                 struct vhci_unlink *unlink;
722
723                 spin_lock(&vdev->priv_lock);
724
725                 /* setup CMD_UNLINK pdu */
726                 unlink = kzalloc(sizeof(struct vhci_unlink), GFP_ATOMIC);
727                 if (!unlink) {
728                         spin_unlock(&vdev->priv_lock);
729                         spin_unlock_irqrestore(&vhci->lock, flags);
730                         usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC);
731                         return -ENOMEM;
732                 }
733
734                 unlink->seqnum = atomic_inc_return(&vhci->seqnum);
735                 if (unlink->seqnum == 0xffff)
736                         pr_info("seqnum max\n");
737
738                 unlink->unlink_seqnum = priv->seqnum;
739
740                 /* send cmd_unlink and try to cancel the pending URB in the
741                  * peer */
742                 list_add_tail(&unlink->list, &vdev->unlink_tx);
743                 wake_up(&vdev->waitq_tx);
744
745                 spin_unlock(&vdev->priv_lock);
746         }
747
748         spin_unlock_irqrestore(&vhci->lock, flags);
749
750         usbip_dbg_vhci_hc("leave\n");
751         return 0;
752 }
753
754 static void vhci_device_unlink_cleanup(struct vhci_device *vdev)
755 {
756         struct vhci_hcd *vhci = vdev_to_vhci(vdev);
757         struct usb_hcd *hcd = vhci_to_hcd(vhci);
758         struct vhci_unlink *unlink, *tmp;
759         unsigned long flags;
760
761         spin_lock_irqsave(&vhci->lock, flags);
762         spin_lock(&vdev->priv_lock);
763
764         list_for_each_entry_safe(unlink, tmp, &vdev->unlink_tx, list) {
765                 struct urb *urb;
766
767                 /* give back urb of unsent unlink request */
768                 pr_info("unlink cleanup tx %lu\n", unlink->unlink_seqnum);
769
770                 urb = pickup_urb_and_free_priv(vdev, unlink->unlink_seqnum);
771                 if (!urb) {
772                         list_del(&unlink->list);
773                         kfree(unlink);
774                         continue;
775                 }
776
777                 urb->status = -ENODEV;
778
779                 usb_hcd_unlink_urb_from_ep(hcd, urb);
780
781                 list_del(&unlink->list);
782
783                 spin_unlock(&vdev->priv_lock);
784                 spin_unlock_irqrestore(&vhci->lock, flags);
785
786                 usb_hcd_giveback_urb(hcd, urb, urb->status);
787
788                 spin_lock_irqsave(&vhci->lock, flags);
789                 spin_lock(&vdev->priv_lock);
790
791                 kfree(unlink);
792         }
793
794         while (!list_empty(&vdev->unlink_rx)) {
795                 struct urb *urb;
796
797                 unlink = list_first_entry(&vdev->unlink_rx, struct vhci_unlink,
798                         list);
799
800                 /* give back URB of unanswered unlink request */
801                 pr_info("unlink cleanup rx %lu\n", unlink->unlink_seqnum);
802
803                 urb = pickup_urb_and_free_priv(vdev, unlink->unlink_seqnum);
804                 if (!urb) {
805                         pr_info("the urb (seqnum %lu) was already given back\n",
806                                 unlink->unlink_seqnum);
807                         list_del(&unlink->list);
808                         kfree(unlink);
809                         continue;
810                 }
811
812                 urb->status = -ENODEV;
813
814                 usb_hcd_unlink_urb_from_ep(hcd, urb);
815
816                 list_del(&unlink->list);
817
818                 spin_unlock(&vdev->priv_lock);
819                 spin_unlock_irqrestore(&vhci->lock, flags);
820
821                 usb_hcd_giveback_urb(hcd, urb, urb->status);
822
823                 spin_lock_irqsave(&vhci->lock, flags);
824                 spin_lock(&vdev->priv_lock);
825
826                 kfree(unlink);
827         }
828
829         spin_unlock(&vdev->priv_lock);
830         spin_unlock_irqrestore(&vhci->lock, flags);
831 }
832
833 /*
834  * The important thing is that only one context begins cleanup.
835  * This is why error handling and cleanup become simple.
836  * We do not want to consider race condition as possible.
837  */
838 static void vhci_shutdown_connection(struct usbip_device *ud)
839 {
840         struct vhci_device *vdev = container_of(ud, struct vhci_device, ud);
841
842         /* need this? see stub_dev.c */
843         if (ud->tcp_socket) {
844                 pr_debug("shutdown tcp_socket\n");
845                 kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR);
846         }
847
848         /* kill threads related to this sdev */
849         if (vdev->ud.tcp_rx) {
850                 kthread_stop_put(vdev->ud.tcp_rx);
851                 vdev->ud.tcp_rx = NULL;
852         }
853         if (vdev->ud.tcp_tx) {
854                 kthread_stop_put(vdev->ud.tcp_tx);
855                 vdev->ud.tcp_tx = NULL;
856         }
857         pr_info("stop threads\n");
858
859         /* active connection is closed */
860         if (vdev->ud.tcp_socket) {
861                 sockfd_put(vdev->ud.tcp_socket);
862                 vdev->ud.tcp_socket = NULL;
863                 vdev->ud.sockfd = -1;
864         }
865         pr_info("release socket\n");
866
867         vhci_device_unlink_cleanup(vdev);
868
869         /*
870          * rh_port_disconnect() is a trigger of ...
871          *   usb_disable_device():
872          *      disable all the endpoints for a USB device.
873          *   usb_disable_endpoint():
874          *      disable endpoints. pending urbs are unlinked(dequeued).
875          *
876          * NOTE: After calling rh_port_disconnect(), the USB device drivers of a
877          * detached device should release used urbs in a cleanup function (i.e.
878          * xxx_disconnect()). Therefore, vhci_hcd does not need to release
879          * pushed urbs and their private data in this function.
880          *
881          * NOTE: vhci_dequeue() must be considered carefully. When shutting down
882          * a connection, vhci_shutdown_connection() expects vhci_dequeue()
883          * gives back pushed urbs and frees their private data by request of
884          * the cleanup function of a USB driver. When unlinking a urb with an
885          * active connection, vhci_dequeue() does not give back the urb which
886          * is actually given back by vhci_rx after receiving its return pdu.
887          *
888          */
889         rh_port_disconnect(vdev);
890
891         pr_info("disconnect device\n");
892 }
893
894
895 static void vhci_device_reset(struct usbip_device *ud)
896 {
897         struct vhci_device *vdev = container_of(ud, struct vhci_device, ud);
898         unsigned long flags;
899
900         spin_lock_irqsave(&ud->lock, flags);
901
902         vdev->speed  = 0;
903         vdev->devid  = 0;
904
905         usb_put_dev(vdev->udev);
906         vdev->udev = NULL;
907
908         if (ud->tcp_socket) {
909                 sockfd_put(ud->tcp_socket);
910                 ud->tcp_socket = NULL;
911                 ud->sockfd = -1;
912         }
913         ud->status = VDEV_ST_NULL;
914
915         spin_unlock_irqrestore(&ud->lock, flags);
916 }
917
918 static void vhci_device_unusable(struct usbip_device *ud)
919 {
920         unsigned long flags;
921
922         spin_lock_irqsave(&ud->lock, flags);
923         ud->status = VDEV_ST_ERROR;
924         spin_unlock_irqrestore(&ud->lock, flags);
925 }
926
927 static void vhci_device_init(struct vhci_device *vdev)
928 {
929         memset(vdev, 0, sizeof(struct vhci_device));
930
931         vdev->ud.side   = USBIP_VHCI;
932         vdev->ud.status = VDEV_ST_NULL;
933         spin_lock_init(&vdev->ud.lock);
934         mutex_init(&vdev->ud.sysfs_lock);
935
936         INIT_LIST_HEAD(&vdev->priv_rx);
937         INIT_LIST_HEAD(&vdev->priv_tx);
938         INIT_LIST_HEAD(&vdev->unlink_tx);
939         INIT_LIST_HEAD(&vdev->unlink_rx);
940         spin_lock_init(&vdev->priv_lock);
941
942         init_waitqueue_head(&vdev->waitq_tx);
943
944         vdev->ud.eh_ops.shutdown = vhci_shutdown_connection;
945         vdev->ud.eh_ops.reset = vhci_device_reset;
946         vdev->ud.eh_ops.unusable = vhci_device_unusable;
947
948         usbip_start_eh(&vdev->ud);
949 }
950
951 static int hcd_name_to_id(const char *name)
952 {
953         char *c;
954         long val;
955         int ret;
956
957         c = strchr(name, '.');
958         if (c == NULL)
959                 return 0;
960
961         ret = kstrtol(c+1, 10, &val);
962         if (ret < 0)
963                 return ret;
964
965         return val;
966 }
967
968 static int vhci_start(struct usb_hcd *hcd)
969 {
970         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
971         int id, rhport;
972         int err = 0;
973
974         usbip_dbg_vhci_hc("enter vhci_start\n");
975
976         /* initialize private data of usb_hcd */
977
978         for (rhport = 0; rhport < VHCI_HC_PORTS; rhport++) {
979                 struct vhci_device *vdev = &vhci->vdev[rhport];
980
981                 vhci_device_init(vdev);
982                 vdev->rhport = rhport;
983         }
984
985         atomic_set(&vhci->seqnum, 0);
986         spin_lock_init(&vhci->lock);
987
988         hcd->power_budget = 0; /* no limit */
989         hcd->uses_new_polling = 1;
990
991         id = hcd_name_to_id(hcd_name(hcd));
992         if (id < 0) {
993                 pr_err("invalid vhci name %s\n", hcd_name(hcd));
994                 return -EINVAL;
995         }
996
997         /* vhci_hcd is now ready to be controlled through sysfs */
998         if (id == 0) {
999                 err = vhci_init_attr_group();
1000                 if (err) {
1001                         pr_err("init attr group\n");
1002                         return err;
1003                 }
1004                 err = sysfs_create_group(&hcd_dev(hcd)->kobj, &vhci_attr_group);
1005                 if (err) {
1006                         pr_err("create sysfs files\n");
1007                         vhci_finish_attr_group();
1008                         return err;
1009                 }
1010                 pr_info("created sysfs %s\n", hcd_name(hcd));
1011         }
1012
1013         return 0;
1014 }
1015
1016 static void vhci_stop(struct usb_hcd *hcd)
1017 {
1018         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
1019         int id, rhport;
1020
1021         usbip_dbg_vhci_hc("stop VHCI controller\n");
1022
1023         /* 1. remove the userland interface of vhci_hcd */
1024         id = hcd_name_to_id(hcd_name(hcd));
1025         if (id == 0) {
1026                 sysfs_remove_group(&hcd_dev(hcd)->kobj, &vhci_attr_group);
1027                 vhci_finish_attr_group();
1028         }
1029
1030         /* 2. shutdown all the ports of vhci_hcd */
1031         for (rhport = 0; rhport < VHCI_HC_PORTS; rhport++) {
1032                 struct vhci_device *vdev = &vhci->vdev[rhport];
1033
1034                 usbip_event_add(&vdev->ud, VDEV_EVENT_REMOVED);
1035                 usbip_stop_eh(&vdev->ud);
1036         }
1037 }
1038
1039 static int vhci_get_frame_number(struct usb_hcd *hcd)
1040 {
1041         dev_err_ratelimited(&hcd->self.root_hub->dev, "Not yet implemented\n");
1042         return 0;
1043 }
1044
1045 #ifdef CONFIG_PM
1046
1047 /* FIXME: suspend/resume */
1048 static int vhci_bus_suspend(struct usb_hcd *hcd)
1049 {
1050         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
1051         unsigned long flags;
1052
1053         dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
1054
1055         spin_lock_irqsave(&vhci->lock, flags);
1056         hcd->state = HC_STATE_SUSPENDED;
1057         spin_unlock_irqrestore(&vhci->lock, flags);
1058
1059         return 0;
1060 }
1061
1062 static int vhci_bus_resume(struct usb_hcd *hcd)
1063 {
1064         struct vhci_hcd *vhci = hcd_to_vhci(hcd);
1065         int rc = 0;
1066         unsigned long flags;
1067
1068         dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
1069
1070         spin_lock_irqsave(&vhci->lock, flags);
1071         if (!HCD_HW_ACCESSIBLE(hcd))
1072                 rc = -ESHUTDOWN;
1073         else
1074                 hcd->state = HC_STATE_RUNNING;
1075         spin_unlock_irqrestore(&vhci->lock, flags);
1076
1077         return rc;
1078 }
1079
1080 #else
1081
1082 #define vhci_bus_suspend      NULL
1083 #define vhci_bus_resume       NULL
1084 #endif
1085
1086 static struct hc_driver vhci_hc_driver = {
1087         .description    = driver_name,
1088         .product_desc   = driver_desc,
1089         .hcd_priv_size  = sizeof(struct vhci_hcd),
1090
1091         .flags          = HCD_USB2,
1092
1093         .start          = vhci_start,
1094         .stop           = vhci_stop,
1095
1096         .urb_enqueue    = vhci_urb_enqueue,
1097         .urb_dequeue    = vhci_urb_dequeue,
1098
1099         .get_frame_number = vhci_get_frame_number,
1100
1101         .hub_status_data = vhci_hub_status,
1102         .hub_control    = vhci_hub_control,
1103         .bus_suspend    = vhci_bus_suspend,
1104         .bus_resume     = vhci_bus_resume,
1105 };
1106
1107 static int vhci_hcd_probe(struct platform_device *pdev)
1108 {
1109         struct usb_hcd          *hcd;
1110         int                     ret;
1111
1112         usbip_dbg_vhci_hc("name %s id %d\n", pdev->name, pdev->id);
1113
1114         /*
1115          * Allocate and initialize hcd.
1116          * Our private data is also allocated automatically.
1117          */
1118         hcd = usb_create_hcd(&vhci_hc_driver, &pdev->dev, dev_name(&pdev->dev));
1119         if (!hcd) {
1120                 pr_err("create hcd failed\n");
1121                 return -ENOMEM;
1122         }
1123         hcd->has_tt = 1;
1124
1125         /*
1126          * Finish generic HCD structure initialization and register.
1127          * Call the driver's reset() and start() routines.
1128          */
1129         ret = usb_add_hcd(hcd, 0, 0);
1130         if (ret != 0) {
1131                 pr_err("usb_add_hcd failed %d\n", ret);
1132                 usb_put_hcd(hcd);
1133                 return ret;
1134         }
1135
1136         usbip_dbg_vhci_hc("bye\n");
1137         return 0;
1138 }
1139
1140 static int vhci_hcd_remove(struct platform_device *pdev)
1141 {
1142         struct usb_hcd  *hcd;
1143
1144         hcd = platform_get_drvdata(pdev);
1145         if (!hcd)
1146                 return 0;
1147
1148         /*
1149          * Disconnects the root hub,
1150          * then reverses the effects of usb_add_hcd(),
1151          * invoking the HCD's stop() methods.
1152          */
1153         usb_remove_hcd(hcd);
1154         usb_put_hcd(hcd);
1155
1156         return 0;
1157 }
1158
1159 #ifdef CONFIG_PM
1160
1161 /* what should happen for USB/IP under suspend/resume? */
1162 static int vhci_hcd_suspend(struct platform_device *pdev, pm_message_t state)
1163 {
1164         struct usb_hcd *hcd;
1165         struct vhci_hcd *vhci;
1166         int rhport;
1167         int connected = 0;
1168         int ret = 0;
1169         unsigned long flags;
1170
1171         hcd = platform_get_drvdata(pdev);
1172         if (!hcd)
1173                 return 0;
1174         vhci = hcd_to_vhci(hcd);
1175
1176         spin_lock_irqsave(&vhci->lock, flags);
1177
1178         for (rhport = 0; rhport < VHCI_HC_PORTS; rhport++)
1179                 if (vhci->port_status[rhport] & USB_PORT_STAT_CONNECTION)
1180                         connected += 1;
1181
1182         spin_unlock_irqrestore(&vhci->lock, flags);
1183
1184         if (connected > 0) {
1185                 dev_info(&pdev->dev,
1186                          "We have %d active connection%s. Do not suspend.\n",
1187                          connected, (connected == 1 ? "" : "s"));
1188                 ret =  -EBUSY;
1189         } else {
1190                 dev_info(&pdev->dev, "suspend vhci_hcd");
1191                 clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
1192         }
1193
1194         return ret;
1195 }
1196
1197 static int vhci_hcd_resume(struct platform_device *pdev)
1198 {
1199         struct usb_hcd *hcd;
1200
1201         dev_dbg(&pdev->dev, "%s\n", __func__);
1202
1203         hcd = platform_get_drvdata(pdev);
1204         if (!hcd)
1205                 return 0;
1206         set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
1207         usb_hcd_poll_rh_status(hcd);
1208
1209         return 0;
1210 }
1211
1212 #else
1213
1214 #define vhci_hcd_suspend        NULL
1215 #define vhci_hcd_resume         NULL
1216
1217 #endif
1218
1219 static struct platform_driver vhci_driver = {
1220         .probe  = vhci_hcd_probe,
1221         .remove = vhci_hcd_remove,
1222         .suspend = vhci_hcd_suspend,
1223         .resume = vhci_hcd_resume,
1224         .driver = {
1225                 .name = driver_name,
1226         },
1227 };
1228
1229 static int add_platform_device(int id)
1230 {
1231         struct platform_device *pdev;
1232         int dev_nr;
1233
1234         if (id == 0)
1235                 dev_nr = -1;
1236         else
1237                 dev_nr = id;
1238
1239         pdev = platform_device_register_simple(driver_name, dev_nr, NULL, 0);
1240         if (IS_ERR(pdev))
1241                 return PTR_ERR(pdev);
1242
1243         *(vhci_pdevs + id) = pdev;
1244         return 0;
1245 }
1246
1247 static void del_platform_devices(void)
1248 {
1249         struct platform_device *pdev;
1250         int i;
1251
1252         for (i = 0; i < vhci_num_controllers; i++) {
1253                 pdev = *(vhci_pdevs + i);
1254                 if (pdev != NULL)
1255                         platform_device_unregister(pdev);
1256                 *(vhci_pdevs + i) = NULL;
1257         }
1258         sysfs_remove_link(&platform_bus.kobj, driver_name);
1259 }
1260
1261 static int __init vhci_hcd_init(void)
1262 {
1263         int i, ret;
1264
1265         if (usb_disabled())
1266                 return -ENODEV;
1267
1268         if (vhci_num_controllers < 1)
1269                 vhci_num_controllers = 1;
1270
1271         vhci_pdevs = kcalloc(vhci_num_controllers, sizeof(void *), GFP_KERNEL);
1272         if (vhci_pdevs == NULL)
1273                 return -ENOMEM;
1274
1275         ret = platform_driver_register(&vhci_driver);
1276         if (ret)
1277                 goto err_driver_register;
1278
1279         for (i = 0; i < vhci_num_controllers; i++) {
1280                 ret = add_platform_device(i);
1281                 if (ret)
1282                         goto err_platform_device_register;
1283         }
1284
1285         pr_info(DRIVER_DESC " v" USBIP_VERSION "\n");
1286         return ret;
1287
1288 err_platform_device_register:
1289         del_platform_devices();
1290         platform_driver_unregister(&vhci_driver);
1291 err_driver_register:
1292         kfree(vhci_pdevs);
1293         return ret;
1294 }
1295
1296 static void __exit vhci_hcd_exit(void)
1297 {
1298         del_platform_devices();
1299         platform_driver_unregister(&vhci_driver);
1300         kfree(vhci_pdevs);
1301 }
1302
1303 module_init(vhci_hcd_init);
1304 module_exit(vhci_hcd_exit);
1305
1306 MODULE_AUTHOR(DRIVER_AUTHOR);
1307 MODULE_DESCRIPTION(DRIVER_DESC);
1308 MODULE_LICENSE("GPL");
1309 MODULE_VERSION(USBIP_VERSION);