diff options
author | Dan Williams <dan.j.williams@intel.com> | 2014-05-20 18:08:28 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-05-27 16:38:52 -0700 |
commit | d8521afe35862f4fbe3ccd6ca37897c0a304edf3 (patch) | |
tree | 954c24e20f738a5b6fd0c7038bffdd5e8c71f211 /drivers/usb/core/usb.h | |
parent | a4204ff0bd576fc114357eed70e7c4e776ddf396 (diff) | |
download | talos-op-linux-d8521afe35862f4fbe3ccd6ca37897c0a304edf3.tar.gz talos-op-linux-d8521afe35862f4fbe3ccd6ca37897c0a304edf3.zip |
usb: assign default peer ports for root hubs
Assume that the peer of a superspeed port is the port with the same id
on the shared_hcd root hub. This identification scheme is required of
external hubs by the USB3 spec [1]. However, for root hubs, tier mismatch
may be in effect [2]. Tier mismatch can only be enumerated via platform
firmware. For now, simply perform the nominal association.
A new lock 'usb_port_peer_mutex' is introduced to synchronize port
device add/remove with peer lookups. It protects peering against
changes to hcd->shared_hcd, hcd->self.root_hub, hdev->maxchild, and
port_dev->child pointers.
[1]: usb 3.1 section 10.3.3
[2]: xhci 1.1 appendix D
Cc: Alan Stern <stern@rowland.harvard.edu>
[alan: usb_port_peer_mutex locking scheme]
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/core/usb.h')
-rw-r--r-- | drivers/usb/core/usb.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h index 69bfc253a7b8..6afa738b5ba4 100644 --- a/drivers/usb/core/usb.h +++ b/drivers/usb/core/usb.h @@ -119,6 +119,7 @@ static inline int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable) #endif extern struct bus_type usb_bus_type; +extern struct mutex usb_port_peer_mutex; extern struct device_type usb_device_type; extern struct device_type usb_if_device_type; extern struct device_type usb_ep_device_type; |