Lines Matching +full:dbg +full:- +full:halt
1 // SPDX-License-Identifier: GPL-2.0+
3 * inode.c -- user mode filesystem api for usb gadget controllers
5 * Copyright (C) 2003-2004 David Brownell
43 * Key parts that must be USB-specific are protocols defining how the
49 * - First, dev_config() is called when /dev/gadget/$CHIP is configured
54 * - Then, after a SET_CONFIGURATION control request, ep_config() is
57 * IN data or to read() OUT data. To halt the endpoint, a "wrong
79 /*----------------------------------------------------------------------*/
96 * - (UN)CONNECTED: read usb_gadgetfs_event(s) from it
97 * - SETUP: read/write will transfer control data and succeed;
137 /* the rest is basically write-once */
154 refcount_inc (&data->count); in get_dev()
159 if (likely (!refcount_dec_and_test (&data->count))) in put_dev()
162 BUG_ON (waitqueue_active (&data->wait)); in put_dev()
173 dev->state = STATE_DEV_DISABLED; in dev_new()
174 refcount_set (&dev->count, 1); in dev_new()
175 spin_lock_init (&dev->lock); in dev_new()
176 INIT_LIST_HEAD (&dev->epfiles); in dev_new()
177 init_waitqueue_head (&dev->wait); in dev_new()
181 /*----------------------------------------------------------------------*/
196 /* must hold dev->lock before accessing ep or req */
209 refcount_inc (&data->count); in get_ep()
214 if (likely (!refcount_dec_and_test (&data->count))) in put_ep()
216 put_dev (data->dev); in put_ep()
218 BUG_ON (!list_empty (&data->epfiles)); in put_ep()
219 BUG_ON (waitqueue_active (&data->wait)); in put_ep()
223 /*----------------------------------------------------------------------*/
234 /*----------------------------------------------------------------------*/
240 /* too wordy: dev_printk(level , &(d)->gadget->dev , fmt , ## args) */
245 #define DBG(dev,fmt,args...) \ macro
248 #define DBG(dev,fmt,args...) \ macro
253 #define VDEBUG DBG
265 /*----------------------------------------------------------------------*/
269 * After opening, configure non-control endpoints. Then use normal
276 struct ep_data *epdata = ep->driver_data; in epio_complete()
278 if (!req->context) in epio_complete()
280 if (req->status) in epio_complete()
281 epdata->status = req->status; in epio_complete()
283 epdata->status = req->actual; in epio_complete()
284 complete ((struct completion *)req->context); in epio_complete()
288 * still need dev->lock to use epdata->ep.
296 if (!mutex_trylock(&epdata->lock)) in get_ready_ep()
298 if (epdata->state != STATE_EP_ENABLED && in get_ready_ep()
299 (!is_write || epdata->state != STATE_EP_READY)) { in get_ready_ep()
300 mutex_unlock(&epdata->lock); in get_ready_ep()
302 val = -EAGAIN; in get_ready_ep()
308 val = mutex_lock_interruptible(&epdata->lock); in get_ready_ep()
312 switch (epdata->state) { in get_ready_ep()
324 shortname, epdata, epdata->state); in get_ready_ep()
326 mutex_unlock(&epdata->lock); in get_ready_ep()
327 return -ENODEV; in get_ready_ep()
336 spin_lock_irq (&epdata->dev->lock); in ep_io()
337 if (likely (epdata->ep != NULL)) { in ep_io()
338 struct usb_request *req = epdata->req; in ep_io()
340 req->context = &done; in ep_io()
341 req->complete = epio_complete; in ep_io()
342 req->buf = buf; in ep_io()
343 req->length = len; in ep_io()
344 value = usb_ep_queue (epdata->ep, req, GFP_ATOMIC); in ep_io()
346 value = -ENODEV; in ep_io()
347 spin_unlock_irq (&epdata->dev->lock); in ep_io()
352 spin_lock_irq (&epdata->dev->lock); in ep_io()
353 if (likely (epdata->ep != NULL)) { in ep_io()
354 DBG (epdata->dev, "%s i/o interrupted\n", in ep_io()
355 epdata->name); in ep_io()
356 usb_ep_dequeue (epdata->ep, epdata->req); in ep_io()
357 spin_unlock_irq (&epdata->dev->lock); in ep_io()
360 if (epdata->status == -ECONNRESET) in ep_io()
361 epdata->status = -EINTR; in ep_io()
363 spin_unlock_irq (&epdata->dev->lock); in ep_io()
365 DBG (epdata->dev, "endpoint gone\n"); in ep_io()
367 epdata->status = -ENODEV; in ep_io()
370 return epdata->status; in ep_io()
378 struct ep_data *data = fd->private_data; in ep_release()
381 value = mutex_lock_interruptible(&data->lock); in ep_release()
386 if (data->state != STATE_EP_UNBOUND) { in ep_release()
387 data->state = STATE_EP_DISABLED; in ep_release()
388 data->desc.bDescriptorType = 0; in ep_release()
389 data->hs_desc.bDescriptorType = 0; in ep_release()
390 usb_ep_disable(data->ep); in ep_release()
392 mutex_unlock(&data->lock); in ep_release()
399 struct ep_data *data = fd->private_data; in ep_ioctl()
402 if ((status = get_ready_ep (fd->f_flags, data, false)) < 0) in ep_ioctl()
405 spin_lock_irq (&data->dev->lock); in ep_ioctl()
406 if (likely (data->ep != NULL)) { in ep_ioctl()
409 status = usb_ep_fifo_status (data->ep); in ep_ioctl()
412 usb_ep_fifo_flush (data->ep); in ep_ioctl()
415 status = usb_ep_clear_halt (data->ep); in ep_ioctl()
418 status = -ENOTTY; in ep_ioctl()
421 status = -ENODEV; in ep_ioctl()
422 spin_unlock_irq (&data->dev->lock); in ep_ioctl()
423 mutex_unlock(&data->lock); in ep_ioctl()
427 /*----------------------------------------------------------------------*/
445 struct kiocb_priv *priv = iocb->private; in ep_aio_cancel()
450 epdata = priv->epdata; in ep_aio_cancel()
451 // spin_lock(&epdata->dev->lock); in ep_aio_cancel()
452 if (likely(epdata && epdata->ep && priv->req)) in ep_aio_cancel()
453 value = usb_ep_dequeue (epdata->ep, priv->req); in ep_aio_cancel()
455 value = -EINVAL; in ep_aio_cancel()
456 // spin_unlock(&epdata->dev->lock); in ep_aio_cancel()
465 struct mm_struct *mm = priv->mm; in ep_user_copy_worker()
466 struct kiocb *iocb = priv->iocb; in ep_user_copy_worker()
470 ret = copy_to_iter(priv->buf, priv->actual, &priv->to); in ep_user_copy_worker()
473 ret = -EFAULT; in ep_user_copy_worker()
476 iocb->ki_complete(iocb, ret, ret); in ep_user_copy_worker()
478 kfree(priv->buf); in ep_user_copy_worker()
479 kfree(priv->to_free); in ep_user_copy_worker()
485 struct kiocb *iocb = req->context; in ep_aio_complete()
486 struct kiocb_priv *priv = iocb->private; in ep_aio_complete()
487 struct ep_data *epdata = priv->epdata; in ep_aio_complete()
490 spin_lock(&epdata->dev->lock); in ep_aio_complete()
491 priv->req = NULL; in ep_aio_complete()
492 priv->epdata = NULL; in ep_aio_complete()
498 if (priv->to_free == NULL || unlikely(req->actual == 0)) { in ep_aio_complete()
499 kfree(req->buf); in ep_aio_complete()
500 kfree(priv->to_free); in ep_aio_complete()
502 iocb->private = NULL; in ep_aio_complete()
503 /* aio_complete() reports bytes-transferred _and_ faults */ in ep_aio_complete()
505 iocb->ki_complete(iocb, req->actual ? req->actual : req->status, in ep_aio_complete()
506 req->status); in ep_aio_complete()
509 if (unlikely(0 != req->status)) in ep_aio_complete()
510 DBG(epdata->dev, "%s fault %d len %d\n", in ep_aio_complete()
511 ep->name, req->status, req->actual); in ep_aio_complete()
513 priv->buf = req->buf; in ep_aio_complete()
514 priv->actual = req->actual; in ep_aio_complete()
515 INIT_WORK(&priv->work, ep_user_copy_worker); in ep_aio_complete()
516 schedule_work(&priv->work); in ep_aio_complete()
520 spin_unlock(&epdata->dev->lock); in ep_aio_complete()
533 iocb->private = priv; in ep_aio()
534 priv->iocb = iocb; in ep_aio()
538 priv->epdata = epdata; in ep_aio()
539 priv->actual = 0; in ep_aio()
540 priv->mm = current->mm; /* mm teardown waits for iocbs in exit_aio() */ in ep_aio()
545 spin_lock_irq(&epdata->dev->lock); in ep_aio()
546 value = -ENODEV; in ep_aio()
547 if (unlikely(epdata->ep == NULL)) in ep_aio()
550 req = usb_ep_alloc_request(epdata->ep, GFP_ATOMIC); in ep_aio()
551 value = -ENOMEM; in ep_aio()
555 priv->req = req; in ep_aio()
556 req->buf = buf; in ep_aio()
557 req->length = len; in ep_aio()
558 req->complete = ep_aio_complete; in ep_aio()
559 req->context = iocb; in ep_aio()
560 value = usb_ep_queue(epdata->ep, req, GFP_ATOMIC); in ep_aio()
562 usb_ep_free_request(epdata->ep, req); in ep_aio()
565 spin_unlock_irq(&epdata->dev->lock); in ep_aio()
566 return -EIOCBQUEUED; in ep_aio()
569 spin_unlock_irq(&epdata->dev->lock); in ep_aio()
570 kfree(priv->to_free); in ep_aio()
579 struct file *file = iocb->ki_filp; in ep_read_iter()
580 struct ep_data *epdata = file->private_data; in ep_read_iter()
585 if ((value = get_ready_ep(file->f_flags, epdata, false)) < 0) in ep_read_iter()
588 /* halt any endpoint by doing a "wrong direction" i/o call */ in ep_read_iter()
589 if (usb_endpoint_dir_in(&epdata->desc)) { in ep_read_iter()
590 if (usb_endpoint_xfer_isoc(&epdata->desc) || in ep_read_iter()
592 mutex_unlock(&epdata->lock); in ep_read_iter()
593 return -EINVAL; in ep_read_iter()
595 DBG (epdata->dev, "%s halt\n", epdata->name); in ep_read_iter()
596 spin_lock_irq(&epdata->dev->lock); in ep_read_iter()
597 if (likely(epdata->ep != NULL)) in ep_read_iter()
598 usb_ep_set_halt(epdata->ep); in ep_read_iter()
599 spin_unlock_irq(&epdata->dev->lock); in ep_read_iter()
600 mutex_unlock(&epdata->lock); in ep_read_iter()
601 return -EBADMSG; in ep_read_iter()
606 mutex_unlock(&epdata->lock); in ep_read_iter()
607 return -ENOMEM; in ep_read_iter()
612 value = -EFAULT; in ep_read_iter()
615 value = -ENOMEM; in ep_read_iter()
618 priv->to_free = dup_iter(&priv->to, to, GFP_KERNEL); in ep_read_iter()
619 if (!priv->to_free) { in ep_read_iter()
624 if (value == -EIOCBQUEUED) in ep_read_iter()
629 mutex_unlock(&epdata->lock); in ep_read_iter()
638 struct file *file = iocb->ki_filp; in ep_write_iter()
639 struct ep_data *epdata = file->private_data; in ep_write_iter()
645 if ((value = get_ready_ep(file->f_flags, epdata, true)) < 0) in ep_write_iter()
648 configured = epdata->state == STATE_EP_ENABLED; in ep_write_iter()
650 /* halt any endpoint by doing a "wrong direction" i/o call */ in ep_write_iter()
651 if (configured && !usb_endpoint_dir_in(&epdata->desc)) { in ep_write_iter()
652 if (usb_endpoint_xfer_isoc(&epdata->desc) || in ep_write_iter()
654 mutex_unlock(&epdata->lock); in ep_write_iter()
655 return -EINVAL; in ep_write_iter()
657 DBG (epdata->dev, "%s halt\n", epdata->name); in ep_write_iter()
658 spin_lock_irq(&epdata->dev->lock); in ep_write_iter()
659 if (likely(epdata->ep != NULL)) in ep_write_iter()
660 usb_ep_set_halt(epdata->ep); in ep_write_iter()
661 spin_unlock_irq(&epdata->dev->lock); in ep_write_iter()
662 mutex_unlock(&epdata->lock); in ep_write_iter()
663 return -EBADMSG; in ep_write_iter()
668 mutex_unlock(&epdata->lock); in ep_write_iter()
669 return -ENOMEM; in ep_write_iter()
673 value = -EFAULT; in ep_write_iter()
683 value = -ENOMEM; in ep_write_iter()
686 if (value == -EIOCBQUEUED) in ep_write_iter()
692 mutex_unlock(&epdata->lock); in ep_write_iter()
696 /*----------------------------------------------------------------------*/
730 if (data->state != STATE_EP_READY) { in ep_config()
731 value = -EL2HLT; in ep_config()
742 DBG(data->dev, "config %s, bad tag %d\n", data->name, tag); in ep_config()
746 len -= 4; in ep_config()
753 memcpy(&data->desc, buf, USB_DT_ENDPOINT_SIZE); in ep_config()
754 if (data->desc.bLength != USB_DT_ENDPOINT_SIZE in ep_config()
755 || data->desc.bDescriptorType != USB_DT_ENDPOINT) in ep_config()
760 memcpy(&data->hs_desc, buf + USB_DT_ENDPOINT_SIZE, in ep_config()
762 if (data->hs_desc.bLength != USB_DT_ENDPOINT_SIZE in ep_config()
763 || data->hs_desc.bDescriptorType in ep_config()
765 DBG(data->dev, "config %s, bad hs length or type\n", in ep_config()
766 data->name); in ep_config()
771 spin_lock_irq (&data->dev->lock); in ep_config()
772 if (data->dev->state == STATE_DEV_UNBOUND) { in ep_config()
773 value = -ENOENT; in ep_config()
776 ep = data->ep; in ep_config()
778 value = -ENODEV; in ep_config()
782 switch (data->dev->gadget->speed) { in ep_config()
785 ep->desc = &data->desc; in ep_config()
789 ep->desc = &data->hs_desc; in ep_config()
792 DBG(data->dev, "unconnected, %s init abandoned\n", in ep_config()
793 data->name); in ep_config()
794 value = -EINVAL; in ep_config()
799 data->state = STATE_EP_ENABLED; in ep_config()
803 spin_unlock_irq (&data->dev->lock); in ep_config()
806 data->desc.bDescriptorType = 0; in ep_config()
807 data->hs_desc.bDescriptorType = 0; in ep_config()
811 value = -EINVAL; in ep_config()
818 struct ep_data *data = inode->i_private; in ep_open()
819 int value = -EBUSY; in ep_open()
821 if (mutex_lock_interruptible(&data->lock) != 0) in ep_open()
822 return -EINTR; in ep_open()
823 spin_lock_irq (&data->dev->lock); in ep_open()
824 if (data->dev->state == STATE_DEV_UNBOUND) in ep_open()
825 value = -ENOENT; in ep_open()
826 else if (data->state == STATE_EP_DISABLED) { in ep_open()
828 data->state = STATE_EP_READY; in ep_open()
830 fd->private_data = data; in ep_open()
831 VDEBUG (data->dev, "%s ready\n", data->name); in ep_open()
833 DBG (data->dev, "%s state %d\n", in ep_open()
834 data->name, data->state); in ep_open()
835 spin_unlock_irq (&data->dev->lock); in ep_open()
836 mutex_unlock(&data->lock); in ep_open()
840 /*----------------------------------------------------------------------*/
846 * use this facility may be too simple-minded for real applications.
851 wake_up (&dev->wait); in ep0_readable()
852 kill_fasync (&dev->fasync, SIGIO, POLL_IN); in ep0_readable()
857 struct dev_data *dev = ep->driver_data; in clean_req()
859 if (req->buf != dev->rbuf) { in clean_req()
860 kfree(req->buf); in clean_req()
861 req->buf = dev->rbuf; in clean_req()
863 req->complete = epio_complete; in clean_req()
864 dev->setup_out_ready = 0; in clean_req()
869 struct dev_data *dev = ep->driver_data; in ep0_complete()
874 spin_lock_irqsave(&dev->lock, flags); in ep0_complete()
875 if (!dev->setup_in) { in ep0_complete()
876 dev->setup_out_error = (req->status != 0); in ep0_complete()
877 if (!dev->setup_out_error) in ep0_complete()
879 dev->setup_out_ready = 1; in ep0_complete()
884 if (free && req->buf != &dev->rbuf) in ep0_complete()
886 req->complete = epio_complete; in ep0_complete()
887 spin_unlock_irqrestore(&dev->lock, flags); in ep0_complete()
892 struct dev_data *dev = ep->driver_data; in setup_req()
894 if (dev->setup_out_ready) { in setup_req()
895 DBG (dev, "ep0 request busy!\n"); in setup_req()
896 return -EBUSY; in setup_req()
898 if (len > sizeof (dev->rbuf)) in setup_req()
899 req->buf = kmalloc(len, GFP_ATOMIC); in setup_req()
900 if (req->buf == NULL) { in setup_req()
901 req->buf = dev->rbuf; in setup_req()
902 return -ENOMEM; in setup_req()
904 req->complete = ep0_complete; in setup_req()
905 req->length = len; in setup_req()
906 req->zero = 0; in setup_req()
913 struct dev_data *dev = fd->private_data; in ep0_read()
917 spin_lock_irq (&dev->lock); in ep0_read()
918 if (dev->state <= STATE_DEV_OPENED) { in ep0_read()
919 retval = -EINVAL; in ep0_read()
924 if (dev->setup_abort) { in ep0_read()
925 dev->setup_abort = 0; in ep0_read()
926 retval = -EIDRM; in ep0_read()
931 if ((state = dev->state) == STATE_DEV_SETUP) { in ep0_read()
933 if (dev->setup_in) { /* stall IN */ in ep0_read()
935 (void) usb_ep_set_halt (dev->gadget->ep0); in ep0_read()
936 retval = -EL2HLT; in ep0_read()
937 dev->state = STATE_DEV_CONNECTED; in ep0_read()
940 struct usb_ep *ep = dev->gadget->ep0; in ep0_read()
941 struct usb_request *req = dev->req; in ep0_read()
944 ++dev->udc_usage; in ep0_read()
945 spin_unlock_irq (&dev->lock); in ep0_read()
947 spin_lock_irq (&dev->lock); in ep0_read()
948 --dev->udc_usage; in ep0_read()
950 dev->state = STATE_DEV_CONNECTED; in ep0_read()
953 if (dev->current_config) { in ep0_read()
956 if (gadget_is_dualspeed(dev->gadget) in ep0_read()
957 && (dev->gadget->speed in ep0_read()
959 power = dev->hs_config->bMaxPower; in ep0_read()
961 power = dev->config->bMaxPower; in ep0_read()
962 usb_gadget_vbus_draw(dev->gadget, 2 * power); in ep0_read()
966 if ((fd->f_flags & O_NONBLOCK) != 0 in ep0_read()
967 && !dev->setup_out_ready) { in ep0_read()
968 retval = -EAGAIN; in ep0_read()
971 spin_unlock_irq (&dev->lock); in ep0_read()
972 retval = wait_event_interruptible (dev->wait, in ep0_read()
973 dev->setup_out_ready != 0); in ep0_read()
976 spin_lock_irq (&dev->lock); in ep0_read()
980 if (dev->state != STATE_DEV_SETUP) { in ep0_read()
981 retval = -ECANCELED; in ep0_read()
984 dev->state = STATE_DEV_CONNECTED; in ep0_read()
986 if (dev->setup_out_error) in ep0_read()
987 retval = -EIO; in ep0_read()
989 len = min (len, (size_t)dev->req->actual); in ep0_read()
990 ++dev->udc_usage; in ep0_read()
991 spin_unlock_irq(&dev->lock); in ep0_read()
992 if (copy_to_user (buf, dev->req->buf, len)) in ep0_read()
993 retval = -EFAULT; in ep0_read()
996 spin_lock_irq(&dev->lock); in ep0_read()
997 --dev->udc_usage; in ep0_read()
998 clean_req (dev->gadget->ep0, dev->req); in ep0_read()
1006 if (len < sizeof dev->event [0]) { in ep0_read()
1007 retval = -EINVAL; in ep0_read()
1010 len -= len % sizeof (struct usb_gadgetfs_event); in ep0_read()
1011 dev->usermode_setup = 1; in ep0_read()
1015 if (dev->ev_next != 0) { in ep0_read()
1019 if (dev->ev_next < n) in ep0_read()
1020 n = dev->ev_next; in ep0_read()
1024 if (dev->event [i].type == GADGETFS_SETUP) { in ep0_read()
1025 dev->state = STATE_DEV_SETUP; in ep0_read()
1030 spin_unlock_irq (&dev->lock); in ep0_read()
1032 if (copy_to_user (buf, &dev->event, len)) in ep0_read()
1033 retval = -EFAULT; in ep0_read()
1040 spin_lock_irq (&dev->lock); in ep0_read()
1041 if (dev->ev_next > n) { in ep0_read()
1042 memmove(&dev->event[0], &dev->event[n], in ep0_read()
1044 * (dev->ev_next - n)); in ep0_read()
1046 dev->ev_next -= n; in ep0_read()
1047 spin_unlock_irq (&dev->lock); in ep0_read()
1051 if (fd->f_flags & O_NONBLOCK) { in ep0_read()
1052 retval = -EAGAIN; in ep0_read()
1058 DBG (dev, "fail %s, state %d\n", __func__, state); in ep0_read()
1059 retval = -ESRCH; in ep0_read()
1063 spin_unlock_irq (&dev->lock); in ep0_read()
1064 DBG (dev, "%s wait\n", __func__); in ep0_read()
1067 retval = wait_event_interruptible (dev->wait, in ep0_read()
1068 dev->ev_next != 0); in ep0_read()
1071 spin_lock_irq (&dev->lock); in ep0_read()
1076 spin_unlock_irq (&dev->lock); in ep0_read()
1089 if (dev->state == STATE_DEV_SETUP) in next_event()
1090 dev->setup_abort = 1; in next_event()
1093 dev->ev_next = 0; in next_event()
1098 for (i = 0; i != dev->ev_next; i++) { in next_event()
1099 if (dev->event [i].type != type) in next_event()
1101 DBG(dev, "discard old event[%d] %d\n", i, type); in next_event()
1102 dev->ev_next--; in next_event()
1103 if (i == dev->ev_next) in next_event()
1106 memmove (&dev->event [i], &dev->event [i + 1], in next_event()
1108 * (dev->ev_next - i)); in next_event()
1114 VDEBUG(dev, "event[%d] = %d\n", dev->ev_next, type); in next_event()
1115 event = &dev->event [dev->ev_next++]; in next_event()
1116 BUG_ON (dev->ev_next > N_EVENT); in next_event()
1118 event->type = type; in next_event()
1125 struct dev_data *dev = fd->private_data; in ep0_write()
1126 ssize_t retval = -ESRCH; in ep0_write()
1129 if (dev->setup_abort) { in ep0_write()
1130 dev->setup_abort = 0; in ep0_write()
1131 retval = -EIDRM; in ep0_write()
1134 } else if (dev->state == STATE_DEV_SETUP) { in ep0_write()
1136 len = min_t(size_t, len, dev->setup_wLength); in ep0_write()
1137 if (dev->setup_in) { in ep0_write()
1138 retval = setup_req (dev->gadget->ep0, dev->req, len); in ep0_write()
1140 dev->state = STATE_DEV_CONNECTED; in ep0_write()
1141 ++dev->udc_usage; in ep0_write()
1142 spin_unlock_irq (&dev->lock); in ep0_write()
1143 if (copy_from_user (dev->req->buf, buf, len)) in ep0_write()
1144 retval = -EFAULT; in ep0_write()
1146 if (len < dev->setup_wLength) in ep0_write()
1147 dev->req->zero = 1; in ep0_write()
1149 dev->gadget->ep0, dev->req, in ep0_write()
1152 spin_lock_irq(&dev->lock); in ep0_write()
1153 --dev->udc_usage; in ep0_write()
1155 clean_req (dev->gadget->ep0, dev->req); in ep0_write()
1163 } else if (dev->setup_can_stall) { in ep0_write()
1165 (void) usb_ep_set_halt (dev->gadget->ep0); in ep0_write()
1166 retval = -EL2HLT; in ep0_write()
1167 dev->state = STATE_DEV_CONNECTED; in ep0_write()
1169 DBG(dev, "bogus ep0out stall!\n"); in ep0_write()
1172 DBG (dev, "fail %s, state %d\n", __func__, dev->state); in ep0_write()
1180 struct dev_data *dev = fd->private_data; in ep0_fasync()
1183 return fasync_helper (f, fd, on, &dev->fasync); in ep0_fasync()
1191 struct dev_data *dev = fd->private_data; in dev_release()
1195 if (dev->gadget_registered) { in dev_release()
1197 dev->gadget_registered = false; in dev_release()
1205 kfree (dev->buf); in dev_release()
1206 dev->buf = NULL; in dev_release()
1209 spin_lock_irq(&dev->lock); in dev_release()
1210 dev->state = STATE_DEV_DISABLED; in dev_release()
1211 spin_unlock_irq(&dev->lock); in dev_release()
1220 struct dev_data *dev = fd->private_data; in ep0_poll()
1223 if (dev->state <= STATE_DEV_OPENED) in ep0_poll()
1226 poll_wait(fd, &dev->wait, wait); in ep0_poll()
1228 spin_lock_irq(&dev->lock); in ep0_poll()
1231 if (dev->setup_abort) { in ep0_poll()
1232 dev->setup_abort = 0; in ep0_poll()
1237 if (dev->state == STATE_DEV_SETUP) { in ep0_poll()
1238 if (dev->setup_in || dev->setup_can_stall) in ep0_poll()
1241 if (dev->ev_next != 0) in ep0_poll()
1245 spin_unlock_irq(&dev->lock); in ep0_poll()
1251 struct dev_data *dev = fd->private_data; in dev_ioctl()
1252 struct usb_gadget *gadget = dev->gadget; in dev_ioctl()
1253 long ret = -ENOTTY; in dev_ioctl()
1255 spin_lock_irq(&dev->lock); in dev_ioctl()
1256 if (dev->state == STATE_DEV_OPENED || in dev_ioctl()
1257 dev->state == STATE_DEV_UNBOUND) { in dev_ioctl()
1259 } else if (gadget->ops->ioctl) { in dev_ioctl()
1260 ++dev->udc_usage; in dev_ioctl()
1261 spin_unlock_irq(&dev->lock); in dev_ioctl()
1263 ret = gadget->ops->ioctl (gadget, code, value); in dev_ioctl()
1265 spin_lock_irq(&dev->lock); in dev_ioctl()
1266 --dev->udc_usage; in dev_ioctl()
1268 spin_unlock_irq(&dev->lock); in dev_ioctl()
1273 /*----------------------------------------------------------------------*/
1275 /* The in-kernel gadget driver handles most ep0 issues, in particular
1290 desc = dev->dev; in make_qualifier()
1291 qual.bDeviceClass = desc->bDeviceClass; in make_qualifier()
1292 qual.bDeviceSubClass = desc->bDeviceSubClass; in make_qualifier()
1293 qual.bDeviceProtocol = desc->bDeviceProtocol; in make_qualifier()
1296 qual.bMaxPacketSize0 = dev->gadget->ep0->maxpacket; in make_qualifier()
1301 memcpy (dev->rbuf, &qual, sizeof qual); in make_qualifier()
1312 return -EINVAL; in config_buf()
1314 if (gadget_is_dualspeed(dev->gadget)) { in config_buf()
1315 hs = (dev->gadget->speed == USB_SPEED_HIGH); in config_buf()
1320 dev->req->buf = dev->hs_config; in config_buf()
1321 len = le16_to_cpu(dev->hs_config->wTotalLength); in config_buf()
1323 dev->req->buf = dev->config; in config_buf()
1324 len = le16_to_cpu(dev->config->wTotalLength); in config_buf()
1326 ((u8 *)dev->req->buf) [1] = type; in config_buf()
1334 struct usb_request *req = dev->req; in gadgetfs_setup()
1335 int value = -EOPNOTSUPP; in gadgetfs_setup()
1337 u16 w_value = le16_to_cpu(ctrl->wValue); in gadgetfs_setup()
1338 u16 w_length = le16_to_cpu(ctrl->wLength); in gadgetfs_setup()
1341 if (ctrl->bRequestType & USB_DIR_IN) { in gadgetfs_setup()
1343 __le16 *temp = (__le16 *)&ctrl->wLength; in gadgetfs_setup()
1352 spin_lock (&dev->lock); in gadgetfs_setup()
1353 dev->setup_abort = 0; in gadgetfs_setup()
1354 if (dev->state == STATE_DEV_UNCONNECTED) { in gadgetfs_setup()
1356 && gadget->speed == USB_SPEED_HIGH in gadgetfs_setup()
1357 && dev->hs_config == NULL) { in gadgetfs_setup()
1358 spin_unlock(&dev->lock); in gadgetfs_setup()
1360 return -EINVAL; in gadgetfs_setup()
1363 dev->state = STATE_DEV_CONNECTED; in gadgetfs_setup()
1367 event->u.speed = gadget->speed; in gadgetfs_setup()
1375 } else if (dev->state == STATE_DEV_SETUP) in gadgetfs_setup()
1376 dev->setup_abort = 1; in gadgetfs_setup()
1378 req->buf = dev->rbuf; in gadgetfs_setup()
1379 req->context = NULL; in gadgetfs_setup()
1380 switch (ctrl->bRequest) { in gadgetfs_setup()
1383 if (ctrl->bRequestType != USB_DIR_IN) in gadgetfs_setup()
1388 value = min (w_length, (u16) sizeof *dev->dev); in gadgetfs_setup()
1389 dev->dev->bMaxPacketSize0 = dev->gadget->ep0->maxpacket; in gadgetfs_setup()
1390 req->buf = dev->dev; in gadgetfs_setup()
1393 if (!dev->hs_config) in gadgetfs_setup()
1417 if (ctrl->bRequestType != 0) in gadgetfs_setup()
1421 dev->current_config = 0; in gadgetfs_setup()
1428 && gadget->speed == USB_SPEED_HIGH) { in gadgetfs_setup()
1429 config = dev->hs_config->bConfigurationValue; in gadgetfs_setup()
1430 power = dev->hs_config->bMaxPower; in gadgetfs_setup()
1432 config = dev->config->bConfigurationValue; in gadgetfs_setup()
1433 power = dev->config->bMaxPower; in gadgetfs_setup()
1438 dev->current_config = config; in gadgetfs_setup()
1453 INFO (dev, "configuration #%d\n", dev->current_config); in gadgetfs_setup()
1455 if (dev->usermode_setup) { in gadgetfs_setup()
1456 dev->setup_can_stall = 0; in gadgetfs_setup()
1465 if (ctrl->bRequestType != 0x80) in gadgetfs_setup()
1467 *(u8 *)req->buf = dev->current_config; in gadgetfs_setup()
1475 dev->usermode_setup ? "delegate" : "fail", in gadgetfs_setup()
1476 ctrl->bRequestType, ctrl->bRequest, in gadgetfs_setup()
1477 w_value, le16_to_cpu(ctrl->wIndex), w_length); in gadgetfs_setup()
1480 if (dev->usermode_setup) { in gadgetfs_setup()
1481 dev->setup_can_stall = 1; in gadgetfs_setup()
1483 dev->setup_in = (ctrl->bRequestType & USB_DIR_IN) in gadgetfs_setup()
1485 dev->setup_wLength = w_length; in gadgetfs_setup()
1486 dev->setup_out_ready = 0; in gadgetfs_setup()
1487 dev->setup_out_error = 0; in gadgetfs_setup()
1490 if (unlikely (!dev->setup_in && w_length)) { in gadgetfs_setup()
1491 value = setup_req (gadget->ep0, dev->req, in gadgetfs_setup()
1496 ++dev->udc_usage; in gadgetfs_setup()
1497 spin_unlock (&dev->lock); in gadgetfs_setup()
1498 value = usb_ep_queue (gadget->ep0, dev->req, in gadgetfs_setup()
1500 spin_lock (&dev->lock); in gadgetfs_setup()
1501 --dev->udc_usage; in gadgetfs_setup()
1503 clean_req (gadget->ep0, dev->req); in gadgetfs_setup()
1508 dev->setup_can_stall = 0; in gadgetfs_setup()
1513 event->u.setup = *ctrl; in gadgetfs_setup()
1515 spin_unlock (&dev->lock); in gadgetfs_setup()
1521 if (value >= 0 && dev->state != STATE_DEV_SETUP) { in gadgetfs_setup()
1522 req->length = value; in gadgetfs_setup()
1523 req->zero = value < w_length; in gadgetfs_setup()
1525 ++dev->udc_usage; in gadgetfs_setup()
1526 spin_unlock (&dev->lock); in gadgetfs_setup()
1527 value = usb_ep_queue (gadget->ep0, req, GFP_KERNEL); in gadgetfs_setup()
1528 spin_lock(&dev->lock); in gadgetfs_setup()
1529 --dev->udc_usage; in gadgetfs_setup()
1530 spin_unlock(&dev->lock); in gadgetfs_setup()
1532 DBG (dev, "ep_queue --> %d\n", value); in gadgetfs_setup()
1533 req->status = 0; in gadgetfs_setup()
1539 spin_unlock (&dev->lock); in gadgetfs_setup()
1545 DBG (dev, "%s %d\n", __func__, dev->state); in destroy_ep_files()
1547 /* dev->state must prevent interference */ in destroy_ep_files()
1548 spin_lock_irq (&dev->lock); in destroy_ep_files()
1549 while (!list_empty(&dev->epfiles)) { in destroy_ep_files()
1555 ep = list_first_entry (&dev->epfiles, struct ep_data, epfiles); in destroy_ep_files()
1556 list_del_init (&ep->epfiles); in destroy_ep_files()
1557 spin_unlock_irq (&dev->lock); in destroy_ep_files()
1559 dentry = ep->dentry; in destroy_ep_files()
1560 ep->dentry = NULL; in destroy_ep_files()
1561 parent = d_inode(dentry->d_parent); in destroy_ep_files()
1564 mutex_lock(&ep->lock); in destroy_ep_files()
1565 if (ep->state == STATE_EP_ENABLED) in destroy_ep_files()
1566 (void) usb_ep_disable (ep->ep); in destroy_ep_files()
1567 ep->state = STATE_EP_UNBOUND; in destroy_ep_files()
1568 usb_ep_free_request (ep->ep, ep->req); in destroy_ep_files()
1569 ep->ep = NULL; in destroy_ep_files()
1570 mutex_unlock(&ep->lock); in destroy_ep_files()
1572 wake_up (&ep->wait); in destroy_ep_files()
1581 spin_lock_irq (&dev->lock); in destroy_ep_files()
1583 spin_unlock_irq (&dev->lock); in destroy_ep_files()
1596 gadget_for_each_ep (ep, dev->gadget) { in activate_ep_files()
1601 data->state = STATE_EP_DISABLED; in activate_ep_files()
1602 mutex_init(&data->lock); in activate_ep_files()
1603 init_waitqueue_head (&data->wait); in activate_ep_files()
1605 strncpy (data->name, ep->name, sizeof (data->name) - 1); in activate_ep_files()
1606 refcount_set (&data->count, 1); in activate_ep_files()
1607 data->dev = dev; in activate_ep_files()
1610 data->ep = ep; in activate_ep_files()
1611 ep->driver_data = data; in activate_ep_files()
1613 data->req = usb_ep_alloc_request (ep, GFP_KERNEL); in activate_ep_files()
1614 if (!data->req) in activate_ep_files()
1617 data->dentry = gadgetfs_create_file (dev->sb, data->name, in activate_ep_files()
1619 if (!data->dentry) in activate_ep_files()
1621 list_add_tail (&data->epfiles, &dev->epfiles); in activate_ep_files()
1626 usb_ep_free_request (ep, data->req); in activate_ep_files()
1631 DBG (dev, "%s enomem\n", __func__); in activate_ep_files()
1633 return -ENOMEM; in activate_ep_files()
1641 DBG (dev, "%s\n", __func__); in gadgetfs_unbind()
1643 spin_lock_irq (&dev->lock); in gadgetfs_unbind()
1644 dev->state = STATE_DEV_UNBOUND; in gadgetfs_unbind()
1645 while (dev->udc_usage > 0) { in gadgetfs_unbind()
1646 spin_unlock_irq(&dev->lock); in gadgetfs_unbind()
1648 spin_lock_irq(&dev->lock); in gadgetfs_unbind()
1650 spin_unlock_irq (&dev->lock); in gadgetfs_unbind()
1653 gadget->ep0->driver_data = NULL; in gadgetfs_unbind()
1657 if (dev->req) in gadgetfs_unbind()
1658 usb_ep_free_request (gadget->ep0, dev->req); in gadgetfs_unbind()
1659 DBG (dev, "%s done\n", __func__); in gadgetfs_unbind()
1671 return -ESRCH; in gadgetfs_bind()
1672 if (0 != strcmp (CHIP, gadget->name)) { in gadgetfs_bind()
1674 shortname, CHIP, gadget->name); in gadgetfs_bind()
1675 return -ENODEV; in gadgetfs_bind()
1679 dev->gadget = gadget; in gadgetfs_bind()
1680 gadget->ep0->driver_data = dev; in gadgetfs_bind()
1683 dev->req = usb_ep_alloc_request (gadget->ep0, GFP_KERNEL); in gadgetfs_bind()
1684 if (!dev->req) in gadgetfs_bind()
1686 dev->req->context = NULL; in gadgetfs_bind()
1687 dev->req->complete = epio_complete; in gadgetfs_bind()
1692 INFO (dev, "bound to %s driver\n", gadget->name); in gadgetfs_bind()
1693 spin_lock_irq(&dev->lock); in gadgetfs_bind()
1694 dev->state = STATE_DEV_UNCONNECTED; in gadgetfs_bind()
1695 spin_unlock_irq(&dev->lock); in gadgetfs_bind()
1701 return -ENOMEM; in gadgetfs_bind()
1710 spin_lock_irqsave (&dev->lock, flags); in gadgetfs_disconnect()
1711 if (dev->state == STATE_DEV_UNCONNECTED) in gadgetfs_disconnect()
1713 dev->state = STATE_DEV_UNCONNECTED; in gadgetfs_disconnect()
1719 spin_unlock_irqrestore (&dev->lock, flags); in gadgetfs_disconnect()
1728 INFO (dev, "suspended from state %d\n", dev->state); in gadgetfs_suspend()
1729 spin_lock_irqsave(&dev->lock, flags); in gadgetfs_suspend()
1730 switch (dev->state) { in gadgetfs_suspend()
1740 spin_unlock_irqrestore(&dev->lock, flags); in gadgetfs_suspend()
1757 /*----------------------------------------------------------------------*/
1768 * would change to support features like multi-config devices
1772 * this one's optional except for high-speed hardware
1787 return config->bDescriptorType == USB_DT_CONFIG in is_valid_config()
1788 && config->bLength == USB_DT_CONFIG_SIZE in is_valid_config()
1790 && config->bConfigurationValue != 0 in is_valid_config()
1791 && (config->bmAttributes & USB_CONFIG_ATT_ONE) != 0 in is_valid_config()
1792 && (config->bmAttributes & USB_CONFIG_ATT_WAKEUP) == 0; in is_valid_config()
1793 /* FIXME if gadget->is_otg, _must_ include an otg descriptor */ in is_valid_config()
1800 struct dev_data *dev = fd->private_data; in dev_config()
1806 spin_lock_irq(&dev->lock); in dev_config()
1807 if (dev->state > STATE_DEV_OPENED) { in dev_config()
1809 spin_unlock_irq(&dev->lock); in dev_config()
1812 spin_unlock_irq(&dev->lock); in dev_config()
1816 return -EINVAL; in dev_config()
1820 return -EFAULT; in dev_config()
1822 return -EINVAL; in dev_config()
1824 length -= 4; in dev_config()
1830 spin_lock_irq (&dev->lock); in dev_config()
1831 value = -EINVAL; in dev_config()
1832 if (dev->buf) { in dev_config()
1833 spin_unlock_irq(&dev->lock); in dev_config()
1837 dev->buf = kbuf; in dev_config()
1840 dev->config = (void *) kbuf; in dev_config()
1841 total = le16_to_cpu(dev->config->wTotalLength); in dev_config()
1842 if (!is_valid_config(dev->config, total) || in dev_config()
1843 total > length - USB_DT_DEVICE_SIZE) in dev_config()
1846 length -= total; in dev_config()
1850 dev->hs_config = (void *) kbuf; in dev_config()
1851 total = le16_to_cpu(dev->hs_config->wTotalLength); in dev_config()
1852 if (!is_valid_config(dev->hs_config, total) || in dev_config()
1853 total > length - USB_DT_DEVICE_SIZE) in dev_config()
1856 length -= total; in dev_config()
1858 dev->hs_config = NULL; in dev_config()
1866 dev->dev = (void *)kbuf; in dev_config()
1867 if (dev->dev->bLength != USB_DT_DEVICE_SIZE in dev_config()
1868 || dev->dev->bDescriptorType != USB_DT_DEVICE in dev_config()
1869 || dev->dev->bNumConfigurations != 1) in dev_config()
1871 dev->dev->bcdUSB = cpu_to_le16 (0x0200); in dev_config()
1874 spin_unlock_irq (&dev->lock); in dev_config()
1875 if (dev->hs_config) in dev_config()
1882 spin_lock_irq(&dev->lock); in dev_config()
1895 dev->gadget_registered = true; in dev_config()
1900 dev->config = NULL; in dev_config()
1901 dev->hs_config = NULL; in dev_config()
1902 dev->dev = NULL; in dev_config()
1903 spin_unlock_irq (&dev->lock); in dev_config()
1905 kfree (dev->buf); in dev_config()
1906 dev->buf = NULL; in dev_config()
1913 struct dev_data *dev = inode->i_private; in dev_open()
1914 int value = -EBUSY; in dev_open()
1916 spin_lock_irq(&dev->lock); in dev_open()
1917 if (dev->state == STATE_DEV_DISABLED) { in dev_open()
1918 dev->ev_next = 0; in dev_open()
1919 dev->state = STATE_DEV_OPENED; in dev_open()
1920 fd->private_data = dev; in dev_open()
1924 spin_unlock_irq(&dev->lock); in dev_open()
1940 /*----------------------------------------------------------------------*/
1970 inode->i_ino = get_next_ino(); in gadgetfs_make_inode()
1971 inode->i_mode = mode; in gadgetfs_make_inode()
1972 inode->i_uid = make_kuid(&init_user_ns, default_uid); in gadgetfs_make_inode()
1973 inode->i_gid = make_kgid(&init_user_ns, default_gid); in gadgetfs_make_inode()
1974 inode->i_atime = inode->i_mtime = inode->i_ctime in gadgetfs_make_inode()
1976 inode->i_private = data; in gadgetfs_make_inode()
1977 inode->i_fop = fops; in gadgetfs_make_inode()
1982 /* creates in fs root directory, so non-renamable and non-linkable.
1992 dentry = d_alloc_name(sb->s_root, name); in gadgetfs_create_file()
2021 rc = -ESRCH; in gadgetfs_fill_super()
2027 rc = -ENODEV; in gadgetfs_fill_super()
2032 sb->s_blocksize = PAGE_SIZE; in gadgetfs_fill_super()
2033 sb->s_blocksize_bits = PAGE_SHIFT; in gadgetfs_fill_super()
2034 sb->s_magic = GADGETFS_MAGIC; in gadgetfs_fill_super()
2035 sb->s_op = &gadget_fs_operations; in gadgetfs_fill_super()
2036 sb->s_time_gran = 1; in gadgetfs_fill_super()
2044 inode->i_op = &simple_dir_inode_operations; in gadgetfs_fill_super()
2045 if (!(sb->s_root = d_make_root (inode))) in gadgetfs_fill_super()
2055 dev->sb = sb; in gadgetfs_fill_super()
2056 dev->dentry = gadgetfs_create_file(sb, CHIP, dev, &ep0_operations); in gadgetfs_fill_super()
2057 if (!dev->dentry) { in gadgetfs_fill_super()
2072 rc = -ENOMEM; in gadgetfs_fill_super()
2079 /* "mount -t gadgetfs path /dev/gadget" ends up here */
2091 fc->ops = &gadgetfs_context_ops; in gadgetfs_init_fs_context()
2109 /*----------------------------------------------------------------------*/
2119 /*----------------------------------------------------------------------*/