Merge branch 'vendor/TNFTP'
[dragonfly.git] / sys / bus / u4b / usb_device.c
1 /* $FreeBSD$ */
2 /*-
3  * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  */
26
27 #include <sys/stdint.h>
28 #include <sys/param.h>
29 #include <sys/queue.h>
30 #include <sys/types.h>
31 #include <sys/systm.h>
32 #include <sys/kernel.h>
33 #include <sys/bus.h>
34 #include <sys/module.h>
35 #include <sys/lock.h>
36 #include <sys/mutex.h>
37 #include <sys/condvar.h>
38 #include <sys/sysctl.h>
39 #include <sys/unistd.h>
40 #include <sys/callout.h>
41 #include <sys/malloc.h>
42 #include <sys/priv.h>
43 #include <sys/conf.h>
44 #include <sys/fcntl.h>
45 #include <sys/devfs.h>
46
47 #include <bus/u4b/usb.h>
48 #include <bus/u4b/usbdi.h>
49 #include <bus/u4b/usbdi_util.h>
50 #include <bus/u4b/usb_ioctl.h>
51
52 #if USB_HAVE_UGEN
53 #include <sys/sbuf.h>
54 #endif
55
56 #include "usbdevs.h"
57
58 #define USB_DEBUG_VAR usb_debug
59
60 #include <bus/u4b/usb_core.h>
61 #include <bus/u4b/usb_debug.h>
62 #include <bus/u4b/usb_process.h>
63 #include <bus/u4b/usb_device.h>
64 #include <bus/u4b/usb_busdma.h>
65 #include <bus/u4b/usb_transfer.h>
66 #include <bus/u4b/usb_request.h>
67 #include <bus/u4b/usb_dynamic.h>
68 #include <bus/u4b/usb_hub.h>
69 #include <bus/u4b/usb_util.h>
70 #include <bus/u4b/usb_msctest.h>
71 #if USB_HAVE_UGEN
72 #include <bus/u4b/usb_dev.h>
73 #include <bus/u4b/usb_generic.h>
74 #endif
75
76 #include <bus/u4b/quirk/usb_quirk.h>
77
78 #include <bus/u4b/usb_controller.h>
79 #include <bus/u4b/usb_bus.h>
80
81 /* function prototypes  */
82
83 static void     usb_init_endpoint(struct usb_device *, uint8_t,
84                     struct usb_endpoint_descriptor *,
85                     struct usb_endpoint_ss_comp_descriptor *,
86                     struct usb_endpoint *);
87 static void     usb_unconfigure(struct usb_device *, uint8_t);
88 static void     usb_detach_device_sub(struct usb_device *, device_t *,
89                     char **, uint8_t);
90 static uint8_t  usb_probe_and_attach_sub(struct usb_device *,
91                     struct usb_attach_arg *);
92 static void     usb_init_attach_arg(struct usb_device *,
93                     struct usb_attach_arg *);
94 static void     usb_suspend_resume_sub(struct usb_device *, device_t,
95                     uint8_t);
96 static void     usbd_clear_stall_proc(struct usb_proc_msg *_pm);
97 static usb_error_t usb_config_parse(struct usb_device *, uint8_t, uint8_t);
98 static void     usbd_set_device_strings(struct usb_device *);
99 #if USB_HAVE_DEVCTL
100 static void     usb_notify_addq(const char *type, struct usb_device *);
101 #endif
102 #if USB_HAVE_UGEN
103 static void     usb_fifo_free_wrap(struct usb_device *, uint8_t, uint8_t);
104 static void     usb_cdev_create(struct usb_device *);
105 static void     usb_cdev_free(struct usb_device *);
106 #endif
107
108 /* This variable is global to allow easy access to it: */
109
110 #ifdef  USB_TEMPLATE
111 int     usb_template = USB_TEMPLATE;
112 #else
113 int     usb_template;
114 #endif
115
116 TUNABLE_INT("hw.usb.usb_template", &usb_template);
117 SYSCTL_INT(_hw_usb, OID_AUTO, template, CTLFLAG_RW,
118     &usb_template, 0, "Selected USB device side template");
119
120 /* English is default language */
121
122 static int usb_lang_id = 0x0009;
123 static int usb_lang_mask = 0x00FF;
124
125 TUNABLE_INT("hw.usb.usb_lang_id", &usb_lang_id);
126 SYSCTL_INT(_hw_usb, OID_AUTO, usb_lang_id, CTLFLAG_RW,
127     &usb_lang_id, 0, "Preferred USB language ID");
128
129 TUNABLE_INT("hw.usb.usb_lang_mask", &usb_lang_mask);
130 SYSCTL_INT(_hw_usb, OID_AUTO, usb_lang_mask, CTLFLAG_RW,
131     &usb_lang_mask, 0, "Preferred USB language mask");
132
133 static const char* statestr[USB_STATE_MAX] = {
134         [USB_STATE_DETACHED]    = "DETACHED",
135         [USB_STATE_ATTACHED]    = "ATTACHED",
136         [USB_STATE_POWERED]     = "POWERED",
137         [USB_STATE_ADDRESSED]   = "ADDRESSED",
138         [USB_STATE_CONFIGURED]  = "CONFIGURED",
139 };
140
141 const char *
142 usb_statestr(enum usb_dev_state state)
143 {
144         return ((state < USB_STATE_MAX) ? statestr[state] : "UNKNOWN");
145 }
146
147 const char *
148 usb_get_manufacturer(struct usb_device *udev)
149 {
150         return (udev->manufacturer ? udev->manufacturer : "Unknown");
151 }
152
153 const char *
154 usb_get_product(struct usb_device *udev)
155 {
156         return (udev->product ? udev->product : "");
157 }
158
159 const char *
160 usb_get_serial(struct usb_device *udev)
161 {
162         return (udev->serial ? udev->serial : "");
163 }
164
165 /*------------------------------------------------------------------------*
166  *      usbd_get_ep_by_addr
167  *
168  * This function searches for an USB ep by endpoint address and
169  * direction.
170  *
171  * Returns:
172  * NULL: Failure
173  * Else: Success
174  *------------------------------------------------------------------------*/
175 struct usb_endpoint *
176 usbd_get_ep_by_addr(struct usb_device *udev, uint8_t ea_val)
177 {
178         struct usb_endpoint *ep = udev->endpoints;
179         struct usb_endpoint *ep_end = udev->endpoints + udev->endpoints_max;
180         enum {
181                 EA_MASK = (UE_DIR_IN | UE_DIR_OUT | UE_ADDR),
182         };
183
184         /*
185          * According to the USB specification not all bits are used
186          * for the endpoint address. Keep defined bits only:
187          */
188         ea_val &= EA_MASK;
189
190         /*
191          * Iterate accross all the USB endpoints searching for a match
192          * based on the endpoint address:
193          */
194         for (; ep != ep_end; ep++) {
195
196                 if (ep->edesc == NULL) {
197                         continue;
198                 }
199                 /* do the mask and check the value */
200                 if ((ep->edesc->bEndpointAddress & EA_MASK) == ea_val) {
201                         goto found;
202                 }
203         }
204
205         /*
206          * The default endpoint is always present and is checked separately:
207          */
208         if ((udev->ctrl_ep.edesc != NULL) &&
209             ((udev->ctrl_ep.edesc->bEndpointAddress & EA_MASK) == ea_val)) {
210                 ep = &udev->ctrl_ep;
211                 goto found;
212         }
213         return (NULL);
214
215 found:
216         return (ep);
217 }
218
219 /*------------------------------------------------------------------------*
220  *      usbd_get_endpoint
221  *
222  * This function searches for an USB endpoint based on the information
223  * given by the passed "struct usb_config" pointer.
224  *
225  * Return values:
226  * NULL: No match.
227  * Else: Pointer to "struct usb_endpoint".
228  *------------------------------------------------------------------------*/
229 struct usb_endpoint *
230 usbd_get_endpoint(struct usb_device *udev, uint8_t iface_index,
231     const struct usb_config *setup)
232 {
233         struct usb_endpoint *ep = udev->endpoints;
234         struct usb_endpoint *ep_end = udev->endpoints + udev->endpoints_max;
235         uint8_t index = setup->ep_index;
236         uint8_t ea_mask;
237         uint8_t ea_val;
238         uint8_t type_mask;
239         uint8_t type_val;
240
241         DPRINTFN(10, "udev=%p iface_index=%d address=0x%x "
242             "type=0x%x dir=0x%x index=%d\n",
243             udev, iface_index, setup->endpoint,
244             setup->type, setup->direction, setup->ep_index);
245
246         /* check USB mode */
247
248         if (setup->usb_mode != USB_MODE_DUAL &&
249             udev->flags.usb_mode != setup->usb_mode) {
250                 /* wrong mode - no endpoint */
251                 return (NULL);
252         }
253
254         /* setup expected endpoint direction mask and value */
255
256         if (setup->direction == UE_DIR_RX) {
257                 ea_mask = (UE_DIR_IN | UE_DIR_OUT);
258                 ea_val = (udev->flags.usb_mode == USB_MODE_DEVICE) ?
259                     UE_DIR_OUT : UE_DIR_IN;
260         } else if (setup->direction == UE_DIR_TX) {
261                 ea_mask = (UE_DIR_IN | UE_DIR_OUT);
262                 ea_val = (udev->flags.usb_mode == USB_MODE_DEVICE) ?
263                     UE_DIR_IN : UE_DIR_OUT;
264         } else if (setup->direction == UE_DIR_ANY) {
265                 /* match any endpoint direction */
266                 ea_mask = 0;
267                 ea_val = 0;
268         } else {
269                 /* match the given endpoint direction */
270                 ea_mask = (UE_DIR_IN | UE_DIR_OUT);
271                 ea_val = (setup->direction & (UE_DIR_IN | UE_DIR_OUT));
272         }
273
274         /* setup expected endpoint address */
275
276         if (setup->endpoint == UE_ADDR_ANY) {
277                 /* match any endpoint address */
278         } else {
279                 /* match the given endpoint address */
280                 ea_mask |= UE_ADDR;
281                 ea_val |= (setup->endpoint & UE_ADDR);
282         }
283
284         /* setup expected endpoint type */
285
286         if (setup->type == UE_BULK_INTR) {
287                 /* this will match BULK and INTERRUPT endpoints */
288                 type_mask = 2;
289                 type_val = 2;
290         } else if (setup->type == UE_TYPE_ANY) {
291                 /* match any endpoint type */
292                 type_mask = 0;
293                 type_val = 0;
294         } else {
295                 /* match the given endpoint type */
296                 type_mask = UE_XFERTYPE;
297                 type_val = (setup->type & UE_XFERTYPE);
298         }
299
300         /*
301          * Iterate accross all the USB endpoints searching for a match
302          * based on the endpoint address. Note that we are searching
303          * the endpoints from the beginning of the "udev->endpoints" array.
304          */
305         for (; ep != ep_end; ep++) {
306
307                 if ((ep->edesc == NULL) ||
308                     (ep->iface_index != iface_index)) {
309                         continue;
310                 }
311                 /* do the masks and check the values */
312
313                 if (((ep->edesc->bEndpointAddress & ea_mask) == ea_val) &&
314                     ((ep->edesc->bmAttributes & type_mask) == type_val)) {
315                         if (!index--) {
316                                 goto found;
317                         }
318                 }
319         }
320
321         /*
322          * Match against default endpoint last, so that "any endpoint", "any
323          * address" and "any direction" returns the first endpoint of the
324          * interface. "iface_index" and "direction" is ignored:
325          */
326         if ((udev->ctrl_ep.edesc != NULL) &&
327             ((udev->ctrl_ep.edesc->bEndpointAddress & ea_mask) == ea_val) &&
328             ((udev->ctrl_ep.edesc->bmAttributes & type_mask) == type_val) &&
329             (!index)) {
330                 ep = &udev->ctrl_ep;
331                 goto found;
332         }
333         return (NULL);
334
335 found:
336         return (ep);
337 }
338
339 /*------------------------------------------------------------------------*
340  *      usbd_interface_count
341  *
342  * This function stores the number of USB interfaces excluding
343  * alternate settings, which the USB config descriptor reports into
344  * the unsigned 8-bit integer pointed to by "count".
345  *
346  * Returns:
347  *    0: Success
348  * Else: Failure
349  *------------------------------------------------------------------------*/
350 usb_error_t
351 usbd_interface_count(struct usb_device *udev, uint8_t *count)
352 {
353         if (udev->cdesc == NULL) {
354                 *count = 0;
355                 return (USB_ERR_NOT_CONFIGURED);
356         }
357         *count = udev->ifaces_max;
358         return (USB_ERR_NORMAL_COMPLETION);
359 }
360
361 /*------------------------------------------------------------------------*
362  *      usb_init_endpoint
363  *
364  * This function will initialise the USB endpoint structure pointed to by
365  * the "endpoint" argument. The structure pointed to by "endpoint" must be
366  * zeroed before calling this function.
367  *------------------------------------------------------------------------*/
368 static void
369 usb_init_endpoint(struct usb_device *udev, uint8_t iface_index,
370     struct usb_endpoint_descriptor *edesc,
371     struct usb_endpoint_ss_comp_descriptor *ecomp,
372     struct usb_endpoint *ep)
373 {
374         const struct usb_bus_methods *methods;
375         usb_stream_t x;
376
377         methods = udev->bus->methods;
378
379         (methods->endpoint_init) (udev, edesc, ep);
380
381         /* initialise USB endpoint structure */
382         ep->edesc = edesc;
383         ep->ecomp = ecomp;
384         ep->iface_index = iface_index;
385
386         /* setup USB stream queues */
387         for (x = 0; x != USB_MAX_EP_STREAMS; x++) {
388                 TAILQ_INIT(&ep->endpoint_q[x].head);
389                 ep->endpoint_q[x].command = &usbd_pipe_start;
390         }
391
392         /* the pipe is not supported by the hardware */
393         if (ep->methods == NULL)
394                 return;
395
396         /* check for SUPER-speed streams mode endpoint */
397         if (udev->speed == USB_SPEED_SUPER && ecomp != NULL &&
398             (edesc->bmAttributes & UE_XFERTYPE) == UE_BULK &&
399             (UE_GET_BULK_STREAMS(ecomp->bmAttributes) != 0)) {
400                 usbd_set_endpoint_mode(udev, ep, USB_EP_MODE_STREAMS);
401         } else {
402                 usbd_set_endpoint_mode(udev, ep, USB_EP_MODE_DEFAULT);
403         }
404
405         /* clear stall, if any */
406         if (methods->clear_stall != NULL) {
407                 USB_BUS_LOCK(udev->bus);
408                 (methods->clear_stall) (udev, ep);
409                 USB_BUS_UNLOCK(udev->bus);
410         }
411 }
412
413 /*-----------------------------------------------------------------------*
414  *      usb_endpoint_foreach
415  *
416  * This function will iterate all the USB endpoints except the control
417  * endpoint. This function is NULL safe.
418  *
419  * Return values:
420  * NULL: End of USB endpoints
421  * Else: Pointer to next USB endpoint
422  *------------------------------------------------------------------------*/
423 struct usb_endpoint *
424 usb_endpoint_foreach(struct usb_device *udev, struct usb_endpoint *ep)
425 {
426         struct usb_endpoint *ep_end;
427
428         /* be NULL safe */
429         if (udev == NULL)
430                 return (NULL);
431
432         ep_end = udev->endpoints + udev->endpoints_max;
433
434         /* get next endpoint */
435         if (ep == NULL)
436                 ep = udev->endpoints;
437         else
438                 ep++;
439
440         /* find next allocated ep */
441         while (ep != ep_end) {
442                 if (ep->edesc != NULL)
443                         return (ep);
444                 ep++;
445         }
446         return (NULL);
447 }
448
449 /*------------------------------------------------------------------------*
450  *      usb_unconfigure
451  *
452  * This function will free all USB interfaces and USB endpoints belonging
453  * to an USB device.
454  *
455  * Flag values, see "USB_UNCFG_FLAG_XXX".
456  *------------------------------------------------------------------------*/
457 static void
458 usb_unconfigure(struct usb_device *udev, uint8_t flag)
459 {
460         uint8_t do_unlock;
461
462         /* Prevent re-enumeration */
463         do_unlock = usbd_enum_lock(udev);
464
465         /* detach all interface drivers */
466         usb_detach_device(udev, USB_IFACE_INDEX_ANY, flag);
467
468 #if USB_HAVE_UGEN
469         /* free all FIFOs except control endpoint FIFOs */
470         usb_fifo_free_wrap(udev, USB_IFACE_INDEX_ANY, flag);
471
472         /*
473          * Free all cdev's, if any.
474          */
475         usb_cdev_free(udev);
476 #endif
477
478 #if USB_HAVE_COMPAT_LINUX
479         /* free Linux compat device, if any */
480         if (udev->linux_endpoint_start) {
481                 usb_linux_free_device(udev);
482                 udev->linux_endpoint_start = NULL;
483         }
484 #endif
485
486         usb_config_parse(udev, USB_IFACE_INDEX_ANY, USB_CFG_FREE);
487
488         /* free "cdesc" after "ifaces" and "endpoints", if any */
489         if (udev->cdesc != NULL) {
490                 if (udev->flags.usb_mode != USB_MODE_DEVICE)
491                         usbd_free_config_desc(udev, udev->cdesc);
492                 udev->cdesc = NULL;
493         }
494         /* set unconfigured state */
495         udev->curr_config_no = USB_UNCONFIG_NO;
496         udev->curr_config_index = USB_UNCONFIG_INDEX;
497
498         if (do_unlock)
499                 usbd_enum_unlock(udev);
500 }
501
502 /*------------------------------------------------------------------------*
503  *      usbd_set_config_index
504  *
505  * This function selects configuration by index, independent of the
506  * actual configuration number. This function should not be used by
507  * USB drivers.
508  *
509  * Returns:
510  *    0: Success
511  * Else: Failure
512  *------------------------------------------------------------------------*/
513 usb_error_t
514 usbd_set_config_index(struct usb_device *udev, uint8_t index)
515 {
516         struct usb_status ds;
517         struct usb_config_descriptor *cdp;
518         uint16_t power;
519         uint16_t max_power;
520         uint8_t selfpowered;
521         uint8_t do_unlock;
522         usb_error_t err;
523
524         DPRINTFN(6, "udev=%p index=%d\n", udev, index);
525
526         /* Prevent re-enumeration */
527         do_unlock = usbd_enum_lock(udev);
528
529         usb_unconfigure(udev, 0);
530
531         if (index == USB_UNCONFIG_INDEX) {
532                 /*
533                  * Leave unallocated when unconfiguring the
534                  * device. "usb_unconfigure()" will also reset
535                  * the current config number and index.
536                  */
537                 err = usbd_req_set_config(udev, NULL, USB_UNCONFIG_NO);
538                 if (udev->state == USB_STATE_CONFIGURED)
539                         usb_set_device_state(udev, USB_STATE_ADDRESSED);
540                 goto done;
541         }
542         /* get the full config descriptor */
543         if (udev->flags.usb_mode == USB_MODE_DEVICE) {
544                 /* save some memory */
545                 err = usbd_req_get_descriptor_ptr(udev, &cdp, 
546                     (UDESC_CONFIG << 8) | index);
547         } else {
548                 /* normal request */
549                 err = usbd_req_get_config_desc_full(udev,
550                     NULL, &cdp, index);
551         }
552         if (err) {
553                 goto done;
554         }
555         /* set the new config descriptor */
556
557         udev->cdesc = cdp;
558
559         /* Figure out if the device is self or bus powered. */
560         selfpowered = 0;
561         if ((!udev->flags.uq_bus_powered) &&
562             (cdp->bmAttributes & UC_SELF_POWERED) &&
563             (udev->flags.usb_mode == USB_MODE_HOST)) {
564                 /* May be self powered. */
565                 if (cdp->bmAttributes & UC_BUS_POWERED) {
566                         /* Must ask device. */
567                         err = usbd_req_get_device_status(udev, NULL, &ds);
568                         if (err) {
569                                 DPRINTFN(0, "could not read "
570                                     "device status: %s\n",
571                                     usbd_errstr(err));
572                         } else if (UGETW(ds.wStatus) & UDS_SELF_POWERED) {
573                                 selfpowered = 1;
574                         }
575                         DPRINTF("status=0x%04x \n",
576                                 UGETW(ds.wStatus));
577                 } else
578                         selfpowered = 1;
579         }
580         DPRINTF("udev=%p cdesc=%p (addr %d) cno=%d attr=0x%02x, "
581             "selfpowered=%d, power=%d\n",
582             udev, cdp,
583             udev->address, cdp->bConfigurationValue, cdp->bmAttributes,
584             selfpowered, cdp->bMaxPower * 2);
585
586         /* Check if we have enough power. */
587         power = cdp->bMaxPower * 2;
588
589         if (udev->parent_hub) {
590                 max_power = udev->parent_hub->hub->portpower;
591         } else {
592                 max_power = USB_MAX_POWER;
593         }
594
595         if (power > max_power) {
596                 DPRINTFN(0, "power exceeded %d > %d\n", power, max_power);
597                 err = USB_ERR_NO_POWER;
598                 goto done;
599         }
600         /* Only update "self_powered" in USB Host Mode */
601         if (udev->flags.usb_mode == USB_MODE_HOST) {
602                 udev->flags.self_powered = selfpowered;
603         }
604         udev->power = power;
605         udev->curr_config_no = cdp->bConfigurationValue;
606         udev->curr_config_index = index;
607         usb_set_device_state(udev, USB_STATE_CONFIGURED);
608
609         /* Set the actual configuration value. */
610         err = usbd_req_set_config(udev, NULL, cdp->bConfigurationValue);
611         if (err) {
612                 goto done;
613         }
614
615         err = usb_config_parse(udev, USB_IFACE_INDEX_ANY, USB_CFG_ALLOC);
616         if (err) {
617                 goto done;
618         }
619
620         err = usb_config_parse(udev, USB_IFACE_INDEX_ANY, USB_CFG_INIT);
621         if (err) {
622                 goto done;
623         }
624
625 #if USB_HAVE_UGEN
626         /* create device nodes for each endpoint */
627         usb_cdev_create(udev);
628 #endif
629
630 done:
631         DPRINTF("error=%s\n", usbd_errstr(err));
632         if (err) {
633                 usb_unconfigure(udev, 0);
634         }
635         if (do_unlock)
636                 usbd_enum_unlock(udev);
637         return (err);
638 }
639
640 /*------------------------------------------------------------------------*
641  *      usb_config_parse
642  *
643  * This function will allocate and free USB interfaces and USB endpoints,
644  * parse the USB configuration structure and initialise the USB endpoints
645  * and interfaces. If "iface_index" is not equal to
646  * "USB_IFACE_INDEX_ANY" then the "cmd" parameter is the
647  * alternate_setting to be selected for the given interface. Else the
648  * "cmd" parameter is defined by "USB_CFG_XXX". "iface_index" can be
649  * "USB_IFACE_INDEX_ANY" or a valid USB interface index. This function
650  * is typically called when setting the configuration or when setting
651  * an alternate interface.
652  *
653  * Returns:
654  *    0: Success
655  * Else: Failure
656  *------------------------------------------------------------------------*/
657 static usb_error_t
658 usb_config_parse(struct usb_device *udev, uint8_t iface_index, uint8_t cmd)
659 {
660         struct usb_idesc_parse_state ips;
661         struct usb_interface_descriptor *id;
662         struct usb_endpoint_descriptor *ed;
663         struct usb_interface *iface;
664         struct usb_endpoint *ep;
665         usb_error_t err;
666         uint8_t ep_curr;
667         uint8_t ep_max;
668         uint8_t temp;
669         uint8_t do_init;
670         uint8_t alt_index;
671
672         if (iface_index != USB_IFACE_INDEX_ANY) {
673                 /* parameter overload */
674                 alt_index = cmd;
675                 cmd = USB_CFG_INIT;
676         } else {
677                 /* not used */
678                 alt_index = 0;
679         }
680
681         err = 0;
682
683         DPRINTFN(5, "iface_index=%d cmd=%d\n",
684             iface_index, cmd);
685
686         if (cmd == USB_CFG_FREE)
687                 goto cleanup;
688
689         if (cmd == USB_CFG_INIT) {
690                 KKASSERT(lockowned(&udev->enum_lock));
691
692                 /* check for in-use endpoints */
693
694                 ep = udev->endpoints;
695                 ep_max = udev->endpoints_max;
696                 while (ep_max--) {
697                         /* look for matching endpoints */
698                         if ((iface_index == USB_IFACE_INDEX_ANY) ||
699                             (iface_index == ep->iface_index)) {
700                                 if (ep->refcount_alloc != 0) {
701                                         /*
702                                          * This typically indicates a
703                                          * more serious error.
704                                          */
705                                         err = USB_ERR_IN_USE;
706                                 } else {
707                                         /* reset endpoint */
708                                         memset(ep, 0, sizeof(*ep));
709                                         /* make sure we don't zero the endpoint again */
710                                         ep->iface_index = USB_IFACE_INDEX_ANY;
711                                 }
712                         }
713                         ep++;
714                 }
715
716                 if (err)
717                         return (err);
718         }
719
720         memset(&ips, 0, sizeof(ips));
721
722         ep_curr = 0;
723         ep_max = 0;
724
725         while ((id = usb_idesc_foreach(udev->cdesc, &ips))) {
726
727                 iface = udev->ifaces + ips.iface_index;
728
729                 /* check for specific interface match */
730
731                 if (cmd == USB_CFG_INIT) {
732                         if ((iface_index != USB_IFACE_INDEX_ANY) && 
733                             (iface_index != ips.iface_index)) {
734                                 /* wrong interface */
735                                 do_init = 0;
736                         } else if (alt_index != ips.iface_index_alt) {
737                                 /* wrong alternate setting */
738                                 do_init = 0;
739                         } else {
740                                 /* initialise interface */
741                                 do_init = 1;
742                         }
743                 } else
744                         do_init = 0;
745
746                 /* check for new interface */
747                 if (ips.iface_index_alt == 0) {
748                         /* update current number of endpoints */
749                         ep_curr = ep_max;
750                 }
751                 /* check for init */
752                 if (do_init) {
753                         /* setup the USB interface structure */
754                         iface->idesc = id;
755                         /* set alternate index */
756                         iface->alt_index = alt_index;
757                         /* set default interface parent */
758                         if (iface_index == USB_IFACE_INDEX_ANY) {
759                                 iface->parent_iface_index =
760                                         USB_IFACE_INDEX_ANY;
761                         }
762                 }
763
764                 DPRINTFN(5, "found idesc nendpt=%d\n", id->bNumEndpoints);
765
766                 ed = (struct usb_endpoint_descriptor *)id;
767
768                 temp = ep_curr;
769
770                 /* iterate all the endpoint descriptors */
771                 while ((ed = usb_edesc_foreach(udev->cdesc, ed))) {
772
773                         /* check if endpoint limit has been reached */
774                         if (temp >= USB_MAX_EP_UNITS) {
775                                 DPRINTF("Endpoint limit reached\n");
776                                 break;
777                         }
778
779                         ep = udev->endpoints + temp;
780
781                         if (do_init) {
782                                 void *ecomp;
783
784                                 ecomp = usb_ed_comp_foreach(udev->cdesc, (void *)ed);
785                                 if (ecomp != NULL)
786                                         DPRINTFN(5, "Found endpoint companion descriptor\n");
787
788                                 usb_init_endpoint(udev, 
789                                     ips.iface_index, ed, ecomp, ep);
790                         }
791
792                         temp ++;
793
794                         /* find maximum number of endpoints */
795                         if (ep_max < temp)
796                                 ep_max = temp;
797                 }
798         }
799
800         /* NOTE: It is valid to have no interfaces and no endpoints! */
801
802         if (cmd == USB_CFG_ALLOC) {
803                 udev->ifaces_max = ips.iface_index;
804 #if (USB_HAVE_FIXED_IFACE == 0)
805                 udev->ifaces = NULL;
806                 if (udev->ifaces_max != 0) {
807                         udev->ifaces = kmalloc(sizeof(*iface) * udev->ifaces_max,
808                                 M_USB, M_WAITOK | M_ZERO);
809                         if (udev->ifaces == NULL) {
810                                 err = USB_ERR_NOMEM;
811                                 goto done;
812                         }
813                 }
814 #endif
815 #if (USB_HAVE_FIXED_ENDPOINT == 0)
816                 if (ep_max != 0) {
817                         udev->endpoints = kmalloc(sizeof(*ep) * ep_max,
818                                 M_USB, M_WAITOK | M_ZERO);
819                         if (udev->endpoints == NULL) {
820                                 err = USB_ERR_NOMEM;
821                                 goto done;
822                         }
823                 } else {
824                         udev->endpoints = NULL;
825                 }
826 #endif
827                 USB_BUS_LOCK(udev->bus);
828                 udev->endpoints_max = ep_max;
829                 /* reset any ongoing clear-stall */
830                 udev->ep_curr = NULL;
831                 USB_BUS_UNLOCK(udev->bus);
832         }
833 #if (USB_HAVE_FIXED_IFACE == 0) || (USB_HAVE_FIXED_ENDPOINT == 0) 
834 done:
835 #endif
836         if (err) {
837                 if (cmd == USB_CFG_ALLOC) {
838 cleanup:
839                         USB_BUS_LOCK(udev->bus);
840                         udev->endpoints_max = 0;
841                         /* reset any ongoing clear-stall */
842                         udev->ep_curr = NULL;
843                         USB_BUS_UNLOCK(udev->bus);
844
845 #if (USB_HAVE_FIXED_IFACE == 0)
846                         if(udev->ifaces != NULL) {
847                             kfree(udev->ifaces, M_USB);
848                             udev->ifaces = NULL;
849                         }
850 #endif
851 #if (USB_HAVE_FIXED_ENDPOINT == 0)
852                         if(udev->endpoints != NULL) {
853                             kfree(udev->endpoints, M_USB);
854                             udev->endpoints = NULL;
855                         }
856 #endif
857                         udev->ifaces_max = 0;
858                 }
859         }
860         return (err);
861 }
862
863 /*------------------------------------------------------------------------*
864  *      usbd_set_alt_interface_index
865  *
866  * This function will select an alternate interface index for the
867  * given interface index. The interface should not be in use when this
868  * function is called. That means there should not be any open USB
869  * transfers. Else an error is returned. If the alternate setting is
870  * already set this function will simply return success. This function
871  * is called in Host mode and Device mode!
872  *
873  * Returns:
874  *    0: Success
875  * Else: Failure
876  *------------------------------------------------------------------------*/
877 usb_error_t
878 usbd_set_alt_interface_index(struct usb_device *udev,
879     uint8_t iface_index, uint8_t alt_index)
880 {
881         struct usb_interface *iface = usbd_get_iface(udev, iface_index);
882         usb_error_t err;
883         uint8_t do_unlock;
884
885         /* Prevent re-enumeration */
886         do_unlock = usbd_enum_lock(udev);
887
888         if (iface == NULL) {
889                 err = USB_ERR_INVAL;
890                 goto done;
891         }
892         if (iface->alt_index == alt_index) {
893                 /* 
894                  * Optimise away duplicate setting of
895                  * alternate setting in USB Host Mode!
896                  */
897                 err = 0;
898                 goto done;
899         }
900 #if USB_HAVE_UGEN
901         /*
902          * Free all generic FIFOs for this interface, except control
903          * endpoint FIFOs:
904          */
905         usb_fifo_free_wrap(udev, iface_index, 0);
906 #endif
907
908         err = usb_config_parse(udev, iface_index, alt_index);
909         if (err) {
910                 goto done;
911         }
912         if (iface->alt_index != alt_index) {
913                 /* the alternate setting does not exist */
914                 err = USB_ERR_INVAL;
915                 goto done;
916         }
917
918         err = usbd_req_set_alt_interface_no(udev, NULL, iface_index,
919             iface->idesc->bAlternateSetting);
920
921 done:
922         if (do_unlock)
923                 usbd_enum_unlock(udev);
924         return (err);
925 }
926
927 /*------------------------------------------------------------------------*
928  *      usbd_set_endpoint_stall
929  *
930  * This function is used to make a BULK or INTERRUPT endpoint send
931  * STALL tokens in USB device mode.
932  *
933  * Returns:
934  *    0: Success
935  * Else: Failure
936  *------------------------------------------------------------------------*/
937 usb_error_t
938 usbd_set_endpoint_stall(struct usb_device *udev, struct usb_endpoint *ep,
939     uint8_t do_stall)
940 {
941         struct usb_xfer *xfer;
942         usb_stream_t x;
943         uint8_t et;
944         uint8_t was_stalled;
945
946         if (ep == NULL) {
947                 /* nothing to do */
948                 DPRINTF("Cannot find endpoint\n");
949                 /*
950                  * Pretend that the clear or set stall request is
951                  * successful else some USB host stacks can do
952                  * strange things, especially when a control endpoint
953                  * stalls.
954                  */
955                 return (0);
956         }
957         et = (ep->edesc->bmAttributes & UE_XFERTYPE);
958
959         if ((et != UE_BULK) &&
960             (et != UE_INTERRUPT)) {
961                 /*
962                  * Should not stall control
963                  * nor isochronous endpoints.
964                  */
965                 DPRINTF("Invalid endpoint\n");
966                 return (0);
967         }
968         USB_BUS_LOCK(udev->bus);
969
970         /* store current stall state */
971         was_stalled = ep->is_stalled;
972
973         /* check for no change */
974         if (was_stalled && do_stall) {
975                 /* if the endpoint is already stalled do nothing */
976                 USB_BUS_UNLOCK(udev->bus);
977                 DPRINTF("No change\n");
978                 return (0);
979         }
980         /* set stalled state */
981         ep->is_stalled = 1;
982
983         if (do_stall || (!was_stalled)) {
984                 if (!was_stalled) {
985                         for (x = 0; x != USB_MAX_EP_STREAMS; x++) {
986                                 /* lookup the current USB transfer, if any */
987                                 xfer = ep->endpoint_q[x].curr;
988                                 if (xfer != NULL) {
989                                         /*
990                                          * The "xfer_stall" method
991                                          * will complete the USB
992                                          * transfer like in case of a
993                                          * timeout setting the error
994                                          * code "USB_ERR_STALLED".
995                                          */
996                                         (udev->bus->methods->xfer_stall) (xfer);
997                                 }
998                         }
999                 }
1000                 (udev->bus->methods->set_stall) (udev, ep, &do_stall);
1001         }
1002         if (!do_stall) {
1003                 ep->toggle_next = 0;    /* reset data toggle */
1004                 ep->is_stalled = 0;     /* clear stalled state */
1005
1006                 (udev->bus->methods->clear_stall) (udev, ep);
1007
1008                 /* start the current or next transfer, if any */
1009                 for (x = 0; x != USB_MAX_EP_STREAMS; x++) {
1010                         usb_command_wrapper(&ep->endpoint_q[x],
1011                             ep->endpoint_q[x].curr);
1012                 }
1013         }
1014         USB_BUS_UNLOCK(udev->bus);
1015         return (0);
1016 }
1017
1018 /*------------------------------------------------------------------------*
1019  *      usb_reset_iface_endpoints - used in USB device side mode
1020  *------------------------------------------------------------------------*/
1021 usb_error_t
1022 usb_reset_iface_endpoints(struct usb_device *udev, uint8_t iface_index)
1023 {
1024         struct usb_endpoint *ep;
1025         struct usb_endpoint *ep_end;
1026
1027         ep = udev->endpoints;
1028         ep_end = udev->endpoints + udev->endpoints_max;
1029
1030         for (; ep != ep_end; ep++) {
1031
1032                 if ((ep->edesc == NULL) ||
1033                     (ep->iface_index != iface_index)) {
1034                         continue;
1035                 }
1036                 /* simulate a clear stall from the peer */
1037                 usbd_set_endpoint_stall(udev, ep, 0);
1038         }
1039         return (0);
1040 }
1041
1042 /*------------------------------------------------------------------------*
1043  *      usb_detach_device_sub
1044  *
1045  * This function will try to detach an USB device. If it fails a panic
1046  * will result.
1047  *
1048  * Flag values, see "USB_UNCFG_FLAG_XXX".
1049  *------------------------------------------------------------------------*/
1050 static void
1051 usb_detach_device_sub(struct usb_device *udev, device_t *ppdev,
1052     char **ppnpinfo, uint8_t flag)
1053 {
1054         device_t dev;
1055         char *pnpinfo;
1056         int err;
1057
1058         dev = *ppdev;
1059         if (dev) {
1060                 /*
1061                  * NOTE: It is important to clear "*ppdev" before deleting
1062                  * the child due to some device methods being called late
1063                  * during the delete process !
1064                  */
1065                 *ppdev = NULL;
1066
1067                 device_printf(dev, "at %s, port %d, addr %d "
1068                     "(disconnected)\n",
1069                     device_get_nameunit(udev->parent_dev),
1070                     udev->port_no, udev->address);
1071
1072                 if (device_is_attached(dev)) {
1073                         if (udev->flags.peer_suspended) {
1074                                 err = DEVICE_RESUME(dev);
1075                                 if (err) {
1076                                         device_printf(dev, "Resume failed\n");
1077                                 }
1078                         }
1079                         if (device_detach(dev)) {
1080                                 goto error;
1081                         }
1082                 }
1083                 if (device_delete_child(udev->parent_dev, dev)) {
1084                         goto error;
1085                 }
1086         }
1087
1088         pnpinfo = *ppnpinfo;
1089         if (pnpinfo != NULL) {
1090                 *ppnpinfo = NULL;
1091                 kfree(pnpinfo, M_USBDEV);
1092         }
1093         return;
1094
1095 error:
1096         /* Detach is not allowed to fail in the USB world */
1097         panic("usb_detach_device_sub: A USB driver would not detach\n");
1098 }
1099
1100 /*------------------------------------------------------------------------*
1101  *      usb_detach_device
1102  *
1103  * The following function will detach the matching interfaces.
1104  * This function is NULL safe.
1105  *
1106  * Flag values, see "USB_UNCFG_FLAG_XXX".
1107  *------------------------------------------------------------------------*/
1108 void
1109 usb_detach_device(struct usb_device *udev, uint8_t iface_index,
1110     uint8_t flag)
1111 {
1112         struct usb_interface *iface;
1113         uint8_t i;
1114
1115         if (udev == NULL) {
1116                 /* nothing to do */
1117                 return;
1118         }
1119         DPRINTFN(4, "udev=%p\n", udev);
1120
1121 #if 0
1122         sx_assert(&udev->enum_sx, SA_LOCKED);
1123 #endif
1124
1125         /*
1126          * First detach the child to give the child's detach routine a
1127          * chance to detach the sub-devices in the correct order.
1128          * Then delete the child using "device_delete_child()" which
1129          * will detach all sub-devices from the bottom and upwards!
1130          */
1131         if (iface_index != USB_IFACE_INDEX_ANY) {
1132                 i = iface_index;
1133                 iface_index = i + 1;
1134         } else {
1135                 i = 0;
1136                 iface_index = USB_IFACE_MAX;
1137         }
1138
1139         /* do the detach */
1140
1141         for (; i != iface_index; i++) {
1142
1143                 iface = usbd_get_iface(udev, i);
1144                 if (iface == NULL) {
1145                         /* looks like the end of the USB interfaces */
1146                         break;
1147                 }
1148                 usb_detach_device_sub(udev, &iface->subdev,
1149                     &iface->pnpinfo, flag);
1150         }
1151 }
1152
1153 /*------------------------------------------------------------------------*
1154  *      usb_probe_and_attach_sub
1155  *
1156  * Returns:
1157  *    0: Success
1158  * Else: Failure
1159  *------------------------------------------------------------------------*/
1160 static uint8_t
1161 usb_probe_and_attach_sub(struct usb_device *udev,
1162     struct usb_attach_arg *uaa)
1163 {
1164         struct usb_interface *iface;
1165         device_t dev;
1166         int err;
1167
1168         iface = uaa->iface;
1169         if (iface->parent_iface_index != USB_IFACE_INDEX_ANY) {
1170                 /* leave interface alone */
1171                 return (0);
1172         }
1173         dev = iface->subdev;
1174         if (dev) {
1175
1176                 /* clean up after module unload */
1177
1178                 if (device_is_attached(dev)) {
1179                         /* already a device there */
1180                         return (0);
1181                 }
1182                 /* clear "iface->subdev" as early as possible */
1183
1184                 iface->subdev = NULL;
1185
1186                 if (device_delete_child(udev->parent_dev, dev)) {
1187
1188                         /*
1189                          * Panic here, else one can get a double call
1190                          * to device_detach().  USB devices should
1191                          * never fail on detach!
1192                          */
1193                         panic("device_delete_child() failed\n");
1194                 }
1195         }
1196         if (uaa->temp_dev == NULL) {
1197
1198                 /* create a new child */
1199                 uaa->temp_dev = device_add_child(udev->parent_dev, NULL, -1);
1200                 if (uaa->temp_dev == NULL) {
1201                         device_printf(udev->parent_dev,
1202                             "Device creation failed\n");
1203                         return (1);     /* failure */
1204                 }
1205                 device_set_ivars(uaa->temp_dev, uaa);
1206                 device_quiet(uaa->temp_dev);
1207         }
1208         /*
1209          * Set "subdev" before probe and attach so that "devd" gets
1210          * the information it needs.
1211          */
1212         iface->subdev = uaa->temp_dev;
1213
1214         if (device_probe_and_attach(iface->subdev) == 0) {
1215                 /*
1216                  * The USB attach arguments are only available during probe
1217                  * and attach !
1218                  */
1219                 uaa->temp_dev = NULL;
1220                 device_set_ivars(iface->subdev, NULL);
1221
1222                 if (udev->flags.peer_suspended) {
1223                         err = DEVICE_SUSPEND(iface->subdev);
1224                         if (err)
1225                                 device_printf(iface->subdev, "Suspend failed\n");
1226                 }
1227                 return (0);             /* success */
1228         } else {
1229                 /* No USB driver found */
1230                 iface->subdev = NULL;
1231         }
1232         return (1);                     /* failure */
1233 }
1234
1235 /*------------------------------------------------------------------------*
1236  *      usbd_set_parent_iface
1237  *
1238  * Using this function will lock the alternate interface setting on an
1239  * interface. It is typically used for multi interface drivers. In USB
1240  * device side mode it is assumed that the alternate interfaces all
1241  * have the same endpoint descriptors. The default parent index value
1242  * is "USB_IFACE_INDEX_ANY". Then the alternate setting value is not
1243  * locked.
1244  *------------------------------------------------------------------------*/
1245 void
1246 usbd_set_parent_iface(struct usb_device *udev, uint8_t iface_index,
1247     uint8_t parent_index)
1248 {
1249         struct usb_interface *iface;
1250
1251         if (udev == NULL) {
1252                 /* nothing to do */
1253                 return;
1254         }
1255         iface = usbd_get_iface(udev, iface_index);
1256         if (iface != NULL)
1257                 iface->parent_iface_index = parent_index;
1258 }
1259
1260 static void
1261 usb_init_attach_arg(struct usb_device *udev,
1262     struct usb_attach_arg *uaa)
1263 {
1264         memset(uaa, 0, sizeof(*uaa));
1265
1266         uaa->device = udev;
1267         uaa->usb_mode = udev->flags.usb_mode;
1268         uaa->port = udev->port_no;
1269         uaa->dev_state = UAA_DEV_READY;
1270
1271         uaa->info.idVendor = UGETW(udev->ddesc.idVendor);
1272         uaa->info.idProduct = UGETW(udev->ddesc.idProduct);
1273         uaa->info.bcdDevice = UGETW(udev->ddesc.bcdDevice);
1274         uaa->info.bDeviceClass = udev->ddesc.bDeviceClass;
1275         uaa->info.bDeviceSubClass = udev->ddesc.bDeviceSubClass;
1276         uaa->info.bDeviceProtocol = udev->ddesc.bDeviceProtocol;
1277         uaa->info.bConfigIndex = udev->curr_config_index;
1278         uaa->info.bConfigNum = udev->curr_config_no;
1279 }
1280
1281 /*------------------------------------------------------------------------*
1282  *      usb_probe_and_attach
1283  *
1284  * This function is called from "uhub_explore_sub()",
1285  * "usb_handle_set_config()" and "usb_handle_request()".
1286  *
1287  * Returns:
1288  *    0: Success
1289  * Else: A control transfer failed
1290  *------------------------------------------------------------------------*/
1291 usb_error_t
1292 usb_probe_and_attach(struct usb_device *udev, uint8_t iface_index)
1293 {
1294         struct usb_attach_arg uaa;
1295         struct usb_interface *iface;
1296         uint8_t i;
1297         uint8_t j;
1298         uint8_t do_unlock;
1299
1300         if (udev == NULL) {
1301                 DPRINTF("udev == NULL\n");
1302                 return (USB_ERR_INVAL);
1303         }
1304         /* Prevent re-enumeration */
1305         do_unlock = usbd_enum_lock(udev);
1306
1307         if (udev->curr_config_index == USB_UNCONFIG_INDEX) {
1308                 /* do nothing - no configuration has been set */
1309                 goto done;
1310         }
1311         /* setup USB attach arguments */
1312
1313         usb_init_attach_arg(udev, &uaa);
1314
1315         /*
1316          * If the whole USB device is targeted, invoke the USB event
1317          * handler(s):
1318          */
1319         if (iface_index == USB_IFACE_INDEX_ANY) {
1320
1321                 EVENTHANDLER_INVOKE(usb_dev_configured, udev, &uaa);
1322
1323                 if (uaa.dev_state != UAA_DEV_READY) {
1324                         /* leave device unconfigured */
1325                         usb_unconfigure(udev, 0);
1326                         goto done;
1327                 }
1328         }
1329
1330         /* Check if only one interface should be probed: */
1331         if (iface_index != USB_IFACE_INDEX_ANY) {
1332                 i = iface_index;
1333                 j = i + 1;
1334         } else {
1335                 i = 0;
1336                 j = USB_IFACE_MAX;
1337         }
1338
1339         /* Do the probe and attach */
1340         for (; i != j; i++) {
1341
1342                 iface = usbd_get_iface(udev, i);
1343                 if (iface == NULL) {
1344                         /*
1345                          * Looks like the end of the USB
1346                          * interfaces !
1347                          */
1348                         DPRINTFN(2, "end of interfaces "
1349                             "at %u\n", i);
1350                         break;
1351                 }
1352                 if (iface->idesc == NULL) {
1353                         /* no interface descriptor */
1354                         continue;
1355                 }
1356                 uaa.iface = iface;
1357
1358                 uaa.info.bInterfaceClass =
1359                     iface->idesc->bInterfaceClass;
1360                 uaa.info.bInterfaceSubClass =
1361                     iface->idesc->bInterfaceSubClass;
1362                 uaa.info.bInterfaceProtocol =
1363                     iface->idesc->bInterfaceProtocol;
1364                 uaa.info.bIfaceIndex = i;
1365                 uaa.info.bIfaceNum =
1366                     iface->idesc->bInterfaceNumber;
1367                 uaa.driver_info = 0;    /* reset driver_info */
1368
1369                 DPRINTFN(2, "iclass=%u/%u/%u iindex=%u/%u\n",
1370                     uaa.info.bInterfaceClass,
1371                     uaa.info.bInterfaceSubClass,
1372                     uaa.info.bInterfaceProtocol,
1373                     uaa.info.bIfaceIndex,
1374                     uaa.info.bIfaceNum);
1375
1376                 usb_probe_and_attach_sub(udev, &uaa);
1377
1378                 /*
1379                  * Remove the leftover child, if any, to enforce that
1380                  * a new nomatch devd event is generated for the next
1381                  * interface if no driver is found:
1382                  */
1383                 if (uaa.temp_dev == NULL)
1384                         continue;
1385                 if (device_delete_child(udev->parent_dev, uaa.temp_dev))
1386                         DPRINTFN(0, "device delete child failed\n");
1387                 uaa.temp_dev = NULL;
1388         }
1389 done:
1390         if (do_unlock)
1391                 usbd_enum_unlock(udev);
1392         return (0);
1393 }
1394
1395 /*------------------------------------------------------------------------*
1396  *      usb_suspend_resume_sub
1397  *
1398  * This function is called when the suspend or resume methods should
1399  * be executed on an USB device.
1400  *------------------------------------------------------------------------*/
1401 static void
1402 usb_suspend_resume_sub(struct usb_device *udev, device_t dev, uint8_t do_suspend)
1403 {
1404         int err;
1405
1406         if (dev == NULL) {
1407                 return;
1408         }
1409         if (!device_is_attached(dev)) {
1410                 return;
1411         }
1412         if (do_suspend) {
1413                 err = DEVICE_SUSPEND(dev);
1414         } else {
1415                 err = DEVICE_RESUME(dev);
1416         }
1417         if (err) {
1418                 device_printf(dev, "%s failed\n",
1419                     do_suspend ? "Suspend" : "Resume");
1420         }
1421 }
1422
1423 /*------------------------------------------------------------------------*
1424  *      usb_suspend_resume
1425  *
1426  * The following function will suspend or resume the USB device.
1427  *
1428  * Returns:
1429  *    0: Success
1430  * Else: Failure
1431  *------------------------------------------------------------------------*/
1432 usb_error_t
1433 usb_suspend_resume(struct usb_device *udev, uint8_t do_suspend)
1434 {
1435         struct usb_interface *iface;
1436         uint8_t i;
1437
1438         if (udev == NULL) {
1439                 /* nothing to do */
1440                 return (0);
1441         }
1442         DPRINTFN(4, "udev=%p do_suspend=%d\n", udev, do_suspend);
1443
1444 #if 0
1445         sx_assert(&udev->sr_sx, SA_LOCKED);
1446 #endif
1447
1448         USB_BUS_LOCK(udev->bus);
1449         /* filter the suspend events */
1450         if (udev->flags.peer_suspended == do_suspend) {
1451                 USB_BUS_UNLOCK(udev->bus);
1452                 /* nothing to do */
1453                 return (0);
1454         }
1455         udev->flags.peer_suspended = do_suspend;
1456         USB_BUS_UNLOCK(udev->bus);
1457
1458         /* do the suspend or resume */
1459
1460         for (i = 0; i != USB_IFACE_MAX; i++) {
1461
1462                 iface = usbd_get_iface(udev, i);
1463                 if (iface == NULL) {
1464                         /* looks like the end of the USB interfaces */
1465                         break;
1466                 }
1467                 usb_suspend_resume_sub(udev, iface->subdev, do_suspend);
1468         }
1469         return (0);
1470 }
1471
1472 /*------------------------------------------------------------------------*
1473  *      usbd_clear_stall_proc
1474  *
1475  * This function performs generic USB clear stall operations.
1476  *------------------------------------------------------------------------*/
1477 static void
1478 usbd_clear_stall_proc(struct usb_proc_msg *_pm)
1479 {
1480         struct usb_clear_stall_msg *pm = (void *)_pm;
1481         struct usb_device *udev = pm->udev;
1482
1483         /* Change lock */
1484         USB_BUS_UNLOCK(udev->bus);
1485         lockmgr(&udev->device_lock, LK_EXCLUSIVE);
1486
1487         /* Start clear stall callback */
1488         usbd_transfer_start(udev->ctrl_xfer[1]);
1489
1490         /* Change lock */
1491         lockmgr(&udev->device_lock, LK_RELEASE);
1492         USB_BUS_LOCK(udev->bus);
1493 }
1494
1495 /*------------------------------------------------------------------------*
1496  *      usb_alloc_device
1497  *
1498  * This function allocates a new USB device. This function is called
1499  * when a new device has been put in the powered state, but not yet in
1500  * the addressed state. Get initial descriptor, set the address, get
1501  * full descriptor and get strings.
1502  *
1503  * Return values:
1504  *    0: Failure
1505  * Else: Success
1506  *------------------------------------------------------------------------*/
1507 struct usb_device *
1508 usb_alloc_device(device_t parent_dev, struct usb_bus *bus,
1509     struct usb_device *parent_hub, uint8_t depth, uint8_t port_index,
1510     uint8_t port_no, enum usb_dev_speed speed, enum usb_hc_mode mode)
1511 {
1512         struct usb_attach_arg uaa;
1513         struct usb_device *udev;
1514         struct usb_device *adev;
1515         struct usb_device *hub;
1516         uint8_t *scratch_ptr;
1517         usb_error_t err;
1518         uint8_t device_index;
1519         uint8_t config_index;
1520         uint8_t config_quirk;
1521         uint8_t set_config_failed;
1522         uint8_t do_unlock;
1523
1524         DPRINTF("parent_dev=%p, bus=%p, parent_hub=%p, depth=%u, "
1525             "port_index=%u, port_no=%u, speed=%u, usb_mode=%u\n",
1526             parent_dev, bus, parent_hub, depth, port_index, port_no,
1527             speed, mode);
1528
1529         /*
1530          * Find an unused device index. In USB Host mode this is the
1531          * same as the device address.
1532          *
1533          * Device index zero is not used and device index 1 should
1534          * always be the root hub.
1535          */
1536         for (device_index = USB_ROOT_HUB_ADDR;
1537             (device_index != bus->devices_max) &&
1538             (bus->devices[device_index] != NULL);
1539             device_index++) /* nop */;
1540
1541         if (device_index == bus->devices_max) {
1542                 device_printf(bus->bdev,
1543                     "No free USB device index for new device\n");
1544                 return (NULL);
1545         }
1546
1547         if (depth > 0x10) {
1548                 device_printf(bus->bdev,
1549                     "Invalid device depth\n");
1550                 return (NULL);
1551         }
1552         udev = kmalloc(sizeof(*udev), M_USB, M_WAITOK | M_ZERO);
1553
1554         if (udev == NULL) {
1555                 return (NULL);
1556         }
1557         /* Initialise SX-locks */
1558         lockinit(&udev->enum_lock, "USB config SX lock", 0, LK_CANRECURSE);
1559         /* XXX (mp) is this LK_CANRECURSE necessary? */
1560         lockinit(&udev->sr_lock, "USB suspend and resume SX lock", 0, LK_CANRECURSE);
1561
1562         cv_init(&udev->ctrlreq_cv, "WCTRL");
1563         cv_init(&udev->ref_cv, "UGONE");
1564
1565         /* initialise our mutex */
1566         lockinit(&udev->device_lock, "USB device mutex", 0, 0);
1567
1568         /* initialise generic clear stall */
1569         udev->cs_msg[0].hdr.pm_callback = &usbd_clear_stall_proc;
1570         udev->cs_msg[0].udev = udev;
1571         udev->cs_msg[1].hdr.pm_callback = &usbd_clear_stall_proc;
1572         udev->cs_msg[1].udev = udev;
1573
1574         /* initialise some USB device fields */
1575         udev->parent_hub = parent_hub;
1576         udev->parent_dev = parent_dev;
1577         udev->port_index = port_index;
1578         udev->port_no = port_no;
1579         udev->depth = depth;
1580         udev->bus = bus;
1581         udev->address = USB_START_ADDR; /* default value */
1582         udev->plugtime = (usb_ticks_t)ticks;
1583         /*
1584          * We need to force the power mode to "on" because there are plenty
1585          * of USB devices out there that do not work very well with
1586          * automatic suspend and resume!
1587          */
1588         udev->power_mode = usbd_filter_power_mode(udev, USB_POWER_MODE_ON);
1589         udev->pwr_save.last_xfer_time = ticks;
1590         /* we are not ready yet */
1591         udev->refcount = 1;
1592
1593         /* set up default endpoint descriptor */
1594         udev->ctrl_ep_desc.bLength = sizeof(udev->ctrl_ep_desc);
1595         udev->ctrl_ep_desc.bDescriptorType = UDESC_ENDPOINT;
1596         udev->ctrl_ep_desc.bEndpointAddress = USB_CONTROL_ENDPOINT;
1597         udev->ctrl_ep_desc.bmAttributes = UE_CONTROL;
1598         udev->ctrl_ep_desc.wMaxPacketSize[0] = USB_MAX_IPACKET;
1599         udev->ctrl_ep_desc.wMaxPacketSize[1] = 0;
1600         udev->ctrl_ep_desc.bInterval = 0;
1601
1602         /* set up default endpoint companion descriptor */
1603         udev->ctrl_ep_comp_desc.bLength = sizeof(udev->ctrl_ep_comp_desc);
1604         udev->ctrl_ep_comp_desc.bDescriptorType = UDESC_ENDPOINT_SS_COMP;
1605
1606         udev->ddesc.bMaxPacketSize = USB_MAX_IPACKET;
1607
1608         udev->speed = speed;
1609         udev->flags.usb_mode = mode;
1610
1611         /* search for our High Speed USB HUB, if any */
1612
1613         adev = udev;
1614         hub = udev->parent_hub;
1615
1616         while (hub) {
1617                 if (hub->speed == USB_SPEED_HIGH) {
1618                         udev->hs_hub_addr = hub->address;
1619                         udev->parent_hs_hub = hub;
1620                         udev->hs_port_no = adev->port_no;
1621                         break;
1622                 }
1623                 adev = hub;
1624                 hub = hub->parent_hub;
1625         }
1626
1627         /* init the default endpoint */
1628         usb_init_endpoint(udev, 0,
1629             &udev->ctrl_ep_desc,
1630             &udev->ctrl_ep_comp_desc,
1631             &udev->ctrl_ep);
1632
1633         /* set device index */
1634         udev->device_index = device_index;
1635
1636 #if USB_HAVE_UGEN
1637         /* Create ugen name */
1638         ksnprintf(udev->ugen_name, sizeof(udev->ugen_name),
1639             USB_GENERIC_NAME "%u.%u", device_get_unit(bus->bdev),
1640             device_index);
1641         LIST_INIT(&udev->pd_list);
1642
1643         /* Create the control endpoint device */
1644         udev->ctrl_dev = usb_make_dev(udev, NULL, 0, 0,
1645             FREAD|FWRITE, UID_ROOT, GID_OPERATOR, 0600);
1646
1647         /* Create a link from /dev/ugenX.X to the default endpoint */
1648         if (udev->ctrl_dev != NULL)
1649                 make_dev_alias(udev->ctrl_dev->cdev, "%s", udev->ugen_name);
1650 #endif
1651         /* Initialise device */
1652         if (bus->methods->device_init != NULL) {
1653                 err = (bus->methods->device_init) (udev);
1654                 if (err != 0) {
1655                         DPRINTFN(0, "device init %d failed "
1656                             "(%s, ignored)\n", device_index, 
1657                             usbd_errstr(err));
1658                         goto done;
1659                 }
1660         }
1661         /* set powered device state after device init is complete */
1662         usb_set_device_state(udev, USB_STATE_POWERED);
1663
1664         if (udev->flags.usb_mode == USB_MODE_HOST) {
1665
1666                 err = usbd_req_set_address(udev, NULL, device_index);
1667
1668                 /*
1669                  * This is the new USB device address from now on, if
1670                  * the set address request didn't set it already.
1671                  */
1672                 if (udev->address == USB_START_ADDR)
1673                         udev->address = device_index;
1674
1675                 /*
1676                  * We ignore any set-address errors, hence there are
1677                  * buggy USB devices out there that actually receive
1678                  * the SETUP PID, but manage to set the address before
1679                  * the STATUS stage is ACK'ed. If the device responds
1680                  * to the subsequent get-descriptor at the new
1681                  * address, then we know that the set-address command
1682                  * was successful.
1683                  */
1684                 if (err) {
1685                         DPRINTFN(0, "set address %d failed "
1686                             "(%s, ignored)\n", udev->address, 
1687                             usbd_errstr(err));
1688                 }
1689         } else {
1690                 /* We are not self powered */
1691                 udev->flags.self_powered = 0;
1692
1693                 /* Set unconfigured state */
1694                 udev->curr_config_no = USB_UNCONFIG_NO;
1695                 udev->curr_config_index = USB_UNCONFIG_INDEX;
1696
1697                 /* Setup USB descriptors */
1698                 err = (usb_temp_setup_by_index_p) (udev, usb_template);
1699                 if (err) {
1700                         DPRINTFN(0, "setting up USB template failed maybe the USB "
1701                             "template module has not been loaded\n");
1702                         goto done;
1703                 }
1704         }
1705         usb_set_device_state(udev, USB_STATE_ADDRESSED);
1706
1707         /* setup the device descriptor and the initial "wMaxPacketSize" */
1708         err = usbd_setup_device_desc(udev, NULL);
1709
1710         if (err != 0) {
1711                 /* try to enumerate two more times */
1712                 err = usbd_req_re_enumerate(udev, NULL);
1713                 if (err != 0) {
1714                         err = usbd_req_re_enumerate(udev, NULL);
1715                         if (err != 0) {
1716                                 goto done;
1717                         }
1718                 }
1719         }
1720
1721         /*
1722          * Setup temporary USB attach args so that we can figure out some
1723          * basic quirks for this device.
1724          */
1725         usb_init_attach_arg(udev, &uaa);
1726
1727         if (usb_test_quirk(&uaa, UQ_BUS_POWERED)) {
1728                 udev->flags.uq_bus_powered = 1;
1729         }
1730         if (usb_test_quirk(&uaa, UQ_NO_STRINGS)) {
1731                 udev->flags.no_strings = 1;
1732         }
1733         /*
1734          * Workaround for buggy USB devices.
1735          *
1736          * It appears that some string-less USB chips will crash and
1737          * disappear if any attempts are made to read any string
1738          * descriptors.
1739          *
1740          * Try to detect such chips by checking the strings in the USB
1741          * device descriptor. If no strings are present there we
1742          * simply disable all USB strings.
1743          */
1744
1745         /* Protect scratch area */
1746         do_unlock = usbd_enum_lock(udev);
1747
1748         scratch_ptr = udev->scratch.data;
1749
1750         if (udev->ddesc.iManufacturer ||
1751             udev->ddesc.iProduct ||
1752             udev->ddesc.iSerialNumber) {
1753                 /* read out the language ID string */
1754                 err = usbd_req_get_string_desc(udev, NULL,
1755                     (char *)scratch_ptr, 4, 0, USB_LANGUAGE_TABLE);
1756         } else {
1757                 err = USB_ERR_INVAL;
1758         }
1759
1760         if (err || (scratch_ptr[0] < 4)) {
1761                 udev->flags.no_strings = 1;
1762         } else {
1763                 uint16_t langid;
1764                 uint16_t pref;
1765                 uint16_t mask;
1766                 uint8_t x;
1767
1768                 /* load preferred value and mask */
1769                 pref = usb_lang_id;
1770                 mask = usb_lang_mask;
1771
1772                 /* align length correctly */
1773                 scratch_ptr[0] &= ~1U;
1774
1775                 /* fix compiler warning */
1776                 langid = 0;
1777
1778                 /* search for preferred language */
1779                 for (x = 2; (x < scratch_ptr[0]); x += 2) {
1780                         langid = UGETW(scratch_ptr + x);
1781                         if ((langid & mask) == pref)
1782                                 break;
1783                 }
1784                 if (x >= scratch_ptr[0]) {
1785                         /* pick the first language as the default */
1786                         DPRINTFN(1, "Using first language\n");
1787                         langid = UGETW(scratch_ptr + 2);
1788                 }
1789
1790                 DPRINTFN(1, "Language selected: 0x%04x\n", langid);
1791                 udev->langid = langid;
1792         }
1793
1794         if (do_unlock)
1795                 usbd_enum_unlock(udev);
1796
1797         /* assume 100mA bus powered for now. Changed when configured. */
1798         udev->power = USB_MIN_POWER;
1799         /* fetch the vendor and product strings from the device */
1800         usbd_set_device_strings(udev);
1801
1802         if (udev->flags.usb_mode == USB_MODE_DEVICE) {
1803                 /* USB device mode setup is complete */
1804                 err = 0;
1805                 goto config_done;
1806         }
1807
1808         /*
1809          * Most USB devices should attach to config index 0 by
1810          * default
1811          */
1812         if (usb_test_quirk(&uaa, UQ_CFG_INDEX_0)) {
1813                 config_index = 0;
1814                 config_quirk = 1;
1815         } else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_1)) {
1816                 config_index = 1;
1817                 config_quirk = 1;
1818         } else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_2)) {
1819                 config_index = 2;
1820                 config_quirk = 1;
1821         } else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_3)) {
1822                 config_index = 3;
1823                 config_quirk = 1;
1824         } else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_4)) {
1825                 config_index = 4;
1826                 config_quirk = 1;
1827         } else {
1828                 config_index = 0;
1829                 config_quirk = 0;
1830         }
1831
1832         set_config_failed = 0;
1833 repeat_set_config:
1834
1835         DPRINTF("setting config %u\n", config_index);
1836
1837         /* get the USB device configured */
1838         err = usbd_set_config_index(udev, config_index);
1839         if (err) {
1840                 if (udev->ddesc.bNumConfigurations != 0) {
1841                         if (!set_config_failed) {
1842                                 set_config_failed = 1;
1843                                 /* XXX try to re-enumerate the device */
1844                                 err = usbd_req_re_enumerate(udev, NULL);
1845                                 if (err == 0)
1846                                         goto repeat_set_config;
1847                         }
1848                         DPRINTFN(0, "Failure selecting configuration index %u:"
1849                             "%s, port %u, addr %u (ignored)\n",
1850                             config_index, usbd_errstr(err), udev->port_no,
1851                             udev->address);
1852                 }
1853                 /*
1854                  * Some USB devices do not have any configurations. Ignore any
1855                  * set config failures!
1856                  */
1857                 err = 0;
1858                 goto config_done;
1859         }
1860         if (!config_quirk && config_index + 1 < udev->ddesc.bNumConfigurations) {
1861                 if ((udev->cdesc->bNumInterface < 2) &&
1862                     usbd_get_no_descriptors(udev->cdesc, UDESC_ENDPOINT) == 0) {
1863                         DPRINTFN(0, "Found no endpoints, trying next config\n");
1864                         config_index++;
1865                         goto repeat_set_config;
1866                 }
1867 #if USB_HAVE_MSCTEST
1868                 if (config_index == 0) {
1869                         /*
1870                          * Try to figure out if we have an
1871                          * auto-install disk there:
1872                          */
1873                         if (usb_iface_is_cdrom(udev, 0)) {
1874                                 DPRINTFN(0, "Found possible auto-install "
1875                                     "disk (trying next config)\n");
1876                                 config_index++;
1877                                 goto repeat_set_config;
1878                         }
1879                 }
1880 #endif
1881         }
1882 #if USB_HAVE_MSCTEST
1883         if (set_config_failed == 0 && config_index == 0 &&
1884             usb_test_quirk(&uaa, UQ_MSC_NO_SYNC_CACHE) == 0 &&
1885             usb_test_quirk(&uaa, UQ_MSC_NO_GETMAXLUN) == 0) {
1886
1887                 /*
1888                  * Try to figure out if there are any MSC quirks we
1889                  * should apply automatically:
1890                  */
1891                 err = usb_msc_auto_quirk(udev, 0);
1892
1893                 if (err != 0) {
1894                         set_config_failed = 1;
1895                         goto repeat_set_config;
1896                 }
1897         }
1898 #endif
1899
1900 config_done:
1901         DPRINTF("new dev (addr %d), udev=%p, parent_hub=%p\n",
1902             udev->address, udev, udev->parent_hub);
1903
1904         /* register our device - we are ready */
1905         usb_bus_port_set_device(bus, parent_hub ?
1906             parent_hub->hub->ports + port_index : NULL, udev, device_index);
1907
1908 #if USB_HAVE_UGEN
1909         /* Symlink the ugen device name */
1910         udev->ugen_symlink = usb_alloc_symlink(udev->ugen_name);
1911
1912         /* Announce device */
1913         kprintf("%s: <%s> at %s\n", udev->ugen_name,
1914             usb_get_manufacturer(udev),
1915             device_get_nameunit(udev->bus->bdev));
1916 #endif
1917
1918 #if USB_HAVE_DEVCTL
1919         usb_notify_addq("ATTACH", udev);
1920 #endif
1921 done:
1922         if (err) {
1923                 /*
1924                  * Free USB device and all subdevices, if any.
1925                  */
1926                 usb_free_device(udev, 0);
1927                 udev = NULL;
1928         }
1929         return (udev);
1930 }
1931
1932 #if USB_HAVE_UGEN
1933 struct usb_fs_privdata *
1934 usb_make_dev(struct usb_device *udev, const char *devname, int ep,
1935     int fi, int rwmode, uid_t uid, gid_t gid, int mode)
1936 {
1937         struct usb_fs_privdata* pd;
1938         char buffer[32];
1939
1940         /* Store information to locate ourselves again later */
1941         pd = kmalloc(sizeof(struct usb_fs_privdata), M_USBDEV,
1942             M_WAITOK | M_ZERO);
1943         pd->bus_index = device_get_unit(udev->bus->bdev);
1944         pd->dev_index = udev->device_index;
1945         pd->ep_addr = ep;
1946         pd->fifo_index = fi;
1947         pd->mode = rwmode;
1948
1949         /* Now, create the device itself */
1950         if (devname == NULL) {
1951                 devname = buffer;
1952                 ksnprintf(buffer, sizeof(buffer), USB_DEVICE_DIR "/%u.%u.%u",
1953                     pd->bus_index, pd->dev_index, pd->ep_addr);
1954         }
1955
1956         pd->cdev = make_dev(&usb_ops, 0, uid, gid, mode, "%s", devname);
1957
1958         if (pd->cdev == NULL) {
1959                 DPRINTFN(0, "Failed to create device %s\n", devname);
1960                 kfree(pd, M_USBDEV);
1961                 return (NULL);
1962         }
1963
1964         /* XXX setting si_drv1 and creating the device is not atomic! */
1965         pd->cdev->si_drv1 = pd;
1966
1967         return (pd);
1968 }
1969
1970 void
1971 usb_destroy_dev(struct usb_fs_privdata *pd)
1972 {
1973         if (pd == NULL)
1974                 return;
1975
1976         destroy_dev(pd->cdev);
1977
1978         kfree(pd, M_USBDEV);
1979 }
1980
1981 static void
1982 usb_cdev_create(struct usb_device *udev)
1983 {
1984         struct usb_config_descriptor *cd;
1985         struct usb_endpoint_descriptor *ed;
1986         struct usb_descriptor *desc;
1987         struct usb_fs_privdata* pd;
1988         int inmode, outmode, inmask, outmask, mode;
1989         uint8_t ep;
1990
1991         KASSERT(LIST_FIRST(&udev->pd_list) == NULL, ("stale cdev entries"));
1992
1993         DPRINTFN(2, "Creating device nodes\n");
1994
1995         if (usbd_get_mode(udev) == USB_MODE_DEVICE) {
1996                 inmode = FWRITE;
1997                 outmode = FREAD;
1998         } else {                 /* USB_MODE_HOST */
1999                 inmode = FREAD;
2000                 outmode = FWRITE;
2001         }
2002
2003         inmask = 0;
2004         outmask = 0;
2005         desc = NULL;
2006
2007         /*
2008          * Collect all used endpoint numbers instead of just
2009          * generating 16 static endpoints.
2010          */
2011         cd = usbd_get_config_descriptor(udev);
2012         while ((desc = usb_desc_foreach(cd, desc))) {
2013                 /* filter out all endpoint descriptors */
2014                 if ((desc->bDescriptorType == UDESC_ENDPOINT) &&
2015                     (desc->bLength >= sizeof(*ed))) {
2016                         ed = (struct usb_endpoint_descriptor *)desc;
2017
2018                         /* update masks */
2019                         ep = ed->bEndpointAddress;
2020                         if (UE_GET_DIR(ep)  == UE_DIR_OUT)
2021                                 outmask |= 1 << UE_GET_ADDR(ep);
2022                         else
2023                                 inmask |= 1 << UE_GET_ADDR(ep);
2024                 }
2025         }
2026
2027         /* Create all available endpoints except EP0 */
2028         for (ep = 1; ep < 16; ep++) {
2029                 mode = (inmask & (1 << ep)) ? inmode : 0;
2030                 mode |= (outmask & (1 << ep)) ? outmode : 0;
2031                 if (mode == 0)
2032                         continue;       /* no IN or OUT endpoint */
2033
2034                 pd = usb_make_dev(udev, NULL, ep, 0,
2035                     mode, UID_ROOT, GID_OPERATOR, 0600);
2036
2037                 if (pd != NULL)
2038                         LIST_INSERT_HEAD(&udev->pd_list, pd, pd_next);
2039         }
2040 }
2041
2042 static void
2043 usb_cdev_free(struct usb_device *udev)
2044 {
2045         struct usb_fs_privdata* pd;
2046
2047         DPRINTFN(2, "Freeing device nodes\n");
2048
2049         while ((pd = LIST_FIRST(&udev->pd_list)) != NULL) {
2050                 KASSERT(pd->cdev->si_drv1 == pd, ("privdata corrupt"));
2051
2052                 LIST_REMOVE(pd, pd_next);
2053
2054                 usb_destroy_dev(pd);
2055         }
2056 }
2057 #endif
2058
2059 /*------------------------------------------------------------------------*
2060  *      usb_free_device
2061  *
2062  * This function is NULL safe and will free an USB device and its
2063  * children devices, if any.
2064  *
2065  * Flag values: Reserved, set to zero.
2066  *------------------------------------------------------------------------*/
2067 void
2068 usb_free_device(struct usb_device *udev, uint8_t flag)
2069 {
2070         struct usb_bus *bus;
2071
2072         if (udev == NULL)
2073                 return;         /* already freed */
2074
2075         DPRINTFN(4, "udev=%p port=%d\n", udev, udev->port_no);
2076
2077         bus = udev->bus;
2078         usb_set_device_state(udev, USB_STATE_DETACHED);
2079
2080 #if USB_HAVE_DEVCTL
2081         usb_notify_addq("DETACH", udev);
2082 #endif
2083
2084 #if USB_HAVE_UGEN
2085         kprintf("%s: <%s> at %s (disconnected)\n", udev->ugen_name,
2086             usb_get_manufacturer(udev), device_get_nameunit(bus->bdev));
2087
2088         /* Destroy UGEN symlink, if any */
2089         if (udev->ugen_symlink) {
2090                 usb_free_symlink(udev->ugen_symlink);
2091                 udev->ugen_symlink = NULL;
2092         }
2093 #endif
2094         /*
2095          * Unregister our device first which will prevent any further
2096          * references:
2097          */
2098         usb_bus_port_set_device(bus, udev->parent_hub ?
2099             udev->parent_hub->hub->ports + udev->port_index : NULL,
2100             NULL, USB_ROOT_HUB_ADDR);
2101
2102 #if USB_HAVE_UGEN
2103         /* wait for all pending references to go away: */
2104         lockmgr(&usb_ref_lock, LK_EXCLUSIVE);
2105         udev->refcount--;
2106         while (udev->refcount != 0) {
2107                 cv_wait(&udev->ref_cv, &usb_ref_lock);
2108         }
2109         lockmgr(&usb_ref_lock, LK_RELEASE);
2110
2111         usb_destroy_dev(udev->ctrl_dev);
2112 #endif
2113
2114         if (udev->flags.usb_mode == USB_MODE_DEVICE) {
2115                 /* stop receiving any control transfers (Device Side Mode) */
2116                 usbd_transfer_unsetup(udev->ctrl_xfer, USB_CTRL_XFER_MAX);
2117         }
2118
2119         /* the following will get the device unconfigured in software */
2120         usb_unconfigure(udev, USB_UNCFG_FLAG_FREE_EP0);
2121
2122         /* unsetup any leftover default USB transfers */
2123         usbd_transfer_unsetup(udev->ctrl_xfer, USB_CTRL_XFER_MAX);
2124
2125         /* template unsetup, if any */
2126         (usb_temp_unsetup_p) (udev);
2127
2128         /* 
2129          * Make sure that our clear-stall messages are not queued
2130          * anywhere:
2131          */
2132         USB_BUS_LOCK(udev->bus);
2133         usb_proc_mwait(USB_BUS_NON_GIANT_PROC(udev->bus),
2134             &udev->cs_msg[0], &udev->cs_msg[1]);
2135         USB_BUS_UNLOCK(udev->bus);
2136
2137         lockuninit(&udev->enum_lock);
2138         lockuninit(&udev->sr_lock);
2139
2140         cv_destroy(&udev->ctrlreq_cv);
2141         cv_destroy(&udev->ref_cv);
2142
2143         lockuninit(&udev->device_lock);
2144 #if USB_HAVE_UGEN
2145         KASSERT(LIST_FIRST(&udev->pd_list) == NULL, ("leaked cdev entries"));
2146 #endif
2147
2148         /* Uninitialise device */
2149         if (bus->methods->device_uninit != NULL)
2150                 (bus->methods->device_uninit) (udev);
2151
2152         /* free device */
2153         if(udev->serial)
2154                 kfree(udev->serial, M_USB);
2155         if(udev->manufacturer)
2156                 kfree(udev->manufacturer, M_USB);
2157         if(udev->product)
2158                 kfree(udev->product, M_USB);
2159         kfree(udev, M_USB);
2160 }
2161
2162 /*------------------------------------------------------------------------*
2163  *      usbd_get_iface
2164  *
2165  * This function is the safe way to get the USB interface structure
2166  * pointer by interface index.
2167  *
2168  * Return values:
2169  *   NULL: Interface not present.
2170  *   Else: Pointer to USB interface structure.
2171  *------------------------------------------------------------------------*/
2172 struct usb_interface *
2173 usbd_get_iface(struct usb_device *udev, uint8_t iface_index)
2174 {
2175         struct usb_interface *iface = udev->ifaces + iface_index;
2176
2177         if (iface_index >= udev->ifaces_max)
2178                 return (NULL);
2179         return (iface);
2180 }
2181
2182 /*------------------------------------------------------------------------*
2183  *      usbd_find_descriptor
2184  *
2185  * This function will lookup the first descriptor that matches the
2186  * criteria given by the arguments "type" and "subtype". Descriptors
2187  * will only be searched within the interface having the index
2188  * "iface_index".  If the "id" argument points to an USB descriptor,
2189  * it will be skipped before the search is started. This allows
2190  * searching for multiple descriptors using the same criteria. Else
2191  * the search is started after the interface descriptor.
2192  *
2193  * Return values:
2194  *   NULL: End of descriptors
2195  *   Else: A descriptor matching the criteria
2196  *------------------------------------------------------------------------*/
2197 void   *
2198 usbd_find_descriptor(struct usb_device *udev, void *id, uint8_t iface_index,
2199     uint8_t type, uint8_t type_mask,
2200     uint8_t subtype, uint8_t subtype_mask)
2201 {
2202         struct usb_descriptor *desc;
2203         struct usb_config_descriptor *cd;
2204         struct usb_interface *iface;
2205
2206         cd = usbd_get_config_descriptor(udev);
2207         if (cd == NULL) {
2208                 return (NULL);
2209         }
2210         if (id == NULL) {
2211                 iface = usbd_get_iface(udev, iface_index);
2212                 if (iface == NULL) {
2213                         return (NULL);
2214                 }
2215                 id = usbd_get_interface_descriptor(iface);
2216                 if (id == NULL) {
2217                         return (NULL);
2218                 }
2219         }
2220         desc = (void *)id;
2221
2222         while ((desc = usb_desc_foreach(cd, desc))) {
2223
2224                 if (desc->bDescriptorType == UDESC_INTERFACE) {
2225                         break;
2226                 }
2227                 if (((desc->bDescriptorType & type_mask) == type) &&
2228                     ((desc->bDescriptorSubtype & subtype_mask) == subtype)) {
2229                         return (desc);
2230                 }
2231         }
2232         return (NULL);
2233 }
2234
2235 /*------------------------------------------------------------------------*
2236  *      usb_devinfo
2237  *
2238  * This function will dump information from the device descriptor
2239  * belonging to the USB device pointed to by "udev", to the string
2240  * pointed to by "dst_ptr" having a maximum length of "dst_len" bytes
2241  * including the terminating zero.
2242  *------------------------------------------------------------------------*/
2243 void
2244 usb_devinfo(struct usb_device *udev, char *dst_ptr, uint16_t dst_len)
2245 {
2246         struct usb_device_descriptor *udd = &udev->ddesc;
2247         uint16_t bcdDevice;
2248         uint16_t bcdUSB;
2249
2250         bcdUSB = UGETW(udd->bcdUSB);
2251         bcdDevice = UGETW(udd->bcdDevice);
2252
2253         if (udd->bDeviceClass != 0xFF) {
2254                 ksnprintf(dst_ptr, dst_len, "%s %s, class %d/%d, rev %x.%02x/"
2255                     "%x.%02x, addr %d",
2256                     usb_get_manufacturer(udev),
2257                     usb_get_product(udev),
2258                     udd->bDeviceClass, udd->bDeviceSubClass,
2259                     (bcdUSB >> 8), bcdUSB & 0xFF,
2260                     (bcdDevice >> 8), bcdDevice & 0xFF,
2261                     udev->address);
2262         } else {
2263                 ksnprintf(dst_ptr, dst_len, "%s %s, rev %x.%02x/"
2264                     "%x.%02x, addr %d",
2265                     usb_get_manufacturer(udev),
2266                     usb_get_product(udev),
2267                     (bcdUSB >> 8), bcdUSB & 0xFF,
2268                     (bcdDevice >> 8), bcdDevice & 0xFF,
2269                     udev->address);
2270         }
2271 }
2272
2273 #ifdef USB_VERBOSE
2274 /*
2275  * Descriptions of of known vendors and devices ("products").
2276  */
2277 struct usb_knowndev {
2278         uint16_t vendor;
2279         uint16_t product;
2280         uint32_t flags;
2281         const char *vendorname;
2282         const char *productname;
2283 };
2284
2285 #define USB_KNOWNDEV_NOPROD     0x01    /* match on vendor only */
2286
2287 #include "usbdevs.h"
2288 #include "usbdevs_data.h"
2289 #endif                                  /* USB_VERBOSE */
2290
2291 static void
2292 usbd_set_device_strings(struct usb_device *udev)
2293 {
2294         struct usb_device_descriptor *udd = &udev->ddesc;
2295 #ifdef USB_VERBOSE
2296         const struct usb_knowndev *kdp;
2297 #endif
2298         char *temp_ptr;
2299         size_t temp_size;
2300         uint16_t vendor_id;
2301         uint16_t product_id;
2302         uint8_t do_unlock;
2303
2304         /* Protect scratch area */
2305         do_unlock = usbd_enum_lock(udev);
2306
2307         temp_ptr = (char *)udev->scratch.data;
2308         temp_size = sizeof(udev->scratch.data);
2309
2310         vendor_id = UGETW(udd->idVendor);
2311         product_id = UGETW(udd->idProduct);
2312
2313         /* get serial number string */
2314         usbd_req_get_string_any(udev, NULL, temp_ptr, temp_size,
2315             udev->ddesc.iSerialNumber);
2316         udev->serial = kstrdup(temp_ptr, M_USB);
2317
2318         /* get manufacturer string */
2319         usbd_req_get_string_any(udev, NULL, temp_ptr, temp_size,
2320             udev->ddesc.iManufacturer);
2321         usb_trim_spaces(temp_ptr);
2322         if (temp_ptr[0] != '\0')
2323                 udev->manufacturer = kstrdup(temp_ptr, M_USB);
2324
2325         /* get product string */
2326         usbd_req_get_string_any(udev, NULL, temp_ptr, temp_size,
2327             udev->ddesc.iProduct);
2328         usb_trim_spaces(temp_ptr);
2329         if (temp_ptr[0] != '\0')
2330                 udev->product = kstrdup(temp_ptr, M_USB);
2331
2332 #ifdef USB_VERBOSE
2333         if (udev->manufacturer == NULL || udev->product == NULL) {
2334                 for (kdp = usb_knowndevs; kdp->vendorname != NULL; kdp++) {
2335                         if (kdp->vendor == vendor_id &&
2336                             (kdp->product == product_id ||
2337                             (kdp->flags & USB_KNOWNDEV_NOPROD) != 0))
2338                                 break;
2339                 }
2340                 if (kdp->vendorname != NULL) {
2341                         /* XXX should use pointer to knowndevs string */
2342                         if (udev->manufacturer == NULL) {
2343                                 udev->manufacturer = kstrdup(kdp->vendorname,
2344                                     M_USB);
2345                         }
2346                         if (udev->product == NULL &&
2347                             (kdp->flags & USB_KNOWNDEV_NOPROD) == 0) {
2348                                 udev->product = kstrdup(kdp->productname,
2349                                     M_USB);
2350                         }
2351                 }
2352         }
2353 #endif
2354         /* Provide default strings if none were found */
2355         if (udev->manufacturer == NULL) {
2356                 ksnprintf(temp_ptr, temp_size, "vendor 0x%04x", vendor_id);
2357                 udev->manufacturer = kstrdup(temp_ptr, M_USB);
2358         }
2359         if (udev->product == NULL) {
2360                 ksnprintf(temp_ptr, temp_size, "product 0x%04x", product_id);
2361                 udev->product = kstrdup(temp_ptr, M_USB);
2362         }
2363
2364         if (do_unlock)
2365                 usbd_enum_unlock(udev);
2366 }
2367
2368 /*
2369  * Returns:
2370  * See: USB_MODE_XXX
2371  */
2372 enum usb_hc_mode
2373 usbd_get_mode(struct usb_device *udev)
2374 {
2375         return (udev->flags.usb_mode);
2376 }
2377
2378 /*
2379  * Returns:
2380  * See: USB_SPEED_XXX
2381  */
2382 enum usb_dev_speed
2383 usbd_get_speed(struct usb_device *udev)
2384 {
2385         return (udev->speed);
2386 }
2387
2388 uint32_t
2389 usbd_get_isoc_fps(struct usb_device *udev)
2390 {
2391         ;                               /* indent fix */
2392         switch (udev->speed) {
2393         case USB_SPEED_LOW:
2394         case USB_SPEED_FULL:
2395                 return (1000);
2396         default:
2397                 return (8000);
2398         }
2399 }
2400
2401 struct usb_device_descriptor *
2402 usbd_get_device_descriptor(struct usb_device *udev)
2403 {
2404         if (udev == NULL)
2405                 return (NULL);          /* be NULL safe */
2406         return (&udev->ddesc);
2407 }
2408
2409 struct usb_config_descriptor *
2410 usbd_get_config_descriptor(struct usb_device *udev)
2411 {
2412         if (udev == NULL)
2413                 return (NULL);          /* be NULL safe */
2414         return (udev->cdesc);
2415 }
2416
2417 /*------------------------------------------------------------------------*
2418  *      usb_test_quirk - test a device for a given quirk
2419  *
2420  * Return values:
2421  * 0: The USB device does not have the given quirk.
2422  * Else: The USB device has the given quirk.
2423  *------------------------------------------------------------------------*/
2424 uint8_t
2425 usb_test_quirk(const struct usb_attach_arg *uaa, uint16_t quirk)
2426 {
2427         uint8_t found;
2428         uint8_t x;
2429
2430         if (quirk == UQ_NONE)
2431                 return (0);
2432
2433         /* search the automatic per device quirks first */
2434
2435         for (x = 0; x != USB_MAX_AUTO_QUIRK; x++) {
2436                 if (uaa->device->autoQuirk[x] == quirk)
2437                         return (1);
2438         }
2439
2440         /* search global quirk table, if any */
2441
2442         found = (usb_test_quirk_p) (&uaa->info, quirk);
2443
2444         return (found);
2445 }
2446
2447 struct usb_interface_descriptor *
2448 usbd_get_interface_descriptor(struct usb_interface *iface)
2449 {
2450         if (iface == NULL)
2451                 return (NULL);          /* be NULL safe */
2452         return (iface->idesc);
2453 }
2454
2455 uint8_t
2456 usbd_get_interface_altindex(struct usb_interface *iface)
2457 {
2458         return (iface->alt_index);
2459 }
2460
2461 uint8_t
2462 usbd_get_bus_index(struct usb_device *udev)
2463 {
2464         return ((uint8_t)device_get_unit(udev->bus->bdev));
2465 }
2466
2467 uint8_t
2468 usbd_get_device_index(struct usb_device *udev)
2469 {
2470         return (udev->device_index);
2471 }
2472
2473 #if USB_HAVE_DEVCTL
2474 static void
2475 usb_notify_addq(const char *type, struct usb_device *udev)
2476 {
2477         struct usb_interface *iface;
2478         struct sbuf *sb;
2479         int i;
2480
2481         /* announce the device */
2482         sb = sbuf_new(NULL, NULL, 4096, SBUF_AUTOEXTEND);
2483         sbuf_printf(sb,
2484 #if USB_HAVE_UGEN
2485             "ugen=%s "
2486             "cdev=%s "
2487 #endif
2488             "vendor=0x%04x "
2489             "product=0x%04x "
2490             "devclass=0x%02x "
2491             "devsubclass=0x%02x "
2492             "sernum=\"%s\" "
2493             "release=0x%04x "
2494             "mode=%s "
2495             "port=%u "
2496 #if USB_HAVE_UGEN
2497             "parent=%s"
2498 #endif
2499             "",
2500 #if USB_HAVE_UGEN
2501             udev->ugen_name,
2502             udev->ugen_name,
2503 #endif
2504             UGETW(udev->ddesc.idVendor),
2505             UGETW(udev->ddesc.idProduct),
2506             udev->ddesc.bDeviceClass,
2507             udev->ddesc.bDeviceSubClass,
2508             usb_get_serial(udev),
2509             UGETW(udev->ddesc.bcdDevice),
2510             (udev->flags.usb_mode == USB_MODE_HOST) ? "host" : "device",
2511             udev->port_no
2512 #if USB_HAVE_UGEN
2513             , udev->parent_hub != NULL ?
2514                 udev->parent_hub->ugen_name :
2515                 device_get_nameunit(device_get_parent(udev->bus->bdev))
2516 #endif
2517             );
2518         sbuf_finish(sb);
2519         devctl_notify("USB", "DEVICE", type, sbuf_data(sb));
2520         sbuf_delete(sb);
2521
2522         /* announce each interface */
2523         for (i = 0; i < USB_IFACE_MAX; i++) {
2524                 iface = usbd_get_iface(udev, i);
2525                 if (iface == NULL)
2526                         break;          /* end of interfaces */
2527                 if (iface->idesc == NULL)
2528                         continue;       /* no interface descriptor */
2529                 
2530                 sb = 0;
2531                 sb = sbuf_new(NULL, NULL, 4096, SBUF_AUTOEXTEND);
2532                 sbuf_printf(sb,
2533 #if USB_HAVE_UGEN
2534                     "ugen=%s "
2535                     "cdev=%s "
2536 #endif
2537                     "vendor=0x%04x "
2538                     "product=0x%04x "
2539                     "devclass=0x%02x "
2540                     "devsubclass=0x%02x "
2541                     "sernum=\"%s\" "
2542                     "release=0x%04x "
2543                     "mode=%s "
2544                     "interface=%d "
2545                     "endpoints=%d "
2546                     "intclass=0x%02x "
2547                     "intsubclass=0x%02x "
2548                     "intprotocol=0x%02x",
2549 #if USB_HAVE_UGEN
2550                     udev->ugen_name,
2551                     udev->ugen_name,
2552 #endif
2553                     UGETW(udev->ddesc.idVendor),
2554                     UGETW(udev->ddesc.idProduct),
2555                     udev->ddesc.bDeviceClass,
2556                     udev->ddesc.bDeviceSubClass,
2557                     usb_get_serial(udev),
2558                     UGETW(udev->ddesc.bcdDevice),
2559                     (udev->flags.usb_mode == USB_MODE_HOST) ? "host" : "device",
2560                     iface->idesc->bInterfaceNumber,
2561                     iface->idesc->bNumEndpoints,
2562                     iface->idesc->bInterfaceClass,
2563                     iface->idesc->bInterfaceSubClass,
2564                     iface->idesc->bInterfaceProtocol);
2565                 sbuf_finish(sb);
2566                 devctl_notify("USB", "INTERFACE", type, sbuf_data(sb));
2567                 sbuf_delete(sb);
2568         }
2569 }
2570 #endif
2571
2572 #if USB_HAVE_UGEN
2573 /*------------------------------------------------------------------------*
2574  *      usb_fifo_free_wrap
2575  *
2576  * This function will free the FIFOs.
2577  *
2578  * Description of "flag" argument: If the USB_UNCFG_FLAG_FREE_EP0 flag
2579  * is set and "iface_index" is set to "USB_IFACE_INDEX_ANY", we free
2580  * all FIFOs. If the USB_UNCFG_FLAG_FREE_EP0 flag is not set and
2581  * "iface_index" is set to "USB_IFACE_INDEX_ANY", we free all non
2582  * control endpoint FIFOs. If "iface_index" is not set to
2583  * "USB_IFACE_INDEX_ANY" the flag has no effect.
2584  *------------------------------------------------------------------------*/
2585 static void
2586 usb_fifo_free_wrap(struct usb_device *udev,
2587     uint8_t iface_index, uint8_t flag)
2588 {
2589         struct usb_fifo *f;
2590         uint16_t i;
2591
2592         /*
2593          * Free any USB FIFOs on the given interface:
2594          */
2595         for (i = 0; i != USB_FIFO_MAX; i++) {
2596                 f = udev->fifo[i];
2597                 if (f == NULL) {
2598                         continue;
2599                 }
2600                 /* Check if the interface index matches */
2601                 if (iface_index == f->iface_index) {
2602                         if (f->methods != &usb_ugen_methods) {
2603                                 /*
2604                                  * Don't free any non-generic FIFOs in
2605                                  * this case.
2606                                  */
2607                                 continue;
2608                         }
2609                         if ((f->dev_ep_index == 0) &&
2610                             (f->fs_xfer == NULL)) {
2611                                 /* no need to free this FIFO */
2612                                 continue;
2613                         }
2614                 } else if (iface_index == USB_IFACE_INDEX_ANY) {
2615                         if ((f->methods == &usb_ugen_methods) &&
2616                             (f->dev_ep_index == 0) &&
2617                             (!(flag & USB_UNCFG_FLAG_FREE_EP0)) &&
2618                             (f->fs_xfer == NULL)) {
2619                                 /* no need to free this FIFO */
2620                                 continue;
2621                         }
2622                 } else {
2623                         /* no need to free this FIFO */
2624                         continue;
2625                 }
2626                 /* free this FIFO */
2627                 usb_fifo_free(f);
2628         }
2629 }
2630 #endif
2631
2632 /*------------------------------------------------------------------------*
2633  *      usb_peer_can_wakeup
2634  *
2635  * Return values:
2636  * 0: Peer cannot do resume signalling.
2637  * Else: Peer can do resume signalling.
2638  *------------------------------------------------------------------------*/
2639 uint8_t
2640 usb_peer_can_wakeup(struct usb_device *udev)
2641 {
2642         const struct usb_config_descriptor *cdp;
2643
2644         cdp = udev->cdesc;
2645         if ((cdp != NULL) && (udev->flags.usb_mode == USB_MODE_HOST)) {
2646                 return (cdp->bmAttributes & UC_REMOTE_WAKEUP);
2647         }
2648         return (0);                     /* not supported */
2649 }
2650
2651 void
2652 usb_set_device_state(struct usb_device *udev, enum usb_dev_state state)
2653 {
2654
2655         KASSERT(state < USB_STATE_MAX, ("invalid udev state"));
2656
2657         DPRINTF("udev %p state %s -> %s\n", udev,
2658             usb_statestr(udev->state), usb_statestr(state));
2659         udev->state = state;
2660
2661         if (udev->bus->methods->device_state_change != NULL)
2662                 (udev->bus->methods->device_state_change) (udev);
2663 }
2664
2665 enum usb_dev_state
2666 usb_get_device_state(struct usb_device *udev)
2667 {
2668         if (udev == NULL)
2669                 return (USB_STATE_DETACHED);
2670         return (udev->state);
2671 }
2672
2673 uint8_t
2674 usbd_device_attached(struct usb_device *udev)
2675 {
2676         return (udev->state > USB_STATE_DETACHED);
2677 }
2678
2679 /*
2680  * The following function locks enumerating the given USB device. If
2681  * the lock is already grabbed this function returns zero. Else a
2682  * non-zero value is returned.
2683  */
2684 uint8_t
2685 usbd_enum_lock(struct usb_device *udev)
2686 {
2687         if (lockstatus(&udev->enum_lock, curthread)==LK_EXCLUSIVE)
2688                 return (0);
2689
2690         lockmgr(&udev->enum_lock, LK_EXCLUSIVE);
2691         lockmgr(&udev->sr_lock, LK_EXCLUSIVE);
2692         /* 
2693          * NEWBUS LOCK NOTE: We should check if any parent SX locks
2694          * are locked before locking Giant. Else the lock can be
2695          * locked multiple times.
2696          */
2697 #if 0
2698         mtx_lock(&Giant);
2699 #endif
2700         return (1);
2701 }
2702
2703 /* The following function unlocks enumerating the given USB device. */
2704
2705 void
2706 usbd_enum_unlock(struct usb_device *udev)
2707 {
2708 #if 0
2709         mtx_unlock(&Giant);
2710 #endif
2711         lockmgr(&udev->enum_lock, LK_RELEASE);
2712         lockmgr(&udev->sr_lock, LK_RELEASE);
2713 }
2714
2715 /* The following function locks suspend and resume. */
2716
2717 void
2718 usbd_sr_lock(struct usb_device *udev)
2719 {
2720         lockmgr(&udev->sr_lock, LK_EXCLUSIVE);
2721         /* 
2722          * NEWBUS LOCK NOTE: We should check if any parent SX locks
2723          * are locked before locking Giant. Else the lock can be
2724          * locked multiple times.
2725          */
2726 #if 0
2727         mtx_lock(&Giant);
2728 #endif
2729 }
2730
2731 /* The following function unlocks suspend and resume. */
2732
2733 void
2734 usbd_sr_unlock(struct usb_device *udev)
2735 {
2736 #if 0
2737         mtx_unlock(&Giant);
2738 #endif
2739         lockmgr(&udev->sr_lock, LK_RELEASE);
2740 }
2741
2742 /*
2743  * The following function checks the enumerating lock for the given
2744  * USB device.
2745  */
2746
2747 uint8_t
2748 usbd_enum_is_locked(struct usb_device *udev)
2749 {
2750         /* XXX: Make sure that we return a correct value here */
2751         return (lockowned(&udev->enum_lock));
2752 }
2753
2754 /*
2755  * The following function is used to set the per-interface specific
2756  * plug and play information. The string referred to by the pnpinfo
2757  * argument can safely be freed after calling this function. The
2758  * pnpinfo of an interface will be reset at device detach or when
2759  * passing a NULL argument to this function. This function
2760  * returns zero on success, else a USB_ERR_XXX failure code.
2761  */
2762
2763 usb_error_t 
2764 usbd_set_pnpinfo(struct usb_device *udev, uint8_t iface_index, const char *pnpinfo)
2765 {
2766         struct usb_interface *iface;
2767
2768         iface = usbd_get_iface(udev, iface_index);
2769         if (iface == NULL)
2770                 return (USB_ERR_INVAL);
2771
2772         if (iface->pnpinfo != NULL) {
2773                 kfree(iface->pnpinfo, M_USBDEV);
2774                 iface->pnpinfo = NULL;
2775         }
2776
2777         if (pnpinfo == NULL || pnpinfo[0] == 0)
2778                 return (0);             /* success */
2779
2780         iface->pnpinfo = kstrdup(pnpinfo, M_USBDEV);
2781         if (iface->pnpinfo == NULL)
2782                 return (USB_ERR_NOMEM);
2783
2784         return (0);                     /* success */
2785 }
2786
2787 usb_error_t
2788 usbd_add_dynamic_quirk(struct usb_device *udev, uint16_t quirk)
2789 {
2790         uint8_t x;
2791
2792         for (x = 0; x != USB_MAX_AUTO_QUIRK; x++) {
2793                 if (udev->autoQuirk[x] == 0 ||
2794                     udev->autoQuirk[x] == quirk) {
2795                         udev->autoQuirk[x] = quirk;
2796                         return (0);     /* success */
2797                 }
2798         }
2799         return (USB_ERR_NOMEM);
2800 }
2801
2802 /*
2803  * The following function is used to select the endpoint mode. It
2804  * should not be called outside enumeration context.
2805  */
2806
2807 usb_error_t
2808 usbd_set_endpoint_mode(struct usb_device *udev, struct usb_endpoint *ep,
2809     uint8_t ep_mode)
2810 {   
2811         usb_error_t error;
2812         uint8_t do_unlock;
2813
2814         /* Prevent re-enumeration */
2815         do_unlock = usbd_enum_lock(udev);
2816
2817         if (udev->bus->methods->set_endpoint_mode != NULL) {
2818                 error = (udev->bus->methods->set_endpoint_mode) (
2819                     udev, ep, ep_mode);
2820         } else if (ep_mode != USB_EP_MODE_DEFAULT) {
2821                 error = USB_ERR_INVAL;
2822         } else {
2823                 error = 0;
2824         }
2825
2826         /* only set new mode regardless of error */
2827         ep->ep_mode = ep_mode;
2828
2829         if (do_unlock)
2830                 usbd_enum_unlock(udev);
2831         return (error);
2832 }
2833
2834 uint8_t
2835 usbd_get_endpoint_mode(struct usb_device *udev, struct usb_endpoint *ep)
2836 {
2837         return (ep->ep_mode);
2838 }