]> err.no Git - linux-2.6/blobdiff - include/linux/usb.h
Merge ../linux-2.6
[linux-2.6] / include / linux / usb.h
index dd9733cc0ac2c4440ed34724a60823bef24ddfe1..5811c5da69f938275e4ba595a23fc252b4c0fc1a 100644 (file)
@@ -23,6 +23,7 @@
 
 struct usb_device;
 struct usb_driver;
+struct wusb_dev;
 
 /*-------------------------------------------------------------------------*/
 
@@ -159,6 +160,7 @@ struct usb_interface {
        unsigned is_active:1;           /* the interface is not suspended */
        unsigned sysfs_files_created:1; /* the sysfs attributes exist */
        unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */
+       unsigned needs_binding:1;       /* needs delayed unbind/rebind */
 
        struct device dev;              /* interface specific device info */
        struct device *usb_dev;
@@ -292,7 +294,7 @@ struct usb_devmap {
 struct usb_bus {
        struct device *controller;      /* host/master side hardware */
        int busnum;                     /* Bus number (in order of reg) */
-       char *bus_name;                 /* stable id (PCI slot_name etc) */
+       const char *bus_name;           /* stable id (PCI slot_name etc) */
        u8 uses_dma;                    /* Does the host controller use DMA? */
        u8 otg_port;                    /* 0, or number of OTG/HNP port */
        unsigned is_b_host:1;           /* true during some HNP roleswitches */
@@ -372,6 +374,7 @@ struct usb_tt;
  *     used or not. By default, wired USB devices are authorized.
  *     WUSB devices are not, until we authorize them from user space.
  *     FIXME -- complete doc
+ * @authenticated: Crypto authentication passed
  * @wusb: device is Wireless USB
  * @string_langid: language ID for strings
  * @product: iProduct string, if present (static)
@@ -438,6 +441,7 @@ struct usb_device {
        unsigned persist_enabled:1;
        unsigned have_langid:1;
        unsigned authorized:1;
+       unsigned authenticated:1;
        unsigned wusb:1;
        int string_langid;
 
@@ -478,6 +482,7 @@ struct usb_device {
        unsigned autoresume_disabled:1;
        unsigned skip_sys_resume:1;
 #endif
+       struct wusb_dev *wusb_dev;
 };
 #define        to_usb_device(d) container_of(d, struct usb_device, dev)
 
@@ -493,8 +498,6 @@ extern int usb_lock_device_for_reset(struct usb_device *udev,
 
 /* USB port reset for device reinitialization */
 extern int usb_reset_device(struct usb_device *dev);
-extern int usb_reset_composite_device(struct usb_device *dev,
-               struct usb_interface *iface);
 
 extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id);
 
@@ -938,10 +941,11 @@ struct usbdrv_wrap {
  *     and should normally be the same as the module name.
  * @probe: Called to see if the driver is willing to manage a particular
  *     interface on a device.  If it is, probe returns zero and uses
- *     dev_set_drvdata() to associate driver-specific data with the
+ *     usb_set_intfdata() to associate driver-specific data with the
  *     interface.  It may also use usb_set_interface() to specify the
  *     appropriate altsetting.  If unwilling to manage the interface,
- *     return a negative errno value.
+ *     return -ENODEV, if genuine IO errors occured, an appropriate
+ *     negative errno value.
  * @disconnect: Called when the interface is no longer accessible, usually
  *     because its device has been (or is being) disconnected or the
  *     driver module is being unloaded.
@@ -953,13 +957,10 @@ struct usbdrv_wrap {
  * @resume: Called when the device is being resumed by the system.
  * @reset_resume: Called when the suspended device has been reset instead
  *     of being resumed.
- * @pre_reset: Called by usb_reset_composite_device() when the device
+ * @pre_reset: Called by usb_reset_device() when the device
  *     is about to be reset.
- * @post_reset: Called by usb_reset_composite_device() after the device
- *     has been reset, or in lieu of @resume following a reset-resume
- *     (i.e., the device is reset instead of being resumed, as might
- *     happen if power was lost).  The second argument tells which is
- *     the reason.
+ * @post_reset: Called by usb_reset_device() after the device
+ *     has been reset
  * @id_table: USB drivers use ID table to support hotplugging.
  *     Export this with MODULE_DEVICE_TABLE(usb,...).  This must be set
  *     or your driver's probe function will never get called.
@@ -970,6 +971,8 @@ struct usbdrv_wrap {
  *     added to this driver by preventing the sysfs file from being created.
  * @supports_autosuspend: if set to 0, the USB core will not allow autosuspend
  *     for interfaces bound to this driver.
+ * @soft_unbind: if set to 1, the USB core will not kill URBs and disable
+ *     endpoints before calling the driver's disconnect method.
  *
  * USB interface drivers must provide a name, probe() and disconnect()
  * methods, and an id_table.  Other driver fields are optional.
@@ -1010,6 +1013,7 @@ struct usb_driver {
        struct usbdrv_wrap drvwrap;
        unsigned int no_dynamic_id:1;
        unsigned int supports_autosuspend:1;
+       unsigned int soft_unbind:1;
 };
 #define        to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver)
 
@@ -1451,6 +1455,7 @@ extern int usb_submit_urb(struct urb *urb, gfp_t mem_flags);
 extern int usb_unlink_urb(struct urb *urb);
 extern void usb_kill_urb(struct urb *urb);
 extern void usb_kill_anchored_urbs(struct usb_anchor *anchor);
+extern void usb_unlink_anchored_urbs(struct usb_anchor *anchor);
 extern void usb_anchor_urb(struct urb *urb, struct usb_anchor *anchor);
 extern void usb_unanchor_urb(struct urb *urb);
 extern int usb_wait_anchor_empty_timeout(struct usb_anchor *anchor,