diff options
Diffstat (limited to 'include/linux/usb.h')
-rw-r--r-- | include/linux/usb.h | 79 |
1 files changed, 66 insertions, 13 deletions
diff --git a/include/linux/usb.h b/include/linux/usb.h index 73b68d1f2cb0..dea39dc551d4 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -351,10 +351,6 @@ struct usb_bus { | |||
351 | int bandwidth_int_reqs; /* number of Interrupt requests */ | 351 | int bandwidth_int_reqs; /* number of Interrupt requests */ |
352 | int bandwidth_isoc_reqs; /* number of Isoc. requests */ | 352 | int bandwidth_isoc_reqs; /* number of Isoc. requests */ |
353 | 353 | ||
354 | #ifdef CONFIG_USB_DEVICEFS | ||
355 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the bus */ | ||
356 | #endif | ||
357 | |||
358 | #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE) | 354 | #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE) |
359 | struct mon_bus *mon_bus; /* non-null when associated */ | 355 | struct mon_bus *mon_bus; /* non-null when associated */ |
360 | int monitored; /* non-zero when monitored */ | 356 | int monitored; /* non-zero when monitored */ |
@@ -382,6 +378,45 @@ enum usb_device_removable { | |||
382 | USB_DEVICE_FIXED, | 378 | USB_DEVICE_FIXED, |
383 | }; | 379 | }; |
384 | 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 | */ | ||
388 | struct 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 | |||
385 | /** | 420 | /** |
386 | * struct usb_device - kernel's representation of a USB device | 421 | * struct usb_device - kernel's representation of a USB device |
387 | * @devnum: device number; address on a USB bus | 422 | * @devnum: device number; address on a USB bus |
@@ -439,6 +474,12 @@ enum usb_device_removable { | |||
439 | * specific data for the device. | 474 | * specific data for the device. |
440 | * @slot_id: Slot ID assigned by xHCI | 475 | * @slot_id: Slot ID assigned by xHCI |
441 | * @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. | ||
442 | * | 483 | * |
443 | * Notes: | 484 | * Notes: |
444 | * Usbcore drivers should not set usbdev->state directly. Instead use | 485 | * Usbcore drivers should not set usbdev->state directly. Instead use |
@@ -485,6 +526,7 @@ struct usb_device { | |||
485 | unsigned lpm_capable:1; | 526 | unsigned lpm_capable:1; |
486 | unsigned usb2_hw_lpm_capable:1; | 527 | unsigned usb2_hw_lpm_capable:1; |
487 | unsigned usb2_hw_lpm_enabled:1; | 528 | unsigned usb2_hw_lpm_enabled:1; |
529 | unsigned usb3_lpm_enabled:1; | ||
488 | int string_langid; | 530 | int string_langid; |
489 | 531 | ||
490 | /* static strings from the device */ | 532 | /* static strings from the device */ |
@@ -493,12 +535,6 @@ struct usb_device { | |||
493 | char *serial; | 535 | char *serial; |
494 | 536 | ||
495 | struct list_head filelist; | 537 | struct list_head filelist; |
496 | #ifdef CONFIG_USB_DEVICE_CLASS | ||
497 | struct device *usb_classdev; | ||
498 | #endif | ||
499 | #ifdef CONFIG_USB_DEVICEFS | ||
500 | struct dentry *usbfs_dentry; | ||
501 | #endif | ||
502 | 538 | ||
503 | int maxchild; | 539 | int maxchild; |
504 | struct usb_device **children; | 540 | struct usb_device **children; |
@@ -517,6 +553,10 @@ struct usb_device { | |||
517 | struct wusb_dev *wusb_dev; | 553 | struct wusb_dev *wusb_dev; |
518 | int slot_id; | 554 | int slot_id; |
519 | 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; | ||
520 | }; | 560 | }; |
521 | #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) |
522 | 562 | ||
@@ -583,6 +623,12 @@ static inline void usb_mark_last_busy(struct usb_device *udev) | |||
583 | { } | 623 | { } |
584 | #endif | 624 | #endif |
585 | 625 | ||
626 | extern int usb_disable_lpm(struct usb_device *udev); | ||
627 | extern void usb_enable_lpm(struct usb_device *udev); | ||
628 | /* Same as above, but these functions lock/unlock the bandwidth_mutex. */ | ||
629 | extern int usb_unlocked_disable_lpm(struct usb_device *udev); | ||
630 | extern void usb_unlocked_enable_lpm(struct usb_device *udev); | ||
631 | |||
586 | /*-------------------------------------------------------------------------*/ | 632 | /*-------------------------------------------------------------------------*/ |
587 | 633 | ||
588 | /* for drivers using iso endpoints */ | 634 | /* for drivers using iso endpoints */ |
@@ -800,6 +846,8 @@ extern ssize_t usb_store_new_id(struct usb_dynids *dynids, | |||
800 | struct device_driver *driver, | 846 | struct device_driver *driver, |
801 | const char *buf, size_t count); | 847 | const char *buf, size_t count); |
802 | 848 | ||
849 | extern ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf); | ||
850 | |||
803 | /** | 851 | /** |
804 | * struct usbdrv_wrap - wrapper for driver-model structure | 852 | * struct usbdrv_wrap - wrapper for driver-model structure |
805 | * @driver: The driver-model core driver structure. | 853 | * @driver: The driver-model core driver structure. |
@@ -850,6 +898,9 @@ struct usbdrv_wrap { | |||
850 | * for interfaces bound to this driver. | 898 | * for interfaces bound to this driver. |
851 | * @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 |
852 | * 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. | ||
853 | * | 904 | * |
854 | * USB interface drivers must provide a name, probe() and disconnect() | 905 | * USB interface drivers must provide a name, probe() and disconnect() |
855 | * methods, and an id_table. Other driver fields are optional. | 906 | * methods, and an id_table. Other driver fields are optional. |
@@ -890,6 +941,7 @@ struct usb_driver { | |||
890 | struct usbdrv_wrap drvwrap; | 941 | struct usbdrv_wrap drvwrap; |
891 | unsigned int no_dynamic_id:1; | 942 | unsigned int no_dynamic_id:1; |
892 | unsigned int supports_autosuspend:1; | 943 | unsigned int supports_autosuspend:1; |
944 | unsigned int disable_hub_initiated_lpm:1; | ||
893 | unsigned int soft_unbind:1; | 945 | unsigned int soft_unbind:1; |
894 | }; | 946 | }; |
895 | #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) |
@@ -1379,6 +1431,7 @@ extern int usb_unlink_urb(struct urb *urb); | |||
1379 | extern void usb_kill_urb(struct urb *urb); | 1431 | extern void usb_kill_urb(struct urb *urb); |
1380 | extern void usb_poison_urb(struct urb *urb); | 1432 | extern void usb_poison_urb(struct urb *urb); |
1381 | extern void usb_unpoison_urb(struct urb *urb); | 1433 | extern void usb_unpoison_urb(struct urb *urb); |
1434 | extern void usb_block_urb(struct urb *urb); | ||
1382 | extern void usb_kill_anchored_urbs(struct usb_anchor *anchor); | 1435 | extern void usb_kill_anchored_urbs(struct usb_anchor *anchor); |
1383 | extern void usb_poison_anchored_urbs(struct usb_anchor *anchor); | 1436 | extern void usb_poison_anchored_urbs(struct usb_anchor *anchor); |
1384 | extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor); | 1437 | extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor); |
@@ -1391,6 +1444,8 @@ extern struct urb *usb_get_from_anchor(struct usb_anchor *anchor); | |||
1391 | extern void usb_scuttle_anchored_urbs(struct usb_anchor *anchor); | 1444 | extern void usb_scuttle_anchored_urbs(struct usb_anchor *anchor); |
1392 | extern int usb_anchor_empty(struct usb_anchor *anchor); | 1445 | extern int usb_anchor_empty(struct usb_anchor *anchor); |
1393 | 1446 | ||
1447 | #define usb_unblock_urb usb_unpoison_urb | ||
1448 | |||
1394 | /** | 1449 | /** |
1395 | * usb_urb_dir_in - check if an URB describes an IN transfer | 1450 | * usb_urb_dir_in - check if an URB describes an IN transfer |
1396 | * @urb: URB to be checked | 1451 | * @urb: URB to be checked |
@@ -1627,6 +1682,7 @@ static inline int usb_translate_errors(int error_code) | |||
1627 | case 0: | 1682 | case 0: |
1628 | case -ENOMEM: | 1683 | case -ENOMEM: |
1629 | case -ENODEV: | 1684 | case -ENODEV: |
1685 | case -EOPNOTSUPP: | ||
1630 | return error_code; | 1686 | return error_code; |
1631 | default: | 1687 | default: |
1632 | return -EIO; | 1688 | return -EIO; |
@@ -1652,9 +1708,6 @@ do { \ | |||
1652 | } while (0) | 1708 | } while (0) |
1653 | #endif | 1709 | #endif |
1654 | 1710 | ||
1655 | #define err(format, arg...) \ | ||
1656 | printk(KERN_ERR KBUILD_MODNAME ": " format "\n", ##arg) | ||
1657 | |||
1658 | /* debugfs stuff */ | 1711 | /* debugfs stuff */ |
1659 | extern struct dentry *usb_debug_root; | 1712 | extern struct dentry *usb_debug_root; |
1660 | 1713 | ||