1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifdef __KERNEL__
21
22
23
24
25
26
27
28
29#define USB_PID_UNDEF_0 0xf0
30#define USB_PID_OUT 0xe1
31#define USB_PID_ACK 0xd2
32#define USB_PID_DATA0 0xc3
33#define USB_PID_PING 0xb4
34#define USB_PID_SOF 0xa5
35#define USB_PID_NYET 0x96
36#define USB_PID_DATA2 0x87
37#define USB_PID_SPLIT 0x78
38#define USB_PID_IN 0x69
39#define USB_PID_NAK 0x5a
40#define USB_PID_DATA1 0x4b
41#define USB_PID_PREAMBLE 0x3c
42#define USB_PID_ERR 0x3c
43#define USB_PID_SETUP 0x2d
44#define USB_PID_STALL 0x1e
45#define USB_PID_MDATA 0x0f
46
47
48
49
50
51
52
53
54
55
56
57
58struct usb_hcd {
59
60
61
62
63 struct usb_bus self;
64
65 const char *product_desc;
66 const char *description;
67
68 struct timer_list rh_timer;
69 struct list_head dev_list;
70 struct work_struct work;
71
72
73
74
75 struct hc_driver *driver;
76 unsigned saw_irq : 1;
77 int irq;
78 void *regs;
79
80#ifdef CONFIG_PCI
81 int region;
82 u32 pci_state [16];
83#endif
84
85#define HCD_BUFFER_POOLS 4
86 struct dma_pool *pool [HCD_BUFFER_POOLS];
87
88 int state;
89# define __ACTIVE 0x01
90# define __SUSPEND 0x04
91# define __TRANSIENT 0x80
92
93# define USB_STATE_HALT 0
94# define USB_STATE_RUNNING (__ACTIVE)
95# define USB_STATE_QUIESCING (__SUSPEND|__TRANSIENT|__ACTIVE)
96# define USB_STATE_RESUMING (__SUSPEND|__TRANSIENT)
97# define USB_STATE_SUSPENDED (__SUSPEND)
98
99#define HCD_IS_RUNNING(state) ((state) & __ACTIVE)
100#define HCD_IS_SUSPENDED(state) ((state) & __SUSPEND)
101
102
103
104
105
106
107};
108
109
110static inline struct usb_bus *hcd_to_bus (struct usb_hcd *hcd)
111{
112 return &hcd->self;
113}
114
115
116struct hcd_dev {
117 struct list_head dev_list;
118 struct list_head urb_list;
119
120
121 void *ep[32];
122};
123
124
125
126struct hcd_timeout {
127 struct list_head timeout_list;
128 struct timer_list timer;
129};
130
131
132
133
134
135
136
137
138struct usb_operations {
139 int (*allocate)(struct usb_device *);
140 int (*deallocate)(struct usb_device *);
141 int (*get_frame_number) (struct usb_device *usb_dev);
142 int (*submit_urb) (struct urb *urb, int mem_flags);
143 int (*unlink_urb) (struct urb *urb);
144
145
146 void *(*buffer_alloc)(struct usb_bus *bus, size_t size,
147 int mem_flags,
148 dma_addr_t *dma);
149 void (*buffer_free)(struct usb_bus *bus, size_t size,
150 void *addr, dma_addr_t dma);
151
152 void (*disable)(struct usb_device *udev, int bEndpointAddress);
153};
154
155
156
157struct pt_regs;
158
159struct hc_driver {
160 const char *description;
161
162
163 irqreturn_t (*irq) (struct usb_hcd *hcd, struct pt_regs *regs);
164
165 int flags;
166#define HCD_MEMORY 0x0001
167#define HCD_USB11 0x0010
168#define HCD_USB2 0x0020
169
170
171 int (*reset) (struct usb_hcd *hcd);
172 int (*start) (struct usb_hcd *hcd);
173
174
175 int (*suspend) (struct usb_hcd *hcd, u32 state);
176
177
178 int (*resume) (struct usb_hcd *hcd);
179
180
181 void (*stop) (struct usb_hcd *hcd);
182
183
184 int (*get_frame_number) (struct usb_hcd *hcd);
185
186
187 struct usb_hcd *(*hcd_alloc) (void);
188 void (*hcd_free) (struct usb_hcd *hcd);
189
190
191 int (*urb_enqueue) (struct usb_hcd *hcd, struct urb *urb,
192 int mem_flags);
193 int (*urb_dequeue) (struct usb_hcd *hcd, struct urb *urb);
194
195
196 void (*endpoint_disable)(struct usb_hcd *hcd,
197 struct hcd_dev *dev, int bEndpointAddress);
198
199
200 int (*hub_status_data) (struct usb_hcd *hcd, char *buf);
201 int (*hub_control) (struct usb_hcd *hcd,
202 u16 typeReq, u16 wValue, u16 wIndex,
203 char *buf, u16 wLength);
204};
205
206extern void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb, struct pt_regs *regs);
207extern void usb_bus_init (struct usb_bus *bus);
208extern void usb_rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb);
209
210#ifdef CONFIG_PCI
211struct pci_dev;
212struct pci_device_id;
213extern int usb_hcd_pci_probe (struct pci_dev *dev,
214 const struct pci_device_id *id);
215extern void usb_hcd_pci_remove (struct pci_dev *dev);
216
217#ifdef CONFIG_PM
218extern int usb_hcd_pci_suspend (struct pci_dev *dev, u32 state);
219extern int usb_hcd_pci_resume (struct pci_dev *dev);
220#endif
221
222#endif
223
224
225int hcd_buffer_create (struct usb_hcd *hcd);
226void hcd_buffer_destroy (struct usb_hcd *hcd);
227
228void *hcd_buffer_alloc (struct usb_bus *bus, size_t size,
229 int mem_flags, dma_addr_t *dma);
230void hcd_buffer_free (struct usb_bus *bus, size_t size,
231 void *addr, dma_addr_t dma);
232
233
234extern struct usb_operations usb_hcd_operations;
235extern irqreturn_t usb_hcd_irq (int irq, void *__hcd, struct pt_regs *r);
236extern void usb_hc_died (struct usb_hcd *hcd);
237
238
239
240
241extern struct usb_device *usb_alloc_dev(struct usb_device *parent,
242 struct usb_bus *, unsigned port);
243extern int usb_new_device(struct usb_device *dev);
244extern void usb_choose_address(struct usb_device *dev);
245extern void usb_disconnect(struct usb_device **);
246
247
248extern int usb_get_configuration(struct usb_device *dev);
249extern void usb_destroy_configuration(struct usb_device *dev);
250extern int usb_set_address(struct usb_device *dev);
251
252
253#define usb_snddefctrl(dev) ((PIPE_CONTROL << 30))
254#define usb_rcvdefctrl(dev) ((PIPE_CONTROL << 30) | USB_DIR_IN)
255
256
257
258
259
260
261
262#include "hub.h"
263
264
265#define DeviceRequest \
266 ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
267#define DeviceOutRequest \
268 ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
269
270#define InterfaceRequest \
271 ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
272
273#define EndpointRequest \
274 ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
275#define EndpointOutRequest \
276 ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
277
278
279#define DEVICE_REMOTE_WAKEUP 1
280#define ENDPOINT_HALT 0
281
282
283
284#define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE)
285#define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE)
286#define GetHubDescriptor (0xa000 | USB_REQ_GET_DESCRIPTOR)
287#define GetHubStatus (0xa000 | USB_REQ_GET_STATUS)
288#define GetPortStatus (0xa300 | USB_REQ_GET_STATUS)
289#define SetHubFeature (0x2000 | USB_REQ_SET_FEATURE)
290#define SetPortFeature (0x2300 | USB_REQ_SET_FEATURE)
291
292
293
294
295
296
297
298#define FRAME_TIME_USECS 1000L
299#define BitTime(bytecount) (7 * 8 * bytecount / 6)
300
301
302
303
304#define NS_TO_US(ns) ((ns + 500L) / 1000L)
305
306
307extern void usb_claim_bandwidth (struct usb_device *dev, struct urb *urb,
308 int bustime, int isoc);
309extern void usb_release_bandwidth (struct usb_device *dev, struct urb *urb,
310 int isoc);
311
312
313
314
315#define BW_HOST_DELAY 1000L
316#define BW_HUB_LS_SETUP 333L
317
318
319#define FRAME_TIME_BITS 12000L
320#define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L)
321#define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L)
322
323extern int usb_check_bandwidth (struct usb_device *dev, struct urb *urb);
324
325
326
327
328
329
330#define USB2_HOST_DELAY 5
331#define HS_USECS(bytes) NS_TO_US ( ((55 * 8 * 2083)/1000) \
332 + ((2083UL * (3167 + BitTime (bytes)))/1000) \
333 + USB2_HOST_DELAY)
334#define HS_USECS_ISO(bytes) NS_TO_US ( ((long)(38 * 8 * 2.083)) \
335 + ((2083UL * (3167 + BitTime (bytes)))/1000) \
336 + USB2_HOST_DELAY)
337
338extern long usb_calc_bus_time (int speed, int is_input,
339 int isoc, int bytecount);
340
341
342
343extern struct usb_bus *usb_alloc_bus (struct usb_operations *);
344
345extern int usb_register_bus (struct usb_bus *);
346extern void usb_deregister_bus (struct usb_bus *);
347
348extern int usb_register_root_hub (struct usb_device *usb_dev,
349 struct device *parent_dev);
350
351
352static inline int hcd_register_root (struct usb_hcd *hcd)
353{
354 return usb_register_root_hub (
355 hcd_to_bus (hcd)->root_hub, hcd->self.controller);
356}
357
358
359
360
361
362extern struct list_head usb_bus_list;
363extern struct semaphore usb_bus_list_lock;
364
365extern struct usb_bus *usb_bus_get (struct usb_bus *bus);
366extern void usb_bus_put (struct usb_bus *bus);
367
368extern int usb_find_interface_driver (struct usb_device *dev,
369 struct usb_interface *interface);
370
371#define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep)))
372
373#define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN))
374
375
376
377
378
379#ifdef CONFIG_USB_DEVICEFS
380
381
382
383
384
385extern void usbfs_add_bus(struct usb_bus *bus);
386extern void usbfs_remove_bus(struct usb_bus *bus);
387extern void usbfs_add_device(struct usb_device *dev);
388extern void usbfs_remove_device(struct usb_device *dev);
389extern void usbfs_update_special (void);
390
391extern int usbfs_init(void);
392extern void usbfs_cleanup(void);
393
394#else
395
396static inline void usbfs_add_bus(struct usb_bus *bus) {}
397static inline void usbfs_remove_bus(struct usb_bus *bus) {}
398static inline void usbfs_add_device(struct usb_device *dev) {}
399static inline void usbfs_remove_device(struct usb_device *dev) {}
400static inline void usbfs_update_special (void) {}
401
402static inline int usbfs_init(void) { return 0; }
403static inline void usbfs_cleanup(void) { }
404
405#endif
406
407
408
409
410
411#define bitmap DeviceRemovable
412
413
414
415
416
417
418#define RUN_CONTEXT (in_irq () ? "in_irq" \
419 : (in_interrupt () ? "in_interrupt" : "can sleep"))
420
421
422#endif
423
424