Lines Matching +full:peer +full:- +full:hub

1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2003-2008 Takahiro Hirofuchi
4 * Copyright (C) 2015-2016 Nobuo Iwata
23 * - update root hub emulation
24 * - move the emulation code to userland ?
27 * - add suspend/resume code
28 * - clean up everything
128 pr_debug("status prev -> new: %08x -> %08x\n", prev_status, new_status); in dump_port_status_diff()
137 change = '-'; in dump_port_status_diff()
156 struct vhci *vhci = vhci_hcd->vhci; in rh_port_connect()
157 int rhport = vdev->rhport; in rh_port_connect()
163 spin_lock_irqsave(&vhci->lock, flags); in rh_port_connect()
165 status = vhci_hcd->port_status[rhport]; in rh_port_connect()
180 vhci_hcd->port_status[rhport] = status; in rh_port_connect()
182 spin_unlock_irqrestore(&vhci->lock, flags); in rh_port_connect()
190 struct vhci *vhci = vhci_hcd->vhci; in rh_port_disconnect()
191 int rhport = vdev->rhport; in rh_port_disconnect()
197 spin_lock_irqsave(&vhci->lock, flags); in rh_port_disconnect()
199 status = vhci_hcd->port_status[rhport]; in rh_port_disconnect()
204 vhci_hcd->port_status[rhport] = status; in rh_port_disconnect()
206 spin_unlock_irqrestore(&vhci->lock, flags); in rh_port_disconnect()
219 * Ports are 0-indexed from the HCD point of view,
220 * and 1-indexed from the USB core pointer of view.
231 struct vhci *vhci = vhci_hcd->vhci; in vhci_hub_status()
239 spin_lock_irqsave(&vhci->lock, flags); in vhci_hub_status()
247 if ((vhci_hcd->port_status[rhport] & PORT_C_MASK)) { in vhci_hub_status()
256 if ((hcd->state == HC_STATE_SUSPENDED) && (changed == 1)) in vhci_hub_status()
260 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_hub_status()
264 /* usb 3.0 root hub device descriptor */
289 desc->bDescriptorType = USB_DT_SS_HUB; in ss_hub_descriptor()
290 desc->bDescLength = 12; in ss_hub_descriptor()
291 desc->wHubCharacteristics = cpu_to_le16( in ss_hub_descriptor()
293 desc->bNbrPorts = VHCI_HC_PORTS; in ss_hub_descriptor()
294 desc->u.ss.bHubHdrDecLat = 0x04; /* Worst case: 0.4 micro sec*/ in ss_hub_descriptor()
295 desc->u.ss.DeviceRemovable = 0xffff; in ss_hub_descriptor()
303 desc->bDescriptorType = USB_DT_HUB; in hub_descriptor()
304 desc->wHubCharacteristics = cpu_to_le16( in hub_descriptor()
307 desc->bNbrPorts = VHCI_HC_PORTS; in hub_descriptor()
309 width = desc->bNbrPorts / 8 + 1; in hub_descriptor()
310 desc->bDescLength = USB_DT_HUB_NONVAR_SIZE + 2 * width; in hub_descriptor()
311 memset(&desc->u.hs.DeviceRemovable[0], 0, width); in hub_descriptor()
312 memset(&desc->u.hs.DeviceRemovable[width], 0xff, width); in hub_descriptor()
321 int rhport = -1; in vhci_hub_control()
328 return -ETIMEDOUT; in vhci_hub_control()
332 * wIndex (bits 0-7) shows the port number and begins from 1? in vhci_hub_control()
350 rhport = wIndex - 1; in vhci_hub_control()
353 vhci = vhci_hcd->vhci; in vhci_hub_control()
355 spin_lock_irqsave(&vhci->lock, flags); in vhci_hub_control()
360 memcpy(prev_port_status, vhci_hcd->port_status, in vhci_hub_control()
375 if (hcd->speed == HCD_USB3) { in vhci_hub_control()
382 if (vhci_hcd->port_status[rhport] & USB_PORT_STAT_SUSPEND) { in vhci_hub_control()
384 vhci_hcd->resuming = 1; in vhci_hub_control()
385 vhci_hcd->re_timeout = jiffies + msecs_to_jiffies(20); in vhci_hub_control()
391 if (hcd->speed == HCD_USB3) in vhci_hub_control()
392 vhci_hcd->port_status[rhport] &= ~USB_SS_PORT_STAT_POWER; in vhci_hub_control()
394 vhci_hcd->port_status[rhport] &= ~USB_PORT_STAT_POWER; in vhci_hub_control()
401 vhci_hcd->port_status[rhport] &= ~(1 << wValue); in vhci_hub_control()
407 if (hcd->speed == HCD_USB3 && in vhci_hub_control()
410 pr_err("Wrong hub descriptor type for USB 3.0 roothub.\n"); in vhci_hub_control()
413 if (hcd->speed == HCD_USB3) in vhci_hub_control()
419 if (hcd->speed != HCD_USB3) in vhci_hub_control()
436 retval = -EPIPE; in vhci_hub_control()
445 if (vhci_hcd->resuming && time_after(jiffies, vhci_hcd->re_timeout)) { in vhci_hub_control()
446 vhci_hcd->port_status[rhport] |= (1 << USB_PORT_FEAT_C_SUSPEND); in vhci_hub_control()
447 vhci_hcd->port_status[rhport] &= ~(1 << USB_PORT_FEAT_SUSPEND); in vhci_hub_control()
448 vhci_hcd->resuming = 0; in vhci_hub_control()
449 vhci_hcd->re_timeout = 0; in vhci_hub_control()
452 if ((vhci_hcd->port_status[rhport] & (1 << USB_PORT_FEAT_RESET)) != in vhci_hub_control()
453 0 && time_after(jiffies, vhci_hcd->re_timeout)) { in vhci_hub_control()
454 vhci_hcd->port_status[rhport] |= (1 << USB_PORT_FEAT_C_RESET); in vhci_hub_control()
455 vhci_hcd->port_status[rhport] &= ~(1 << USB_PORT_FEAT_RESET); in vhci_hub_control()
456 vhci_hcd->re_timeout = 0; in vhci_hub_control()
462 if (vhci_hcd->vdev[rhport].ud.status == in vhci_hub_control()
464 vhci_hcd->vdev[rhport].ud.status == in vhci_hub_control()
469 vhci_hcd->vdev[rhport].ud.status); in vhci_hub_control()
470 vhci_hcd->port_status[rhport] |= in vhci_hub_control()
474 if (hcd->speed < HCD_USB3) { in vhci_hub_control()
475 switch (vhci_hcd->vdev[rhport].speed) { in vhci_hub_control()
477 vhci_hcd->port_status[rhport] |= in vhci_hub_control()
481 vhci_hcd->port_status[rhport] |= in vhci_hub_control()
490 ((__le16 *) buf)[0] = cpu_to_le16(vhci_hcd->port_status[rhport]); in vhci_hub_control()
492 cpu_to_le16(vhci_hcd->port_status[rhport] >> 16); in vhci_hub_control()
499 retval = -EPIPE; in vhci_hub_control()
506 if (hcd->speed != HCD_USB3) { in vhci_hub_control()
524 if (hcd->speed != HCD_USB3) { in vhci_hub_control()
533 /* Applicable only for USB2.0 hub */ in vhci_hub_control()
534 if (hcd->speed == HCD_USB3) { in vhci_hub_control()
545 vhci_hcd->port_status[rhport] |= USB_PORT_STAT_SUSPEND; in vhci_hub_control()
554 if (hcd->speed == HCD_USB3) in vhci_hub_control()
555 vhci_hcd->port_status[rhport] |= USB_SS_PORT_STAT_POWER; in vhci_hub_control()
557 vhci_hcd->port_status[rhport] |= USB_PORT_STAT_POWER; in vhci_hub_control()
566 /* Applicable only for USB3.0 hub */ in vhci_hub_control()
567 if (hcd->speed != HCD_USB3) { in vhci_hub_control()
581 if (hcd->speed == HCD_USB3) { in vhci_hub_control()
582 vhci_hcd->port_status[rhport] = 0; in vhci_hub_control()
583 vhci_hcd->port_status[rhport] = in vhci_hub_control()
587 } else if (vhci_hcd->port_status[rhport] & USB_PORT_STAT_ENABLE) { in vhci_hub_control()
588 vhci_hcd->port_status[rhport] &= ~(USB_PORT_STAT_ENABLE in vhci_hub_control()
594 vhci_hcd->re_timeout = jiffies + msecs_to_jiffies(50); in vhci_hub_control()
605 if (hcd->speed == HCD_USB3) { in vhci_hub_control()
606 if ((vhci_hcd->port_status[rhport] & in vhci_hub_control()
608 vhci_hcd->port_status[rhport] |= (1 << wValue); in vhci_hub_control()
611 if ((vhci_hcd->port_status[rhport] & in vhci_hub_control()
613 vhci_hcd->port_status[rhport] |= (1 << wValue); in vhci_hub_control()
619 if (hcd->speed != HCD_USB3) { in vhci_hub_control()
624 /* We'll always return 0 since this is a dummy hub */ in vhci_hub_control()
629 if (hcd->speed != HCD_USB3) { in vhci_hub_control()
636 pr_err("default hub control req: %04x v%04x i%04x l%d\n", in vhci_hub_control()
640 retval = -EPIPE; in vhci_hub_control()
648 vhci_hcd->port_status[rhport], in vhci_hub_control()
649 hcd->speed == HCD_USB3); in vhci_hub_control()
654 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_hub_control()
657 (vhci_hcd->port_status[rhport] & PORT_C_MASK) != 0) { in vhci_hub_control()
672 usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC); in vhci_tx_urb()
676 spin_lock_irqsave(&vdev->priv_lock, flags); in vhci_tx_urb()
678 priv->seqnum = atomic_inc_return(&vhci_hcd->seqnum); in vhci_tx_urb()
679 if (priv->seqnum == 0xffff) in vhci_tx_urb()
680 dev_info(&urb->dev->dev, "seqnum max\n"); in vhci_tx_urb()
682 priv->vdev = vdev; in vhci_tx_urb()
683 priv->urb = urb; in vhci_tx_urb()
685 urb->hcpriv = (void *) priv; in vhci_tx_urb()
687 list_add_tail(&priv->list, &vdev->priv_tx); in vhci_tx_urb()
689 wake_up(&vdev->waitq_tx); in vhci_tx_urb()
690 spin_unlock_irqrestore(&vdev->priv_lock, flags); in vhci_tx_urb()
696 struct vhci *vhci = vhci_hcd->vhci; in vhci_urb_enqueue()
697 struct device *dev = &urb->dev->dev; in vhci_urb_enqueue()
698 u8 portnum = urb->dev->portnum; in vhci_urb_enqueue()
705 return -ENODEV; in vhci_urb_enqueue()
707 vdev = &vhci_hcd->vdev[portnum-1]; in vhci_urb_enqueue()
709 if (!urb->transfer_buffer && !urb->num_sgs && in vhci_urb_enqueue()
710 urb->transfer_buffer_length) { in vhci_urb_enqueue()
712 return -EINVAL; in vhci_urb_enqueue()
715 spin_lock_irqsave(&vhci->lock, flags); in vhci_urb_enqueue()
717 if (urb->status != -EINPROGRESS) { in vhci_urb_enqueue()
718 dev_err(dev, "URB already unlinked!, status %d\n", urb->status); in vhci_urb_enqueue()
719 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_urb_enqueue()
720 return urb->status; in vhci_urb_enqueue()
724 spin_lock(&vdev->ud.lock); in vhci_urb_enqueue()
725 if (vdev->ud.status == VDEV_ST_NULL || in vhci_urb_enqueue()
726 vdev->ud.status == VDEV_ST_ERROR) { in vhci_urb_enqueue()
727 dev_err(dev, "enqueue for inactive port %d\n", vdev->rhport); in vhci_urb_enqueue()
728 spin_unlock(&vdev->ud.lock); in vhci_urb_enqueue()
729 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_urb_enqueue()
730 return -ENODEV; in vhci_urb_enqueue()
732 spin_unlock(&vdev->ud.lock); in vhci_urb_enqueue()
747 if (usb_pipedevice(urb->pipe) == 0) { in vhci_urb_enqueue()
748 __u8 type = usb_pipetype(urb->pipe); in vhci_urb_enqueue()
750 (struct usb_ctrlrequest *) urb->setup_packet; in vhci_urb_enqueue()
754 ret = -EINVAL; in vhci_urb_enqueue()
758 switch (ctrlreq->bRequest) { in vhci_urb_enqueue()
762 ctrlreq->wValue, vdev->rhport); in vhci_urb_enqueue()
764 usb_put_dev(vdev->udev); in vhci_urb_enqueue()
765 vdev->udev = usb_get_dev(urb->dev); in vhci_urb_enqueue()
767 spin_lock(&vdev->ud.lock); in vhci_urb_enqueue()
768 vdev->ud.status = VDEV_ST_USED; in vhci_urb_enqueue()
769 spin_unlock(&vdev->ud.lock); in vhci_urb_enqueue()
771 if (urb->status == -EINPROGRESS) { in vhci_urb_enqueue()
773 /* If not -EINPROGRESS, possibly unlinked. */ in vhci_urb_enqueue()
774 urb->status = 0; in vhci_urb_enqueue()
780 if (ctrlreq->wValue == cpu_to_le16(USB_DT_DEVICE << 8)) in vhci_urb_enqueue()
784 usb_put_dev(vdev->udev); in vhci_urb_enqueue()
785 vdev->udev = usb_get_dev(urb->dev); in vhci_urb_enqueue()
792 ctrlreq->bRequest, in vhci_urb_enqueue()
793 ctrlreq->wValue); in vhci_urb_enqueue()
794 ret = -EINVAL; in vhci_urb_enqueue()
802 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_urb_enqueue()
809 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_urb_enqueue()
815 usb_hcd_giveback_urb(hcd, urb, urb->status); in vhci_urb_enqueue()
831 * - When vhci_hcd receives RET_SUBMIT,
833 * - case 1a). the urb of the pdu is not unlinking.
834 * - normal case
837 * - case 1b). the urb of the pdu is unlinking.
838 * - usbip.ko will return a reply of the unlinking request.
841 * - When vhci_hcd receives RET_UNLINK,
843 * - case 2a). a submit request is still pending in vhci_hcd.
844 * - urb was really pending in usbip.ko and urb_unlink_urb() was
849 * - case 2b). a submit request is *not* pending in vhci_hcd.
850 * - urb was already given back to the core driver.
856 * - When usbip receives CMD_UNLINK,
858 * - case 3a). the urb of the unlink request is now in submission.
862 * - case 3b). the urb of the unlink request is not in submission.
863 * - may be already completed or never be received
870 struct vhci *vhci = vhci_hcd->vhci; in vhci_urb_dequeue()
875 spin_lock_irqsave(&vhci->lock, flags); in vhci_urb_dequeue()
877 priv = urb->hcpriv; in vhci_urb_dequeue()
881 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_urb_dequeue()
882 return -EIDRM; in vhci_urb_dequeue()
890 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_urb_dequeue()
896 vdev = priv->vdev; in vhci_urb_dequeue()
898 if (!vdev->ud.tcp_socket) { in vhci_urb_dequeue()
900 spin_lock(&vdev->priv_lock); in vhci_urb_dequeue()
902 list_del(&priv->list); in vhci_urb_dequeue()
904 urb->hcpriv = NULL; in vhci_urb_dequeue()
906 spin_unlock(&vdev->priv_lock); in vhci_urb_dequeue()
915 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_urb_dequeue()
916 usb_hcd_giveback_urb(hcd, urb, urb->status); in vhci_urb_dequeue()
917 spin_lock_irqsave(&vhci->lock, flags); in vhci_urb_dequeue()
923 spin_lock(&vdev->priv_lock); in vhci_urb_dequeue()
928 spin_unlock(&vdev->priv_lock); in vhci_urb_dequeue()
929 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_urb_dequeue()
930 usbip_event_add(&vdev->ud, VDEV_EVENT_ERROR_MALLOC); in vhci_urb_dequeue()
931 return -ENOMEM; in vhci_urb_dequeue()
934 unlink->seqnum = atomic_inc_return(&vhci_hcd->seqnum); in vhci_urb_dequeue()
935 if (unlink->seqnum == 0xffff) in vhci_urb_dequeue()
938 unlink->unlink_seqnum = priv->seqnum; in vhci_urb_dequeue()
941 * peer */ in vhci_urb_dequeue()
942 list_add_tail(&unlink->list, &vdev->unlink_tx); in vhci_urb_dequeue()
943 wake_up(&vdev->waitq_tx); in vhci_urb_dequeue()
945 spin_unlock(&vdev->priv_lock); in vhci_urb_dequeue()
948 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_urb_dequeue()
959 struct vhci *vhci = vhci_hcd->vhci; in vhci_cleanup_unlink_list()
963 spin_lock_irqsave(&vhci->lock, flags); in vhci_cleanup_unlink_list()
964 spin_lock(&vdev->priv_lock); in vhci_cleanup_unlink_list()
969 urb = pickup_urb_and_free_priv(vdev, unlink->unlink_seqnum); in vhci_cleanup_unlink_list()
971 list_del(&unlink->list); in vhci_cleanup_unlink_list()
976 urb->status = -ENODEV; in vhci_cleanup_unlink_list()
980 list_del(&unlink->list); in vhci_cleanup_unlink_list()
982 spin_unlock(&vdev->priv_lock); in vhci_cleanup_unlink_list()
983 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_cleanup_unlink_list()
985 usb_hcd_giveback_urb(hcd, urb, urb->status); in vhci_cleanup_unlink_list()
987 spin_lock_irqsave(&vhci->lock, flags); in vhci_cleanup_unlink_list()
988 spin_lock(&vdev->priv_lock); in vhci_cleanup_unlink_list()
993 spin_unlock(&vdev->priv_lock); in vhci_cleanup_unlink_list()
994 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_cleanup_unlink_list()
1000 vhci_cleanup_unlink_list(vdev, &vdev->unlink_tx); in vhci_device_unlink_cleanup()
1003 vhci_cleanup_unlink_list(vdev, &vdev->unlink_rx); in vhci_device_unlink_cleanup()
1016 if (ud->tcp_socket) { in vhci_shutdown_connection()
1017 pr_debug("shutdown tcp_socket %d\n", ud->sockfd); in vhci_shutdown_connection()
1018 kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR); in vhci_shutdown_connection()
1022 if (vdev->ud.tcp_rx) { in vhci_shutdown_connection()
1023 kthread_stop_put(vdev->ud.tcp_rx); in vhci_shutdown_connection()
1024 vdev->ud.tcp_rx = NULL; in vhci_shutdown_connection()
1026 if (vdev->ud.tcp_tx) { in vhci_shutdown_connection()
1027 kthread_stop_put(vdev->ud.tcp_tx); in vhci_shutdown_connection()
1028 vdev->ud.tcp_tx = NULL; in vhci_shutdown_connection()
1033 if (vdev->ud.tcp_socket) { in vhci_shutdown_connection()
1034 sockfd_put(vdev->ud.tcp_socket); in vhci_shutdown_connection()
1035 vdev->ud.tcp_socket = NULL; in vhci_shutdown_connection()
1036 vdev->ud.sockfd = -1; in vhci_shutdown_connection()
1072 spin_lock_irqsave(&ud->lock, flags); in vhci_device_reset()
1074 vdev->speed = 0; in vhci_device_reset()
1075 vdev->devid = 0; in vhci_device_reset()
1077 usb_put_dev(vdev->udev); in vhci_device_reset()
1078 vdev->udev = NULL; in vhci_device_reset()
1080 if (ud->tcp_socket) { in vhci_device_reset()
1081 sockfd_put(ud->tcp_socket); in vhci_device_reset()
1082 ud->tcp_socket = NULL; in vhci_device_reset()
1083 ud->sockfd = -1; in vhci_device_reset()
1085 ud->status = VDEV_ST_NULL; in vhci_device_reset()
1087 spin_unlock_irqrestore(&ud->lock, flags); in vhci_device_reset()
1094 spin_lock_irqsave(&ud->lock, flags); in vhci_device_unusable()
1095 ud->status = VDEV_ST_ERROR; in vhci_device_unusable()
1096 spin_unlock_irqrestore(&ud->lock, flags); in vhci_device_unusable()
1103 vdev->ud.side = USBIP_VHCI; in vhci_device_init()
1104 vdev->ud.status = VDEV_ST_NULL; in vhci_device_init()
1105 spin_lock_init(&vdev->ud.lock); in vhci_device_init()
1106 mutex_init(&vdev->ud.sysfs_lock); in vhci_device_init()
1108 INIT_LIST_HEAD(&vdev->priv_rx); in vhci_device_init()
1109 INIT_LIST_HEAD(&vdev->priv_tx); in vhci_device_init()
1110 INIT_LIST_HEAD(&vdev->unlink_tx); in vhci_device_init()
1111 INIT_LIST_HEAD(&vdev->unlink_rx); in vhci_device_init()
1112 spin_lock_init(&vdev->priv_lock); in vhci_device_init()
1114 init_waitqueue_head(&vdev->waitq_tx); in vhci_device_init()
1116 vdev->ud.eh_ops.shutdown = vhci_shutdown_connection; in vhci_device_init()
1117 vdev->ud.eh_ops.reset = vhci_device_reset; in vhci_device_init()
1118 vdev->ud.eh_ops.unusable = vhci_device_unusable; in vhci_device_init()
1120 usbip_start_eh(&vdev->ud); in vhci_device_init()
1142 struct vhci *vhci = *((void **)dev_get_platdata(hcd->self.controller)); in vhci_setup()
1145 vhci->vhci_hcd_hs = hcd_to_vhci_hcd(hcd); in vhci_setup()
1146 vhci->vhci_hcd_hs->vhci = vhci; in vhci_setup()
1152 hcd->speed = HCD_USB2; in vhci_setup()
1153 hcd->self.root_hub->speed = USB_SPEED_HIGH; in vhci_setup()
1155 vhci->vhci_hcd_ss = hcd_to_vhci_hcd(hcd); in vhci_setup()
1156 vhci->vhci_hcd_ss->vhci = vhci; in vhci_setup()
1157 hcd->speed = HCD_USB3; in vhci_setup()
1158 hcd->self.root_hub->speed = USB_SPEED_SUPER; in vhci_setup()
1166 hcd->self.sg_tablesize = 32; in vhci_setup()
1167 hcd->self.no_sg_constraint = 1; in vhci_setup()
1181 spin_lock_init(&vhci_hcd->vhci->lock); in vhci_start()
1186 struct vhci_device *vdev = &vhci_hcd->vdev[rhport]; in vhci_start()
1189 vdev->rhport = rhport; in vhci_start()
1192 atomic_set(&vhci_hcd->seqnum, 0); in vhci_start()
1194 hcd->power_budget = 0; /* no limit */ in vhci_start()
1195 hcd->uses_new_polling = 1; in vhci_start()
1198 hcd->self.otg_port = 1; in vhci_start()
1204 return -EINVAL; in vhci_start()
1214 err = sysfs_create_group(&hcd_dev(hcd)->kobj, &vhci_attr_group); in vhci_start()
1236 sysfs_remove_group(&hcd_dev(hcd)->kobj, &vhci_attr_group); in vhci_stop()
1242 struct vhci_device *vdev = &vhci_hcd->vdev[rhport]; in vhci_stop()
1244 usbip_event_add(&vdev->ud, VDEV_EVENT_REMOVED); in vhci_stop()
1245 usbip_stop_eh(&vdev->ud); in vhci_stop()
1251 dev_err_ratelimited(&hcd->self.root_hub->dev, "Not yet implemented\n"); in vhci_get_frame_number()
1260 struct vhci *vhci = *((void **)dev_get_platdata(hcd->self.controller)); in vhci_bus_suspend()
1263 dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__); in vhci_bus_suspend()
1265 spin_lock_irqsave(&vhci->lock, flags); in vhci_bus_suspend()
1266 hcd->state = HC_STATE_SUSPENDED; in vhci_bus_suspend()
1267 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_bus_suspend()
1274 struct vhci *vhci = *((void **)dev_get_platdata(hcd->self.controller)); in vhci_bus_resume()
1278 dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__); in vhci_bus_resume()
1280 spin_lock_irqsave(&vhci->lock, flags); in vhci_bus_resume()
1282 rc = -ESHUTDOWN; in vhci_bus_resume()
1284 hcd->state = HC_STATE_RUNNING; in vhci_bus_resume()
1285 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_bus_resume()
1301 dev_dbg(&hcd->self.root_hub->dev, "vhci_alloc_streams not implemented\n"); in vhci_alloc_streams()
1310 dev_dbg(&hcd->self.root_hub->dev, "vhci_free_streams not implemented\n"); in vhci_free_streams()
1341 struct vhci *vhci = *((void **)dev_get_platdata(&pdev->dev)); in vhci_hcd_probe()
1346 usbip_dbg_vhci_hc("name %s id %d\n", pdev->name, pdev->id); in vhci_hcd_probe()
1352 hcd_hs = usb_create_hcd(&vhci_hc_driver, &pdev->dev, dev_name(&pdev->dev)); in vhci_hcd_probe()
1355 return -ENOMEM; in vhci_hcd_probe()
1357 hcd_hs->has_tt = 1; in vhci_hcd_probe()
1369 hcd_ss = usb_create_shared_hcd(&vhci_hc_driver, &pdev->dev, in vhci_hcd_probe()
1370 dev_name(&pdev->dev), hcd_hs); in vhci_hcd_probe()
1372 ret = -ENOMEM; in vhci_hcd_probe()
1392 vhci->vhci_hcd_hs = NULL; in vhci_hcd_probe()
1393 vhci->vhci_hcd_ss = NULL; in vhci_hcd_probe()
1399 struct vhci *vhci = *((void **)dev_get_platdata(&pdev->dev)); in vhci_hcd_remove()
1402 * Disconnects the root hub, in vhci_hcd_remove()
1406 usb_remove_hcd(vhci_hcd_to_hcd(vhci->vhci_hcd_ss)); in vhci_hcd_remove()
1407 usb_put_hcd(vhci_hcd_to_hcd(vhci->vhci_hcd_ss)); in vhci_hcd_remove()
1409 usb_remove_hcd(vhci_hcd_to_hcd(vhci->vhci_hcd_hs)); in vhci_hcd_remove()
1410 usb_put_hcd(vhci_hcd_to_hcd(vhci->vhci_hcd_hs)); in vhci_hcd_remove()
1412 vhci->vhci_hcd_hs = NULL; in vhci_hcd_remove()
1413 vhci->vhci_hcd_ss = NULL; in vhci_hcd_remove()
1428 dev_dbg(&pdev->dev, "%s\n", __func__); in vhci_hcd_suspend()
1434 vhci = *((void **)dev_get_platdata(hcd->self.controller)); in vhci_hcd_suspend()
1436 spin_lock_irqsave(&vhci->lock, flags); in vhci_hcd_suspend()
1439 if (vhci->vhci_hcd_hs->port_status[rhport] & in vhci_hcd_suspend()
1443 if (vhci->vhci_hcd_ss->port_status[rhport] & in vhci_hcd_suspend()
1448 spin_unlock_irqrestore(&vhci->lock, flags); in vhci_hcd_suspend()
1451 dev_info(&pdev->dev, in vhci_hcd_suspend()
1454 ret = -EBUSY; in vhci_hcd_suspend()
1456 dev_info(&pdev->dev, "suspend vhci_hcd"); in vhci_hcd_suspend()
1457 clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); in vhci_hcd_suspend()
1467 dev_dbg(&pdev->dev, "%s\n", __func__); in vhci_hcd_resume()
1472 set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); in vhci_hcd_resume()
1511 return -ENODEV; in vhci_hcd_init()
1518 return -ENOMEM; in vhci_hcd_init()
1536 while (i--) in vhci_hcd_init()