1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
29
30
31
32
33
34
35#define USB_PID_EXT 0xf0
36#define USB_PID_OUT 0xe1
37#define USB_PID_ACK 0xd2
38#define USB_PID_DATA0 0xc3
39#define USB_PID_PING 0xb4
40#define USB_PID_SOF 0xa5
41#define USB_PID_NYET 0x96
42#define USB_PID_DATA2 0x87
43#define USB_PID_SPLIT 0x78
44#define USB_PID_IN 0x69
45#define USB_PID_NAK 0x5a
46#define USB_PID_DATA1 0x4b
47#define USB_PID_PREAMBLE 0x3c
48#define USB_PID_ERR 0x3c
49#define USB_PID_SETUP 0x2d
50#define USB_PID_STALL 0x1e
51#define USB_PID_MDATA 0x0f
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70struct usb_hcd {
71
72
73
74
75 struct usb_bus self;
76 struct kref kref;
77
78 const char *product_desc;
79 char irq_descr[24];
80
81 struct timer_list rh_timer;
82 struct urb *status_urb;
83#ifdef CONFIG_PM
84 struct work_struct wakeup_work;
85#endif
86
87
88
89
90 const struct hc_driver *driver;
91
92
93 unsigned long flags;
94#define HCD_FLAG_HW_ACCESSIBLE 0x00000001
95#define HCD_FLAG_SAW_IRQ 0x00000002
96
97 unsigned rh_registered:1;
98
99
100
101 unsigned uses_new_polling:1;
102 unsigned poll_rh:1;
103 unsigned poll_pending:1;
104 unsigned wireless:1;
105 unsigned authorized_default:1;
106 unsigned has_tt:1;
107
108 int irq;
109 void __iomem *regs;
110 u64 rsrc_start;
111 u64 rsrc_len;
112 unsigned power_budget;
113
114#define HCD_BUFFER_POOLS 4
115 struct dma_pool *pool [HCD_BUFFER_POOLS];
116
117 int state;
118# define __ACTIVE 0x01
119# define __SUSPEND 0x04
120# define __TRANSIENT 0x80
121
122# define HC_STATE_HALT 0
123# define HC_STATE_RUNNING (__ACTIVE)
124# define HC_STATE_QUIESCING (__SUSPEND|__TRANSIENT|__ACTIVE)
125# define HC_STATE_RESUMING (__SUSPEND|__TRANSIENT)
126# define HC_STATE_SUSPENDED (__SUSPEND)
127
128#define HC_IS_RUNNING(state) ((state) & __ACTIVE)
129#define HC_IS_SUSPENDED(state) ((state) & __SUSPEND)
130
131
132
133
134
135
136
137
138
139
140 unsigned long hcd_priv[0]
141 __attribute__ ((aligned(sizeof(unsigned long))));
142};
143
144
145static inline struct usb_bus *hcd_to_bus(struct usb_hcd *hcd)
146{
147 return &hcd->self;
148}
149
150static inline struct usb_hcd *bus_to_hcd(struct usb_bus *bus)
151{
152 return container_of(bus, struct usb_hcd, self);
153}
154
155struct hcd_timeout {
156 struct list_head timeout_list;
157 struct timer_list timer;
158};
159
160
161
162
163struct hc_driver {
164 const char *description;
165 const char *product_desc;
166 size_t hcd_priv_size;
167
168
169 irqreturn_t (*irq) (struct usb_hcd *hcd);
170
171 int flags;
172#define HCD_MEMORY 0x0001
173#define HCD_LOCAL_MEM 0x0002
174#define HCD_USB11 0x0010
175#define HCD_USB2 0x0020
176#define HCD_USB3 0x0040
177#define HCD_MASK 0x0070
178
179
180 int (*reset) (struct usb_hcd *hcd);
181 int (*start) (struct usb_hcd *hcd);
182
183
184
185
186
187 int (*pci_suspend)(struct usb_hcd *hcd);
188
189
190 int (*pci_resume)(struct usb_hcd *hcd, bool hibernated);
191
192
193 void (*stop) (struct usb_hcd *hcd);
194
195
196 void (*shutdown) (struct usb_hcd *hcd);
197
198
199 int (*get_frame_number) (struct usb_hcd *hcd);
200
201
202 int (*urb_enqueue)(struct usb_hcd *hcd,
203 struct urb *urb, gfp_t mem_flags);
204 int (*urb_dequeue)(struct usb_hcd *hcd,
205 struct urb *urb, int status);
206
207
208 void (*endpoint_disable)(struct usb_hcd *hcd,
209 struct usb_host_endpoint *ep);
210
211
212
213 void (*endpoint_reset)(struct usb_hcd *hcd,
214 struct usb_host_endpoint *ep);
215
216
217 int (*hub_status_data) (struct usb_hcd *hcd, char *buf);
218 int (*hub_control) (struct usb_hcd *hcd,
219 u16 typeReq, u16 wValue, u16 wIndex,
220 char *buf, u16 wLength);
221 int (*bus_suspend)(struct usb_hcd *);
222 int (*bus_resume)(struct usb_hcd *);
223 int (*start_port_reset)(struct usb_hcd *, unsigned port_num);
224
225
226 void (*relinquish_port)(struct usb_hcd *, int);
227
228 int (*port_handed_over)(struct usb_hcd *, int);
229
230
231 void (*clear_tt_buffer_complete)(struct usb_hcd *,
232 struct usb_host_endpoint *);
233
234
235
236 int (*alloc_dev)(struct usb_hcd *, struct usb_device *);
237
238 void (*free_dev)(struct usb_hcd *, struct usb_device *);
239
240
241
242
243
244
245
246
247
248
249
250
251 int (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
252
253 int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);
254
255
256
257
258
259 int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
260
261
262
263
264
265
266
267 void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
268
269 int (*address_device)(struct usb_hcd *, struct usb_device *udev);
270
271
272
273 int (*update_hub_device)(struct usb_hcd *, struct usb_device *hdev,
274 struct usb_tt *tt, gfp_t mem_flags);
275};
276
277extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb);
278extern int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb,
279 int status);
280extern void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb);
281
282extern int usb_hcd_submit_urb(struct urb *urb, gfp_t mem_flags);
283extern int usb_hcd_unlink_urb(struct urb *urb, int status);
284extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb,
285 int status);
286extern void usb_hcd_flush_endpoint(struct usb_device *udev,
287 struct usb_host_endpoint *ep);
288extern void usb_hcd_disable_endpoint(struct usb_device *udev,
289 struct usb_host_endpoint *ep);
290extern void usb_hcd_reset_endpoint(struct usb_device *udev,
291 struct usb_host_endpoint *ep);
292extern void usb_hcd_synchronize_unlinks(struct usb_device *udev);
293extern int usb_hcd_check_bandwidth(struct usb_device *udev,
294 struct usb_host_config *new_config,
295 struct usb_interface *new_intf);
296extern int usb_hcd_get_frame_number(struct usb_device *udev);
297
298extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver,
299 struct device *dev, const char *bus_name);
300extern struct usb_hcd *usb_get_hcd(struct usb_hcd *hcd);
301extern void usb_put_hcd(struct usb_hcd *hcd);
302extern int usb_add_hcd(struct usb_hcd *hcd,
303 unsigned int irqnum, unsigned long irqflags);
304extern void usb_remove_hcd(struct usb_hcd *hcd);
305
306struct platform_device;
307extern void usb_hcd_platform_shutdown(struct platform_device *dev);
308
309#ifdef CONFIG_PCI
310struct pci_dev;
311struct pci_device_id;
312extern int usb_hcd_pci_probe(struct pci_dev *dev,
313 const struct pci_device_id *id);
314extern void usb_hcd_pci_remove(struct pci_dev *dev);
315extern void usb_hcd_pci_shutdown(struct pci_dev *dev);
316
317#ifdef CONFIG_PM_SLEEP
318extern struct dev_pm_ops usb_hcd_pci_pm_ops;
319#endif
320#endif
321
322
323int hcd_buffer_create(struct usb_hcd *hcd);
324void hcd_buffer_destroy(struct usb_hcd *hcd);
325
326void *hcd_buffer_alloc(struct usb_bus *bus, size_t size,
327 gfp_t mem_flags, dma_addr_t *dma);
328void hcd_buffer_free(struct usb_bus *bus, size_t size,
329 void *addr, dma_addr_t dma);
330
331
332extern irqreturn_t usb_hcd_irq(int irq, void *__hcd);
333
334extern void usb_hc_died(struct usb_hcd *hcd);
335extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd);
336
337
338#define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1)
339#define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep)))
340#define usb_settoggle(dev, ep, out, bit) \
341 ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | \
342 ((bit) << (ep)))
343
344
345
346
347extern struct usb_device *usb_alloc_dev(struct usb_device *parent,
348 struct usb_bus *, unsigned port);
349extern int usb_new_device(struct usb_device *dev);
350extern void usb_disconnect(struct usb_device **);
351
352extern int usb_get_configuration(struct usb_device *dev);
353extern void usb_destroy_configuration(struct usb_device *dev);
354
355
356
357
358
359
360
361#include "hub.h"
362
363
364#define DeviceRequest \
365 ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
366#define DeviceOutRequest \
367 ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
368
369#define InterfaceRequest \
370 ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
371
372#define EndpointRequest \
373 ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
374#define EndpointOutRequest \
375 ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
376
377
378
379#define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE)
380#define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE)
381#define GetHubDescriptor (0xa000 | USB_REQ_GET_DESCRIPTOR)
382#define GetHubStatus (0xa000 | USB_REQ_GET_STATUS)
383#define GetPortStatus (0xa300 | USB_REQ_GET_STATUS)
384#define SetHubFeature (0x2000 | USB_REQ_SET_FEATURE)
385#define SetPortFeature (0x2300 | USB_REQ_SET_FEATURE)
386
387
388
389
390
391
392
393#define FRAME_TIME_USECS 1000L
394#define BitTime(bytecount) (7 * 8 * bytecount / 6)
395
396
397
398
399#define NS_TO_US(ns) ((ns + 500L) / 1000L)
400
401
402
403
404
405
406#define BW_HOST_DELAY 1000L
407#define BW_HUB_LS_SETUP 333L
408
409
410#define FRAME_TIME_BITS 12000L
411#define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L)
412#define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L)
413
414
415
416
417
418
419#define USB2_HOST_DELAY 5
420#define HS_NSECS(bytes) (((55 * 8 * 2083) \
421 + (2083UL * (3 + BitTime(bytes))))/1000 \
422 + USB2_HOST_DELAY)
423#define HS_NSECS_ISO(bytes) (((38 * 8 * 2083) \
424 + (2083UL * (3 + BitTime(bytes))))/1000 \
425 + USB2_HOST_DELAY)
426#define HS_USECS(bytes) NS_TO_US (HS_NSECS(bytes))
427#define HS_USECS_ISO(bytes) NS_TO_US (HS_NSECS_ISO(bytes))
428
429extern long usb_calc_bus_time(int speed, int is_input,
430 int isoc, int bytecount);
431
432
433
434extern void usb_set_device_state(struct usb_device *udev,
435 enum usb_device_state new_state);
436
437
438
439
440
441extern struct list_head usb_bus_list;
442extern struct mutex usb_bus_list_lock;
443extern wait_queue_head_t usb_kill_urb_queue;
444
445extern int usb_find_interface_driver(struct usb_device *dev,
446 struct usb_interface *interface);
447
448#define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN))
449
450#ifdef CONFIG_PM
451extern void usb_hcd_resume_root_hub(struct usb_hcd *hcd);
452extern void usb_root_hub_lost_power(struct usb_device *rhdev);
453extern int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg);
454extern int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg);
455#else
456static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd)
457{
458 return;
459}
460#endif
461
462
463
464
465
466#ifdef CONFIG_USB_DEVICEFS
467
468
469
470
471
472extern void usbfs_update_special(void);
473extern int usbfs_init(void);
474extern void usbfs_cleanup(void);
475
476#else
477
478static inline void usbfs_update_special(void) {}
479static inline int usbfs_init(void) { return 0; }
480static inline void usbfs_cleanup(void) { }
481
482#endif
483
484
485
486#if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE)
487
488struct usb_mon_operations {
489 void (*urb_submit)(struct usb_bus *bus, struct urb *urb);
490 void (*urb_submit_error)(struct usb_bus *bus, struct urb *urb, int err);
491 void (*urb_complete)(struct usb_bus *bus, struct urb *urb, int status);
492
493};
494
495extern struct usb_mon_operations *mon_ops;
496
497static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb)
498{
499 if (bus->monitored)
500 (*mon_ops->urb_submit)(bus, urb);
501}
502
503static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb,
504 int error)
505{
506 if (bus->monitored)
507 (*mon_ops->urb_submit_error)(bus, urb, error);
508}
509
510static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb,
511 int status)
512{
513 if (bus->monitored)
514 (*mon_ops->urb_complete)(bus, urb, status);
515}
516
517int usb_mon_register(struct usb_mon_operations *ops);
518void usb_mon_deregister(void);
519
520#else
521
522static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) {}
523static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb,
524 int error) {}
525static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb,
526 int status) {}
527
528#endif
529
530
531
532
533
534#define bitmap DeviceRemovable
535
536
537
538
539
540
541#define RUN_CONTEXT (in_irq() ? "in_irq" \
542 : (in_interrupt() ? "in_interrupt" : "can sleep"))
543
544
545
546
547
548extern struct rw_semaphore ehci_cf_port_reset_rwsem;
549
550
551#define USB_UHCI_LOADED 0
552#define USB_OHCI_LOADED 1
553#define USB_EHCI_LOADED 2
554extern unsigned long usb_hcds_loaded;
555
556#endif
557
558#endif
559