1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and your customers, any assistance
62 // of any kind whatsoever, or any information; or
63 // (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 // of Taiwan, R.O.C., excluding its conflict of law rules.
67 // Any and all dispute arising out hereof or related hereto shall be finally
68 // settled by arbitration referred to the Chinese Arbitration Association,
69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 // Rules of the Association by three (3) arbitrators appointed in accordance
71 // with the said Rules.
72 // The place of arbitration shall be in Taipei, Taiwan and the language shall
73 // be English.
74 // The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78
79 #include <MsCommon.h>
80
81 #include "include/drvPorts.h"
82 #include "include/drvConfig.h"
83 #include "include/drvCompiler.h"
84 #include "include/drvErrno.h"
85 //#include "../include/ports.h"
86 #include "include/drvIO.h"
87 #include "include/drvTimer.h"
88 #include "include/drvList.h"
89 #include "include/drvKernel.h"
90 #include "include/drvBitops.h"
91 #include "include/drvCPE_AMBA.h"
92
93 #ifdef CONFIG_USB_DEBUG
94 #define DEBUG
95 #else
96 #undef DEBUG
97 #endif
98
99 #ifdef DEBUG
100 #define u_err(x,...) printk(x,__VA_ARGS__)
101 #else
102 #define u_err(x,...)
103 #endif
104
105 // USB related header files
106 #include "include/drvUSB.h"
107 #include "drvUSBCore.h"
108 #include "drvHCD.h"
109 #include "drvUSB.h"
110
111 extern int usb_hub_init(void);
112 extern void usb_hub_cleanup(void);
113 extern int usb_major_init(void);
114 extern void usb_major_cleanup(void);
115 extern void usb_host_init(void);
116 extern void usb_host_cleanup(void);
117
118 int USB_core_lock=0;
119 int Timer_task_lock=0;
120 MS_U32 Invalid_HidDevs = 0;
121
122 #ifdef CONFIG_OTG
123 BOOL gOPT_Device_attached = FALSE;
124 #endif
125
126 int nousb; /* Disable USB when built into kernel image */
127 /* Not honored on modular build */
128
generic_probe(struct device_s * dev)129 static int generic_probe (struct device_s *dev)
130 {
131 return 0;
132 }
generic_remove(struct device_s * dev)133 static int generic_remove (struct device_s *dev)
134 {
135 return 0;
136 }
137
138 static struct device_driver usb_generic_driver = {
139 "usb_gdrv",
140 &usb_bus_type,
141 {NULL,NULL},
142 {&usb_generic_driver.devices,&usb_generic_driver.devices},
143 generic_probe,
144 generic_remove,
145 NULL,
146 NULL,
147 NULL
148 };
149
150 static int usb_generic_driver_data;
151
152 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
153 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
154 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
155 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
156 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
157 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
158 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
159 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
160 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
161 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
162 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
163 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
164 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
165 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
166 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
167 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
168 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
169 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
170 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
171 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
172 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
173 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
174 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
175 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
176 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
177 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
178 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
179 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
180 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
181 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
182 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
183 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
184 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
185 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
186 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
187 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
188 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
189 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
190 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
191 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
192 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
193 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
194 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
195 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
196 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
197 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
198 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
199 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
200 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
201 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
202 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
203 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
204 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
205 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
206 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
207 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
208 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
209 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
210 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
211 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
212 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
213 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
214 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
215 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
216 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
217 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
218 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
219 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
220 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
221 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
222 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
223 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
224 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
225 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
226 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
227 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
228 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
229 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
230 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
231 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
232 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
233 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
234 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
235 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
236 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
237 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
238 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
239 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
240 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
241 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
242 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
243 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
244 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
245 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
246 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
247 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
248
usb_probe_interface(struct device_s * dev)249 int usb_probe_interface(struct device_s *dev)
250 {
251 struct usb_interface * intf = to_usb_interface(dev);
252 struct usb_driver * driver = to_usb_driver(dev->driver);
253 const struct usb_device_id *id;
254 int error = -ENODEV;
255
256 dev_dbg(dev, "%s\n", __FUNCTION__);
257
258 if (!driver->probe)
259 return error;
260
261 id = usb_match_id (intf, driver->id_table);
262 if (id) {
263 dev_dbg (dev, "%s - got id\n", __FUNCTION__);
264 down (&driver->serialize);
265 error = driver->probe (intf, id);
266 up (&driver->serialize);
267 }
268 if (!error)
269 intf->driver = driver;
270
271 return error;
272 }
273 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
274 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
275 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
276 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
277 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
278 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
279 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
280 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
281 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
282 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
283 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
284 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
285 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
286 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
287 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
288 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
289 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
290 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
291 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
292 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
293 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
294 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
295 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
296 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
297 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
298 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
299 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
300 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
301 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
302 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
303 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
304 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
305 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
306 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
307 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
308 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
309 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
310 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
311 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
312 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
313 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
314 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
315 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
316 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
317 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
318 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
319 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
320 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
321 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
322 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
323 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
324 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
325 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
326 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
327 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
328 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
329 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
330 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
331 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
332 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
333 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
334 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
335 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
336 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
337 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
338 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
339 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
340 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
341 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
342 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
343 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
344 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
345 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
346 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
347 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
348 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
349 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
350 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
351 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
352 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
353 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
354 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
355 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
356 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
357 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
358 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
359 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
360 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
361 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
362 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
363 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
364 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
365 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
366 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
367 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
368 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
369
usb_unbind_interface(struct device_s * dev)370 int usb_unbind_interface(struct device_s *dev)
371 {
372 struct usb_interface *intf = to_usb_interface(dev);
373 struct usb_driver *driver = to_usb_driver(dev->driver);
374
375 //diag_printf("usb_unbind_interface()\n");
376
377 down(&driver->serialize);
378
379 /* release all urbs for this interface */
380 usb_disable_interface(interface_to_usbdev(intf), intf);
381
382 if (intf->driver && intf->driver->disconnect)
383 intf->driver->disconnect(intf);
384
385 /* force a release and re-initialize the interface */
386 usb_driver_release_interface(driver, intf);
387
388 up(&driver->serialize);
389
390 return 0;
391 }
392 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
393 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
394 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
395 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
396 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
397 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
398 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
399 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
400 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
401 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
402 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
403 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
404 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
405 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
406 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
407 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
408 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
409 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
410 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
411 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
412 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
413 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
414 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
415 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
416 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
417 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
418 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
419 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
420 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
421 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
422 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
423 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
424 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
425 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
426 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
427 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
428 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
429 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
430 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
431 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
432 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
433 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
434 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
435 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
436 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
437 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
438 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
439 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
440 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
441 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
442 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
443 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
444 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
445 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
446 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
447 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
448 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
449 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
450 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
451 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
452 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
453 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
454 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
455 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
456 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
457 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
458 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
459 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
460 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
461 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
462 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
463 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
464 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
465 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
466 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
467 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
468 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
469 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
470 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
471 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
472 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
473 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
474 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
475 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
476 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
477 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
478 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
479 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
480 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
481 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
482 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
483 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
484 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
485 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
486 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
487 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
488
usb_register(struct usb_driver * new_driver)489 int usb_register(struct usb_driver *new_driver)
490 {
491 int retval = 0;
492
493 if (nousb)
494 return -ENODEV;
495
496 memcpy(new_driver->driver.name, new_driver->name, sizeof(new_driver->name));
497 new_driver->driver.bus = &usb_bus_type;
498 new_driver->driver.probe = usb_probe_interface;
499 new_driver->driver.remove = usb_unbind_interface;
500
501 init_MUTEX(&new_driver->serialize);
502 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
503 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
504 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
505 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
506 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
507 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
508 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
509 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
510 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
511 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
512 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
513 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
514 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
515 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
516 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
517 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
518
519 retval = driver_register(&new_driver->driver);
520
521 if (!retval) {
522 usb_info("registered new driver %s", new_driver->name);
523 usbfs_update_special();
524 } else {
525 usb_err("problem %d when registering driver %s",
526 retval, new_driver->name);
527 }
528
529 return retval;
530 }
531 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
532 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
533 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
534 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
535 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
536 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
537 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
538 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
539 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
540 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
541 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
542 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
543 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
544 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
545 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
546 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
547 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
548 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
549 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
550 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
551 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
552 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
553 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
554 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
555 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
556 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
557 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
558 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
559 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
560 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
561 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
562 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
563 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
564 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
565 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
566 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
567 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
568 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
569 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
570 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
571 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
572 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
573 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
574 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
575 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
576 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
577 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
578 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
579 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
580 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
581 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
582 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
583 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
584 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
585 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
586 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
587 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
588 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
589 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
590 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
591 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
592 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
593 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
594 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
595 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
596 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
597 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
598 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
599 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
600 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
601 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
602 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
603 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
604 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
605 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
606 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
607 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
608 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
609 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
610 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
611 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
612 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
613 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
614 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
615 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
616 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
617 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
618 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
619 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
620 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
621 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
622 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
623 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
624 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
625 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
626 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
627
628 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
629 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
630 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
631 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
632 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
633 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
634 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
635 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
636 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
637 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
638 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
639 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
640 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
641 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
642 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
643 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
644 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
645 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
646 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
647 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
648 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
649 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
650 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
651 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
652 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
653 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
654 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
655 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
656 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
657 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
658 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
659 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
660 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
661 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
662 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
663 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
664 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
665 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
666 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
667 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
668 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
669 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
670 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
671 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
672 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
673 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
674 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
675 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
676 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
677 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
678 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
679 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
680 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
681 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
682 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
683 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
684 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
685 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
686 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
687 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
688 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
689 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
690 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
691 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
692 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
693 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
694 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
695 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
696 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
697 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
698 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
699 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
700 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
701 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
702 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
703 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
704 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
705 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
706 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
707 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
708 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
709 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
710 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
711 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
712 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
713 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
714 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
715 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
716 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
717 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
718 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
719 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
720 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
721 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
722 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
723 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_deregister(struct usb_driver * driver)724 void usb_deregister(struct usb_driver *driver)
725 {
726 usb_info("deregistering driver %s", driver->name);
727
728 driver_unregister (&driver->driver);
729
730 usbfs_update_special();
731 }
732 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
733 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
734 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
735 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
736 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
737 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
738 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
739 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
740 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
741 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
742 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
743 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
744 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
745 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
746 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
747 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
748 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
749 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
750 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
751 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
752 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
753 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
754 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
755 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
756 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
757 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
758 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
759 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
760 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
761 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
762 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
763 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
764 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
765 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
766 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
767 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
768 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
769 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
770 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
771 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
772 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
773 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
774 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
775 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
776 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
777 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
778 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
779 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
780 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
781 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
782 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
783 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
784 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
785 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
786 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
787 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
788 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
789 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
790 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
791 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
792 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
793 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
794 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
795 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
796 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
797 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
798 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
799 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
800 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
801 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
802 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
803 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
804 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
805 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
806 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
807 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
808 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
809 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
810 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
811 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
812 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
813 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
814 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
815 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
816 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
817 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
818 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
819 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
820 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
821 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
822 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
823 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
824 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
825 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
826 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
827 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
828
829
usb_ifnum_to_if(struct usb_device * dev,int ifnum)830 struct usb_interface *usb_ifnum_to_if(struct usb_device *dev, int ifnum)
831 {
832 int i;
833
834 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++)
835 if (dev->actconfig->interface[i]->altsetting[0]
836 .desc.bInterfaceNumber == ifnum)
837 return dev->actconfig->interface[i];
838
839 return NULL;
840 }
841 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
842 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
843 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
844 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
845 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
846 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
847 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
848 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
849 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
850 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
851 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
852 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
853 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
854 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
855 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
856 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
857 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
858 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
859 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
860 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
861 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
862 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
863 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
864 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
865 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
866 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
867 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
868 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
869 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
870 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
871 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
872 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
873 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
874 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
875 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
876 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
877 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
878 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
879 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
880 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
881 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
882 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
883 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
884 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
885 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
886 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
887 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
888 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
889 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
890 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
891 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
892 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
893 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
894 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
895 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
896 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
897 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
898 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
899 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
900 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
901 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
902 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
903 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
904 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
905 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
906 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
907 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
908 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
909 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
910 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
911 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
912 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
913 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
914 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
915 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
916 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
917 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
918 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
919 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
920 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
921 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
922 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
923 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
924 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
925 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
926 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
927 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
928 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
929 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
930 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
931 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
932 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
933 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
934 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
935 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
936 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
937 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
938 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
939 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
940 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
941 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
942 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
943 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
944 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
945 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
946 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
947 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
948 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
949 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
950 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
951 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
952 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
953 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
954 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
955 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
956 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
957 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
958 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
959 struct usb_endpoint_descriptor *
usb_epnum_to_ep_desc(struct usb_device * dev,U32 epnum)960 usb_epnum_to_ep_desc(struct usb_device *dev, U32 epnum)
961 {
962 int i, k;
963
964 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
965 struct usb_interface *intf;
966 struct usb_host_interface *alt;
967 /* only endpoints in current altseting are active */
968 intf = dev->actconfig->interface[i];
969 alt = intf->altsetting + intf->act_altsetting;
970
971 for (k = 0; k < alt->desc.bNumEndpoints; k++)
972 if (epnum == alt->endpoint[k].desc.bEndpointAddress)
973 return &alt->endpoint[k].desc;
974 }
975
976 return NULL;
977 }
978 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
979 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
980 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
981 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
982 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
983 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
984 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
985 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
986 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
987 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
988 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
989 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
990 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
991 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
992 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
993 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
994 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
995 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
996 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
997 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
998 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
999 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1000 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1001 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1002 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1003 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1004 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1005 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1006 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1007 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1008 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1009 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1010 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1011 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1012 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1013 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1014 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1015 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1016 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1017 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1018 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1019 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1020 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1021 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1022 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1023 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1024 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1025 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1026 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1027 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1028 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1029 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1030 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1031 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1032 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1033 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1034 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1035 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1036 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1037 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1038 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1039 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1040 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1041 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1042 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1043 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1044 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1045 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1046 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1047 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1048 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1049 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1050 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1051 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1052 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1053 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1054 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1055 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1056 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1057 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1058 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1059 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1060 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1061 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1062 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1063 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1064 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1065 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1066 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1067 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1068 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1069 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1070 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1071 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1072 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1073 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1074 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1075 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1076 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1077 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1078 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1079 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1080 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1081 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1082 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1083 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1084 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1085 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1086 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1087 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1088 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1089 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1090 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1091 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1092 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1093 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1094 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1095 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1096 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1097 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1098 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1099 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1100 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1101 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1102 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1103 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1104 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1105 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1106 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1107 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1108 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1109 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1110 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1111 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1112 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1113 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1114 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1115 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1116 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1117 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1118 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1119 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1120 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1121 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1122 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1123 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1124 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1125 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1126 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1127 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1128 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1129 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1130 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1131 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1132 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1133 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1134 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1135 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1136 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1137 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1138 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1139 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1140 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1141 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1142 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1143 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1144 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1145 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1146 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1147 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1148 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1149 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1150 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1151 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1152 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1153 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1154 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1155 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1156 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1157 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1158 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1159 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1160 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1161 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1162 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1163 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1164 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1165 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1166 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1167 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1168 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1169 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1170 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1171 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1172 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1173 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1174 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1175 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1176 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1177 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1178 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1179 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1180 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1181 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1182 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1183 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1184 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1185 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1186 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1187 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1188 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1189 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1190 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1191 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1192 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1193 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1194 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1195 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1196 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1197 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1198 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1199 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1200 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1201 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1202 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1203 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1204 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1205 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1206 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1207 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1208 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1209 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1210 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1211 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1212 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1213 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1214 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1215 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1216 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1217 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1218 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1219 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1220 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1221 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1222 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1223 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1224 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1225 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1226 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1227 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1228 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1229 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1230 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1231 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1232 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1233 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1234 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1235 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1236 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1237 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1238 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1239 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1240 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1241 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1242 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1243 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1244 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1245 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1246 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1247 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1248 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1249 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1250 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1251 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1252 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1253 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1254 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1255 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1256 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1257
1258
1259 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1260 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1261 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1262 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1263 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1264 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1265 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1266 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1267 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1268 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1269 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1270 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1271 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1272 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1273 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1274 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1275 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1276 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1277 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1278 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1279 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1280 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1281 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1282 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1283 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1284 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1285 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1286 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1287 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1288 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1289 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1290 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1291 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1292 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1293 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1294 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1295 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1296 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1297 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1298 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1299 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1300 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1301 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1302 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1303 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1304 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1305 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1306 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1307 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1308 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1309 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1310 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1311 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1312 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1313 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1314 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1315 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1316 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1317 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1318 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1319 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1320 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1321 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1322 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1323 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1324 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1325 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1326 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1327 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1328 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1329 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1330 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1331 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1332 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1333 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1334 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1335 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1336 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1337 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1338 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1339 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1340 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1341 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1342 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1343 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1344 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1345 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1346 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1347 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1348 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1349 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1350 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1351 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1352 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1353 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1354 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1355
usb_driver_release_interface(struct usb_driver * driver,struct usb_interface * iface)1356 void usb_driver_release_interface(struct usb_driver *driver, struct usb_interface *iface)
1357 {
1358 // this should never happen, don't release something that's not ours
1359 if (iface->driver && iface->driver != driver)
1360 return;
1361
1362 iface->driver = NULL;
1363 usb_set_interface(interface_to_usbdev(iface),
1364 iface->altsetting[0].desc.bInterfaceNumber,
1365 0);
1366 usb_set_intfdata(iface, NULL);
1367 iface->driver = NULL;
1368 }
1369 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1370 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1371 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1372 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1373 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1374 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1375 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1376 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1377 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1378 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1379 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1380 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1381 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1382 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1383 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1384 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1385 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1386 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1387 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1388 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1389 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1390 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1391 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1392 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1393 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1394 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1395 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1396 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1397 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1398 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1399 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1400 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1401 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1402 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1403 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1404 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1405 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1406 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1407 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1408 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1409 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1410 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1411 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1412 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1413 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1414 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1415 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1416 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1417 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1418 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1419 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1420 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1421 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1422 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1423 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1424 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1425 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1426 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1427 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1428 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1429 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1430 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1431 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1432 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1433 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1434 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1435 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1436 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1437 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1438 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1439 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1440 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1441 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1442 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1443 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1444 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1445 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1446 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1447 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1448 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1449 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1450 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1451 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1452 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1453 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1454 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1455 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1456 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1457 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1458 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1459 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1460 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1461 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1462 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1463 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1464 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1465
1466
1467 const struct usb_device_id *
usb_match_id(struct usb_interface * interface,const struct usb_device_id * id)1468 usb_match_id(struct usb_interface *interface, const struct usb_device_id *id)
1469 {
1470 struct usb_host_interface *intf;
1471 struct usb_device *dev;
1472
1473 dbg("Enter%s","");
1474
1475 if (id == NULL)
1476 return NULL;
1477 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1478 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1479 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1480 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1481 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1482 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1483 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1484 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1485 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1486 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1487 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1488 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1489 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1490 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1491 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1492 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1493
1494 intf = &interface->altsetting [interface->act_altsetting];
1495 dev = interface_to_usbdev(interface);
1496
1497 for (; id->idVendor || id->bDeviceClass || id->bInterfaceClass ||
1498 id->driver_info; id++) {
1499 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1500 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1501 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1502 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1503 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1504 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1505 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1506 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1507 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1508 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1509 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1510 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1511 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1512 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1513 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1514 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1515 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1516 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1517 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1518 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1519 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1520 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1521 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1522 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1523 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1524 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1525 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1526 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1527 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1528 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1529 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1530 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1531
1532 if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
1533 id->idVendor != dev->descriptor.idVendor)
1534 continue;
1535 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1536 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1537 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1538 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1539 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1540 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1541 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1542 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1543 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1544 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1545 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1546 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1547 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1548 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1549 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1550 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1551 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1552 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1553 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1554 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1555 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1556 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1557 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1558 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1559 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1560 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1561 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1562 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1563 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1564 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1565 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1566 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1567
1568 if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) &&
1569 id->idProduct != dev->descriptor.idProduct)
1570 continue;
1571
1572 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1573 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1574 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1575 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1576 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1577 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1578 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1579 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1580 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1581 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1582 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1583 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1584 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1585 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1586 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1587 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1588
1589 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1590 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1591 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1592 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1593 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1594 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1595 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1596 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1597 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1598 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1599 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1600 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1601 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1602 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1603 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1604 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1605 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) &&
1606 (id->bcdDevice_lo >= dev->descriptor.bcdDevice))
1607 continue;
1608 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1609 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1610 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1611 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1612 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1613 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1614 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1615 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1616 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1617 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1618 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1619 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1620 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1621 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1622 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1623 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1624 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1625 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1626 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1627 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1628 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1629 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1630 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1631 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1632 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1633 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1634 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1635 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1636 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1637 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1638 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1639 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1640
1641 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) &&
1642 (id->bcdDevice_hi <= dev->descriptor.bcdDevice))
1643 continue;
1644 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1645 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1646 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1647 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1648 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1649 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1650 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1651 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1652 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1653 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1654 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1655 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1656 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1657 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1658 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1659 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1660 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1661 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1662 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1663 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1664 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1665 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1666 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1667 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1668 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1669 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1670 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1671 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1672 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1673 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1674 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1675 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1676
1677 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) &&
1678 (id->bDeviceClass != dev->descriptor.bDeviceClass))
1679 continue;
1680 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1681 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1682 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1683 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1684 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1685 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1686 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1687 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1688 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1689 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1690 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1691 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1692 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1693 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1694 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1695 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1696 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1697 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1698 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1699 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1700 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1701 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1702 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1703 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1704 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1705 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1706 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1707 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1708 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1709 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1710 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1711 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1712
1713 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS) &&
1714 (id->bDeviceSubClass!= dev->descriptor.bDeviceSubClass))
1715 continue;
1716 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1717 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1718 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1719 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1720 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1721 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1722 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1723 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1724 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1725 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1726 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1727 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1728 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1729 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1730 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1731 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1732 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1733 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1734 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1735 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1736 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1737 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1738 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1739 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1740 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1741 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1742 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1743 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1744 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1745 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1746 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1747 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1748 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1749 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1750 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1751 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1752 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1753 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1754 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1755 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1756 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1757 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1758 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1759 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1760 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1761 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1762 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1763 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1764
1765 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) &&
1766 (id->bDeviceProtocol != dev->descriptor.bDeviceProtocol))
1767 continue;
1768 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1769 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1770 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1771 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1772 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1773 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1774 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1775 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1776 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1777 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1778 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1779 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1780 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1781 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1782 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1783 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1784 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1785 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1786 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1787 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1788 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1789 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1790 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1791 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1792 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1793 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1794 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1795 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1796 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1797 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1798 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1799 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1800 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1801 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1802 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1803 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1804 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1805 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1806 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1807 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1808 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1809 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1810 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1811 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1812 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1813 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1814 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1815 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1816
1817 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) &&
1818 (id->bInterfaceClass != intf->desc.bInterfaceClass))
1819 continue;
1820 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1821 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1822 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1823 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1824 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1825 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1826 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1827 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1828 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1829 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1830 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1831 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1832 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1833 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1834 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1835 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1836 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1837 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1838 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1839 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1840 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1841 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1842 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1843 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1844 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1845 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1846 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1847 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1848 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1849 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1850 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1851 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1852 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1853 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1854 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1855 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1856 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1857 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1858 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1859 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1860 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1861 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1862 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1863 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1864 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1865 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1866 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1867 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1868
1869 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS) &&
1870 (id->bInterfaceSubClass != intf->desc.bInterfaceSubClass))
1871 continue;
1872 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1873 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1874 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1875 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1876 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1877 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1878 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1879 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1880 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1881 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1882 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1883 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1884 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1885 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1886 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1887 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1888 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1889 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1890 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1891 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1892 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1893 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1894 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1895 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1896 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1897 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1898 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1899 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1900 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1901 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1902 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1903 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1904 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1905 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1906 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1907 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1908 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1909 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1910 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1911 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1912 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1913 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1914 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1915 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1916 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1917 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1918 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1919 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1920
1921 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_PROTOCOL) &&
1922 (id->bInterfaceProtocol != intf->desc.bInterfaceProtocol))
1923 continue;
1924 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1925 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1926 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1927 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1928 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1929 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1930 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1931 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1932 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1933 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1934 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1935 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1936 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1937 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1938 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1939 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1940 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1941 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1942 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1943 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1944 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1945 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1946 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1947 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1948 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1949 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1950 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1951 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1952 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1953 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1954 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1955 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1956 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1957 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1958 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1959 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1960 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1961 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1962 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1963 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1964 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1965 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1966 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1967 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1968 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1969 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1970 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1971 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1972
1973 return id;
1974 }
1975
1976 return NULL;
1977 }
1978 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1979 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1980 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1981 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1982 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1983 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1984 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1985 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1986 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1987 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1988 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1989 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1990 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1991 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1992 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
1993 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_find_interface(struct usb_driver * drv,int minor)1994 struct usb_interface *usb_find_interface(struct usb_driver *drv, int minor)
1995 {
1996 struct list_head *entry;
1997 struct device_s *dev;
1998 struct usb_interface *intf;
1999
2000 list_for_each(entry, &drv->driver.devices) {
2001 const struct list_head *_mptr = entry;
2002 dev = (struct device_s *) ( (char *)_mptr - (char *)offsetof(struct device_s, driver_list) );
2003 if (dev->driver == &usb_generic_driver)
2004 continue;
2005 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2006 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2007 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2008 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2009 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2010 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2011 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2012 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2013 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2014 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2015 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2016 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2017 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2018 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2019 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2020 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2021
2022 intf = to_usb_interface(dev);
2023 if (intf->minor == -1)
2024 continue;
2025 if (intf->minor == minor)
2026 return intf;
2027 }
2028 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2029 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2030 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2031 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2032 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2033 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2034 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2035 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2036 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2037 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2038 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2039 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2040 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2041 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2042 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2043 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2044
2045 /* no device found that matches */
2046 return NULL;
2047 }
2048 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2049 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2050 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2051 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2052 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2053 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2054 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2055 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2056 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2057 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2058 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2059 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2060 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2061 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2062 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2063 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2064
2065 extern struct usb_driver usb_storage_driver;
2066 extern struct usb_driver usb_ptp_driver;
2067 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2068 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2069 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2070 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2071 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2072 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2073 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2074 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2075 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2076 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2077 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2078 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2079 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2080 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2081 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2082 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2083
usb_find_dev_for_driver(struct device_driver * pDriver,struct usb_device ** pudev,struct usb_hcd * hcd)2084 BOOL usb_find_dev_for_driver(struct device_driver *pDriver, struct usb_device **pudev, struct usb_hcd *hcd)
2085 {
2086 struct list_head *entry;
2087 struct device_s *dev;
2088
2089 list_for_each(entry, &pDriver->devices)
2090 {
2091 const struct list_head *_mptr = entry;
2092 dev = (struct device_s *) ( (char *)_mptr - (char *)offsetof(struct device_s, driver_list) );
2093
2094 *pudev = (struct usb_device *) ((char *)dev - (char *)offsetof( struct usb_device, dev));
2095 if ((*pudev)->parent == NULL) // skip root hub, 2012.02.29
2096 continue;
2097
2098 if ((*pudev)->bus->hcpriv == hcd)
2099 return TRUE;
2100 }
2101 diag_printf(" \n\nusb_find_dev_for_driver> NOT FOUND!!!\n\n");
2102 return FALSE;
2103 }
2104 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2105 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2106 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2107 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2108 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2109 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2110 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2111 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2112 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2113 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2114 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2115 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2116 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2117 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2118 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2119 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2120
2121 //NSTL_060406 Sony MSAC-US5 MS Reader
usb_get_connected_dev_state(int * pdevstate,unsigned char * pDevClass,struct usb_hcd * hcd)2122 BOOL usb_get_connected_dev_state(int *pdevstate, unsigned char *pDevClass, struct usb_hcd *hcd)
2123 {
2124 BOOL status = FALSE;
2125 struct usb_device *pusbdev;
2126 struct usb_interface *pusbintf = NULL;
2127
2128 // Find any device attached to the usb_generic_driver
2129 if ( usb_find_dev_for_driver(&usb_generic_driver, &pusbdev, hcd) )
2130 {
2131 status = TRUE;
2132 if (pusbdev->actconfig->desc.bNumInterfaces)
2133 {
2134 pusbintf = usb_ifnum_to_if(pusbdev, 0);
2135 }
2136 // diag_printf("VID: %X, PID: %X\n", pusbdev->descriptor.idVendor, pusbdev->descriptor.idProduct);
2137 // diag_printf("DEVICE> Class: %X, SubClass: %X, Protocol: %X\n", pusbdev->descriptor.bDeviceClass,
2138 // pusbdev->descriptor.bDeviceSubClass, pusbdev->descriptor.bDeviceProtocol);
2139 // diag_printf("INTERFACE> Class: %X, SubClass: %X, Protocol: %X\n", pusbintf->altsetting->desc.bInterfaceClass,
2140 // pusbintf->altsetting->desc.bInterfaceSubClass, pusbintf->altsetting->desc.bInterfaceProtocol);
2141 // diag_printf("State: %d\n", pusbdev->state);
2142
2143 if (pusbdev->descriptor.bDeviceClass)
2144 *pDevClass = pusbdev->descriptor.bDeviceClass;
2145 else
2146 *pDevClass = pusbintf->altsetting->desc.bInterfaceClass;
2147 *pdevstate = pusbdev->state;
2148 }
2149
2150 return status;
2151 }
2152 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2153 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2154 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2155 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2156 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2157 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2158 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2159 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2160 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2161 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2162 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2163 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2164 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2165 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2166 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2167 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2168
usb_device_match(struct device_s * dev,struct device_driver * drv)2169 static int usb_device_match (struct device_s *dev, struct device_driver *drv)
2170 {
2171 struct usb_interface *intf;
2172 struct usb_driver *usb_drv;
2173 const struct usb_device_id *id;
2174
2175 /* check for generic driver, which we don't match any device with */
2176 if (drv == &usb_generic_driver)
2177 return 0;
2178
2179 intf = to_usb_interface(dev);
2180
2181 usb_drv = to_usb_driver(drv);
2182 id = usb_drv->id_table;
2183
2184 id = usb_match_id (intf, usb_drv->id_table);
2185 if (id)
2186 return 1; //found id
2187
2188 return 0; //id not found
2189 }
2190
2191
2192 #ifdef CONFIG_HOTPLUG
2193 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2194 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2195 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2196 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2197 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2198 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2199 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2200 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2201 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2202 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2203 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2204 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2205 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2206 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2207 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2208 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2209
2210 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2211 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2212 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2213 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2214 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2215 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2216 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2217 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2218 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2219 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2220 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2221 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2222 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2223 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2224 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2225 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2226
usb_hotplug(struct device_s * dev,char ** envp,int num_envp,char * buffer,int buffer_size)2227 static int usb_hotplug (struct device_s *dev, char **envp, int num_envp,
2228 char *buffer, int buffer_size)
2229 {
2230 struct usb_interface *intf;
2231 struct usb_device *usb_dev;
2232 char *scratch;
2233 int i = 0;
2234 int length = 0;
2235 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2236 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2237 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2238 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2239 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2240 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2241 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2242 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2243 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2244 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2245 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2246 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2247 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2248 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2249 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2250 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2251
2252 dbg ("%s", __FUNCTION__);
2253
2254 if (!dev)
2255 return -ENODEV;
2256
2257 /* Must check driver_data here, as on remove driver is always NULL */
2258 if ((dev->driver == &usb_generic_driver) ||
2259 (dev->driver_data == &usb_generic_driver_data))
2260 return 0;
2261
2262 intf = to_usb_interface(dev);
2263 usb_dev = interface_to_usbdev (intf);
2264
2265 if (usb_dev->devnum < 0) {
2266 dbg ("device already deleted ??");
2267 return -ENODEV;
2268 }
2269 if (!usb_dev->bus) {
2270 dbg ("bus already removed?");
2271 return -ENODEV;
2272 }
2273
2274 scratch = buffer;
2275 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2276 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2277 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2278 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2279 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2280 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2281 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2282 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2283 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2284 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2285 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2286 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2287 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2288 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2289 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2290 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2291 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2292 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2293 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2294 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2295 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2296 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2297 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2298 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2299 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2300 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2301 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2302 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2303 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2304 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2305 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2306 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2307
2308 #ifdef CONFIG_USB_DEVICEFS
2309 /* If this is available, userspace programs can directly read
2310 * all the device descriptors we don't tell them about. Or
2311 * even act as usermode drivers.
2312 *
2313 * FIXME reduce hardwired intelligence here
2314 */
2315 envp [i++] = scratch;
2316 length += LIB_StringPrintFormatN (scratch, buffer_size - length,
2317 "DEVICE=/proc/bus/usb/%03d/%03d",
2318 usb_dev->bus->busnum, usb_dev->devnum);
2319 if ((buffer_size - length <= 0) || (i >= num_envp))
2320 return -ENOMEM;
2321 ++length;
2322 scratch += length;
2323 #endif
2324
2325 /* per-device configurations are common */
2326 envp [i++] = scratch;
2327 length += LIB_StringPrintFormatN (scratch, buffer_size - length, "PRODUCT=%x/%x/%x",
2328 usb_dev->descriptor.idVendor,
2329 usb_dev->descriptor.idProduct,
2330 usb_dev->descriptor.bcdDevice);
2331 if ((buffer_size - length <= 0) || (i >= num_envp))
2332 return -ENOMEM;
2333 ++length;
2334 scratch += length;
2335 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2336 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2337 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2338 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2339 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2340 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2341 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2342 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2343 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2344 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2345 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2346 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2347 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2348 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2349 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2350 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2351 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2352 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2353 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2354 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2355 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2356 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2357 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2358 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2359 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2360 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2361 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2362 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2363 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2364 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2365 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2366 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2367 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2368 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2369 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2370 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2371 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2372 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2373 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2374 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2375 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2376 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2377 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2378 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2379 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2380 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2381 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2382 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2383
2384 envp [i++] = scratch;
2385 length += LIB_StringPrintFormatN (scratch, buffer_size - length, "TYPE=%d/%d/%d",
2386 usb_dev->descriptor.bDeviceClass,
2387 usb_dev->descriptor.bDeviceSubClass,
2388 usb_dev->descriptor.bDeviceProtocol);
2389 if ((buffer_size - length <= 0) || (i >= num_envp))
2390 return -ENOMEM;
2391 ++length;
2392 scratch += length;
2393
2394 if (usb_dev->descriptor.bDeviceClass == 0) {
2395 int alt = intf->act_altsetting;
2396
2397 envp [i++] = scratch;
2398 length += LIB_StringPrintFormatN (scratch, buffer_size - length,
2399 "INTERFACE=%d/%d/%d",
2400 intf->altsetting[alt].desc.bInterfaceClass,
2401 intf->altsetting[alt].desc.bInterfaceSubClass,
2402 intf->altsetting[alt].desc.bInterfaceProtocol);
2403 if ((buffer_size - length <= 0) || (i >= num_envp))
2404 return -ENOMEM;
2405 ++length;
2406 scratch += length;
2407 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2408 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2409 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2410 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2411 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2412 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2413 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2414 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2415 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2416 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2417 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2418 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2419 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2420 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2421 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2422 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2423 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2424 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2425 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2426 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2427 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2428 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2429 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2430 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2431 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2432 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2433 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2434 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2435 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2436 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2437 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2438 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2439
2440 }
2441 envp [i++] = 0;
2442
2443 return 0;
2444 }
2445
2446 #else
2447 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2448 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2449 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2450 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2451 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2452 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2453 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2454 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2455 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2456 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2457 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2458 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2459 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2460 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2461 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2462 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2463 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2464 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2465 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2466 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2467 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2468 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2469 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2470 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2471 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2472 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2473 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2474 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2475 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2476 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2477 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2478 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2479
usb_hotplug(struct device_s * dev,char ** envp,int num_envp,char * buffer,int buffer_size)2480 static int usb_hotplug (struct device_s *dev, char **envp,
2481 int num_envp, char *buffer, int buffer_size)
2482 {
2483 return -ENODEV;
2484 }
2485 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2486 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2487 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2488 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2489 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2490 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2491 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2492 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2493 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2494 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2495 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2496 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2497 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2498 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2499 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2500 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2501 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2502 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2503 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2504 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2505 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2506 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2507 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2508 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2509 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2510 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2511 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2512 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2513 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2514 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2515 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2516 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2517
2518 #endif /* CONFIG_HOTPLUG */
2519
2520
2521 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2522 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2523 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2524 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2525 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2526 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2527 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2528 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2529 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2530 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2531 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2532 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2533 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2534 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2535 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2536 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2537 //static void usb_release_dev(struct device *dev)
usb_release_dev(struct device_s * dev)2538 void usb_release_dev(struct device_s *dev)
2539 {
2540 struct usb_device *udev;
2541
2542 udev = to_usb_device(dev);
2543
2544 if (udev->bus && udev->bus->op && udev->bus->op->deallocate)
2545 udev->bus->op->deallocate(udev);
2546 usb_destroy_configuration(udev);
2547 usb_bus_put(udev->bus);
2548 kfree (udev);
2549 }
2550 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2551 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2552 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2553 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2554 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2555 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2556 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2557 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2558 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2559 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2560 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2561 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2562 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2563 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2564 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2565 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2566
2567
2568 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2569 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2570 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2571 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2572 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2573 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2574 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2575 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2576 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2577 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2578 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2579 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2580 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2581 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2582 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2583 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_alloc_dev(struct usb_device * parent,struct usb_bus * bus)2584 struct usb_device *usb_alloc_dev(struct usb_device *parent, struct usb_bus *bus)
2585 {
2586 struct usb_device *dev;
2587
2588 dev = (struct usb_device*) kmalloc(sizeof(*dev), GFP_KERNEL);
2589 if (!dev)
2590 return NULL;
2591
2592 memset(dev, 0, sizeof(*dev));
2593
2594 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2595 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2596 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2597 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2598 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2599 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2600 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2601 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2602 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2603 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2604 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2605 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2606 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2607 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2608 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2609 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2610
2611 bus = usb_bus_get(bus);
2612 if (!bus) {
2613 kfree(dev);
2614 return NULL;
2615 }
2616
2617
2618 device_initialize(&dev->dev);
2619 dev->dev.release = usb_release_dev;
2620 dev->state = USB_STATE_ATTACHED;
2621
2622 if (!parent)
2623 dev->devpath [0] = '0';
2624 dev->bus = bus;
2625 dev->parent = parent;
2626 INIT_LIST_HEAD(&dev->filelist);
2627
2628 init_MUTEX(&dev->serialize);
2629 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2630 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2631 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2632 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2633 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2634 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2635 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2636 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2637 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2638 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2639 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2640 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2641 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2642 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2643 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2644 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2645
2646 if (dev->bus->op->allocate)
2647 dev->bus->op->allocate(dev);
2648
2649 return dev;
2650 }
2651 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2652 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2653 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2654 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2655 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2656 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2657 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2658 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2659 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2660 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2661 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2662 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2663 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2664 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2665 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2666 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2667
2668 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2669 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2670 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2671 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2672 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2673 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2674 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2675 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2676 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2677 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2678 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2679 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2680 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2681 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2682 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2683 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_get_dev(struct usb_device * dev)2684 struct usb_device *usb_get_dev (struct usb_device *dev)
2685 {
2686 struct device_s *tmp;
2687
2688 if (!dev)
2689 return NULL;
2690
2691 tmp = get_device(&dev->dev);
2692 if (tmp)
2693 return to_usb_device(tmp);
2694 else
2695 return NULL;
2696 }
2697 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2698 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2699 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2700 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2701 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2702 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2703 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2704 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2705 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2706 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2707 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2708 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2709 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2710 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2711 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2712 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2713
2714 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2715 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2716 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2717 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2718 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2719 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2720 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2721 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2722 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2723 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2724 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2725 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2726 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2727 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2728 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2729 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_put_dev(struct usb_device * dev)2730 void usb_put_dev(struct usb_device *dev)
2731 {
2732 if (dev)
2733 {
2734 //put_device(&dev->dev);
2735 if (atomic_dec_and_test(&((&dev->dev)->refcount)))
2736 {
2737 //release allocated buffer for saving device's configurations and device info
2738 device_unregister(&dev->dev);
2739 }
2740 }
2741 }
2742 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2743 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2744 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2745 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2746 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2747 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2748 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2749 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2750 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2751 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2752 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2753 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2754 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2755 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2756 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2757 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2758
match_device(struct usb_device * m_dev,U16 vendor_id,U16 product_id)2759 static struct usb_device *match_device(struct usb_device *m_dev,
2760 U16 vendor_id, U16 product_id)
2761 {
2762 struct usb_device *ret_dev = NULL;
2763 int child;
2764 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2765 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2766 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2767 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2768 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2769 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2770 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2771 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2772 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2773 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2774 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2775 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2776 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2777 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2778 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2779 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2780
2781 dbg("looking at vendor %d, product %d",
2782 m_dev->descriptor.idVendor,
2783 m_dev->descriptor.idProduct);
2784
2785 if ((m_dev->descriptor.idVendor == vendor_id) &&
2786 (m_dev->descriptor.idProduct == product_id)) {
2787 dbg ("found the device!%s","");
2788 ret_dev = usb_get_dev(m_dev);
2789 goto exit;
2790 }
2791 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2792 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2793 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2794 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2795 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2796 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2797 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2798 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2799 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2800 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2801 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2802 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2803 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2804 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2805 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2806 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2807
2808 /* look through all of the children of this device */
2809 for (child = 0; child < m_dev->maxchild; ++child) {
2810 if (m_dev->children[child]) {
2811 ret_dev = match_device(m_dev->children[child],
2812 vendor_id, product_id);
2813 if (ret_dev)
2814 goto exit;
2815 }
2816 }
2817 exit:
2818 return ret_dev;
2819 }
2820 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2821 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2822 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2823 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2824 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2825 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2826 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2827 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2828 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2829 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2830 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2831 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2832 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2833 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2834 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2835 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2836
2837
2838 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2839 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2840 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2841 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2842 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2843 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2844 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2845 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2846 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2847 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2848 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2849 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2850 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2851 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2852 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2853 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_find_device(U16 vendor_id,U16 product_id)2854 struct usb_device *usb_find_device(U16 vendor_id, U16 product_id)
2855 {
2856 struct list_head *buslist;
2857 struct usb_bus *bus;
2858 struct usb_device *dev = NULL;
2859
2860 down(&usb_bus_list_lock);
2861 for (buslist = usb_bus_list.next;
2862 buslist != &usb_bus_list;
2863 buslist = buslist->next) {
2864
2865 // bus = container_of(buslist, struct usb_bus, bus_list);
2866 const struct list_head *mptr = buslist;
2867 bus = (struct usb_bus *)( (char *)mptr - (char *)offsetof( struct usb_bus, bus_list) );
2868 dev = match_device(bus->root_hub, vendor_id, product_id);
2869 if (dev)
2870 goto exit;
2871 }
2872 exit:
2873 up(&usb_bus_list_lock);
2874 return dev;
2875 }
2876 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2877 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2878 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2879 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2880 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2881 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2882 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2883 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2884 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2885 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2886 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2887 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2888 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2889 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2890 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2891 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2892
2893
2894 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2895 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2896 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2897 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2898 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2899 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2900 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2901 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2902 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2903 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2904 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2905 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2906 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2907 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2908 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2909 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_get_current_frame_number(struct usb_device * dev)2910 int usb_get_current_frame_number(struct usb_device *dev)
2911 {
2912 return dev->bus->op->get_frame_number (dev);
2913 }
2914 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2915 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2916 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2917 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2918 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2919 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2920 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2921 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2922 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2923 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2924 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2925 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2926 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2927 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2928 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2929 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2930
2931 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2932 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2933 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2934 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2935 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2936 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2937 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2938 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2939 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2940 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2941 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2942 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2943 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2944 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2945 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2946 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2947
__usb_get_extra_descriptor(char * buffer,U32 size,U8 type,void ** ptr)2948 int __usb_get_extra_descriptor(char *buffer, U32 size, U8 type, void **ptr)
2949 {
2950 struct usb_descriptor_header *header;
2951
2952 while (size >= sizeof(struct usb_descriptor_header)) {
2953 header = (struct usb_descriptor_header *)buffer;
2954
2955 if (header->bLength < 2) {
2956 usb_err("invalid descriptor length of %d", header->bLength);
2957 return -1;
2958 }
2959
2960 if (header->bDescriptorType == type) {
2961 *ptr = header;
2962 return 0;
2963 }
2964
2965 buffer += header->bLength;
2966 size -= header->bLength;
2967 }
2968 return -1;
2969 }
2970 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2971 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2972 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2973 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2974 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2975 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2976 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2977 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2978 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2979 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2980 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2981 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2982 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2983 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2984 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2985 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2986
2987
2988 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2989 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2990 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2991 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2992 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2993 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2994 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2995 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2996 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2997 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2998 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
2999 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3000 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3001 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3002 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3003 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_disconnect(struct usb_device ** pdev)3004 void usb_disconnect(struct usb_device **pdev)
3005 {
3006 struct usb_device *dev = *pdev;
3007 struct usb_bus *bus;
3008 struct usb_operations *ops;
3009 //struct usb_hcd *hcd;
3010 int i;
3011 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3012 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3013 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3014 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3015 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3016 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3017 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3018 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3019 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3020 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3021 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3022 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3023 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3024 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3025 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3026 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3027
3028 //might_sleep ();
3029
3030 if (!dev) {
3031 pr_debug ("%s nodev\n", __FUNCTION__);
3032 return;
3033 }
3034 bus = dev->bus;
3035 if (!bus) {
3036 pr_debug ("%s nobus\n", __FUNCTION__);
3037 return;
3038 }
3039 ops = bus->op;
3040
3041 *pdev = NULL;
3042 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3043 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3044 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3045 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3046 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3047 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3048 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3049 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3050 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3051 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3052 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3053 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3054 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3055 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3056 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3057 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3058
3059 dev->state = USB_STATE_NOTATTACHED;
3060
3061 dev_info (&dev->dev, "USB disconnect, address %d\n", dev->devnum);
3062
3063 /* Free up all the children before we remove this device */
3064 for (i = 0; i < USB_MAXCHILDREN; i++) {
3065 struct usb_device **child = dev->children + i;
3066 if (*child)
3067 usb_disconnect(child);
3068
3069 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3070 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3071 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3072 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3073 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3074 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3075 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3076 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3077 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3078 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3079 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3080 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3081 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3082 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3083 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3084 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3085 }
3086
3087 /* deallocate hcd/hardware state ... and nuke all pending urbs */
3088 usb_disable_device(dev, 0);
3089
3090 #ifdef DEBUG
3091 dev_dbg (&dev->dev, "unregistering interface %s","\n");
3092 #else
3093 usb_msg("%s - unregistering interface %s\n", dev->dev.name,dev->dev.bus_id);
3094 #endif
3095 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3096 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3097 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3098 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3099 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3100 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3101 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3102 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3103 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3104 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3105 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3106 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3107 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3108 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3109 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3110 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3111
3112 if (dev->actconfig) {
3113 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
3114 struct usb_interface *interface;
3115
3116 /* remove this interface */
3117 interface = dev->actconfig->interface[i];
3118 device_unregister(&interface->dev);
3119
3120 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3121 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3122 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3123 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3124 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3125 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3126 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3127 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3128 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3129 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3130 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3131 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3132 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3133 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3134 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3135 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3136 }
3137 }
3138
3139 dev_dbg (&dev->dev, "unregistering device%s","\n");
3140 /* Free the device number and remove the /proc/bus/usb entry */
3141 if (dev->devnum > 0) {
3142 clear_bit(dev->devnum, dev->bus->devmap.devicemap, unsigned long);
3143 usbfs_remove_device(dev);
3144 }
3145
3146 device_unregister(&dev->dev);
3147 }
3148 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3149 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3150 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3151 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3152 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3153 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3154 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3155 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3156 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3157 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3158 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3159 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3160 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3161 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3162 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3163 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3164
3165
3166 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3167 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3168 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3169 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3170 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3171 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3172 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3173 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3174 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3175 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3176 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3177 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3178 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3179 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3180 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3181 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_choose_address(struct usb_device * dev)3182 void usb_choose_address(struct usb_device *dev)
3183 {
3184 int devnum;
3185 // FIXME needs locking for SMP!!
3186
3187 devnum = find_next_zero_bit(dev->bus->devmap.devicemap, 128, dev->bus->devnum_next);
3188 if (devnum >= 128)
3189 devnum = find_next_zero_bit(dev->bus->devmap.devicemap, 128, 1);
3190 //force fixed USB address
3191 //devnum = 16;
3192 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3193 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3194 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3195 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3196 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3197 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3198 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3199 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3200 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3201 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3202 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3203 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3204 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3205 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3206 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3207 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3208
3209 dev->bus->devnum_next = ( devnum >= 127 ? 1 : devnum + 1);
3210
3211 if (devnum < 128) {
3212 set_bit(devnum, dev->bus->devmap.devicemap, unsigned long);
3213 dev->devnum = devnum;
3214 }
3215 }
3216
3217 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3218 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3219 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3220 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3221 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3222 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3223 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3224 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3225 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3226 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3227 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3228 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3229 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3230 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3231 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3232 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3233
usb_set_address(struct usb_device * dev)3234 int usb_set_address(struct usb_device *dev)
3235 {
3236 int retval;
3237 if (dev->devnum == 0)
3238 return -EINVAL;
3239 if (dev->state != USB_STATE_DEFAULT && dev->state != USB_STATE_ADDRESS)
3240 return -EINVAL;
3241
3242 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3243 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3244 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3245 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3246 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3247 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3248 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3249 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3250 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3251 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3252 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3253 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3254 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3255 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3256 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3257 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3258 retval = usb_control_msg(dev, usb_snddefctrl(dev), USB_REQ_SET_ADDRESS,
3259 0, dev->devnum, 0, NULL, 0, HZ * USB_CTRL_SET_TIMEOUT);
3260 if (retval == 0)
3261 dev->state = USB_STATE_ADDRESS;
3262 return retval;
3263 }
3264 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3265 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3266 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3267 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3268 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3269 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3270 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3271 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3272 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3273 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3274 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3275 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3276 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3277 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3278 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3279 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3280
3281
3282 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3283 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3284 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3285 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3286 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3287 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3288 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3289 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3290 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3291 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3292 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3293 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3294 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3295 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3296 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3297 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3298 #if USB_IF_EHSET_SUPPORT
3299 extern int usb_test_proc_vid(U16 vid, U16 pid);
3300 extern void usb_high_speed_test_proc(struct usb_device *udev, int flag);
3301 #endif
3302 #define NEW_DEVICE_RETRYS 2
3303 #define SET_ADDRESS_RETRYS 2
3304 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3305 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3306 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3307 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3308 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3309 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3310 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3311 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3312 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3313 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3314 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3315 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3316 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3317 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3318 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3319 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3320
usb_new_device(struct usb_device * dev,struct device_s * parent)3321 int usb_new_device(struct usb_device *dev, struct device_s *parent)
3322 {
3323 static U8 maxPacketSize=8;
3324 int err = -EINVAL;
3325 int i;
3326 int j;
3327 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3328 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3329 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3330 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3331 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3332 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3333 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3334 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3335 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3336 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3337 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3338 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3339 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3340 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3341 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3342 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3343
3344 //diag_printf("usb_new_device\n");
3345
3346 usb_generic_driver.bus = &usb_bus_type;
3347 dev->dev.parent = parent;
3348 dev->dev.driver = &usb_generic_driver;
3349 dev->dev.bus = &usb_bus_type;
3350 dev->dev.driver_data = &usb_generic_driver_data;
3351 strcpy(dev->dev.name,"usbdev");
3352
3353 usb_get_dev(dev);
3354 if (dev->dev.bus_id[0] == 0)
3355
3356 USB_sprintf(&dev->dev.bus_id[0], "%ld-%s",dev->bus->busnum, dev->devpath);
3357 dev->dev.dma_mask = parent->dma_mask;
3358 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3359 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3360 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3361 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3362 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3363 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3364 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3365 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3366 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3367 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3368 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3369 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3370 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3371 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3372 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3373 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3374
3375 switch (dev->speed) {
3376 case USB_SPEED_HIGH: /* fixed at 64 */
3377 i = 64;
3378 break;
3379 case USB_SPEED_FULL: /* 8, 16, 32, or 64 */
3380 /* to determine the ep0 maxpacket size, read the first 8
3381 * bytes from the device descriptor to get bMaxPacketSize0;
3382 * then correct our initial (small) guess.
3383 */
3384 // FALLTHROUGH
3385 i=maxPacketSize;
3386 break;
3387 case USB_SPEED_LOW: /* fixed at 8 */
3388 i = 8;
3389 break;
3390
3391 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3392 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3393 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3394 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3395 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3396 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3397 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3398 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3399 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3400 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3401 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3402 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3403 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3404 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3405 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3406 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3407 default:
3408 goto fail;
3409 }
3410 dev->epmaxpacketin [0] = i;
3411 dev->epmaxpacketout[0] = i;
3412
3413
3414 for (i = 0; i < NEW_DEVICE_RETRYS; ++i) {
3415
3416 for (j = 0; j < SET_ADDRESS_RETRYS; ++j) {
3417 //diag_printf("usb_set_address before\n");
3418 err = usb_set_address(dev);
3419 diag_printf("usb_set_address %d after\n", dev->devnum);
3420 if (err >= 0)
3421 break;
3422 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3423 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3424 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3425 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3426 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3427 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3428 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3429 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3430 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3431 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3432 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3433 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3434 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3435 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3436 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3437 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3438
3439 diag_printf("Device state = %x, (3: default, 4: address, 5: configured), (i,j) = (%d, %d)\n", dev->state, i, j);
3440 {
3441 struct usb_hcd *hcd = dev->bus->hcpriv;
3442 if (hcd->isBadDevice)
3443 {
3444 diag_printf(" @ usb_new_device gIsBadDevice===1\n");
3445 break;
3446 }
3447 }
3448
3449 wait_ms(200);
3450 }
3451
3452 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3453 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3454 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3455 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3456 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3457 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3458 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3459 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3460 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3461 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3462 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3463 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3464 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3465 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3466 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3467 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3468 if (err < 0) {
3469 u_err("device not accepting address %d, error %d\n",dev->devnum, err);
3470 goto fail;
3471 }
3472
3473 wait_ms(10); /* Let the SET_ADDRESS settle */
3474 err = usb_get_descriptor(dev, USB_DT_DEVICE, 0, &dev->descriptor, 8);
3475 if (err >= 8) //Received 8 byress?
3476 break;
3477 wait_ms(100);
3478 }
3479 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3480 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3481 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3482 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3483 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3484 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3485 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3486 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3487 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3488 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3489 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3490 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3491 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3492 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3493 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3494 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3495 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3496 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3497 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3498 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3499 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3500 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3501 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3502 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3503 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3504 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3505 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3506 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3507 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3508 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3509 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3510 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3511
3512 if (err < 8) {
3513 u_err("device descriptor read/8, error %d\n", err);
3514 goto fail;
3515 }
3516 if (dev->speed == USB_SPEED_FULL) {
3517 dev->epmaxpacketin [0] = dev->descriptor.bMaxPacketSize0;
3518 dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0;
3519 maxPacketSize=dev->descriptor.bMaxPacketSize0;
3520 }
3521
3522 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3523 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3524 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3525 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3526 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3527 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3528 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3529 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3530 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3531 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3532 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3533 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3534 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3535 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3536 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3537 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3538 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3539 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3540 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3541 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3542 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3543 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3544 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3545 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3546 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3547 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3548 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3549 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3550 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3551 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3552 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3553 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3554
3555 err = usb_get_device_descriptor(dev);
3556 if (err < (signed)sizeof(dev->descriptor)) {
3557 u_err("device descriptor read/all, error %d\n", err);
3558 goto fail;
3559 }
3560
3561 #if USB_IF_EHSET_SUPPORT // embedded host electrical test procedure
3562 if (dev->parent ) // not root hub
3563 {
3564 //dev->descriptor.idVendor = 0x1A0A; // test only, marked for fomal release
3565 //dev->descriptor.idProduct = 0x0102;
3566 //diag_printf("<usb_new_device> force VID = %x, PID = %x\n", dev->descriptor.idVendor, dev->descriptor.idProduct);
3567 if (usb_test_proc_vid(dev->descriptor.idVendor, dev->descriptor.idProduct) == 1)
3568 usb_high_speed_test_proc(dev, 1);
3569 }
3570 #endif
3571
3572 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3573 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3574 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3575 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3576 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3577 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3578 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3579 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3580 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3581 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3582 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3583 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3584 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3585 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3586 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3587 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3588 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3589 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3590 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3591 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3592 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3593 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3594 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3595 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3596 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3597 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3598 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3599 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3600 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3601 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3602 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3603 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3604 err = usb_get_configuration(dev);
3605 if (err < 0) {
3606 u_err("unable to get device %d configuration (error=%d)\n",
3607 dev->devnum, err);
3608 goto fail;
3609 }
3610
3611 if (dev->descriptor.bNumConfigurations != 1) {
3612 u_err("configuration #%d chosen from %d choices\n",
3613 dev->config[0].desc.bConfigurationValue,
3614 dev->descriptor.bNumConfigurations);
3615 }
3616 #if 1
3617 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3618 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3619 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3620 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3621 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3622 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3623 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3624 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3625 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3626 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3627 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3628 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3629 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3630 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3631 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3632 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3633 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3634 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3635 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3636 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3637 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3638 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3639 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3640 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3641 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3642 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3643 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3644 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3645 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3646 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3647 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3648 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3649
3650 if (dev->descriptor.iProduct)
3651 usb_show_string(dev, "Product", dev->descriptor.iProduct);
3652 if (dev->descriptor.iManufacturer)
3653 usb_show_string(dev, "Manufacturer", dev->descriptor.iManufacturer);
3654 if (dev->descriptor.iSerialNumber)
3655 usb_show_string(dev, "SerialNumber", dev->descriptor.iSerialNumber);
3656 #endif
3657 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3658 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3659 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3660 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3661 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3662 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3663 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3664 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3665 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3666 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3667 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3668 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3669 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3670 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3671 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3672 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3673 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3674 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3675 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3676 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3677 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3678 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3679 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3680 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3681 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3682 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3683 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3684 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3685 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3686 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3687 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3688 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3689
3690 if(dev->descriptor.bDeviceClass == USB_CLASS_COMM)
3691 err = usb_set_configuration(dev, dev->config[1].desc.bConfigurationValue);
3692 else
3693 err = usb_set_configuration(dev, dev->config[0].desc.bConfigurationValue);
3694
3695 if (err) {
3696 u_err("failed to set device %d default configuration (error=%d)\n",
3697 dev->devnum, err);
3698 goto fail;
3699 }
3700 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3701 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3702 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3703 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3704 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3705 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3706 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3707 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3708 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3709 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3710 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3711 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3712 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3713 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3714 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3715 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3716 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3717 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3718 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3719 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3720 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3721 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3722 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3723 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3724 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3725 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3726 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3727 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3728 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3729 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3730 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3731 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3732
3733 #if USB_IF_EHSET_SUPPORT // embedded host electrical test procedure
3734 if (dev->parent ) // not root hub
3735 {
3736 if (usb_test_proc_vid(dev->descriptor.idVendor, dev->descriptor.idProduct) == 2)
3737 usb_high_speed_test_proc(dev, 2);
3738 }
3739 #endif
3740
3741 u_err(&dev->dev, "new device strings: Mfr=%d, Product=%d, SerialNumber=%d\n",
3742 dev->descriptor.iManufacturer, dev->descriptor.iProduct, dev->descriptor.iSerialNumber);
3743 u_err("VID=0x%04X, PID=0x%04X", dev->descriptor.idVendor,dev->descriptor.idProduct);
3744
3745 #ifdef CONFIG_OPT_TESTING
3746 if ( dev->descriptor.idVendor == 0x1A0A )
3747 {
3748 gOPT_Device_attached = TRUE;
3749 u_err("Device Not Supported- Product ID:D %04X not support",dev->descriptor.idProduct);
3750 }
3751 #endif
3752 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3753 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3754 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3755 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3756 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3757 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3758 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3759 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3760 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3761 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3762 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3763 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3764 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3765 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3766 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3767 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3768 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3769 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3770 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3771 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3772 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3773 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3774 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3775 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3776 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3777 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3778 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3779 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3780 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3781 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3782 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3783 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3784
3785 #ifdef DEBUG
3786 if (dev->descriptor.iProduct)
3787 usb_show_string(dev, "Product", dev->descriptor.iProduct);
3788 if (dev->descriptor.iManufacturer)
3789 usb_show_string(dev, "Manufacturer", dev->descriptor.iManufacturer);
3790 if (dev->descriptor.iSerialNumber)
3791 usb_show_string(dev, "SerialNumber", dev->descriptor.iSerialNumber);
3792 #endif
3793
3794 err = device_add (&dev->dev);
3795 if (err)
3796 goto fail;
3797 //usb_create_driverfs_dev_files (dev);
3798 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3799 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3800 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3801 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3802 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3803 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3804 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3805 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3806 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3807 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3808 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3809 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3810 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3811 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3812 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3813 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3814 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3815 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3816 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3817 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3818 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3819 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3820 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3821 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3822 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3823 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3824 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3825 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3826 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3827 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3828 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3829 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3830
3831 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
3832 struct usb_interface *interface = dev->actconfig->interface[i];
3833 struct usb_interface_descriptor *desc;
3834
3835 desc = &interface->altsetting [interface->act_altsetting].desc;
3836 interface->dev.parent = &dev->dev;
3837 interface->dev.driver = NULL;
3838 interface->dev.bus = &usb_bus_type;
3839 interface->dev.dma_mask = parent->dma_mask;
3840
3841 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3842 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3843 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3844 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3845 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3846 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3847 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3848 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3849 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3850 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3851 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3852 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3853 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3854 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3855 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3856 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3857 strcpy(interface->dev.name,"intf");
3858 USB_sprintf(&interface->dev.bus_id[0], "%ld-%s:%d",
3859 dev->bus->busnum, dev->devpath,
3860 desc->bInterfaceNumber);
3861 #ifdef DEBUG
3862 u_err (" registering interface %s\n", interface->dev.bus_id);
3863 #else
3864 usb_msg("%s %s - registering interface %s\n", dev->dev.name,dev->dev.bus_id, interface->dev.bus_id);
3865 #endif
3866 device_add (&interface->dev);
3867 // Unsupport usb driverfs
3868 // usb_create_driverfs_intf_files (interface);
3869 }
3870
3871 usbfs_add_device(dev);
3872 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3873 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3874 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3875 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3876 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3877 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3878 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3879 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3880 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3881 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3882 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3883 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3884 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3885 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3886 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3887 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3888
3889 return 0;
3890 fail:
3891 dev->state = USB_STATE_DEFAULT;
3892 clear_bit(dev->devnum, dev->bus->devmap.devicemap, unsigned long);
3893 dev->devnum = -1;
3894 usb_put_dev(dev);
3895 return err;
3896 }
3897 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3898 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3899 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3900 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3901 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3902 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3903 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3904 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3905 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3906 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3907 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3908 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3909 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3910 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3911 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3912 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3913
3914
3915 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3916 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3917 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3918 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3919 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3920 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3921 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3922 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3923 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3924 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3925 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3926 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3927 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3928 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3929 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3930 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_buffer_alloc(struct usb_device * dev,size_t size,int mem_flags,dma_addr_t * dma)3931 void *usb_buffer_alloc (
3932 struct usb_device *dev,
3933 size_t size,
3934 int mem_flags,
3935 dma_addr_t *dma
3936 )
3937 {
3938 if (!dev || !dev->bus || !dev->bus->op || !dev->bus->op->buffer_alloc)
3939 return 0;
3940 return dev->bus->op->buffer_alloc (dev->bus, size, mem_flags, dma);
3941 }
3942 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3943 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3944 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3945 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3946 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3947 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3948 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3949 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3950 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3951 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3952 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3953 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3954 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3955 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3956 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3957 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3958
3959
3960 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3961 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3962 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3963 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3964 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3965 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3966 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3967 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3968 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3969 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3970 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3971 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3972 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3973 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3974 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3975 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_buffer_free(struct usb_device * dev,size_t size,void * addr,dma_addr_t dma)3976 void usb_buffer_free (
3977 struct usb_device *dev,
3978 size_t size,
3979 void *addr,
3980 dma_addr_t dma
3981 )
3982 {
3983 if (!dev || !dev->bus || !dev->bus->op || !dev->bus->op->buffer_free)
3984 return;
3985 dev->bus->op->buffer_free (dev->bus, size, addr, dma);
3986 }
3987 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3988 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3989 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3990 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3991 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3992 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3993 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3994 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3995 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3996 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3997 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3998 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
3999 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4000 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4001 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4002 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4003
4004
4005 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4006 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4007 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4008 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4009 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4010 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4011 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4012 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4013 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4014 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4015 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4016 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4017 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4018 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4019 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4020 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_buffer_map(struct urb * urb)4021 struct urb *usb_buffer_map (struct urb *urb)
4022 {
4023 struct usb_bus *bus;
4024 struct device_s *controller;
4025
4026 if (!urb
4027 || !urb->dev
4028 || !(bus = urb->dev->bus)
4029 || !(controller = bus->controller))
4030 return 0;
4031
4032 if (controller->dma_mask) {
4033
4034 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4035 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4036 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4037 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4038 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4039 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4040 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4041 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4042 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4043 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4044 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4045 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4046 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4047 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4048 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4049 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4050 // Unsupport DMA function
4051 /*
4052 urb->transfer_dma = dma_map_single (controller,
4053 urb->transfer_buffer, urb->transfer_buffer_length,
4054 usb_pipein (urb->pipe)
4055 ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
4056 if (usb_pipecontrol (urb->pipe))
4057 urb->setup_dma = dma_map_single (controller,
4058 urb->setup_packet,
4059 sizeof (struct usb_ctrlrequest),
4060 DMA_TO_DEVICE);
4061 */
4062
4063 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4064 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4065 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4066 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4067 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4068 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4069 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4070 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4071 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4072 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4073 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4074 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4075 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4076 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4077 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4078 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4079 // FIXME generic api broken like pci, can't report errors
4080 // if (urb->transfer_dma == DMA_ADDR_INVALID) return 0;
4081 } else
4082 urb->transfer_dma = ~0;
4083 urb->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP
4084 | URB_NO_SETUP_DMA_MAP);
4085 return urb;
4086 }
4087 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4088 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4089 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4090 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4091 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4092 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4093 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4094 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4095 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4096 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4097 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4098 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4099 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4100 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4101 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4102 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4103
4104
4105 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4106 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4107 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4108 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4109 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4110 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4111 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4112 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4113 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4114 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4115 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4116 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4117 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4118 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4119 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4120 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_buffer_dmasync(struct urb * urb)4121 void usb_buffer_dmasync (struct urb *urb)
4122 {
4123 struct usb_bus *bus;
4124 struct device_s *controller;
4125
4126 if (!urb
4127 || !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
4128 || !urb->dev
4129 || !(bus = urb->dev->bus)
4130 || !(controller = bus->controller))
4131 return;
4132
4133 if (controller->dma_mask) {
4134
4135 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4136 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4137 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4138 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4139 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4140 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4141 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4142 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4143 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4144 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4145 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4146 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4147 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4148 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4149 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4150 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4151 // Unsupport DMA function
4152 /*
4153 dma_sync_single (controller,
4154 urb->transfer_dma, urb->transfer_buffer_length,
4155 usb_pipein (urb->pipe)
4156 ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
4157 if (usb_pipecontrol (urb->pipe))
4158 dma_sync_single (controller,
4159 urb->setup_dma,
4160 sizeof (struct usb_ctrlrequest),
4161 DMA_TO_DEVICE);
4162 */
4163
4164 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4165 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4166 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4167 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4168 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4169 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4170 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4171 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4172 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4173 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4174 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4175 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4176 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4177 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4178 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4179 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4180 }
4181 }
4182 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4183 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4184 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4185 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4186 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4187 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4188 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4189 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4190 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4191 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4192 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4193 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4194 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4195 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4196 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4197 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4198
4199
4200 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4201 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4202 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4203 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4204 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4205 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4206 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4207 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4208 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4209 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4210 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4211 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4212 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4213 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4214 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4215 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_buffer_unmap(struct urb * urb)4216 void usb_buffer_unmap (struct urb *urb)
4217 {
4218 struct usb_bus *bus;
4219 struct device_s *controller;
4220
4221 if (!urb
4222 || !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
4223 || !urb->dev
4224 || !(bus = urb->dev->bus)
4225 || !(controller = bus->controller))
4226 return;
4227
4228 if (controller->dma_mask) {
4229
4230 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4231 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4232 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4233 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4234 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4235 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4236 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4237 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4238 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4239 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4240 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4241 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4242 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4243 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4244 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4245 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4246 // Unsupport DMA function
4247 /*
4248 dma_unmap_single (controller,
4249 urb->transfer_dma, urb->transfer_buffer_length,
4250 usb_pipein (urb->pipe)
4251 ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
4252 if (usb_pipecontrol (urb->pipe))
4253 dma_unmap_single (controller,
4254 urb->setup_dma,
4255 sizeof (struct usb_ctrlrequest),
4256 DMA_TO_DEVICE);
4257 */
4258
4259 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4260 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4261 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4262 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4263 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4264 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4265 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4266 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4267 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4268 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4269 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4270 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4271 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4272 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4273 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4274 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4275 }
4276 urb->transfer_flags &= ~(URB_NO_TRANSFER_DMA_MAP
4277 | URB_NO_SETUP_DMA_MAP);
4278 }
4279 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4280 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4281 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4282 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4283 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4284 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4285 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4286 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4287 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4288 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4289 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4290 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4291 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4292 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4293 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4294 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4295
4296
4297 struct bus_type usb_bus_type = {
4298 "USB",
4299 {&usb_bus_type.drivers_list,&usb_bus_type.drivers_list},
4300 {&usb_bus_type.devices_list,&usb_bus_type.devices_list},
4301 usb_device_match,
4302 usb_hotplug, // TODO: test if needed???
4303 };
4304
4305 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4306 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4307 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4308 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4309 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4310 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4311 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4312 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4313 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4314 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4315 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4316 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4317 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4318 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4319 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4320 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4321
usb_disabled(void)4322 MS_S32 usb_disabled(void)
4323 {
4324 return nousb;
4325 }
4326 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4327 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4328 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4329 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4330 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4331 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4332 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4333 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4334 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4335 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4336 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4337 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4338 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4339 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4340 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4341 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4342
4343
4344 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4345 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4346 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4347 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4348 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4349 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4350 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4351 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4352 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4353 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4354 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4355 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4356 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4357 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4358 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4359 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
usb_init(void)4360 static int __init usb_init(void)
4361 {
4362 if (nousb) {
4363 usb_info("USB support disabled%s","\n");
4364 return 0;
4365 }
4366
4367
4368 bus_register(&usb_bus_type);
4369 usb_host_init();
4370
4371 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4372 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4373 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4374 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4375 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4376 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4377 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4378 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4379 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4380 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4381 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4382 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4383 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4384 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4385 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4386 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4387 /*
4388 usb_major_init();
4389 usbfs_init();
4390 */
4391 usb_hub_init();
4392
4393 driver_register(&usb_generic_driver);
4394
4395 return 0;
4396 }
4397 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4398 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4399 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4400 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4401 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4402 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4403 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4404 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4405 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4406 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4407 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4408 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4409 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4410 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4411 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4412 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
4413
4414 #if 0
4415 /*
4416 * Cleanup
4417 */
4418 static void __exit usb_exit(void)
4419 {
4420 /* This will matter if shutdown/reboot does exitcalls. */
4421 if (nousb)
4422 return;
4423
4424 driver_unregister(&usb_generic_driver);
4425 //usb_major_cleanup();
4426 usbfs_cleanup();
4427 usb_hub_cleanup();
4428 usb_host_cleanup();
4429 bus_unregister(&usb_bus_type);
4430 }
4431 #endif
4432
usb_core_init(void)4433 int usb_core_init(void)
4434 {
4435 /*
4436 * Initialize USB core subsystem
4437 * Initialize USB hub driver
4438 */
4439
4440 return usb_init();
4441 }
4442
4443