xref: /utopia/UTPA2-700.0.x/modules/usb/drv/usb_ecos/usbhost/drvUSB.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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