at v2.6.38 651 lines 23 kB view raw
1/* 2 * Copyright (c) 2001-2002 by David Brownell 3 * 4 * This program is free software; you can redistribute it and/or modify it 5 * under the terms of the GNU General Public License as published by the 6 * Free Software Foundation; either version 2 of the License, or (at your 7 * option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 11 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software Foundation, 16 * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 */ 18 19#ifndef __USB_CORE_HCD_H 20#define __USB_CORE_HCD_H 21 22#ifdef __KERNEL__ 23 24#include <linux/rwsem.h> 25 26#define MAX_TOPO_LEVEL 6 27 28/* This file contains declarations of usbcore internals that are mostly 29 * used or exposed by Host Controller Drivers. 30 */ 31 32/* 33 * USB Packet IDs (PIDs) 34 */ 35#define USB_PID_EXT 0xf0 /* USB 2.0 LPM ECN */ 36#define USB_PID_OUT 0xe1 37#define USB_PID_ACK 0xd2 38#define USB_PID_DATA0 0xc3 39#define USB_PID_PING 0xb4 /* USB 2.0 */ 40#define USB_PID_SOF 0xa5 41#define USB_PID_NYET 0x96 /* USB 2.0 */ 42#define USB_PID_DATA2 0x87 /* USB 2.0 */ 43#define USB_PID_SPLIT 0x78 /* USB 2.0 */ 44#define USB_PID_IN 0x69 45#define USB_PID_NAK 0x5a 46#define USB_PID_DATA1 0x4b 47#define USB_PID_PREAMBLE 0x3c /* Token mode */ 48#define USB_PID_ERR 0x3c /* USB 2.0: handshake mode */ 49#define USB_PID_SETUP 0x2d 50#define USB_PID_STALL 0x1e 51#define USB_PID_MDATA 0x0f /* USB 2.0 */ 52 53/*-------------------------------------------------------------------------*/ 54 55/* 56 * USB Host Controller Driver (usb_hcd) framework 57 * 58 * Since "struct usb_bus" is so thin, you can't share much code in it. 59 * This framework is a layer over that, and should be more sharable. 60 * 61 * @authorized_default: Specifies if new devices are authorized to 62 * connect by default or they require explicit 63 * user space authorization; this bit is settable 64 * through /sys/class/usb_host/X/authorized_default. 65 * For the rest is RO, so we don't lock to r/w it. 66 */ 67 68/*-------------------------------------------------------------------------*/ 69 70struct usb_hcd { 71 72 /* 73 * housekeeping 74 */ 75 struct usb_bus self; /* hcd is-a bus */ 76 struct kref kref; /* reference counter */ 77 78 const char *product_desc; /* product/vendor string */ 79 char irq_descr[24]; /* driver + bus # */ 80 81 struct timer_list rh_timer; /* drives root-hub polling */ 82 struct urb *status_urb; /* the current status urb */ 83#ifdef CONFIG_USB_SUSPEND 84 struct work_struct wakeup_work; /* for remote wakeup */ 85#endif 86 87 /* 88 * hardware info/state 89 */ 90 const struct hc_driver *driver; /* hw-specific hooks */ 91 92 /* Flags that need to be manipulated atomically because they can 93 * change while the host controller is running. Always use 94 * set_bit() or clear_bit() to change their values. 95 */ 96 unsigned long flags; 97#define HCD_FLAG_HW_ACCESSIBLE 0 /* at full power */ 98#define HCD_FLAG_SAW_IRQ 1 99#define HCD_FLAG_POLL_RH 2 /* poll for rh status? */ 100#define HCD_FLAG_POLL_PENDING 3 /* status has changed? */ 101#define HCD_FLAG_WAKEUP_PENDING 4 /* root hub is resuming? */ 102 103 /* The flags can be tested using these macros; they are likely to 104 * be slightly faster than test_bit(). 105 */ 106#define HCD_HW_ACCESSIBLE(hcd) ((hcd)->flags & (1U << HCD_FLAG_HW_ACCESSIBLE)) 107#define HCD_SAW_IRQ(hcd) ((hcd)->flags & (1U << HCD_FLAG_SAW_IRQ)) 108#define HCD_POLL_RH(hcd) ((hcd)->flags & (1U << HCD_FLAG_POLL_RH)) 109#define HCD_POLL_PENDING(hcd) ((hcd)->flags & (1U << HCD_FLAG_POLL_PENDING)) 110#define HCD_WAKEUP_PENDING(hcd) ((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING)) 111 112 /* Flags that get set only during HCD registration or removal. */ 113 unsigned rh_registered:1;/* is root hub registered? */ 114 unsigned rh_pollable:1; /* may we poll the root hub? */ 115 unsigned msix_enabled:1; /* driver has MSI-X enabled? */ 116 117 /* The next flag is a stopgap, to be removed when all the HCDs 118 * support the new root-hub polling mechanism. */ 119 unsigned uses_new_polling:1; 120 unsigned wireless:1; /* Wireless USB HCD */ 121 unsigned authorized_default:1; 122 unsigned has_tt:1; /* Integrated TT in root hub */ 123 124 int irq; /* irq allocated */ 125 void __iomem *regs; /* device memory/io */ 126 u64 rsrc_start; /* memory/io resource start */ 127 u64 rsrc_len; /* memory/io resource length */ 128 unsigned power_budget; /* in mA, 0 = no limit */ 129 130 /* bandwidth_mutex should be taken before adding or removing 131 * any new bus bandwidth constraints: 132 * 1. Before adding a configuration for a new device. 133 * 2. Before removing the configuration to put the device into 134 * the addressed state. 135 * 3. Before selecting a different configuration. 136 * 4. Before selecting an alternate interface setting. 137 * 138 * bandwidth_mutex should be dropped after a successful control message 139 * to the device, or resetting the bandwidth after a failed attempt. 140 */ 141 struct mutex bandwidth_mutex; 142 143 144#define HCD_BUFFER_POOLS 4 145 struct dma_pool *pool[HCD_BUFFER_POOLS]; 146 147 int state; 148# define __ACTIVE 0x01 149# define __SUSPEND 0x04 150# define __TRANSIENT 0x80 151 152# define HC_STATE_HALT 0 153# define HC_STATE_RUNNING (__ACTIVE) 154# define HC_STATE_QUIESCING (__SUSPEND|__TRANSIENT|__ACTIVE) 155# define HC_STATE_RESUMING (__SUSPEND|__TRANSIENT) 156# define HC_STATE_SUSPENDED (__SUSPEND) 157 158#define HC_IS_RUNNING(state) ((state) & __ACTIVE) 159#define HC_IS_SUSPENDED(state) ((state) & __SUSPEND) 160 161 /* more shared queuing code would be good; it should support 162 * smarter scheduling, handle transaction translators, etc; 163 * input size of periodic table to an interrupt scheduler. 164 * (ohci 32, uhci 1024, ehci 256/512/1024). 165 */ 166 167 /* The HC driver's private data is stored at the end of 168 * this structure. 169 */ 170 unsigned long hcd_priv[0] 171 __attribute__ ((aligned(sizeof(unsigned long)))); 172}; 173 174/* 2.4 does this a bit differently ... */ 175static inline struct usb_bus *hcd_to_bus(struct usb_hcd *hcd) 176{ 177 return &hcd->self; 178} 179 180static inline struct usb_hcd *bus_to_hcd(struct usb_bus *bus) 181{ 182 return container_of(bus, struct usb_hcd, self); 183} 184 185struct hcd_timeout { /* timeouts we allocate */ 186 struct list_head timeout_list; 187 struct timer_list timer; 188}; 189 190/*-------------------------------------------------------------------------*/ 191 192 193struct hc_driver { 194 const char *description; /* "ehci-hcd" etc */ 195 const char *product_desc; /* product/vendor string */ 196 size_t hcd_priv_size; /* size of private data */ 197 198 /* irq handler */ 199 irqreturn_t (*irq) (struct usb_hcd *hcd); 200 201 int flags; 202#define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */ 203#define HCD_LOCAL_MEM 0x0002 /* HC needs local memory */ 204#define HCD_USB11 0x0010 /* USB 1.1 */ 205#define HCD_USB2 0x0020 /* USB 2.0 */ 206#define HCD_USB3 0x0040 /* USB 3.0 */ 207#define HCD_MASK 0x0070 208 209 /* called to init HCD and root hub */ 210 int (*reset) (struct usb_hcd *hcd); 211 int (*start) (struct usb_hcd *hcd); 212 213 /* NOTE: these suspend/resume calls relate to the HC as 214 * a whole, not just the root hub; they're for PCI bus glue. 215 */ 216 /* called after suspending the hub, before entering D3 etc */ 217 int (*pci_suspend)(struct usb_hcd *hcd, bool do_wakeup); 218 219 /* called after entering D0 (etc), before resuming the hub */ 220 int (*pci_resume)(struct usb_hcd *hcd, bool hibernated); 221 222 /* cleanly make HCD stop writing memory and doing I/O */ 223 void (*stop) (struct usb_hcd *hcd); 224 225 /* shutdown HCD */ 226 void (*shutdown) (struct usb_hcd *hcd); 227 228 /* return current frame number */ 229 int (*get_frame_number) (struct usb_hcd *hcd); 230 231 /* manage i/o requests, device state */ 232 int (*urb_enqueue)(struct usb_hcd *hcd, 233 struct urb *urb, gfp_t mem_flags); 234 int (*urb_dequeue)(struct usb_hcd *hcd, 235 struct urb *urb, int status); 236 237 /* hw synch, freeing endpoint resources that urb_dequeue can't */ 238 void (*endpoint_disable)(struct usb_hcd *hcd, 239 struct usb_host_endpoint *ep); 240 241 /* (optional) reset any endpoint state such as sequence number 242 and current window */ 243 void (*endpoint_reset)(struct usb_hcd *hcd, 244 struct usb_host_endpoint *ep); 245 246 /* root hub support */ 247 int (*hub_status_data) (struct usb_hcd *hcd, char *buf); 248 int (*hub_control) (struct usb_hcd *hcd, 249 u16 typeReq, u16 wValue, u16 wIndex, 250 char *buf, u16 wLength); 251 int (*bus_suspend)(struct usb_hcd *); 252 int (*bus_resume)(struct usb_hcd *); 253 int (*start_port_reset)(struct usb_hcd *, unsigned port_num); 254 255 /* force handover of high-speed port to full-speed companion */ 256 void (*relinquish_port)(struct usb_hcd *, int); 257 /* has a port been handed over to a companion? */ 258 int (*port_handed_over)(struct usb_hcd *, int); 259 260 /* CLEAR_TT_BUFFER completion callback */ 261 void (*clear_tt_buffer_complete)(struct usb_hcd *, 262 struct usb_host_endpoint *); 263 264 /* xHCI specific functions */ 265 /* Called by usb_alloc_dev to alloc HC device structures */ 266 int (*alloc_dev)(struct usb_hcd *, struct usb_device *); 267 /* Called by usb_disconnect to free HC device structures */ 268 void (*free_dev)(struct usb_hcd *, struct usb_device *); 269 /* Change a group of bulk endpoints to support multiple stream IDs */ 270 int (*alloc_streams)(struct usb_hcd *hcd, struct usb_device *udev, 271 struct usb_host_endpoint **eps, unsigned int num_eps, 272 unsigned int num_streams, gfp_t mem_flags); 273 /* Reverts a group of bulk endpoints back to not using stream IDs. 274 * Can fail if we run out of memory. 275 */ 276 int (*free_streams)(struct usb_hcd *hcd, struct usb_device *udev, 277 struct usb_host_endpoint **eps, unsigned int num_eps, 278 gfp_t mem_flags); 279 280 /* Bandwidth computation functions */ 281 /* Note that add_endpoint() can only be called once per endpoint before 282 * check_bandwidth() or reset_bandwidth() must be called. 283 * drop_endpoint() can only be called once per endpoint also. 284 * A call to xhci_drop_endpoint() followed by a call to 285 * xhci_add_endpoint() will add the endpoint to the schedule with 286 * possibly new parameters denoted by a different endpoint descriptor 287 * in usb_host_endpoint. A call to xhci_add_endpoint() followed by a 288 * call to xhci_drop_endpoint() is not allowed. 289 */ 290 /* Allocate endpoint resources and add them to a new schedule */ 291 int (*add_endpoint)(struct usb_hcd *, struct usb_device *, 292 struct usb_host_endpoint *); 293 /* Drop an endpoint from a new schedule */ 294 int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, 295 struct usb_host_endpoint *); 296 /* Check that a new hardware configuration, set using 297 * endpoint_enable and endpoint_disable, does not exceed bus 298 * bandwidth. This must be called before any set configuration 299 * or set interface requests are sent to the device. 300 */ 301 int (*check_bandwidth)(struct usb_hcd *, struct usb_device *); 302 /* Reset the device schedule to the last known good schedule, 303 * which was set from a previous successful call to 304 * check_bandwidth(). This reverts any add_endpoint() and 305 * drop_endpoint() calls since that last successful call. 306 * Used for when a check_bandwidth() call fails due to resource 307 * or bandwidth constraints. 308 */ 309 void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *); 310 /* Returns the hardware-chosen device address */ 311 int (*address_device)(struct usb_hcd *, struct usb_device *udev); 312 /* Notifies the HCD after a hub descriptor is fetched. 313 * Will block. 314 */ 315 int (*update_hub_device)(struct usb_hcd *, struct usb_device *hdev, 316 struct usb_tt *tt, gfp_t mem_flags); 317 int (*reset_device)(struct usb_hcd *, struct usb_device *); 318 /* Notifies the HCD after a device is connected and its 319 * address is set 320 */ 321 int (*update_device)(struct usb_hcd *, struct usb_device *); 322}; 323 324extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); 325extern int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb, 326 int status); 327extern void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb); 328 329extern int usb_hcd_submit_urb(struct urb *urb, gfp_t mem_flags); 330extern int usb_hcd_unlink_urb(struct urb *urb, int status); 331extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, 332 int status); 333extern void unmap_urb_setup_for_dma(struct usb_hcd *, struct urb *); 334extern void unmap_urb_for_dma(struct usb_hcd *, struct urb *); 335extern void usb_hcd_flush_endpoint(struct usb_device *udev, 336 struct usb_host_endpoint *ep); 337extern void usb_hcd_disable_endpoint(struct usb_device *udev, 338 struct usb_host_endpoint *ep); 339extern void usb_hcd_reset_endpoint(struct usb_device *udev, 340 struct usb_host_endpoint *ep); 341extern void usb_hcd_synchronize_unlinks(struct usb_device *udev); 342extern int usb_hcd_alloc_bandwidth(struct usb_device *udev, 343 struct usb_host_config *new_config, 344 struct usb_host_interface *old_alt, 345 struct usb_host_interface *new_alt); 346extern int usb_hcd_get_frame_number(struct usb_device *udev); 347 348extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver, 349 struct device *dev, const char *bus_name); 350extern struct usb_hcd *usb_get_hcd(struct usb_hcd *hcd); 351extern void usb_put_hcd(struct usb_hcd *hcd); 352extern int usb_add_hcd(struct usb_hcd *hcd, 353 unsigned int irqnum, unsigned long irqflags); 354extern void usb_remove_hcd(struct usb_hcd *hcd); 355 356struct platform_device; 357extern void usb_hcd_platform_shutdown(struct platform_device *dev); 358 359#ifdef CONFIG_PCI 360struct pci_dev; 361struct pci_device_id; 362extern int usb_hcd_pci_probe(struct pci_dev *dev, 363 const struct pci_device_id *id); 364extern void usb_hcd_pci_remove(struct pci_dev *dev); 365extern void usb_hcd_pci_shutdown(struct pci_dev *dev); 366 367#ifdef CONFIG_PM_SLEEP 368extern const struct dev_pm_ops usb_hcd_pci_pm_ops; 369#endif 370#endif /* CONFIG_PCI */ 371 372/* pci-ish (pdev null is ok) buffer alloc/mapping support */ 373int hcd_buffer_create(struct usb_hcd *hcd); 374void hcd_buffer_destroy(struct usb_hcd *hcd); 375 376void *hcd_buffer_alloc(struct usb_bus *bus, size_t size, 377 gfp_t mem_flags, dma_addr_t *dma); 378void hcd_buffer_free(struct usb_bus *bus, size_t size, 379 void *addr, dma_addr_t dma); 380 381/* generic bus glue, needed for host controllers that don't use PCI */ 382extern irqreturn_t usb_hcd_irq(int irq, void *__hcd); 383 384extern void usb_hc_died(struct usb_hcd *hcd); 385extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd); 386 387/* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */ 388#define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1) 389#define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep))) 390#define usb_settoggle(dev, ep, out, bit) \ 391 ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | \ 392 ((bit) << (ep))) 393 394/* -------------------------------------------------------------------------- */ 395 396/* Enumeration is only for the hub driver, or HCD virtual root hubs */ 397extern struct usb_device *usb_alloc_dev(struct usb_device *parent, 398 struct usb_bus *, unsigned port); 399extern int usb_new_device(struct usb_device *dev); 400extern void usb_disconnect(struct usb_device **); 401 402extern int usb_get_configuration(struct usb_device *dev); 403extern void usb_destroy_configuration(struct usb_device *dev); 404 405/*-------------------------------------------------------------------------*/ 406 407/* 408 * HCD Root Hub support 409 */ 410 411#include <linux/usb/ch11.h> 412 413/* 414 * As of USB 2.0, full/low speed devices are segregated into trees. 415 * One type grows from USB 1.1 host controllers (OHCI, UHCI etc). 416 * The other type grows from high speed hubs when they connect to 417 * full/low speed devices using "Transaction Translators" (TTs). 418 * 419 * TTs should only be known to the hub driver, and high speed bus 420 * drivers (only EHCI for now). They affect periodic scheduling and 421 * sometimes control/bulk error recovery. 422 */ 423 424struct usb_device; 425 426struct usb_tt { 427 struct usb_device *hub; /* upstream highspeed hub */ 428 int multi; /* true means one TT per port */ 429 unsigned think_time; /* think time in ns */ 430 431 /* for control/bulk error recovery (CLEAR_TT_BUFFER) */ 432 spinlock_t lock; 433 struct list_head clear_list; /* of usb_tt_clear */ 434 struct work_struct clear_work; 435}; 436 437struct usb_tt_clear { 438 struct list_head clear_list; 439 unsigned tt; 440 u16 devinfo; 441 struct usb_hcd *hcd; 442 struct usb_host_endpoint *ep; 443}; 444 445extern int usb_hub_clear_tt_buffer(struct urb *urb); 446extern void usb_ep0_reinit(struct usb_device *); 447 448/* (shifted) direction/type/recipient from the USB 2.0 spec, table 9.2 */ 449#define DeviceRequest \ 450 ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) 451#define DeviceOutRequest \ 452 ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) 453 454#define InterfaceRequest \ 455 ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) 456 457#define EndpointRequest \ 458 ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) 459#define EndpointOutRequest \ 460 ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) 461 462/* class requests from the USB 2.0 hub spec, table 11-15 */ 463/* GetBusState and SetHubDescriptor are optional, omitted */ 464#define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE) 465#define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE) 466#define GetHubDescriptor (0xa000 | USB_REQ_GET_DESCRIPTOR) 467#define GetHubStatus (0xa000 | USB_REQ_GET_STATUS) 468#define GetPortStatus (0xa300 | USB_REQ_GET_STATUS) 469#define SetHubFeature (0x2000 | USB_REQ_SET_FEATURE) 470#define SetPortFeature (0x2300 | USB_REQ_SET_FEATURE) 471 472 473/*-------------------------------------------------------------------------*/ 474 475/* class requests from USB 3.0 hub spec, table 10-5 */ 476#define SetHubDepth (0x3000 | HUB_SET_DEPTH) 477#define GetPortErrorCount (0x8000 | HUB_GET_PORT_ERR_COUNT) 478 479/* 480 * Generic bandwidth allocation constants/support 481 */ 482#define FRAME_TIME_USECS 1000L 483#define BitTime(bytecount) (7 * 8 * bytecount / 6) /* with integer truncation */ 484 /* Trying not to use worst-case bit-stuffing 485 * of (7/6 * 8 * bytecount) = 9.33 * bytecount */ 486 /* bytecount = data payload byte count */ 487 488#define NS_TO_US(ns) ((ns + 500L) / 1000L) 489 /* convert & round nanoseconds to microseconds */ 490 491 492/* 493 * Full/low speed bandwidth allocation constants/support. 494 */ 495#define BW_HOST_DELAY 1000L /* nanoseconds */ 496#define BW_HUB_LS_SETUP 333L /* nanoseconds */ 497 /* 4 full-speed bit times (est.) */ 498 499#define FRAME_TIME_BITS 12000L /* frame = 1 millisecond */ 500#define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L) 501#define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L) 502 503/* 504 * Ceiling [nano/micro]seconds (typical) for that many bytes at high speed 505 * ISO is a bit less, no ACK ... from USB 2.0 spec, 5.11.3 (and needed 506 * to preallocate bandwidth) 507 */ 508#define USB2_HOST_DELAY 5 /* nsec, guess */ 509#define HS_NSECS(bytes) (((55 * 8 * 2083) \ 510 + (2083UL * (3 + BitTime(bytes))))/1000 \ 511 + USB2_HOST_DELAY) 512#define HS_NSECS_ISO(bytes) (((38 * 8 * 2083) \ 513 + (2083UL * (3 + BitTime(bytes))))/1000 \ 514 + USB2_HOST_DELAY) 515#define HS_USECS(bytes) NS_TO_US(HS_NSECS(bytes)) 516#define HS_USECS_ISO(bytes) NS_TO_US(HS_NSECS_ISO(bytes)) 517 518extern long usb_calc_bus_time(int speed, int is_input, 519 int isoc, int bytecount); 520 521/*-------------------------------------------------------------------------*/ 522 523extern void usb_set_device_state(struct usb_device *udev, 524 enum usb_device_state new_state); 525 526/*-------------------------------------------------------------------------*/ 527 528/* exported only within usbcore */ 529 530extern struct list_head usb_bus_list; 531extern struct mutex usb_bus_list_lock; 532extern wait_queue_head_t usb_kill_urb_queue; 533 534extern int usb_find_interface_driver(struct usb_device *dev, 535 struct usb_interface *interface); 536 537#define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN)) 538 539#ifdef CONFIG_PM 540extern void usb_root_hub_lost_power(struct usb_device *rhdev); 541extern int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg); 542extern int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg); 543#endif /* CONFIG_PM */ 544 545#ifdef CONFIG_USB_SUSPEND 546extern void usb_hcd_resume_root_hub(struct usb_hcd *hcd); 547#else 548static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd) 549{ 550 return; 551} 552#endif /* CONFIG_USB_SUSPEND */ 553 554 555/* 556 * USB device fs stuff 557 */ 558 559#ifdef CONFIG_USB_DEVICEFS 560 561/* 562 * these are expected to be called from the USB core/hub thread 563 * with the kernel lock held 564 */ 565extern void usbfs_update_special(void); 566extern int usbfs_init(void); 567extern void usbfs_cleanup(void); 568 569#else /* CONFIG_USB_DEVICEFS */ 570 571static inline void usbfs_update_special(void) {} 572static inline int usbfs_init(void) { return 0; } 573static inline void usbfs_cleanup(void) { } 574 575#endif /* CONFIG_USB_DEVICEFS */ 576 577/*-------------------------------------------------------------------------*/ 578 579#if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE) 580 581struct usb_mon_operations { 582 void (*urb_submit)(struct usb_bus *bus, struct urb *urb); 583 void (*urb_submit_error)(struct usb_bus *bus, struct urb *urb, int err); 584 void (*urb_complete)(struct usb_bus *bus, struct urb *urb, int status); 585 /* void (*urb_unlink)(struct usb_bus *bus, struct urb *urb); */ 586}; 587 588extern struct usb_mon_operations *mon_ops; 589 590static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) 591{ 592 if (bus->monitored) 593 (*mon_ops->urb_submit)(bus, urb); 594} 595 596static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb, 597 int error) 598{ 599 if (bus->monitored) 600 (*mon_ops->urb_submit_error)(bus, urb, error); 601} 602 603static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb, 604 int status) 605{ 606 if (bus->monitored) 607 (*mon_ops->urb_complete)(bus, urb, status); 608} 609 610int usb_mon_register(struct usb_mon_operations *ops); 611void usb_mon_deregister(void); 612 613#else 614 615static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) {} 616static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb, 617 int error) {} 618static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb, 619 int status) {} 620 621#endif /* CONFIG_USB_MON || CONFIG_USB_MON_MODULE */ 622 623/*-------------------------------------------------------------------------*/ 624 625/* hub.h ... DeviceRemovable in 2.4.2-ac11, gone in 2.4.10 */ 626/* bleech -- resurfaced in 2.4.11 or 2.4.12 */ 627#define bitmap DeviceRemovable 628 629 630/*-------------------------------------------------------------------------*/ 631 632/* random stuff */ 633 634#define RUN_CONTEXT (in_irq() ? "in_irq" \ 635 : (in_interrupt() ? "in_interrupt" : "can sleep")) 636 637 638/* This rwsem is for use only by the hub driver and ehci-hcd. 639 * Nobody else should touch it. 640 */ 641extern struct rw_semaphore ehci_cf_port_reset_rwsem; 642 643/* Keep track of which host controller drivers are loaded */ 644#define USB_UHCI_LOADED 0 645#define USB_OHCI_LOADED 1 646#define USB_EHCI_LOADED 2 647extern unsigned long usb_hcds_loaded; 648 649#endif /* __KERNEL__ */ 650 651#endif /* __USB_CORE_HCD_H */