Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * Copyright (c) 2001-2002 by David Brownell
0004  */
0005 
0006 #ifndef __USB_CORE_HCD_H
0007 #define __USB_CORE_HCD_H
0008 
0009 #ifdef __KERNEL__
0010 
0011 #include <linux/rwsem.h>
0012 #include <linux/interrupt.h>
0013 #include <linux/idr.h>
0014 
0015 #define MAX_TOPO_LEVEL      6
0016 
0017 /* This file contains declarations of usbcore internals that are mostly
0018  * used or exposed by Host Controller Drivers.
0019  */
0020 
0021 /*
0022  * USB Packet IDs (PIDs)
0023  */
0024 #define USB_PID_EXT         0xf0    /* USB 2.0 LPM ECN */
0025 #define USB_PID_OUT         0xe1
0026 #define USB_PID_ACK         0xd2
0027 #define USB_PID_DATA0           0xc3
0028 #define USB_PID_PING            0xb4    /* USB 2.0 */
0029 #define USB_PID_SOF         0xa5
0030 #define USB_PID_NYET            0x96    /* USB 2.0 */
0031 #define USB_PID_DATA2           0x87    /* USB 2.0 */
0032 #define USB_PID_SPLIT           0x78    /* USB 2.0 */
0033 #define USB_PID_IN          0x69
0034 #define USB_PID_NAK         0x5a
0035 #define USB_PID_DATA1           0x4b
0036 #define USB_PID_PREAMBLE        0x3c    /* Token mode */
0037 #define USB_PID_ERR         0x3c    /* USB 2.0: handshake mode */
0038 #define USB_PID_SETUP           0x2d
0039 #define USB_PID_STALL           0x1e
0040 #define USB_PID_MDATA           0x0f    /* USB 2.0 */
0041 
0042 /*-------------------------------------------------------------------------*/
0043 
0044 /*
0045  * USB Host Controller Driver (usb_hcd) framework
0046  *
0047  * Since "struct usb_bus" is so thin, you can't share much code in it.
0048  * This framework is a layer over that, and should be more shareable.
0049  */
0050 
0051 /*-------------------------------------------------------------------------*/
0052 
0053 struct giveback_urb_bh {
0054     bool running;
0055     bool high_prio;
0056     spinlock_t lock;
0057     struct list_head  head;
0058     struct tasklet_struct bh;
0059     struct usb_host_endpoint *completing_ep;
0060 };
0061 
0062 enum usb_dev_authorize_policy {
0063     USB_DEVICE_AUTHORIZE_NONE   = 0,
0064     USB_DEVICE_AUTHORIZE_ALL    = 1,
0065     USB_DEVICE_AUTHORIZE_INTERNAL   = 2,
0066 };
0067 
0068 struct usb_hcd {
0069 
0070     /*
0071      * housekeeping
0072      */
0073     struct usb_bus      self;       /* hcd is-a bus */
0074     struct kref     kref;       /* reference counter */
0075 
0076     const char      *product_desc;  /* product/vendor string */
0077     int         speed;      /* Speed for this roothub.
0078                          * May be different from
0079                          * hcd->driver->flags & HCD_MASK
0080                          */
0081     char            irq_descr[24];  /* driver + bus # */
0082 
0083     struct timer_list   rh_timer;   /* drives root-hub polling */
0084     struct urb      *status_urb;    /* the current status urb */
0085 #ifdef CONFIG_PM
0086     struct work_struct  wakeup_work;    /* for remote wakeup */
0087 #endif
0088     struct work_struct  died_work;  /* for when the device dies */
0089 
0090     /*
0091      * hardware info/state
0092      */
0093     const struct hc_driver  *driver;    /* hw-specific hooks */
0094 
0095     /*
0096      * OTG and some Host controllers need software interaction with phys;
0097      * other external phys should be software-transparent
0098      */
0099     struct usb_phy      *usb_phy;
0100     struct usb_phy_roothub  *phy_roothub;
0101 
0102     /* Flags that need to be manipulated atomically because they can
0103      * change while the host controller is running.  Always use
0104      * set_bit() or clear_bit() to change their values.
0105      */
0106     unsigned long       flags;
0107 #define HCD_FLAG_HW_ACCESSIBLE      0   /* at full power */
0108 #define HCD_FLAG_POLL_RH        2   /* poll for rh status? */
0109 #define HCD_FLAG_POLL_PENDING       3   /* status has changed? */
0110 #define HCD_FLAG_WAKEUP_PENDING     4   /* root hub is resuming? */
0111 #define HCD_FLAG_RH_RUNNING     5   /* root hub is running? */
0112 #define HCD_FLAG_DEAD           6   /* controller has died? */
0113 #define HCD_FLAG_INTF_AUTHORIZED    7   /* authorize interfaces? */
0114 #define HCD_FLAG_DEFER_RH_REGISTER  8   /* Defer roothub registration */
0115 
0116     /* The flags can be tested using these macros; they are likely to
0117      * be slightly faster than test_bit().
0118      */
0119 #define HCD_HW_ACCESSIBLE(hcd)  ((hcd)->flags & (1U << HCD_FLAG_HW_ACCESSIBLE))
0120 #define HCD_POLL_RH(hcd)    ((hcd)->flags & (1U << HCD_FLAG_POLL_RH))
0121 #define HCD_POLL_PENDING(hcd)   ((hcd)->flags & (1U << HCD_FLAG_POLL_PENDING))
0122 #define HCD_WAKEUP_PENDING(hcd) ((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING))
0123 #define HCD_RH_RUNNING(hcd) ((hcd)->flags & (1U << HCD_FLAG_RH_RUNNING))
0124 #define HCD_DEAD(hcd)       ((hcd)->flags & (1U << HCD_FLAG_DEAD))
0125 #define HCD_DEFER_RH_REGISTER(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEFER_RH_REGISTER))
0126 
0127     /*
0128      * Specifies if interfaces are authorized by default
0129      * or they require explicit user space authorization; this bit is
0130      * settable through /sys/class/usb_host/X/interface_authorized_default
0131      */
0132 #define HCD_INTF_AUTHORIZED(hcd) \
0133     ((hcd)->flags & (1U << HCD_FLAG_INTF_AUTHORIZED))
0134 
0135     /*
0136      * Specifies if devices are authorized by default
0137      * or they require explicit user space authorization; this bit is
0138      * settable through /sys/class/usb_host/X/authorized_default
0139      */
0140     enum usb_dev_authorize_policy dev_policy;
0141 
0142     /* Flags that get set only during HCD registration or removal. */
0143     unsigned        rh_registered:1;/* is root hub registered? */
0144     unsigned        rh_pollable:1;  /* may we poll the root hub? */
0145     unsigned        msix_enabled:1; /* driver has MSI-X enabled? */
0146     unsigned        msi_enabled:1;  /* driver has MSI enabled? */
0147     /*
0148      * do not manage the PHY state in the HCD core, instead let the driver
0149      * handle this (for example if the PHY can only be turned on after a
0150      * specific event)
0151      */
0152     unsigned        skip_phy_initialization:1;
0153 
0154     /* The next flag is a stopgap, to be removed when all the HCDs
0155      * support the new root-hub polling mechanism. */
0156     unsigned        uses_new_polling:1;
0157     unsigned        wireless:1; /* Wireless USB HCD */
0158     unsigned        has_tt:1;   /* Integrated TT in root hub */
0159     unsigned        amd_resume_bug:1; /* AMD remote wakeup quirk */
0160     unsigned        can_do_streams:1; /* HC supports streams */
0161     unsigned        tpl_support:1; /* OTG & EH TPL support */
0162     unsigned        cant_recv_wakeups:1;
0163             /* wakeup requests from downstream aren't received */
0164 
0165     unsigned int        irq;        /* irq allocated */
0166     void __iomem        *regs;      /* device memory/io */
0167     resource_size_t     rsrc_start; /* memory/io resource start */
0168     resource_size_t     rsrc_len;   /* memory/io resource length */
0169     unsigned        power_budget;   /* in mA, 0 = no limit */
0170 
0171     struct giveback_urb_bh  high_prio_bh;
0172     struct giveback_urb_bh  low_prio_bh;
0173 
0174     /* bandwidth_mutex should be taken before adding or removing
0175      * any new bus bandwidth constraints:
0176      *   1. Before adding a configuration for a new device.
0177      *   2. Before removing the configuration to put the device into
0178      *      the addressed state.
0179      *   3. Before selecting a different configuration.
0180      *   4. Before selecting an alternate interface setting.
0181      *
0182      * bandwidth_mutex should be dropped after a successful control message
0183      * to the device, or resetting the bandwidth after a failed attempt.
0184      */
0185     struct mutex        *address0_mutex;
0186     struct mutex        *bandwidth_mutex;
0187     struct usb_hcd      *shared_hcd;
0188     struct usb_hcd      *primary_hcd;
0189 
0190 
0191 #define HCD_BUFFER_POOLS    4
0192     struct dma_pool     *pool[HCD_BUFFER_POOLS];
0193 
0194     int         state;
0195 #   define  __ACTIVE        0x01
0196 #   define  __SUSPEND       0x04
0197 #   define  __TRANSIENT     0x80
0198 
0199 #   define  HC_STATE_HALT       0
0200 #   define  HC_STATE_RUNNING    (__ACTIVE)
0201 #   define  HC_STATE_QUIESCING  (__SUSPEND|__TRANSIENT|__ACTIVE)
0202 #   define  HC_STATE_RESUMING   (__SUSPEND|__TRANSIENT)
0203 #   define  HC_STATE_SUSPENDED  (__SUSPEND)
0204 
0205 #define HC_IS_RUNNING(state) ((state) & __ACTIVE)
0206 #define HC_IS_SUSPENDED(state) ((state) & __SUSPEND)
0207 
0208     /* memory pool for HCs having local memory, or %NULL */
0209     struct gen_pool         *localmem_pool;
0210 
0211     /* more shared queuing code would be good; it should support
0212      * smarter scheduling, handle transaction translators, etc;
0213      * input size of periodic table to an interrupt scheduler.
0214      * (ohci 32, uhci 1024, ehci 256/512/1024).
0215      */
0216 
0217     /* The HC driver's private data is stored at the end of
0218      * this structure.
0219      */
0220     unsigned long hcd_priv[]
0221             __attribute__ ((aligned(sizeof(s64))));
0222 };
0223 
0224 /* 2.4 does this a bit differently ... */
0225 static inline struct usb_bus *hcd_to_bus(struct usb_hcd *hcd)
0226 {
0227     return &hcd->self;
0228 }
0229 
0230 static inline struct usb_hcd *bus_to_hcd(struct usb_bus *bus)
0231 {
0232     return container_of(bus, struct usb_hcd, self);
0233 }
0234 
0235 /*-------------------------------------------------------------------------*/
0236 
0237 
0238 struct hc_driver {
0239     const char  *description;   /* "ehci-hcd" etc */
0240     const char  *product_desc;  /* product/vendor string */
0241     size_t      hcd_priv_size;  /* size of private data */
0242 
0243     /* irq handler */
0244     irqreturn_t (*irq) (struct usb_hcd *hcd);
0245 
0246     int flags;
0247 #define HCD_MEMORY  0x0001      /* HC regs use memory (else I/O) */
0248 #define HCD_DMA     0x0002      /* HC uses DMA */
0249 #define HCD_SHARED  0x0004      /* Two (or more) usb_hcds share HW */
0250 #define HCD_USB11   0x0010      /* USB 1.1 */
0251 #define HCD_USB2    0x0020      /* USB 2.0 */
0252 #define HCD_USB25   0x0030      /* Wireless USB 1.0 (USB 2.5)*/
0253 #define HCD_USB3    0x0040      /* USB 3.0 */
0254 #define HCD_USB31   0x0050      /* USB 3.1 */
0255 #define HCD_USB32   0x0060      /* USB 3.2 */
0256 #define HCD_MASK    0x0070
0257 #define HCD_BH      0x0100      /* URB complete in BH context */
0258 
0259     /* called to init HCD and root hub */
0260     int (*reset) (struct usb_hcd *hcd);
0261     int (*start) (struct usb_hcd *hcd);
0262 
0263     /* NOTE:  these suspend/resume calls relate to the HC as
0264      * a whole, not just the root hub; they're for PCI bus glue.
0265      */
0266     /* called after suspending the hub, before entering D3 etc */
0267     int (*pci_suspend)(struct usb_hcd *hcd, bool do_wakeup);
0268 
0269     /* called after entering D0 (etc), before resuming the hub */
0270     int (*pci_resume)(struct usb_hcd *hcd, bool hibernated);
0271 
0272     /* cleanly make HCD stop writing memory and doing I/O */
0273     void    (*stop) (struct usb_hcd *hcd);
0274 
0275     /* shutdown HCD */
0276     void    (*shutdown) (struct usb_hcd *hcd);
0277 
0278     /* return current frame number */
0279     int (*get_frame_number) (struct usb_hcd *hcd);
0280 
0281     /* manage i/o requests, device state */
0282     int (*urb_enqueue)(struct usb_hcd *hcd,
0283                 struct urb *urb, gfp_t mem_flags);
0284     int (*urb_dequeue)(struct usb_hcd *hcd,
0285                 struct urb *urb, int status);
0286 
0287     /*
0288      * (optional) these hooks allow an HCD to override the default DMA
0289      * mapping and unmapping routines.  In general, they shouldn't be
0290      * necessary unless the host controller has special DMA requirements,
0291      * such as alignment constraints.  If these are not specified, the
0292      * general usb_hcd_(un)?map_urb_for_dma functions will be used instead
0293      * (and it may be a good idea to call these functions in your HCD
0294      * implementation)
0295      */
0296     int (*map_urb_for_dma)(struct usb_hcd *hcd, struct urb *urb,
0297                    gfp_t mem_flags);
0298     void    (*unmap_urb_for_dma)(struct usb_hcd *hcd, struct urb *urb);
0299 
0300     /* hw synch, freeing endpoint resources that urb_dequeue can't */
0301     void    (*endpoint_disable)(struct usb_hcd *hcd,
0302             struct usb_host_endpoint *ep);
0303 
0304     /* (optional) reset any endpoint state such as sequence number
0305        and current window */
0306     void    (*endpoint_reset)(struct usb_hcd *hcd,
0307             struct usb_host_endpoint *ep);
0308 
0309     /* root hub support */
0310     int (*hub_status_data) (struct usb_hcd *hcd, char *buf);
0311     int (*hub_control) (struct usb_hcd *hcd,
0312                 u16 typeReq, u16 wValue, u16 wIndex,
0313                 char *buf, u16 wLength);
0314     int (*bus_suspend)(struct usb_hcd *);
0315     int (*bus_resume)(struct usb_hcd *);
0316     int (*start_port_reset)(struct usb_hcd *, unsigned port_num);
0317     unsigned long   (*get_resuming_ports)(struct usb_hcd *);
0318 
0319         /* force handover of high-speed port to full-speed companion */
0320     void    (*relinquish_port)(struct usb_hcd *, int);
0321         /* has a port been handed over to a companion? */
0322     int (*port_handed_over)(struct usb_hcd *, int);
0323 
0324         /* CLEAR_TT_BUFFER completion callback */
0325     void    (*clear_tt_buffer_complete)(struct usb_hcd *,
0326                 struct usb_host_endpoint *);
0327 
0328     /* xHCI specific functions */
0329         /* Called by usb_alloc_dev to alloc HC device structures */
0330     int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
0331         /* Called by usb_disconnect to free HC device structures */
0332     void    (*free_dev)(struct usb_hcd *, struct usb_device *);
0333     /* Change a group of bulk endpoints to support multiple stream IDs */
0334     int (*alloc_streams)(struct usb_hcd *hcd, struct usb_device *udev,
0335         struct usb_host_endpoint **eps, unsigned int num_eps,
0336         unsigned int num_streams, gfp_t mem_flags);
0337     /* Reverts a group of bulk endpoints back to not using stream IDs.
0338      * Can fail if we run out of memory.
0339      */
0340     int (*free_streams)(struct usb_hcd *hcd, struct usb_device *udev,
0341         struct usb_host_endpoint **eps, unsigned int num_eps,
0342         gfp_t mem_flags);
0343 
0344     /* Bandwidth computation functions */
0345     /* Note that add_endpoint() can only be called once per endpoint before
0346      * check_bandwidth() or reset_bandwidth() must be called.
0347      * drop_endpoint() can only be called once per endpoint also.
0348      * A call to xhci_drop_endpoint() followed by a call to
0349      * xhci_add_endpoint() will add the endpoint to the schedule with
0350      * possibly new parameters denoted by a different endpoint descriptor
0351      * in usb_host_endpoint.  A call to xhci_add_endpoint() followed by a
0352      * call to xhci_drop_endpoint() is not allowed.
0353      */
0354         /* Allocate endpoint resources and add them to a new schedule */
0355     int (*add_endpoint)(struct usb_hcd *, struct usb_device *,
0356                 struct usb_host_endpoint *);
0357         /* Drop an endpoint from a new schedule */
0358     int (*drop_endpoint)(struct usb_hcd *, struct usb_device *,
0359                  struct usb_host_endpoint *);
0360         /* Check that a new hardware configuration, set using
0361          * endpoint_enable and endpoint_disable, does not exceed bus
0362          * bandwidth.  This must be called before any set configuration
0363          * or set interface requests are sent to the device.
0364          */
0365     int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
0366         /* Reset the device schedule to the last known good schedule,
0367          * which was set from a previous successful call to
0368          * check_bandwidth().  This reverts any add_endpoint() and
0369          * drop_endpoint() calls since that last successful call.
0370          * Used for when a check_bandwidth() call fails due to resource
0371          * or bandwidth constraints.
0372          */
0373     void    (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
0374         /* Returns the hardware-chosen device address */
0375     int (*address_device)(struct usb_hcd *, struct usb_device *udev);
0376         /* prepares the hardware to send commands to the device */
0377     int (*enable_device)(struct usb_hcd *, struct usb_device *udev);
0378         /* Notifies the HCD after a hub descriptor is fetched.
0379          * Will block.
0380          */
0381     int (*update_hub_device)(struct usb_hcd *, struct usb_device *hdev,
0382             struct usb_tt *tt, gfp_t mem_flags);
0383     int (*reset_device)(struct usb_hcd *, struct usb_device *);
0384         /* Notifies the HCD after a device is connected and its
0385          * address is set
0386          */
0387     int (*update_device)(struct usb_hcd *, struct usb_device *);
0388     int (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);
0389     /* USB 3.0 Link Power Management */
0390         /* Returns the USB3 hub-encoded value for the U1/U2 timeout. */
0391     int (*enable_usb3_lpm_timeout)(struct usb_hcd *,
0392             struct usb_device *, enum usb3_link_state state);
0393         /* The xHCI host controller can still fail the command to
0394          * disable the LPM timeouts, so this can return an error code.
0395          */
0396     int (*disable_usb3_lpm_timeout)(struct usb_hcd *,
0397             struct usb_device *, enum usb3_link_state state);
0398     int (*find_raw_port_number)(struct usb_hcd *, int);
0399     /* Call for power on/off the port if necessary */
0400     int (*port_power)(struct usb_hcd *hcd, int portnum, bool enable);
0401     /* Call for SINGLE_STEP_SET_FEATURE Test for USB2 EH certification */
0402 #define EHSET_TEST_SINGLE_STEP_SET_FEATURE 0x06
0403     int (*submit_single_step_set_feature)(struct usb_hcd *,
0404             struct urb *, int);
0405 };
0406 
0407 static inline int hcd_giveback_urb_in_bh(struct usb_hcd *hcd)
0408 {
0409     return hcd->driver->flags & HCD_BH;
0410 }
0411 
0412 static inline bool hcd_periodic_completion_in_progress(struct usb_hcd *hcd,
0413         struct usb_host_endpoint *ep)
0414 {
0415     return hcd->high_prio_bh.completing_ep == ep;
0416 }
0417 
0418 static inline bool hcd_uses_dma(struct usb_hcd *hcd)
0419 {
0420     return IS_ENABLED(CONFIG_HAS_DMA) && (hcd->driver->flags & HCD_DMA);
0421 }
0422 
0423 extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb);
0424 extern int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb,
0425         int status);
0426 extern void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb);
0427 
0428 extern int usb_hcd_submit_urb(struct urb *urb, gfp_t mem_flags);
0429 extern int usb_hcd_unlink_urb(struct urb *urb, int status);
0430 extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb,
0431         int status);
0432 extern int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
0433         gfp_t mem_flags);
0434 extern void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *, struct urb *);
0435 extern void usb_hcd_unmap_urb_for_dma(struct usb_hcd *, struct urb *);
0436 extern void usb_hcd_flush_endpoint(struct usb_device *udev,
0437         struct usb_host_endpoint *ep);
0438 extern void usb_hcd_disable_endpoint(struct usb_device *udev,
0439         struct usb_host_endpoint *ep);
0440 extern void usb_hcd_reset_endpoint(struct usb_device *udev,
0441         struct usb_host_endpoint *ep);
0442 extern void usb_hcd_synchronize_unlinks(struct usb_device *udev);
0443 extern int usb_hcd_alloc_bandwidth(struct usb_device *udev,
0444         struct usb_host_config *new_config,
0445         struct usb_host_interface *old_alt,
0446         struct usb_host_interface *new_alt);
0447 extern int usb_hcd_get_frame_number(struct usb_device *udev);
0448 
0449 struct usb_hcd *__usb_create_hcd(const struct hc_driver *driver,
0450         struct device *sysdev, struct device *dev, const char *bus_name,
0451         struct usb_hcd *primary_hcd);
0452 extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver,
0453         struct device *dev, const char *bus_name);
0454 extern struct usb_hcd *usb_create_shared_hcd(const struct hc_driver *driver,
0455         struct device *dev, const char *bus_name,
0456         struct usb_hcd *shared_hcd);
0457 extern struct usb_hcd *usb_get_hcd(struct usb_hcd *hcd);
0458 extern void usb_put_hcd(struct usb_hcd *hcd);
0459 extern int usb_hcd_is_primary_hcd(struct usb_hcd *hcd);
0460 extern int usb_add_hcd(struct usb_hcd *hcd,
0461         unsigned int irqnum, unsigned long irqflags);
0462 extern void usb_remove_hcd(struct usb_hcd *hcd);
0463 extern int usb_hcd_find_raw_port_number(struct usb_hcd *hcd, int port1);
0464 int usb_hcd_setup_local_mem(struct usb_hcd *hcd, phys_addr_t phys_addr,
0465                 dma_addr_t dma, size_t size);
0466 
0467 struct platform_device;
0468 extern void usb_hcd_platform_shutdown(struct platform_device *dev);
0469 #ifdef CONFIG_USB_HCD_TEST_MODE
0470 extern int ehset_single_step_set_feature(struct usb_hcd *hcd, int port);
0471 #else
0472 static inline int ehset_single_step_set_feature(struct usb_hcd *hcd, int port)
0473 {
0474     return 0;
0475 }
0476 #endif /* CONFIG_USB_HCD_TEST_MODE */
0477 
0478 #ifdef CONFIG_USB_PCI
0479 struct pci_dev;
0480 struct pci_device_id;
0481 extern int usb_hcd_pci_probe(struct pci_dev *dev,
0482                  const struct pci_device_id *id,
0483                  const struct hc_driver *driver);
0484 extern void usb_hcd_pci_remove(struct pci_dev *dev);
0485 extern void usb_hcd_pci_shutdown(struct pci_dev *dev);
0486 
0487 extern int usb_hcd_amd_remote_wakeup_quirk(struct pci_dev *dev);
0488 
0489 #ifdef CONFIG_PM
0490 extern const struct dev_pm_ops usb_hcd_pci_pm_ops;
0491 #endif
0492 #endif /* CONFIG_USB_PCI */
0493 
0494 /* pci-ish (pdev null is ok) buffer alloc/mapping support */
0495 void usb_init_pool_max(void);
0496 int hcd_buffer_create(struct usb_hcd *hcd);
0497 void hcd_buffer_destroy(struct usb_hcd *hcd);
0498 
0499 void *hcd_buffer_alloc(struct usb_bus *bus, size_t size,
0500     gfp_t mem_flags, dma_addr_t *dma);
0501 void hcd_buffer_free(struct usb_bus *bus, size_t size,
0502     void *addr, dma_addr_t dma);
0503 
0504 /* generic bus glue, needed for host controllers that don't use PCI */
0505 extern irqreturn_t usb_hcd_irq(int irq, void *__hcd);
0506 
0507 extern void usb_hc_died(struct usb_hcd *hcd);
0508 extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd);
0509 extern void usb_wakeup_notification(struct usb_device *hdev,
0510         unsigned int portnum);
0511 
0512 extern void usb_hcd_start_port_resume(struct usb_bus *bus, int portnum);
0513 extern void usb_hcd_end_port_resume(struct usb_bus *bus, int portnum);
0514 
0515 /* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */
0516 #define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1)
0517 #define usb_dotoggle(dev, ep, out)  ((dev)->toggle[out] ^= (1 << (ep)))
0518 #define usb_settoggle(dev, ep, out, bit) \
0519         ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | \
0520          ((bit) << (ep)))
0521 
0522 /* -------------------------------------------------------------------------- */
0523 
0524 /* Enumeration is only for the hub driver, or HCD virtual root hubs */
0525 extern struct usb_device *usb_alloc_dev(struct usb_device *parent,
0526                     struct usb_bus *, unsigned port);
0527 extern int usb_new_device(struct usb_device *dev);
0528 extern void usb_disconnect(struct usb_device **);
0529 
0530 extern int usb_get_configuration(struct usb_device *dev);
0531 extern void usb_destroy_configuration(struct usb_device *dev);
0532 
0533 /*-------------------------------------------------------------------------*/
0534 
0535 /*
0536  * HCD Root Hub support
0537  */
0538 
0539 #include <linux/usb/ch11.h>
0540 
0541 /*
0542  * As of USB 2.0, full/low speed devices are segregated into trees.
0543  * One type grows from USB 1.1 host controllers (OHCI, UHCI etc).
0544  * The other type grows from high speed hubs when they connect to
0545  * full/low speed devices using "Transaction Translators" (TTs).
0546  *
0547  * TTs should only be known to the hub driver, and high speed bus
0548  * drivers (only EHCI for now).  They affect periodic scheduling and
0549  * sometimes control/bulk error recovery.
0550  */
0551 
0552 struct usb_device;
0553 
0554 struct usb_tt {
0555     struct usb_device   *hub;   /* upstream highspeed hub */
0556     int         multi;  /* true means one TT per port */
0557     unsigned        think_time; /* think time in ns */
0558     void            *hcpriv;    /* HCD private data */
0559 
0560     /* for control/bulk error recovery (CLEAR_TT_BUFFER) */
0561     spinlock_t      lock;
0562     struct list_head    clear_list; /* of usb_tt_clear */
0563     struct work_struct  clear_work;
0564 };
0565 
0566 struct usb_tt_clear {
0567     struct list_head    clear_list;
0568     unsigned        tt;
0569     u16         devinfo;
0570     struct usb_hcd      *hcd;
0571     struct usb_host_endpoint    *ep;
0572 };
0573 
0574 extern int usb_hub_clear_tt_buffer(struct urb *urb);
0575 extern void usb_ep0_reinit(struct usb_device *);
0576 
0577 /* (shifted) direction/type/recipient from the USB 2.0 spec, table 9.2 */
0578 #define DeviceRequest \
0579     ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
0580 #define DeviceOutRequest \
0581     ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
0582 
0583 #define InterfaceRequest \
0584     ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
0585 
0586 #define EndpointRequest \
0587     ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8)
0588 #define EndpointOutRequest \
0589     ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_ENDPOINT)<<8)
0590 
0591 /* class requests from the USB 2.0 hub spec, table 11-15 */
0592 #define HUB_CLASS_REQ(dir, type, request) ((((dir) | (type)) << 8) | (request))
0593 /* GetBusState and SetHubDescriptor are optional, omitted */
0594 #define ClearHubFeature     HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_HUB, USB_REQ_CLEAR_FEATURE)
0595 #define ClearPortFeature    HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, USB_REQ_CLEAR_FEATURE)
0596 #define GetHubDescriptor    HUB_CLASS_REQ(USB_DIR_IN, USB_RT_HUB, USB_REQ_GET_DESCRIPTOR)
0597 #define GetHubStatus        HUB_CLASS_REQ(USB_DIR_IN, USB_RT_HUB, USB_REQ_GET_STATUS)
0598 #define GetPortStatus       HUB_CLASS_REQ(USB_DIR_IN, USB_RT_PORT, USB_REQ_GET_STATUS)
0599 #define SetHubFeature       HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_HUB, USB_REQ_SET_FEATURE)
0600 #define SetPortFeature      HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, USB_REQ_SET_FEATURE)
0601 #define ClearTTBuffer       HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, HUB_CLEAR_TT_BUFFER)
0602 #define ResetTT         HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, HUB_RESET_TT)
0603 #define GetTTState      HUB_CLASS_REQ(USB_DIR_IN, USB_RT_PORT, HUB_GET_TT_STATE)
0604 #define StopTT          HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, HUB_STOP_TT)
0605 
0606 
0607 /*-------------------------------------------------------------------------*/
0608 
0609 /* class requests from USB 3.1 hub spec, table 10-7 */
0610 #define SetHubDepth     HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_HUB, HUB_SET_DEPTH)
0611 #define GetPortErrorCount   HUB_CLASS_REQ(USB_DIR_IN, USB_RT_PORT, HUB_GET_PORT_ERR_COUNT)
0612 
0613 /*
0614  * Generic bandwidth allocation constants/support
0615  */
0616 #define FRAME_TIME_USECS    1000L
0617 #define BitTime(bytecount) (7 * 8 * bytecount / 6) /* with integer truncation */
0618         /* Trying not to use worst-case bit-stuffing
0619          * of (7/6 * 8 * bytecount) = 9.33 * bytecount */
0620         /* bytecount = data payload byte count */
0621 
0622 #define NS_TO_US(ns)    DIV_ROUND_UP(ns, 1000L)
0623             /* convert nanoseconds to microseconds, rounding up */
0624 
0625 /*
0626  * Full/low speed bandwidth allocation constants/support.
0627  */
0628 #define BW_HOST_DELAY   1000L       /* nanoseconds */
0629 #define BW_HUB_LS_SETUP 333L        /* nanoseconds */
0630             /* 4 full-speed bit times (est.) */
0631 
0632 #define FRAME_TIME_BITS         12000L  /* frame = 1 millisecond */
0633 #define FRAME_TIME_MAX_BITS_ALLOC   (90L * FRAME_TIME_BITS / 100L)
0634 #define FRAME_TIME_MAX_USECS_ALLOC  (90L * FRAME_TIME_USECS / 100L)
0635 
0636 /*
0637  * Ceiling [nano/micro]seconds (typical) for that many bytes at high speed
0638  * ISO is a bit less, no ACK ... from USB 2.0 spec, 5.11.3 (and needed
0639  * to preallocate bandwidth)
0640  */
0641 #define USB2_HOST_DELAY 5   /* nsec, guess */
0642 #define HS_NSECS(bytes) (((55 * 8 * 2083) \
0643     + (2083UL * (3 + BitTime(bytes))))/1000 \
0644     + USB2_HOST_DELAY)
0645 #define HS_NSECS_ISO(bytes) (((38 * 8 * 2083) \
0646     + (2083UL * (3 + BitTime(bytes))))/1000 \
0647     + USB2_HOST_DELAY)
0648 #define HS_USECS(bytes)     NS_TO_US(HS_NSECS(bytes))
0649 #define HS_USECS_ISO(bytes) NS_TO_US(HS_NSECS_ISO(bytes))
0650 
0651 extern long usb_calc_bus_time(int speed, int is_input,
0652             int isoc, int bytecount);
0653 
0654 /*-------------------------------------------------------------------------*/
0655 
0656 extern void usb_set_device_state(struct usb_device *udev,
0657         enum usb_device_state new_state);
0658 
0659 /*-------------------------------------------------------------------------*/
0660 
0661 /* exported only within usbcore */
0662 
0663 extern struct idr usb_bus_idr;
0664 extern struct mutex usb_bus_idr_lock;
0665 extern wait_queue_head_t usb_kill_urb_queue;
0666 
0667 
0668 #define usb_endpoint_out(ep_dir)    (!((ep_dir) & USB_DIR_IN))
0669 
0670 #ifdef CONFIG_PM
0671 extern unsigned usb_wakeup_enabled_descendants(struct usb_device *udev);
0672 extern void usb_root_hub_lost_power(struct usb_device *rhdev);
0673 extern int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg);
0674 extern int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg);
0675 extern void usb_hcd_resume_root_hub(struct usb_hcd *hcd);
0676 #else
0677 static inline unsigned usb_wakeup_enabled_descendants(struct usb_device *udev)
0678 {
0679     return 0;
0680 }
0681 static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd)
0682 {
0683     return;
0684 }
0685 #endif /* CONFIG_PM */
0686 
0687 /*-------------------------------------------------------------------------*/
0688 
0689 #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE)
0690 
0691 struct usb_mon_operations {
0692     void (*urb_submit)(struct usb_bus *bus, struct urb *urb);
0693     void (*urb_submit_error)(struct usb_bus *bus, struct urb *urb, int err);
0694     void (*urb_complete)(struct usb_bus *bus, struct urb *urb, int status);
0695     /* void (*urb_unlink)(struct usb_bus *bus, struct urb *urb); */
0696 };
0697 
0698 extern const struct usb_mon_operations *mon_ops;
0699 
0700 static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb)
0701 {
0702     if (bus->monitored)
0703         (*mon_ops->urb_submit)(bus, urb);
0704 }
0705 
0706 static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb,
0707     int error)
0708 {
0709     if (bus->monitored)
0710         (*mon_ops->urb_submit_error)(bus, urb, error);
0711 }
0712 
0713 static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb,
0714         int status)
0715 {
0716     if (bus->monitored)
0717         (*mon_ops->urb_complete)(bus, urb, status);
0718 }
0719 
0720 int usb_mon_register(const struct usb_mon_operations *ops);
0721 void usb_mon_deregister(void);
0722 
0723 #else
0724 
0725 static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) {}
0726 static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb,
0727     int error) {}
0728 static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb,
0729         int status) {}
0730 
0731 #endif /* CONFIG_USB_MON || CONFIG_USB_MON_MODULE */
0732 
0733 /*-------------------------------------------------------------------------*/
0734 
0735 /* random stuff */
0736 
0737 /* This rwsem is for use only by the hub driver and ehci-hcd.
0738  * Nobody else should touch it.
0739  */
0740 extern struct rw_semaphore ehci_cf_port_reset_rwsem;
0741 
0742 /* Keep track of which host controller drivers are loaded */
0743 #define USB_UHCI_LOADED     0
0744 #define USB_OHCI_LOADED     1
0745 #define USB_EHCI_LOADED     2
0746 extern unsigned long usb_hcds_loaded;
0747 
0748 #endif /* __KERNEL__ */
0749 
0750 #endif /* __USB_CORE_HCD_H */