Lines Matching refs:f

111 static int	ugen_get_iface_driver(struct usb_fifo *f, struct usb_gen_descriptor *ugd);
115 static int ugen_fs_uninit(struct usb_fifo *f);
142 ugen_transfer_setup(struct usb_fifo *f, in ugen_transfer_setup() argument
145 struct usb_endpoint *ep = usb_fifo_softc(f); in ugen_transfer_setup()
146 struct usb_device *udev = f->udev; in ugen_transfer_setup()
150 mtx_unlock(f->priv_mtx); in ugen_transfer_setup()
156 error = usbd_transfer_setup(udev, &iface_index, f->xfer, in ugen_transfer_setup()
157 setup, n_setup, f, f->priv_mtx); in ugen_transfer_setup()
159 if (f->xfer[0]->nframes == 1) { in ugen_transfer_setup()
160 error = usb_fifo_alloc_buffer(f, in ugen_transfer_setup()
161 f->xfer[0]->max_data_length, 2); in ugen_transfer_setup()
163 error = usb_fifo_alloc_buffer(f, in ugen_transfer_setup()
164 f->xfer[0]->max_frame_size, in ugen_transfer_setup()
165 2 * f->xfer[0]->nframes); in ugen_transfer_setup()
168 usbd_transfer_unsetup(f->xfer, n_setup); in ugen_transfer_setup()
171 mtx_lock(f->priv_mtx); in ugen_transfer_setup()
177 ugen_open(struct usb_fifo *f, int fflags) in ugen_open() argument
179 struct usb_endpoint *ep = usb_fifo_softc(f); in ugen_open()
186 mtx_lock(f->priv_mtx); in ugen_open()
187 switch (usbd_get_speed(f->udev)) { in ugen_open()
190 f->nframes = UGEN_HW_FRAMES; in ugen_open()
191 f->bufsize = UGEN_BULK_FS_BUFFER_SIZE; in ugen_open()
194 f->nframes = UGEN_HW_FRAMES * 8; in ugen_open()
195 f->bufsize = UGEN_BULK_HS_BUFFER_SIZE; in ugen_open()
201 f->bufsize = 0; /* use "wMaxPacketSize" */ in ugen_open()
203 f->timeout = USB_NO_TIMEOUT; in ugen_open()
204 f->flag_short = 0; in ugen_open()
205 f->fifo_zlp = 0; in ugen_open()
206 mtx_unlock(f->priv_mtx); in ugen_open()
212 ugen_close(struct usb_fifo *f, int fflags) in ugen_close() argument
220 mtx_lock(f->priv_mtx); in ugen_close()
221 usbd_transfer_stop(f->xfer[0]); in ugen_close()
222 usbd_transfer_stop(f->xfer[1]); in ugen_close()
223 mtx_unlock(f->priv_mtx); in ugen_close()
225 usbd_transfer_unsetup(f->xfer, 2); in ugen_close()
226 usb_fifo_free_buffer(f); in ugen_close()
228 if (ugen_fs_uninit(f)) { in ugen_close()
235 ugen_open_pipe_write(struct usb_fifo *f) in ugen_open_pipe_write() argument
238 struct usb_endpoint *ep = usb_fifo_softc(f); in ugen_open_pipe_write()
241 USB_MTX_ASSERT(f->priv_mtx, MA_OWNED); in ugen_open_pipe_write()
243 if (f->xfer[0] || f->xfer[1]) { in ugen_open_pipe_write()
269 if (f->flag_short) { in ugen_open_pipe_write()
273 usb_config[0].timeout = f->timeout; in ugen_open_pipe_write()
275 usb_config[0].bufsize = f->bufsize; in ugen_open_pipe_write()
276 if (ugen_transfer_setup(f, usb_config, 2)) { in ugen_open_pipe_write()
280 f->flag_stall = 0; in ugen_open_pipe_write()
286 usb_config[0].frames = f->nframes; in ugen_open_pipe_write()
293 if (ugen_transfer_setup(f, usb_config, 2)) { in ugen_open_pipe_write()
304 ugen_open_pipe_read(struct usb_fifo *f) in ugen_open_pipe_read() argument
307 struct usb_endpoint *ep = usb_fifo_softc(f); in ugen_open_pipe_read()
310 USB_MTX_ASSERT(f->priv_mtx, MA_OWNED); in ugen_open_pipe_read()
312 if (f->xfer[0] || f->xfer[1]) { in ugen_open_pipe_read()
338 if (f->flag_short) { in ugen_open_pipe_read()
341 usb_config[0].timeout = f->timeout; in ugen_open_pipe_read()
344 usb_config[0].bufsize = f->bufsize; in ugen_open_pipe_read()
346 if (ugen_transfer_setup(f, usb_config, 2)) { in ugen_open_pipe_read()
350 f->flag_stall = 0; in ugen_open_pipe_read()
356 usb_config[0].frames = f->nframes; in ugen_open_pipe_read()
363 if (ugen_transfer_setup(f, usb_config, 2)) { in ugen_open_pipe_read()
375 ugen_start_read(struct usb_fifo *f) in ugen_start_read() argument
378 if (ugen_open_pipe_read(f)) { in ugen_start_read()
380 usb_fifo_put_data_error(f); in ugen_start_read()
383 usbd_transfer_start(f->xfer[0]); in ugen_start_read()
384 usbd_transfer_start(f->xfer[1]); in ugen_start_read()
388 ugen_start_write(struct usb_fifo *f) in ugen_start_write() argument
391 if (ugen_open_pipe_write(f)) { in ugen_start_write()
393 usb_fifo_get_data_error(f); in ugen_start_write()
396 usbd_transfer_start(f->xfer[0]); in ugen_start_write()
397 usbd_transfer_start(f->xfer[1]); in ugen_start_write()
401 ugen_stop_io(struct usb_fifo *f) in ugen_stop_io() argument
404 usbd_transfer_stop(f->xfer[0]); in ugen_stop_io()
405 usbd_transfer_stop(f->xfer[1]); in ugen_stop_io()
411 struct usb_fifo *f = usbd_xfer_softc(xfer); in ugen_ctrl_read_callback() local
419 if (f->fifo_zlp != 4) { in ugen_ctrl_read_callback()
420 f->fifo_zlp++; in ugen_ctrl_read_callback()
431 f->fifo_zlp = 0; in ugen_ctrl_read_callback()
433 usb_fifo_put_data(f, xfer->frbuffers, 0, in ugen_ctrl_read_callback()
437 if (f->flag_stall) { in ugen_ctrl_read_callback()
438 usbd_transfer_start(f->xfer[1]); in ugen_ctrl_read_callback()
441 USB_IF_POLL(&f->free_q, m); in ugen_ctrl_read_callback()
451 usb_fifo_put_data(f, xfer->frbuffers, 0, 0, 1); in ugen_ctrl_read_callback()
452 f->flag_stall = 1; in ugen_ctrl_read_callback()
453 f->fifo_zlp = 0; in ugen_ctrl_read_callback()
454 usbd_transfer_start(f->xfer[1]); in ugen_ctrl_read_callback()
463 struct usb_fifo *f = usbd_xfer_softc(xfer); in ugen_ctrl_write_callback() local
475 if (f->flag_stall) { in ugen_ctrl_write_callback()
476 usbd_transfer_start(f->xfer[1]); in ugen_ctrl_write_callback()
482 if (usb_fifo_get_data(f, xfer->frbuffers, 0, in ugen_ctrl_write_callback()
491 f->flag_stall = 1; in ugen_ctrl_write_callback()
492 usbd_transfer_start(f->xfer[1]); in ugen_ctrl_write_callback()
501 struct usb_fifo *f = usbd_xfer_softc(xfer); in ugen_read_clear_stall_callback() local
502 struct usb_xfer *xfer_other = f->xfer[0]; in ugen_read_clear_stall_callback()
504 if (f->flag_stall == 0) { in ugen_read_clear_stall_callback()
509 DPRINTFN(5, "f=%p: stall cleared\n", f); in ugen_read_clear_stall_callback()
510 f->flag_stall = 0; in ugen_read_clear_stall_callback()
518 struct usb_fifo *f = usbd_xfer_softc(xfer); in ugen_write_clear_stall_callback() local
519 struct usb_xfer *xfer_other = f->xfer[0]; in ugen_write_clear_stall_callback()
521 if (f->flag_stall == 0) { in ugen_write_clear_stall_callback()
526 DPRINTFN(5, "f=%p: stall cleared\n", f); in ugen_write_clear_stall_callback()
527 f->flag_stall = 0; in ugen_write_clear_stall_callback()
535 struct usb_fifo *f = usbd_xfer_softc(xfer); in ugen_isoc_read_callback() local
549 usb_fifo_put_data(f, xfer->frbuffers, offset, in ugen_isoc_read_callback()
574 struct usb_fifo *f = usbd_xfer_softc(xfer); in ugen_isoc_write_callback() local
587 if (usb_fifo_get_data(f, xfer->frbuffers, offset, in ugen_isoc_write_callback()
612 ugen_set_config(struct usb_fifo *f, uint8_t index) in ugen_set_config() argument
616 if (f->udev->flags.usb_mode != USB_MODE_HOST) { in ugen_set_config()
623 if (ugen_fs_uninit(f)) { in ugen_set_config()
628 if (usbd_start_set_config(f->udev, index) != 0) in ugen_set_config()
635 ugen_set_interface(struct usb_fifo *f, in ugen_set_interface() argument
640 if (f->udev->flags.usb_mode != USB_MODE_HOST) { in ugen_set_interface()
646 if (ugen_fs_uninit(f)) { in ugen_set_interface()
651 if (usbd_set_alt_interface_index(f->udev, iface_index, alt_index)) { in ugen_set_interface()
655 if (usb_probe_and_attach(f->udev, iface_index)) { in ugen_set_interface()
668 ugen_get_cdesc(struct usb_fifo *f, struct usb_gen_descriptor *ugd) in ugen_get_cdesc() argument
671 struct usb_device *udev = f->udev; in ugen_get_cdesc()
720 ugen_get_sdesc(struct usb_fifo *f, struct usb_gen_descriptor *ugd) in ugen_get_sdesc() argument
728 do_unlock = usbd_ctrl_lock(f->udev); in ugen_get_sdesc()
730 ptr = f->udev->scratch.data; in ugen_get_sdesc()
731 size = sizeof(f->udev->scratch.data); in ugen_get_sdesc()
733 if (usbd_req_get_string_desc(f->udev, NULL, ptr, in ugen_get_sdesc()
749 usbd_ctrl_unlock(f->udev); in ugen_get_sdesc()
764 ugen_get_iface_driver(struct usb_fifo *f, struct usb_gen_descriptor *ugd) in ugen_get_iface_driver() argument
766 struct usb_device *udev = f->udev; in ugen_get_iface_driver()
825 ugen_fill_deviceinfo(struct usb_fifo *f, struct usb_device_info *di) in ugen_fill_deviceinfo() argument
830 udev = f->udev; in ugen_fill_deviceinfo()
866 ugen_do_request(struct usb_fifo *f, struct usb_ctl_request *ur) in ugen_do_request() argument
872 if (usb_check_request(f->udev, &ur->ucr_request)) { in ugen_do_request()
885 (f->udev, NULL, &ur->ucr_request, ur->ucr_data, in ugen_do_request()
902 ugen_re_enumerate(struct usb_fifo *f) in ugen_re_enumerate() argument
904 struct usb_device *udev = f->udev; in ugen_re_enumerate()
921 if (ugen_fs_uninit(f)) { in ugen_re_enumerate()
931 ugen_fs_uninit(struct usb_fifo *f) in ugen_fs_uninit() argument
933 if (f->fs_xfer == NULL) { in ugen_fs_uninit()
936 usbd_transfer_unsetup(f->fs_xfer, f->fs_ep_max); in ugen_fs_uninit()
937 free(f->fs_xfer, M_USB); in ugen_fs_uninit()
938 f->fs_xfer = NULL; in ugen_fs_uninit()
939 f->fs_ep_max = 0; in ugen_fs_uninit()
940 f->fs_ep_ptr = NULL; in ugen_fs_uninit()
941 f->flag_iscomplete = 0; in ugen_fs_uninit()
942 usb_fifo_free_buffer(f); in ugen_fs_uninit()
947 ugen_fs_get_complete(struct usb_fifo *f, uint8_t *pindex) in ugen_fs_get_complete() argument
951 USB_IF_DEQUEUE(&f->used_q, m); in ugen_fs_get_complete()
956 USB_IF_ENQUEUE(&f->free_q, m); in ugen_fs_get_complete()
962 f->flag_iscomplete = 0; in ugen_fs_get_complete()
968 ugen_fs_set_complete(struct usb_fifo *f, uint8_t index) in ugen_fs_set_complete() argument
972 USB_IF_DEQUEUE(&f->free_q, m); in ugen_fs_set_complete()
983 USB_IF_ENQUEUE(&f->used_q, m); in ugen_fs_set_complete()
985 f->flag_iscomplete = 1; in ugen_fs_set_complete()
987 usb_fifo_wakeup(f); in ugen_fs_set_complete()
991 ugen_fs_copy_in(struct usb_fifo *f, uint8_t ep_index) in ugen_fs_copy_in() argument
1005 if (ep_index >= f->fs_ep_max) { in ugen_fs_copy_in()
1008 xfer = f->fs_xfer[ep_index]; in ugen_fs_copy_in()
1012 mtx_lock(f->priv_mtx); in ugen_fs_copy_in()
1014 mtx_unlock(f->priv_mtx); in ugen_fs_copy_in()
1017 mtx_unlock(f->priv_mtx); in ugen_fs_copy_in()
1019 error = copyin(f->fs_ep_ptr + in ugen_fs_copy_in()
1060 if (usb_check_request(f->udev, req)) { in ugen_fs_copy_in()
1157 mtx_lock(f->priv_mtx); in ugen_fs_copy_in()
1158 ugen_fs_set_complete(f, ep_index); in ugen_fs_copy_in()
1159 mtx_unlock(f->priv_mtx); in ugen_fs_copy_in()
1198 ugen_fs_copy_out(struct usb_fifo *f, uint8_t ep_index) in ugen_fs_copy_out() argument
1214 if (ep_index >= f->fs_ep_max) in ugen_fs_copy_out()
1217 xfer = f->fs_xfer[ep_index]; in ugen_fs_copy_out()
1221 mtx_lock(f->priv_mtx); in ugen_fs_copy_out()
1224 mtx_unlock(f->priv_mtx); in ugen_fs_copy_out()
1226 return (ugen_fs_copy_out_cancelled(f->fs_ep_ptr + ep_index)); in ugen_fs_copy_out()
1228 mtx_unlock(f->priv_mtx); in ugen_fs_copy_out()
1231 mtx_unlock(f->priv_mtx); in ugen_fs_copy_out()
1233 fs_ep_uptr = f->fs_ep_ptr + ep_index; in ugen_fs_copy_out()
1355 ugen_fifo_in_use(struct usb_fifo *f, int fflags) in ugen_fifo_in_use() argument
1360 f_rx = f->udev->fifo[(f->fifo_index & ~1) + USB_FIFO_RX]; in ugen_fifo_in_use()
1361 f_tx = f->udev->fifo[(f->fifo_index & ~1) + USB_FIFO_TX]; in ugen_fifo_in_use()
1375 ugen_ioctl(struct usb_fifo *f, u_long cmd, void *addr, int fflags) in ugen_ioctl() argument
1404 mtx_lock(f->priv_mtx); in ugen_ioctl()
1405 error = ugen_fs_get_complete(f, &ep_index); in ugen_ioctl()
1406 mtx_unlock(f->priv_mtx); in ugen_ioctl()
1413 error = ugen_fs_copy_out(f, u.pcomp->ep_index); in ugen_ioctl()
1417 error = ugen_fs_copy_in(f, u.pstart->ep_index); in ugen_ioctl()
1420 mtx_lock(f->priv_mtx); in ugen_ioctl()
1421 xfer = f->fs_xfer[u.pstart->ep_index]; in ugen_ioctl()
1423 mtx_unlock(f->priv_mtx); in ugen_ioctl()
1427 if (u.pstop->ep_index >= f->fs_ep_max) { in ugen_ioctl()
1431 mtx_lock(f->priv_mtx); in ugen_ioctl()
1432 xfer = f->fs_xfer[u.pstart->ep_index]; in ugen_ioctl()
1448 mtx_unlock(f->priv_mtx); in ugen_ioctl()
1453 if (u.popen->ep_index >= f->fs_ep_max) { in ugen_ioctl()
1457 if (f->fs_xfer[u.popen->ep_index] != NULL) { in ugen_ioctl()
1478 ep = usbd_get_ep_by_addr(f->udev, u.popen->ep_no); in ugen_ioctl()
1508 if (f->udev->flags.usb_mode != USB_MODE_HOST) { in ugen_ioctl()
1516 if (f->udev->flags.usb_mode != USB_MODE_HOST) { in ugen_ioctl()
1532 error = usbd_transfer_setup(f->udev, &iface_index, in ugen_ioctl()
1533 f->fs_xfer + u.popen->ep_index, usb_config, 1, in ugen_ioctl()
1534 f, f->priv_mtx); in ugen_ioctl()
1538 f->fs_xfer[u.popen->ep_index]->max_frame_size; in ugen_ioctl()
1540 f->fs_xfer[u.popen->ep_index]->max_data_length; in ugen_ioctl()
1543 f->fs_xfer[u.popen->ep_index]->nframes; in ugen_ioctl()
1545 f->fs_xfer[u.popen->ep_index]->priv_fifo = in ugen_ioctl()
1553 if (u.pclose->ep_index >= f->fs_ep_max) { in ugen_ioctl()
1557 if (f->fs_xfer[u.pclose->ep_index] == NULL) { in ugen_ioctl()
1561 usbd_transfer_unsetup(f->fs_xfer + u.pclose->ep_index, 1); in ugen_ioctl()
1565 if (u.pstall->ep_index >= f->fs_ep_max) { in ugen_ioctl()
1569 if (f->fs_xfer[u.pstall->ep_index] == NULL) { in ugen_ioctl()
1573 if (f->udev->flags.usb_mode != USB_MODE_HOST) { in ugen_ioctl()
1577 mtx_lock(f->priv_mtx); in ugen_ioctl()
1578 error = usbd_transfer_pending(f->fs_xfer[u.pstall->ep_index]); in ugen_ioctl()
1579 mtx_unlock(f->priv_mtx); in ugen_ioctl()
1584 ep = f->fs_xfer[u.pstall->ep_index]->endpoint; in ugen_ioctl()
1594 error = usbd_do_request(f->udev, NULL, &req, NULL); in ugen_ioctl()
1596 usbd_clear_data_toggle(f->udev, ep); in ugen_ioctl()
1613 ugen_set_short_xfer(struct usb_fifo *f, void *addr) in ugen_set_short_xfer() argument
1622 if (f->flag_short == t) { in ugen_set_short_xfer()
1626 if (f->xfer[0] || f->xfer[1]) { in ugen_set_short_xfer()
1630 f->flag_short = t; in ugen_set_short_xfer()
1635 ugen_set_timeout(struct usb_fifo *f, void *addr) in ugen_set_timeout() argument
1637 f->timeout = *(int *)addr; in ugen_set_timeout()
1638 if (f->timeout > 65535) { in ugen_set_timeout()
1640 f->timeout = 65535; in ugen_set_timeout()
1646 ugen_get_frame_size(struct usb_fifo *f, void *addr) in ugen_get_frame_size() argument
1648 if (f->xfer[0]) { in ugen_get_frame_size()
1649 *(int *)addr = f->xfer[0]->max_frame_size; in ugen_get_frame_size()
1657 ugen_set_buffer_size(struct usb_fifo *f, void *addr) in ugen_set_buffer_size() argument
1668 if (f->bufsize == t) { in ugen_set_buffer_size()
1672 if (f->xfer[0] || f->xfer[1]) { in ugen_set_buffer_size()
1676 f->bufsize = t; in ugen_set_buffer_size()
1681 ugen_get_buffer_size(struct usb_fifo *f, void *addr) in ugen_get_buffer_size() argument
1683 *(int *)addr = f->bufsize; in ugen_get_buffer_size()
1688 ugen_get_iface_desc(struct usb_fifo *f, in ugen_get_iface_desc() argument
1693 iface = usbd_get_iface(f->udev, f->iface_index); in ugen_get_iface_desc()
1703 ugen_get_endpoint_desc(struct usb_fifo *f, in ugen_get_endpoint_desc() argument
1708 ep = usb_fifo_softc(f); in ugen_get_endpoint_desc()
1719 ugen_set_power_mode(struct usb_fifo *f, int mode) in ugen_set_power_mode() argument
1721 struct usb_device *udev = f->udev; in ugen_set_power_mode()
1808 ugen_get_power_mode(struct usb_fifo *f) in ugen_get_power_mode() argument
1810 struct usb_device *udev = f->udev; in ugen_get_power_mode()
1819 ugen_get_port_path(struct usb_fifo *f, struct usb_device_port_path *dpp) in ugen_get_port_path() argument
1821 struct usb_device *udev = f->udev; in ugen_get_port_path()
1858 ugen_get_power_usage(struct usb_fifo *f) in ugen_get_power_usage() argument
1860 struct usb_device *udev = f->udev; in ugen_get_power_usage()
1869 ugen_do_port_feature(struct usb_fifo *f, uint8_t port_no, in ugen_do_port_feature() argument
1872 struct usb_device *udev = f->udev; in ugen_do_port_feature()
1906 ugen_iface_ioctl(struct usb_fifo *f, u_long cmd, void *addr, int fflags) in ugen_iface_ioctl() argument
1912 f_rx = f->udev->fifo[(f->fifo_index & ~1) + USB_FIFO_RX]; in ugen_iface_ioctl()
1913 f_tx = f->udev->fifo[(f->fifo_index & ~1) + USB_FIFO_TX]; in ugen_iface_ioctl()
2048 ugen_ioctl_post(struct usb_fifo *f, u_long cmd, void *addr, int fflags) in ugen_ioctl_post() argument
2087 *(int *)addr = f->udev->curr_config_index; in ugen_ioctl_post()
2095 error = ugen_set_config(f, *(int *)addr); in ugen_ioctl_post()
2099 iface = usbd_get_iface(f->udev, in ugen_ioctl_post()
2113 error = ugen_set_interface(f, in ugen_ioctl_post()
2118 dtemp = usbd_get_device_descriptor(f->udev); in ugen_ioctl_post()
2127 ctemp = usbd_get_config_descriptor(f->udev); in ugen_ioctl_post()
2136 error = ugen_get_cdesc(f, addr); in ugen_ioctl_post()
2140 error = ugen_get_sdesc(f, addr); in ugen_ioctl_post()
2144 error = ugen_get_iface_driver(f, addr); in ugen_ioctl_post()
2153 error = ugen_do_request(f, addr); in ugen_ioctl_post()
2158 error = ugen_fill_deviceinfo(f, addr); in ugen_ioctl_post()
2164 f->udev->stats_err.uds_requests[n]; in ugen_ioctl_post()
2166 f->udev->stats_ok.uds_requests[n]; in ugen_ioctl_post()
2171 error = ugen_re_enumerate(f); in ugen_ioctl_post()
2175 *u.ptime = f->udev->plugtime; in ugen_ioctl_post()
2187 iface = usbd_get_iface(f->udev, n); in ugen_ioctl_post()
2212 usb_detach_device(f->udev, n, 0); in ugen_ioctl_post()
2218 usbd_set_parent_iface(f->udev, n, n); in ugen_ioctl_post()
2222 error = ugen_set_power_mode(f, *u.pint); in ugen_ioctl_post()
2226 *u.pint = ugen_get_power_mode(f); in ugen_ioctl_post()
2230 error = ugen_get_port_path(f, u.dpp); in ugen_ioctl_post()
2234 *u.pint = ugen_get_power_usage(f); in ugen_ioctl_post()
2238 error = ugen_do_port_feature(f, in ugen_ioctl_post()
2243 error = ugen_do_port_feature(f, in ugen_ioctl_post()
2261 if (f->fs_xfer != NULL) { in ugen_ioctl_post()
2265 if (f->dev_ep_index != 0) { in ugen_ioctl_post()
2269 if (ugen_fifo_in_use(f, fflags)) { in ugen_ioctl_post()
2273 error = usb_fifo_alloc_buffer(f, 1, u.pinit->ep_index_max); in ugen_ioctl_post()
2277 f->fs_xfer = malloc(sizeof(f->fs_xfer[0]) * in ugen_ioctl_post()
2279 f->fs_ep_max = u.pinit->ep_index_max; in ugen_ioctl_post()
2280 f->fs_ep_ptr = u.pinit->pEndpoints; in ugen_ioctl_post()
2288 error = ugen_fs_uninit(f); in ugen_ioctl_post()
2292 mtx_lock(f->priv_mtx); in ugen_ioctl_post()
2293 error = ugen_iface_ioctl(f, cmd, addr, fflags); in ugen_ioctl_post()
2294 mtx_unlock(f->priv_mtx); in ugen_ioctl_post()