usb4bsd: Synchronise with FreeBSD r254159
[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         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 #if 0
1558         /* initialise our SX-lock */
1559         sx_init_flags(&udev->ctrl_sx, "USB device SX lock", SX_DUPOK);
1560         /* initialise our SX-lock */
1561         sx_init_flags(&udev->enum_sx, "USB config SX lock", SX_DUPOK);
1562         sx_init_flags(&udev->sr_sx, "USB suspend and resume SX lock", SX_NOWITNESS);
1563 #endif
1564         lockinit(&udev->enum_lock, "USB config SX lock", 0, LK_CANRECURSE);
1565         lockinit(&udev->sr_lock, "USB suspend and resume SX lock", 0, 0);
1566
1567         cv_init(&udev->ctrlreq_cv, "WCTRL");
1568         cv_init(&udev->ref_cv, "UGONE");
1569
1570         /* initialise our mutex */
1571         lockinit(&udev->device_lock, "USB device mutex", 0, 0);
1572
1573         /* initialise generic clear stall */
1574         udev->cs_msg[0].hdr.pm_callback = &usbd_clear_stall_proc;
1575         udev->cs_msg[0].udev = udev;
1576         udev->cs_msg[1].hdr.pm_callback = &usbd_clear_stall_proc;
1577         udev->cs_msg[1].udev = udev;
1578
1579         /* initialise some USB device fields */
1580         udev->parent_hub = parent_hub;
1581         udev->parent_dev = parent_dev;
1582         udev->port_index = port_index;
1583         udev->port_no = port_no;
1584         udev->depth = depth;
1585         udev->bus = bus;
1586         udev->address = USB_START_ADDR; /* default value */
1587         udev->plugtime = (usb_ticks_t)ticks;
1588         /*
1589          * We need to force the power mode to "on" because there are plenty
1590          * of USB devices out there that do not work very well with
1591          * automatic suspend and resume!
1592          */
1593         udev->power_mode = usbd_filter_power_mode(udev, USB_POWER_MODE_ON);
1594         udev->pwr_save.last_xfer_time = ticks;
1595         /* we are not ready yet */
1596         udev->refcount = 1;
1597
1598         /* set up default endpoint descriptor */
1599         udev->ctrl_ep_desc.bLength = sizeof(udev->ctrl_ep_desc);
1600         udev->ctrl_ep_desc.bDescriptorType = UDESC_ENDPOINT;
1601         udev->ctrl_ep_desc.bEndpointAddress = USB_CONTROL_ENDPOINT;
1602         udev->ctrl_ep_desc.bmAttributes = UE_CONTROL;
1603         udev->ctrl_ep_desc.wMaxPacketSize[0] = USB_MAX_IPACKET;
1604         udev->ctrl_ep_desc.wMaxPacketSize[1] = 0;
1605         udev->ctrl_ep_desc.bInterval = 0;
1606
1607         /* set up default endpoint companion descriptor */
1608         udev->ctrl_ep_comp_desc.bLength = sizeof(udev->ctrl_ep_comp_desc);
1609         udev->ctrl_ep_comp_desc.bDescriptorType = UDESC_ENDPOINT_SS_COMP;
1610
1611         udev->ddesc.bMaxPacketSize = USB_MAX_IPACKET;
1612
1613         udev->speed = speed;
1614         udev->flags.usb_mode = mode;
1615
1616         /* search for our High Speed USB HUB, if any */
1617
1618         adev = udev;
1619         hub = udev->parent_hub;
1620
1621         while (hub) {
1622                 if (hub->speed == USB_SPEED_HIGH) {
1623                         udev->hs_hub_addr = hub->address;
1624                         udev->parent_hs_hub = hub;
1625                         udev->hs_port_no = adev->port_no;
1626                         break;
1627                 }
1628                 adev = hub;
1629                 hub = hub->parent_hub;
1630         }
1631
1632         /* init the default endpoint */
1633         usb_init_endpoint(udev, 0,
1634             &udev->ctrl_ep_desc,
1635             &udev->ctrl_ep_comp_desc,
1636             &udev->ctrl_ep);
1637
1638         /* set device index */
1639         udev->device_index = device_index;
1640
1641 #if USB_HAVE_UGEN
1642         /* Create ugen name */
1643         ksnprintf(udev->ugen_name, sizeof(udev->ugen_name),
1644             USB_GENERIC_NAME "%u.%u", device_get_unit(bus->bdev),
1645             device_index);
1646         LIST_INIT(&udev->pd_list);
1647
1648         /* Create the control endpoint device */
1649         udev->ctrl_dev = usb_make_dev(udev, NULL, 0, 0,
1650             FREAD|FWRITE, UID_ROOT, GID_OPERATOR, 0600);
1651
1652         /* Create a link from /dev/ugenX.X to the default endpoint */
1653         if (udev->ctrl_dev != NULL)
1654                 make_dev_alias(udev->ctrl_dev->cdev, "%s", udev->ugen_name);
1655 #endif
1656         /* Initialise device */
1657         if (bus->methods->device_init != NULL) {
1658                 err = (bus->methods->device_init) (udev);
1659                 if (err != 0) {
1660                         DPRINTFN(0, "device init %d failed "
1661                             "(%s, ignored)\n", device_index, 
1662                             usbd_errstr(err));
1663                         goto done;
1664                 }
1665         }
1666         /* set powered device state after device init is complete */
1667         usb_set_device_state(udev, USB_STATE_POWERED);
1668
1669         if (udev->flags.usb_mode == USB_MODE_HOST) {
1670
1671                 err = usbd_req_set_address(udev, NULL, device_index);
1672
1673                 /*
1674                  * This is the new USB device address from now on, if
1675                  * the set address request didn't set it already.
1676                  */
1677                 if (udev->address == USB_START_ADDR)
1678                         udev->address = device_index;
1679
1680                 /*
1681                  * We ignore any set-address errors, hence there are
1682                  * buggy USB devices out there that actually receive
1683                  * the SETUP PID, but manage to set the address before
1684                  * the STATUS stage is ACK'ed. If the device responds
1685                  * to the subsequent get-descriptor at the new
1686                  * address, then we know that the set-address command
1687                  * was successful.
1688                  */
1689                 if (err) {
1690                         DPRINTFN(0, "set address %d failed "
1691                             "(%s, ignored)\n", udev->address, 
1692                             usbd_errstr(err));
1693                 }
1694         } else {
1695                 /* We are not self powered */
1696                 udev->flags.self_powered = 0;
1697
1698                 /* Set unconfigured state */
1699                 udev->curr_config_no = USB_UNCONFIG_NO;
1700                 udev->curr_config_index = USB_UNCONFIG_INDEX;
1701
1702                 /* Setup USB descriptors */
1703                 err = (usb_temp_setup_by_index_p) (udev, usb_template);
1704                 if (err) {
1705                         DPRINTFN(0, "setting up USB template failed maybe the USB "
1706                             "template module has not been loaded\n");
1707                         goto done;
1708                 }
1709         }
1710         usb_set_device_state(udev, USB_STATE_ADDRESSED);
1711
1712         /* setup the device descriptor and the initial "wMaxPacketSize" */
1713         err = usbd_setup_device_desc(udev, NULL);
1714
1715         if (err != 0) {
1716                 /* try to enumerate two more times */
1717                 err = usbd_req_re_enumerate(udev, NULL);
1718                 if (err != 0) {
1719                         err = usbd_req_re_enumerate(udev, NULL);
1720                         if (err != 0) {
1721                                 goto done;
1722                         }
1723                 }
1724         }
1725
1726         /*
1727          * Setup temporary USB attach args so that we can figure out some
1728          * basic quirks for this device.
1729          */
1730         usb_init_attach_arg(udev, &uaa);
1731
1732         if (usb_test_quirk(&uaa, UQ_BUS_POWERED)) {
1733                 udev->flags.uq_bus_powered = 1;
1734         }
1735         if (usb_test_quirk(&uaa, UQ_NO_STRINGS)) {
1736                 udev->flags.no_strings = 1;
1737         }
1738         /*
1739          * Workaround for buggy USB devices.
1740          *
1741          * It appears that some string-less USB chips will crash and
1742          * disappear if any attempts are made to read any string
1743          * descriptors.
1744          *
1745          * Try to detect such chips by checking the strings in the USB
1746          * device descriptor. If no strings are present there we
1747          * simply disable all USB strings.
1748          */
1749
1750         /* Protect scratch area */
1751         do_unlock = usbd_enum_lock(udev);
1752
1753         scratch_ptr = udev->scratch.data;
1754
1755         if (udev->ddesc.iManufacturer ||
1756             udev->ddesc.iProduct ||
1757             udev->ddesc.iSerialNumber) {
1758                 /* read out the language ID string */
1759                 err = usbd_req_get_string_desc(udev, NULL,
1760                     (char *)scratch_ptr, 4, 0, USB_LANGUAGE_TABLE);
1761         } else {
1762                 err = USB_ERR_INVAL;
1763         }
1764
1765         if (err || (scratch_ptr[0] < 4)) {
1766                 udev->flags.no_strings = 1;
1767         } else {
1768                 uint16_t langid;
1769                 uint16_t pref;
1770                 uint16_t mask;
1771                 uint8_t x;
1772
1773                 /* load preferred value and mask */
1774                 pref = usb_lang_id;
1775                 mask = usb_lang_mask;
1776
1777                 /* align length correctly */
1778                 scratch_ptr[0] &= ~1U;
1779
1780                 /* fix compiler warning */
1781                 langid = 0;
1782
1783                 /* search for preferred language */
1784                 for (x = 2; (x < scratch_ptr[0]); x += 2) {
1785                         langid = UGETW(scratch_ptr + x);
1786                         if ((langid & mask) == pref)
1787                                 break;
1788                 }
1789                 if (x >= scratch_ptr[0]) {
1790                         /* pick the first language as the default */
1791                         DPRINTFN(1, "Using first language\n");
1792                         langid = UGETW(scratch_ptr + 2);
1793                 }
1794
1795                 DPRINTFN(1, "Language selected: 0x%04x\n", langid);
1796                 udev->langid = langid;
1797         }
1798
1799         if (do_unlock)
1800                 usbd_enum_unlock(udev);
1801
1802         /* assume 100mA bus powered for now. Changed when configured. */
1803         udev->power = USB_MIN_POWER;
1804         /* fetch the vendor and product strings from the device */
1805         usbd_set_device_strings(udev);
1806
1807         if (udev->flags.usb_mode == USB_MODE_DEVICE) {
1808                 /* USB device mode setup is complete */
1809                 err = 0;
1810                 goto config_done;
1811         }
1812
1813         /*
1814          * Most USB devices should attach to config index 0 by
1815          * default
1816          */
1817         if (usb_test_quirk(&uaa, UQ_CFG_INDEX_0)) {
1818                 config_index = 0;
1819                 config_quirk = 1;
1820         } else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_1)) {
1821                 config_index = 1;
1822                 config_quirk = 1;
1823         } else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_2)) {
1824                 config_index = 2;
1825                 config_quirk = 1;
1826         } else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_3)) {
1827                 config_index = 3;
1828                 config_quirk = 1;
1829         } else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_4)) {
1830                 config_index = 4;
1831                 config_quirk = 1;
1832         } else {
1833                 config_index = 0;
1834                 config_quirk = 0;
1835         }
1836
1837         set_config_failed = 0;
1838 repeat_set_config:
1839
1840         DPRINTF("setting config %u\n", config_index);
1841
1842         /* get the USB device configured */
1843         err = usbd_set_config_index(udev, config_index);
1844         if (err) {
1845                 if (udev->ddesc.bNumConfigurations != 0) {
1846                         if (!set_config_failed) {
1847                                 set_config_failed = 1;
1848                                 /* XXX try to re-enumerate the device */
1849                                 err = usbd_req_re_enumerate(udev, NULL);
1850                                 if (err == 0)
1851                                         goto repeat_set_config;
1852                         }
1853                         DPRINTFN(0, "Failure selecting configuration index %u:"
1854                             "%s, port %u, addr %u (ignored)\n",
1855                             config_index, usbd_errstr(err), udev->port_no,
1856                             udev->address);
1857                 }
1858                 /*
1859                  * Some USB devices do not have any configurations. Ignore any
1860                  * set config failures!
1861                  */
1862                 err = 0;
1863                 goto config_done;
1864         }
1865         if (!config_quirk && config_index + 1 < udev->ddesc.bNumConfigurations) {
1866                 if ((udev->cdesc->bNumInterface < 2) &&
1867                     usbd_get_no_descriptors(udev->cdesc, UDESC_ENDPOINT) == 0) {
1868                         DPRINTFN(0, "Found no endpoints, trying next config\n");
1869                         config_index++;
1870                         goto repeat_set_config;
1871                 }
1872 #if USB_HAVE_MSCTEST
1873                 if (config_index == 0) {
1874                         /*
1875                          * Try to figure out if we have an
1876                          * auto-install disk there:
1877                          */
1878                         if (usb_iface_is_cdrom(udev, 0)) {
1879                                 DPRINTFN(0, "Found possible auto-install "
1880                                     "disk (trying next config)\n");
1881                                 config_index++;
1882                                 goto repeat_set_config;
1883                         }
1884                 }
1885 #endif
1886         }
1887 #if USB_HAVE_MSCTEST
1888         if (set_config_failed == 0 && config_index == 0 &&
1889             usb_test_quirk(&uaa, UQ_MSC_NO_SYNC_CACHE) == 0 &&
1890             usb_test_quirk(&uaa, UQ_MSC_NO_GETMAXLUN) == 0) {
1891
1892                 /*
1893                  * Try to figure out if there are any MSC quirks we
1894                  * should apply automatically:
1895                  */
1896                 err = usb_msc_auto_quirk(udev, 0);
1897
1898                 if (err != 0) {
1899                         set_config_failed = 1;
1900                         goto repeat_set_config;
1901                 }
1902         }
1903 #endif
1904
1905 config_done:
1906         DPRINTF("new dev (addr %d), udev=%p, parent_hub=%p\n",
1907             udev->address, udev, udev->parent_hub);
1908
1909         /* register our device - we are ready */
1910         usb_bus_port_set_device(bus, parent_hub ?
1911             parent_hub->hub->ports + port_index : NULL, udev, device_index);
1912
1913 #if USB_HAVE_UGEN
1914         /* Symlink the ugen device name */
1915         udev->ugen_symlink = usb_alloc_symlink(udev->ugen_name);
1916
1917         /* Announce device */
1918         kprintf("%s: <%s> at %s\n", udev->ugen_name,
1919             usb_get_manufacturer(udev),
1920             device_get_nameunit(udev->bus->bdev));
1921 #endif
1922
1923 #if USB_HAVE_DEVCTL
1924         usb_notify_addq("ATTACH", udev);
1925 #endif
1926 done:
1927         if (err) {
1928                 /*
1929                  * Free USB device and all subdevices, if any.
1930                  */
1931                 usb_free_device(udev, 0);
1932                 udev = NULL;
1933         }
1934         return (udev);
1935 }
1936
1937 #if USB_HAVE_UGEN
1938 struct usb_fs_privdata *
1939 usb_make_dev(struct usb_device *udev, const char *devname, int ep,
1940     int fi, int rwmode, uid_t uid, gid_t gid, int mode)
1941 {
1942         struct usb_fs_privdata* pd;
1943         char buffer[32];
1944
1945         /* Store information to locate ourselves again later */
1946         pd = kmalloc(sizeof(struct usb_fs_privdata), M_USBDEV,
1947             M_WAITOK | M_ZERO);
1948         pd->bus_index = device_get_unit(udev->bus->bdev);
1949         pd->dev_index = udev->device_index;
1950         pd->ep_addr = ep;
1951         pd->fifo_index = fi;
1952         pd->mode = rwmode;
1953
1954         /* Now, create the device itself */
1955         if (devname == NULL) {
1956                 devname = buffer;
1957                 ksnprintf(buffer, sizeof(buffer), USB_DEVICE_DIR "/%u.%u.%u",
1958                     pd->bus_index, pd->dev_index, pd->ep_addr);
1959         }
1960
1961         pd->cdev = make_dev(&usb_ops, 0, uid, gid, mode, "%s", devname);
1962
1963         if (pd->cdev == NULL) {
1964                 DPRINTFN(0, "Failed to create device %s\n", devname);
1965                 kfree(pd, M_USBDEV);
1966                 return (NULL);
1967         }
1968
1969         /* XXX setting si_drv1 and creating the device is not atomic! */
1970         pd->cdev->si_drv1 = pd;
1971
1972         return (pd);
1973 }
1974
1975 void
1976 usb_destroy_dev(struct usb_fs_privdata *pd)
1977 {
1978         if (pd == NULL)
1979                 return;
1980
1981         destroy_dev(pd->cdev);
1982
1983         kfree(pd, M_USBDEV);
1984 }
1985
1986 static void
1987 usb_cdev_create(struct usb_device *udev)
1988 {
1989         struct usb_config_descriptor *cd;
1990         struct usb_endpoint_descriptor *ed;
1991         struct usb_descriptor *desc;
1992         struct usb_fs_privdata* pd;
1993         int inmode, outmode, inmask, outmask, mode;
1994         uint8_t ep;
1995
1996         KASSERT(LIST_FIRST(&udev->pd_list) == NULL, ("stale cdev entries"));
1997
1998         DPRINTFN(2, "Creating device nodes\n");
1999
2000         if (usbd_get_mode(udev) == USB_MODE_DEVICE) {
2001                 inmode = FWRITE;
2002                 outmode = FREAD;
2003         } else {                 /* USB_MODE_HOST */
2004                 inmode = FREAD;
2005                 outmode = FWRITE;
2006         }
2007
2008         inmask = 0;
2009         outmask = 0;
2010         desc = NULL;
2011
2012         /*
2013          * Collect all used endpoint numbers instead of just
2014          * generating 16 static endpoints.
2015          */
2016         cd = usbd_get_config_descriptor(udev);
2017         while ((desc = usb_desc_foreach(cd, desc))) {
2018                 /* filter out all endpoint descriptors */
2019                 if ((desc->bDescriptorType == UDESC_ENDPOINT) &&
2020                     (desc->bLength >= sizeof(*ed))) {
2021                         ed = (struct usb_endpoint_descriptor *)desc;
2022
2023                         /* update masks */
2024                         ep = ed->bEndpointAddress;
2025                         if (UE_GET_DIR(ep)  == UE_DIR_OUT)
2026                                 outmask |= 1 << UE_GET_ADDR(ep);
2027                         else
2028                                 inmask |= 1 << UE_GET_ADDR(ep);
2029                 }
2030         }
2031
2032         /* Create all available endpoints except EP0 */
2033         for (ep = 1; ep < 16; ep++) {
2034                 mode = (inmask & (1 << ep)) ? inmode : 0;
2035                 mode |= (outmask & (1 << ep)) ? outmode : 0;
2036                 if (mode == 0)
2037                         continue;       /* no IN or OUT endpoint */
2038
2039                 pd = usb_make_dev(udev, NULL, ep, 0,
2040                     mode, UID_ROOT, GID_OPERATOR, 0600);
2041
2042                 if (pd != NULL)
2043                         LIST_INSERT_HEAD(&udev->pd_list, pd, pd_next);
2044         }
2045 }
2046
2047 static void
2048 usb_cdev_free(struct usb_device *udev)
2049 {
2050         struct usb_fs_privdata* pd;
2051
2052         DPRINTFN(2, "Freeing device nodes\n");
2053
2054         while ((pd = LIST_FIRST(&udev->pd_list)) != NULL) {
2055                 KASSERT(pd->cdev->si_drv1 == pd, ("privdata corrupt"));
2056
2057                 LIST_REMOVE(pd, pd_next);
2058
2059                 usb_destroy_dev(pd);
2060         }
2061 }
2062 #endif
2063
2064 /*------------------------------------------------------------------------*
2065  *      usb_free_device
2066  *
2067  * This function is NULL safe and will free an USB device and its
2068  * children devices, if any.
2069  *
2070  * Flag values: Reserved, set to zero.
2071  *------------------------------------------------------------------------*/
2072 void
2073 usb_free_device(struct usb_device *udev, uint8_t flag)
2074 {
2075         struct usb_bus *bus;
2076
2077         if (udev == NULL)
2078                 return;         /* already freed */
2079
2080         DPRINTFN(4, "udev=%p port=%d\n", udev, udev->port_no);
2081
2082         bus = udev->bus;
2083         usb_set_device_state(udev, USB_STATE_DETACHED);
2084
2085 #if USB_HAVE_DEVCTL
2086         usb_notify_addq("DETACH", udev);
2087 #endif
2088
2089 #if USB_HAVE_UGEN
2090         kprintf("%s: <%s> at %s (disconnected)\n", udev->ugen_name,
2091             usb_get_manufacturer(udev), device_get_nameunit(bus->bdev));
2092
2093         /* Destroy UGEN symlink, if any */
2094         if (udev->ugen_symlink) {
2095                 usb_free_symlink(udev->ugen_symlink);
2096                 udev->ugen_symlink = NULL;
2097         }
2098 #endif
2099         /*
2100          * Unregister our device first which will prevent any further
2101          * references:
2102          */
2103         usb_bus_port_set_device(bus, udev->parent_hub ?
2104             udev->parent_hub->hub->ports + udev->port_index : NULL,
2105             NULL, USB_ROOT_HUB_ADDR);
2106
2107 #if USB_HAVE_UGEN
2108         /* wait for all pending references to go away: */
2109         lockmgr(&usb_ref_lock, LK_EXCLUSIVE);
2110         udev->refcount--;
2111         while (udev->refcount != 0) {
2112                 cv_wait(&udev->ref_cv, &usb_ref_lock);
2113         }
2114         lockmgr(&usb_ref_lock, LK_RELEASE);
2115
2116         usb_destroy_dev(udev->ctrl_dev);
2117 #endif
2118
2119         if (udev->flags.usb_mode == USB_MODE_DEVICE) {
2120                 /* stop receiving any control transfers (Device Side Mode) */
2121                 usbd_transfer_unsetup(udev->ctrl_xfer, USB_CTRL_XFER_MAX);
2122         }
2123
2124         /* the following will get the device unconfigured in software */
2125         usb_unconfigure(udev, USB_UNCFG_FLAG_FREE_EP0);
2126
2127         /* unsetup any leftover default USB transfers */
2128         usbd_transfer_unsetup(udev->ctrl_xfer, USB_CTRL_XFER_MAX);
2129
2130         /* template unsetup, if any */
2131         (usb_temp_unsetup_p) (udev);
2132
2133         /* 
2134          * Make sure that our clear-stall messages are not queued
2135          * anywhere:
2136          */
2137         USB_BUS_LOCK(udev->bus);
2138         usb_proc_mwait(USB_BUS_NON_GIANT_PROC(udev->bus),
2139             &udev->cs_msg[0], &udev->cs_msg[1]);
2140         USB_BUS_UNLOCK(udev->bus);
2141
2142         lockuninit(&udev->enum_lock);
2143         lockuninit(&udev->sr_lock);
2144
2145         cv_destroy(&udev->ctrlreq_cv);
2146         cv_destroy(&udev->ref_cv);
2147
2148         lockuninit(&udev->device_lock);
2149 #if USB_HAVE_UGEN
2150         KASSERT(LIST_FIRST(&udev->pd_list) == NULL, ("leaked cdev entries"));
2151 #endif
2152
2153         /* Uninitialise device */
2154         if (bus->methods->device_uninit != NULL)
2155                 (bus->methods->device_uninit) (udev);
2156
2157         /* free device */
2158         if(udev->serial)
2159                 kfree(udev->serial, M_USB);
2160         if(udev->manufacturer)
2161                 kfree(udev->manufacturer, M_USB);
2162         if(udev->product)
2163                 kfree(udev->product, M_USB);
2164         kfree(udev, M_USB);
2165 }
2166
2167 /*------------------------------------------------------------------------*
2168  *      usbd_get_iface
2169  *
2170  * This function is the safe way to get the USB interface structure
2171  * pointer by interface index.
2172  *
2173  * Return values:
2174  *   NULL: Interface not present.
2175  *   Else: Pointer to USB interface structure.
2176  *------------------------------------------------------------------------*/
2177 struct usb_interface *
2178 usbd_get_iface(struct usb_device *udev, uint8_t iface_index)
2179 {
2180         struct usb_interface *iface = udev->ifaces + iface_index;
2181
2182         if (iface_index >= udev->ifaces_max)
2183                 return (NULL);
2184         return (iface);
2185 }
2186
2187 /*------------------------------------------------------------------------*
2188  *      usbd_find_descriptor
2189  *
2190  * This function will lookup the first descriptor that matches the
2191  * criteria given by the arguments "type" and "subtype". Descriptors
2192  * will only be searched within the interface having the index
2193  * "iface_index".  If the "id" argument points to an USB descriptor,
2194  * it will be skipped before the search is started. This allows
2195  * searching for multiple descriptors using the same criteria. Else
2196  * the search is started after the interface descriptor.
2197  *
2198  * Return values:
2199  *   NULL: End of descriptors
2200  *   Else: A descriptor matching the criteria
2201  *------------------------------------------------------------------------*/
2202 void   *
2203 usbd_find_descriptor(struct usb_device *udev, void *id, uint8_t iface_index,
2204     uint8_t type, uint8_t type_mask,
2205     uint8_t subtype, uint8_t subtype_mask)
2206 {
2207         struct usb_descriptor *desc;
2208         struct usb_config_descriptor *cd;
2209         struct usb_interface *iface;
2210
2211         cd = usbd_get_config_descriptor(udev);
2212         if (cd == NULL) {
2213                 return (NULL);
2214         }
2215         if (id == NULL) {
2216                 iface = usbd_get_iface(udev, iface_index);
2217                 if (iface == NULL) {
2218                         return (NULL);
2219                 }
2220                 id = usbd_get_interface_descriptor(iface);
2221                 if (id == NULL) {
2222                         return (NULL);
2223                 }
2224         }
2225         desc = (void *)id;
2226
2227         while ((desc = usb_desc_foreach(cd, desc))) {
2228
2229                 if (desc->bDescriptorType == UDESC_INTERFACE) {
2230                         break;
2231                 }
2232                 if (((desc->bDescriptorType & type_mask) == type) &&
2233                     ((desc->bDescriptorSubtype & subtype_mask) == subtype)) {
2234                         return (desc);
2235                 }
2236         }
2237         return (NULL);
2238 }
2239
2240 /*------------------------------------------------------------------------*
2241  *      usb_devinfo
2242  *
2243  * This function will dump information from the device descriptor
2244  * belonging to the USB device pointed to by "udev", to the string
2245  * pointed to by "dst_ptr" having a maximum length of "dst_len" bytes
2246  * including the terminating zero.
2247  *------------------------------------------------------------------------*/
2248 void
2249 usb_devinfo(struct usb_device *udev, char *dst_ptr, uint16_t dst_len)
2250 {
2251         struct usb_device_descriptor *udd = &udev->ddesc;
2252         uint16_t bcdDevice;
2253         uint16_t bcdUSB;
2254
2255         bcdUSB = UGETW(udd->bcdUSB);
2256         bcdDevice = UGETW(udd->bcdDevice);
2257
2258         if (udd->bDeviceClass != 0xFF) {
2259                 ksnprintf(dst_ptr, dst_len, "%s %s, class %d/%d, rev %x.%02x/"
2260                     "%x.%02x, addr %d",
2261                     usb_get_manufacturer(udev),
2262                     usb_get_product(udev),
2263                     udd->bDeviceClass, udd->bDeviceSubClass,
2264                     (bcdUSB >> 8), bcdUSB & 0xFF,
2265                     (bcdDevice >> 8), bcdDevice & 0xFF,
2266                     udev->address);
2267         } else {
2268                 ksnprintf(dst_ptr, dst_len, "%s %s, rev %x.%02x/"
2269                     "%x.%02x, addr %d",
2270                     usb_get_manufacturer(udev),
2271                     usb_get_product(udev),
2272                     (bcdUSB >> 8), bcdUSB & 0xFF,
2273                     (bcdDevice >> 8), bcdDevice & 0xFF,
2274                     udev->address);
2275         }
2276 }
2277
2278 #ifdef USB_VERBOSE
2279 /*
2280  * Descriptions of of known vendors and devices ("products").
2281  */
2282 struct usb_knowndev {
2283         uint16_t vendor;
2284         uint16_t product;
2285         uint32_t flags;
2286         const char *vendorname;
2287         const char *productname;
2288 };
2289
2290 #define USB_KNOWNDEV_NOPROD     0x01    /* match on vendor only */
2291
2292 #include "usbdevs.h"
2293 #include "usbdevs_data.h"
2294 #endif                                  /* USB_VERBOSE */
2295
2296 static void
2297 usbd_set_device_strings(struct usb_device *udev)
2298 {
2299         struct usb_device_descriptor *udd = &udev->ddesc;
2300 #ifdef USB_VERBOSE
2301         const struct usb_knowndev *kdp;
2302 #endif
2303         char *temp_ptr;
2304         size_t temp_size;
2305         uint16_t vendor_id;
2306         uint16_t product_id;
2307         uint8_t do_unlock;
2308
2309         /* Protect scratch area */
2310         do_unlock = usbd_enum_lock(udev);
2311
2312         temp_ptr = (char *)udev->scratch.data;
2313         temp_size = sizeof(udev->scratch.data);
2314
2315         vendor_id = UGETW(udd->idVendor);
2316         product_id = UGETW(udd->idProduct);
2317
2318         /* get serial number string */
2319         usbd_req_get_string_any(udev, NULL, temp_ptr, temp_size,
2320             udev->ddesc.iSerialNumber);
2321         udev->serial = kstrdup(temp_ptr, M_USB);
2322
2323         /* get manufacturer string */
2324         usbd_req_get_string_any(udev, NULL, temp_ptr, temp_size,
2325             udev->ddesc.iManufacturer);
2326         usb_trim_spaces(temp_ptr);
2327         if (temp_ptr[0] != '\0')
2328                 udev->manufacturer = kstrdup(temp_ptr, M_USB);
2329
2330         /* get product string */
2331         usbd_req_get_string_any(udev, NULL, temp_ptr, temp_size,
2332             udev->ddesc.iProduct);
2333         usb_trim_spaces(temp_ptr);
2334         if (temp_ptr[0] != '\0')
2335                 udev->product = kstrdup(temp_ptr, M_USB);
2336
2337 #ifdef USB_VERBOSE
2338         if (udev->manufacturer == NULL || udev->product == NULL) {
2339                 for (kdp = usb_knowndevs; kdp->vendorname != NULL; kdp++) {
2340                         if (kdp->vendor == vendor_id &&
2341                             (kdp->product == product_id ||
2342                             (kdp->flags & USB_KNOWNDEV_NOPROD) != 0))
2343                                 break;
2344                 }
2345                 if (kdp->vendorname != NULL) {
2346                         /* XXX should use pointer to knowndevs string */
2347                         if (udev->manufacturer == NULL) {
2348                                 udev->manufacturer = kstrdup(kdp->vendorname,
2349                                     M_USB);
2350                         }
2351                         if (udev->product == NULL &&
2352                             (kdp->flags & USB_KNOWNDEV_NOPROD) == 0) {
2353                                 udev->product = kstrdup(kdp->productname,
2354                                     M_USB);
2355                         }
2356                 }
2357         }
2358 #endif
2359         /* Provide default strings if none were found */
2360         if (udev->manufacturer == NULL) {
2361                 ksnprintf(temp_ptr, temp_size, "vendor 0x%04x", vendor_id);
2362                 udev->manufacturer = kstrdup(temp_ptr, M_USB);
2363         }
2364         if (udev->product == NULL) {
2365                 ksnprintf(temp_ptr, temp_size, "product 0x%04x", product_id);
2366                 udev->product = kstrdup(temp_ptr, M_USB);
2367         }
2368
2369         if (do_unlock)
2370                 usbd_enum_unlock(udev);
2371 }
2372
2373 /*
2374  * Returns:
2375  * See: USB_MODE_XXX
2376  */
2377 enum usb_hc_mode
2378 usbd_get_mode(struct usb_device *udev)
2379 {
2380         return (udev->flags.usb_mode);
2381 }
2382
2383 /*
2384  * Returns:
2385  * See: USB_SPEED_XXX
2386  */
2387 enum usb_dev_speed
2388 usbd_get_speed(struct usb_device *udev)
2389 {
2390         return (udev->speed);
2391 }
2392
2393 uint32_t
2394 usbd_get_isoc_fps(struct usb_device *udev)
2395 {
2396         ;                               /* indent fix */
2397         switch (udev->speed) {
2398         case USB_SPEED_LOW:
2399         case USB_SPEED_FULL:
2400                 return (1000);
2401         default:
2402                 return (8000);
2403         }
2404 }
2405
2406 struct usb_device_descriptor *
2407 usbd_get_device_descriptor(struct usb_device *udev)
2408 {
2409         if (udev == NULL)
2410                 return (NULL);          /* be NULL safe */
2411         return (&udev->ddesc);
2412 }
2413
2414 struct usb_config_descriptor *
2415 usbd_get_config_descriptor(struct usb_device *udev)
2416 {
2417         if (udev == NULL)
2418                 return (NULL);          /* be NULL safe */
2419         return (udev->cdesc);
2420 }
2421
2422 /*------------------------------------------------------------------------*
2423  *      usb_test_quirk - test a device for a given quirk
2424  *
2425  * Return values:
2426  * 0: The USB device does not have the given quirk.
2427  * Else: The USB device has the given quirk.
2428  *------------------------------------------------------------------------*/
2429 uint8_t
2430 usb_test_quirk(const struct usb_attach_arg *uaa, uint16_t quirk)
2431 {
2432         uint8_t found;
2433         uint8_t x;
2434
2435         if (quirk == UQ_NONE)
2436                 return (0);
2437
2438         /* search the automatic per device quirks first */
2439
2440         for (x = 0; x != USB_MAX_AUTO_QUIRK; x++) {
2441                 if (uaa->device->autoQuirk[x] == quirk)
2442                         return (1);
2443         }
2444
2445         /* search global quirk table, if any */
2446
2447         found = (usb_test_quirk_p) (&uaa->info, quirk);
2448
2449         return (found);
2450 }
2451
2452 struct usb_interface_descriptor *
2453 usbd_get_interface_descriptor(struct usb_interface *iface)
2454 {
2455         if (iface == NULL)
2456                 return (NULL);          /* be NULL safe */
2457         return (iface->idesc);
2458 }
2459
2460 uint8_t
2461 usbd_get_interface_altindex(struct usb_interface *iface)
2462 {
2463         return (iface->alt_index);
2464 }
2465
2466 uint8_t
2467 usbd_get_bus_index(struct usb_device *udev)
2468 {
2469         return ((uint8_t)device_get_unit(udev->bus->bdev));
2470 }
2471
2472 uint8_t
2473 usbd_get_device_index(struct usb_device *udev)
2474 {
2475         return (udev->device_index);
2476 }
2477
2478 #if USB_HAVE_DEVCTL
2479 static void
2480 usb_notify_addq(const char *type, struct usb_device *udev)
2481 {
2482         struct usb_interface *iface;
2483         struct sbuf *sb;
2484         int i;
2485
2486         /* announce the device */
2487         sb = sbuf_new(NULL, NULL, 4096, SBUF_AUTOEXTEND);
2488         sbuf_printf(sb,
2489 #if USB_HAVE_UGEN
2490             "ugen=%s "
2491             "cdev=%s "
2492 #endif
2493             "vendor=0x%04x "
2494             "product=0x%04x "
2495             "devclass=0x%02x "
2496             "devsubclass=0x%02x "
2497             "sernum=\"%s\" "
2498             "release=0x%04x "
2499             "mode=%s "
2500             "port=%u "
2501 #if USB_HAVE_UGEN
2502             "parent=%s"
2503 #endif
2504             "",
2505 #if USB_HAVE_UGEN
2506             udev->ugen_name,
2507             udev->ugen_name,
2508 #endif
2509             UGETW(udev->ddesc.idVendor),
2510             UGETW(udev->ddesc.idProduct),
2511             udev->ddesc.bDeviceClass,
2512             udev->ddesc.bDeviceSubClass,
2513             usb_get_serial(udev),
2514             UGETW(udev->ddesc.bcdDevice),
2515             (udev->flags.usb_mode == USB_MODE_HOST) ? "host" : "device",
2516             udev->port_no
2517 #if USB_HAVE_UGEN
2518             , udev->parent_hub != NULL ?
2519                 udev->parent_hub->ugen_name :
2520                 device_get_nameunit(device_get_parent(udev->bus->bdev))
2521 #endif
2522             );
2523         sbuf_finish(sb);
2524         devctl_notify("USB", "DEVICE", type, sbuf_data(sb));
2525         sbuf_delete(sb);
2526
2527         /* announce each interface */
2528         for (i = 0; i < USB_IFACE_MAX; i++) {
2529                 iface = usbd_get_iface(udev, i);
2530                 if (iface == NULL)
2531                         break;          /* end of interfaces */
2532                 if (iface->idesc == NULL)
2533                         continue;       /* no interface descriptor */
2534                 
2535                 sb = 0;
2536                 sb = sbuf_new(NULL, NULL, 4096, SBUF_AUTOEXTEND);
2537                 sbuf_printf(sb,
2538 #if USB_HAVE_UGEN
2539                     "ugen=%s "
2540                     "cdev=%s "
2541 #endif
2542                     "vendor=0x%04x "
2543                     "product=0x%04x "
2544                     "devclass=0x%02x "
2545                     "devsubclass=0x%02x "
2546                     "sernum=\"%s\" "
2547                     "release=0x%04x "
2548                     "mode=%s "
2549                     "interface=%d "
2550                     "endpoints=%d "
2551                     "intclass=0x%02x "
2552                     "intsubclass=0x%02x "
2553                     "intprotocol=0x%02x",
2554 #if USB_HAVE_UGEN
2555                     udev->ugen_name,
2556                     udev->ugen_name,
2557 #endif
2558                     UGETW(udev->ddesc.idVendor),
2559                     UGETW(udev->ddesc.idProduct),
2560                     udev->ddesc.bDeviceClass,
2561                     udev->ddesc.bDeviceSubClass,
2562                     usb_get_serial(udev),
2563                     UGETW(udev->ddesc.bcdDevice),
2564                     (udev->flags.usb_mode == USB_MODE_HOST) ? "host" : "device",
2565                     iface->idesc->bInterfaceNumber,
2566                     iface->idesc->bNumEndpoints,
2567                     iface->idesc->bInterfaceClass,
2568                     iface->idesc->bInterfaceSubClass,
2569                     iface->idesc->bInterfaceProtocol);
2570                 sbuf_finish(sb);
2571                 devctl_notify("USB", "INTERFACE", type, sbuf_data(sb));
2572                 sbuf_delete(sb);
2573         }
2574 }
2575 #endif
2576
2577 #if USB_HAVE_UGEN
2578 /*------------------------------------------------------------------------*
2579  *      usb_fifo_free_wrap
2580  *
2581  * This function will free the FIFOs.
2582  *
2583  * Description of "flag" argument: If the USB_UNCFG_FLAG_FREE_EP0 flag
2584  * is set and "iface_index" is set to "USB_IFACE_INDEX_ANY", we free
2585  * all FIFOs. If the USB_UNCFG_FLAG_FREE_EP0 flag is not set and
2586  * "iface_index" is set to "USB_IFACE_INDEX_ANY", we free all non
2587  * control endpoint FIFOs. If "iface_index" is not set to
2588  * "USB_IFACE_INDEX_ANY" the flag has no effect.
2589  *------------------------------------------------------------------------*/
2590 static void
2591 usb_fifo_free_wrap(struct usb_device *udev,
2592     uint8_t iface_index, uint8_t flag)
2593 {
2594         struct usb_fifo *f;
2595         uint16_t i;
2596
2597         /*
2598          * Free any USB FIFOs on the given interface:
2599          */
2600         for (i = 0; i != USB_FIFO_MAX; i++) {
2601                 f = udev->fifo[i];
2602                 if (f == NULL) {
2603                         continue;
2604                 }
2605                 /* Check if the interface index matches */
2606                 if (iface_index == f->iface_index) {
2607                         if (f->methods != &usb_ugen_methods) {
2608                                 /*
2609                                  * Don't free any non-generic FIFOs in
2610                                  * this case.
2611                                  */
2612                                 continue;
2613                         }
2614                         if ((f->dev_ep_index == 0) &&
2615                             (f->fs_xfer == NULL)) {
2616                                 /* no need to free this FIFO */
2617                                 continue;
2618                         }
2619                 } else if (iface_index == USB_IFACE_INDEX_ANY) {
2620                         if ((f->methods == &usb_ugen_methods) &&
2621                             (f->dev_ep_index == 0) &&
2622                             (!(flag & USB_UNCFG_FLAG_FREE_EP0)) &&
2623                             (f->fs_xfer == NULL)) {
2624                                 /* no need to free this FIFO */
2625                                 continue;
2626                         }
2627                 } else {
2628                         /* no need to free this FIFO */
2629                         continue;
2630                 }
2631                 /* free this FIFO */
2632                 usb_fifo_free(f);
2633         }
2634 }
2635 #endif
2636
2637 /*------------------------------------------------------------------------*
2638  *      usb_peer_can_wakeup
2639  *
2640  * Return values:
2641  * 0: Peer cannot do resume signalling.
2642  * Else: Peer can do resume signalling.
2643  *------------------------------------------------------------------------*/
2644 uint8_t
2645 usb_peer_can_wakeup(struct usb_device *udev)
2646 {
2647         const struct usb_config_descriptor *cdp;
2648
2649         cdp = udev->cdesc;
2650         if ((cdp != NULL) && (udev->flags.usb_mode == USB_MODE_HOST)) {
2651                 return (cdp->bmAttributes & UC_REMOTE_WAKEUP);
2652         }
2653         return (0);                     /* not supported */
2654 }
2655
2656 void
2657 usb_set_device_state(struct usb_device *udev, enum usb_dev_state state)
2658 {
2659
2660         KASSERT(state < USB_STATE_MAX, ("invalid udev state"));
2661
2662         DPRINTF("udev %p state %s -> %s\n", udev,
2663             usb_statestr(udev->state), usb_statestr(state));
2664         udev->state = state;
2665
2666         if (udev->bus->methods->device_state_change != NULL)
2667                 (udev->bus->methods->device_state_change) (udev);
2668 }
2669
2670 enum usb_dev_state
2671 usb_get_device_state(struct usb_device *udev)
2672 {
2673         if (udev == NULL)
2674                 return (USB_STATE_DETACHED);
2675         return (udev->state);
2676 }
2677
2678 uint8_t
2679 usbd_device_attached(struct usb_device *udev)
2680 {
2681         return (udev->state > USB_STATE_DETACHED);
2682 }
2683
2684 /*
2685  * The following function locks enumerating the given USB device. If
2686  * the lock is already grabbed this function returns zero. Else a
2687  * non-zero value is returned.
2688  */
2689 uint8_t
2690 usbd_enum_lock(struct usb_device *udev)
2691 {
2692         if (lockstatus(&udev->enum_lock, NULL)==LK_EXCLUSIVE)
2693                 return (0);
2694
2695         lockmgr(&udev->enum_lock, LK_EXCLUSIVE);
2696         lockmgr(&udev->sr_lock, LK_EXCLUSIVE);
2697         /* 
2698          * NEWBUS LOCK NOTE: We should check if any parent SX locks
2699          * are locked before locking Giant. Else the lock can be
2700          * locked multiple times.
2701          */
2702 #if 0
2703         mtx_lock(&Giant);
2704 #endif
2705         return (1);
2706 }
2707
2708 /* The following function unlocks enumerating the given USB device. */
2709
2710 void
2711 usbd_enum_unlock(struct usb_device *udev)
2712 {
2713 #if 0
2714         mtx_unlock(&Giant);
2715 #endif
2716         lockmgr(&udev->enum_lock, LK_RELEASE);
2717         lockmgr(&udev->sr_lock, LK_RELEASE);
2718 }
2719
2720 /* The following function locks suspend and resume. */
2721
2722 void
2723 usbd_sr_lock(struct usb_device *udev)
2724 {
2725         lockmgr(&udev->sr_lock, LK_EXCLUSIVE);
2726         /* 
2727          * NEWBUS LOCK NOTE: We should check if any parent SX locks
2728          * are locked before locking Giant. Else the lock can be
2729          * locked multiple times.
2730          */
2731 #if 0
2732         mtx_lock(&Giant);
2733 #endif
2734 }
2735
2736 /* The following function unlocks suspend and resume. */
2737
2738 void
2739 usbd_sr_unlock(struct usb_device *udev)
2740 {
2741 #if 0
2742         mtx_unlock(&Giant);
2743 #endif
2744         lockmgr(&udev->sr_lock, LK_RELEASE);
2745 }
2746
2747 /*
2748  * The following function checks the enumerating lock for the given
2749  * USB device.
2750  */
2751
2752 uint8_t
2753 usbd_enum_is_locked(struct usb_device *udev)
2754 {
2755         /* XXX: Make sure that we return a correct value here */
2756         return (lockowned(&udev->enum_lock));
2757 }
2758
2759 /*
2760  * The following function is used to set the per-interface specific
2761  * plug and play information. The string referred to by the pnpinfo
2762  * argument can safely be freed after calling this function. The
2763  * pnpinfo of an interface will be reset at device detach or when
2764  * passing a NULL argument to this function. This function
2765  * returns zero on success, else a USB_ERR_XXX failure code.
2766  */
2767
2768 usb_error_t 
2769 usbd_set_pnpinfo(struct usb_device *udev, uint8_t iface_index, const char *pnpinfo)
2770 {
2771         struct usb_interface *iface;
2772
2773         iface = usbd_get_iface(udev, iface_index);
2774         if (iface == NULL)
2775                 return (USB_ERR_INVAL);
2776
2777         if (iface->pnpinfo != NULL) {
2778                 kfree(iface->pnpinfo, M_USBDEV);
2779                 iface->pnpinfo = NULL;
2780         }
2781
2782         if (pnpinfo == NULL || pnpinfo[0] == 0)
2783                 return (0);             /* success */
2784
2785         iface->pnpinfo = kstrdup(pnpinfo, M_USBDEV);
2786         if (iface->pnpinfo == NULL)
2787                 return (USB_ERR_NOMEM);
2788
2789         return (0);                     /* success */
2790 }
2791
2792 usb_error_t
2793 usbd_add_dynamic_quirk(struct usb_device *udev, uint16_t quirk)
2794 {
2795         uint8_t x;
2796
2797         for (x = 0; x != USB_MAX_AUTO_QUIRK; x++) {
2798                 if (udev->autoQuirk[x] == 0 ||
2799                     udev->autoQuirk[x] == quirk) {
2800                         udev->autoQuirk[x] = quirk;
2801                         return (0);     /* success */
2802                 }
2803         }
2804         return (USB_ERR_NOMEM);
2805 }
2806
2807 /*
2808  * The following function is used to select the endpoint mode. It
2809  * should not be called outside enumeration context.
2810  */
2811
2812 usb_error_t
2813 usbd_set_endpoint_mode(struct usb_device *udev, struct usb_endpoint *ep,
2814     uint8_t ep_mode)
2815 {   
2816         usb_error_t error;
2817         uint8_t do_unlock;
2818
2819         /* Prevent re-enumeration */
2820         do_unlock = usbd_enum_lock(udev);
2821
2822         if (udev->bus->methods->set_endpoint_mode != NULL) {
2823                 error = (udev->bus->methods->set_endpoint_mode) (
2824                     udev, ep, ep_mode);
2825         } else if (ep_mode != USB_EP_MODE_DEFAULT) {
2826                 error = USB_ERR_INVAL;
2827         } else {
2828                 error = 0;
2829         }
2830
2831         /* only set new mode regardless of error */
2832         ep->ep_mode = ep_mode;
2833
2834         if (do_unlock)
2835                 usbd_enum_unlock(udev);
2836         return (error);
2837 }
2838
2839 uint8_t
2840 usbd_get_endpoint_mode(struct usb_device *udev, struct usb_endpoint *ep)
2841 {
2842         return (ep->ep_mode);
2843 }