Lines Matching refs:f
196 struct usb_fifo *f; in usb_ref_device() local
257 f = ppf[cpd->fifo_index + USB_FIFO_TX]; in usb_ref_device()
258 crd->txfifo = f; in usb_ref_device()
260 if (f == NULL || f->refcount == USB_FIFO_REF_MAX) in usb_ref_device()
262 if (f->curr_cpd != cpd) in usb_ref_device()
265 if (f->fs_ep_max != 0) { in usb_ref_device()
273 f = ppf[cpd->fifo_index + USB_FIFO_RX]; in usb_ref_device()
274 crd->rxfifo = f; in usb_ref_device()
276 if (f == NULL || f->refcount == USB_FIFO_REF_MAX) in usb_ref_device()
278 if (f->curr_cpd != cpd) in usb_ref_device()
281 if (f->fs_ep_max != 0) { in usb_ref_device()
386 struct usb_fifo *f; in usb_fifo_alloc() local
388 f = malloc(sizeof(*f), M_USBDEV, M_WAITOK | M_ZERO); in usb_fifo_alloc()
389 cv_init(&f->cv_io, "FIFO-IO"); in usb_fifo_alloc()
390 cv_init(&f->cv_drain, "FIFO-DRAIN"); in usb_fifo_alloc()
391 f->priv_mtx = mtx; in usb_fifo_alloc()
392 f->refcount = 1; in usb_fifo_alloc()
393 knlist_init_mtx(&f->selinfo.si_note, mtx); in usb_fifo_alloc()
394 return (f); in usb_fifo_alloc()
405 struct usb_fifo *f; in usb_fifo_create() local
423 f = udev->fifo[cpd->fifo_index + USB_FIFO_TX]; in usb_fifo_create()
424 if (f == NULL) in usb_fifo_create()
426 crd->txfifo = f; in usb_fifo_create()
429 f = udev->fifo[cpd->fifo_index + USB_FIFO_RX]; in usb_fifo_create()
430 if (f == NULL) in usb_fifo_create()
432 crd->rxfifo = f; in usb_fifo_create()
454 f = udev->fifo[n + USB_FIFO_TX]; in usb_fifo_create()
455 if (f != NULL) { in usb_fifo_create()
456 if (f->dev_ep_index != e) { in usb_fifo_create()
460 if (f->curr_cpd != NULL) { in usb_fifo_create()
471 f = udev->fifo[n + USB_FIFO_RX]; in usb_fifo_create()
472 if (f != NULL) { in usb_fifo_create()
473 if (f->dev_ep_index != e) { in usb_fifo_create()
477 if (f->curr_cpd != NULL) { in usb_fifo_create()
515 f = usb_fifo_alloc(&udev->device_mtx); in usb_fifo_create()
516 if (f == NULL) { in usb_fifo_create()
521 f->fifo_index = n + USB_FIFO_TX; in usb_fifo_create()
522 f->dev_ep_index = e; in usb_fifo_create()
523 f->priv_sc0 = ep; in usb_fifo_create()
524 f->methods = &usb_ugen_methods; in usb_fifo_create()
525 f->iface_index = ep->iface_index; in usb_fifo_create()
526 f->udev = udev; in usb_fifo_create()
528 udev->fifo[n + USB_FIFO_TX] = f; in usb_fifo_create()
540 f = usb_fifo_alloc(&udev->device_mtx); in usb_fifo_create()
541 if (f == NULL) { in usb_fifo_create()
546 f->fifo_index = n + USB_FIFO_RX; in usb_fifo_create()
547 f->dev_ep_index = e; in usb_fifo_create()
548 f->priv_sc0 = ep; in usb_fifo_create()
549 f->methods = &usb_ugen_methods; in usb_fifo_create()
550 f->iface_index = ep->iface_index; in usb_fifo_create()
551 f->udev = udev; in usb_fifo_create()
553 udev->fifo[n + USB_FIFO_RX] = f; in usb_fifo_create()
572 usb_fifo_free(struct usb_fifo *f) in usb_fifo_free() argument
576 if (f == NULL) { in usb_fifo_free()
582 if (f->symlink[n]) { in usb_fifo_free()
583 usb_free_symlink(f->symlink[n]); in usb_fifo_free()
584 f->symlink[n] = NULL; in usb_fifo_free()
590 if ((f->fifo_index < USB_FIFO_MAX) && in usb_fifo_free()
591 (f->udev != NULL) && in usb_fifo_free()
592 (f->udev->fifo[f->fifo_index] == f)) { in usb_fifo_free()
593 f->udev->fifo[f->fifo_index] = NULL; in usb_fifo_free()
595 DPRINTFN(0, "USB FIFO %p has not been linked\n", f); in usb_fifo_free()
599 f->refcount--; in usb_fifo_free()
601 while (f->refcount != 0) { in usb_fifo_free()
603 mtx_lock(f->priv_mtx); in usb_fifo_free()
605 f->flag_iserror = 1; in usb_fifo_free()
607 if (f->flag_sleeping) { in usb_fifo_free()
608 f->flag_sleeping = 0; in usb_fifo_free()
609 cv_broadcast(&f->cv_io); in usb_fifo_free()
611 mtx_unlock(f->priv_mtx); in usb_fifo_free()
618 if (f->refcount == 0) in usb_fifo_free()
622 cv_wait(&f->cv_drain, &usb_ref_lock); in usb_fifo_free()
627 usb_fifo_close(f, 0); in usb_fifo_free()
629 cv_destroy(&f->cv_io); in usb_fifo_free()
630 cv_destroy(&f->cv_drain); in usb_fifo_free()
632 knlist_clear(&f->selinfo.si_note, 0); in usb_fifo_free()
633 seldrain(&f->selinfo); in usb_fifo_free()
634 knlist_destroy(&f->selinfo.si_note); in usb_fifo_free()
636 free(f, M_USBDEV); in usb_fifo_free()
684 struct usb_fifo *f, int fflags) in usb_fifo_open() argument
688 if (f == NULL) { in usb_fifo_open()
697 if ((f->fifo_index & 1) == USB_FIFO_TX) { in usb_fifo_open()
705 if (f->curr_cpd != NULL) { in usb_fifo_open()
711 f->flag_short = 0; in usb_fifo_open()
714 err = (f->methods->f_open) (f, fflags); in usb_fifo_open()
718 mtx_lock(f->priv_mtx); in usb_fifo_open()
721 f->flag_sleeping = 0; in usb_fifo_open()
724 f->flag_iserror = 0; in usb_fifo_open()
727 f->flag_iscomplete = 0; in usb_fifo_open()
730 f->flag_isselect = 0; in usb_fifo_open()
733 f->flag_flushing = 0; in usb_fifo_open()
736 f->async_p = NULL; in usb_fifo_open()
740 f->curr_cpd = cpd; in usb_fifo_open()
744 usb_fifo_reset(f); in usb_fifo_open()
746 mtx_unlock(f->priv_mtx); in usb_fifo_open()
755 usb_fifo_reset(struct usb_fifo *f) in usb_fifo_reset() argument
759 if (f == NULL) { in usb_fifo_reset()
763 USB_IF_DEQUEUE(&f->used_q, m); in usb_fifo_reset()
765 USB_IF_ENQUEUE(&f->free_q, m); in usb_fifo_reset()
771 f->flag_have_fragment = 0; in usb_fifo_reset()
778 usb_fifo_close(struct usb_fifo *f, int fflags) in usb_fifo_close() argument
783 if (f->curr_cpd == NULL) { in usb_fifo_close()
787 mtx_lock(f->priv_mtx); in usb_fifo_close()
791 f->curr_cpd = NULL; in usb_fifo_close()
795 KNOTE_LOCKED(&f->selinfo.si_note, 0); in usb_fifo_close()
798 if (f->flag_isselect) { in usb_fifo_close()
799 selwakeup(&f->selinfo); in usb_fifo_close()
800 f->flag_isselect = 0; in usb_fifo_close()
803 if (f->async_p != NULL) { in usb_fifo_close()
804 PROC_LOCK(f->async_p); in usb_fifo_close()
805 kern_psignal(f->async_p, SIGIO); in usb_fifo_close()
806 PROC_UNLOCK(f->async_p); in usb_fifo_close()
807 f->async_p = NULL; in usb_fifo_close()
813 if ((f->fifo_index & 1) == USB_FIFO_TX) { in usb_fifo_close()
814 if (!f->flag_iserror) { in usb_fifo_close()
816 f->flag_flushing = 1; in usb_fifo_close()
819 if (f->flag_have_fragment) { in usb_fifo_close()
821 f->flag_have_fragment = 0; in usb_fifo_close()
822 USB_IF_DEQUEUE(&f->free_q, m); in usb_fifo_close()
824 USB_IF_ENQUEUE(&f->used_q, m); in usb_fifo_close()
829 (f->methods->f_start_write) (f); in usb_fifo_close()
832 while (f->flag_flushing && in usb_fifo_close()
833 (!f->flag_iserror)) { in usb_fifo_close()
835 f->flag_sleeping = 1; in usb_fifo_close()
836 err = cv_timedwait_sig(&f->cv_io, f->priv_mtx, in usb_fifo_close()
847 (f->methods->f_stop_write) (f); in usb_fifo_close()
852 (f->methods->f_stop_read) (f); in usb_fifo_close()
856 if (f->flag_sleeping) { in usb_fifo_close()
859 mtx_unlock(f->priv_mtx); in usb_fifo_close()
862 (f->methods->f_close) (f, fflags); in usb_fifo_close()
1007 usb_ioctl_f_sub(struct usb_fifo *f, u_long cmd, void *addr, in usb_ioctl_f_sub() argument
1023 if (f->async_p != NULL) { in usb_ioctl_f_sub()
1027 f->async_p = USB_TD_GET_PROC(td); in usb_ioctl_f_sub()
1029 f->async_p = NULL; in usb_ioctl_f_sub()
1035 if (f->async_p == NULL) { in usb_ioctl_f_sub()
1039 if (*(int *)addr != USB_PROC_GET_GID(f->async_p)) { in usb_ioctl_f_sub()
1059 struct usb_fifo *f; in usb_ioctl() local
1080 f = NULL; /* set default value */ in usb_ioctl()
1084 f = refs.txfifo; in usb_ioctl()
1085 err = usb_ioctl_f_sub(f, cmd, addr, td); in usb_ioctl()
1088 f = refs.rxfifo; in usb_ioctl()
1089 err = usb_ioctl_f_sub(f, cmd, addr, td); in usb_ioctl()
1091 KASSERT(f != NULL, ("fifo not found")); in usb_ioctl()
1095 err = (f->methods->f_ioctl) (f, cmd, addr, fflags); in usb_ioctl()
1107 err = (f->methods->f_ioctl_post) (f, cmd, addr, fflags); in usb_ioctl()
1119 while (f->udev->re_enumerate_wait != USB_RE_ENUM_DONE) { in usb_ioctl()
1142 struct usb_fifo *f = kn->kn_hook; in usb_filter_detach() local
1143 knlist_remove(&f->selinfo.si_note, kn, 0); in usb_filter_detach()
1150 struct usb_fifo *f; in usb_filter_write() local
1155 f = kn->kn_hook; in usb_filter_write()
1157 USB_MTX_ASSERT(f->priv_mtx, MA_OWNED); in usb_filter_write()
1159 cpd = f->curr_cpd; in usb_filter_write()
1162 } else if (f->fs_ep_max == 0) { in usb_filter_write()
1163 if (f->flag_iserror) { in usb_filter_write()
1167 if (f->queue_data == NULL) { in usb_filter_write()
1172 (f->methods->f_start_write) (f); in usb_filter_write()
1175 USB_IF_POLL(&f->free_q, m); in usb_filter_write()
1178 if (f->flag_iscomplete) { in usb_filter_write()
1191 struct usb_fifo *f; in usb_filter_read() local
1196 f = kn->kn_hook; in usb_filter_read()
1198 USB_MTX_ASSERT(f->priv_mtx, MA_OWNED); in usb_filter_read()
1200 cpd = f->curr_cpd; in usb_filter_read()
1203 } else if (f->fs_ep_max == 0) { in usb_filter_read()
1204 if (f->flag_iserror) { in usb_filter_read()
1208 if (f->queue_data == NULL) { in usb_filter_read()
1213 (f->methods->f_start_read) (f); in usb_filter_read()
1216 USB_IF_POLL(&f->used_q, m); in usb_filter_read()
1220 (f->methods->f_start_read) (f); in usb_filter_read()
1223 if (f->flag_iscomplete) { in usb_filter_read()
1250 struct usb_fifo *f; in usb_kqfilter() local
1266 f = refs.txfifo; in usb_kqfilter()
1273 f = refs.rxfifo; in usb_kqfilter()
1284 kn->kn_hook = f; in usb_kqfilter()
1285 mtx_lock(f->priv_mtx); in usb_kqfilter()
1286 knlist_add(&f->selinfo.si_note, kn, 1); in usb_kqfilter()
1287 mtx_unlock(f->priv_mtx); in usb_kqfilter()
1300 struct usb_fifo *f; in usb_poll() local
1315 f = refs.txfifo; in usb_poll()
1317 mtx_lock(f->priv_mtx); in usb_poll()
1320 if (f->flag_iserror) { in usb_poll()
1324 if (f->queue_data == NULL) { in usb_poll()
1329 (f->methods->f_start_write) (f); in usb_poll()
1332 USB_IF_POLL(&f->free_q, m); in usb_poll()
1335 if (f->flag_iscomplete) { in usb_poll()
1345 f->flag_isselect = 1; in usb_poll()
1346 selrecord(td, &f->selinfo); in usb_poll()
1349 mtx_unlock(f->priv_mtx); in usb_poll()
1353 f = refs.rxfifo; in usb_poll()
1355 mtx_lock(f->priv_mtx); in usb_poll()
1358 if (f->flag_iserror) { in usb_poll()
1362 if (f->queue_data == NULL) { in usb_poll()
1367 (f->methods->f_start_read) (f); in usb_poll()
1370 USB_IF_POLL(&f->used_q, m); in usb_poll()
1373 if (f->flag_iscomplete) { in usb_poll()
1383 f->flag_isselect = 1; in usb_poll()
1384 selrecord(td, &f->selinfo); in usb_poll()
1388 (f->methods->f_start_read) (f); in usb_poll()
1392 mtx_unlock(f->priv_mtx); in usb_poll()
1403 struct usb_fifo *f; in usb_read() local
1417 f = refs.rxfifo; in usb_read()
1418 if (f == NULL) { in usb_read()
1424 mtx_lock(f->priv_mtx); in usb_read()
1427 if (f->flag_iserror) { in usb_read()
1441 USB_IF_DEQUEUE(&f->used_q, m); in usb_read()
1446 (f->methods->f_start_read) (f); in usb_read()
1458 err = usb_fifo_wait(f); in usb_read()
1464 if (f->methods->f_filter_read) { in usb_read()
1470 (f->methods->f_filter_read) (f, m); in usb_read()
1479 err = usb_fifo_uiomove(f, in usb_read()
1490 USB_IF_ENQUEUE(&f->free_q, m); in usb_read()
1497 USB_IF_PREPEND(&f->used_q, m); in usb_read()
1505 mtx_unlock(f->priv_mtx); in usb_read()
1517 struct usb_fifo *f; in usb_write() local
1534 f = refs.txfifo; in usb_write()
1535 if (f == NULL) { in usb_write()
1541 mtx_lock(f->priv_mtx); in usb_write()
1544 if (f->flag_iserror) { in usb_write()
1557 if (f->queue_data == NULL) { in usb_write()
1559 (f->methods->f_start_write) (f); in usb_write()
1563 USB_IF_DEQUEUE(&f->free_q, m); in usb_write()
1576 err = usb_fifo_wait(f); in usb_write()
1584 if (f->flag_have_fragment == 0) { in usb_write()
1602 err = usb_fifo_uiomove(f, pdata, io_len, uio); in usb_write()
1605 f->flag_have_fragment = 0; in usb_write()
1606 USB_IF_ENQUEUE(&f->free_q, m); in usb_write()
1612 if ((f->flag_write_defrag == 0) || in usb_write()
1614 f->flag_have_fragment = 0; in usb_write()
1623 if (f->methods->f_filter_write) { in usb_write()
1624 (f->methods->f_filter_write) (f, m); in usb_write()
1628 USB_IF_ENQUEUE(&f->used_q, m); in usb_write()
1631 (f->methods->f_start_write) (f); in usb_write()
1634 f->flag_have_fragment = 1; in usb_write()
1635 USB_IF_PREPEND(&f->free_q, m); in usb_write()
1640 mtx_unlock(f->priv_mtx); in usb_write()
1687 usb_fifo_uiomove(struct usb_fifo *f, void *cp, in usb_fifo_uiomove() argument
1692 mtx_unlock(f->priv_mtx); in usb_fifo_uiomove()
1700 mtx_lock(f->priv_mtx); in usb_fifo_uiomove()
1706 usb_fifo_wait(struct usb_fifo *f) in usb_fifo_wait() argument
1710 USB_MTX_ASSERT(f->priv_mtx, MA_OWNED); in usb_fifo_wait()
1712 if (f->flag_iserror) { in usb_fifo_wait()
1716 f->flag_sleeping = 1; in usb_fifo_wait()
1718 err = cv_wait_sig(&f->cv_io, f->priv_mtx); in usb_fifo_wait()
1720 if (f->flag_iserror) { in usb_fifo_wait()
1728 usb_fifo_signal(struct usb_fifo *f) in usb_fifo_signal() argument
1730 if (f->flag_sleeping) { in usb_fifo_signal()
1731 f->flag_sleeping = 0; in usb_fifo_signal()
1732 cv_broadcast(&f->cv_io); in usb_fifo_signal()
1737 usb_fifo_wakeup(struct usb_fifo *f) in usb_fifo_wakeup() argument
1739 usb_fifo_signal(f); in usb_fifo_wakeup()
1741 KNOTE_LOCKED(&f->selinfo.si_note, 0); in usb_fifo_wakeup()
1743 if (f->flag_isselect) { in usb_fifo_wakeup()
1744 selwakeup(&f->selinfo); in usb_fifo_wakeup()
1745 f->flag_isselect = 0; in usb_fifo_wakeup()
1747 if (f->async_p != NULL) { in usb_fifo_wakeup()
1748 PROC_LOCK(f->async_p); in usb_fifo_wakeup()
1749 kern_psignal(f->async_p, SIGIO); in usb_fifo_wakeup()
1750 PROC_UNLOCK(f->async_p); in usb_fifo_wakeup()
1938 usb_fifo_alloc_buffer(struct usb_fifo *f, usb_size_t bufsize, in usb_fifo_alloc_buffer() argument
1944 usb_fifo_free_buffer(f); in usb_fifo_alloc_buffer()
1954 mtx_lock(f->priv_mtx); in usb_fifo_alloc_buffer()
1960 f->free_q = temp_q; in usb_fifo_alloc_buffer()
1961 f->used_q.ifq_maxlen = nbuf; in usb_fifo_alloc_buffer()
1962 f->queue_data = queue_data; in usb_fifo_alloc_buffer()
1963 mtx_unlock(f->priv_mtx); in usb_fifo_alloc_buffer()
1975 usb_fifo_free_buffer(struct usb_fifo *f) in usb_fifo_free_buffer() argument
1979 mtx_lock(f->priv_mtx); in usb_fifo_free_buffer()
1982 queue_data = f->queue_data; in usb_fifo_free_buffer()
1983 f->queue_data = NULL; in usb_fifo_free_buffer()
1989 memset(&f->free_q, 0, sizeof(f->free_q)); in usb_fifo_free_buffer()
1990 memset(&f->used_q, 0, sizeof(f->used_q)); in usb_fifo_free_buffer()
1991 mtx_unlock(f->priv_mtx); in usb_fifo_free_buffer()
2017 usb_fifo_put_bytes_max(struct usb_fifo *f) in usb_fifo_put_bytes_max() argument
2022 USB_IF_POLL(&f->free_q, m); in usb_fifo_put_bytes_max()
2040 usb_fifo_put_data(struct usb_fifo *f, struct usb_page_cache *pc, in usb_fifo_put_data() argument
2047 USB_IF_DEQUEUE(&f->free_q, m); in usb_fifo_put_data()
2063 USB_IF_ENQUEUE(&f->used_q, m); in usb_fifo_put_data()
2065 usb_fifo_wakeup(f); in usb_fifo_put_data()
2077 usb_fifo_put_data_linear(struct usb_fifo *f, void *ptr, in usb_fifo_put_data_linear() argument
2084 USB_IF_DEQUEUE(&f->free_q, m); in usb_fifo_put_data_linear()
2100 USB_IF_ENQUEUE(&f->used_q, m); in usb_fifo_put_data_linear()
2102 usb_fifo_wakeup(f); in usb_fifo_put_data_linear()
2114 usb_fifo_put_data_buffer(struct usb_fifo *f, void *ptr, usb_size_t len) in usb_fifo_put_data_buffer() argument
2118 USB_IF_DEQUEUE(&f->free_q, m); in usb_fifo_put_data_buffer()
2123 USB_IF_ENQUEUE(&f->used_q, m); in usb_fifo_put_data_buffer()
2124 usb_fifo_wakeup(f); in usb_fifo_put_data_buffer()
2131 usb_fifo_put_data_error(struct usb_fifo *f) in usb_fifo_put_data_error() argument
2133 f->flag_iserror = 1; in usb_fifo_put_data_error()
2134 usb_fifo_wakeup(f); in usb_fifo_put_data_error()
2149 usb_fifo_get_data(struct usb_fifo *f, struct usb_page_cache *pc, in usb_fifo_get_data() argument
2160 USB_IF_DEQUEUE(&f->used_q, m); in usb_fifo_get_data()
2176 USB_IF_ENQUEUE(&f->free_q, m); in usb_fifo_get_data()
2178 usb_fifo_wakeup(f); in usb_fifo_get_data()
2184 USB_IF_PREPEND(&f->used_q, m); in usb_fifo_get_data()
2191 if (f->flag_flushing) { in usb_fifo_get_data()
2193 if (f->flag_short != 0) { in usb_fifo_get_data()
2194 f->flag_short = 0; in usb_fifo_get_data()
2199 f->flag_flushing = 0; in usb_fifo_get_data()
2200 usb_fifo_wakeup(f); in usb_fifo_get_data()
2212 usb_fifo_get_data_linear(struct usb_fifo *f, void *ptr, in usb_fifo_get_data_linear() argument
2222 USB_IF_DEQUEUE(&f->used_q, m); in usb_fifo_get_data_linear()
2238 USB_IF_ENQUEUE(&f->free_q, m); in usb_fifo_get_data_linear()
2240 usb_fifo_wakeup(f); in usb_fifo_get_data_linear()
2246 USB_IF_PREPEND(&f->used_q, m); in usb_fifo_get_data_linear()
2253 if (f->flag_flushing) { in usb_fifo_get_data_linear()
2255 if (f->flag_short != 0) { in usb_fifo_get_data_linear()
2256 f->flag_short = 0; in usb_fifo_get_data_linear()
2261 f->flag_flushing = 0; in usb_fifo_get_data_linear()
2262 usb_fifo_wakeup(f); in usb_fifo_get_data_linear()
2274 usb_fifo_get_data_buffer(struct usb_fifo *f, void **pptr, usb_size_t *plen) in usb_fifo_get_data_buffer() argument
2278 USB_IF_POLL(&f->used_q, m); in usb_fifo_get_data_buffer()
2290 usb_fifo_get_data_error(struct usb_fifo *f) in usb_fifo_get_data_error() argument
2292 f->flag_iserror = 1; in usb_fifo_get_data_error()
2293 usb_fifo_wakeup(f); in usb_fifo_get_data_error()
2437 usb_fifo_set_close_zlp(struct usb_fifo *f, uint8_t onoff) in usb_fifo_set_close_zlp() argument
2439 if (f == NULL) in usb_fifo_set_close_zlp()
2443 f->flag_short = onoff; in usb_fifo_set_close_zlp()
2447 usb_fifo_set_write_defrag(struct usb_fifo *f, uint8_t onoff) in usb_fifo_set_write_defrag() argument
2449 if (f == NULL) in usb_fifo_set_write_defrag()
2453 f->flag_write_defrag = onoff; in usb_fifo_set_write_defrag()
2455 f->flag_have_fragment = 0; in usb_fifo_set_write_defrag()
2459 usb_fifo_softc(struct usb_fifo *f) in usb_fifo_softc() argument
2461 return (f->priv_sc0); in usb_fifo_softc()