xref: /freebsd/sys/dev/usb/usb_dev.c (revision c0020399a650364d0134f79f3fa319f84064372d)
1 /* $FreeBSD$ */
2 /*-
3  * Copyright (c) 2006-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  * usb2_dev.c - An abstraction layer for creating devices under /dev/...
28  */
29 
30 #include <dev/usb/usb.h>
31 #include <dev/usb/usb_ioctl.h>
32 #include <dev/usb/usb_mfunc.h>
33 #include <dev/usb/usb_error.h>
34 
35 #define	USB_DEBUG_VAR usb2_fifo_debug
36 
37 #include <dev/usb/usb_core.h>
38 #include <dev/usb/usb_mbuf.h>
39 #include <dev/usb/usb_dev.h>
40 #include <dev/usb/usb_process.h>
41 #include <dev/usb/usb_device.h>
42 #include <dev/usb/usb_debug.h>
43 #include <dev/usb/usb_busdma.h>
44 #include <dev/usb/usb_generic.h>
45 #include <dev/usb/usb_dynamic.h>
46 #include <dev/usb/usb_util.h>
47 
48 #include <dev/usb/usb_controller.h>
49 #include <dev/usb/usb_bus.h>
50 
51 #include <sys/filio.h>
52 #include <sys/ttycom.h>
53 #include <sys/syscallsubr.h>
54 
55 #include <machine/stdarg.h>
56 
57 #if USB_HAVE_UGEN
58 
59 #if USB_DEBUG
60 static int usb2_fifo_debug = 0;
61 
62 SYSCTL_NODE(_hw_usb2, OID_AUTO, dev, CTLFLAG_RW, 0, "USB device");
63 SYSCTL_INT(_hw_usb2_dev, OID_AUTO, debug, CTLFLAG_RW,
64     &usb2_fifo_debug, 0, "Debug Level");
65 #endif
66 
67 #if ((__FreeBSD_version >= 700001) || (__FreeBSD_version == 0) || \
68      ((__FreeBSD_version >= 600034) && (__FreeBSD_version < 700000)))
69 #define	USB_UCRED struct ucred *ucred,
70 #else
71 #define	USB_UCRED
72 #endif
73 
74 /* prototypes */
75 
76 static int	usb2_fifo_open(struct usb2_cdev_privdata *,
77 		    struct usb2_fifo *, int);
78 static void	usb2_fifo_close(struct usb2_fifo *, int);
79 static void	usb2_dev_init(void *);
80 static void	usb2_dev_init_post(void *);
81 static void	usb2_dev_uninit(void *);
82 static int	usb2_fifo_uiomove(struct usb2_fifo *, void *, int,
83 		    struct uio *);
84 static void	usb2_fifo_check_methods(struct usb2_fifo_methods *);
85 static struct	usb2_fifo *usb2_fifo_alloc(void);
86 static struct	usb2_pipe *usb2_dev_get_pipe(struct usb2_device *, uint8_t,
87 		    uint8_t);
88 static void	usb2_loc_fill(struct usb2_fs_privdata *,
89 		    struct usb2_cdev_privdata *);
90 static void	usb2_close(void *);
91 static usb2_error_t usb2_ref_device(struct usb2_cdev_privdata *, int);
92 static usb2_error_t usb2_usb_ref_device(struct usb2_cdev_privdata *);
93 static void	usb2_unref_device(struct usb2_cdev_privdata *);
94 
95 static d_open_t usb2_open;
96 static d_ioctl_t usb2_ioctl;
97 static d_read_t usb2_read;
98 static d_write_t usb2_write;
99 static d_poll_t usb2_poll;
100 
101 static d_ioctl_t usb2_static_ioctl;
102 
103 static usb2_fifo_open_t usb2_fifo_dummy_open;
104 static usb2_fifo_close_t usb2_fifo_dummy_close;
105 static usb2_fifo_ioctl_t usb2_fifo_dummy_ioctl;
106 static usb2_fifo_cmd_t usb2_fifo_dummy_cmd;
107 
108 /* character device structure used for devices (/dev/ugenX.Y and /dev/uXXX) */
109 struct cdevsw usb2_devsw = {
110 	.d_version = D_VERSION,
111 	.d_open = usb2_open,
112 	.d_ioctl = usb2_ioctl,
113 	.d_name = "usbdev",
114 	.d_flags = D_TRACKCLOSE,
115 	.d_read = usb2_read,
116 	.d_write = usb2_write,
117 	.d_poll = usb2_poll
118 };
119 
120 static struct cdev* usb2_dev = NULL;
121 
122 /* character device structure used for /dev/usb */
123 struct cdevsw usb2_static_devsw = {
124 	.d_version = D_VERSION,
125 	.d_ioctl = usb2_static_ioctl,
126 	.d_name = "usb"
127 };
128 
129 static TAILQ_HEAD(, usb2_symlink) usb2_sym_head;
130 static struct sx usb2_sym_lock;
131 
132 struct mtx usb2_ref_lock;
133 
134 /*------------------------------------------------------------------------*
135  *	usb2_loc_fill
136  *
137  * This is used to fill out a usb2_cdev_privdata structure based on the
138  * device's address as contained in usb2_fs_privdata.
139  *------------------------------------------------------------------------*/
140 static void
141 usb2_loc_fill(struct usb2_fs_privdata* pd, struct usb2_cdev_privdata *cpd)
142 {
143 	cpd->bus_index = pd->bus_index;
144 	cpd->dev_index = pd->dev_index;
145 	cpd->ep_addr = pd->ep_addr;
146 	cpd->fifo_index = pd->fifo_index;
147 }
148 
149 /*------------------------------------------------------------------------*
150  *	usb2_ref_device
151  *
152  * This function is used to atomically refer an USB device by its
153  * device location. If this function returns success the USB device
154  * will not dissappear until the USB device is unreferenced.
155  *
156  * Return values:
157  *  0: Success, refcount incremented on the given USB device.
158  *  Else: Failure.
159  *------------------------------------------------------------------------*/
160 usb2_error_t
161 usb2_ref_device(struct usb2_cdev_privdata* cpd, int need_uref)
162 {
163 	struct usb2_fifo **ppf;
164 	struct usb2_fifo *f;
165 
166 	DPRINTFN(2, "usb2_ref_device, cpd=%p need uref=%d\n", cpd, need_uref);
167 
168 	mtx_lock(&usb2_ref_lock);
169 	cpd->bus = devclass_get_softc(usb2_devclass_ptr, cpd->bus_index);
170 	if (cpd->bus == NULL) {
171 		DPRINTFN(2, "no bus at %u\n", cpd->bus_index);
172 		goto error;
173 	}
174 	cpd->udev = cpd->bus->devices[cpd->dev_index];
175 	if (cpd->udev == NULL) {
176 		DPRINTFN(2, "no device at %u\n", cpd->dev_index);
177 		goto error;
178 	}
179 	if (cpd->udev->refcount == USB_DEV_REF_MAX) {
180 		DPRINTFN(2, "no dev ref\n");
181 		goto error;
182 	}
183 	if (need_uref) {
184 		DPRINTFN(2, "ref udev - needed\n");
185 		cpd->udev->refcount++;
186 		cpd->is_uref = 1;
187 
188 		mtx_unlock(&usb2_ref_lock);
189 
190 		/*
191 		 * We need to grab the sx-lock before grabbing the
192 		 * FIFO refs to avoid deadlock at detach!
193 		 */
194 		sx_xlock(cpd->udev->default_sx + 1);
195 
196 		mtx_lock(&usb2_ref_lock);
197 	}
198 
199 	/* check if we are doing an open */
200 	if (cpd->fflags == 0) {
201 		/* set defaults */
202 		cpd->txfifo = NULL;
203 		cpd->rxfifo = NULL;
204 		cpd->is_write = 0;
205 		cpd->is_read = 0;
206 		cpd->is_usbfs = 0;
207 	} else {
208 		/* initialise "is_usbfs" flag */
209 		cpd->is_usbfs = 0;
210 
211 		/* check for write */
212 		if (cpd->fflags & FWRITE) {
213 			ppf = cpd->udev->fifo;
214 			f = ppf[cpd->fifo_index + USB_FIFO_TX];
215 			cpd->txfifo = f;
216 			cpd->is_write = 1;	/* ref */
217 			if (f == NULL || f->refcount == USB_FIFO_REF_MAX)
218 				goto error;
219 			if (f->curr_cpd != cpd)
220 				goto error;
221 			/* check if USB-FS is active */
222 			if (f->fs_ep_max != 0) {
223 				cpd->is_usbfs = 1;
224 			}
225 		} else {
226 			cpd->txfifo = NULL;
227 			cpd->is_write = 0;	/* no ref */
228 		}
229 
230 		/* check for read */
231 		if (cpd->fflags & FREAD) {
232 			ppf = cpd->udev->fifo;
233 			f = ppf[cpd->fifo_index + USB_FIFO_RX];
234 			cpd->rxfifo = f;
235 			cpd->is_read = 1;	/* ref */
236 			if (f == NULL || f->refcount == USB_FIFO_REF_MAX)
237 				goto error;
238 			if (f->curr_cpd != cpd)
239 				goto error;
240 			/* check if USB-FS is active */
241 			if (f->fs_ep_max != 0) {
242 				cpd->is_usbfs = 1;
243 			}
244 		} else {
245 			cpd->rxfifo = NULL;
246 			cpd->is_read = 0;	/* no ref */
247 		}
248 	}
249 
250 	/* when everything is OK we increment the refcounts */
251 	if (cpd->is_write) {
252 		DPRINTFN(2, "ref write\n");
253 		cpd->txfifo->refcount++;
254 	}
255 	if (cpd->is_read) {
256 		DPRINTFN(2, "ref read\n");
257 		cpd->rxfifo->refcount++;
258 	}
259 	mtx_unlock(&usb2_ref_lock);
260 
261 	if (cpd->is_uref) {
262 		mtx_lock(&Giant);	/* XXX */
263 	}
264 	return (0);
265 
266 error:
267 	if (cpd->is_uref) {
268 		sx_unlock(cpd->udev->default_sx + 1);
269 		if (--(cpd->udev->refcount) == 0) {
270 			usb2_cv_signal(cpd->udev->default_cv + 1);
271 		}
272 		cpd->is_uref = 0;
273 	}
274 	mtx_unlock(&usb2_ref_lock);
275 	DPRINTFN(2, "fail\n");
276 	return (USB_ERR_INVAL);
277 }
278 
279 /*------------------------------------------------------------------------*
280  *	usb2_usb_ref_device
281  *
282  * This function is used to upgrade an USB reference to include the
283  * USB device reference on a USB location.
284  *
285  * Return values:
286  *  0: Success, refcount incremented on the given USB device.
287  *  Else: Failure.
288  *------------------------------------------------------------------------*/
289 static usb2_error_t
290 usb2_usb_ref_device(struct usb2_cdev_privdata *cpd)
291 {
292 	/*
293 	 * Check if we already got an USB reference on this location:
294 	 */
295 	if (cpd->is_uref)
296 		return (0);		/* success */
297 
298 	/*
299 	 * To avoid deadlock at detach we need to drop the FIFO ref
300 	 * and re-acquire a new ref!
301 	 */
302 	usb2_unref_device(cpd);
303 
304 	return (usb2_ref_device(cpd, 1 /* need uref */));
305 }
306 
307 /*------------------------------------------------------------------------*
308  *	usb2_unref_device
309  *
310  * This function will release the reference count by one unit for the
311  * given USB device.
312  *------------------------------------------------------------------------*/
313 void
314 usb2_unref_device(struct usb2_cdev_privdata *cpd)
315 {
316 	if (cpd->is_uref) {
317 		mtx_unlock(&Giant);	/* XXX */
318 		sx_unlock(cpd->udev->default_sx + 1);
319 	}
320 	mtx_lock(&usb2_ref_lock);
321 	if (cpd->is_read) {
322 		if (--(cpd->rxfifo->refcount) == 0) {
323 			usb2_cv_signal(&cpd->rxfifo->cv_drain);
324 		}
325 		cpd->is_read = 0;
326 	}
327 	if (cpd->is_write) {
328 		if (--(cpd->txfifo->refcount) == 0) {
329 			usb2_cv_signal(&cpd->txfifo->cv_drain);
330 		}
331 		cpd->is_write = 0;
332 	}
333 	if (cpd->is_uref) {
334 		if (--(cpd->udev->refcount) == 0) {
335 			usb2_cv_signal(cpd->udev->default_cv + 1);
336 		}
337 		cpd->is_uref = 0;
338 	}
339 	mtx_unlock(&usb2_ref_lock);
340 }
341 
342 static struct usb2_fifo *
343 usb2_fifo_alloc(void)
344 {
345 	struct usb2_fifo *f;
346 
347 	f = malloc(sizeof(*f), M_USBDEV, M_WAITOK | M_ZERO);
348 	if (f) {
349 		usb2_cv_init(&f->cv_io, "FIFO-IO");
350 		usb2_cv_init(&f->cv_drain, "FIFO-DRAIN");
351 		f->refcount = 1;
352 	}
353 	return (f);
354 }
355 
356 /*------------------------------------------------------------------------*
357  *	usb2_fifo_create
358  *------------------------------------------------------------------------*/
359 static int
360 usb2_fifo_create(struct usb2_cdev_privdata *cpd)
361 {
362 	struct usb2_device *udev = cpd->udev;
363 	struct usb2_fifo *f;
364 	struct usb2_pipe *pipe;
365 	uint8_t n;
366 	uint8_t is_tx;
367 	uint8_t is_rx;
368 	uint8_t no_null;
369 	uint8_t is_busy;
370 	int ep = cpd->ep_addr;
371 
372 	is_tx = (cpd->fflags & FWRITE) ? 1 : 0;
373 	is_rx = (cpd->fflags & FREAD) ? 1 : 0;
374 	no_null = 1;
375 	is_busy = 0;
376 
377 	/* Preallocated FIFO */
378 	if (ep < 0) {
379 		DPRINTFN(5, "Preallocated FIFO\n");
380 		if (is_tx) {
381 			f = udev->fifo[cpd->fifo_index + USB_FIFO_TX];
382 			if (f == NULL)
383 				return (EINVAL);
384 			cpd->txfifo = f;
385 		}
386 		if (is_rx) {
387 			f = udev->fifo[cpd->fifo_index + USB_FIFO_RX];
388 			if (f == NULL)
389 				return (EINVAL);
390 			cpd->rxfifo = f;
391 		}
392 		return (0);
393 	}
394 
395 	KASSERT(ep >= 0 && ep <= 15, ("endpoint %d out of range", ep));
396 
397 	/* search for a free FIFO slot */
398 	DPRINTFN(5, "Endpoint device, searching for 0x%02x\n", ep);
399 	for (n = 0;; n += 2) {
400 
401 		if (n == USB_FIFO_MAX) {
402 			if (no_null) {
403 				no_null = 0;
404 				n = 0;
405 			} else {
406 				/* end of FIFOs reached */
407 				DPRINTFN(5, "out of FIFOs\n");
408 				return (ENOMEM);
409 			}
410 		}
411 		/* Check for TX FIFO */
412 		if (is_tx) {
413 			f = udev->fifo[n + USB_FIFO_TX];
414 			if (f != NULL) {
415 				if (f->dev_ep_index != ep) {
416 					/* wrong endpoint index */
417 					continue;
418 				}
419 				if (f->curr_cpd != NULL) {
420 					/* FIFO is opened */
421 					is_busy = 1;
422 					continue;
423 				}
424 			} else if (no_null) {
425 				continue;
426 			}
427 		}
428 		/* Check for RX FIFO */
429 		if (is_rx) {
430 			f = udev->fifo[n + USB_FIFO_RX];
431 			if (f != NULL) {
432 				if (f->dev_ep_index != ep) {
433 					/* wrong endpoint index */
434 					continue;
435 				}
436 				if (f->curr_cpd != NULL) {
437 					/* FIFO is opened */
438 					is_busy = 1;
439 					continue;
440 				}
441 			} else if (no_null) {
442 				continue;
443 			}
444 		}
445 		break;
446 	}
447 
448 	if (no_null == 0) {
449 		if (ep >= (USB_EP_MAX / 2)) {
450 			/* we don't create any endpoints in this range */
451 			DPRINTFN(5, "ep out of range\n");
452 			return (is_busy ? EBUSY : EINVAL);
453 		}
454 	}
455 
456 	if ((ep != 0) && is_busy) {
457 		/*
458 		 * Only the default control endpoint is allowed to be
459 		 * opened multiple times!
460 		 */
461 		DPRINTFN(5, "busy\n");
462 		return (EBUSY);
463 	}
464 
465 	/* Check TX FIFO */
466 	if (is_tx &&
467 	    (udev->fifo[n + USB_FIFO_TX] == NULL)) {
468 		pipe = usb2_dev_get_pipe(udev, ep, USB_FIFO_TX);
469 		DPRINTFN(5, "dev_get_pipe(%d, 0x%x)\n", ep, USB_FIFO_TX);
470 		if (pipe == NULL) {
471 			DPRINTFN(5, "dev_get_pipe returned NULL\n");
472 			return (EINVAL);
473 		}
474 		f = usb2_fifo_alloc();
475 		if (f == NULL) {
476 			DPRINTFN(5, "could not alloc tx fifo\n");
477 			return (ENOMEM);
478 		}
479 		/* update some fields */
480 		f->fifo_index = n + USB_FIFO_TX;
481 		f->dev_ep_index = ep;
482 		f->priv_mtx = udev->default_mtx;
483 		f->priv_sc0 = pipe;
484 		f->methods = &usb2_ugen_methods;
485 		f->iface_index = pipe->iface_index;
486 		f->udev = udev;
487 		mtx_lock(&usb2_ref_lock);
488 		udev->fifo[n + USB_FIFO_TX] = f;
489 		mtx_unlock(&usb2_ref_lock);
490 	}
491 	/* Check RX FIFO */
492 	if (is_rx &&
493 	    (udev->fifo[n + USB_FIFO_RX] == NULL)) {
494 
495 		pipe = usb2_dev_get_pipe(udev, ep, USB_FIFO_RX);
496 		DPRINTFN(5, "dev_get_pipe(%d, 0x%x)\n", ep, USB_FIFO_RX);
497 		if (pipe == NULL) {
498 			DPRINTFN(5, "dev_get_pipe returned NULL\n");
499 			return (EINVAL);
500 		}
501 		f = usb2_fifo_alloc();
502 		if (f == NULL) {
503 			DPRINTFN(5, "could not alloc rx fifo\n");
504 			return (ENOMEM);
505 		}
506 		/* update some fields */
507 		f->fifo_index = n + USB_FIFO_RX;
508 		f->dev_ep_index = ep;
509 		f->priv_mtx = udev->default_mtx;
510 		f->priv_sc0 = pipe;
511 		f->methods = &usb2_ugen_methods;
512 		f->iface_index = pipe->iface_index;
513 		f->udev = udev;
514 		mtx_lock(&usb2_ref_lock);
515 		udev->fifo[n + USB_FIFO_RX] = f;
516 		mtx_unlock(&usb2_ref_lock);
517 	}
518 	if (is_tx) {
519 		cpd->txfifo = udev->fifo[n + USB_FIFO_TX];
520 	}
521 	if (is_rx) {
522 		cpd->rxfifo = udev->fifo[n + USB_FIFO_RX];
523 	}
524 	/* fill out fifo index */
525 	DPRINTFN(5, "fifo index = %d\n", n);
526 	cpd->fifo_index = n;
527 
528 	/* complete */
529 
530 	return (0);
531 }
532 
533 void
534 usb2_fifo_free(struct usb2_fifo *f)
535 {
536 	uint8_t n;
537 
538 	if (f == NULL) {
539 		/* be NULL safe */
540 		return;
541 	}
542 	/* destroy symlink devices, if any */
543 	for (n = 0; n != 2; n++) {
544 		if (f->symlink[n]) {
545 			usb2_free_symlink(f->symlink[n]);
546 			f->symlink[n] = NULL;
547 		}
548 	}
549 	mtx_lock(&usb2_ref_lock);
550 
551 	/* delink ourselves to stop calls from userland */
552 	if ((f->fifo_index < USB_FIFO_MAX) &&
553 	    (f->udev != NULL) &&
554 	    (f->udev->fifo[f->fifo_index] == f)) {
555 		f->udev->fifo[f->fifo_index] = NULL;
556 	} else {
557 		DPRINTFN(0, "USB FIFO %p has not been linked!\n", f);
558 	}
559 
560 	/* decrease refcount */
561 	f->refcount--;
562 	/* prevent any write flush */
563 	f->flag_iserror = 1;
564 	/* need to wait until all callers have exited */
565 	while (f->refcount != 0) {
566 		mtx_unlock(&usb2_ref_lock);	/* avoid LOR */
567 		mtx_lock(f->priv_mtx);
568 		/* get I/O thread out of any sleep state */
569 		if (f->flag_sleeping) {
570 			f->flag_sleeping = 0;
571 			usb2_cv_broadcast(&f->cv_io);
572 		}
573 		mtx_unlock(f->priv_mtx);
574 		mtx_lock(&usb2_ref_lock);
575 
576 		/* wait for sync */
577 		usb2_cv_wait(&f->cv_drain, &usb2_ref_lock);
578 	}
579 	mtx_unlock(&usb2_ref_lock);
580 
581 	/* take care of closing the device here, if any */
582 	usb2_fifo_close(f, 0);
583 
584 	usb2_cv_destroy(&f->cv_io);
585 	usb2_cv_destroy(&f->cv_drain);
586 
587 	free(f, M_USBDEV);
588 }
589 
590 static struct usb2_pipe *
591 usb2_dev_get_pipe(struct usb2_device *udev, uint8_t ep_index, uint8_t dir)
592 {
593 	struct usb2_pipe *pipe;
594 	uint8_t ep_dir;
595 
596 	if (ep_index == 0) {
597 		pipe = &udev->default_pipe;
598 	} else {
599 		if (dir == USB_FIFO_RX) {
600 			if (udev->flags.usb2_mode == USB_MODE_HOST) {
601 				ep_dir = UE_DIR_IN;
602 			} else {
603 				ep_dir = UE_DIR_OUT;
604 			}
605 		} else {
606 			if (udev->flags.usb2_mode == USB_MODE_HOST) {
607 				ep_dir = UE_DIR_OUT;
608 			} else {
609 				ep_dir = UE_DIR_IN;
610 			}
611 		}
612 		pipe = usb2_get_pipe_by_addr(udev, ep_index | ep_dir);
613 	}
614 
615 	if (pipe == NULL) {
616 		/* if the pipe does not exist then return */
617 		return (NULL);
618 	}
619 	if (pipe->edesc == NULL) {
620 		/* invalid pipe */
621 		return (NULL);
622 	}
623 	return (pipe);			/* success */
624 }
625 
626 /*------------------------------------------------------------------------*
627  *	usb2_fifo_open
628  *
629  * Returns:
630  * 0: Success
631  * Else: Failure
632  *------------------------------------------------------------------------*/
633 static int
634 usb2_fifo_open(struct usb2_cdev_privdata *cpd,
635     struct usb2_fifo *f, int fflags)
636 {
637 	int err;
638 
639 	if (f == NULL) {
640 		/* no FIFO there */
641 		DPRINTFN(2, "no FIFO\n");
642 		return (ENXIO);
643 	}
644 	/* remove FWRITE and FREAD flags */
645 	fflags &= ~(FWRITE | FREAD);
646 
647 	/* set correct file flags */
648 	if ((f->fifo_index & 1) == USB_FIFO_TX) {
649 		fflags |= FWRITE;
650 	} else {
651 		fflags |= FREAD;
652 	}
653 
654 	/* check if we are already opened */
655 	/* we don't need any locks when checking this variable */
656 	if (f->curr_cpd != NULL) {
657 		err = EBUSY;
658 		goto done;
659 	}
660 
661 	/* reset short flag before open */
662 	f->flag_short = 0;
663 
664 	/* call open method */
665 	err = (f->methods->f_open) (f, fflags);
666 	if (err) {
667 		goto done;
668 	}
669 	mtx_lock(f->priv_mtx);
670 
671 	/* reset sleep flag */
672 	f->flag_sleeping = 0;
673 
674 	/* reset error flag */
675 	f->flag_iserror = 0;
676 
677 	/* reset complete flag */
678 	f->flag_iscomplete = 0;
679 
680 	/* reset select flag */
681 	f->flag_isselect = 0;
682 
683 	/* reset flushing flag */
684 	f->flag_flushing = 0;
685 
686 	/* reset ASYNC proc flag */
687 	f->async_p = NULL;
688 
689 	mtx_lock(&usb2_ref_lock);
690 	/* flag the fifo as opened to prevent others */
691 	f->curr_cpd = cpd;
692 	mtx_unlock(&usb2_ref_lock);
693 
694 	/* reset queue */
695 	usb2_fifo_reset(f);
696 
697 	mtx_unlock(f->priv_mtx);
698 done:
699 	return (err);
700 }
701 
702 /*------------------------------------------------------------------------*
703  *	usb2_fifo_reset
704  *------------------------------------------------------------------------*/
705 void
706 usb2_fifo_reset(struct usb2_fifo *f)
707 {
708 	struct usb2_mbuf *m;
709 
710 	if (f == NULL) {
711 		return;
712 	}
713 	while (1) {
714 		USB_IF_DEQUEUE(&f->used_q, m);
715 		if (m) {
716 			USB_IF_ENQUEUE(&f->free_q, m);
717 		} else {
718 			break;
719 		}
720 	}
721 }
722 
723 /*------------------------------------------------------------------------*
724  *	usb2_fifo_close
725  *------------------------------------------------------------------------*/
726 static void
727 usb2_fifo_close(struct usb2_fifo *f, int fflags)
728 {
729 	int err;
730 
731 	/* check if we are not opened */
732 	if (f->curr_cpd == NULL) {
733 		/* nothing to do - already closed */
734 		return;
735 	}
736 	mtx_lock(f->priv_mtx);
737 
738 	/* clear current cdev private data pointer */
739 	f->curr_cpd = NULL;
740 
741 	/* check if we are selected */
742 	if (f->flag_isselect) {
743 		selwakeup(&f->selinfo);
744 		f->flag_isselect = 0;
745 	}
746 	/* check if a thread wants SIGIO */
747 	if (f->async_p != NULL) {
748 		PROC_LOCK(f->async_p);
749 		psignal(f->async_p, SIGIO);
750 		PROC_UNLOCK(f->async_p);
751 		f->async_p = NULL;
752 	}
753 	/* remove FWRITE and FREAD flags */
754 	fflags &= ~(FWRITE | FREAD);
755 
756 	/* flush written data, if any */
757 	if ((f->fifo_index & 1) == USB_FIFO_TX) {
758 
759 		if (!f->flag_iserror) {
760 
761 			/* set flushing flag */
762 			f->flag_flushing = 1;
763 
764 			/* start write transfer, if not already started */
765 			(f->methods->f_start_write) (f);
766 
767 			/* check if flushed already */
768 			while (f->flag_flushing &&
769 			    (!f->flag_iserror)) {
770 				/* wait until all data has been written */
771 				f->flag_sleeping = 1;
772 				err = usb2_cv_wait_sig(&f->cv_io, f->priv_mtx);
773 				if (err) {
774 					DPRINTF("signal received\n");
775 					break;
776 				}
777 			}
778 		}
779 		fflags |= FWRITE;
780 
781 		/* stop write transfer, if not already stopped */
782 		(f->methods->f_stop_write) (f);
783 	} else {
784 		fflags |= FREAD;
785 
786 		/* stop write transfer, if not already stopped */
787 		(f->methods->f_stop_read) (f);
788 	}
789 
790 	/* check if we are sleeping */
791 	if (f->flag_sleeping) {
792 		DPRINTFN(2, "Sleeping at close!\n");
793 	}
794 	mtx_unlock(f->priv_mtx);
795 
796 	/* call close method */
797 	(f->methods->f_close) (f, fflags);
798 
799 	DPRINTF("closed\n");
800 }
801 
802 /*------------------------------------------------------------------------*
803  *	usb2_open - cdev callback
804  *------------------------------------------------------------------------*/
805 static int
806 usb2_open(struct cdev *dev, int fflags, int devtype, struct thread *td)
807 {
808 	struct usb2_fs_privdata* pd = (struct usb2_fs_privdata*)dev->si_drv1;
809 	struct usb2_cdev_privdata *cpd;
810 	int err, ep;
811 
812 	DPRINTFN(2, "%s fflags=0x%08x\n", dev->si_name, fflags);
813 
814 	KASSERT(fflags & (FREAD|FWRITE), ("invalid open flags"));
815 	if (((fflags & FREAD) && !(pd->mode & FREAD)) ||
816 	    ((fflags & FWRITE) && !(pd->mode & FWRITE))) {
817 		DPRINTFN(2, "access mode not supported\n");
818 		return (EPERM);
819 	}
820 
821 	cpd = malloc(sizeof(*cpd), M_USBDEV, M_WAITOK | M_ZERO);
822 	ep = cpd->ep_addr = pd->ep_addr;
823 
824 	usb2_loc_fill(pd, cpd);
825 	err = usb2_ref_device(cpd, 1);
826 	if (err) {
827 		DPRINTFN(2, "cannot ref device\n");
828 		free(cpd, M_USBDEV);
829 		return (ENXIO);
830 	}
831 	cpd->fflags = fflags;	/* access mode for open lifetime */
832 
833 	/* create FIFOs, if any */
834 	err = usb2_fifo_create(cpd);
835 	/* check for error */
836 	if (err) {
837 		DPRINTFN(2, "cannot create fifo\n");
838 		usb2_unref_device(cpd);
839 		free(cpd, M_USBDEV);
840 		return (err);
841 	}
842 	if (fflags & FREAD) {
843 		err = usb2_fifo_open(cpd, cpd->rxfifo, fflags);
844 		if (err) {
845 			DPRINTFN(2, "read open failed\n");
846 			usb2_unref_device(cpd);
847 			free(cpd, M_USBDEV);
848 			return (err);
849 		}
850 	}
851 	if (fflags & FWRITE) {
852 		err = usb2_fifo_open(cpd, cpd->txfifo, fflags);
853 		if (err) {
854 			DPRINTFN(2, "write open failed\n");
855 			if (fflags & FREAD) {
856 				usb2_fifo_close(cpd->rxfifo, fflags);
857 			}
858 			usb2_unref_device(cpd);
859 			free(cpd, M_USBDEV);
860 			return (err);
861 		}
862 	}
863 	usb2_unref_device(cpd);
864 	devfs_set_cdevpriv(cpd, usb2_close);
865 
866 	return (0);
867 }
868 
869 /*------------------------------------------------------------------------*
870  *	usb2_close - cdev callback
871  *------------------------------------------------------------------------*/
872 static void
873 usb2_close(void *arg)
874 {
875 	struct usb2_cdev_privdata *cpd = arg;
876 	int err;
877 
878 	DPRINTFN(2, "cpd=%p\n", cpd);
879 
880 	err = usb2_ref_device(cpd, 1);
881 	if (err) {
882 		free(cpd, M_USBDEV);
883 		return;
884 	}
885 	if (cpd->fflags & FREAD) {
886 		usb2_fifo_close(cpd->rxfifo, cpd->fflags);
887 	}
888 	if (cpd->fflags & FWRITE) {
889 		usb2_fifo_close(cpd->txfifo, cpd->fflags);
890 	}
891 
892 	usb2_unref_device(cpd);
893 	free(cpd, M_USBDEV);
894 	return;
895 }
896 
897 static void
898 usb2_dev_init(void *arg)
899 {
900 	mtx_init(&usb2_ref_lock, "USB ref mutex", NULL, MTX_DEF);
901 	sx_init(&usb2_sym_lock, "USB sym mutex");
902 	TAILQ_INIT(&usb2_sym_head);
903 
904 	/* check the UGEN methods */
905 	usb2_fifo_check_methods(&usb2_ugen_methods);
906 }
907 
908 SYSINIT(usb2_dev_init, SI_SUB_KLD, SI_ORDER_FIRST, usb2_dev_init, NULL);
909 
910 static void
911 usb2_dev_init_post(void *arg)
912 {
913 	/*
914 	 * Create /dev/usb - this is needed for usbconfig(8), which
915 	 * needs a well-known device name to access.
916 	 */
917 	usb2_dev = make_dev(&usb2_static_devsw, 0, UID_ROOT, GID_OPERATOR,
918 	    0644, USB_DEVICE_NAME);
919 	if (usb2_dev == NULL) {
920 		DPRINTFN(0, "Could not create usb bus device!\n");
921 	}
922 }
923 
924 SYSINIT(usb2_dev_init_post, SI_SUB_KICK_SCHEDULER, SI_ORDER_FIRST, usb2_dev_init_post, NULL);
925 
926 static void
927 usb2_dev_uninit(void *arg)
928 {
929 	if (usb2_dev != NULL) {
930 		destroy_dev(usb2_dev);
931 		usb2_dev = NULL;
932 
933 	}
934 	mtx_destroy(&usb2_ref_lock);
935 	sx_destroy(&usb2_sym_lock);
936 }
937 
938 SYSUNINIT(usb2_dev_uninit, SI_SUB_KICK_SCHEDULER, SI_ORDER_ANY, usb2_dev_uninit, NULL);
939 
940 static int
941 usb2_ioctl_f_sub(struct usb2_fifo *f, u_long cmd, void *addr,
942     struct thread *td)
943 {
944 	int error = 0;
945 
946 	switch (cmd) {
947 	case FIODTYPE:
948 		*(int *)addr = 0;	/* character device */
949 		break;
950 
951 	case FIONBIO:
952 		/* handled by upper FS layer */
953 		break;
954 
955 	case FIOASYNC:
956 		if (*(int *)addr) {
957 			if (f->async_p != NULL) {
958 				error = EBUSY;
959 				break;
960 			}
961 			f->async_p = USB_TD_GET_PROC(td);
962 		} else {
963 			f->async_p = NULL;
964 		}
965 		break;
966 
967 		/* XXX this is not the most general solution */
968 	case TIOCSPGRP:
969 		if (f->async_p == NULL) {
970 			error = EINVAL;
971 			break;
972 		}
973 		if (*(int *)addr != USB_PROC_GET_GID(f->async_p)) {
974 			error = EPERM;
975 			break;
976 		}
977 		break;
978 	default:
979 		return (ENOIOCTL);
980 	}
981 	DPRINTFN(3, "cmd 0x%lx = %d\n", cmd, error);
982 	return (error);
983 }
984 
985 /*------------------------------------------------------------------------*
986  *	usb2_ioctl - cdev callback
987  *------------------------------------------------------------------------*/
988 static int
989 usb2_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, int fflag, struct thread* td)
990 {
991 	struct usb2_cdev_privdata* cpd;
992 	struct usb2_fifo *f;
993 	int fflags;
994 	int err;
995 
996 	DPRINTFN(2, "cmd=0x%lx\n", cmd);
997 
998 	err = devfs_get_cdevpriv((void **)&cpd);
999 	if (err != 0)
1000 		return (err);
1001 
1002 	/*
1003 	 * Performance optimistaion: We try to check for IOCTL's that
1004 	 * don't need the USB reference first. Then we grab the USB
1005 	 * reference if we need it!
1006 	 */
1007 	err = usb2_ref_device(cpd, 0 /* no uref */ );
1008 	if (err) {
1009 		return (ENXIO);
1010 	}
1011 	fflags = cpd->fflags;
1012 
1013 	f = NULL;			/* set default value */
1014 	err = ENOIOCTL;			/* set default value */
1015 
1016 	if (fflags & FWRITE) {
1017 		f = cpd->txfifo;
1018 		err = usb2_ioctl_f_sub(f, cmd, addr, td);
1019 	}
1020 	if (fflags & FREAD) {
1021 		f = cpd->rxfifo;
1022 		err = usb2_ioctl_f_sub(f, cmd, addr, td);
1023 	}
1024 	KASSERT(f != NULL, ("fifo not found"));
1025 	if (err == ENOIOCTL) {
1026 		err = (f->methods->f_ioctl) (f, cmd, addr, fflags);
1027 		DPRINTFN(2, "f_ioctl cmd 0x%lx = %d\n", cmd, err);
1028 		if (err == ENOIOCTL) {
1029 			if (usb2_usb_ref_device(cpd)) {
1030 				err = ENXIO;
1031 				goto done;
1032 			}
1033 			err = (f->methods->f_ioctl_post) (f, cmd, addr, fflags);
1034 			DPRINTFN(2, "f_ioctl_post cmd 0x%lx = %d\n", cmd, err);
1035 		}
1036 	}
1037 	if (err == ENOIOCTL) {
1038 		err = ENOTTY;
1039 	}
1040 done:
1041 	usb2_unref_device(cpd);
1042 	return (err);
1043 }
1044 
1045 /* ARGSUSED */
1046 static int
1047 usb2_poll(struct cdev* dev, int events, struct thread* td)
1048 {
1049 	struct usb2_cdev_privdata* cpd;
1050 	struct usb2_fifo *f;
1051 	struct usb2_mbuf *m;
1052 	int fflags, revents;
1053 
1054 	if (devfs_get_cdevpriv((void **)&cpd) != 0 ||
1055 	    usb2_ref_device(cpd, 0) != 0)
1056 		return (events &
1057 		    (POLLHUP|POLLIN|POLLRDNORM|POLLOUT|POLLWRNORM));
1058 
1059 	fflags = cpd->fflags;
1060 
1061 	/* Figure out who needs service */
1062 	revents = 0;
1063 	if ((events & (POLLOUT | POLLWRNORM)) &&
1064 	    (fflags & FWRITE)) {
1065 
1066 		f = cpd->txfifo;
1067 
1068 		mtx_lock(f->priv_mtx);
1069 
1070 		if (!cpd->is_usbfs) {
1071 			if (f->flag_iserror) {
1072 				/* we got an error */
1073 				m = (void *)1;
1074 			} else {
1075 				if (f->queue_data == NULL) {
1076 					/*
1077 					 * start write transfer, if not
1078 					 * already started
1079 					 */
1080 					(f->methods->f_start_write) (f);
1081 				}
1082 				/* check if any packets are available */
1083 				USB_IF_POLL(&f->free_q, m);
1084 			}
1085 		} else {
1086 			if (f->flag_iscomplete) {
1087 				m = (void *)1;
1088 			} else {
1089 				m = NULL;
1090 			}
1091 		}
1092 
1093 		if (m) {
1094 			revents |= events & (POLLOUT | POLLWRNORM);
1095 		} else {
1096 			f->flag_isselect = 1;
1097 			selrecord(td, &f->selinfo);
1098 		}
1099 
1100 		mtx_unlock(f->priv_mtx);
1101 	}
1102 	if ((events & (POLLIN | POLLRDNORM)) &&
1103 	    (fflags & FREAD)) {
1104 
1105 		f = cpd->rxfifo;
1106 
1107 		mtx_lock(f->priv_mtx);
1108 
1109 		if (!cpd->is_usbfs) {
1110 			if (f->flag_iserror) {
1111 				/* we have and error */
1112 				m = (void *)1;
1113 			} else {
1114 				if (f->queue_data == NULL) {
1115 					/*
1116 					 * start read transfer, if not
1117 					 * already started
1118 					 */
1119 					(f->methods->f_start_read) (f);
1120 				}
1121 				/* check if any packets are available */
1122 				USB_IF_POLL(&f->used_q, m);
1123 			}
1124 		} else {
1125 			if (f->flag_iscomplete) {
1126 				m = (void *)1;
1127 			} else {
1128 				m = NULL;
1129 			}
1130 		}
1131 
1132 		if (m) {
1133 			revents |= events & (POLLIN | POLLRDNORM);
1134 		} else {
1135 			f->flag_isselect = 1;
1136 			selrecord(td, &f->selinfo);
1137 
1138 			if (!cpd->is_usbfs) {
1139 				/* start reading data */
1140 				(f->methods->f_start_read) (f);
1141 			}
1142 		}
1143 
1144 		mtx_unlock(f->priv_mtx);
1145 	}
1146 	usb2_unref_device(cpd);
1147 	return (revents);
1148 }
1149 
1150 static int
1151 usb2_read(struct cdev *dev, struct uio *uio, int ioflag)
1152 {
1153 	struct usb2_cdev_privdata* cpd;
1154 	struct usb2_fifo *f;
1155 	struct usb2_mbuf *m;
1156 	int fflags;
1157 	int resid;
1158 	int io_len;
1159 	int err;
1160 	uint8_t tr_data = 0;
1161 
1162 	err = devfs_get_cdevpriv((void **)&cpd);
1163 	if (err != 0)
1164 		return (err);
1165 
1166 	err = usb2_ref_device(cpd, 0 /* no uref */ );
1167 	if (err) {
1168 		return (ENXIO);
1169 	}
1170 	fflags = cpd->fflags;
1171 
1172 	f = cpd->rxfifo;
1173 	if (f == NULL) {
1174 		/* should not happen */
1175 		return (EPERM);
1176 	}
1177 
1178 	resid = uio->uio_resid;
1179 
1180 	mtx_lock(f->priv_mtx);
1181 
1182 	/* check for permanent read error */
1183 	if (f->flag_iserror) {
1184 		err = EIO;
1185 		goto done;
1186 	}
1187 	/* check if USB-FS interface is active */
1188 	if (cpd->is_usbfs) {
1189 		/*
1190 		 * The queue is used for events that should be
1191 		 * retrieved using the "USB_FS_COMPLETE" ioctl.
1192 		 */
1193 		err = EINVAL;
1194 		goto done;
1195 	}
1196 	while (uio->uio_resid > 0) {
1197 
1198 		USB_IF_DEQUEUE(&f->used_q, m);
1199 
1200 		if (m == NULL) {
1201 
1202 			/* start read transfer, if not already started */
1203 
1204 			(f->methods->f_start_read) (f);
1205 
1206 			if (fflags & IO_NDELAY) {
1207 				if (tr_data) {
1208 					/* return length before error */
1209 					break;
1210 				}
1211 				err = EWOULDBLOCK;
1212 				break;
1213 			}
1214 			DPRINTF("sleeping\n");
1215 
1216 			err = usb2_fifo_wait(f);
1217 			if (err) {
1218 				break;
1219 			}
1220 			continue;
1221 		}
1222 		if (f->methods->f_filter_read) {
1223 			/*
1224 			 * Sometimes it is convenient to process data at the
1225 			 * expense of a userland process instead of a kernel
1226 			 * process.
1227 			 */
1228 			(f->methods->f_filter_read) (f, m);
1229 		}
1230 		tr_data = 1;
1231 
1232 		io_len = MIN(m->cur_data_len, uio->uio_resid);
1233 
1234 		DPRINTFN(2, "transfer %d bytes from %p\n",
1235 		    io_len, m->cur_data_ptr);
1236 
1237 		err = usb2_fifo_uiomove(f,
1238 		    m->cur_data_ptr, io_len, uio);
1239 
1240 		m->cur_data_len -= io_len;
1241 		m->cur_data_ptr += io_len;
1242 
1243 		if (m->cur_data_len == 0) {
1244 
1245 			uint8_t last_packet;
1246 
1247 			last_packet = m->last_packet;
1248 
1249 			USB_IF_ENQUEUE(&f->free_q, m);
1250 
1251 			if (last_packet) {
1252 				/* keep framing */
1253 				break;
1254 			}
1255 		} else {
1256 			USB_IF_PREPEND(&f->used_q, m);
1257 		}
1258 
1259 		if (err) {
1260 			break;
1261 		}
1262 	}
1263 done:
1264 	mtx_unlock(f->priv_mtx);
1265 
1266 	usb2_unref_device(cpd);
1267 
1268 	return (err);
1269 }
1270 
1271 static int
1272 usb2_write(struct cdev *dev, struct uio *uio, int ioflag)
1273 {
1274 	struct usb2_cdev_privdata* cpd;
1275 	struct usb2_fifo *f;
1276 	struct usb2_mbuf *m;
1277 	int fflags;
1278 	int resid;
1279 	int io_len;
1280 	int err;
1281 	uint8_t tr_data = 0;
1282 
1283 	DPRINTFN(2, "\n");
1284 
1285 	err = devfs_get_cdevpriv((void **)&cpd);
1286 	if (err != 0)
1287 		return (err);
1288 
1289 	err = usb2_ref_device(cpd, 0 /* no uref */ );
1290 	if (err) {
1291 		return (ENXIO);
1292 	}
1293 	fflags = cpd->fflags;
1294 
1295 	f = cpd->txfifo;
1296 	if (f == NULL) {
1297 		/* should not happen */
1298 		usb2_unref_device(cpd);
1299 		return (EPERM);
1300 	}
1301 	resid = uio->uio_resid;
1302 
1303 	mtx_lock(f->priv_mtx);
1304 
1305 	/* check for permanent write error */
1306 	if (f->flag_iserror) {
1307 		err = EIO;
1308 		goto done;
1309 	}
1310 	/* check if USB-FS interface is active */
1311 	if (cpd->is_usbfs) {
1312 		/*
1313 		 * The queue is used for events that should be
1314 		 * retrieved using the "USB_FS_COMPLETE" ioctl.
1315 		 */
1316 		err = EINVAL;
1317 		goto done;
1318 	}
1319 	if (f->queue_data == NULL) {
1320 		/* start write transfer, if not already started */
1321 		(f->methods->f_start_write) (f);
1322 	}
1323 	/* we allow writing zero length data */
1324 	do {
1325 		USB_IF_DEQUEUE(&f->free_q, m);
1326 
1327 		if (m == NULL) {
1328 
1329 			if (fflags & IO_NDELAY) {
1330 				if (tr_data) {
1331 					/* return length before error */
1332 					break;
1333 				}
1334 				err = EWOULDBLOCK;
1335 				break;
1336 			}
1337 			DPRINTF("sleeping\n");
1338 
1339 			err = usb2_fifo_wait(f);
1340 			if (err) {
1341 				break;
1342 			}
1343 			continue;
1344 		}
1345 		tr_data = 1;
1346 
1347 		USB_MBUF_RESET(m);
1348 
1349 		io_len = MIN(m->cur_data_len, uio->uio_resid);
1350 
1351 		m->cur_data_len = io_len;
1352 
1353 		DPRINTFN(2, "transfer %d bytes to %p\n",
1354 		    io_len, m->cur_data_ptr);
1355 
1356 		err = usb2_fifo_uiomove(f,
1357 		    m->cur_data_ptr, io_len, uio);
1358 
1359 		if (err) {
1360 			USB_IF_ENQUEUE(&f->free_q, m);
1361 			break;
1362 		}
1363 		if (f->methods->f_filter_write) {
1364 			/*
1365 			 * Sometimes it is convenient to process data at the
1366 			 * expense of a userland process instead of a kernel
1367 			 * process.
1368 			 */
1369 			(f->methods->f_filter_write) (f, m);
1370 		}
1371 		USB_IF_ENQUEUE(&f->used_q, m);
1372 
1373 		(f->methods->f_start_write) (f);
1374 
1375 	} while (uio->uio_resid > 0);
1376 done:
1377 	mtx_unlock(f->priv_mtx);
1378 
1379 	usb2_unref_device(cpd);
1380 
1381 	return (err);
1382 }
1383 
1384 int
1385 usb2_static_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
1386     struct thread *td)
1387 {
1388 	union {
1389 		struct usb2_read_dir *urd;
1390 		void* data;
1391 	} u;
1392 	int err = ENOTTY;
1393 
1394 	u.data = data;
1395 	switch (cmd) {
1396 		case USB_READ_DIR:
1397 			err = usb2_read_symlink(u.urd->urd_data,
1398 			    u.urd->urd_startentry, u.urd->urd_maxlen);
1399 			break;
1400 		case USB_DEV_QUIRK_GET:
1401 		case USB_QUIRK_NAME_GET:
1402 		case USB_DEV_QUIRK_ADD:
1403 		case USB_DEV_QUIRK_REMOVE:
1404 			err = usb2_quirk_ioctl_p(cmd, data, fflag, td);
1405 			break;
1406 		case USB_GET_TEMPLATE:
1407 			*(int *)data = usb2_template;
1408 			break;
1409 		case USB_SET_TEMPLATE:
1410 			err = priv_check(curthread, PRIV_DRIVER);
1411 			if (err)
1412 				break;
1413 			usb2_template = *(int *)data;
1414 			break;
1415 	}
1416 	return (err);
1417 }
1418 
1419 static int
1420 usb2_fifo_uiomove(struct usb2_fifo *f, void *cp,
1421     int n, struct uio *uio)
1422 {
1423 	int error;
1424 
1425 	mtx_unlock(f->priv_mtx);
1426 
1427 	/*
1428 	 * "uiomove()" can sleep so one needs to make a wrapper,
1429 	 * exiting the mutex and checking things:
1430 	 */
1431 	error = uiomove(cp, n, uio);
1432 
1433 	mtx_lock(f->priv_mtx);
1434 
1435 	return (error);
1436 }
1437 
1438 int
1439 usb2_fifo_wait(struct usb2_fifo *f)
1440 {
1441 	int err;
1442 
1443 	mtx_assert(f->priv_mtx, MA_OWNED);
1444 
1445 	if (f->flag_iserror) {
1446 		/* we are gone */
1447 		return (EIO);
1448 	}
1449 	f->flag_sleeping = 1;
1450 
1451 	err = usb2_cv_wait_sig(&f->cv_io, f->priv_mtx);
1452 
1453 	if (f->flag_iserror) {
1454 		/* we are gone */
1455 		err = EIO;
1456 	}
1457 	return (err);
1458 }
1459 
1460 void
1461 usb2_fifo_signal(struct usb2_fifo *f)
1462 {
1463 	if (f->flag_sleeping) {
1464 		f->flag_sleeping = 0;
1465 		usb2_cv_broadcast(&f->cv_io);
1466 	}
1467 }
1468 
1469 void
1470 usb2_fifo_wakeup(struct usb2_fifo *f)
1471 {
1472 	usb2_fifo_signal(f);
1473 
1474 	if (f->flag_isselect) {
1475 		selwakeup(&f->selinfo);
1476 		f->flag_isselect = 0;
1477 	}
1478 	if (f->async_p != NULL) {
1479 		PROC_LOCK(f->async_p);
1480 		psignal(f->async_p, SIGIO);
1481 		PROC_UNLOCK(f->async_p);
1482 	}
1483 }
1484 
1485 static int
1486 usb2_fifo_dummy_open(struct usb2_fifo *fifo, int fflags)
1487 {
1488 	return (0);
1489 }
1490 
1491 static void
1492 usb2_fifo_dummy_close(struct usb2_fifo *fifo, int fflags)
1493 {
1494 	return;
1495 }
1496 
1497 static int
1498 usb2_fifo_dummy_ioctl(struct usb2_fifo *fifo, u_long cmd, void *addr, int fflags)
1499 {
1500 	return (ENOIOCTL);
1501 }
1502 
1503 static void
1504 usb2_fifo_dummy_cmd(struct usb2_fifo *fifo)
1505 {
1506 	fifo->flag_flushing = 0;	/* not flushing */
1507 }
1508 
1509 static void
1510 usb2_fifo_check_methods(struct usb2_fifo_methods *pm)
1511 {
1512 	/* check that all callback functions are OK */
1513 
1514 	if (pm->f_open == NULL)
1515 		pm->f_open = &usb2_fifo_dummy_open;
1516 
1517 	if (pm->f_close == NULL)
1518 		pm->f_close = &usb2_fifo_dummy_close;
1519 
1520 	if (pm->f_ioctl == NULL)
1521 		pm->f_ioctl = &usb2_fifo_dummy_ioctl;
1522 
1523 	if (pm->f_ioctl_post == NULL)
1524 		pm->f_ioctl_post = &usb2_fifo_dummy_ioctl;
1525 
1526 	if (pm->f_start_read == NULL)
1527 		pm->f_start_read = &usb2_fifo_dummy_cmd;
1528 
1529 	if (pm->f_stop_read == NULL)
1530 		pm->f_stop_read = &usb2_fifo_dummy_cmd;
1531 
1532 	if (pm->f_start_write == NULL)
1533 		pm->f_start_write = &usb2_fifo_dummy_cmd;
1534 
1535 	if (pm->f_stop_write == NULL)
1536 		pm->f_stop_write = &usb2_fifo_dummy_cmd;
1537 }
1538 
1539 /*------------------------------------------------------------------------*
1540  *	usb2_fifo_attach
1541  *
1542  * The following function will create a duplex FIFO.
1543  *
1544  * Return values:
1545  * 0: Success.
1546  * Else: Failure.
1547  *------------------------------------------------------------------------*/
1548 int
1549 usb2_fifo_attach(struct usb2_device *udev, void *priv_sc,
1550     struct mtx *priv_mtx, struct usb2_fifo_methods *pm,
1551     struct usb2_fifo_sc *f_sc, uint16_t unit, uint16_t subunit,
1552     uint8_t iface_index, uid_t uid, gid_t gid, int mode)
1553 {
1554 	struct usb2_fifo *f_tx;
1555 	struct usb2_fifo *f_rx;
1556 	char devname[32];
1557 	uint8_t n;
1558 	struct usb2_fs_privdata* pd;
1559 
1560 	f_sc->fp[USB_FIFO_TX] = NULL;
1561 	f_sc->fp[USB_FIFO_RX] = NULL;
1562 
1563 	if (pm == NULL)
1564 		return (EINVAL);
1565 
1566 	/* check the methods */
1567 	usb2_fifo_check_methods(pm);
1568 
1569 	if (priv_mtx == NULL)
1570 		priv_mtx = &Giant;
1571 
1572 	/* search for a free FIFO slot */
1573 	for (n = 0;; n += 2) {
1574 
1575 		if (n == USB_FIFO_MAX) {
1576 			/* end of FIFOs reached */
1577 			return (ENOMEM);
1578 		}
1579 		/* Check for TX FIFO */
1580 		if (udev->fifo[n + USB_FIFO_TX] != NULL) {
1581 			continue;
1582 		}
1583 		/* Check for RX FIFO */
1584 		if (udev->fifo[n + USB_FIFO_RX] != NULL) {
1585 			continue;
1586 		}
1587 		break;
1588 	}
1589 
1590 	f_tx = usb2_fifo_alloc();
1591 	f_rx = usb2_fifo_alloc();
1592 
1593 	if ((f_tx == NULL) || (f_rx == NULL)) {
1594 		usb2_fifo_free(f_tx);
1595 		usb2_fifo_free(f_rx);
1596 		return (ENOMEM);
1597 	}
1598 	/* initialise FIFO structures */
1599 
1600 	f_tx->fifo_index = n + USB_FIFO_TX;
1601 	f_tx->dev_ep_index = -1;
1602 	f_tx->priv_mtx = priv_mtx;
1603 	f_tx->priv_sc0 = priv_sc;
1604 	f_tx->methods = pm;
1605 	f_tx->iface_index = iface_index;
1606 	f_tx->udev = udev;
1607 
1608 	f_rx->fifo_index = n + USB_FIFO_RX;
1609 	f_rx->dev_ep_index = -1;
1610 	f_rx->priv_mtx = priv_mtx;
1611 	f_rx->priv_sc0 = priv_sc;
1612 	f_rx->methods = pm;
1613 	f_rx->iface_index = iface_index;
1614 	f_rx->udev = udev;
1615 
1616 	f_sc->fp[USB_FIFO_TX] = f_tx;
1617 	f_sc->fp[USB_FIFO_RX] = f_rx;
1618 
1619 	mtx_lock(&usb2_ref_lock);
1620 	udev->fifo[f_tx->fifo_index] = f_tx;
1621 	udev->fifo[f_rx->fifo_index] = f_rx;
1622 	mtx_unlock(&usb2_ref_lock);
1623 
1624 	for (n = 0; n != 4; n++) {
1625 
1626 		if (pm->basename[n] == NULL) {
1627 			continue;
1628 		}
1629 		if (subunit == 0xFFFF) {
1630 			if (snprintf(devname, sizeof(devname),
1631 			    "%s%u%s", pm->basename[n],
1632 			    unit, pm->postfix[n] ?
1633 			    pm->postfix[n] : "")) {
1634 				/* ignore */
1635 			}
1636 		} else {
1637 			if (snprintf(devname, sizeof(devname),
1638 			    "%s%u.%u%s", pm->basename[n],
1639 			    unit, subunit, pm->postfix[n] ?
1640 			    pm->postfix[n] : "")) {
1641 				/* ignore */
1642 			}
1643 		}
1644 
1645 		/*
1646 		 * Distribute the symbolic links into two FIFO structures:
1647 		 */
1648 		if (n & 1) {
1649 			f_rx->symlink[n / 2] =
1650 			    usb2_alloc_symlink(devname);
1651 		} else {
1652 			f_tx->symlink[n / 2] =
1653 			    usb2_alloc_symlink(devname);
1654 		}
1655 
1656 		/*
1657 		 * Initialize device private data - this is used to find the
1658 		 * actual USB device itself.
1659 		 */
1660 		pd = malloc(sizeof(struct usb2_fs_privdata), M_USBDEV, M_WAITOK | M_ZERO);
1661 		pd->bus_index = device_get_unit(udev->bus->bdev);
1662 		pd->dev_index = udev->device_index;
1663 		pd->ep_addr = -1;	/* not an endpoint */
1664 		pd->fifo_index = f_tx->fifo_index & f_rx->fifo_index;
1665 		pd->mode = FREAD|FWRITE;
1666 
1667 		/* Now, create the device itself */
1668 		f_sc->dev = make_dev(&usb2_devsw, 0, uid, gid, mode,
1669 		    devname);
1670 		/* XXX setting si_drv1 and creating the device is not atomic! */
1671 		f_sc->dev->si_drv1 = pd;
1672 	}
1673 
1674 	DPRINTFN(2, "attached %p/%p\n", f_tx, f_rx);
1675 	return (0);
1676 }
1677 
1678 /*------------------------------------------------------------------------*
1679  *	usb2_fifo_alloc_buffer
1680  *
1681  * Return values:
1682  * 0: Success
1683  * Else failure
1684  *------------------------------------------------------------------------*/
1685 int
1686 usb2_fifo_alloc_buffer(struct usb2_fifo *f, usb2_size_t bufsize,
1687     uint16_t nbuf)
1688 {
1689 	usb2_fifo_free_buffer(f);
1690 
1691 	/* allocate an endpoint */
1692 	f->free_q.ifq_maxlen = nbuf;
1693 	f->used_q.ifq_maxlen = nbuf;
1694 
1695 	f->queue_data = usb2_alloc_mbufs(
1696 	    M_USBDEV, &f->free_q, bufsize, nbuf);
1697 
1698 	if ((f->queue_data == NULL) && bufsize && nbuf) {
1699 		return (ENOMEM);
1700 	}
1701 	return (0);			/* success */
1702 }
1703 
1704 /*------------------------------------------------------------------------*
1705  *	usb2_fifo_free_buffer
1706  *
1707  * This function will free the buffers associated with a FIFO. This
1708  * function can be called multiple times in a row.
1709  *------------------------------------------------------------------------*/
1710 void
1711 usb2_fifo_free_buffer(struct usb2_fifo *f)
1712 {
1713 	if (f->queue_data) {
1714 		/* free old buffer */
1715 		free(f->queue_data, M_USBDEV);
1716 		f->queue_data = NULL;
1717 	}
1718 	/* reset queues */
1719 
1720 	bzero(&f->free_q, sizeof(f->free_q));
1721 	bzero(&f->used_q, sizeof(f->used_q));
1722 }
1723 
1724 static void
1725 usb2_fifo_cleanup(void* ptr)
1726 {
1727 	free(ptr, M_USBDEV);
1728 }
1729 
1730 void
1731 usb2_fifo_detach(struct usb2_fifo_sc *f_sc)
1732 {
1733 	if (f_sc == NULL) {
1734 		return;
1735 	}
1736 	usb2_fifo_free(f_sc->fp[USB_FIFO_TX]);
1737 	usb2_fifo_free(f_sc->fp[USB_FIFO_RX]);
1738 
1739 	f_sc->fp[USB_FIFO_TX] = NULL;
1740 	f_sc->fp[USB_FIFO_RX] = NULL;
1741 
1742 	if (f_sc->dev != NULL) {
1743 		destroy_dev_sched_cb(f_sc->dev,
1744 		    usb2_fifo_cleanup, f_sc->dev->si_drv1);
1745 		f_sc->dev = NULL;
1746 	}
1747 
1748 	DPRINTFN(2, "detached %p\n", f_sc);
1749 }
1750 
1751 usb2_size_t
1752 usb2_fifo_put_bytes_max(struct usb2_fifo *f)
1753 {
1754 	struct usb2_mbuf *m;
1755 	usb2_size_t len;
1756 
1757 	USB_IF_POLL(&f->free_q, m);
1758 
1759 	if (m) {
1760 		len = m->max_data_len;
1761 	} else {
1762 		len = 0;
1763 	}
1764 	return (len);
1765 }
1766 
1767 /*------------------------------------------------------------------------*
1768  *	usb2_fifo_put_data
1769  *
1770  * what:
1771  *  0 - normal operation
1772  *  1 - set last packet flag to enforce framing
1773  *------------------------------------------------------------------------*/
1774 void
1775 usb2_fifo_put_data(struct usb2_fifo *f, struct usb2_page_cache *pc,
1776     usb2_frlength_t offset, usb2_frlength_t len, uint8_t what)
1777 {
1778 	struct usb2_mbuf *m;
1779 	usb2_frlength_t io_len;
1780 
1781 	while (len || (what == 1)) {
1782 
1783 		USB_IF_DEQUEUE(&f->free_q, m);
1784 
1785 		if (m) {
1786 			USB_MBUF_RESET(m);
1787 
1788 			io_len = MIN(len, m->cur_data_len);
1789 
1790 			usb2_copy_out(pc, offset, m->cur_data_ptr, io_len);
1791 
1792 			m->cur_data_len = io_len;
1793 			offset += io_len;
1794 			len -= io_len;
1795 
1796 			if ((len == 0) && (what == 1)) {
1797 				m->last_packet = 1;
1798 			}
1799 			USB_IF_ENQUEUE(&f->used_q, m);
1800 
1801 			usb2_fifo_wakeup(f);
1802 
1803 			if ((len == 0) || (what == 1)) {
1804 				break;
1805 			}
1806 		} else {
1807 			break;
1808 		}
1809 	}
1810 }
1811 
1812 void
1813 usb2_fifo_put_data_linear(struct usb2_fifo *f, void *ptr,
1814     usb2_size_t len, uint8_t what)
1815 {
1816 	struct usb2_mbuf *m;
1817 	usb2_size_t io_len;
1818 
1819 	while (len || (what == 1)) {
1820 
1821 		USB_IF_DEQUEUE(&f->free_q, m);
1822 
1823 		if (m) {
1824 			USB_MBUF_RESET(m);
1825 
1826 			io_len = MIN(len, m->cur_data_len);
1827 
1828 			bcopy(ptr, m->cur_data_ptr, io_len);
1829 
1830 			m->cur_data_len = io_len;
1831 			ptr = USB_ADD_BYTES(ptr, io_len);
1832 			len -= io_len;
1833 
1834 			if ((len == 0) && (what == 1)) {
1835 				m->last_packet = 1;
1836 			}
1837 			USB_IF_ENQUEUE(&f->used_q, m);
1838 
1839 			usb2_fifo_wakeup(f);
1840 
1841 			if ((len == 0) || (what == 1)) {
1842 				break;
1843 			}
1844 		} else {
1845 			break;
1846 		}
1847 	}
1848 }
1849 
1850 uint8_t
1851 usb2_fifo_put_data_buffer(struct usb2_fifo *f, void *ptr, usb2_size_t len)
1852 {
1853 	struct usb2_mbuf *m;
1854 
1855 	USB_IF_DEQUEUE(&f->free_q, m);
1856 
1857 	if (m) {
1858 		m->cur_data_len = len;
1859 		m->cur_data_ptr = ptr;
1860 		USB_IF_ENQUEUE(&f->used_q, m);
1861 		usb2_fifo_wakeup(f);
1862 		return (1);
1863 	}
1864 	return (0);
1865 }
1866 
1867 void
1868 usb2_fifo_put_data_error(struct usb2_fifo *f)
1869 {
1870 	f->flag_iserror = 1;
1871 	usb2_fifo_wakeup(f);
1872 }
1873 
1874 /*------------------------------------------------------------------------*
1875  *	usb2_fifo_get_data
1876  *
1877  * what:
1878  *  0 - normal operation
1879  *  1 - only get one "usb2_mbuf"
1880  *
1881  * returns:
1882  *  0 - no more data
1883  *  1 - data in buffer
1884  *------------------------------------------------------------------------*/
1885 uint8_t
1886 usb2_fifo_get_data(struct usb2_fifo *f, struct usb2_page_cache *pc,
1887     usb2_frlength_t offset, usb2_frlength_t len, usb2_frlength_t *actlen,
1888     uint8_t what)
1889 {
1890 	struct usb2_mbuf *m;
1891 	usb2_frlength_t io_len;
1892 	uint8_t tr_data = 0;
1893 
1894 	actlen[0] = 0;
1895 
1896 	while (1) {
1897 
1898 		USB_IF_DEQUEUE(&f->used_q, m);
1899 
1900 		if (m) {
1901 
1902 			tr_data = 1;
1903 
1904 			io_len = MIN(len, m->cur_data_len);
1905 
1906 			usb2_copy_in(pc, offset, m->cur_data_ptr, io_len);
1907 
1908 			len -= io_len;
1909 			offset += io_len;
1910 			actlen[0] += io_len;
1911 			m->cur_data_ptr += io_len;
1912 			m->cur_data_len -= io_len;
1913 
1914 			if ((m->cur_data_len == 0) || (what == 1)) {
1915 				USB_IF_ENQUEUE(&f->free_q, m);
1916 
1917 				usb2_fifo_wakeup(f);
1918 
1919 				if (what == 1) {
1920 					break;
1921 				}
1922 			} else {
1923 				USB_IF_PREPEND(&f->used_q, m);
1924 			}
1925 		} else {
1926 
1927 			if (tr_data) {
1928 				/* wait for data to be written out */
1929 				break;
1930 			}
1931 			if (f->flag_flushing) {
1932 				/* check if we should send a short packet */
1933 				if (f->flag_short != 0) {
1934 					f->flag_short = 0;
1935 					tr_data = 1;
1936 					break;
1937 				}
1938 				/* flushing complete */
1939 				f->flag_flushing = 0;
1940 				usb2_fifo_wakeup(f);
1941 			}
1942 			break;
1943 		}
1944 		if (len == 0) {
1945 			break;
1946 		}
1947 	}
1948 	return (tr_data);
1949 }
1950 
1951 uint8_t
1952 usb2_fifo_get_data_linear(struct usb2_fifo *f, void *ptr,
1953     usb2_size_t len, usb2_size_t *actlen, uint8_t what)
1954 {
1955 	struct usb2_mbuf *m;
1956 	usb2_size_t io_len;
1957 	uint8_t tr_data = 0;
1958 
1959 	actlen[0] = 0;
1960 
1961 	while (1) {
1962 
1963 		USB_IF_DEQUEUE(&f->used_q, m);
1964 
1965 		if (m) {
1966 
1967 			tr_data = 1;
1968 
1969 			io_len = MIN(len, m->cur_data_len);
1970 
1971 			bcopy(m->cur_data_ptr, ptr, io_len);
1972 
1973 			len -= io_len;
1974 			ptr = USB_ADD_BYTES(ptr, io_len);
1975 			actlen[0] += io_len;
1976 			m->cur_data_ptr += io_len;
1977 			m->cur_data_len -= io_len;
1978 
1979 			if ((m->cur_data_len == 0) || (what == 1)) {
1980 				USB_IF_ENQUEUE(&f->free_q, m);
1981 
1982 				usb2_fifo_wakeup(f);
1983 
1984 				if (what == 1) {
1985 					break;
1986 				}
1987 			} else {
1988 				USB_IF_PREPEND(&f->used_q, m);
1989 			}
1990 		} else {
1991 
1992 			if (tr_data) {
1993 				/* wait for data to be written out */
1994 				break;
1995 			}
1996 			if (f->flag_flushing) {
1997 				/* check if we should send a short packet */
1998 				if (f->flag_short != 0) {
1999 					f->flag_short = 0;
2000 					tr_data = 1;
2001 					break;
2002 				}
2003 				/* flushing complete */
2004 				f->flag_flushing = 0;
2005 				usb2_fifo_wakeup(f);
2006 			}
2007 			break;
2008 		}
2009 		if (len == 0) {
2010 			break;
2011 		}
2012 	}
2013 	return (tr_data);
2014 }
2015 
2016 uint8_t
2017 usb2_fifo_get_data_buffer(struct usb2_fifo *f, void **pptr, usb2_size_t *plen)
2018 {
2019 	struct usb2_mbuf *m;
2020 
2021 	USB_IF_POLL(&f->used_q, m);
2022 
2023 	if (m) {
2024 		*plen = m->cur_data_len;
2025 		*pptr = m->cur_data_ptr;
2026 
2027 		return (1);
2028 	}
2029 	return (0);
2030 }
2031 
2032 void
2033 usb2_fifo_get_data_error(struct usb2_fifo *f)
2034 {
2035 	f->flag_iserror = 1;
2036 	usb2_fifo_wakeup(f);
2037 }
2038 
2039 /*------------------------------------------------------------------------*
2040  *	usb2_alloc_symlink
2041  *
2042  * Return values:
2043  * NULL: Failure
2044  * Else: Pointer to symlink entry
2045  *------------------------------------------------------------------------*/
2046 struct usb2_symlink *
2047 usb2_alloc_symlink(const char *target)
2048 {
2049 	struct usb2_symlink *ps;
2050 
2051 	ps = malloc(sizeof(*ps), M_USBDEV, M_WAITOK);
2052 	if (ps == NULL) {
2053 		return (ps);
2054 	}
2055 	/* XXX no longer needed */
2056 	strlcpy(ps->src_path, target, sizeof(ps->src_path));
2057 	ps->src_len = strlen(ps->src_path);
2058 	strlcpy(ps->dst_path, target, sizeof(ps->dst_path));
2059 	ps->dst_len = strlen(ps->dst_path);
2060 
2061 	sx_xlock(&usb2_sym_lock);
2062 	TAILQ_INSERT_TAIL(&usb2_sym_head, ps, sym_entry);
2063 	sx_unlock(&usb2_sym_lock);
2064 	return (ps);
2065 }
2066 
2067 /*------------------------------------------------------------------------*
2068  *	usb2_free_symlink
2069  *------------------------------------------------------------------------*/
2070 void
2071 usb2_free_symlink(struct usb2_symlink *ps)
2072 {
2073 	if (ps == NULL) {
2074 		return;
2075 	}
2076 	sx_xlock(&usb2_sym_lock);
2077 	TAILQ_REMOVE(&usb2_sym_head, ps, sym_entry);
2078 	sx_unlock(&usb2_sym_lock);
2079 
2080 	free(ps, M_USBDEV);
2081 }
2082 
2083 /*------------------------------------------------------------------------*
2084  *	usb2_read_symlink
2085  *
2086  * Return value:
2087  * 0: Success
2088  * Else: Failure
2089  *------------------------------------------------------------------------*/
2090 int
2091 usb2_read_symlink(uint8_t *user_ptr, uint32_t startentry, uint32_t user_len)
2092 {
2093 	struct usb2_symlink *ps;
2094 	uint32_t temp;
2095 	uint32_t delta = 0;
2096 	uint8_t len;
2097 	int error = 0;
2098 
2099 	sx_xlock(&usb2_sym_lock);
2100 
2101 	TAILQ_FOREACH(ps, &usb2_sym_head, sym_entry) {
2102 
2103 		/*
2104 		 * Compute total length of source and destination symlink
2105 		 * strings pluss one length byte and two NUL bytes:
2106 		 */
2107 		temp = ps->src_len + ps->dst_len + 3;
2108 
2109 		if (temp > 255) {
2110 			/*
2111 			 * Skip entry because this length cannot fit
2112 			 * into one byte:
2113 			 */
2114 			continue;
2115 		}
2116 		if (startentry != 0) {
2117 			/* decrement read offset */
2118 			startentry--;
2119 			continue;
2120 		}
2121 		if (temp > user_len) {
2122 			/* out of buffer space */
2123 			break;
2124 		}
2125 		len = temp;
2126 
2127 		/* copy out total length */
2128 
2129 		error = copyout(&len,
2130 		    USB_ADD_BYTES(user_ptr, delta), 1);
2131 		if (error) {
2132 			break;
2133 		}
2134 		delta += 1;
2135 
2136 		/* copy out source string */
2137 
2138 		error = copyout(ps->src_path,
2139 		    USB_ADD_BYTES(user_ptr, delta), ps->src_len);
2140 		if (error) {
2141 			break;
2142 		}
2143 		len = 0;
2144 		delta += ps->src_len;
2145 		error = copyout(&len,
2146 		    USB_ADD_BYTES(user_ptr, delta), 1);
2147 		if (error) {
2148 			break;
2149 		}
2150 		delta += 1;
2151 
2152 		/* copy out destination string */
2153 
2154 		error = copyout(ps->dst_path,
2155 		    USB_ADD_BYTES(user_ptr, delta), ps->dst_len);
2156 		if (error) {
2157 			break;
2158 		}
2159 		len = 0;
2160 		delta += ps->dst_len;
2161 		error = copyout(&len,
2162 		    USB_ADD_BYTES(user_ptr, delta), 1);
2163 		if (error) {
2164 			break;
2165 		}
2166 		delta += 1;
2167 
2168 		user_len -= temp;
2169 	}
2170 
2171 	/* a zero length entry indicates the end */
2172 
2173 	if ((user_len != 0) && (error == 0)) {
2174 
2175 		len = 0;
2176 
2177 		error = copyout(&len,
2178 		    USB_ADD_BYTES(user_ptr, delta), 1);
2179 	}
2180 	sx_unlock(&usb2_sym_lock);
2181 	return (error);
2182 }
2183 
2184 void
2185 usb2_fifo_set_close_zlp(struct usb2_fifo *f, uint8_t onoff)
2186 {
2187 	if (f == NULL)
2188 		return;
2189 
2190 	/* send a Zero Length Packet, ZLP, before close */
2191 	f->flag_short = onoff;
2192 }
2193 #endif	/* USB_HAVE_UGEN */
2194