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); 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 iocb->ki_complete(iocb, in ep_aio_complete()
504 req->actual ? req->actual : (long)req->status); in ep_aio_complete()
507 if (unlikely(0 != req->status)) in ep_aio_complete()
508 DBG(epdata->dev, "%s fault %d len %d\n", in ep_aio_complete()
509 ep->name, req->status, req->actual); in ep_aio_complete()
511 priv->buf = req->buf; in ep_aio_complete()
512 priv->actual = req->actual; in ep_aio_complete()
513 INIT_WORK(&priv->work, ep_user_copy_worker); in ep_aio_complete()
514 schedule_work(&priv->work); in ep_aio_complete()
518 spin_unlock(&epdata->dev->lock); in ep_aio_complete()
531 iocb->private = priv; in ep_aio()
532 priv->iocb = iocb; in ep_aio()
536 priv->epdata = epdata; in ep_aio()
537 priv->actual = 0; in ep_aio()
538 priv->mm = current->mm; /* mm teardown waits for iocbs in exit_aio() */ in ep_aio()
543 spin_lock_irq(&epdata->dev->lock); in ep_aio()
544 value = -ENODEV; in ep_aio()
545 if (unlikely(epdata->ep == NULL)) in ep_aio()
548 req = usb_ep_alloc_request(epdata->ep, GFP_ATOMIC); in ep_aio()
549 value = -ENOMEM; in ep_aio()
553 priv->req = req; in ep_aio()
554 req->buf = buf; in ep_aio()
555 req->length = len; in ep_aio()
556 req->complete = ep_aio_complete; in ep_aio()
557 req->context = iocb; in ep_aio()
558 value = usb_ep_queue(epdata->ep, req, GFP_ATOMIC); in ep_aio()
560 usb_ep_free_request(epdata->ep, req); in ep_aio()
563 spin_unlock_irq(&epdata->dev->lock); in ep_aio()
564 return -EIOCBQUEUED; in ep_aio()
567 spin_unlock_irq(&epdata->dev->lock); in ep_aio()
568 kfree(priv->to_free); in ep_aio()
577 struct file *file = iocb->ki_filp; in ep_read_iter()
578 struct ep_data *epdata = file->private_data; in ep_read_iter()
583 if ((value = get_ready_ep(file->f_flags, epdata, false)) < 0) in ep_read_iter()
586 /* halt any endpoint by doing a "wrong direction" i/o call */ in ep_read_iter()
587 if (usb_endpoint_dir_in(&epdata->desc)) { in ep_read_iter()
588 if (usb_endpoint_xfer_isoc(&epdata->desc) || in ep_read_iter()
590 mutex_unlock(&epdata->lock); in ep_read_iter()
591 return -EINVAL; in ep_read_iter()
593 DBG (epdata->dev, "%s halt\n", epdata->name); in ep_read_iter()
594 spin_lock_irq(&epdata->dev->lock); in ep_read_iter()
595 if (likely(epdata->ep != NULL)) in ep_read_iter()
596 usb_ep_set_halt(epdata->ep); in ep_read_iter()
597 spin_unlock_irq(&epdata->dev->lock); in ep_read_iter()
598 mutex_unlock(&epdata->lock); in ep_read_iter()
599 return -EBADMSG; in ep_read_iter()
604 mutex_unlock(&epdata->lock); in ep_read_iter()
605 return -ENOMEM; in ep_read_iter()
610 value = -EFAULT; in ep_read_iter()
613 value = -ENOMEM; in ep_read_iter()
616 priv->to_free = dup_iter(&priv->to, to, GFP_KERNEL); in ep_read_iter()
617 if (!iter_is_ubuf(&priv->to) && !priv->to_free) { in ep_read_iter()
622 if (value == -EIOCBQUEUED) in ep_read_iter()
627 mutex_unlock(&epdata->lock); in ep_read_iter()
636 struct file *file = iocb->ki_filp; in ep_write_iter()
637 struct ep_data *epdata = file->private_data; in ep_write_iter()
643 if ((value = get_ready_ep(file->f_flags, epdata, true)) < 0) in ep_write_iter()
646 configured = epdata->state == STATE_EP_ENABLED; in ep_write_iter()
648 /* halt any endpoint by doing a "wrong direction" i/o call */ in ep_write_iter()
649 if (configured && !usb_endpoint_dir_in(&epdata->desc)) { in ep_write_iter()
650 if (usb_endpoint_xfer_isoc(&epdata->desc) || in ep_write_iter()
652 mutex_unlock(&epdata->lock); in ep_write_iter()
653 return -EINVAL; in ep_write_iter()
655 DBG (epdata->dev, "%s halt\n", epdata->name); in ep_write_iter()
656 spin_lock_irq(&epdata->dev->lock); in ep_write_iter()
657 if (likely(epdata->ep != NULL)) in ep_write_iter()
658 usb_ep_set_halt(epdata->ep); in ep_write_iter()
659 spin_unlock_irq(&epdata->dev->lock); in ep_write_iter()
660 mutex_unlock(&epdata->lock); in ep_write_iter()
661 return -EBADMSG; in ep_write_iter()
666 mutex_unlock(&epdata->lock); in ep_write_iter()
667 return -ENOMEM; in ep_write_iter()
671 value = -EFAULT; in ep_write_iter()
681 value = -ENOMEM; in ep_write_iter()
684 if (value == -EIOCBQUEUED) in ep_write_iter()
690 mutex_unlock(&epdata->lock); in ep_write_iter()
694 /*----------------------------------------------------------------------*/
728 if (data->state != STATE_EP_READY) { in ep_config()
729 value = -EL2HLT; in ep_config()
740 DBG(data->dev, "config %s, bad tag %d\n", data->name, tag); in ep_config()
744 len -= 4; in ep_config()
751 memcpy(&data->desc, buf, USB_DT_ENDPOINT_SIZE); in ep_config()
752 if (data->desc.bLength != USB_DT_ENDPOINT_SIZE in ep_config()
753 || data->desc.bDescriptorType != USB_DT_ENDPOINT) in ep_config()
758 memcpy(&data->hs_desc, buf + USB_DT_ENDPOINT_SIZE, in ep_config()
760 if (data->hs_desc.bLength != USB_DT_ENDPOINT_SIZE in ep_config()
761 || data->hs_desc.bDescriptorType in ep_config()
763 DBG(data->dev, "config %s, bad hs length or type\n", in ep_config()
764 data->name); in ep_config()
769 spin_lock_irq (&data->dev->lock); in ep_config()
770 if (data->dev->state == STATE_DEV_UNBOUND) { in ep_config()
771 value = -ENOENT; in ep_config()
774 ep = data->ep; in ep_config()
776 value = -ENODEV; in ep_config()
780 switch (data->dev->gadget->speed) { in ep_config()
783 ep->desc = &data->desc; in ep_config()
787 ep->desc = &data->hs_desc; in ep_config()
790 DBG(data->dev, "unconnected, %s init abandoned\n", in ep_config()
791 data->name); in ep_config()
792 value = -EINVAL; in ep_config()
797 data->state = STATE_EP_ENABLED; in ep_config()
801 spin_unlock_irq (&data->dev->lock); in ep_config()
804 data->desc.bDescriptorType = 0; in ep_config()
805 data->hs_desc.bDescriptorType = 0; in ep_config()
809 value = -EINVAL; in ep_config()
816 struct ep_data *data = inode->i_private; in ep_open()
817 int value = -EBUSY; in ep_open()
819 if (mutex_lock_interruptible(&data->lock) != 0) in ep_open()
820 return -EINTR; in ep_open()
821 spin_lock_irq (&data->dev->lock); in ep_open()
822 if (data->dev->state == STATE_DEV_UNBOUND) in ep_open()
823 value = -ENOENT; in ep_open()
824 else if (data->state == STATE_EP_DISABLED) { in ep_open()
826 data->state = STATE_EP_READY; in ep_open()
828 fd->private_data = data; in ep_open()
829 VDEBUG (data->dev, "%s ready\n", data->name); in ep_open()
831 DBG (data->dev, "%s state %d\n", in ep_open()
832 data->name, data->state); in ep_open()
833 spin_unlock_irq (&data->dev->lock); in ep_open()
834 mutex_unlock(&data->lock); in ep_open()
838 /*----------------------------------------------------------------------*/
844 * use this facility may be too simple-minded for real applications.
849 wake_up (&dev->wait); in ep0_readable()
850 kill_fasync (&dev->fasync, SIGIO, POLL_IN); in ep0_readable()
855 struct dev_data *dev = ep->driver_data; in clean_req()
857 if (req->buf != dev->rbuf) { in clean_req()
858 kfree(req->buf); in clean_req()
859 req->buf = dev->rbuf; in clean_req()
861 req->complete = epio_complete; in clean_req()
862 dev->setup_out_ready = 0; in clean_req()
867 struct dev_data *dev = ep->driver_data; in ep0_complete()
872 spin_lock_irqsave(&dev->lock, flags); in ep0_complete()
873 if (!dev->setup_in) { in ep0_complete()
874 dev->setup_out_error = (req->status != 0); in ep0_complete()
875 if (!dev->setup_out_error) in ep0_complete()
877 dev->setup_out_ready = 1; in ep0_complete()
882 if (free && req->buf != &dev->rbuf) in ep0_complete()
884 req->complete = epio_complete; in ep0_complete()
885 spin_unlock_irqrestore(&dev->lock, flags); in ep0_complete()
890 struct dev_data *dev = ep->driver_data; in setup_req()
892 if (dev->setup_out_ready) { in setup_req()
893 DBG (dev, "ep0 request busy!\n"); in setup_req()
894 return -EBUSY; in setup_req()
896 if (len > sizeof (dev->rbuf)) in setup_req()
897 req->buf = kmalloc(len, GFP_ATOMIC); in setup_req()
898 if (req->buf == NULL) { in setup_req()
899 req->buf = dev->rbuf; in setup_req()
900 return -ENOMEM; in setup_req()
902 req->complete = ep0_complete; in setup_req()
903 req->length = len; in setup_req()
904 req->zero = 0; in setup_req()
911 struct dev_data *dev = fd->private_data; in ep0_read()
915 spin_lock_irq (&dev->lock); in ep0_read()
916 if (dev->state <= STATE_DEV_OPENED) { in ep0_read()
917 retval = -EINVAL; in ep0_read()
922 if (dev->setup_abort) { in ep0_read()
923 dev->setup_abort = 0; in ep0_read()
924 retval = -EIDRM; in ep0_read()
929 if ((state = dev->state) == STATE_DEV_SETUP) { in ep0_read()
931 if (dev->setup_in) { /* stall IN */ in ep0_read()
933 (void) usb_ep_set_halt (dev->gadget->ep0); in ep0_read()
934 retval = -EL2HLT; in ep0_read()
935 dev->state = STATE_DEV_CONNECTED; in ep0_read()
938 struct usb_ep *ep = dev->gadget->ep0; in ep0_read()
939 struct usb_request *req = dev->req; in ep0_read()
942 ++dev->udc_usage; in ep0_read()
943 spin_unlock_irq (&dev->lock); in ep0_read()
945 spin_lock_irq (&dev->lock); in ep0_read()
946 --dev->udc_usage; in ep0_read()
948 dev->state = STATE_DEV_CONNECTED; in ep0_read()
951 if (dev->current_config) { in ep0_read()
954 if (gadget_is_dualspeed(dev->gadget) in ep0_read()
955 && (dev->gadget->speed in ep0_read()
957 power = dev->hs_config->bMaxPower; in ep0_read()
959 power = dev->config->bMaxPower; in ep0_read()
960 usb_gadget_vbus_draw(dev->gadget, 2 * power); in ep0_read()
964 if ((fd->f_flags & O_NONBLOCK) != 0 in ep0_read()
965 && !dev->setup_out_ready) { in ep0_read()
966 retval = -EAGAIN; in ep0_read()
969 spin_unlock_irq (&dev->lock); in ep0_read()
970 retval = wait_event_interruptible (dev->wait, in ep0_read()
971 dev->setup_out_ready != 0); in ep0_read()
974 spin_lock_irq (&dev->lock); in ep0_read()
978 if (dev->state != STATE_DEV_SETUP) { in ep0_read()
979 retval = -ECANCELED; in ep0_read()
982 dev->state = STATE_DEV_CONNECTED; in ep0_read()
984 if (dev->setup_out_error) in ep0_read()
985 retval = -EIO; in ep0_read()
987 len = min (len, (size_t)dev->req->actual); in ep0_read()
988 ++dev->udc_usage; in ep0_read()
989 spin_unlock_irq(&dev->lock); in ep0_read()
990 if (copy_to_user (buf, dev->req->buf, len)) in ep0_read()
991 retval = -EFAULT; in ep0_read()
994 spin_lock_irq(&dev->lock); in ep0_read()
995 --dev->udc_usage; in ep0_read()
996 clean_req (dev->gadget->ep0, dev->req); in ep0_read()
1004 if (len < sizeof dev->event [0]) { in ep0_read()
1005 retval = -EINVAL; in ep0_read()
1008 len -= len % sizeof (struct usb_gadgetfs_event); in ep0_read()
1009 dev->usermode_setup = 1; in ep0_read()
1013 if (dev->ev_next != 0) { in ep0_read()
1017 if (dev->ev_next < n) in ep0_read()
1018 n = dev->ev_next; in ep0_read()
1022 if (dev->event [i].type == GADGETFS_SETUP) { in ep0_read()
1023 dev->state = STATE_DEV_SETUP; in ep0_read()
1028 spin_unlock_irq (&dev->lock); in ep0_read()
1030 if (copy_to_user (buf, &dev->event, len)) in ep0_read()
1031 retval = -EFAULT; in ep0_read()
1038 spin_lock_irq (&dev->lock); in ep0_read()
1039 if (dev->ev_next > n) { in ep0_read()
1040 memmove(&dev->event[0], &dev->event[n], in ep0_read()
1042 * (dev->ev_next - n)); in ep0_read()
1044 dev->ev_next -= n; in ep0_read()
1045 spin_unlock_irq (&dev->lock); in ep0_read()
1049 if (fd->f_flags & O_NONBLOCK) { in ep0_read()
1050 retval = -EAGAIN; in ep0_read()
1056 DBG (dev, "fail %s, state %d\n", __func__, state); in ep0_read()
1057 retval = -ESRCH; in ep0_read()
1061 spin_unlock_irq (&dev->lock); in ep0_read()
1062 DBG (dev, "%s wait\n", __func__); in ep0_read()
1065 retval = wait_event_interruptible (dev->wait, in ep0_read()
1066 dev->ev_next != 0); in ep0_read()
1069 spin_lock_irq (&dev->lock); in ep0_read()
1074 spin_unlock_irq (&dev->lock); in ep0_read()
1087 if (dev->state == STATE_DEV_SETUP) in next_event()
1088 dev->setup_abort = 1; in next_event()
1091 dev->ev_next = 0; in next_event()
1096 for (i = 0; i != dev->ev_next; i++) { in next_event()
1097 if (dev->event [i].type != type) in next_event()
1099 DBG(dev, "discard old event[%d] %d\n", i, type); in next_event()
1100 dev->ev_next--; in next_event()
1101 if (i == dev->ev_next) in next_event()
1104 memmove (&dev->event [i], &dev->event [i + 1], in next_event()
1106 * (dev->ev_next - i)); in next_event()
1112 VDEBUG(dev, "event[%d] = %d\n", dev->ev_next, type); in next_event()
1113 event = &dev->event [dev->ev_next++]; in next_event()
1114 BUG_ON (dev->ev_next > N_EVENT); in next_event()
1116 event->type = type; in next_event()
1123 struct dev_data *dev = fd->private_data; in ep0_write()
1124 ssize_t retval = -ESRCH; in ep0_write()
1127 if (dev->setup_abort) { in ep0_write()
1128 dev->setup_abort = 0; in ep0_write()
1129 retval = -EIDRM; in ep0_write()
1132 } else if (dev->state == STATE_DEV_SETUP) { in ep0_write()
1134 len = min_t(size_t, len, dev->setup_wLength); in ep0_write()
1135 if (dev->setup_in) { in ep0_write()
1136 retval = setup_req (dev->gadget->ep0, dev->req, len); in ep0_write()
1138 dev->state = STATE_DEV_CONNECTED; in ep0_write()
1139 ++dev->udc_usage; in ep0_write()
1140 spin_unlock_irq (&dev->lock); in ep0_write()
1141 if (copy_from_user (dev->req->buf, buf, len)) in ep0_write()
1142 retval = -EFAULT; in ep0_write()
1144 if (len < dev->setup_wLength) in ep0_write()
1145 dev->req->zero = 1; in ep0_write()
1147 dev->gadget->ep0, dev->req, in ep0_write()
1150 spin_lock_irq(&dev->lock); in ep0_write()
1151 --dev->udc_usage; in ep0_write()
1153 clean_req (dev->gadget->ep0, dev->req); in ep0_write()
1161 } else if (dev->setup_can_stall) { in ep0_write()
1163 (void) usb_ep_set_halt (dev->gadget->ep0); in ep0_write()
1164 retval = -EL2HLT; in ep0_write()
1165 dev->state = STATE_DEV_CONNECTED; in ep0_write()
1167 DBG(dev, "bogus ep0out stall!\n"); in ep0_write()
1170 DBG (dev, "fail %s, state %d\n", __func__, dev->state); in ep0_write()
1178 struct dev_data *dev = fd->private_data; in ep0_fasync()
1181 return fasync_helper (f, fd, on, &dev->fasync); in ep0_fasync()
1189 struct dev_data *dev = fd->private_data; in dev_release()
1193 if (dev->gadget_registered) { in dev_release()
1195 dev->gadget_registered = false; in dev_release()
1203 kfree (dev->buf); in dev_release()
1204 dev->buf = NULL; in dev_release()
1207 spin_lock_irq(&dev->lock); in dev_release()
1208 dev->state = STATE_DEV_DISABLED; in dev_release()
1209 spin_unlock_irq(&dev->lock); in dev_release()
1218 struct dev_data *dev = fd->private_data; in ep0_poll()
1221 if (dev->state <= STATE_DEV_OPENED) in ep0_poll()
1224 poll_wait(fd, &dev->wait, wait); in ep0_poll()
1226 spin_lock_irq(&dev->lock); in ep0_poll()
1229 if (dev->setup_abort) { in ep0_poll()
1230 dev->setup_abort = 0; in ep0_poll()
1235 if (dev->state == STATE_DEV_SETUP) { in ep0_poll()
1236 if (dev->setup_in || dev->setup_can_stall) in ep0_poll()
1239 if (dev->ev_next != 0) in ep0_poll()
1243 spin_unlock_irq(&dev->lock); in ep0_poll()
1249 struct dev_data *dev = fd->private_data; in gadget_dev_ioctl()
1250 struct usb_gadget *gadget = dev->gadget; in gadget_dev_ioctl()
1251 long ret = -ENOTTY; in gadget_dev_ioctl()
1253 spin_lock_irq(&dev->lock); in gadget_dev_ioctl()
1254 if (dev->state == STATE_DEV_OPENED || in gadget_dev_ioctl()
1255 dev->state == STATE_DEV_UNBOUND) { in gadget_dev_ioctl()
1257 } else if (gadget->ops->ioctl) { in gadget_dev_ioctl()
1258 ++dev->udc_usage; in gadget_dev_ioctl()
1259 spin_unlock_irq(&dev->lock); in gadget_dev_ioctl()
1261 ret = gadget->ops->ioctl (gadget, code, value); in gadget_dev_ioctl()
1263 spin_lock_irq(&dev->lock); in gadget_dev_ioctl()
1264 --dev->udc_usage; in gadget_dev_ioctl()
1266 spin_unlock_irq(&dev->lock); in gadget_dev_ioctl()
1271 /*----------------------------------------------------------------------*/
1273 /* The in-kernel gadget driver handles most ep0 issues, in particular
1288 desc = dev->dev; in make_qualifier()
1289 qual.bDeviceClass = desc->bDeviceClass; in make_qualifier()
1290 qual.bDeviceSubClass = desc->bDeviceSubClass; in make_qualifier()
1291 qual.bDeviceProtocol = desc->bDeviceProtocol; in make_qualifier()
1294 qual.bMaxPacketSize0 = dev->gadget->ep0->maxpacket; in make_qualifier()
1299 memcpy (dev->rbuf, &qual, sizeof qual); in make_qualifier()
1310 return -EINVAL; in config_buf()
1312 if (gadget_is_dualspeed(dev->gadget)) { in config_buf()
1313 hs = (dev->gadget->speed == USB_SPEED_HIGH); in config_buf()
1318 dev->req->buf = dev->hs_config; in config_buf()
1319 len = le16_to_cpu(dev->hs_config->wTotalLength); in config_buf()
1321 dev->req->buf = dev->config; in config_buf()
1322 len = le16_to_cpu(dev->config->wTotalLength); in config_buf()
1324 ((u8 *)dev->req->buf) [1] = type; in config_buf()
1332 struct usb_request *req = dev->req; in gadgetfs_setup()
1333 int value = -EOPNOTSUPP; in gadgetfs_setup()
1335 u16 w_value = le16_to_cpu(ctrl->wValue); in gadgetfs_setup()
1336 u16 w_length = le16_to_cpu(ctrl->wLength); in gadgetfs_setup()
1339 if (ctrl->bRequestType & USB_DIR_IN) { in gadgetfs_setup()
1341 __le16 *temp = (__le16 *)&ctrl->wLength; in gadgetfs_setup()
1350 spin_lock (&dev->lock); in gadgetfs_setup()
1351 dev->setup_abort = 0; in gadgetfs_setup()
1352 if (dev->state == STATE_DEV_UNCONNECTED) { in gadgetfs_setup()
1354 && gadget->speed == USB_SPEED_HIGH in gadgetfs_setup()
1355 && dev->hs_config == NULL) { in gadgetfs_setup()
1356 spin_unlock(&dev->lock); in gadgetfs_setup()
1358 return -EINVAL; in gadgetfs_setup()
1361 dev->state = STATE_DEV_CONNECTED; in gadgetfs_setup()
1365 event->u.speed = gadget->speed; in gadgetfs_setup()
1373 } else if (dev->state == STATE_DEV_SETUP) in gadgetfs_setup()
1374 dev->setup_abort = 1; in gadgetfs_setup()
1376 req->buf = dev->rbuf; in gadgetfs_setup()
1377 req->context = NULL; in gadgetfs_setup()
1378 switch (ctrl->bRequest) { in gadgetfs_setup()
1381 if (ctrl->bRequestType != USB_DIR_IN) in gadgetfs_setup()
1386 value = min (w_length, (u16) sizeof *dev->dev); in gadgetfs_setup()
1387 dev->dev->bMaxPacketSize0 = dev->gadget->ep0->maxpacket; in gadgetfs_setup()
1388 req->buf = dev->dev; in gadgetfs_setup()
1391 if (!dev->hs_config) in gadgetfs_setup()
1415 if (ctrl->bRequestType != 0) in gadgetfs_setup()
1419 dev->current_config = 0; in gadgetfs_setup()
1426 && gadget->speed == USB_SPEED_HIGH) { in gadgetfs_setup()
1427 config = dev->hs_config->bConfigurationValue; in gadgetfs_setup()
1428 power = dev->hs_config->bMaxPower; in gadgetfs_setup()
1430 config = dev->config->bConfigurationValue; in gadgetfs_setup()
1431 power = dev->config->bMaxPower; in gadgetfs_setup()
1436 dev->current_config = config; in gadgetfs_setup()
1451 INFO (dev, "configuration #%d\n", dev->current_config); in gadgetfs_setup()
1453 if (dev->usermode_setup) { in gadgetfs_setup()
1454 dev->setup_can_stall = 0; in gadgetfs_setup()
1463 if (ctrl->bRequestType != 0x80) in gadgetfs_setup()
1465 *(u8 *)req->buf = dev->current_config; in gadgetfs_setup()
1473 dev->usermode_setup ? "delegate" : "fail", in gadgetfs_setup()
1474 ctrl->bRequestType, ctrl->bRequest, in gadgetfs_setup()
1475 w_value, le16_to_cpu(ctrl->wIndex), w_length); in gadgetfs_setup()
1478 if (dev->usermode_setup) { in gadgetfs_setup()
1479 dev->setup_can_stall = 1; in gadgetfs_setup()
1481 dev->setup_in = (ctrl->bRequestType & USB_DIR_IN) in gadgetfs_setup()
1483 dev->setup_wLength = w_length; in gadgetfs_setup()
1484 dev->setup_out_ready = 0; in gadgetfs_setup()
1485 dev->setup_out_error = 0; in gadgetfs_setup()
1488 if (unlikely (!dev->setup_in && w_length)) { in gadgetfs_setup()
1489 value = setup_req (gadget->ep0, dev->req, in gadgetfs_setup()
1494 ++dev->udc_usage; in gadgetfs_setup()
1495 spin_unlock (&dev->lock); in gadgetfs_setup()
1496 value = usb_ep_queue (gadget->ep0, dev->req, in gadgetfs_setup()
1498 spin_lock (&dev->lock); in gadgetfs_setup()
1499 --dev->udc_usage; in gadgetfs_setup()
1501 clean_req (gadget->ep0, dev->req); in gadgetfs_setup()
1506 dev->setup_can_stall = 0; in gadgetfs_setup()
1511 event->u.setup = *ctrl; in gadgetfs_setup()
1513 spin_unlock (&dev->lock); in gadgetfs_setup()
1519 if (value >= 0 && dev->state != STATE_DEV_SETUP) { in gadgetfs_setup()
1520 req->length = value; in gadgetfs_setup()
1521 req->zero = value < w_length; in gadgetfs_setup()
1523 ++dev->udc_usage; in gadgetfs_setup()
1524 spin_unlock (&dev->lock); in gadgetfs_setup()
1525 value = usb_ep_queue (gadget->ep0, req, GFP_KERNEL); in gadgetfs_setup()
1526 spin_lock(&dev->lock); in gadgetfs_setup()
1527 --dev->udc_usage; in gadgetfs_setup()
1528 spin_unlock(&dev->lock); in gadgetfs_setup()
1530 DBG (dev, "ep_queue --> %d\n", value); in gadgetfs_setup()
1531 req->status = 0; in gadgetfs_setup()
1537 spin_unlock (&dev->lock); in gadgetfs_setup()
1543 DBG (dev, "%s %d\n", __func__, dev->state); in destroy_ep_files()
1545 /* dev->state must prevent interference */ in destroy_ep_files()
1546 spin_lock_irq (&dev->lock); in destroy_ep_files()
1547 while (!list_empty(&dev->epfiles)) { in destroy_ep_files()
1553 ep = list_first_entry (&dev->epfiles, struct ep_data, epfiles); in destroy_ep_files()
1554 list_del_init (&ep->epfiles); in destroy_ep_files()
1555 spin_unlock_irq (&dev->lock); in destroy_ep_files()
1557 dentry = ep->dentry; in destroy_ep_files()
1558 ep->dentry = NULL; in destroy_ep_files()
1559 parent = d_inode(dentry->d_parent); in destroy_ep_files()
1562 mutex_lock(&ep->lock); in destroy_ep_files()
1563 if (ep->state == STATE_EP_ENABLED) in destroy_ep_files()
1564 (void) usb_ep_disable (ep->ep); in destroy_ep_files()
1565 ep->state = STATE_EP_UNBOUND; in destroy_ep_files()
1566 usb_ep_free_request (ep->ep, ep->req); in destroy_ep_files()
1567 ep->ep = NULL; in destroy_ep_files()
1568 mutex_unlock(&ep->lock); in destroy_ep_files()
1570 wake_up (&ep->wait); in destroy_ep_files()
1579 spin_lock_irq (&dev->lock); in destroy_ep_files()
1581 spin_unlock_irq (&dev->lock); in destroy_ep_files()
1594 gadget_for_each_ep (ep, dev->gadget) { in activate_ep_files()
1599 data->state = STATE_EP_DISABLED; in activate_ep_files()
1600 mutex_init(&data->lock); in activate_ep_files()
1601 init_waitqueue_head (&data->wait); in activate_ep_files()
1603 strncpy (data->name, ep->name, sizeof (data->name) - 1); in activate_ep_files()
1604 refcount_set (&data->count, 1); in activate_ep_files()
1605 data->dev = dev; in activate_ep_files()
1608 data->ep = ep; in activate_ep_files()
1609 ep->driver_data = data; in activate_ep_files()
1611 data->req = usb_ep_alloc_request (ep, GFP_KERNEL); in activate_ep_files()
1612 if (!data->req) in activate_ep_files()
1615 data->dentry = gadgetfs_create_file (dev->sb, data->name, in activate_ep_files()
1617 if (!data->dentry) in activate_ep_files()
1619 list_add_tail (&data->epfiles, &dev->epfiles); in activate_ep_files()
1624 usb_ep_free_request (ep, data->req); in activate_ep_files()
1629 DBG (dev, "%s enomem\n", __func__); in activate_ep_files()
1631 return -ENOMEM; in activate_ep_files()
1639 DBG (dev, "%s\n", __func__); in gadgetfs_unbind()
1641 spin_lock_irq (&dev->lock); in gadgetfs_unbind()
1642 dev->state = STATE_DEV_UNBOUND; in gadgetfs_unbind()
1643 while (dev->udc_usage > 0) { in gadgetfs_unbind()
1644 spin_unlock_irq(&dev->lock); in gadgetfs_unbind()
1646 spin_lock_irq(&dev->lock); in gadgetfs_unbind()
1648 spin_unlock_irq (&dev->lock); in gadgetfs_unbind()
1651 gadget->ep0->driver_data = NULL; in gadgetfs_unbind()
1655 if (dev->req) in gadgetfs_unbind()
1656 usb_ep_free_request (gadget->ep0, dev->req); in gadgetfs_unbind()
1657 DBG (dev, "%s done\n", __func__); in gadgetfs_unbind()
1669 return -ESRCH; in gadgetfs_bind()
1670 if (0 != strcmp (CHIP, gadget->name)) { in gadgetfs_bind()
1672 shortname, CHIP, gadget->name); in gadgetfs_bind()
1673 return -ENODEV; in gadgetfs_bind()
1677 dev->gadget = gadget; in gadgetfs_bind()
1678 gadget->ep0->driver_data = dev; in gadgetfs_bind()
1681 dev->req = usb_ep_alloc_request (gadget->ep0, GFP_KERNEL); in gadgetfs_bind()
1682 if (!dev->req) in gadgetfs_bind()
1684 dev->req->context = NULL; in gadgetfs_bind()
1685 dev->req->complete = epio_complete; in gadgetfs_bind()
1690 INFO (dev, "bound to %s driver\n", gadget->name); in gadgetfs_bind()
1691 spin_lock_irq(&dev->lock); in gadgetfs_bind()
1692 dev->state = STATE_DEV_UNCONNECTED; in gadgetfs_bind()
1693 spin_unlock_irq(&dev->lock); in gadgetfs_bind()
1699 return -ENOMEM; in gadgetfs_bind()
1708 spin_lock_irqsave (&dev->lock, flags); in gadgetfs_disconnect()
1709 if (dev->state == STATE_DEV_UNCONNECTED) in gadgetfs_disconnect()
1711 dev->state = STATE_DEV_UNCONNECTED; in gadgetfs_disconnect()
1717 spin_unlock_irqrestore (&dev->lock, flags); in gadgetfs_disconnect()
1726 INFO (dev, "suspended from state %d\n", dev->state); in gadgetfs_suspend()
1727 spin_lock_irqsave(&dev->lock, flags); in gadgetfs_suspend()
1728 switch (dev->state) { in gadgetfs_suspend()
1738 spin_unlock_irqrestore(&dev->lock, flags); in gadgetfs_suspend()
1755 /*----------------------------------------------------------------------*/
1766 * would change to support features like multi-config devices
1770 * this one's optional except for high-speed hardware
1785 return config->bDescriptorType == USB_DT_CONFIG in is_valid_config()
1786 && config->bLength == USB_DT_CONFIG_SIZE in is_valid_config()
1788 && config->bConfigurationValue != 0 in is_valid_config()
1789 && (config->bmAttributes & USB_CONFIG_ATT_ONE) != 0 in is_valid_config()
1790 && (config->bmAttributes & USB_CONFIG_ATT_WAKEUP) == 0; in is_valid_config()
1791 /* FIXME if gadget->is_otg, _must_ include an otg descriptor */ in is_valid_config()
1798 struct dev_data *dev = fd->private_data; in dev_config()
1804 spin_lock_irq(&dev->lock); in dev_config()
1805 if (dev->state > STATE_DEV_OPENED) { in dev_config()
1807 spin_unlock_irq(&dev->lock); in dev_config()
1810 spin_unlock_irq(&dev->lock); in dev_config()
1814 return -EINVAL; in dev_config()
1818 return -EFAULT; in dev_config()
1820 return -EINVAL; in dev_config()
1822 length -= 4; in dev_config()
1828 spin_lock_irq (&dev->lock); in dev_config()
1829 value = -EINVAL; in dev_config()
1830 if (dev->buf) { in dev_config()
1831 spin_unlock_irq(&dev->lock); in dev_config()
1835 dev->buf = kbuf; in dev_config()
1838 dev->config = (void *) kbuf; in dev_config()
1839 total = le16_to_cpu(dev->config->wTotalLength); in dev_config()
1840 if (!is_valid_config(dev->config, total) || in dev_config()
1841 total > length - USB_DT_DEVICE_SIZE) in dev_config()
1844 length -= total; in dev_config()
1848 dev->hs_config = (void *) kbuf; in dev_config()
1849 total = le16_to_cpu(dev->hs_config->wTotalLength); in dev_config()
1850 if (!is_valid_config(dev->hs_config, total) || in dev_config()
1851 total > length - USB_DT_DEVICE_SIZE) in dev_config()
1854 length -= total; in dev_config()
1856 dev->hs_config = NULL; in dev_config()
1864 dev->dev = (void *)kbuf; in dev_config()
1865 if (dev->dev->bLength != USB_DT_DEVICE_SIZE in dev_config()
1866 || dev->dev->bDescriptorType != USB_DT_DEVICE in dev_config()
1867 || dev->dev->bNumConfigurations != 1) in dev_config()
1869 dev->dev->bcdUSB = cpu_to_le16 (0x0200); in dev_config()
1872 spin_unlock_irq (&dev->lock); in dev_config()
1873 if (dev->hs_config) in dev_config()
1880 spin_lock_irq(&dev->lock); in dev_config()
1893 dev->gadget_registered = true; in dev_config()
1898 dev->config = NULL; in dev_config()
1899 dev->hs_config = NULL; in dev_config()
1900 dev->dev = NULL; in dev_config()
1901 spin_unlock_irq (&dev->lock); in dev_config()
1903 kfree (dev->buf); in dev_config()
1904 dev->buf = NULL; in dev_config()
1911 struct dev_data *dev = inode->i_private; in gadget_dev_open()
1912 int value = -EBUSY; in gadget_dev_open()
1914 spin_lock_irq(&dev->lock); in gadget_dev_open()
1915 if (dev->state == STATE_DEV_DISABLED) { in gadget_dev_open()
1916 dev->ev_next = 0; in gadget_dev_open()
1917 dev->state = STATE_DEV_OPENED; in gadget_dev_open()
1918 fd->private_data = dev; in gadget_dev_open()
1922 spin_unlock_irq(&dev->lock); in gadget_dev_open()
1938 /*----------------------------------------------------------------------*/
1968 inode->i_ino = get_next_ino(); in gadgetfs_make_inode()
1969 inode->i_mode = mode; in gadgetfs_make_inode()
1970 inode->i_uid = make_kuid(&init_user_ns, default_uid); in gadgetfs_make_inode()
1971 inode->i_gid = make_kgid(&init_user_ns, default_gid); in gadgetfs_make_inode()
1972 inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode); in gadgetfs_make_inode()
1973 inode->i_private = data; in gadgetfs_make_inode()
1974 inode->i_fop = fops; in gadgetfs_make_inode()
1979 /* creates in fs root directory, so non-renamable and non-linkable.
1989 dentry = d_alloc_name(sb->s_root, name); in gadgetfs_create_file()
2018 rc = -ESRCH; in gadgetfs_fill_super()
2024 rc = -ENODEV; in gadgetfs_fill_super()
2029 sb->s_blocksize = PAGE_SIZE; in gadgetfs_fill_super()
2030 sb->s_blocksize_bits = PAGE_SHIFT; in gadgetfs_fill_super()
2031 sb->s_magic = GADGETFS_MAGIC; in gadgetfs_fill_super()
2032 sb->s_op = &gadget_fs_operations; in gadgetfs_fill_super()
2033 sb->s_time_gran = 1; in gadgetfs_fill_super()
2041 inode->i_op = &simple_dir_inode_operations; in gadgetfs_fill_super()
2042 if (!(sb->s_root = d_make_root (inode))) in gadgetfs_fill_super()
2052 dev->sb = sb; in gadgetfs_fill_super()
2053 dev->dentry = gadgetfs_create_file(sb, CHIP, dev, &ep0_operations); in gadgetfs_fill_super()
2054 if (!dev->dentry) { in gadgetfs_fill_super()
2069 rc = -ENOMEM; in gadgetfs_fill_super()
2076 /* "mount -t gadgetfs path /dev/gadget" ends up here */
2088 fc->ops = &gadgetfs_context_ops; in gadgetfs_init_fs_context()
2106 /*----------------------------------------------------------------------*/
2116 /*----------------------------------------------------------------------*/