Lines Matching refs:epfile
893 static void __ffs_epfile_read_buffer_free(struct ffs_epfile *epfile) in __ffs_epfile_read_buffer_free() argument
899 struct ffs_buffer *buf = xchg(&epfile->read_buffer, READ_BUFFER_DROP); in __ffs_epfile_read_buffer_free()
905 static ssize_t __ffs_epfile_read_buffered(struct ffs_epfile *epfile, in __ffs_epfile_read_buffered() argument
913 struct ffs_buffer *buf = xchg(&epfile->read_buffer, NULL); in __ffs_epfile_read_buffered()
931 if (cmpxchg(&epfile->read_buffer, NULL, buf)) in __ffs_epfile_read_buffered()
938 static ssize_t __ffs_epfile_read_data(struct ffs_epfile *epfile, in __ffs_epfile_read_data() argument
969 if (cmpxchg(&epfile->read_buffer, NULL, buf)) in __ffs_epfile_read_data()
977 struct ffs_epfile *epfile = file->private_data; in ffs_epfile_wait_ep() local
982 ep = epfile->ep; in ffs_epfile_wait_ep()
988 epfile->ffs->wait, (ep = epfile->ep)); in ffs_epfile_wait_ep()
998 struct ffs_epfile *epfile = file->private_data; in ffs_epfile_io() local
1006 if (WARN_ON(epfile->ffs->state != FFS_ACTIVE)) in ffs_epfile_io()
1014 halt = (!io_data->read == !epfile->in); in ffs_epfile_io()
1015 if (halt && epfile->isoc) in ffs_epfile_io()
1019 ret = ffs_mutex_lock(&epfile->mutex, file->f_flags & O_NONBLOCK); in ffs_epfile_io()
1035 ret = __ffs_epfile_read_buffered(epfile, &io_data->data); in ffs_epfile_io()
1045 gadget = epfile->ffs->gadget; in ffs_epfile_io()
1047 spin_lock_irq(&epfile->ffs->eps_lock); in ffs_epfile_io()
1049 if (epfile->ep != ep) { in ffs_epfile_io()
1062 spin_unlock_irq(&epfile->ffs->eps_lock); in ffs_epfile_io()
1076 spin_lock_irq(&epfile->ffs->eps_lock); in ffs_epfile_io()
1078 if (epfile->ep != ep) { in ffs_epfile_io()
1123 spin_unlock_irq(&epfile->ffs->eps_lock); in ffs_epfile_io()
1126 spin_lock_irq(&epfile->ffs->eps_lock); in ffs_epfile_io()
1127 if (epfile->ep != ep) { in ffs_epfile_io()
1138 spin_unlock_irq(&epfile->ffs->eps_lock); in ffs_epfile_io()
1146 ret = __ffs_epfile_read_data(epfile, data, io_data->status, in ffs_epfile_io()
1167 io_data->ffs = epfile->ffs; in ffs_epfile_io()
1188 spin_unlock_irq(&epfile->ffs->eps_lock); in ffs_epfile_io()
1190 mutex_unlock(&epfile->mutex); in ffs_epfile_io()
1200 struct ffs_epfile *epfile = inode->i_private; in ffs_epfile_open() local
1202 if (WARN_ON(epfile->ffs->state != FFS_ACTIVE)) in ffs_epfile_open()
1205 file->private_data = epfile; in ffs_epfile_open()
1206 ffs_data_opened(epfile->ffs); in ffs_epfile_open()
1214 struct ffs_epfile *epfile = kiocb->ki_filp->private_data; in ffs_aio_cancel() local
1218 spin_lock_irqsave(&epfile->ffs->eps_lock, flags); in ffs_aio_cancel()
1225 spin_unlock_irqrestore(&epfile->ffs->eps_lock, flags); in ffs_aio_cancel()
1345 struct ffs_epfile *epfile = inode->i_private; in ffs_epfile_release() local
1347 struct ffs_data *ffs = epfile->ffs; in ffs_epfile_release()
1349 mutex_lock(&epfile->dmabufs_mutex); in ffs_epfile_release()
1352 list_for_each_entry_safe(priv, tmp, &epfile->dmabufs, entry) { in ffs_epfile_release()
1363 mutex_unlock(&epfile->dmabufs_mutex); in ffs_epfile_release()
1365 __ffs_epfile_read_buffer_free(epfile); in ffs_epfile_release()
1366 ffs_data_closed(epfile->ffs); in ffs_epfile_release()
1447 ffs_dmabuf_find_attachment(struct ffs_epfile *epfile, struct dma_buf *dmabuf) in ffs_dmabuf_find_attachment() argument
1449 struct device *dev = epfile->ffs->gadget->dev.parent; in ffs_dmabuf_find_attachment()
1453 mutex_lock(&epfile->dmabufs_mutex); in ffs_dmabuf_find_attachment()
1455 list_for_each_entry(priv, &epfile->dmabufs, entry) { in ffs_dmabuf_find_attachment()
1466 mutex_unlock(&epfile->dmabufs_mutex); in ffs_dmabuf_find_attachment()
1474 struct ffs_epfile *epfile = file->private_data; in ffs_dmabuf_attach() local
1475 struct usb_gadget *gadget = epfile->ffs->gadget; in ffs_dmabuf_attach()
1502 dir = epfile->in ? DMA_FROM_DEVICE : DMA_TO_DEVICE; in ffs_dmabuf_attach()
1520 priv->ffs = epfile->ffs; in ffs_dmabuf_attach()
1526 mutex_lock(&epfile->dmabufs_mutex); in ffs_dmabuf_attach()
1527 list_add(&priv->entry, &epfile->dmabufs); in ffs_dmabuf_attach()
1528 mutex_unlock(&epfile->dmabufs_mutex); in ffs_dmabuf_attach()
1544 struct ffs_epfile *epfile = file->private_data; in ffs_dmabuf_detach() local
1545 struct ffs_data *ffs = epfile->ffs; in ffs_dmabuf_detach()
1555 mutex_lock(&epfile->dmabufs_mutex); in ffs_dmabuf_detach()
1557 list_for_each_entry_safe(priv, tmp, &epfile->dmabufs, entry) { in ffs_dmabuf_detach()
1575 mutex_unlock(&epfile->dmabufs_mutex); in ffs_dmabuf_detach()
1585 struct ffs_epfile *epfile = file->private_data; in ffs_dmabuf_transfer() local
1611 attach = ffs_dmabuf_find_attachment(epfile, dmabuf); in ffs_dmabuf_transfer()
1632 dma_resv_usage_rw(epfile->in), in ffs_dmabuf_transfer()
1653 spin_lock_irq(&epfile->ffs->eps_lock); in ffs_dmabuf_transfer()
1656 if (epfile->ep != ep) { in ffs_dmabuf_transfer()
1672 seqno = atomic_add_return(1, &epfile->seqno); in ffs_dmabuf_transfer()
1677 resv_dir = epfile->in ? DMA_RESV_USAGE_WRITE : DMA_RESV_USAGE_READ; in ffs_dmabuf_transfer()
1704 spin_unlock_irq(&epfile->ffs->eps_lock); in ffs_dmabuf_transfer()
1710 spin_unlock_irq(&epfile->ffs->eps_lock); in ffs_dmabuf_transfer()
1725 struct ffs_epfile *epfile = file->private_data; in ffs_epfile_ioctl() local
1729 if (WARN_ON(epfile->ffs->state != FFS_ACTIVE)) in ffs_epfile_ioctl()
1775 spin_lock_irq(&epfile->ffs->eps_lock); in ffs_epfile_ioctl()
1778 if (epfile->ep != ep) { in ffs_epfile_ioctl()
1779 spin_unlock_irq(&epfile->ffs->eps_lock); in ffs_epfile_ioctl()
1785 ret = usb_ep_fifo_status(epfile->ep->ep); in ffs_epfile_ioctl()
1788 usb_ep_fifo_flush(epfile->ep->ep); in ffs_epfile_ioctl()
1792 ret = usb_ep_clear_halt(epfile->ep->ep); in ffs_epfile_ioctl()
1795 ret = epfile->ep->num; in ffs_epfile_ioctl()
1802 switch (epfile->ffs->gadget->speed) { in ffs_epfile_ioctl()
1814 desc = epfile->ep->descs[desc_idx]; in ffs_epfile_ioctl()
1817 spin_unlock_irq(&epfile->ffs->eps_lock); in ffs_epfile_ioctl()
1826 spin_unlock_irq(&epfile->ffs->eps_lock); in ffs_epfile_ioctl()
2334 struct ffs_epfile *epfile, *epfiles; in ffs_epfiles_create() local
2342 epfile = epfiles; in ffs_epfiles_create()
2343 for (i = 1; i <= count; ++i, ++epfile) { in ffs_epfiles_create()
2344 epfile->ffs = ffs; in ffs_epfiles_create()
2345 mutex_init(&epfile->mutex); in ffs_epfiles_create()
2346 mutex_init(&epfile->dmabufs_mutex); in ffs_epfiles_create()
2347 INIT_LIST_HEAD(&epfile->dmabufs); in ffs_epfiles_create()
2349 sprintf(epfile->name, "ep%02x", ffs->eps_addrmap[i]); in ffs_epfiles_create()
2351 sprintf(epfile->name, "ep%u", i); in ffs_epfiles_create()
2352 epfile->dentry = ffs_sb_create_file(ffs->sb, epfile->name, in ffs_epfiles_create()
2353 epfile, in ffs_epfiles_create()
2355 if (!epfile->dentry) { in ffs_epfiles_create()
2367 struct ffs_epfile *epfile = epfiles; in ffs_epfiles_destroy() local
2369 for (; count; --count, ++epfile) { in ffs_epfiles_destroy()
2370 BUG_ON(mutex_is_locked(&epfile->mutex)); in ffs_epfiles_destroy()
2371 if (epfile->dentry) { in ffs_epfiles_destroy()
2372 d_delete(epfile->dentry); in ffs_epfiles_destroy()
2373 dput(epfile->dentry); in ffs_epfiles_destroy()
2374 epfile->dentry = NULL; in ffs_epfiles_destroy()
2384 struct ffs_epfile *epfile; in ffs_func_eps_disable() local
2390 epfile = func->ffs->epfiles; in ffs_func_eps_disable()
2398 if (epfile) { in ffs_func_eps_disable()
2399 epfile->ep = NULL; in ffs_func_eps_disable()
2400 __ffs_epfile_read_buffer_free(epfile); in ffs_func_eps_disable()
2401 ++epfile; in ffs_func_eps_disable()
2411 struct ffs_epfile *epfile; in ffs_func_eps_enable() local
2419 epfile = ffs->epfiles; in ffs_func_eps_enable()
2433 epfile->ep = ep; in ffs_func_eps_enable()
2434 epfile->in = usb_endpoint_dir_in(ep->ep->desc); in ffs_func_eps_enable()
2435 epfile->isoc = usb_endpoint_xfer_isoc(ep->ep->desc); in ffs_func_eps_enable()
2441 ++epfile; in ffs_func_eps_enable()