LCOV - code coverage report
Current view: top level - include/linux - usb.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 16 41 39.0 %
Date: 2014-02-18 Functions: 0 0 -
Branches: 12 46 26.1 %

           Branch data     Line data    Source code
       1                 :            : #ifndef __LINUX_USB_H
       2                 :            : #define __LINUX_USB_H
       3                 :            : 
       4                 :            : #include <linux/mod_devicetable.h>
       5                 :            : #include <linux/usb/ch9.h>
       6                 :            : 
       7                 :            : #define USB_MAJOR                       180
       8                 :            : #define USB_DEVICE_MAJOR                189
       9                 :            : 
      10                 :            : 
      11                 :            : #ifdef __KERNEL__
      12                 :            : 
      13                 :            : #include <linux/errno.h>        /* for -ENODEV */
      14                 :            : #include <linux/delay.h>  /* for mdelay() */
      15                 :            : #include <linux/interrupt.h>      /* for in_interrupt() */
      16                 :            : #include <linux/list.h>           /* for struct list_head */
      17                 :            : #include <linux/kref.h>           /* for struct kref */
      18                 :            : #include <linux/device.h> /* for struct device */
      19                 :            : #include <linux/fs.h>             /* for struct file_operations */
      20                 :            : #include <linux/completion.h>     /* for struct completion */
      21                 :            : #include <linux/sched.h>  /* for current && schedule_timeout */
      22                 :            : #include <linux/mutex.h>  /* for struct mutex */
      23                 :            : #include <linux/pm_runtime.h>     /* for runtime PM */
      24                 :            : 
      25                 :            : struct usb_device;
      26                 :            : struct usb_driver;
      27                 :            : struct wusb_dev;
      28                 :            : 
      29                 :            : /*-------------------------------------------------------------------------*/
      30                 :            : 
      31                 :            : /*
      32                 :            :  * Host-side wrappers for standard USB descriptors ... these are parsed
      33                 :            :  * from the data provided by devices.  Parsing turns them from a flat
      34                 :            :  * sequence of descriptors into a hierarchy:
      35                 :            :  *
      36                 :            :  *  - devices have one (usually) or more configs;
      37                 :            :  *  - configs have one (often) or more interfaces;
      38                 :            :  *  - interfaces have one (usually) or more settings;
      39                 :            :  *  - each interface setting has zero or (usually) more endpoints.
      40                 :            :  *  - a SuperSpeed endpoint has a companion descriptor
      41                 :            :  *
      42                 :            :  * And there might be other descriptors mixed in with those.
      43                 :            :  *
      44                 :            :  * Devices may also have class-specific or vendor-specific descriptors.
      45                 :            :  */
      46                 :            : 
      47                 :            : struct ep_device;
      48                 :            : 
      49                 :            : /**
      50                 :            :  * struct usb_host_endpoint - host-side endpoint descriptor and queue
      51                 :            :  * @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder
      52                 :            :  * @ss_ep_comp: SuperSpeed companion descriptor for this endpoint
      53                 :            :  * @urb_list: urbs queued to this endpoint; maintained by usbcore
      54                 :            :  * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH)
      55                 :            :  *      with one or more transfer descriptors (TDs) per urb
      56                 :            :  * @ep_dev: ep_device for sysfs info
      57                 :            :  * @extra: descriptors following this endpoint in the configuration
      58                 :            :  * @extralen: how many bytes of "extra" are valid
      59                 :            :  * @enabled: URBs may be submitted to this endpoint
      60                 :            :  *
      61                 :            :  * USB requests are always queued to a given endpoint, identified by a
      62                 :            :  * descriptor within an active interface in a given USB configuration.
      63                 :            :  */
      64                 :            : struct usb_host_endpoint {
      65                 :            :         struct usb_endpoint_descriptor          desc;
      66                 :            :         struct usb_ss_ep_comp_descriptor        ss_ep_comp;
      67                 :            :         struct list_head                urb_list;
      68                 :            :         void                            *hcpriv;
      69                 :            :         struct ep_device                *ep_dev;        /* For sysfs info */
      70                 :            : 
      71                 :            :         unsigned char *extra;   /* Extra descriptors */
      72                 :            :         int extralen;
      73                 :            :         int enabled;
      74                 :            : };
      75                 :            : 
      76                 :            : /* host-side wrapper for one interface setting's parsed descriptors */
      77                 :            : struct usb_host_interface {
      78                 :            :         struct usb_interface_descriptor desc;
      79                 :            : 
      80                 :            :         int extralen;
      81                 :            :         unsigned char *extra;   /* Extra descriptors */
      82                 :            : 
      83                 :            :         /* array of desc.bNumEndpoint endpoints associated with this
      84                 :            :          * interface setting.  these will be in no particular order.
      85                 :            :          */
      86                 :            :         struct usb_host_endpoint *endpoint;
      87                 :            : 
      88                 :            :         char *string;           /* iInterface string, if present */
      89                 :            : };
      90                 :            : 
      91                 :            : enum usb_interface_condition {
      92                 :            :         USB_INTERFACE_UNBOUND = 0,
      93                 :            :         USB_INTERFACE_BINDING,
      94                 :            :         USB_INTERFACE_BOUND,
      95                 :            :         USB_INTERFACE_UNBINDING,
      96                 :            : };
      97                 :            : 
      98                 :            : /**
      99                 :            :  * struct usb_interface - what usb device drivers talk to
     100                 :            :  * @altsetting: array of interface structures, one for each alternate
     101                 :            :  *      setting that may be selected.  Each one includes a set of
     102                 :            :  *      endpoint configurations.  They will be in no particular order.
     103                 :            :  * @cur_altsetting: the current altsetting.
     104                 :            :  * @num_altsetting: number of altsettings defined.
     105                 :            :  * @intf_assoc: interface association descriptor
     106                 :            :  * @minor: the minor number assigned to this interface, if this
     107                 :            :  *      interface is bound to a driver that uses the USB major number.
     108                 :            :  *      If this interface does not use the USB major, this field should
     109                 :            :  *      be unused.  The driver should set this value in the probe()
     110                 :            :  *      function of the driver, after it has been assigned a minor
     111                 :            :  *      number from the USB core by calling usb_register_dev().
     112                 :            :  * @condition: binding state of the interface: not bound, binding
     113                 :            :  *      (in probe()), bound to a driver, or unbinding (in disconnect())
     114                 :            :  * @sysfs_files_created: sysfs attributes exist
     115                 :            :  * @ep_devs_created: endpoint child pseudo-devices exist
     116                 :            :  * @unregistering: flag set when the interface is being unregistered
     117                 :            :  * @needs_remote_wakeup: flag set when the driver requires remote-wakeup
     118                 :            :  *      capability during autosuspend.
     119                 :            :  * @needs_altsetting0: flag set when a set-interface request for altsetting 0
     120                 :            :  *      has been deferred.
     121                 :            :  * @needs_binding: flag set when the driver should be re-probed or unbound
     122                 :            :  *      following a reset or suspend operation it doesn't support.
     123                 :            :  * @dev: driver model's view of this device
     124                 :            :  * @usb_dev: if an interface is bound to the USB major, this will point
     125                 :            :  *      to the sysfs representation for that device.
     126                 :            :  * @pm_usage_cnt: PM usage counter for this interface
     127                 :            :  * @reset_ws: Used for scheduling resets from atomic context.
     128                 :            :  * @reset_running: set to 1 if the interface is currently running a
     129                 :            :  *      queued reset so that usb_cancel_queued_reset() doesn't try to
     130                 :            :  *      remove from the workqueue when running inside the worker
     131                 :            :  *      thread. See __usb_queue_reset_device().
     132                 :            :  * @resetting_device: USB core reset the device, so use alt setting 0 as
     133                 :            :  *      current; needs bandwidth alloc after reset.
     134                 :            :  *
     135                 :            :  * USB device drivers attach to interfaces on a physical device.  Each
     136                 :            :  * interface encapsulates a single high level function, such as feeding
     137                 :            :  * an audio stream to a speaker or reporting a change in a volume control.
     138                 :            :  * Many USB devices only have one interface.  The protocol used to talk to
     139                 :            :  * an interface's endpoints can be defined in a usb "class" specification,
     140                 :            :  * or by a product's vendor.  The (default) control endpoint is part of
     141                 :            :  * every interface, but is never listed among the interface's descriptors.
     142                 :            :  *
     143                 :            :  * The driver that is bound to the interface can use standard driver model
     144                 :            :  * calls such as dev_get_drvdata() on the dev member of this structure.
     145                 :            :  *
     146                 :            :  * Each interface may have alternate settings.  The initial configuration
     147                 :            :  * of a device sets altsetting 0, but the device driver can change
     148                 :            :  * that setting using usb_set_interface().  Alternate settings are often
     149                 :            :  * used to control the use of periodic endpoints, such as by having
     150                 :            :  * different endpoints use different amounts of reserved USB bandwidth.
     151                 :            :  * All standards-conformant USB devices that use isochronous endpoints
     152                 :            :  * will use them in non-default settings.
     153                 :            :  *
     154                 :            :  * The USB specification says that alternate setting numbers must run from
     155                 :            :  * 0 to one less than the total number of alternate settings.  But some
     156                 :            :  * devices manage to mess this up, and the structures aren't necessarily
     157                 :            :  * stored in numerical order anyhow.  Use usb_altnum_to_altsetting() to
     158                 :            :  * look up an alternate setting in the altsetting array based on its number.
     159                 :            :  */
     160                 :            : struct usb_interface {
     161                 :            :         /* array of alternate settings for this interface,
     162                 :            :          * stored in no particular order */
     163                 :            :         struct usb_host_interface *altsetting;
     164                 :            : 
     165                 :            :         struct usb_host_interface *cur_altsetting;      /* the currently
     166                 :            :                                          * active alternate setting */
     167                 :            :         unsigned num_altsetting;        /* number of alternate settings */
     168                 :            : 
     169                 :            :         /* If there is an interface association descriptor then it will list
     170                 :            :          * the associated interfaces */
     171                 :            :         struct usb_interface_assoc_descriptor *intf_assoc;
     172                 :            : 
     173                 :            :         int minor;                      /* minor number this interface is
     174                 :            :                                          * bound to */
     175                 :            :         enum usb_interface_condition condition;         /* state of binding */
     176                 :            :         unsigned sysfs_files_created:1; /* the sysfs attributes exist */
     177                 :            :         unsigned ep_devs_created:1;     /* endpoint "devices" exist */
     178                 :            :         unsigned unregistering:1;       /* unregistration is in progress */
     179                 :            :         unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */
     180                 :            :         unsigned needs_altsetting0:1;   /* switch to altsetting 0 is pending */
     181                 :            :         unsigned needs_binding:1;       /* needs delayed unbind/rebind */
     182                 :            :         unsigned reset_running:1;
     183                 :            :         unsigned resetting_device:1;    /* true: bandwidth alloc after reset */
     184                 :            : 
     185                 :            :         struct device dev;              /* interface specific device info */
     186                 :            :         struct device *usb_dev;
     187                 :            :         atomic_t pm_usage_cnt;          /* usage counter for autosuspend */
     188                 :            :         struct work_struct reset_ws;    /* for resets in atomic context */
     189                 :            : };
     190                 :            : #define to_usb_interface(d) container_of(d, struct usb_interface, dev)
     191                 :            : 
     192                 :            : static inline void *usb_get_intfdata(struct usb_interface *intf)
     193                 :            : {
     194                 :          0 :         return dev_get_drvdata(&intf->dev);
     195                 :            : }
     196                 :            : 
     197                 :            : static inline void usb_set_intfdata(struct usb_interface *intf, void *data)
     198                 :            : {
     199                 :          0 :         dev_set_drvdata(&intf->dev, data);
     200                 :            : }
     201                 :            : 
     202                 :            : struct usb_interface *usb_get_intf(struct usb_interface *intf);
     203                 :            : void usb_put_intf(struct usb_interface *intf);
     204                 :            : 
     205                 :            : /* this maximum is arbitrary */
     206                 :            : #define USB_MAXINTERFACES       32
     207                 :            : #define USB_MAXIADS             (USB_MAXINTERFACES/2)
     208                 :            : 
     209                 :            : /**
     210                 :            :  * struct usb_interface_cache - long-term representation of a device interface
     211                 :            :  * @num_altsetting: number of altsettings defined.
     212                 :            :  * @ref: reference counter.
     213                 :            :  * @altsetting: variable-length array of interface structures, one for
     214                 :            :  *      each alternate setting that may be selected.  Each one includes a
     215                 :            :  *      set of endpoint configurations.  They will be in no particular order.
     216                 :            :  *
     217                 :            :  * These structures persist for the lifetime of a usb_device, unlike
     218                 :            :  * struct usb_interface (which persists only as long as its configuration
     219                 :            :  * is installed).  The altsetting arrays can be accessed through these
     220                 :            :  * structures at any time, permitting comparison of configurations and
     221                 :            :  * providing support for the /proc/bus/usb/devices pseudo-file.
     222                 :            :  */
     223                 :            : struct usb_interface_cache {
     224                 :            :         unsigned num_altsetting;        /* number of alternate settings */
     225                 :            :         struct kref ref;                /* reference counter */
     226                 :            : 
     227                 :            :         /* variable-length array of alternate settings for this interface,
     228                 :            :          * stored in no particular order */
     229                 :            :         struct usb_host_interface altsetting[0];
     230                 :            : };
     231                 :            : #define ref_to_usb_interface_cache(r) \
     232                 :            :                 container_of(r, struct usb_interface_cache, ref)
     233                 :            : #define altsetting_to_usb_interface_cache(a) \
     234                 :            :                 container_of(a, struct usb_interface_cache, altsetting[0])
     235                 :            : 
     236                 :            : /**
     237                 :            :  * struct usb_host_config - representation of a device's configuration
     238                 :            :  * @desc: the device's configuration descriptor.
     239                 :            :  * @string: pointer to the cached version of the iConfiguration string, if
     240                 :            :  *      present for this configuration.
     241                 :            :  * @intf_assoc: list of any interface association descriptors in this config
     242                 :            :  * @interface: array of pointers to usb_interface structures, one for each
     243                 :            :  *      interface in the configuration.  The number of interfaces is stored
     244                 :            :  *      in desc.bNumInterfaces.  These pointers are valid only while the
     245                 :            :  *      the configuration is active.
     246                 :            :  * @intf_cache: array of pointers to usb_interface_cache structures, one
     247                 :            :  *      for each interface in the configuration.  These structures exist
     248                 :            :  *      for the entire life of the device.
     249                 :            :  * @extra: pointer to buffer containing all extra descriptors associated
     250                 :            :  *      with this configuration (those preceding the first interface
     251                 :            :  *      descriptor).
     252                 :            :  * @extralen: length of the extra descriptors buffer.
     253                 :            :  *
     254                 :            :  * USB devices may have multiple configurations, but only one can be active
     255                 :            :  * at any time.  Each encapsulates a different operational environment;
     256                 :            :  * for example, a dual-speed device would have separate configurations for
     257                 :            :  * full-speed and high-speed operation.  The number of configurations
     258                 :            :  * available is stored in the device descriptor as bNumConfigurations.
     259                 :            :  *
     260                 :            :  * A configuration can contain multiple interfaces.  Each corresponds to
     261                 :            :  * a different function of the USB device, and all are available whenever
     262                 :            :  * the configuration is active.  The USB standard says that interfaces
     263                 :            :  * are supposed to be numbered from 0 to desc.bNumInterfaces-1, but a lot
     264                 :            :  * of devices get this wrong.  In addition, the interface array is not
     265                 :            :  * guaranteed to be sorted in numerical order.  Use usb_ifnum_to_if() to
     266                 :            :  * look up an interface entry based on its number.
     267                 :            :  *
     268                 :            :  * Device drivers should not attempt to activate configurations.  The choice
     269                 :            :  * of which configuration to install is a policy decision based on such
     270                 :            :  * considerations as available power, functionality provided, and the user's
     271                 :            :  * desires (expressed through userspace tools).  However, drivers can call
     272                 :            :  * usb_reset_configuration() to reinitialize the current configuration and
     273                 :            :  * all its interfaces.
     274                 :            :  */
     275                 :            : struct usb_host_config {
     276                 :            :         struct usb_config_descriptor    desc;
     277                 :            : 
     278                 :            :         char *string;           /* iConfiguration string, if present */
     279                 :            : 
     280                 :            :         /* List of any Interface Association Descriptors in this
     281                 :            :          * configuration. */
     282                 :            :         struct usb_interface_assoc_descriptor *intf_assoc[USB_MAXIADS];
     283                 :            : 
     284                 :            :         /* the interfaces associated with this configuration,
     285                 :            :          * stored in no particular order */
     286                 :            :         struct usb_interface *interface[USB_MAXINTERFACES];
     287                 :            : 
     288                 :            :         /* Interface information available even when this is not the
     289                 :            :          * active configuration */
     290                 :            :         struct usb_interface_cache *intf_cache[USB_MAXINTERFACES];
     291                 :            : 
     292                 :            :         unsigned char *extra;   /* Extra descriptors */
     293                 :            :         int extralen;
     294                 :            : };
     295                 :            : 
     296                 :            : /* USB2.0 and USB3.0 device BOS descriptor set */
     297                 :            : struct usb_host_bos {
     298                 :            :         struct usb_bos_descriptor       *desc;
     299                 :            : 
     300                 :            :         /* wireless cap descriptor is handled by wusb */
     301                 :            :         struct usb_ext_cap_descriptor   *ext_cap;
     302                 :            :         struct usb_ss_cap_descriptor    *ss_cap;
     303                 :            :         struct usb_ss_container_id_descriptor   *ss_id;
     304                 :            : };
     305                 :            : 
     306                 :            : int __usb_get_extra_descriptor(char *buffer, unsigned size,
     307                 :            :         unsigned char type, void **ptr);
     308                 :            : #define usb_get_extra_descriptor(ifpoint, type, ptr) \
     309                 :            :                                 __usb_get_extra_descriptor((ifpoint)->extra, \
     310                 :            :                                 (ifpoint)->extralen, \
     311                 :            :                                 type, (void **)ptr)
     312                 :            : 
     313                 :            : /* ----------------------------------------------------------------------- */
     314                 :            : 
     315                 :            : /* USB device number allocation bitmap */
     316                 :            : struct usb_devmap {
     317                 :            :         unsigned long devicemap[128 / (8*sizeof(unsigned long))];
     318                 :            : };
     319                 :            : 
     320                 :            : /*
     321                 :            :  * Allocated per bus (tree of devices) we have:
     322                 :            :  */
     323                 :            : struct usb_bus {
     324                 :            :         struct device *controller;      /* host/master side hardware */
     325                 :            :         int busnum;                     /* Bus number (in order of reg) */
     326                 :            :         const char *bus_name;           /* stable id (PCI slot_name etc) */
     327                 :            :         u8 uses_dma;                    /* Does the host controller use DMA? */
     328                 :            :         u8 uses_pio_for_control;        /*
     329                 :            :                                          * Does the host controller use PIO
     330                 :            :                                          * for control transfers?
     331                 :            :                                          */
     332                 :            :         u8 otg_port;                    /* 0, or number of OTG/HNP port */
     333                 :            :         unsigned is_b_host:1;           /* true during some HNP roleswitches */
     334                 :            :         unsigned b_hnp_enable:1;        /* OTG: did A-Host enable HNP? */
     335                 :            :         unsigned no_stop_on_short:1;    /*
     336                 :            :                                          * Quirk: some controllers don't stop
     337                 :            :                                          * the ep queue on a short transfer
     338                 :            :                                          * with the URB_SHORT_NOT_OK flag set.
     339                 :            :                                          */
     340                 :            :         unsigned no_sg_constraint:1;    /* no sg constraint */
     341                 :            :         unsigned sg_tablesize;          /* 0 or largest number of sg list entries */
     342                 :            : 
     343                 :            :         int devnum_next;                /* Next open device number in
     344                 :            :                                          * round-robin allocation */
     345                 :            : 
     346                 :            :         struct usb_devmap devmap;       /* device address allocation map */
     347                 :            :         struct usb_device *root_hub;    /* Root hub */
     348                 :            :         struct usb_bus *hs_companion;   /* Companion EHCI bus, if any */
     349                 :            :         struct list_head bus_list;      /* list of busses */
     350                 :            : 
     351                 :            :         int bandwidth_allocated;        /* on this bus: how much of the time
     352                 :            :                                          * reserved for periodic (intr/iso)
     353                 :            :                                          * requests is used, on average?
     354                 :            :                                          * Units: microseconds/frame.
     355                 :            :                                          * Limits: Full/low speed reserve 90%,
     356                 :            :                                          * while high speed reserves 80%.
     357                 :            :                                          */
     358                 :            :         int bandwidth_int_reqs;         /* number of Interrupt requests */
     359                 :            :         int bandwidth_isoc_reqs;        /* number of Isoc. requests */
     360                 :            : 
     361                 :            :         unsigned resuming_ports;        /* bit array: resuming root-hub ports */
     362                 :            : 
     363                 :            : #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE)
     364                 :            :         struct mon_bus *mon_bus;        /* non-null when associated */
     365                 :            :         int monitored;                  /* non-zero when monitored */
     366                 :            : #endif
     367                 :            : };
     368                 :            : 
     369                 :            : /* ----------------------------------------------------------------------- */
     370                 :            : 
     371                 :            : struct usb_tt;
     372                 :            : 
     373                 :            : enum usb_device_removable {
     374                 :            :         USB_DEVICE_REMOVABLE_UNKNOWN = 0,
     375                 :            :         USB_DEVICE_REMOVABLE,
     376                 :            :         USB_DEVICE_FIXED,
     377                 :            : };
     378                 :            : 
     379                 :            : enum usb_port_connect_type {
     380                 :            :         USB_PORT_CONNECT_TYPE_UNKNOWN = 0,
     381                 :            :         USB_PORT_CONNECT_TYPE_HOT_PLUG,
     382                 :            :         USB_PORT_CONNECT_TYPE_HARD_WIRED,
     383                 :            :         USB_PORT_NOT_USED,
     384                 :            : };
     385                 :            : 
     386                 :            : /*
     387                 :            :  * USB 2.0 Link Power Management (LPM) parameters.
     388                 :            :  */
     389                 :            : struct usb2_lpm_parameters {
     390                 :            :         /* Best effort service latency indicate how long the host will drive
     391                 :            :          * resume on an exit from L1.
     392                 :            :          */
     393                 :            :         unsigned int besl;
     394                 :            : 
     395                 :            :         /* Timeout value in microseconds for the L1 inactivity (LPM) timer.
     396                 :            :          * When the timer counts to zero, the parent hub will initiate a LPM
     397                 :            :          * transition to L1.
     398                 :            :          */
     399                 :            :         int timeout;
     400                 :            : };
     401                 :            : 
     402                 :            : /*
     403                 :            :  * USB 3.0 Link Power Management (LPM) parameters.
     404                 :            :  *
     405                 :            :  * PEL and SEL are USB 3.0 Link PM latencies for device-initiated LPM exit.
     406                 :            :  * MEL is the USB 3.0 Link PM latency for host-initiated LPM exit.
     407                 :            :  * All three are stored in nanoseconds.
     408                 :            :  */
     409                 :            : struct usb3_lpm_parameters {
     410                 :            :         /*
     411                 :            :          * Maximum exit latency (MEL) for the host to send a packet to the
     412                 :            :          * device (either a Ping for isoc endpoints, or a data packet for
     413                 :            :          * interrupt endpoints), the hubs to decode the packet, and for all hubs
     414                 :            :          * in the path to transition the links to U0.
     415                 :            :          */
     416                 :            :         unsigned int mel;
     417                 :            :         /*
     418                 :            :          * Maximum exit latency for a device-initiated LPM transition to bring
     419                 :            :          * all links into U0.  Abbreviated as "PEL" in section 9.4.12 of the USB
     420                 :            :          * 3.0 spec, with no explanation of what "P" stands for.  "Path"?
     421                 :            :          */
     422                 :            :         unsigned int pel;
     423                 :            : 
     424                 :            :         /*
     425                 :            :          * The System Exit Latency (SEL) includes PEL, and three other
     426                 :            :          * latencies.  After a device initiates a U0 transition, it will take
     427                 :            :          * some time from when the device sends the ERDY to when it will finally
     428                 :            :          * receive the data packet.  Basically, SEL should be the worse-case
     429                 :            :          * latency from when a device starts initiating a U0 transition to when
     430                 :            :          * it will get data.
     431                 :            :          */
     432                 :            :         unsigned int sel;
     433                 :            :         /*
     434                 :            :          * The idle timeout value that is currently programmed into the parent
     435                 :            :          * hub for this device.  When the timer counts to zero, the parent hub
     436                 :            :          * will initiate an LPM transition to either U1 or U2.
     437                 :            :          */
     438                 :            :         int timeout;
     439                 :            : };
     440                 :            : 
     441                 :            : /**
     442                 :            :  * struct usb_device - kernel's representation of a USB device
     443                 :            :  * @devnum: device number; address on a USB bus
     444                 :            :  * @devpath: device ID string for use in messages (e.g., /port/...)
     445                 :            :  * @route: tree topology hex string for use with xHCI
     446                 :            :  * @state: device state: configured, not attached, etc.
     447                 :            :  * @speed: device speed: high/full/low (or error)
     448                 :            :  * @tt: Transaction Translator info; used with low/full speed dev, highspeed hub
     449                 :            :  * @ttport: device port on that tt hub
     450                 :            :  * @toggle: one bit for each endpoint, with ([0] = IN, [1] = OUT) endpoints
     451                 :            :  * @parent: our hub, unless we're the root
     452                 :            :  * @bus: bus we're part of
     453                 :            :  * @ep0: endpoint 0 data (default control pipe)
     454                 :            :  * @dev: generic device interface
     455                 :            :  * @descriptor: USB device descriptor
     456                 :            :  * @bos: USB device BOS descriptor set
     457                 :            :  * @config: all of the device's configs
     458                 :            :  * @actconfig: the active configuration
     459                 :            :  * @ep_in: array of IN endpoints
     460                 :            :  * @ep_out: array of OUT endpoints
     461                 :            :  * @rawdescriptors: raw descriptors for each config
     462                 :            :  * @bus_mA: Current available from the bus
     463                 :            :  * @portnum: parent port number (origin 1)
     464                 :            :  * @level: number of USB hub ancestors
     465                 :            :  * @can_submit: URBs may be submitted
     466                 :            :  * @persist_enabled:  USB_PERSIST enabled for this device
     467                 :            :  * @have_langid: whether string_langid is valid
     468                 :            :  * @authorized: policy has said we can use it;
     469                 :            :  *      (user space) policy determines if we authorize this device to be
     470                 :            :  *      used or not. By default, wired USB devices are authorized.
     471                 :            :  *      WUSB devices are not, until we authorize them from user space.
     472                 :            :  *      FIXME -- complete doc
     473                 :            :  * @authenticated: Crypto authentication passed
     474                 :            :  * @wusb: device is Wireless USB
     475                 :            :  * @lpm_capable: device supports LPM
     476                 :            :  * @usb2_hw_lpm_capable: device can perform USB2 hardware LPM
     477                 :            :  * @usb2_hw_lpm_besl_capable: device can perform USB2 hardware BESL LPM
     478                 :            :  * @usb2_hw_lpm_enabled: USB2 hardware LPM is enabled
     479                 :            :  * @usb2_hw_lpm_allowed: Userspace allows USB 2.0 LPM to be enabled
     480                 :            :  * @usb3_lpm_enabled: USB3 hardware LPM enabled
     481                 :            :  * @string_langid: language ID for strings
     482                 :            :  * @product: iProduct string, if present (static)
     483                 :            :  * @manufacturer: iManufacturer string, if present (static)
     484                 :            :  * @serial: iSerialNumber string, if present (static)
     485                 :            :  * @filelist: usbfs files that are open to this device
     486                 :            :  * @maxchild: number of ports if hub
     487                 :            :  * @quirks: quirks of the whole device
     488                 :            :  * @urbnum: number of URBs submitted for the whole device
     489                 :            :  * @active_duration: total time device is not suspended
     490                 :            :  * @connect_time: time device was first connected
     491                 :            :  * @do_remote_wakeup:  remote wakeup should be enabled
     492                 :            :  * @reset_resume: needs reset instead of resume
     493                 :            :  * @port_is_suspended: the upstream port is suspended (L2 or U3)
     494                 :            :  * @wusb_dev: if this is a Wireless USB device, link to the WUSB
     495                 :            :  *      specific data for the device.
     496                 :            :  * @slot_id: Slot ID assigned by xHCI
     497                 :            :  * @removable: Device can be physically removed from this port
     498                 :            :  * @l1_params: best effor service latency for USB2 L1 LPM state, and L1 timeout.
     499                 :            :  * @u1_params: exit latencies for USB3 U1 LPM state, and hub-initiated timeout.
     500                 :            :  * @u2_params: exit latencies for USB3 U2 LPM state, and hub-initiated timeout.
     501                 :            :  * @lpm_disable_count: Ref count used by usb_disable_lpm() and usb_enable_lpm()
     502                 :            :  *      to keep track of the number of functions that require USB 3.0 Link Power
     503                 :            :  *      Management to be disabled for this usb_device.  This count should only
     504                 :            :  *      be manipulated by those functions, with the bandwidth_mutex is held.
     505                 :            :  *
     506                 :            :  * Notes:
     507                 :            :  * Usbcore drivers should not set usbdev->state directly.  Instead use
     508                 :            :  * usb_set_device_state().
     509                 :            :  */
     510                 :            : struct usb_device {
     511                 :            :         int             devnum;
     512                 :            :         char            devpath[16];
     513                 :            :         u32             route;
     514                 :            :         enum usb_device_state   state;
     515                 :            :         enum usb_device_speed   speed;
     516                 :            : 
     517                 :            :         struct usb_tt   *tt;
     518                 :            :         int             ttport;
     519                 :            : 
     520                 :            :         unsigned int toggle[2];
     521                 :            : 
     522                 :            :         struct usb_device *parent;
     523                 :            :         struct usb_bus *bus;
     524                 :            :         struct usb_host_endpoint ep0;
     525                 :            : 
     526                 :            :         struct device dev;
     527                 :            : 
     528                 :            :         struct usb_device_descriptor descriptor;
     529                 :            :         struct usb_host_bos *bos;
     530                 :            :         struct usb_host_config *config;
     531                 :            : 
     532                 :            :         struct usb_host_config *actconfig;
     533                 :            :         struct usb_host_endpoint *ep_in[16];
     534                 :            :         struct usb_host_endpoint *ep_out[16];
     535                 :            : 
     536                 :            :         char **rawdescriptors;
     537                 :            : 
     538                 :            :         unsigned short bus_mA;
     539                 :            :         u8 portnum;
     540                 :            :         u8 level;
     541                 :            : 
     542                 :            :         unsigned can_submit:1;
     543                 :            :         unsigned persist_enabled:1;
     544                 :            :         unsigned have_langid:1;
     545                 :            :         unsigned authorized:1;
     546                 :            :         unsigned authenticated:1;
     547                 :            :         unsigned wusb:1;
     548                 :            :         unsigned lpm_capable:1;
     549                 :            :         unsigned usb2_hw_lpm_capable:1;
     550                 :            :         unsigned usb2_hw_lpm_besl_capable:1;
     551                 :            :         unsigned usb2_hw_lpm_enabled:1;
     552                 :            :         unsigned usb2_hw_lpm_allowed:1;
     553                 :            :         unsigned usb3_lpm_enabled:1;
     554                 :            :         int string_langid;
     555                 :            : 
     556                 :            :         /* static strings from the device */
     557                 :            :         char *product;
     558                 :            :         char *manufacturer;
     559                 :            :         char *serial;
     560                 :            : 
     561                 :            :         struct list_head filelist;
     562                 :            : 
     563                 :            :         int maxchild;
     564                 :            : 
     565                 :            :         u32 quirks;
     566                 :            :         atomic_t urbnum;
     567                 :            : 
     568                 :            :         unsigned long active_duration;
     569                 :            : 
     570                 :            : #ifdef CONFIG_PM
     571                 :            :         unsigned long connect_time;
     572                 :            : 
     573                 :            :         unsigned do_remote_wakeup:1;
     574                 :            :         unsigned reset_resume:1;
     575                 :            :         unsigned port_is_suspended:1;
     576                 :            : #endif
     577                 :            :         struct wusb_dev *wusb_dev;
     578                 :            :         int slot_id;
     579                 :            :         enum usb_device_removable removable;
     580                 :            :         struct usb2_lpm_parameters l1_params;
     581                 :            :         struct usb3_lpm_parameters u1_params;
     582                 :            :         struct usb3_lpm_parameters u2_params;
     583                 :            :         unsigned lpm_disable_count;
     584                 :            : };
     585                 :            : #define to_usb_device(d) container_of(d, struct usb_device, dev)
     586                 :            : 
     587                 :            : static inline struct usb_device *interface_to_usbdev(struct usb_interface *intf)
     588                 :            : {
     589                 :            :         return to_usb_device(intf->dev.parent);
     590                 :            : }
     591                 :            : 
     592                 :            : extern struct usb_device *usb_get_dev(struct usb_device *dev);
     593                 :            : extern void usb_put_dev(struct usb_device *dev);
     594                 :            : extern struct usb_device *usb_hub_find_child(struct usb_device *hdev,
     595                 :            :         int port1);
     596                 :            : 
     597                 :            : /**
     598                 :            :  * usb_hub_for_each_child - iterate over all child devices on the hub
     599                 :            :  * @hdev:  USB device belonging to the usb hub
     600                 :            :  * @port1: portnum associated with child device
     601                 :            :  * @child: child device pointer
     602                 :            :  */
     603                 :            : #define usb_hub_for_each_child(hdev, port1, child) \
     604                 :            :         for (port1 = 1, child = usb_hub_find_child(hdev, port1); \
     605                 :            :                         port1 <= hdev->maxchild; \
     606                 :            :                         child = usb_hub_find_child(hdev, ++port1)) \
     607                 :            :                 if (!child) continue; else
     608                 :            : 
     609                 :            : /* USB device locking */
     610                 :            : #define usb_lock_device(udev)           device_lock(&(udev)->dev)
     611                 :            : #define usb_unlock_device(udev)         device_unlock(&(udev)->dev)
     612                 :            : #define usb_trylock_device(udev)        device_trylock(&(udev)->dev)
     613                 :            : extern int usb_lock_device_for_reset(struct usb_device *udev,
     614                 :            :                                      const struct usb_interface *iface);
     615                 :            : 
     616                 :            : /* USB port reset for device reinitialization */
     617                 :            : extern int usb_reset_device(struct usb_device *dev);
     618                 :            : extern void usb_queue_reset_device(struct usb_interface *dev);
     619                 :            : 
     620                 :            : #ifdef CONFIG_ACPI
     621                 :            : extern int usb_acpi_set_power_state(struct usb_device *hdev, int index,
     622                 :            :         bool enable);
     623                 :            : extern bool usb_acpi_power_manageable(struct usb_device *hdev, int index);
     624                 :            : #else
     625                 :            : static inline int usb_acpi_set_power_state(struct usb_device *hdev, int index,
     626                 :            :         bool enable) { return 0; }
     627                 :            : static inline bool usb_acpi_power_manageable(struct usb_device *hdev, int index)
     628                 :            :         { return true; }
     629                 :            : #endif
     630                 :            : 
     631                 :            : /* USB autosuspend and autoresume */
     632                 :            : #ifdef CONFIG_PM_RUNTIME
     633                 :            : extern void usb_enable_autosuspend(struct usb_device *udev);
     634                 :            : extern void usb_disable_autosuspend(struct usb_device *udev);
     635                 :            : 
     636                 :            : extern int usb_autopm_get_interface(struct usb_interface *intf);
     637                 :            : extern void usb_autopm_put_interface(struct usb_interface *intf);
     638                 :            : extern int usb_autopm_get_interface_async(struct usb_interface *intf);
     639                 :            : extern void usb_autopm_put_interface_async(struct usb_interface *intf);
     640                 :            : extern void usb_autopm_get_interface_no_resume(struct usb_interface *intf);
     641                 :            : extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf);
     642                 :            : 
     643                 :            : static inline void usb_mark_last_busy(struct usb_device *udev)
     644                 :            : {
     645                 :            :         pm_runtime_mark_last_busy(&udev->dev);
     646                 :            : }
     647                 :            : 
     648                 :            : #else
     649                 :            : 
     650                 :            : static inline int usb_enable_autosuspend(struct usb_device *udev)
     651                 :            : { return 0; }
     652                 :            : static inline int usb_disable_autosuspend(struct usb_device *udev)
     653                 :            : { return 0; }
     654                 :            : 
     655                 :            : static inline int usb_autopm_get_interface(struct usb_interface *intf)
     656                 :            : { return 0; }
     657                 :            : static inline int usb_autopm_get_interface_async(struct usb_interface *intf)
     658                 :            : { return 0; }
     659                 :            : 
     660                 :            : static inline void usb_autopm_put_interface(struct usb_interface *intf)
     661                 :            : { }
     662                 :            : static inline void usb_autopm_put_interface_async(struct usb_interface *intf)
     663                 :            : { }
     664                 :            : static inline void usb_autopm_get_interface_no_resume(
     665                 :            :                 struct usb_interface *intf)
     666                 :            : { }
     667                 :            : static inline void usb_autopm_put_interface_no_suspend(
     668                 :            :                 struct usb_interface *intf)
     669                 :            : { }
     670                 :            : static inline void usb_mark_last_busy(struct usb_device *udev)
     671                 :            : { }
     672                 :            : #endif
     673                 :            : 
     674                 :            : extern int usb_disable_lpm(struct usb_device *udev);
     675                 :            : extern void usb_enable_lpm(struct usb_device *udev);
     676                 :            : /* Same as above, but these functions lock/unlock the bandwidth_mutex. */
     677                 :            : extern int usb_unlocked_disable_lpm(struct usb_device *udev);
     678                 :            : extern void usb_unlocked_enable_lpm(struct usb_device *udev);
     679                 :            : 
     680                 :            : extern int usb_disable_ltm(struct usb_device *udev);
     681                 :            : extern void usb_enable_ltm(struct usb_device *udev);
     682                 :            : 
     683                 :            : static inline bool usb_device_supports_ltm(struct usb_device *udev)
     684                 :            : {
     685 [ #  # ][ #  # ]:          0 :         if (udev->speed != USB_SPEED_SUPER || !udev->bos || !udev->bos->ss_cap)
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     686                 :            :                 return false;
     687                 :          0 :         return udev->bos->ss_cap->bmAttributes & USB_LTM_SUPPORT;
     688                 :            : }
     689                 :            : 
     690                 :            : static inline bool usb_device_no_sg_constraint(struct usb_device *udev)
     691                 :            : {
     692                 :            :         return udev && udev->bus && udev->bus->no_sg_constraint;
     693                 :            : }
     694                 :            : 
     695                 :            : 
     696                 :            : /*-------------------------------------------------------------------------*/
     697                 :            : 
     698                 :            : /* for drivers using iso endpoints */
     699                 :            : extern int usb_get_current_frame_number(struct usb_device *usb_dev);
     700                 :            : 
     701                 :            : /* Sets up a group of bulk endpoints to support multiple stream IDs. */
     702                 :            : extern int usb_alloc_streams(struct usb_interface *interface,
     703                 :            :                 struct usb_host_endpoint **eps, unsigned int num_eps,
     704                 :            :                 unsigned int num_streams, gfp_t mem_flags);
     705                 :            : 
     706                 :            : /* Reverts a group of bulk endpoints back to not using stream IDs. */
     707                 :            : extern int usb_free_streams(struct usb_interface *interface,
     708                 :            :                 struct usb_host_endpoint **eps, unsigned int num_eps,
     709                 :            :                 gfp_t mem_flags);
     710                 :            : 
     711                 :            : /* used these for multi-interface device registration */
     712                 :            : extern int usb_driver_claim_interface(struct usb_driver *driver,
     713                 :            :                         struct usb_interface *iface, void *priv);
     714                 :            : 
     715                 :            : /**
     716                 :            :  * usb_interface_claimed - returns true iff an interface is claimed
     717                 :            :  * @iface: the interface being checked
     718                 :            :  *
     719                 :            :  * Return: %true (nonzero) iff the interface is claimed, else %false
     720                 :            :  * (zero).
     721                 :            :  *
     722                 :            :  * Note:
     723                 :            :  * Callers must own the driver model's usb bus readlock.  So driver
     724                 :            :  * probe() entries don't need extra locking, but other call contexts
     725                 :            :  * may need to explicitly claim that lock.
     726                 :            :  *
     727                 :            :  */
     728                 :            : static inline int usb_interface_claimed(struct usb_interface *iface)
     729                 :            : {
     730                 :            :         return (iface->dev.driver != NULL);
     731                 :            : }
     732                 :            : 
     733                 :            : extern void usb_driver_release_interface(struct usb_driver *driver,
     734                 :            :                         struct usb_interface *iface);
     735                 :            : const struct usb_device_id *usb_match_id(struct usb_interface *interface,
     736                 :            :                                          const struct usb_device_id *id);
     737                 :            : extern int usb_match_one_id(struct usb_interface *interface,
     738                 :            :                             const struct usb_device_id *id);
     739                 :            : 
     740                 :            : extern int usb_for_each_dev(void *data, int (*fn)(struct usb_device *, void *));
     741                 :            : extern struct usb_interface *usb_find_interface(struct usb_driver *drv,
     742                 :            :                 int minor);
     743                 :            : extern struct usb_interface *usb_ifnum_to_if(const struct usb_device *dev,
     744                 :            :                 unsigned ifnum);
     745                 :            : extern struct usb_host_interface *usb_altnum_to_altsetting(
     746                 :            :                 const struct usb_interface *intf, unsigned int altnum);
     747                 :            : extern struct usb_host_interface *usb_find_alt_setting(
     748                 :            :                 struct usb_host_config *config,
     749                 :            :                 unsigned int iface_num,
     750                 :            :                 unsigned int alt_num);
     751                 :            : 
     752                 :            : 
     753                 :            : /**
     754                 :            :  * usb_make_path - returns stable device path in the usb tree
     755                 :            :  * @dev: the device whose path is being constructed
     756                 :            :  * @buf: where to put the string
     757                 :            :  * @size: how big is "buf"?
     758                 :            :  *
     759                 :            :  * Return: Length of the string (> 0) or negative if size was too small.
     760                 :            :  *
     761                 :            :  * Note:
     762                 :            :  * This identifier is intended to be "stable", reflecting physical paths in
     763                 :            :  * hardware such as physical bus addresses for host controllers or ports on
     764                 :            :  * USB hubs.  That makes it stay the same until systems are physically
     765                 :            :  * reconfigured, by re-cabling a tree of USB devices or by moving USB host
     766                 :            :  * controllers.  Adding and removing devices, including virtual root hubs
     767                 :            :  * in host controller driver modules, does not change these path identifiers;
     768                 :            :  * neither does rebooting or re-enumerating.  These are more useful identifiers
     769                 :            :  * than changeable ("unstable") ones like bus numbers or device addresses.
     770                 :            :  *
     771                 :            :  * With a partial exception for devices connected to USB 2.0 root hubs, these
     772                 :            :  * identifiers are also predictable.  So long as the device tree isn't changed,
     773                 :            :  * plugging any USB device into a given hub port always gives it the same path.
     774                 :            :  * Because of the use of "companion" controllers, devices connected to ports on
     775                 :            :  * USB 2.0 root hubs (EHCI host controllers) will get one path ID if they are
     776                 :            :  * high speed, and a different one if they are full or low speed.
     777                 :            :  */
     778                 :            : static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size)
     779                 :            : {
     780                 :            :         int actual;
     781                 :          0 :         actual = snprintf(buf, size, "usb-%s-%s", dev->bus->bus_name,
     782                 :          0 :                           dev->devpath);
     783                 :            :         return (actual >= (int)size) ? -1 : actual;
     784                 :            : }
     785                 :            : 
     786                 :            : /*-------------------------------------------------------------------------*/
     787                 :            : 
     788                 :            : #define USB_DEVICE_ID_MATCH_DEVICE \
     789                 :            :                 (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)
     790                 :            : #define USB_DEVICE_ID_MATCH_DEV_RANGE \
     791                 :            :                 (USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI)
     792                 :            : #define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION \
     793                 :            :                 (USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE)
     794                 :            : #define USB_DEVICE_ID_MATCH_DEV_INFO \
     795                 :            :                 (USB_DEVICE_ID_MATCH_DEV_CLASS | \
     796                 :            :                 USB_DEVICE_ID_MATCH_DEV_SUBCLASS | \
     797                 :            :                 USB_DEVICE_ID_MATCH_DEV_PROTOCOL)
     798                 :            : #define USB_DEVICE_ID_MATCH_INT_INFO \
     799                 :            :                 (USB_DEVICE_ID_MATCH_INT_CLASS | \
     800                 :            :                 USB_DEVICE_ID_MATCH_INT_SUBCLASS | \
     801                 :            :                 USB_DEVICE_ID_MATCH_INT_PROTOCOL)
     802                 :            : 
     803                 :            : /**
     804                 :            :  * USB_DEVICE - macro used to describe a specific usb device
     805                 :            :  * @vend: the 16 bit USB Vendor ID
     806                 :            :  * @prod: the 16 bit USB Product ID
     807                 :            :  *
     808                 :            :  * This macro is used to create a struct usb_device_id that matches a
     809                 :            :  * specific device.
     810                 :            :  */
     811                 :            : #define USB_DEVICE(vend, prod) \
     812                 :            :         .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \
     813                 :            :         .idVendor = (vend), \
     814                 :            :         .idProduct = (prod)
     815                 :            : /**
     816                 :            :  * USB_DEVICE_VER - describe a specific usb device with a version range
     817                 :            :  * @vend: the 16 bit USB Vendor ID
     818                 :            :  * @prod: the 16 bit USB Product ID
     819                 :            :  * @lo: the bcdDevice_lo value
     820                 :            :  * @hi: the bcdDevice_hi value
     821                 :            :  *
     822                 :            :  * This macro is used to create a struct usb_device_id that matches a
     823                 :            :  * specific device, with a version range.
     824                 :            :  */
     825                 :            : #define USB_DEVICE_VER(vend, prod, lo, hi) \
     826                 :            :         .match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, \
     827                 :            :         .idVendor = (vend), \
     828                 :            :         .idProduct = (prod), \
     829                 :            :         .bcdDevice_lo = (lo), \
     830                 :            :         .bcdDevice_hi = (hi)
     831                 :            : 
     832                 :            : /**
     833                 :            :  * USB_DEVICE_INTERFACE_CLASS - describe a usb device with a specific interface class
     834                 :            :  * @vend: the 16 bit USB Vendor ID
     835                 :            :  * @prod: the 16 bit USB Product ID
     836                 :            :  * @cl: bInterfaceClass value
     837                 :            :  *
     838                 :            :  * This macro is used to create a struct usb_device_id that matches a
     839                 :            :  * specific interface class of devices.
     840                 :            :  */
     841                 :            : #define USB_DEVICE_INTERFACE_CLASS(vend, prod, cl) \
     842                 :            :         .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
     843                 :            :                        USB_DEVICE_ID_MATCH_INT_CLASS, \
     844                 :            :         .idVendor = (vend), \
     845                 :            :         .idProduct = (prod), \
     846                 :            :         .bInterfaceClass = (cl)
     847                 :            : 
     848                 :            : /**
     849                 :            :  * USB_DEVICE_INTERFACE_PROTOCOL - describe a usb device with a specific interface protocol
     850                 :            :  * @vend: the 16 bit USB Vendor ID
     851                 :            :  * @prod: the 16 bit USB Product ID
     852                 :            :  * @pr: bInterfaceProtocol value
     853                 :            :  *
     854                 :            :  * This macro is used to create a struct usb_device_id that matches a
     855                 :            :  * specific interface protocol of devices.
     856                 :            :  */
     857                 :            : #define USB_DEVICE_INTERFACE_PROTOCOL(vend, prod, pr) \
     858                 :            :         .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
     859                 :            :                        USB_DEVICE_ID_MATCH_INT_PROTOCOL, \
     860                 :            :         .idVendor = (vend), \
     861                 :            :         .idProduct = (prod), \
     862                 :            :         .bInterfaceProtocol = (pr)
     863                 :            : 
     864                 :            : /**
     865                 :            :  * USB_DEVICE_INTERFACE_NUMBER - describe a usb device with a specific interface number
     866                 :            :  * @vend: the 16 bit USB Vendor ID
     867                 :            :  * @prod: the 16 bit USB Product ID
     868                 :            :  * @num: bInterfaceNumber value
     869                 :            :  *
     870                 :            :  * This macro is used to create a struct usb_device_id that matches a
     871                 :            :  * specific interface number of devices.
     872                 :            :  */
     873                 :            : #define USB_DEVICE_INTERFACE_NUMBER(vend, prod, num) \
     874                 :            :         .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
     875                 :            :                        USB_DEVICE_ID_MATCH_INT_NUMBER, \
     876                 :            :         .idVendor = (vend), \
     877                 :            :         .idProduct = (prod), \
     878                 :            :         .bInterfaceNumber = (num)
     879                 :            : 
     880                 :            : /**
     881                 :            :  * USB_DEVICE_INFO - macro used to describe a class of usb devices
     882                 :            :  * @cl: bDeviceClass value
     883                 :            :  * @sc: bDeviceSubClass value
     884                 :            :  * @pr: bDeviceProtocol value
     885                 :            :  *
     886                 :            :  * This macro is used to create a struct usb_device_id that matches a
     887                 :            :  * specific class of devices.
     888                 :            :  */
     889                 :            : #define USB_DEVICE_INFO(cl, sc, pr) \
     890                 :            :         .match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, \
     891                 :            :         .bDeviceClass = (cl), \
     892                 :            :         .bDeviceSubClass = (sc), \
     893                 :            :         .bDeviceProtocol = (pr)
     894                 :            : 
     895                 :            : /**
     896                 :            :  * USB_INTERFACE_INFO - macro used to describe a class of usb interfaces
     897                 :            :  * @cl: bInterfaceClass value
     898                 :            :  * @sc: bInterfaceSubClass value
     899                 :            :  * @pr: bInterfaceProtocol value
     900                 :            :  *
     901                 :            :  * This macro is used to create a struct usb_device_id that matches a
     902                 :            :  * specific class of interfaces.
     903                 :            :  */
     904                 :            : #define USB_INTERFACE_INFO(cl, sc, pr) \
     905                 :            :         .match_flags = USB_DEVICE_ID_MATCH_INT_INFO, \
     906                 :            :         .bInterfaceClass = (cl), \
     907                 :            :         .bInterfaceSubClass = (sc), \
     908                 :            :         .bInterfaceProtocol = (pr)
     909                 :            : 
     910                 :            : /**
     911                 :            :  * USB_DEVICE_AND_INTERFACE_INFO - describe a specific usb device with a class of usb interfaces
     912                 :            :  * @vend: the 16 bit USB Vendor ID
     913                 :            :  * @prod: the 16 bit USB Product ID
     914                 :            :  * @cl: bInterfaceClass value
     915                 :            :  * @sc: bInterfaceSubClass value
     916                 :            :  * @pr: bInterfaceProtocol value
     917                 :            :  *
     918                 :            :  * This macro is used to create a struct usb_device_id that matches a
     919                 :            :  * specific device with a specific class of interfaces.
     920                 :            :  *
     921                 :            :  * This is especially useful when explicitly matching devices that have
     922                 :            :  * vendor specific bDeviceClass values, but standards-compliant interfaces.
     923                 :            :  */
     924                 :            : #define USB_DEVICE_AND_INTERFACE_INFO(vend, prod, cl, sc, pr) \
     925                 :            :         .match_flags = USB_DEVICE_ID_MATCH_INT_INFO \
     926                 :            :                 | USB_DEVICE_ID_MATCH_DEVICE, \
     927                 :            :         .idVendor = (vend), \
     928                 :            :         .idProduct = (prod), \
     929                 :            :         .bInterfaceClass = (cl), \
     930                 :            :         .bInterfaceSubClass = (sc), \
     931                 :            :         .bInterfaceProtocol = (pr)
     932                 :            : 
     933                 :            : /**
     934                 :            :  * USB_VENDOR_AND_INTERFACE_INFO - describe a specific usb vendor with a class of usb interfaces
     935                 :            :  * @vend: the 16 bit USB Vendor ID
     936                 :            :  * @cl: bInterfaceClass value
     937                 :            :  * @sc: bInterfaceSubClass value
     938                 :            :  * @pr: bInterfaceProtocol value
     939                 :            :  *
     940                 :            :  * This macro is used to create a struct usb_device_id that matches a
     941                 :            :  * specific vendor with a specific class of interfaces.
     942                 :            :  *
     943                 :            :  * This is especially useful when explicitly matching devices that have
     944                 :            :  * vendor specific bDeviceClass values, but standards-compliant interfaces.
     945                 :            :  */
     946                 :            : #define USB_VENDOR_AND_INTERFACE_INFO(vend, cl, sc, pr) \
     947                 :            :         .match_flags = USB_DEVICE_ID_MATCH_INT_INFO \
     948                 :            :                 | USB_DEVICE_ID_MATCH_VENDOR, \
     949                 :            :         .idVendor = (vend), \
     950                 :            :         .bInterfaceClass = (cl), \
     951                 :            :         .bInterfaceSubClass = (sc), \
     952                 :            :         .bInterfaceProtocol = (pr)
     953                 :            : 
     954                 :            : /* ----------------------------------------------------------------------- */
     955                 :            : 
     956                 :            : /* Stuff for dynamic usb ids */
     957                 :            : struct usb_dynids {
     958                 :            :         spinlock_t lock;
     959                 :            :         struct list_head list;
     960                 :            : };
     961                 :            : 
     962                 :            : struct usb_dynid {
     963                 :            :         struct list_head node;
     964                 :            :         struct usb_device_id id;
     965                 :            : };
     966                 :            : 
     967                 :            : extern ssize_t usb_store_new_id(struct usb_dynids *dynids,
     968                 :            :                                 struct device_driver *driver,
     969                 :            :                                 const char *buf, size_t count);
     970                 :            : 
     971                 :            : extern ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf);
     972                 :            : 
     973                 :            : /**
     974                 :            :  * struct usbdrv_wrap - wrapper for driver-model structure
     975                 :            :  * @driver: The driver-model core driver structure.
     976                 :            :  * @for_devices: Non-zero for device drivers, 0 for interface drivers.
     977                 :            :  */
     978                 :            : struct usbdrv_wrap {
     979                 :            :         struct device_driver driver;
     980                 :            :         int for_devices;
     981                 :            : };
     982                 :            : 
     983                 :            : /**
     984                 :            :  * struct usb_driver - identifies USB interface driver to usbcore
     985                 :            :  * @name: The driver name should be unique among USB drivers,
     986                 :            :  *      and should normally be the same as the module name.
     987                 :            :  * @probe: Called to see if the driver is willing to manage a particular
     988                 :            :  *      interface on a device.  If it is, probe returns zero and uses
     989                 :            :  *      usb_set_intfdata() to associate driver-specific data with the
     990                 :            :  *      interface.  It may also use usb_set_interface() to specify the
     991                 :            :  *      appropriate altsetting.  If unwilling to manage the interface,
     992                 :            :  *      return -ENODEV, if genuine IO errors occurred, an appropriate
     993                 :            :  *      negative errno value.
     994                 :            :  * @disconnect: Called when the interface is no longer accessible, usually
     995                 :            :  *      because its device has been (or is being) disconnected or the
     996                 :            :  *      driver module is being unloaded.
     997                 :            :  * @unlocked_ioctl: Used for drivers that want to talk to userspace through
     998                 :            :  *      the "usbfs" filesystem.  This lets devices provide ways to
     999                 :            :  *      expose information to user space regardless of where they
    1000                 :            :  *      do (or don't) show up otherwise in the filesystem.
    1001                 :            :  * @suspend: Called when the device is going to be suspended by the
    1002                 :            :  *      system either from system sleep or runtime suspend context. The
    1003                 :            :  *      return value will be ignored in system sleep context, so do NOT
    1004                 :            :  *      try to continue using the device if suspend fails in this case.
    1005                 :            :  *      Instead, let the resume or reset-resume routine recover from
    1006                 :            :  *      the failure.
    1007                 :            :  * @resume: Called when the device is being resumed by the system.
    1008                 :            :  * @reset_resume: Called when the suspended device has been reset instead
    1009                 :            :  *      of being resumed.
    1010                 :            :  * @pre_reset: Called by usb_reset_device() when the device is about to be
    1011                 :            :  *      reset.  This routine must not return until the driver has no active
    1012                 :            :  *      URBs for the device, and no more URBs may be submitted until the
    1013                 :            :  *      post_reset method is called.
    1014                 :            :  * @post_reset: Called by usb_reset_device() after the device
    1015                 :            :  *      has been reset
    1016                 :            :  * @id_table: USB drivers use ID table to support hotplugging.
    1017                 :            :  *      Export this with MODULE_DEVICE_TABLE(usb,...).  This must be set
    1018                 :            :  *      or your driver's probe function will never get called.
    1019                 :            :  * @dynids: used internally to hold the list of dynamically added device
    1020                 :            :  *      ids for this driver.
    1021                 :            :  * @drvwrap: Driver-model core structure wrapper.
    1022                 :            :  * @no_dynamic_id: if set to 1, the USB core will not allow dynamic ids to be
    1023                 :            :  *      added to this driver by preventing the sysfs file from being created.
    1024                 :            :  * @supports_autosuspend: if set to 0, the USB core will not allow autosuspend
    1025                 :            :  *      for interfaces bound to this driver.
    1026                 :            :  * @soft_unbind: if set to 1, the USB core will not kill URBs and disable
    1027                 :            :  *      endpoints before calling the driver's disconnect method.
    1028                 :            :  * @disable_hub_initiated_lpm: if set to 0, the USB core will not allow hubs
    1029                 :            :  *      to initiate lower power link state transitions when an idle timeout
    1030                 :            :  *      occurs.  Device-initiated USB 3.0 link PM will still be allowed.
    1031                 :            :  *
    1032                 :            :  * USB interface drivers must provide a name, probe() and disconnect()
    1033                 :            :  * methods, and an id_table.  Other driver fields are optional.
    1034                 :            :  *
    1035                 :            :  * The id_table is used in hotplugging.  It holds a set of descriptors,
    1036                 :            :  * and specialized data may be associated with each entry.  That table
    1037                 :            :  * is used by both user and kernel mode hotplugging support.
    1038                 :            :  *
    1039                 :            :  * The probe() and disconnect() methods are called in a context where
    1040                 :            :  * they can sleep, but they should avoid abusing the privilege.  Most
    1041                 :            :  * work to connect to a device should be done when the device is opened,
    1042                 :            :  * and undone at the last close.  The disconnect code needs to address
    1043                 :            :  * concurrency issues with respect to open() and close() methods, as
    1044                 :            :  * well as forcing all pending I/O requests to complete (by unlinking
    1045                 :            :  * them as necessary, and blocking until the unlinks complete).
    1046                 :            :  */
    1047                 :            : struct usb_driver {
    1048                 :            :         const char *name;
    1049                 :            : 
    1050                 :            :         int (*probe) (struct usb_interface *intf,
    1051                 :            :                       const struct usb_device_id *id);
    1052                 :            : 
    1053                 :            :         void (*disconnect) (struct usb_interface *intf);
    1054                 :            : 
    1055                 :            :         int (*unlocked_ioctl) (struct usb_interface *intf, unsigned int code,
    1056                 :            :                         void *buf);
    1057                 :            : 
    1058                 :            :         int (*suspend) (struct usb_interface *intf, pm_message_t message);
    1059                 :            :         int (*resume) (struct usb_interface *intf);
    1060                 :            :         int (*reset_resume)(struct usb_interface *intf);
    1061                 :            : 
    1062                 :            :         int (*pre_reset)(struct usb_interface *intf);
    1063                 :            :         int (*post_reset)(struct usb_interface *intf);
    1064                 :            : 
    1065                 :            :         const struct usb_device_id *id_table;
    1066                 :            : 
    1067                 :            :         struct usb_dynids dynids;
    1068                 :            :         struct usbdrv_wrap drvwrap;
    1069                 :            :         unsigned int no_dynamic_id:1;
    1070                 :            :         unsigned int supports_autosuspend:1;
    1071                 :            :         unsigned int disable_hub_initiated_lpm:1;
    1072                 :            :         unsigned int soft_unbind:1;
    1073                 :            : };
    1074                 :            : #define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver)
    1075                 :            : 
    1076                 :            : /**
    1077                 :            :  * struct usb_device_driver - identifies USB device driver to usbcore
    1078                 :            :  * @name: The driver name should be unique among USB drivers,
    1079                 :            :  *      and should normally be the same as the module name.
    1080                 :            :  * @probe: Called to see if the driver is willing to manage a particular
    1081                 :            :  *      device.  If it is, probe returns zero and uses dev_set_drvdata()
    1082                 :            :  *      to associate driver-specific data with the device.  If unwilling
    1083                 :            :  *      to manage the device, return a negative errno value.
    1084                 :            :  * @disconnect: Called when the device is no longer accessible, usually
    1085                 :            :  *      because it has been (or is being) disconnected or the driver's
    1086                 :            :  *      module is being unloaded.
    1087                 :            :  * @suspend: Called when the device is going to be suspended by the system.
    1088                 :            :  * @resume: Called when the device is being resumed by the system.
    1089                 :            :  * @drvwrap: Driver-model core structure wrapper.
    1090                 :            :  * @supports_autosuspend: if set to 0, the USB core will not allow autosuspend
    1091                 :            :  *      for devices bound to this driver.
    1092                 :            :  *
    1093                 :            :  * USB drivers must provide all the fields listed above except drvwrap.
    1094                 :            :  */
    1095                 :            : struct usb_device_driver {
    1096                 :            :         const char *name;
    1097                 :            : 
    1098                 :            :         int (*probe) (struct usb_device *udev);
    1099                 :            :         void (*disconnect) (struct usb_device *udev);
    1100                 :            : 
    1101                 :            :         int (*suspend) (struct usb_device *udev, pm_message_t message);
    1102                 :            :         int (*resume) (struct usb_device *udev, pm_message_t message);
    1103                 :            :         struct usbdrv_wrap drvwrap;
    1104                 :            :         unsigned int supports_autosuspend:1;
    1105                 :            : };
    1106                 :            : #define to_usb_device_driver(d) container_of(d, struct usb_device_driver, \
    1107                 :            :                 drvwrap.driver)
    1108                 :            : 
    1109                 :            : extern struct bus_type usb_bus_type;
    1110                 :            : 
    1111                 :            : /**
    1112                 :            :  * struct usb_class_driver - identifies a USB driver that wants to use the USB major number
    1113                 :            :  * @name: the usb class device name for this driver.  Will show up in sysfs.
    1114                 :            :  * @devnode: Callback to provide a naming hint for a possible
    1115                 :            :  *      device node to create.
    1116                 :            :  * @fops: pointer to the struct file_operations of this driver.
    1117                 :            :  * @minor_base: the start of the minor range for this driver.
    1118                 :            :  *
    1119                 :            :  * This structure is used for the usb_register_dev() and
    1120                 :            :  * usb_unregister_dev() functions, to consolidate a number of the
    1121                 :            :  * parameters used for them.
    1122                 :            :  */
    1123                 :            : struct usb_class_driver {
    1124                 :            :         char *name;
    1125                 :            :         char *(*devnode)(struct device *dev, umode_t *mode);
    1126                 :            :         const struct file_operations *fops;
    1127                 :            :         int minor_base;
    1128                 :            : };
    1129                 :            : 
    1130                 :            : /*
    1131                 :            :  * use these in module_init()/module_exit()
    1132                 :            :  * and don't forget MODULE_DEVICE_TABLE(usb, ...)
    1133                 :            :  */
    1134                 :            : extern int usb_register_driver(struct usb_driver *, struct module *,
    1135                 :            :                                const char *);
    1136                 :            : 
    1137                 :            : /* use a define to avoid include chaining to get THIS_MODULE & friends */
    1138                 :            : #define usb_register(driver) \
    1139                 :            :         usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
    1140                 :            : 
    1141                 :            : extern void usb_deregister(struct usb_driver *);
    1142                 :            : 
    1143                 :            : /**
    1144                 :            :  * module_usb_driver() - Helper macro for registering a USB driver
    1145                 :            :  * @__usb_driver: usb_driver struct
    1146                 :            :  *
    1147                 :            :  * Helper macro for USB drivers which do not do anything special in module
    1148                 :            :  * init/exit. This eliminates a lot of boilerplate. Each module may only
    1149                 :            :  * use this macro once, and calling it replaces module_init() and module_exit()
    1150                 :            :  */
    1151                 :            : #define module_usb_driver(__usb_driver) \
    1152                 :            :         module_driver(__usb_driver, usb_register, \
    1153                 :            :                        usb_deregister)
    1154                 :            : 
    1155                 :            : extern int usb_register_device_driver(struct usb_device_driver *,
    1156                 :            :                         struct module *);
    1157                 :            : extern void usb_deregister_device_driver(struct usb_device_driver *);
    1158                 :            : 
    1159                 :            : extern int usb_register_dev(struct usb_interface *intf,
    1160                 :            :                             struct usb_class_driver *class_driver);
    1161                 :            : extern void usb_deregister_dev(struct usb_interface *intf,
    1162                 :            :                                struct usb_class_driver *class_driver);
    1163                 :            : 
    1164                 :            : extern int usb_disabled(void);
    1165                 :            : 
    1166                 :            : /* ----------------------------------------------------------------------- */
    1167                 :            : 
    1168                 :            : /*
    1169                 :            :  * URB support, for asynchronous request completions
    1170                 :            :  */
    1171                 :            : 
    1172                 :            : /*
    1173                 :            :  * urb->transfer_flags:
    1174                 :            :  *
    1175                 :            :  * Note: URB_DIR_IN/OUT is automatically set in usb_submit_urb().
    1176                 :            :  */
    1177                 :            : #define URB_SHORT_NOT_OK        0x0001  /* report short reads as errors */
    1178                 :            : #define URB_ISO_ASAP            0x0002  /* iso-only; use the first unexpired
    1179                 :            :                                          * slot in the schedule */
    1180                 :            : #define URB_NO_TRANSFER_DMA_MAP 0x0004  /* urb->transfer_dma valid on submit */
    1181                 :            : #define URB_NO_FSBR             0x0020  /* UHCI-specific */
    1182                 :            : #define URB_ZERO_PACKET         0x0040  /* Finish bulk OUT with short packet */
    1183                 :            : #define URB_NO_INTERRUPT        0x0080  /* HINT: no non-error interrupt
    1184                 :            :                                          * needed */
    1185                 :            : #define URB_FREE_BUFFER         0x0100  /* Free transfer buffer with the URB */
    1186                 :            : 
    1187                 :            : /* The following flags are used internally by usbcore and HCDs */
    1188                 :            : #define URB_DIR_IN              0x0200  /* Transfer from device to host */
    1189                 :            : #define URB_DIR_OUT             0
    1190                 :            : #define URB_DIR_MASK            URB_DIR_IN
    1191                 :            : 
    1192                 :            : #define URB_DMA_MAP_SINGLE      0x00010000      /* Non-scatter-gather mapping */
    1193                 :            : #define URB_DMA_MAP_PAGE        0x00020000      /* HCD-unsupported S-G */
    1194                 :            : #define URB_DMA_MAP_SG          0x00040000      /* HCD-supported S-G */
    1195                 :            : #define URB_MAP_LOCAL           0x00080000      /* HCD-local-memory mapping */
    1196                 :            : #define URB_SETUP_MAP_SINGLE    0x00100000      /* Setup packet DMA mapped */
    1197                 :            : #define URB_SETUP_MAP_LOCAL     0x00200000      /* HCD-local setup packet */
    1198                 :            : #define URB_DMA_SG_COMBINED     0x00400000      /* S-G entries were combined */
    1199                 :            : #define URB_ALIGNED_TEMP_BUFFER 0x00800000      /* Temp buffer was alloc'd */
    1200                 :            : 
    1201                 :            : struct usb_iso_packet_descriptor {
    1202                 :            :         unsigned int offset;
    1203                 :            :         unsigned int length;            /* expected length */
    1204                 :            :         unsigned int actual_length;
    1205                 :            :         int status;
    1206                 :            : };
    1207                 :            : 
    1208                 :            : struct urb;
    1209                 :            : 
    1210                 :            : struct usb_anchor {
    1211                 :            :         struct list_head urb_list;
    1212                 :            :         wait_queue_head_t wait;
    1213                 :            :         spinlock_t lock;
    1214                 :            :         atomic_t suspend_wakeups;
    1215                 :            :         unsigned int poisoned:1;
    1216                 :            : };
    1217                 :            : 
    1218                 :            : static inline void init_usb_anchor(struct usb_anchor *anchor)
    1219                 :            : {
    1220                 :            :         memset(anchor, 0, sizeof(*anchor));
    1221                 :            :         INIT_LIST_HEAD(&anchor->urb_list);
    1222                 :            :         init_waitqueue_head(&anchor->wait);
    1223                 :            :         spin_lock_init(&anchor->lock);
    1224                 :            : }
    1225                 :            : 
    1226                 :            : typedef void (*usb_complete_t)(struct urb *);
    1227                 :            : 
    1228                 :            : /**
    1229                 :            :  * struct urb - USB Request Block
    1230                 :            :  * @urb_list: For use by current owner of the URB.
    1231                 :            :  * @anchor_list: membership in the list of an anchor
    1232                 :            :  * @anchor: to anchor URBs to a common mooring
    1233                 :            :  * @ep: Points to the endpoint's data structure.  Will eventually
    1234                 :            :  *      replace @pipe.
    1235                 :            :  * @pipe: Holds endpoint number, direction, type, and more.
    1236                 :            :  *      Create these values with the eight macros available;
    1237                 :            :  *      usb_{snd,rcv}TYPEpipe(dev,endpoint), where the TYPE is "ctrl"
    1238                 :            :  *      (control), "bulk", "int" (interrupt), or "iso" (isochronous).
    1239                 :            :  *      For example usb_sndbulkpipe() or usb_rcvintpipe().  Endpoint
    1240                 :            :  *      numbers range from zero to fifteen.  Note that "in" endpoint two
    1241                 :            :  *      is a different endpoint (and pipe) from "out" endpoint two.
    1242                 :            :  *      The current configuration controls the existence, type, and
    1243                 :            :  *      maximum packet size of any given endpoint.
    1244                 :            :  * @stream_id: the endpoint's stream ID for bulk streams
    1245                 :            :  * @dev: Identifies the USB device to perform the request.
    1246                 :            :  * @status: This is read in non-iso completion functions to get the
    1247                 :            :  *      status of the particular request.  ISO requests only use it
    1248                 :            :  *      to tell whether the URB was unlinked; detailed status for
    1249                 :            :  *      each frame is in the fields of the iso_frame-desc.
    1250                 :            :  * @transfer_flags: A variety of flags may be used to affect how URB
    1251                 :            :  *      submission, unlinking, or operation are handled.  Different
    1252                 :            :  *      kinds of URB can use different flags.
    1253                 :            :  * @transfer_buffer:  This identifies the buffer to (or from) which the I/O
    1254                 :            :  *      request will be performed unless URB_NO_TRANSFER_DMA_MAP is set
    1255                 :            :  *      (however, do not leave garbage in transfer_buffer even then).
    1256                 :            :  *      This buffer must be suitable for DMA; allocate it with
    1257                 :            :  *      kmalloc() or equivalent.  For transfers to "in" endpoints, contents
    1258                 :            :  *      of this buffer will be modified.  This buffer is used for the data
    1259                 :            :  *      stage of control transfers.
    1260                 :            :  * @transfer_dma: When transfer_flags includes URB_NO_TRANSFER_DMA_MAP,
    1261                 :            :  *      the device driver is saying that it provided this DMA address,
    1262                 :            :  *      which the host controller driver should use in preference to the
    1263                 :            :  *      transfer_buffer.
    1264                 :            :  * @sg: scatter gather buffer list, the buffer size of each element in
    1265                 :            :  *      the list (except the last) must be divisible by the endpoint's
    1266                 :            :  *      max packet size if no_sg_constraint isn't set in 'struct usb_bus'
    1267                 :            :  *      (FIXME: scatter-gather under xHCI is broken for periodic transfers.
    1268                 :            :  *      Do not use urb->sg for interrupt endpoints for now, only bulk.)
    1269                 :            :  * @num_mapped_sgs: (internal) number of mapped sg entries
    1270                 :            :  * @num_sgs: number of entries in the sg list
    1271                 :            :  * @transfer_buffer_length: How big is transfer_buffer.  The transfer may
    1272                 :            :  *      be broken up into chunks according to the current maximum packet
    1273                 :            :  *      size for the endpoint, which is a function of the configuration
    1274                 :            :  *      and is encoded in the pipe.  When the length is zero, neither
    1275                 :            :  *      transfer_buffer nor transfer_dma is used.
    1276                 :            :  * @actual_length: This is read in non-iso completion functions, and
    1277                 :            :  *      it tells how many bytes (out of transfer_buffer_length) were
    1278                 :            :  *      transferred.  It will normally be the same as requested, unless
    1279                 :            :  *      either an error was reported or a short read was performed.
    1280                 :            :  *      The URB_SHORT_NOT_OK transfer flag may be used to make such
    1281                 :            :  *      short reads be reported as errors.
    1282                 :            :  * @setup_packet: Only used for control transfers, this points to eight bytes
    1283                 :            :  *      of setup data.  Control transfers always start by sending this data
    1284                 :            :  *      to the device.  Then transfer_buffer is read or written, if needed.
    1285                 :            :  * @setup_dma: DMA pointer for the setup packet.  The caller must not use
    1286                 :            :  *      this field; setup_packet must point to a valid buffer.
    1287                 :            :  * @start_frame: Returns the initial frame for isochronous transfers.
    1288                 :            :  * @number_of_packets: Lists the number of ISO transfer buffers.
    1289                 :            :  * @interval: Specifies the polling interval for interrupt or isochronous
    1290                 :            :  *      transfers.  The units are frames (milliseconds) for full and low
    1291                 :            :  *      speed devices, and microframes (1/8 millisecond) for highspeed
    1292                 :            :  *      and SuperSpeed devices.
    1293                 :            :  * @error_count: Returns the number of ISO transfers that reported errors.
    1294                 :            :  * @context: For use in completion functions.  This normally points to
    1295                 :            :  *      request-specific driver context.
    1296                 :            :  * @complete: Completion handler. This URB is passed as the parameter to the
    1297                 :            :  *      completion function.  The completion function may then do what
    1298                 :            :  *      it likes with the URB, including resubmitting or freeing it.
    1299                 :            :  * @iso_frame_desc: Used to provide arrays of ISO transfer buffers and to
    1300                 :            :  *      collect the transfer status for each buffer.
    1301                 :            :  *
    1302                 :            :  * This structure identifies USB transfer requests.  URBs must be allocated by
    1303                 :            :  * calling usb_alloc_urb() and freed with a call to usb_free_urb().
    1304                 :            :  * Initialization may be done using various usb_fill_*_urb() functions.  URBs
    1305                 :            :  * are submitted using usb_submit_urb(), and pending requests may be canceled
    1306                 :            :  * using usb_unlink_urb() or usb_kill_urb().
    1307                 :            :  *
    1308                 :            :  * Data Transfer Buffers:
    1309                 :            :  *
    1310                 :            :  * Normally drivers provide I/O buffers allocated with kmalloc() or otherwise
    1311                 :            :  * taken from the general page pool.  That is provided by transfer_buffer
    1312                 :            :  * (control requests also use setup_packet), and host controller drivers
    1313                 :            :  * perform a dma mapping (and unmapping) for each buffer transferred.  Those
    1314                 :            :  * mapping operations can be expensive on some platforms (perhaps using a dma
    1315                 :            :  * bounce buffer or talking to an IOMMU),
    1316                 :            :  * although they're cheap on commodity x86 and ppc hardware.
    1317                 :            :  *
    1318                 :            :  * Alternatively, drivers may pass the URB_NO_TRANSFER_DMA_MAP transfer flag,
    1319                 :            :  * which tells the host controller driver that no such mapping is needed for
    1320                 :            :  * the transfer_buffer since
    1321                 :            :  * the device driver is DMA-aware.  For example, a device driver might
    1322                 :            :  * allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map().
    1323                 :            :  * When this transfer flag is provided, host controller drivers will
    1324                 :            :  * attempt to use the dma address found in the transfer_dma
    1325                 :            :  * field rather than determining a dma address themselves.
    1326                 :            :  *
    1327                 :            :  * Note that transfer_buffer must still be set if the controller
    1328                 :            :  * does not support DMA (as indicated by bus.uses_dma) and when talking
    1329                 :            :  * to root hub. If you have to trasfer between highmem zone and the device
    1330                 :            :  * on such controller, create a bounce buffer or bail out with an error.
    1331                 :            :  * If transfer_buffer cannot be set (is in highmem) and the controller is DMA
    1332                 :            :  * capable, assign NULL to it, so that usbmon knows not to use the value.
    1333                 :            :  * The setup_packet must always be set, so it cannot be located in highmem.
    1334                 :            :  *
    1335                 :            :  * Initialization:
    1336                 :            :  *
    1337                 :            :  * All URBs submitted must initialize the dev, pipe, transfer_flags (may be
    1338                 :            :  * zero), and complete fields.  All URBs must also initialize
    1339                 :            :  * transfer_buffer and transfer_buffer_length.  They may provide the
    1340                 :            :  * URB_SHORT_NOT_OK transfer flag, indicating that short reads are
    1341                 :            :  * to be treated as errors; that flag is invalid for write requests.
    1342                 :            :  *
    1343                 :            :  * Bulk URBs may
    1344                 :            :  * use the URB_ZERO_PACKET transfer flag, indicating that bulk OUT transfers
    1345                 :            :  * should always terminate with a short packet, even if it means adding an
    1346                 :            :  * extra zero length packet.
    1347                 :            :  *
    1348                 :            :  * Control URBs must provide a valid pointer in the setup_packet field.
    1349                 :            :  * Unlike the transfer_buffer, the setup_packet may not be mapped for DMA
    1350                 :            :  * beforehand.
    1351                 :            :  *
    1352                 :            :  * Interrupt URBs must provide an interval, saying how often (in milliseconds
    1353                 :            :  * or, for highspeed devices, 125 microsecond units)
    1354                 :            :  * to poll for transfers.  After the URB has been submitted, the interval
    1355                 :            :  * field reflects how the transfer was actually scheduled.
    1356                 :            :  * The polling interval may be more frequent than requested.
    1357                 :            :  * For example, some controllers have a maximum interval of 32 milliseconds,
    1358                 :            :  * while others support intervals of up to 1024 milliseconds.
    1359                 :            :  * Isochronous URBs also have transfer intervals.  (Note that for isochronous
    1360                 :            :  * endpoints, as well as high speed interrupt endpoints, the encoding of
    1361                 :            :  * the transfer interval in the endpoint descriptor is logarithmic.
    1362                 :            :  * Device drivers must convert that value to linear units themselves.)
    1363                 :            :  *
    1364                 :            :  * If an isochronous endpoint queue isn't already running, the host
    1365                 :            :  * controller will schedule a new URB to start as soon as bandwidth
    1366                 :            :  * utilization allows.  If the queue is running then a new URB will be
    1367                 :            :  * scheduled to start in the first transfer slot following the end of the
    1368                 :            :  * preceding URB, if that slot has not already expired.  If the slot has
    1369                 :            :  * expired (which can happen when IRQ delivery is delayed for a long time),
    1370                 :            :  * the scheduling behavior depends on the URB_ISO_ASAP flag.  If the flag
    1371                 :            :  * is clear then the URB will be scheduled to start in the expired slot,
    1372                 :            :  * implying that some of its packets will not be transferred; if the flag
    1373                 :            :  * is set then the URB will be scheduled in the first unexpired slot,
    1374                 :            :  * breaking the queue's synchronization.  Upon URB completion, the
    1375                 :            :  * start_frame field will be set to the (micro)frame number in which the
    1376                 :            :  * transfer was scheduled.  Ranges for frame counter values are HC-specific
    1377                 :            :  * and can go from as low as 256 to as high as 65536 frames.
    1378                 :            :  *
    1379                 :            :  * Isochronous URBs have a different data transfer model, in part because
    1380                 :            :  * the quality of service is only "best effort".  Callers provide specially
    1381                 :            :  * allocated URBs, with number_of_packets worth of iso_frame_desc structures
    1382                 :            :  * at the end.  Each such packet is an individual ISO transfer.  Isochronous
    1383                 :            :  * URBs are normally queued, submitted by drivers to arrange that
    1384                 :            :  * transfers are at least double buffered, and then explicitly resubmitted
    1385                 :            :  * in completion handlers, so
    1386                 :            :  * that data (such as audio or video) streams at as constant a rate as the
    1387                 :            :  * host controller scheduler can support.
    1388                 :            :  *
    1389                 :            :  * Completion Callbacks:
    1390                 :            :  *
    1391                 :            :  * The completion callback is made in_interrupt(), and one of the first
    1392                 :            :  * things that a completion handler should do is check the status field.
    1393                 :            :  * The status field is provided for all URBs.  It is used to report
    1394                 :            :  * unlinked URBs, and status for all non-ISO transfers.  It should not
    1395                 :            :  * be examined before the URB is returned to the completion handler.
    1396                 :            :  *
    1397                 :            :  * The context field is normally used to link URBs back to the relevant
    1398                 :            :  * driver or request state.
    1399                 :            :  *
    1400                 :            :  * When the completion callback is invoked for non-isochronous URBs, the
    1401                 :            :  * actual_length field tells how many bytes were transferred.  This field
    1402                 :            :  * is updated even when the URB terminated with an error or was unlinked.
    1403                 :            :  *
    1404                 :            :  * ISO transfer status is reported in the status and actual_length fields
    1405                 :            :  * of the iso_frame_desc array, and the number of errors is reported in
    1406                 :            :  * error_count.  Completion callbacks for ISO transfers will normally
    1407                 :            :  * (re)submit URBs to ensure a constant transfer rate.
    1408                 :            :  *
    1409                 :            :  * Note that even fields marked "public" should not be touched by the driver
    1410                 :            :  * when the urb is owned by the hcd, that is, since the call to
    1411                 :            :  * usb_submit_urb() till the entry into the completion routine.
    1412                 :            :  */
    1413                 :            : struct urb {
    1414                 :            :         /* private: usb core and host controller only fields in the urb */
    1415                 :            :         struct kref kref;               /* reference count of the URB */
    1416                 :            :         void *hcpriv;                   /* private data for host controller */
    1417                 :            :         atomic_t use_count;             /* concurrent submissions counter */
    1418                 :            :         atomic_t reject;                /* submissions will fail */
    1419                 :            :         int unlinked;                   /* unlink error code */
    1420                 :            : 
    1421                 :            :         /* public: documented fields in the urb that can be used by drivers */
    1422                 :            :         struct list_head urb_list;      /* list head for use by the urb's
    1423                 :            :                                          * current owner */
    1424                 :            :         struct list_head anchor_list;   /* the URB may be anchored */
    1425                 :            :         struct usb_anchor *anchor;
    1426                 :            :         struct usb_device *dev;         /* (in) pointer to associated device */
    1427                 :            :         struct usb_host_endpoint *ep;   /* (internal) pointer to endpoint */
    1428                 :            :         unsigned int pipe;              /* (in) pipe information */
    1429                 :            :         unsigned int stream_id;         /* (in) stream ID */
    1430                 :            :         int status;                     /* (return) non-ISO status */
    1431                 :            :         unsigned int transfer_flags;    /* (in) URB_SHORT_NOT_OK | ...*/
    1432                 :            :         void *transfer_buffer;          /* (in) associated data buffer */
    1433                 :            :         dma_addr_t transfer_dma;        /* (in) dma addr for transfer_buffer */
    1434                 :            :         struct scatterlist *sg;         /* (in) scatter gather buffer list */
    1435                 :            :         int num_mapped_sgs;             /* (internal) mapped sg entries */
    1436                 :            :         int num_sgs;                    /* (in) number of entries in the sg list */
    1437                 :            :         u32 transfer_buffer_length;     /* (in) data buffer length */
    1438                 :            :         u32 actual_length;              /* (return) actual transfer length */
    1439                 :            :         unsigned char *setup_packet;    /* (in) setup packet (control only) */
    1440                 :            :         dma_addr_t setup_dma;           /* (in) dma addr for setup_packet */
    1441                 :            :         int start_frame;                /* (modify) start frame (ISO) */
    1442                 :            :         int number_of_packets;          /* (in) number of ISO packets */
    1443                 :            :         int interval;                   /* (modify) transfer interval
    1444                 :            :                                          * (INT/ISO) */
    1445                 :            :         int error_count;                /* (return) number of ISO errors */
    1446                 :            :         void *context;                  /* (in) context for completion */
    1447                 :            :         usb_complete_t complete;        /* (in) completion routine */
    1448                 :            :         struct usb_iso_packet_descriptor iso_frame_desc[0];
    1449                 :            :                                         /* (in) ISO ONLY */
    1450                 :            : };
    1451                 :            : 
    1452                 :            : /* ----------------------------------------------------------------------- */
    1453                 :            : 
    1454                 :            : /**
    1455                 :            :  * usb_fill_control_urb - initializes a control urb
    1456                 :            :  * @urb: pointer to the urb to initialize.
    1457                 :            :  * @dev: pointer to the struct usb_device for this urb.
    1458                 :            :  * @pipe: the endpoint pipe
    1459                 :            :  * @setup_packet: pointer to the setup_packet buffer
    1460                 :            :  * @transfer_buffer: pointer to the transfer buffer
    1461                 :            :  * @buffer_length: length of the transfer buffer
    1462                 :            :  * @complete_fn: pointer to the usb_complete_t function
    1463                 :            :  * @context: what to set the urb context to.
    1464                 :            :  *
    1465                 :            :  * Initializes a control urb with the proper information needed to submit
    1466                 :            :  * it to a device.
    1467                 :            :  */
    1468                 :            : static inline void usb_fill_control_urb(struct urb *urb,
    1469                 :            :                                         struct usb_device *dev,
    1470                 :            :                                         unsigned int pipe,
    1471                 :            :                                         unsigned char *setup_packet,
    1472                 :            :                                         void *transfer_buffer,
    1473                 :            :                                         int buffer_length,
    1474                 :            :                                         usb_complete_t complete_fn,
    1475                 :            :                                         void *context)
    1476                 :            : {
    1477                 :          0 :         urb->dev = dev;
    1478                 :          0 :         urb->pipe = pipe;
    1479                 :          0 :         urb->setup_packet = setup_packet;
    1480                 :          0 :         urb->transfer_buffer = transfer_buffer;
    1481                 :          0 :         urb->transfer_buffer_length = buffer_length;
    1482                 :          0 :         urb->complete = complete_fn;
    1483                 :          0 :         urb->context = context;
    1484                 :            : }
    1485                 :            : 
    1486                 :            : /**
    1487                 :            :  * usb_fill_bulk_urb - macro to help initialize a bulk urb
    1488                 :            :  * @urb: pointer to the urb to initialize.
    1489                 :            :  * @dev: pointer to the struct usb_device for this urb.
    1490                 :            :  * @pipe: the endpoint pipe
    1491                 :            :  * @transfer_buffer: pointer to the transfer buffer
    1492                 :            :  * @buffer_length: length of the transfer buffer
    1493                 :            :  * @complete_fn: pointer to the usb_complete_t function
    1494                 :            :  * @context: what to set the urb context to.
    1495                 :            :  *
    1496                 :            :  * Initializes a bulk urb with the proper information needed to submit it
    1497                 :            :  * to a device.
    1498                 :            :  */
    1499                 :            : static inline void usb_fill_bulk_urb(struct urb *urb,
    1500                 :            :                                      struct usb_device *dev,
    1501                 :            :                                      unsigned int pipe,
    1502                 :            :                                      void *transfer_buffer,
    1503                 :            :                                      int buffer_length,
    1504                 :            :                                      usb_complete_t complete_fn,
    1505                 :            :                                      void *context)
    1506                 :            : {
    1507                 :     867438 :         urb->dev = dev;
    1508                 :     867438 :         urb->pipe = pipe;
    1509                 :     867438 :         urb->transfer_buffer = transfer_buffer;
    1510                 :     867438 :         urb->transfer_buffer_length = buffer_length;
    1511                 :     867438 :         urb->complete = complete_fn;
    1512                 :     867438 :         urb->context = context;
    1513                 :            : }
    1514                 :            : 
    1515                 :            : /**
    1516                 :            :  * usb_fill_int_urb - macro to help initialize a interrupt urb
    1517                 :            :  * @urb: pointer to the urb to initialize.
    1518                 :            :  * @dev: pointer to the struct usb_device for this urb.
    1519                 :            :  * @pipe: the endpoint pipe
    1520                 :            :  * @transfer_buffer: pointer to the transfer buffer
    1521                 :            :  * @buffer_length: length of the transfer buffer
    1522                 :            :  * @complete_fn: pointer to the usb_complete_t function
    1523                 :            :  * @context: what to set the urb context to.
    1524                 :            :  * @interval: what to set the urb interval to, encoded like
    1525                 :            :  *      the endpoint descriptor's bInterval value.
    1526                 :            :  *
    1527                 :            :  * Initializes a interrupt urb with the proper information needed to submit
    1528                 :            :  * it to a device.
    1529                 :            :  *
    1530                 :            :  * Note that High Speed and SuperSpeed interrupt endpoints use a logarithmic
    1531                 :            :  * encoding of the endpoint interval, and express polling intervals in
    1532                 :            :  * microframes (eight per millisecond) rather than in frames (one per
    1533                 :            :  * millisecond).
    1534                 :            :  *
    1535                 :            :  * Wireless USB also uses the logarithmic encoding, but specifies it in units of
    1536                 :            :  * 128us instead of 125us.  For Wireless USB devices, the interval is passed
    1537                 :            :  * through to the host controller, rather than being translated into microframe
    1538                 :            :  * units.
    1539                 :            :  */
    1540                 :            : static inline void usb_fill_int_urb(struct urb *urb,
    1541                 :            :                                     struct usb_device *dev,
    1542                 :            :                                     unsigned int pipe,
    1543                 :            :                                     void *transfer_buffer,
    1544                 :            :                                     int buffer_length,
    1545                 :            :                                     usb_complete_t complete_fn,
    1546                 :            :                                     void *context,
    1547                 :            :                                     int interval)
    1548                 :            : {
    1549                 :          0 :         urb->dev = dev;
    1550                 :          0 :         urb->pipe = pipe;
    1551                 :          0 :         urb->transfer_buffer = transfer_buffer;
    1552                 :          0 :         urb->transfer_buffer_length = buffer_length;
    1553                 :          0 :         urb->complete = complete_fn;
    1554                 :          0 :         urb->context = context;
    1555                 :            : 
    1556 [ #  # ][ #  # ]:          0 :         if (dev->speed == USB_SPEED_HIGH || dev->speed == USB_SPEED_SUPER) {
    1557                 :            :                 /* make sure interval is within allowed range */
    1558                 :          0 :                 interval = clamp(interval, 1, 16);
    1559                 :            : 
    1560                 :          0 :                 urb->interval = 1 << (interval - 1);
    1561                 :            :         } else {
    1562                 :          0 :                 urb->interval = interval;
    1563                 :            :         }
    1564                 :            : 
    1565                 :          0 :         urb->start_frame = -1;
    1566                 :            : }
    1567                 :            : 
    1568                 :            : extern void usb_init_urb(struct urb *urb);
    1569                 :            : extern struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags);
    1570                 :            : extern void usb_free_urb(struct urb *urb);
    1571                 :            : #define usb_put_urb usb_free_urb
    1572                 :            : extern struct urb *usb_get_urb(struct urb *urb);
    1573                 :            : extern int usb_submit_urb(struct urb *urb, gfp_t mem_flags);
    1574                 :            : extern int usb_unlink_urb(struct urb *urb);
    1575                 :            : extern void usb_kill_urb(struct urb *urb);
    1576                 :            : extern void usb_poison_urb(struct urb *urb);
    1577                 :            : extern void usb_unpoison_urb(struct urb *urb);
    1578                 :            : extern void usb_block_urb(struct urb *urb);
    1579                 :            : extern void usb_kill_anchored_urbs(struct usb_anchor *anchor);
    1580                 :            : extern void usb_poison_anchored_urbs(struct usb_anchor *anchor);
    1581                 :            : extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor);
    1582                 :            : extern void usb_unlink_anchored_urbs(struct usb_anchor *anchor);
    1583                 :            : extern void usb_anchor_suspend_wakeups(struct usb_anchor *anchor);
    1584                 :            : extern void usb_anchor_resume_wakeups(struct usb_anchor *anchor);
    1585                 :            : extern void usb_anchor_urb(struct urb *urb, struct usb_anchor *anchor);
    1586                 :            : extern void usb_unanchor_urb(struct urb *urb);
    1587                 :            : extern int usb_wait_anchor_empty_timeout(struct usb_anchor *anchor,
    1588                 :            :                                          unsigned int timeout);
    1589                 :            : extern struct urb *usb_get_from_anchor(struct usb_anchor *anchor);
    1590                 :            : extern void usb_scuttle_anchored_urbs(struct usb_anchor *anchor);
    1591                 :            : extern int usb_anchor_empty(struct usb_anchor *anchor);
    1592                 :            : 
    1593                 :            : #define usb_unblock_urb usb_unpoison_urb
    1594                 :            : 
    1595                 :            : /**
    1596                 :            :  * usb_urb_dir_in - check if an URB describes an IN transfer
    1597                 :            :  * @urb: URB to be checked
    1598                 :            :  *
    1599                 :            :  * Return: 1 if @urb describes an IN transfer (device-to-host),
    1600                 :            :  * otherwise 0.
    1601                 :            :  */
    1602                 :            : static inline int usb_urb_dir_in(struct urb *urb)
    1603                 :            : {
    1604                 :    6701607 :         return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_IN;
    1605                 :            : }
    1606                 :            : 
    1607                 :            : /**
    1608                 :            :  * usb_urb_dir_out - check if an URB describes an OUT transfer
    1609                 :            :  * @urb: URB to be checked
    1610                 :            :  *
    1611                 :            :  * Return: 1 if @urb describes an OUT transfer (host-to-device),
    1612                 :            :  * otherwise 0.
    1613                 :            :  */
    1614                 :            : static inline int usb_urb_dir_out(struct urb *urb)
    1615                 :            : {
    1616                 :            :         return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_OUT;
    1617                 :            : }
    1618                 :            : 
    1619                 :            : void *usb_alloc_coherent(struct usb_device *dev, size_t size,
    1620                 :            :         gfp_t mem_flags, dma_addr_t *dma);
    1621                 :            : void usb_free_coherent(struct usb_device *dev, size_t size,
    1622                 :            :         void *addr, dma_addr_t dma);
    1623                 :            : 
    1624                 :            : #if 0
    1625                 :            : struct urb *usb_buffer_map(struct urb *urb);
    1626                 :            : void usb_buffer_dmasync(struct urb *urb);
    1627                 :            : void usb_buffer_unmap(struct urb *urb);
    1628                 :            : #endif
    1629                 :            : 
    1630                 :            : struct scatterlist;
    1631                 :            : int usb_buffer_map_sg(const struct usb_device *dev, int is_in,
    1632                 :            :                       struct scatterlist *sg, int nents);
    1633                 :            : #if 0
    1634                 :            : void usb_buffer_dmasync_sg(const struct usb_device *dev, int is_in,
    1635                 :            :                            struct scatterlist *sg, int n_hw_ents);
    1636                 :            : #endif
    1637                 :            : void usb_buffer_unmap_sg(const struct usb_device *dev, int is_in,
    1638                 :            :                          struct scatterlist *sg, int n_hw_ents);
    1639                 :            : 
    1640                 :            : /*-------------------------------------------------------------------*
    1641                 :            :  *                         SYNCHRONOUS CALL SUPPORT                  *
    1642                 :            :  *-------------------------------------------------------------------*/
    1643                 :            : 
    1644                 :            : extern int usb_control_msg(struct usb_device *dev, unsigned int pipe,
    1645                 :            :         __u8 request, __u8 requesttype, __u16 value, __u16 index,
    1646                 :            :         void *data, __u16 size, int timeout);
    1647                 :            : extern int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe,
    1648                 :            :         void *data, int len, int *actual_length, int timeout);
    1649                 :            : extern int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
    1650                 :            :         void *data, int len, int *actual_length,
    1651                 :            :         int timeout);
    1652                 :            : 
    1653                 :            : /* wrappers around usb_control_msg() for the most common standard requests */
    1654                 :            : extern int usb_get_descriptor(struct usb_device *dev, unsigned char desctype,
    1655                 :            :         unsigned char descindex, void *buf, int size);
    1656                 :            : extern int usb_get_status(struct usb_device *dev,
    1657                 :            :         int type, int target, void *data);
    1658                 :            : extern int usb_string(struct usb_device *dev, int index,
    1659                 :            :         char *buf, size_t size);
    1660                 :            : 
    1661                 :            : /* wrappers that also update important state inside usbcore */
    1662                 :            : extern int usb_clear_halt(struct usb_device *dev, int pipe);
    1663                 :            : extern int usb_reset_configuration(struct usb_device *dev);
    1664                 :            : extern int usb_set_interface(struct usb_device *dev, int ifnum, int alternate);
    1665                 :            : extern void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr);
    1666                 :            : 
    1667                 :            : /* this request isn't really synchronous, but it belongs with the others */
    1668                 :            : extern int usb_driver_set_configuration(struct usb_device *udev, int config);
    1669                 :            : 
    1670                 :            : /*
    1671                 :            :  * timeouts, in milliseconds, used for sending/receiving control messages
    1672                 :            :  * they typically complete within a few frames (msec) after they're issued
    1673                 :            :  * USB identifies 5 second timeouts, maybe more in a few cases, and a few
    1674                 :            :  * slow devices (like some MGE Ellipse UPSes) actually push that limit.
    1675                 :            :  */
    1676                 :            : #define USB_CTRL_GET_TIMEOUT    5000
    1677                 :            : #define USB_CTRL_SET_TIMEOUT    5000
    1678                 :            : 
    1679                 :            : 
    1680                 :            : /**
    1681                 :            :  * struct usb_sg_request - support for scatter/gather I/O
    1682                 :            :  * @status: zero indicates success, else negative errno
    1683                 :            :  * @bytes: counts bytes transferred.
    1684                 :            :  *
    1685                 :            :  * These requests are initialized using usb_sg_init(), and then are used
    1686                 :            :  * as request handles passed to usb_sg_wait() or usb_sg_cancel().  Most
    1687                 :            :  * members of the request object aren't for driver access.
    1688                 :            :  *
    1689                 :            :  * The status and bytecount values are valid only after usb_sg_wait()
    1690                 :            :  * returns.  If the status is zero, then the bytecount matches the total
    1691                 :            :  * from the request.
    1692                 :            :  *
    1693                 :            :  * After an error completion, drivers may need to clear a halt condition
    1694                 :            :  * on the endpoint.
    1695                 :            :  */
    1696                 :            : struct usb_sg_request {
    1697                 :            :         int                     status;
    1698                 :            :         size_t                  bytes;
    1699                 :            : 
    1700                 :            :         /* private:
    1701                 :            :          * members below are private to usbcore,
    1702                 :            :          * and are not provided for driver access!
    1703                 :            :          */
    1704                 :            :         spinlock_t              lock;
    1705                 :            : 
    1706                 :            :         struct usb_device       *dev;
    1707                 :            :         int                     pipe;
    1708                 :            : 
    1709                 :            :         int                     entries;
    1710                 :            :         struct urb              **urbs;
    1711                 :            : 
    1712                 :            :         int                     count;
    1713                 :            :         struct completion       complete;
    1714                 :            : };
    1715                 :            : 
    1716                 :            : int usb_sg_init(
    1717                 :            :         struct usb_sg_request   *io,
    1718                 :            :         struct usb_device       *dev,
    1719                 :            :         unsigned                pipe,
    1720                 :            :         unsigned                period,
    1721                 :            :         struct scatterlist      *sg,
    1722                 :            :         int                     nents,
    1723                 :            :         size_t                  length,
    1724                 :            :         gfp_t                   mem_flags
    1725                 :            : );
    1726                 :            : void usb_sg_cancel(struct usb_sg_request *io);
    1727                 :            : void usb_sg_wait(struct usb_sg_request *io);
    1728                 :            : 
    1729                 :            : 
    1730                 :            : /* ----------------------------------------------------------------------- */
    1731                 :            : 
    1732                 :            : /*
    1733                 :            :  * For various legacy reasons, Linux has a small cookie that's paired with
    1734                 :            :  * a struct usb_device to identify an endpoint queue.  Queue characteristics
    1735                 :            :  * are defined by the endpoint's descriptor.  This cookie is called a "pipe",
    1736                 :            :  * an unsigned int encoded as:
    1737                 :            :  *
    1738                 :            :  *  - direction:        bit 7           (0 = Host-to-Device [Out],
    1739                 :            :  *                                       1 = Device-to-Host [In] ...
    1740                 :            :  *                                      like endpoint bEndpointAddress)
    1741                 :            :  *  - device address:   bits 8-14       ... bit positions known to uhci-hcd
    1742                 :            :  *  - endpoint:         bits 15-18      ... bit positions known to uhci-hcd
    1743                 :            :  *  - pipe type:        bits 30-31      (00 = isochronous, 01 = interrupt,
    1744                 :            :  *                                       10 = control, 11 = bulk)
    1745                 :            :  *
    1746                 :            :  * Given the device address and endpoint descriptor, pipes are redundant.
    1747                 :            :  */
    1748                 :            : 
    1749                 :            : /* NOTE:  these are not the standard USB_ENDPOINT_XFER_* values!! */
    1750                 :            : /* (yet ... they're the values used by usbfs) */
    1751                 :            : #define PIPE_ISOCHRONOUS                0
    1752                 :            : #define PIPE_INTERRUPT                  1
    1753                 :            : #define PIPE_CONTROL                    2
    1754                 :            : #define PIPE_BULK                       3
    1755                 :            : 
    1756                 :            : #define usb_pipein(pipe)        ((pipe) & USB_DIR_IN)
    1757                 :            : #define usb_pipeout(pipe)       (!usb_pipein(pipe))
    1758                 :            : 
    1759                 :            : #define usb_pipedevice(pipe)    (((pipe) >> 8) & 0x7f)
    1760                 :            : #define usb_pipeendpoint(pipe)  (((pipe) >> 15) & 0xf)
    1761                 :            : 
    1762                 :            : #define usb_pipetype(pipe)      (((pipe) >> 30) & 3)
    1763                 :            : #define usb_pipeisoc(pipe)      (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS)
    1764                 :            : #define usb_pipeint(pipe)       (usb_pipetype((pipe)) == PIPE_INTERRUPT)
    1765                 :            : #define usb_pipecontrol(pipe)   (usb_pipetype((pipe)) == PIPE_CONTROL)
    1766                 :            : #define usb_pipebulk(pipe)      (usb_pipetype((pipe)) == PIPE_BULK)
    1767                 :            : 
    1768                 :            : static inline unsigned int __create_pipe(struct usb_device *dev,
    1769                 :            :                 unsigned int endpoint)
    1770                 :            : {
    1771                 :          0 :         return (dev->devnum << 8) | (endpoint << 15);
    1772                 :            : }
    1773                 :            : 
    1774                 :            : /* Create various pipes... */
    1775                 :            : #define usb_sndctrlpipe(dev, endpoint)  \
    1776                 :            :         ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint))
    1777                 :            : #define usb_rcvctrlpipe(dev, endpoint)  \
    1778                 :            :         ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
    1779                 :            : #define usb_sndisocpipe(dev, endpoint)  \
    1780                 :            :         ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint))
    1781                 :            : #define usb_rcvisocpipe(dev, endpoint)  \
    1782                 :            :         ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
    1783                 :            : #define usb_sndbulkpipe(dev, endpoint)  \
    1784                 :            :         ((PIPE_BULK << 30) | __create_pipe(dev, endpoint))
    1785                 :            : #define usb_rcvbulkpipe(dev, endpoint)  \
    1786                 :            :         ((PIPE_BULK << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
    1787                 :            : #define usb_sndintpipe(dev, endpoint)   \
    1788                 :            :         ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint))
    1789                 :            : #define usb_rcvintpipe(dev, endpoint)   \
    1790                 :            :         ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
    1791                 :            : 
    1792                 :            : static inline struct usb_host_endpoint *
    1793                 :            : usb_pipe_endpoint(struct usb_device *dev, unsigned int pipe)
    1794                 :            : {
    1795                 :            :         struct usb_host_endpoint **eps;
    1796         [ +  + ]:    2233869 :         eps = usb_pipein(pipe) ? dev->ep_in : dev->ep_out;
    1797                 :    2233869 :         return eps[usb_pipeendpoint(pipe)];
    1798                 :            : }
    1799                 :            : 
    1800                 :            : /*-------------------------------------------------------------------------*/
    1801                 :            : 
    1802                 :            : static inline __u16
    1803                 :            : usb_maxpacket(struct usb_device *udev, int pipe, int is_out)
    1804                 :            : {
    1805                 :            :         struct usb_host_endpoint        *ep;
    1806                 :    4576891 :         unsigned                        epnum = usb_pipeendpoint(pipe);
    1807                 :            : 
    1808   [ +  +  +  + ]:    4576891 :         if (is_out) {
    1809 [ -  + ][ -  + ]:    2999976 :                 WARN_ON(usb_pipein(pipe));
    1810                 :    5342998 :                 ep = udev->ep_out[epnum];
    1811                 :            :         } else {
    1812 [ -  + ][ -  + ]:    1576915 :                 WARN_ON(usb_pipeout(pipe));
    1813                 :    1576915 :                 ep = udev->ep_in[epnum];
    1814                 :            :         }
    1815 [ +  - ][ +  - ]:    4576891 :         if (!ep)
    1816                 :            :                 return 0;
    1817                 :            : 
    1818                 :            :         /* NOTE:  only 0x07ff bits are for packet size... */
    1819                 :            :         return usb_endpoint_maxp(&ep->desc);
    1820                 :            : }
    1821                 :            : 
    1822                 :            : /* ----------------------------------------------------------------------- */
    1823                 :            : 
    1824                 :            : /* translate USB error codes to codes user space understands */
    1825                 :            : static inline int usb_translate_errors(int error_code)
    1826                 :            : {
    1827                 :            :         switch (error_code) {
    1828                 :            :         case 0:
    1829                 :            :         case -ENOMEM:
    1830                 :            :         case -ENODEV:
    1831                 :            :         case -EOPNOTSUPP:
    1832                 :            :                 return error_code;
    1833                 :            :         default:
    1834                 :            :                 return -EIO;
    1835                 :            :         }
    1836                 :            : }
    1837                 :            : 
    1838                 :            : /* Events from the usb core */
    1839                 :            : #define USB_DEVICE_ADD          0x0001
    1840                 :            : #define USB_DEVICE_REMOVE       0x0002
    1841                 :            : #define USB_BUS_ADD             0x0003
    1842                 :            : #define USB_BUS_REMOVE          0x0004
    1843                 :            : extern void usb_register_notify(struct notifier_block *nb);
    1844                 :            : extern void usb_unregister_notify(struct notifier_block *nb);
    1845                 :            : 
    1846                 :            : /* debugfs stuff */
    1847                 :            : extern struct dentry *usb_debug_root;
    1848                 :            : 
    1849                 :            : #endif  /* __KERNEL__ */
    1850                 :            : 
    1851                 :            : #endif

Generated by: LCOV version 1.9