diff options
Diffstat (limited to 'drivers/usb/core/hcd.h')
-rw-r--r-- | drivers/usb/core/hcd.h | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h index e7d4479de41c..d397ecfd5b17 100644 --- a/drivers/usb/core/hcd.h +++ b/drivers/usb/core/hcd.h | |||
@@ -173,6 +173,8 @@ struct hc_driver { | |||
173 | #define HCD_LOCAL_MEM 0x0002 /* HC needs local memory */ | 173 | #define HCD_LOCAL_MEM 0x0002 /* HC needs local memory */ |
174 | #define HCD_USB11 0x0010 /* USB 1.1 */ | 174 | #define HCD_USB11 0x0010 /* USB 1.1 */ |
175 | #define HCD_USB2 0x0020 /* USB 2.0 */ | 175 | #define HCD_USB2 0x0020 /* USB 2.0 */ |
176 | #define HCD_USB3 0x0040 /* USB 3.0 */ | ||
177 | #define HCD_MASK 0x0070 | ||
176 | 178 | ||
177 | /* called to init HCD and root hub */ | 179 | /* called to init HCD and root hub */ |
178 | int (*reset) (struct usb_hcd *hcd); | 180 | int (*reset) (struct usb_hcd *hcd); |
@@ -182,10 +184,10 @@ struct hc_driver { | |||
182 | * a whole, not just the root hub; they're for PCI bus glue. | 184 | * a whole, not just the root hub; they're for PCI bus glue. |
183 | */ | 185 | */ |
184 | /* called after suspending the hub, before entering D3 etc */ | 186 | /* called after suspending the hub, before entering D3 etc */ |
185 | int (*pci_suspend) (struct usb_hcd *hcd, pm_message_t message); | 187 | int (*pci_suspend)(struct usb_hcd *hcd); |
186 | 188 | ||
187 | /* called after entering D0 (etc), before resuming the hub */ | 189 | /* called after entering D0 (etc), before resuming the hub */ |
188 | int (*pci_resume) (struct usb_hcd *hcd); | 190 | int (*pci_resume)(struct usb_hcd *hcd, bool hibernated); |
189 | 191 | ||
190 | /* cleanly make HCD stop writing memory and doing I/O */ | 192 | /* cleanly make HCD stop writing memory and doing I/O */ |
191 | void (*stop) (struct usb_hcd *hcd); | 193 | void (*stop) (struct usb_hcd *hcd); |
@@ -224,6 +226,43 @@ struct hc_driver { | |||
224 | void (*relinquish_port)(struct usb_hcd *, int); | 226 | void (*relinquish_port)(struct usb_hcd *, int); |
225 | /* has a port been handed over to a companion? */ | 227 | /* has a port been handed over to a companion? */ |
226 | int (*port_handed_over)(struct usb_hcd *, int); | 228 | int (*port_handed_over)(struct usb_hcd *, int); |
229 | |||
230 | /* xHCI specific functions */ | ||
231 | /* Called by usb_alloc_dev to alloc HC device structures */ | ||
232 | int (*alloc_dev)(struct usb_hcd *, struct usb_device *); | ||
233 | /* Called by usb_release_dev to free HC device structures */ | ||
234 | void (*free_dev)(struct usb_hcd *, struct usb_device *); | ||
235 | |||
236 | /* Bandwidth computation functions */ | ||
237 | /* Note that add_endpoint() can only be called once per endpoint before | ||
238 | * check_bandwidth() or reset_bandwidth() must be called. | ||
239 | * drop_endpoint() can only be called once per endpoint also. | ||
240 | * A call to xhci_drop_endpoint() followed by a call to xhci_add_endpoint() will | ||
241 | * add the endpoint to the schedule with possibly new parameters denoted by a | ||
242 | * different endpoint descriptor in usb_host_endpoint. | ||
243 | * A call to xhci_add_endpoint() followed by a call to xhci_drop_endpoint() is | ||
244 | * not allowed. | ||
245 | */ | ||
246 | /* Allocate endpoint resources and add them to a new schedule */ | ||
247 | int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *); | ||
248 | /* Drop an endpoint from a new schedule */ | ||
249 | int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *); | ||
250 | /* Check that a new hardware configuration, set using | ||
251 | * endpoint_enable and endpoint_disable, does not exceed bus | ||
252 | * bandwidth. This must be called before any set configuration | ||
253 | * or set interface requests are sent to the device. | ||
254 | */ | ||
255 | int (*check_bandwidth)(struct usb_hcd *, struct usb_device *); | ||
256 | /* Reset the device schedule to the last known good schedule, | ||
257 | * which was set from a previous successful call to | ||
258 | * check_bandwidth(). This reverts any add_endpoint() and | ||
259 | * drop_endpoint() calls since that last successful call. | ||
260 | * Used for when a check_bandwidth() call fails due to resource | ||
261 | * or bandwidth constraints. | ||
262 | */ | ||
263 | void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *); | ||
264 | /* Returns the hardware-chosen device address */ | ||
265 | int (*address_device)(struct usb_hcd *, struct usb_device *udev); | ||
227 | }; | 266 | }; |
228 | 267 | ||
229 | extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); | 268 | extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); |
@@ -242,6 +281,9 @@ extern void usb_hcd_disable_endpoint(struct usb_device *udev, | |||
242 | extern void usb_hcd_reset_endpoint(struct usb_device *udev, | 281 | extern void usb_hcd_reset_endpoint(struct usb_device *udev, |
243 | struct usb_host_endpoint *ep); | 282 | struct usb_host_endpoint *ep); |
244 | extern void usb_hcd_synchronize_unlinks(struct usb_device *udev); | 283 | extern void usb_hcd_synchronize_unlinks(struct usb_device *udev); |
284 | extern int usb_hcd_check_bandwidth(struct usb_device *udev, | ||
285 | struct usb_host_config *new_config, | ||
286 | struct usb_interface *new_intf); | ||
245 | extern int usb_hcd_get_frame_number(struct usb_device *udev); | 287 | extern int usb_hcd_get_frame_number(struct usb_device *udev); |
246 | 288 | ||
247 | extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver, | 289 | extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver, |
@@ -261,14 +303,11 @@ struct pci_device_id; | |||
261 | extern int usb_hcd_pci_probe(struct pci_dev *dev, | 303 | extern int usb_hcd_pci_probe(struct pci_dev *dev, |
262 | const struct pci_device_id *id); | 304 | const struct pci_device_id *id); |
263 | extern void usb_hcd_pci_remove(struct pci_dev *dev); | 305 | extern void usb_hcd_pci_remove(struct pci_dev *dev); |
264 | |||
265 | #ifdef CONFIG_PM | ||
266 | extern int usb_hcd_pci_suspend(struct pci_dev *dev, pm_message_t msg); | ||
267 | extern int usb_hcd_pci_resume(struct pci_dev *dev); | ||
268 | #endif /* CONFIG_PM */ | ||
269 | |||
270 | extern void usb_hcd_pci_shutdown(struct pci_dev *dev); | 306 | extern void usb_hcd_pci_shutdown(struct pci_dev *dev); |
271 | 307 | ||
308 | #ifdef CONFIG_PM_SLEEP | ||
309 | extern struct dev_pm_ops usb_hcd_pci_pm_ops; | ||
310 | #endif | ||
272 | #endif /* CONFIG_PCI */ | 311 | #endif /* CONFIG_PCI */ |
273 | 312 | ||
274 | /* pci-ish (pdev null is ok) buffer alloc/mapping support */ | 313 | /* pci-ish (pdev null is ok) buffer alloc/mapping support */ |