aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/usb.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/usb.h')
-rw-r--r--include/linux/usb.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 14933451d21d..c19297a8779c 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -378,6 +378,45 @@ enum usb_device_removable {
378 USB_DEVICE_FIXED, 378 USB_DEVICE_FIXED,
379}; 379};
380 380
381/*
382 * USB 3.0 Link Power Management (LPM) parameters.
383 *
384 * PEL and SEL are USB 3.0 Link PM latencies for device-initiated LPM exit.
385 * MEL is the USB 3.0 Link PM latency for host-initiated LPM exit.
386 * All three are stored in nanoseconds.
387 */
388struct usb3_lpm_parameters {
389 /*
390 * Maximum exit latency (MEL) for the host to send a packet to the
391 * device (either a Ping for isoc endpoints, or a data packet for
392 * interrupt endpoints), the hubs to decode the packet, and for all hubs
393 * in the path to transition the links to U0.
394 */
395 unsigned int mel;
396 /*
397 * Maximum exit latency for a device-initiated LPM transition to bring
398 * all links into U0. Abbreviated as "PEL" in section 9.4.12 of the USB
399 * 3.0 spec, with no explanation of what "P" stands for. "Path"?
400 */
401 unsigned int pel;
402
403 /*
404 * The System Exit Latency (SEL) includes PEL, and three other
405 * latencies. After a device initiates a U0 transition, it will take
406 * some time from when the device sends the ERDY to when it will finally
407 * receive the data packet. Basically, SEL should be the worse-case
408 * latency from when a device starts initiating a U0 transition to when
409 * it will get data.
410 */
411 unsigned int sel;
412 /*
413 * The idle timeout value that is currently programmed into the parent
414 * hub for this device. When the timer counts to zero, the parent hub
415 * will initiate an LPM transition to either U1 or U2.
416 */
417 int timeout;
418};
419
381/** 420/**
382 * struct usb_device - kernel's representation of a USB device 421 * struct usb_device - kernel's representation of a USB device
383 * @devnum: device number; address on a USB bus 422 * @devnum: device number; address on a USB bus
@@ -435,6 +474,12 @@ enum usb_device_removable {
435 * specific data for the device. 474 * specific data for the device.
436 * @slot_id: Slot ID assigned by xHCI 475 * @slot_id: Slot ID assigned by xHCI
437 * @removable: Device can be physically removed from this port 476 * @removable: Device can be physically removed from this port
477 * @u1_params: exit latencies for USB3 U1 LPM state, and hub-initiated timeout.
478 * @u2_params: exit latencies for USB3 U2 LPM state, and hub-initiated timeout.
479 * @lpm_disable_count: Ref count used by usb_disable_lpm() and usb_enable_lpm()
480 * to keep track of the number of functions that require USB 3.0 Link Power
481 * Management to be disabled for this usb_device. This count should only
482 * be manipulated by those functions, with the bandwidth_mutex is held.
438 * 483 *
439 * Notes: 484 * Notes:
440 * Usbcore drivers should not set usbdev->state directly. Instead use 485 * Usbcore drivers should not set usbdev->state directly. Instead use
@@ -481,6 +526,7 @@ struct usb_device {
481 unsigned lpm_capable:1; 526 unsigned lpm_capable:1;
482 unsigned usb2_hw_lpm_capable:1; 527 unsigned usb2_hw_lpm_capable:1;
483 unsigned usb2_hw_lpm_enabled:1; 528 unsigned usb2_hw_lpm_enabled:1;
529 unsigned usb3_lpm_enabled:1;
484 int string_langid; 530 int string_langid;
485 531
486 /* static strings from the device */ 532 /* static strings from the device */
@@ -507,6 +553,10 @@ struct usb_device {
507 struct wusb_dev *wusb_dev; 553 struct wusb_dev *wusb_dev;
508 int slot_id; 554 int slot_id;
509 enum usb_device_removable removable; 555 enum usb_device_removable removable;
556 struct usb3_lpm_parameters u1_params;
557 struct usb3_lpm_parameters u2_params;
558 unsigned lpm_disable_count;
559 unsigned hub_initiated_lpm_disable_count;
510}; 560};
511#define to_usb_device(d) container_of(d, struct usb_device, dev) 561#define to_usb_device(d) container_of(d, struct usb_device, dev)
512 562
@@ -542,6 +592,12 @@ extern void usb_autopm_put_interface_async(struct usb_interface *intf);
542extern void usb_autopm_get_interface_no_resume(struct usb_interface *intf); 592extern void usb_autopm_get_interface_no_resume(struct usb_interface *intf);
543extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf); 593extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf);
544 594
595extern int usb_disable_lpm(struct usb_device *udev);
596extern void usb_enable_lpm(struct usb_device *udev);
597/* Same as above, but these functions lock/unlock the bandwidth_mutex. */
598extern int usb_unlocked_disable_lpm(struct usb_device *udev);
599extern void usb_unlocked_enable_lpm(struct usb_device *udev);
600
545static inline void usb_mark_last_busy(struct usb_device *udev) 601static inline void usb_mark_last_busy(struct usb_device *udev)
546{ 602{
547 pm_runtime_mark_last_busy(&udev->dev); 603 pm_runtime_mark_last_busy(&udev->dev);
@@ -842,6 +898,9 @@ struct usbdrv_wrap {
842 * for interfaces bound to this driver. 898 * for interfaces bound to this driver.
843 * @soft_unbind: if set to 1, the USB core will not kill URBs and disable 899 * @soft_unbind: if set to 1, the USB core will not kill URBs and disable
844 * endpoints before calling the driver's disconnect method. 900 * endpoints before calling the driver's disconnect method.
901 * @disable_hub_initiated_lpm: if set to 0, the USB core will not allow hubs
902 * to initiate lower power link state transitions when an idle timeout
903 * occurs. Device-initiated USB 3.0 link PM will still be allowed.
845 * 904 *
846 * USB interface drivers must provide a name, probe() and disconnect() 905 * USB interface drivers must provide a name, probe() and disconnect()
847 * methods, and an id_table. Other driver fields are optional. 906 * methods, and an id_table. Other driver fields are optional.
@@ -882,6 +941,7 @@ struct usb_driver {
882 struct usbdrv_wrap drvwrap; 941 struct usbdrv_wrap drvwrap;
883 unsigned int no_dynamic_id:1; 942 unsigned int no_dynamic_id:1;
884 unsigned int supports_autosuspend:1; 943 unsigned int supports_autosuspend:1;
944 unsigned int disable_hub_initiated_lpm:1;
885 unsigned int soft_unbind:1; 945 unsigned int soft_unbind:1;
886}; 946};
887#define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver) 947#define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver)