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.h79
1 files changed, 38 insertions, 41 deletions
diff --git a/include/linux/usb.h b/include/linux/usb.h
index e101a2d04d75..ce1323c4e47c 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -122,7 +122,6 @@ enum usb_interface_condition {
122 * number from the USB core by calling usb_register_dev(). 122 * number from the USB core by calling usb_register_dev().
123 * @condition: binding state of the interface: not bound, binding 123 * @condition: binding state of the interface: not bound, binding
124 * (in probe()), bound to a driver, or unbinding (in disconnect()) 124 * (in probe()), bound to a driver, or unbinding (in disconnect())
125 * @is_active: flag set when the interface is bound and not suspended.
126 * @sysfs_files_created: sysfs attributes exist 125 * @sysfs_files_created: sysfs attributes exist
127 * @ep_devs_created: endpoint child pseudo-devices exist 126 * @ep_devs_created: endpoint child pseudo-devices exist
128 * @unregistering: flag set when the interface is being unregistered 127 * @unregistering: flag set when the interface is being unregistered
@@ -135,8 +134,7 @@ enum usb_interface_condition {
135 * @dev: driver model's view of this device 134 * @dev: driver model's view of this device
136 * @usb_dev: if an interface is bound to the USB major, this will point 135 * @usb_dev: if an interface is bound to the USB major, this will point
137 * to the sysfs representation for that device. 136 * to the sysfs representation for that device.
138 * @pm_usage_cnt: PM usage counter for this interface; autosuspend is not 137 * @pm_usage_cnt: PM usage counter for this interface
139 * allowed unless the counter is 0.
140 * @reset_ws: Used for scheduling resets from atomic context. 138 * @reset_ws: Used for scheduling resets from atomic context.
141 * @reset_running: set to 1 if the interface is currently running a 139 * @reset_running: set to 1 if the interface is currently running a
142 * queued reset so that usb_cancel_queued_reset() doesn't try to 140 * queued reset so that usb_cancel_queued_reset() doesn't try to
@@ -184,7 +182,6 @@ struct usb_interface {
184 int minor; /* minor number this interface is 182 int minor; /* minor number this interface is
185 * bound to */ 183 * bound to */
186 enum usb_interface_condition condition; /* state of binding */ 184 enum usb_interface_condition condition; /* state of binding */
187 unsigned is_active:1; /* the interface is not suspended */
188 unsigned sysfs_files_created:1; /* the sysfs attributes exist */ 185 unsigned sysfs_files_created:1; /* the sysfs attributes exist */
189 unsigned ep_devs_created:1; /* endpoint "devices" exist */ 186 unsigned ep_devs_created:1; /* endpoint "devices" exist */
190 unsigned unregistering:1; /* unregistration is in progress */ 187 unsigned unregistering:1; /* unregistration is in progress */
@@ -192,6 +189,7 @@ struct usb_interface {
192 unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */ 189 unsigned needs_altsetting0:1; /* switch to altsetting 0 is pending */
193 unsigned needs_binding:1; /* needs delayed unbind/rebind */ 190 unsigned needs_binding:1; /* needs delayed unbind/rebind */
194 unsigned reset_running:1; 191 unsigned reset_running:1;
192 unsigned resetting_device:1; /* true: bandwidth alloc after reset */
195 193
196 struct device dev; /* interface specific device info */ 194 struct device dev; /* interface specific device info */
197 struct device *usb_dev; 195 struct device *usb_dev;
@@ -338,6 +336,7 @@ struct usb_bus {
338 336
339 struct usb_devmap devmap; /* device address allocation map */ 337 struct usb_devmap devmap; /* device address allocation map */
340 struct usb_device *root_hub; /* Root hub */ 338 struct usb_device *root_hub; /* Root hub */
339 struct usb_bus *hs_companion; /* Companion EHCI bus, if any */
341 struct list_head bus_list; /* list of busses */ 340 struct list_head bus_list; /* list of busses */
342 341
343 int bandwidth_allocated; /* on this bus: how much of the time 342 int bandwidth_allocated; /* on this bus: how much of the time
@@ -399,7 +398,6 @@ struct usb_tt;
399 * @portnum: parent port number (origin 1) 398 * @portnum: parent port number (origin 1)
400 * @level: number of USB hub ancestors 399 * @level: number of USB hub ancestors
401 * @can_submit: URBs may be submitted 400 * @can_submit: URBs may be submitted
402 * @discon_suspended: disconnected while suspended
403 * @persist_enabled: USB_PERSIST enabled for this device 401 * @persist_enabled: USB_PERSIST enabled for this device
404 * @have_langid: whether string_langid is valid 402 * @have_langid: whether string_langid is valid
405 * @authorized: policy has said we can use it; 403 * @authorized: policy has said we can use it;
@@ -419,20 +417,15 @@ struct usb_tt;
419 * @usbfs_dentry: usbfs dentry entry for the device 417 * @usbfs_dentry: usbfs dentry entry for the device
420 * @maxchild: number of ports if hub 418 * @maxchild: number of ports if hub
421 * @children: child devices - USB devices that are attached to this hub 419 * @children: child devices - USB devices that are attached to this hub
422 * @pm_usage_cnt: usage counter for autosuspend
423 * @quirks: quirks of the whole device 420 * @quirks: quirks of the whole device
424 * @urbnum: number of URBs submitted for the whole device 421 * @urbnum: number of URBs submitted for the whole device
425 * @active_duration: total time device is not suspended 422 * @active_duration: total time device is not suspended
426 * @autosuspend: for delayed autosuspends
427 * @autoresume: for autoresumes requested while in_interrupt
428 * @pm_mutex: protects PM operations
429 * @last_busy: time of last use 423 * @last_busy: time of last use
430 * @autosuspend_delay: in jiffies 424 * @autosuspend_delay: in jiffies
431 * @connect_time: time device was first connected 425 * @connect_time: time device was first connected
432 * @do_remote_wakeup: remote wakeup should be enabled 426 * @do_remote_wakeup: remote wakeup should be enabled
433 * @reset_resume: needs reset instead of resume 427 * @reset_resume: needs reset instead of resume
434 * @autosuspend_disabled: autosuspend disabled by the user 428 * @autosuspend_disabled: autosuspend disabled by the user
435 * @skip_sys_resume: skip the next system resume
436 * @wusb_dev: if this is a Wireless USB device, link to the WUSB 429 * @wusb_dev: if this is a Wireless USB device, link to the WUSB
437 * specific data for the device. 430 * specific data for the device.
438 * @slot_id: Slot ID assigned by xHCI 431 * @slot_id: Slot ID assigned by xHCI
@@ -473,7 +466,6 @@ struct usb_device {
473 u8 level; 466 u8 level;
474 467
475 unsigned can_submit:1; 468 unsigned can_submit:1;
476 unsigned discon_suspended:1;
477 unsigned persist_enabled:1; 469 unsigned persist_enabled:1;
478 unsigned have_langid:1; 470 unsigned have_langid:1;
479 unsigned authorized:1; 471 unsigned authorized:1;
@@ -497,17 +489,12 @@ struct usb_device {
497 int maxchild; 489 int maxchild;
498 struct usb_device *children[USB_MAXCHILDREN]; 490 struct usb_device *children[USB_MAXCHILDREN];
499 491
500 int pm_usage_cnt;
501 u32 quirks; 492 u32 quirks;
502 atomic_t urbnum; 493 atomic_t urbnum;
503 494
504 unsigned long active_duration; 495 unsigned long active_duration;
505 496
506#ifdef CONFIG_PM 497#ifdef CONFIG_PM
507 struct delayed_work autosuspend;
508 struct work_struct autoresume;
509 struct mutex pm_mutex;
510
511 unsigned long last_busy; 498 unsigned long last_busy;
512 int autosuspend_delay; 499 int autosuspend_delay;
513 unsigned long connect_time; 500 unsigned long connect_time;
@@ -515,7 +502,6 @@ struct usb_device {
515 unsigned do_remote_wakeup:1; 502 unsigned do_remote_wakeup:1;
516 unsigned reset_resume:1; 503 unsigned reset_resume:1;
517 unsigned autosuspend_disabled:1; 504 unsigned autosuspend_disabled:1;
518 unsigned skip_sys_resume:1;
519#endif 505#endif
520 struct wusb_dev *wusb_dev; 506 struct wusb_dev *wusb_dev;
521 int slot_id; 507 int slot_id;
@@ -526,9 +512,9 @@ extern struct usb_device *usb_get_dev(struct usb_device *dev);
526extern void usb_put_dev(struct usb_device *dev); 512extern void usb_put_dev(struct usb_device *dev);
527 513
528/* USB device locking */ 514/* USB device locking */
529#define usb_lock_device(udev) down(&(udev)->dev.sem) 515#define usb_lock_device(udev) device_lock(&(udev)->dev)
530#define usb_unlock_device(udev) up(&(udev)->dev.sem) 516#define usb_unlock_device(udev) device_unlock(&(udev)->dev)
531#define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) 517#define usb_trylock_device(udev) device_trylock(&(udev)->dev)
532extern int usb_lock_device_for_reset(struct usb_device *udev, 518extern int usb_lock_device_for_reset(struct usb_device *udev,
533 const struct usb_interface *iface); 519 const struct usb_interface *iface);
534 520
@@ -540,21 +526,15 @@ extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id);
540 526
541/* USB autosuspend and autoresume */ 527/* USB autosuspend and autoresume */
542#ifdef CONFIG_USB_SUSPEND 528#ifdef CONFIG_USB_SUSPEND
529extern int usb_enable_autosuspend(struct usb_device *udev);
530extern int usb_disable_autosuspend(struct usb_device *udev);
531
543extern int usb_autopm_get_interface(struct usb_interface *intf); 532extern int usb_autopm_get_interface(struct usb_interface *intf);
544extern void usb_autopm_put_interface(struct usb_interface *intf); 533extern void usb_autopm_put_interface(struct usb_interface *intf);
545extern int usb_autopm_get_interface_async(struct usb_interface *intf); 534extern int usb_autopm_get_interface_async(struct usb_interface *intf);
546extern void usb_autopm_put_interface_async(struct usb_interface *intf); 535extern void usb_autopm_put_interface_async(struct usb_interface *intf);
547 536extern void usb_autopm_get_interface_no_resume(struct usb_interface *intf);
548static inline void usb_autopm_get_interface_no_resume( 537extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf);
549 struct usb_interface *intf)
550{
551 atomic_inc(&intf->pm_usage_cnt);
552}
553static inline void usb_autopm_put_interface_no_suspend(
554 struct usb_interface *intf)
555{
556 atomic_dec(&intf->pm_usage_cnt);
557}
558 538
559static inline void usb_mark_last_busy(struct usb_device *udev) 539static inline void usb_mark_last_busy(struct usb_device *udev)
560{ 540{
@@ -563,6 +543,11 @@ static inline void usb_mark_last_busy(struct usb_device *udev)
563 543
564#else 544#else
565 545
546static inline int usb_enable_autosuspend(struct usb_device *udev)
547{ return 0; }
548static inline int usb_disable_autosuspend(struct usb_device *udev)
549{ return 0; }
550
566static inline int usb_autopm_get_interface(struct usb_interface *intf) 551static inline int usb_autopm_get_interface(struct usb_interface *intf)
567{ return 0; } 552{ return 0; }
568static inline int usb_autopm_get_interface_async(struct usb_interface *intf) 553static inline int usb_autopm_get_interface_async(struct usb_interface *intf)
@@ -1070,7 +1055,8 @@ typedef void (*usb_complete_t)(struct urb *);
1070 * @number_of_packets: Lists the number of ISO transfer buffers. 1055 * @number_of_packets: Lists the number of ISO transfer buffers.
1071 * @interval: Specifies the polling interval for interrupt or isochronous 1056 * @interval: Specifies the polling interval for interrupt or isochronous
1072 * transfers. The units are frames (milliseconds) for full and low 1057 * transfers. The units are frames (milliseconds) for full and low
1073 * speed devices, and microframes (1/8 millisecond) for highspeed ones. 1058 * speed devices, and microframes (1/8 millisecond) for highspeed
1059 * and SuperSpeed devices.
1074 * @error_count: Returns the number of ISO transfers that reported errors. 1060 * @error_count: Returns the number of ISO transfers that reported errors.
1075 * @context: For use in completion functions. This normally points to 1061 * @context: For use in completion functions. This normally points to
1076 * request-specific driver context. 1062 * request-specific driver context.
@@ -1301,9 +1287,16 @@ static inline void usb_fill_bulk_urb(struct urb *urb,
1301 * 1287 *
1302 * Initializes a interrupt urb with the proper information needed to submit 1288 * Initializes a interrupt urb with the proper information needed to submit
1303 * it to a device. 1289 * it to a device.
1304 * Note that high speed interrupt endpoints use a logarithmic encoding of 1290 *
1305 * the endpoint interval, and express polling intervals in microframes 1291 * Note that High Speed and SuperSpeed interrupt endpoints use a logarithmic
1306 * (eight per millisecond) rather than in frames (one per millisecond). 1292 * encoding of the endpoint interval, and express polling intervals in
1293 * microframes (eight per millisecond) rather than in frames (one per
1294 * millisecond).
1295 *
1296 * Wireless USB also uses the logarithmic encoding, but specifies it in units of
1297 * 128us instead of 125us. For Wireless USB devices, the interval is passed
1298 * through to the host controller, rather than being translated into microframe
1299 * units.
1307 */ 1300 */
1308static inline void usb_fill_int_urb(struct urb *urb, 1301static inline void usb_fill_int_urb(struct urb *urb,
1309 struct usb_device *dev, 1302 struct usb_device *dev,
@@ -1320,7 +1313,7 @@ static inline void usb_fill_int_urb(struct urb *urb,
1320 urb->transfer_buffer_length = buffer_length; 1313 urb->transfer_buffer_length = buffer_length;
1321 urb->complete = complete_fn; 1314 urb->complete = complete_fn;
1322 urb->context = context; 1315 urb->context = context;
1323 if (dev->speed == USB_SPEED_HIGH) 1316 if (dev->speed == USB_SPEED_HIGH || dev->speed == USB_SPEED_SUPER)
1324 urb->interval = 1 << (interval - 1); 1317 urb->interval = 1 << (interval - 1);
1325 else 1318 else
1326 urb->interval = interval; 1319 urb->interval = interval;
@@ -1581,14 +1574,18 @@ extern void usb_register_notify(struct notifier_block *nb);
1581extern void usb_unregister_notify(struct notifier_block *nb); 1574extern void usb_unregister_notify(struct notifier_block *nb);
1582 1575
1583#ifdef DEBUG 1576#ifdef DEBUG
1584#define dbg(format, arg...) printk(KERN_DEBUG "%s: " format "\n" , \ 1577#define dbg(format, arg...) \
1585 __FILE__ , ## arg) 1578 printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg)
1586#else 1579#else
1587#define dbg(format, arg...) do {} while (0) 1580#define dbg(format, arg...) \
1581do { \
1582 if (0) \
1583 printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg); \
1584} while (0)
1588#endif 1585#endif
1589 1586
1590#define err(format, arg...) printk(KERN_ERR KBUILD_MODNAME ": " \ 1587#define err(format, arg...) \
1591 format "\n" , ## arg) 1588 printk(KERN_ERR KBUILD_MODNAME ": " format "\n", ##arg)
1592 1589
1593/* debugfs stuff */ 1590/* debugfs stuff */
1594extern struct dentry *usb_debug_root; 1591extern struct dentry *usb_debug_root;