Lines Matching refs:f
193 struct usb_fifo *f; in usb_ref_device() local
248 f = ppf[cpd->fifo_index + USB_FIFO_TX]; in usb_ref_device()
249 crd->txfifo = f; in usb_ref_device()
251 if (f == NULL || f->refcount == USB_FIFO_REF_MAX) in usb_ref_device()
253 if (f->curr_cpd != cpd) in usb_ref_device()
256 if (f->fs_ep_max != 0) { in usb_ref_device()
264 f = ppf[cpd->fifo_index + USB_FIFO_RX]; in usb_ref_device()
265 crd->rxfifo = f; in usb_ref_device()
267 if (f == NULL || f->refcount == USB_FIFO_REF_MAX) in usb_ref_device()
269 if (f->curr_cpd != cpd) in usb_ref_device()
272 if (f->fs_ep_max != 0) { in usb_ref_device()
377 struct usb_fifo *f; in usb_fifo_alloc() local
379 f = kmalloc(sizeof(*f), M_USBDEV, M_WAITOK | M_ZERO); in usb_fifo_alloc()
380 if (f != NULL) { in usb_fifo_alloc()
381 cv_init(&f->cv_io, "FIFO-IO"); in usb_fifo_alloc()
382 cv_init(&f->cv_drain, "FIFO-DRAIN"); in usb_fifo_alloc()
383 f->priv_lock = lock; in usb_fifo_alloc()
384 f->refcount = 1; in usb_fifo_alloc()
387 return (f); in usb_fifo_alloc()
398 struct usb_fifo *f; in usb_fifo_create() local
416 f = udev->fifo[cpd->fifo_index + USB_FIFO_TX]; in usb_fifo_create()
417 if (f == NULL) in usb_fifo_create()
419 crd->txfifo = f; in usb_fifo_create()
422 f = udev->fifo[cpd->fifo_index + USB_FIFO_RX]; in usb_fifo_create()
423 if (f == NULL) in usb_fifo_create()
425 crd->rxfifo = f; in usb_fifo_create()
448 f = udev->fifo[n + USB_FIFO_TX]; in usb_fifo_create()
449 if (f != NULL) { in usb_fifo_create()
450 if (f->dev_ep_index != e) { in usb_fifo_create()
454 if (f->curr_cpd != NULL) { in usb_fifo_create()
465 f = udev->fifo[n + USB_FIFO_RX]; in usb_fifo_create()
466 if (f != NULL) { in usb_fifo_create()
467 if (f->dev_ep_index != e) { in usb_fifo_create()
471 if (f->curr_cpd != NULL) { in usb_fifo_create()
509 f = usb_fifo_alloc(&udev->device_lock); in usb_fifo_create()
510 if (f == NULL) { in usb_fifo_create()
515 f->fifo_index = n + USB_FIFO_TX; in usb_fifo_create()
516 f->dev_ep_index = e; in usb_fifo_create()
517 f->priv_sc0 = ep; in usb_fifo_create()
518 f->methods = &usb_ugen_methods; in usb_fifo_create()
519 f->iface_index = ep->iface_index; in usb_fifo_create()
520 f->udev = udev; in usb_fifo_create()
522 udev->fifo[n + USB_FIFO_TX] = f; in usb_fifo_create()
535 f = usb_fifo_alloc(&udev->device_lock); in usb_fifo_create()
536 if (f == NULL) { in usb_fifo_create()
541 f->fifo_index = n + USB_FIFO_RX; in usb_fifo_create()
542 f->dev_ep_index = e; in usb_fifo_create()
543 f->priv_sc0 = ep; in usb_fifo_create()
544 f->methods = &usb_ugen_methods; in usb_fifo_create()
545 f->iface_index = ep->iface_index; in usb_fifo_create()
546 f->udev = udev; in usb_fifo_create()
548 udev->fifo[n + USB_FIFO_RX] = f; in usb_fifo_create()
567 usb_fifo_free(struct usb_fifo *f) in usb_fifo_free() argument
571 if (f == NULL) { in usb_fifo_free()
577 if (f->symlink[n]) { in usb_fifo_free()
578 usb_free_symlink(f->symlink[n]); in usb_fifo_free()
579 f->symlink[n] = NULL; in usb_fifo_free()
585 if ((f->fifo_index < USB_FIFO_MAX) && in usb_fifo_free()
586 (f->udev != NULL) && in usb_fifo_free()
587 (f->udev->fifo[f->fifo_index] == f)) { in usb_fifo_free()
588 f->udev->fifo[f->fifo_index] = NULL; in usb_fifo_free()
590 DPRINTFN(0, "USB FIFO %p has not been linked\n", f); in usb_fifo_free()
594 f->refcount--; in usb_fifo_free()
596 while (f->refcount != 0) { in usb_fifo_free()
598 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_fifo_free()
600 f->flag_iserror = 1; in usb_fifo_free()
602 if (f->flag_sleeping) { in usb_fifo_free()
603 f->flag_sleeping = 0; in usb_fifo_free()
604 cv_broadcast(&f->cv_io); in usb_fifo_free()
606 lockmgr(f->priv_lock, LK_RELEASE); in usb_fifo_free()
613 if (f->refcount == 0) in usb_fifo_free()
617 cv_wait(&f->cv_drain, &usb_ref_lock); in usb_fifo_free()
622 usb_fifo_close(f, 0); in usb_fifo_free()
624 cv_destroy(&f->cv_io); in usb_fifo_free()
625 cv_destroy(&f->cv_drain); in usb_fifo_free()
628 knlist_clear(&f->selinfo.si_note, 0); in usb_fifo_free()
629 seldrain(&f->selinfo); in usb_fifo_free()
630 knlist_destroy(&f->selinfo.si_note); in usb_fifo_free()
632 kfree(f, M_USBDEV); in usb_fifo_free()
680 struct usb_fifo *f, int fflags) in usb_fifo_open() argument
684 if (f == NULL) { in usb_fifo_open()
693 if ((f->fifo_index & 1) == USB_FIFO_TX) { in usb_fifo_open()
701 if (f->curr_cpd != NULL) { in usb_fifo_open()
707 f->flag_short = 0; in usb_fifo_open()
710 err = (f->methods->f_open) (f, fflags); in usb_fifo_open()
714 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_fifo_open()
717 f->flag_sleeping = 0; in usb_fifo_open()
720 f->flag_iserror = 0; in usb_fifo_open()
723 f->flag_iscomplete = 0; in usb_fifo_open()
726 f->flag_isselect = 0; in usb_fifo_open()
729 f->flag_flushing = 0; in usb_fifo_open()
732 f->async_p = NULL; in usb_fifo_open()
736 f->curr_cpd = cpd; in usb_fifo_open()
740 usb_fifo_reset(f); in usb_fifo_open()
742 lockmgr(f->priv_lock, LK_RELEASE); in usb_fifo_open()
751 usb_fifo_reset(struct usb_fifo *f) in usb_fifo_reset() argument
755 if (f == NULL) { in usb_fifo_reset()
759 USB_IF_DEQUEUE(&f->used_q, m); in usb_fifo_reset()
761 USB_IF_ENQUEUE(&f->free_q, m); in usb_fifo_reset()
767 f->flag_have_fragment = 0; in usb_fifo_reset()
774 usb_fifo_close(struct usb_fifo *f, int fflags) in usb_fifo_close() argument
779 if (f->curr_cpd == NULL) { in usb_fifo_close()
783 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_fifo_close()
787 f->curr_cpd = NULL; in usb_fifo_close()
791 if (f->flag_isselect) { in usb_fifo_close()
792 KNOTE(&f->selinfo.ki_note, 0); in usb_fifo_close()
793 wakeup(&f->selinfo.ki_note); in usb_fifo_close()
795 f->flag_isselect = 0; in usb_fifo_close()
798 if (f->async_p != NULL && lwkt_trytoken(&f->async_p->p_token)) { in usb_fifo_close()
799 ksignal(f->async_p, SIGIO); in usb_fifo_close()
800 lwkt_reltoken(&f->async_p->p_token); in usb_fifo_close()
801 f->async_p = NULL; in usb_fifo_close()
807 if ((f->fifo_index & 1) == USB_FIFO_TX) { in usb_fifo_close()
809 if (!f->flag_iserror) { in usb_fifo_close()
812 f->flag_flushing = 1; in usb_fifo_close()
815 if (f->flag_have_fragment) { in usb_fifo_close()
817 f->flag_have_fragment = 0; in usb_fifo_close()
818 USB_IF_DEQUEUE(&f->free_q, m); in usb_fifo_close()
820 USB_IF_ENQUEUE(&f->used_q, m); in usb_fifo_close()
825 (f->methods->f_start_write) (f); in usb_fifo_close()
828 while (f->flag_flushing && in usb_fifo_close()
829 (!f->flag_iserror)) { in usb_fifo_close()
831 f->flag_sleeping = 1; in usb_fifo_close()
832 err = cv_wait_sig(&f->cv_io, f->priv_lock); in usb_fifo_close()
842 (f->methods->f_stop_write) (f); in usb_fifo_close()
847 (f->methods->f_stop_read) (f); in usb_fifo_close()
851 if (f->flag_sleeping) { in usb_fifo_close()
854 lockmgr(f->priv_lock, LK_RELEASE); in usb_fifo_close()
857 (f->methods->f_close) (f, fflags); in usb_fifo_close()
1024 usb_ioctl_f_sub(struct usb_fifo *f, u_long cmd, void *addr, in usb_ioctl_f_sub() argument
1040 if (f->async_p != NULL) { in usb_ioctl_f_sub()
1044 f->async_p = USB_TD_GET_PROC(td); in usb_ioctl_f_sub()
1046 f->async_p = NULL; in usb_ioctl_f_sub()
1052 if (f->async_p == NULL) { in usb_ioctl_f_sub()
1056 if (*(int *)addr != USB_PROC_GET_GID(f->async_p)) { in usb_ioctl_f_sub()
1079 struct usb_fifo *f; in usb_ioctl() local
1100 f = NULL; /* set default value */ in usb_ioctl()
1104 f = refs.txfifo; in usb_ioctl()
1105 err = usb_ioctl_f_sub(f, cmd, addr, td); in usb_ioctl()
1108 f = refs.rxfifo; in usb_ioctl()
1109 err = usb_ioctl_f_sub(f, cmd, addr, td); in usb_ioctl()
1111 KASSERT(f != NULL, ("fifo not found")); in usb_ioctl()
1115 err = (f->methods->f_ioctl) (f, cmd, addr, fflags); in usb_ioctl()
1127 err = (f->methods->f_ioctl_post) (f, cmd, addr, fflags); in usb_ioctl()
1139 while (f->udev->re_enumerate_wait != USB_RE_ENUM_DONE) { in usb_ioctl()
1167 struct usb_fifo *f; in usb_kqfilter() local
1184 f = refs.rxfifo; in usb_kqfilter()
1186 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_kqfilter()
1187 f->flag_isselect = 1; in usb_kqfilter()
1188 lockmgr(f->priv_lock, LK_RELEASE); in usb_kqfilter()
1196 f = refs.txfifo; in usb_kqfilter()
1198 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_kqfilter()
1199 f->flag_isselect = 1; in usb_kqfilter()
1200 lockmgr(f->priv_lock, LK_RELEASE); in usb_kqfilter()
1215 klist = &f->selinfo.ki_note; in usb_kqfilter()
1225 struct usb_fifo *f; in usb_filter_detach() local
1246 f = refs.rxfifo; in usb_filter_detach()
1249 f = refs.txfifo; in usb_filter_detach()
1257 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_filter_detach()
1262 klist = &f->selinfo.ki_note; in usb_filter_detach()
1264 f->flag_isselect = 0; in usb_filter_detach()
1266 lockmgr(f->priv_lock, LK_RELEASE); in usb_filter_detach()
1274 struct usb_fifo *f; in usb_filter_read() local
1300 f = refs.rxfifo; in usb_filter_read()
1302 locked = lockowned(f->priv_lock); in usb_filter_read()
1304 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_filter_read()
1307 if (f->flag_iserror) { in usb_filter_read()
1313 (f->methods->f_start_read)(f); in usb_filter_read()
1315 USB_IF_POLL(&f->used_q, m); in usb_filter_read()
1321 if (f->flag_iscomplete) { in usb_filter_read()
1329 lockmgr(f->priv_lock, LK_RELEASE); in usb_filter_read()
1340 struct usb_fifo *f; in usb_filter_write() local
1366 f = refs.txfifo; in usb_filter_write()
1368 locked = lockowned(f->priv_lock); in usb_filter_write()
1370 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_filter_write()
1373 if (f->flag_iserror) { in usb_filter_write()
1378 if (f->queue_data == NULL) { in usb_filter_write()
1383 (f->methods->f_start_write) (f); in usb_filter_write()
1386 USB_IF_POLL(&f->free_q, m); in usb_filter_write()
1391 if (f->flag_iscomplete) { in usb_filter_write()
1399 lockmgr(f->priv_lock, LK_RELEASE); in usb_filter_write()
1415 struct usb_fifo *f;
1431 f = refs.txfifo;
1433 lockmgr(f->priv_lock, LK_EXCLUSIVE);
1436 if (f->flag_iserror) {
1440 if (f->queue_data == NULL) {
1445 (f->methods->f_start_write) (f);
1448 USB_IF_POLL(&f->free_q, m);
1451 if (f->flag_iscomplete) {
1461 f->flag_isselect = 1;
1462 selrecord(td, &f->selinfo);
1465 lockmgr(f->priv_lock);
1470 f = refs.rxfifo;
1472 lockmgr(f->priv_lock, LK_EXCLUSIVE);
1475 if (f->flag_iserror) {
1479 if (f->queue_data == NULL) {
1484 (f->methods->f_start_read) (f);
1487 USB_IF_POLL(&f->used_q, m);
1490 if (f->flag_iscomplete) {
1500 f->flag_isselect = 1;
1501 selrecord(td, &f->selinfo);
1505 (f->methods->f_start_read) (f);
1509 lockmgr(f->priv_lock, LK_RELEASE);
1523 struct usb_fifo *f; in usb_read() local
1540 f = refs.rxfifo; in usb_read()
1541 if (f == NULL) { in usb_read()
1549 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_read()
1552 if (f->flag_iserror) { in usb_read()
1567 USB_IF_DEQUEUE(&f->used_q, m); in usb_read()
1573 (f->methods->f_start_read) (f); in usb_read()
1585 err = usb_fifo_wait(f); in usb_read()
1591 if (f->methods->f_filter_read) { in usb_read()
1597 (f->methods->f_filter_read) (f, m); in usb_read()
1606 err = usb_fifo_uiomove(f, in usb_read()
1618 USB_IF_ENQUEUE(&f->free_q, m); in usb_read()
1625 USB_IF_PREPEND(&f->used_q, m); in usb_read()
1626 usb_fifo_wakeup(f); in usb_read()
1634 lockmgr(f->priv_lock, LK_RELEASE); in usb_read()
1648 struct usb_fifo *f; in usb_write() local
1668 f = refs.txfifo; in usb_write()
1669 if (f == NULL) { in usb_write()
1676 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_write()
1679 if (f->flag_iserror) { in usb_write()
1692 if (f->queue_data == NULL) { in usb_write()
1694 (f->methods->f_start_write) (f); in usb_write()
1698 USB_IF_DEQUEUE(&f->free_q, m); in usb_write()
1712 err = usb_fifo_wait(f); in usb_write()
1720 if (f->flag_have_fragment == 0) { in usb_write()
1738 err = usb_fifo_uiomove(f, pdata, io_len, uio); in usb_write()
1741 f->flag_have_fragment = 0; in usb_write()
1742 USB_IF_ENQUEUE(&f->free_q, m); in usb_write()
1748 if ((f->flag_write_defrag == 0) || in usb_write()
1750 f->flag_have_fragment = 0; in usb_write()
1759 if (f->methods->f_filter_write) { in usb_write()
1760 (f->methods->f_filter_write) (f, m); in usb_write()
1764 USB_IF_ENQUEUE(&f->used_q, m); in usb_write()
1767 (f->methods->f_start_write) (f); in usb_write()
1770 f->flag_have_fragment = 1; in usb_write()
1771 USB_IF_PREPEND(&f->free_q, m); in usb_write()
1776 lockmgr(f->priv_lock, LK_RELEASE); in usb_write()
1838 usb_fifo_uiomove(struct usb_fifo *f, void *cp, in usb_fifo_uiomove() argument
1843 lockmgr(f->priv_lock, LK_RELEASE); in usb_fifo_uiomove()
1851 lockmgr(f->priv_lock, LK_EXCLUSIVE); in usb_fifo_uiomove()
1857 usb_fifo_wait(struct usb_fifo *f) in usb_fifo_wait() argument
1861 KKASSERT(lockowned(f->priv_lock)); in usb_fifo_wait()
1863 if (f->flag_iserror) { in usb_fifo_wait()
1867 f->flag_sleeping = 1; in usb_fifo_wait()
1869 err = cv_wait_sig(&f->cv_io, f->priv_lock); in usb_fifo_wait()
1871 if (f->flag_iserror) { in usb_fifo_wait()
1879 usb_fifo_signal(struct usb_fifo *f) in usb_fifo_signal() argument
1881 if (f->flag_sleeping) { in usb_fifo_signal()
1882 f->flag_sleeping = 0; in usb_fifo_signal()
1883 cv_broadcast(&f->cv_io); in usb_fifo_signal()
1888 usb_fifo_wakeup(struct usb_fifo *f) in usb_fifo_wakeup() argument
1890 usb_fifo_signal(f); in usb_fifo_wakeup()
1892 KNOTE(&f->selinfo.ki_note, 0); in usb_fifo_wakeup()
1894 if (f->flag_isselect) { in usb_fifo_wakeup()
1895 wakeup(&f->selinfo.ki_note); in usb_fifo_wakeup()
1897 if (f->async_p != NULL && lwkt_trytoken(&f->async_p->p_token)) { in usb_fifo_wakeup()
1898 ksignal(f->async_p, SIGIO); in usb_fifo_wakeup()
1899 lwkt_reltoken(&f->async_p->p_token); in usb_fifo_wakeup()
2092 usb_fifo_alloc_buffer(struct usb_fifo *f, usb_size_t bufsize, in usb_fifo_alloc_buffer() argument
2095 usb_fifo_free_buffer(f); in usb_fifo_alloc_buffer()
2098 f->free_q.ifq_maxlen = nbuf; in usb_fifo_alloc_buffer()
2099 f->used_q.ifq_maxlen = nbuf; in usb_fifo_alloc_buffer()
2101 f->queue_data = usb_alloc_mbufs( in usb_fifo_alloc_buffer()
2102 M_USBDEV, &f->free_q, bufsize, nbuf); in usb_fifo_alloc_buffer()
2104 if ((f->queue_data == NULL) && bufsize && nbuf) { in usb_fifo_alloc_buffer()
2117 usb_fifo_free_buffer(struct usb_fifo *f) in usb_fifo_free_buffer() argument
2119 if (f->queue_data) { in usb_fifo_free_buffer()
2121 kfree(f->queue_data, M_USBDEV); in usb_fifo_free_buffer()
2122 f->queue_data = NULL; in usb_fifo_free_buffer()
2126 memset(&f->free_q, 0, sizeof(f->free_q)); in usb_fifo_free_buffer()
2127 memset(&f->used_q, 0, sizeof(f->used_q)); in usb_fifo_free_buffer()
2150 usb_fifo_put_bytes_max(struct usb_fifo *f) in usb_fifo_put_bytes_max() argument
2155 USB_IF_POLL(&f->free_q, m); in usb_fifo_put_bytes_max()
2173 usb_fifo_put_data(struct usb_fifo *f, struct usb_page_cache *pc, in usb_fifo_put_data() argument
2181 USB_IF_DEQUEUE(&f->free_q, m); in usb_fifo_put_data()
2197 USB_IF_ENQUEUE(&f->used_q, m); in usb_fifo_put_data()
2199 usb_fifo_wakeup(f); in usb_fifo_put_data()
2211 usb_fifo_put_data_linear(struct usb_fifo *f, void *ptr, in usb_fifo_put_data_linear() argument
2219 USB_IF_DEQUEUE(&f->free_q, m); in usb_fifo_put_data_linear()
2235 USB_IF_ENQUEUE(&f->used_q, m); in usb_fifo_put_data_linear()
2237 usb_fifo_wakeup(f); in usb_fifo_put_data_linear()
2249 usb_fifo_put_data_buffer(struct usb_fifo *f, void *ptr, usb_size_t len) in usb_fifo_put_data_buffer() argument
2253 USB_IF_DEQUEUE(&f->free_q, m); in usb_fifo_put_data_buffer()
2258 USB_IF_ENQUEUE(&f->used_q, m); in usb_fifo_put_data_buffer()
2259 usb_fifo_wakeup(f); in usb_fifo_put_data_buffer()
2266 usb_fifo_put_data_error(struct usb_fifo *f) in usb_fifo_put_data_error() argument
2268 f->flag_iserror = 1; in usb_fifo_put_data_error()
2269 usb_fifo_wakeup(f); in usb_fifo_put_data_error()
2284 usb_fifo_get_data(struct usb_fifo *f, struct usb_page_cache *pc, in usb_fifo_get_data() argument
2296 USB_IF_DEQUEUE(&f->used_q, m); in usb_fifo_get_data()
2313 USB_IF_ENQUEUE(&f->free_q, m); in usb_fifo_get_data()
2315 usb_fifo_wakeup(f); in usb_fifo_get_data()
2321 USB_IF_PREPEND(&f->used_q, m); in usb_fifo_get_data()
2322 usb_fifo_wakeup(f); in usb_fifo_get_data()
2330 if (f->flag_flushing) { in usb_fifo_get_data()
2332 if (f->flag_short != 0) { in usb_fifo_get_data()
2333 f->flag_short = 0; in usb_fifo_get_data()
2338 f->flag_flushing = 0; in usb_fifo_get_data()
2339 usb_fifo_wakeup(f); in usb_fifo_get_data()
2351 usb_fifo_get_data_linear(struct usb_fifo *f, void *ptr, in usb_fifo_get_data_linear() argument
2362 USB_IF_DEQUEUE(&f->used_q, m); in usb_fifo_get_data_linear()
2379 USB_IF_ENQUEUE(&f->free_q, m); in usb_fifo_get_data_linear()
2381 usb_fifo_wakeup(f); in usb_fifo_get_data_linear()
2387 USB_IF_PREPEND(&f->used_q, m); in usb_fifo_get_data_linear()
2388 usb_fifo_wakeup(f); in usb_fifo_get_data_linear()
2396 if (f->flag_flushing) { in usb_fifo_get_data_linear()
2398 if (f->flag_short != 0) { in usb_fifo_get_data_linear()
2399 f->flag_short = 0; in usb_fifo_get_data_linear()
2404 f->flag_flushing = 0; in usb_fifo_get_data_linear()
2405 usb_fifo_wakeup(f); in usb_fifo_get_data_linear()
2417 usb_fifo_get_data_buffer(struct usb_fifo *f, void **pptr, usb_size_t *plen) in usb_fifo_get_data_buffer() argument
2421 USB_IF_POLL(&f->used_q, m); in usb_fifo_get_data_buffer()
2433 usb_fifo_get_data_error(struct usb_fifo *f) in usb_fifo_get_data_error() argument
2435 f->flag_iserror = 1; in usb_fifo_get_data_error()
2436 usb_fifo_wakeup(f); in usb_fifo_get_data_error()
2585 usb_fifo_set_close_zlp(struct usb_fifo *f, uint8_t onoff) in usb_fifo_set_close_zlp() argument
2587 if (f == NULL) in usb_fifo_set_close_zlp()
2591 f->flag_short = onoff; in usb_fifo_set_close_zlp()
2595 usb_fifo_set_write_defrag(struct usb_fifo *f, uint8_t onoff) in usb_fifo_set_write_defrag() argument
2597 if (f == NULL) in usb_fifo_set_write_defrag()
2601 f->flag_write_defrag = onoff; in usb_fifo_set_write_defrag()
2603 f->flag_have_fragment = 0; in usb_fifo_set_write_defrag()
2607 usb_fifo_softc(struct usb_fifo *f) in usb_fifo_softc() argument
2609 return (f->priv_sc0); in usb_fifo_softc()