Lines Matching refs:xhci

53 static void xhci_common_hub_descriptor(struct xhci_hcd *xhci,  in xhci_common_hub_descriptor()  argument
64 if (HCC_PPC(xhci->hcc_params)) in xhci_common_hub_descriptor()
77 static void xhci_usb2_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci, in xhci_usb2_hub_descriptor() argument
86 ports = xhci->num_usb2_ports; in xhci_usb2_hub_descriptor()
88 xhci_common_hub_descriptor(xhci, desc, ports); in xhci_usb2_hub_descriptor()
98 portsc = readl(xhci->usb2_ports[i]); in xhci_usb2_hub_descriptor()
130 static void xhci_usb3_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci, in xhci_usb3_hub_descriptor() argument
138 ports = xhci->num_usb3_ports; in xhci_usb3_hub_descriptor()
139 xhci_common_hub_descriptor(xhci, desc, ports); in xhci_usb3_hub_descriptor()
152 portsc = readl(xhci->usb3_ports[i]); in xhci_usb3_hub_descriptor()
160 static void xhci_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci, in xhci_hub_descriptor() argument
165 xhci_usb3_hub_descriptor(hcd, xhci, desc); in xhci_hub_descriptor()
167 xhci_usb2_hub_descriptor(hcd, xhci, desc); in xhci_hub_descriptor()
241 int xhci_find_slot_id_by_port(struct usb_hcd *hcd, struct xhci_hcd *xhci, in xhci_find_slot_id_by_port() argument
250 if (!xhci->devs[i]) in xhci_find_slot_id_by_port()
252 speed = xhci->devs[i]->udev->speed; in xhci_find_slot_id_by_port()
254 && xhci->devs[i]->fake_port == port) { in xhci_find_slot_id_by_port()
269 static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend) in xhci_stop_device() argument
278 virt_dev = xhci->devs[slot_id]; in xhci_stop_device()
279 cmd = xhci_alloc_command(xhci, false, true, GFP_NOIO); in xhci_stop_device()
281 xhci_dbg(xhci, "Couldn't allocate command structure.\n"); in xhci_stop_device()
285 spin_lock_irqsave(&xhci->lock, flags); in xhci_stop_device()
289 command = xhci_alloc_command(xhci, false, false, in xhci_stop_device()
292 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_stop_device()
293 xhci_free_command(xhci, cmd); in xhci_stop_device()
297 xhci_queue_stop_endpoint(xhci, command, slot_id, i, in xhci_stop_device()
301 xhci_queue_stop_endpoint(xhci, cmd, slot_id, 0, suspend); in xhci_stop_device()
302 xhci_ring_cmd_db(xhci); in xhci_stop_device()
303 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_stop_device()
309 xhci_warn(xhci, "Timeout while waiting for stop endpoint command\n"); in xhci_stop_device()
312 xhci_free_command(xhci, cmd); in xhci_stop_device()
319 void xhci_ring_device(struct xhci_hcd *xhci, int slot_id) in xhci_ring_device() argument
325 ep = &xhci->devs[slot_id]->eps[i]; in xhci_ring_device()
329 xhci_ring_ep_doorbell(xhci, slot_id, i, s); in xhci_ring_device()
331 xhci_ring_ep_doorbell(xhci, slot_id, i, 0); in xhci_ring_device()
338 static void xhci_disable_port(struct usb_hcd *hcd, struct xhci_hcd *xhci, in xhci_disable_port() argument
343 xhci_dbg(xhci, "Ignoring request to disable " in xhci_disable_port()
351 xhci_dbg(xhci, "disable port, actual port %d status = 0x%x\n", in xhci_disable_port()
355 static void xhci_clear_port_change_bit(struct xhci_hcd *xhci, u16 wValue, in xhci_clear_port_change_bit() argument
401 xhci_dbg(xhci, "clear port %s change, actual port %d status = 0x%x\n", in xhci_clear_port_change_bit()
408 struct xhci_hcd *xhci = hcd_to_xhci(hcd); in xhci_get_ports() local
411 max_ports = xhci->num_usb3_ports; in xhci_get_ports()
412 *port_array = xhci->usb3_ports; in xhci_get_ports()
414 max_ports = xhci->num_usb2_ports; in xhci_get_ports()
415 *port_array = xhci->usb2_ports; in xhci_get_ports()
421 void xhci_set_link_state(struct xhci_hcd *xhci, __le32 __iomem **port_array, in xhci_set_link_state() argument
433 static void xhci_set_remote_wake_mask(struct xhci_hcd *xhci, in xhci_set_remote_wake_mask() argument
460 void xhci_test_and_clear_bit(struct xhci_hcd *xhci, __le32 __iomem **port_array, in xhci_test_and_clear_bit() argument
481 static void xhci_hub_report_usb3_link_state(struct xhci_hcd *xhci, in xhci_hub_report_usb3_link_state() argument
524 if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) && in xhci_hub_report_usb3_link_state()
540 static void xhci_del_comp_mod_timer(struct xhci_hcd *xhci, u32 status, in xhci_del_comp_mod_timer() argument
543 u32 all_ports_seen_u0 = ((1 << xhci->num_usb3_ports)-1); in xhci_del_comp_mod_timer()
546 if (!(xhci->quirks & XHCI_COMP_MODE_QUIRK)) in xhci_del_comp_mod_timer()
549 if ((xhci->port_status_u0 != all_ports_seen_u0) && port_in_u0) { in xhci_del_comp_mod_timer()
550 xhci->port_status_u0 |= 1 << wIndex; in xhci_del_comp_mod_timer()
551 if (xhci->port_status_u0 == all_ports_seen_u0) { in xhci_del_comp_mod_timer()
552 del_timer_sync(&xhci->comp_mode_recovery_timer); in xhci_del_comp_mod_timer()
553 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks, in xhci_del_comp_mod_timer()
555 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks, in xhci_del_comp_mod_timer()
576 __releases(&xhci->lock) in xhci_get_port_status()
577 __acquires(&xhci->lock) in xhci_get_port_status()
579 struct xhci_hcd *xhci = hcd_to_xhci(hcd); in xhci_get_port_status() local
623 xhci_dbg(xhci, "Resume USB2 port %d\n", in xhci_get_port_status()
629 xhci_set_link_state(xhci, port_array, wIndex, in xhci_get_port_status()
632 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_get_port_status()
637 spin_lock_irqsave(&xhci->lock, flags); in xhci_get_port_status()
641 xhci, wIndex + 1); in xhci_get_port_status()
643 xhci_dbg(xhci, "slot_id is zero\n"); in xhci_get_port_status()
646 xhci_ring_device(xhci, slot_id); in xhci_get_port_status()
649 xhci_warn(xhci, "Port resume took longer than %i msec, port status = 0x%x\n", in xhci_get_port_status()
693 xhci_hub_report_usb3_link_state(xhci, &status, raw_port_status); in xhci_get_port_status()
698 xhci_del_comp_mod_timer(xhci, raw_port_status, wIndex); in xhci_get_port_status()
711 struct xhci_hcd *xhci = hcd_to_xhci(hcd); in xhci_hub_control() local
724 bus_state = &xhci->bus_state[hcd_index(hcd)]; in xhci_hub_control()
726 spin_lock_irqsave(&xhci->lock, flags); in xhci_hub_control()
740 xhci_dbg(xhci, "Wrong hub descriptor type for " in xhci_hub_control()
744 xhci_hub_descriptor(hcd, xhci, in xhci_hub_control()
757 if ((xhci->quirks & XHCI_LPM_SUPPORT)) { in xhci_hub_control()
758 temp = readl(&xhci->cap_regs->hcs_params3); in xhci_hub_control()
764 temp = readl(&xhci->cap_regs->hcc_params); in xhci_hub_control()
768 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_hub_control()
784 xhci_dbg(xhci, "get port status, actual port %d status = 0x%x\n", in xhci_hub_control()
786 xhci_dbg(xhci, "Get port status returned 0x%x\n", status); in xhci_hub_control()
813 xhci_set_link_state(xhci, port_array, wIndex, in xhci_hub_control()
815 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_hub_control()
817 spin_lock_irqsave(&xhci->lock, flags); in xhci_hub_control()
826 xhci_warn(xhci, "USB core suspending device " in xhci_hub_control()
831 slot_id = xhci_find_slot_id_by_port(hcd, xhci, in xhci_hub_control()
834 xhci_warn(xhci, "slot_id is zero\n"); in xhci_hub_control()
838 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_hub_control()
839 xhci_stop_device(xhci, slot_id, 1); in xhci_hub_control()
840 spin_lock_irqsave(&xhci->lock, flags); in xhci_hub_control()
842 xhci_set_link_state(xhci, port_array, wIndex, XDEV_U3); in xhci_hub_control()
844 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_hub_control()
846 spin_lock_irqsave(&xhci->lock, flags); in xhci_hub_control()
856 xhci_dbg(xhci, "Disable port %d\n", wIndex); in xhci_hub_control()
872 xhci_dbg(xhci, "Enable port %d\n", wIndex); in xhci_hub_control()
873 xhci_set_link_state(xhci, port_array, wIndex, in xhci_hub_control()
885 xhci_warn(xhci, "Cannot set link state.\n"); in xhci_hub_control()
890 slot_id = xhci_find_slot_id_by_port(hcd, xhci, in xhci_hub_control()
895 spin_unlock_irqrestore(&xhci->lock, in xhci_hub_control()
897 xhci_stop_device(xhci, slot_id, 1); in xhci_hub_control()
898 spin_lock_irqsave(&xhci->lock, flags); in xhci_hub_control()
902 xhci_set_link_state(xhci, port_array, wIndex, in xhci_hub_control()
905 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_hub_control()
907 spin_lock_irqsave(&xhci->lock, flags); in xhci_hub_control()
923 xhci_dbg(xhci, "set port power, actual port %d status = 0x%x\n", wIndex, temp); in xhci_hub_control()
925 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_hub_control()
931 spin_lock_irqsave(&xhci->lock, flags); in xhci_hub_control()
938 xhci_dbg(xhci, "set port reset, actual port %d status = 0x%x\n", wIndex, temp); in xhci_hub_control()
941 xhci_set_remote_wake_mask(xhci, port_array, in xhci_hub_control()
944 xhci_dbg(xhci, "set port remote wake mask, " in xhci_hub_control()
990 xhci_dbg(xhci, "clear USB_PORT_FEAT_SUSPEND\n"); in xhci_hub_control()
991 xhci_dbg(xhci, "PORTSC %04x\n", temp); in xhci_hub_control()
998 xhci_set_link_state(xhci, port_array, wIndex, in xhci_hub_control()
1000 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_hub_control()
1002 spin_lock_irqsave(&xhci->lock, flags); in xhci_hub_control()
1003 xhci_set_link_state(xhci, port_array, wIndex, in xhci_hub_control()
1008 slot_id = xhci_find_slot_id_by_port(hcd, xhci, in xhci_hub_control()
1011 xhci_dbg(xhci, "slot_id is zero\n"); in xhci_hub_control()
1014 xhci_ring_device(xhci, slot_id); in xhci_hub_control()
1025 xhci_clear_port_change_bit(xhci, wValue, wIndex, in xhci_hub_control()
1029 xhci_disable_port(hcd, xhci, wIndex, in xhci_hub_control()
1035 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_hub_control()
1041 spin_lock_irqsave(&xhci->lock, flags); in xhci_hub_control()
1052 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_hub_control()
1070 struct xhci_hcd *xhci = hcd_to_xhci(hcd); in xhci_hub_status_data() local
1077 bus_state = &xhci->bus_state[hcd_index(hcd)]; in xhci_hub_status_data()
1091 spin_lock_irqsave(&xhci->lock, flags); in xhci_hub_status_data()
1110 xhci_dbg(xhci, "%s: stopping port polling.\n", __func__); in xhci_hub_status_data()
1113 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_hub_status_data()
1121 struct xhci_hcd *xhci = hcd_to_xhci(hcd); in xhci_bus_suspend() local
1128 bus_state = &xhci->bus_state[hcd_index(hcd)]; in xhci_bus_suspend()
1130 spin_lock_irqsave(&xhci->lock, flags); in xhci_bus_suspend()
1135 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_bus_suspend()
1136 xhci_dbg(xhci, "suspend failed because a port is resuming\n"); in xhci_bus_suspend()
1152 xhci_dbg(xhci, "port %d not suspended\n", port_index); in xhci_bus_suspend()
1153 slot_id = xhci_find_slot_id_by_port(hcd, xhci, in xhci_bus_suspend()
1156 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_bus_suspend()
1157 xhci_stop_device(xhci, slot_id, 1); in xhci_bus_suspend()
1158 spin_lock_irqsave(&xhci->lock, flags); in xhci_bus_suspend()
1185 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_bus_suspend()
1191 struct xhci_hcd *xhci = hcd_to_xhci(hcd); in xhci_bus_resume() local
1199 bus_state = &xhci->bus_state[hcd_index(hcd)]; in xhci_bus_resume()
1204 spin_lock_irqsave(&xhci->lock, flags); in xhci_bus_resume()
1206 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_bus_resume()
1211 temp = readl(&xhci->op_regs->command); in xhci_bus_resume()
1213 writel(temp, &xhci->op_regs->command); in xhci_bus_resume()
1230 xhci_set_link_state(xhci, port_array, in xhci_bus_resume()
1233 xhci_set_link_state(xhci, port_array, in xhci_bus_resume()
1236 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_bus_resume()
1238 spin_lock_irqsave(&xhci->lock, flags); in xhci_bus_resume()
1240 xhci_set_link_state(xhci, port_array, in xhci_bus_resume()
1246 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_bus_resume()
1248 spin_lock_irqsave(&xhci->lock, flags); in xhci_bus_resume()
1251 xhci_test_and_clear_bit(xhci, port_array, port_index, in xhci_bus_resume()
1255 xhci, port_index + 1); in xhci_bus_resume()
1257 xhci_ring_device(xhci, slot_id); in xhci_bus_resume()
1262 (void) readl(&xhci->op_regs->command); in xhci_bus_resume()
1266 temp = readl(&xhci->op_regs->command); in xhci_bus_resume()
1268 writel(temp, &xhci->op_regs->command); in xhci_bus_resume()
1269 temp = readl(&xhci->op_regs->command); in xhci_bus_resume()
1271 spin_unlock_irqrestore(&xhci->lock, flags); in xhci_bus_resume()