Lines Matching refs:dev

230 	struct printer_dev *dev = container_of(kref, struct printer_dev, kref);  in printer_dev_free()  local
232 kfree(dev); in printer_dev_free()
267 struct printer_dev *dev = ep->driver_data; in rx_complete() local
271 spin_lock_irqsave(&dev->lock, flags); in rx_complete()
280 list_add_tail(&req->list, &dev->rx_buffers); in rx_complete()
281 DBG(dev, "G_Printer : rx length %d\n", req->actual); in rx_complete()
283 list_add(&req->list, &dev->rx_reqs); in rx_complete()
290 VDBG(dev, "rx shutdown, code %d\n", status); in rx_complete()
291 list_add(&req->list, &dev->rx_reqs); in rx_complete()
296 DBG(dev, "rx %s reset\n", ep->name); in rx_complete()
297 list_add(&req->list, &dev->rx_reqs); in rx_complete()
305 DBG(dev, "rx status %d\n", status); in rx_complete()
306 list_add(&req->list, &dev->rx_reqs); in rx_complete()
310 wake_up_interruptible(&dev->rx_wait); in rx_complete()
311 spin_unlock_irqrestore(&dev->lock, flags); in rx_complete()
316 struct printer_dev *dev = ep->driver_data; in tx_complete() local
320 VDBG(dev, "tx err %d\n", req->status); in tx_complete()
329 spin_lock(&dev->lock); in tx_complete()
334 list_add(&req->list, &dev->tx_reqs); in tx_complete()
335 wake_up_interruptible(&dev->tx_wait); in tx_complete()
336 if (likely(list_empty(&dev->tx_reqs_active))) in tx_complete()
337 wake_up_interruptible(&dev->tx_flush_wait); in tx_complete()
339 spin_unlock(&dev->lock); in tx_complete()
347 struct printer_dev *dev; in printer_open() local
351 dev = container_of(inode->i_cdev, struct printer_dev, printer_cdev); in printer_open()
353 spin_lock_irqsave(&dev->lock, flags); in printer_open()
355 if (dev->interface < 0) { in printer_open()
356 spin_unlock_irqrestore(&dev->lock, flags); in printer_open()
360 if (!dev->printer_cdev_open) { in printer_open()
361 dev->printer_cdev_open = 1; in printer_open()
362 fd->private_data = dev; in printer_open()
365 dev->printer_status |= PRINTER_SELECTED; in printer_open()
368 spin_unlock_irqrestore(&dev->lock, flags); in printer_open()
370 kref_get(&dev->kref); in printer_open()
378 struct printer_dev *dev = fd->private_data; in printer_close() local
381 spin_lock_irqsave(&dev->lock, flags); in printer_close()
382 dev->printer_cdev_open = 0; in printer_close()
385 dev->printer_status &= ~PRINTER_SELECTED; in printer_close()
386 spin_unlock_irqrestore(&dev->lock, flags); in printer_close()
388 kref_put(&dev->kref, printer_dev_free); in printer_close()
395 setup_rx_reqs(struct printer_dev *dev) in setup_rx_reqs() argument
399 while (likely(!list_empty(&dev->rx_reqs))) { in setup_rx_reqs()
402 req = container_of(dev->rx_reqs.next, in setup_rx_reqs()
416 spin_unlock(&dev->lock); in setup_rx_reqs()
417 error = usb_ep_queue(dev->out_ep, req, GFP_ATOMIC); in setup_rx_reqs()
418 spin_lock(&dev->lock); in setup_rx_reqs()
420 DBG(dev, "rx submit --> %d\n", error); in setup_rx_reqs()
421 list_add(&req->list, &dev->rx_reqs); in setup_rx_reqs()
426 list_add(&req->list, &dev->rx_reqs_active); in setup_rx_reqs()
433 struct printer_dev *dev = fd->private_data; in printer_read() local
448 DBG(dev, "printer_read trying to read %d bytes\n", (int)len); in printer_read()
450 mutex_lock(&dev->lock_printer_io); in printer_read()
451 spin_lock_irqsave(&dev->lock, flags); in printer_read()
453 if (dev->interface < 0) in printer_read()
459 dev->reset_printer = 0; in printer_read()
461 setup_rx_reqs(dev); in printer_read()
463 if (dev->interface < 0) in printer_read()
467 current_rx_req = dev->current_rx_req; in printer_read()
468 current_rx_bytes = dev->current_rx_bytes; in printer_read()
469 current_rx_buf = dev->current_rx_buf; in printer_read()
470 dev->current_rx_req = NULL; in printer_read()
471 dev->current_rx_bytes = 0; in printer_read()
472 dev->current_rx_buf = NULL; in printer_read()
481 (likely(list_empty(&dev->rx_buffers)))) { in printer_read()
483 spin_unlock_irqrestore(&dev->lock, flags); in printer_read()
490 mutex_unlock(&dev->lock_printer_io); in printer_read()
495 wait_event_interruptible(dev->rx_wait, in printer_read()
496 (likely(!list_empty(&dev->rx_buffers)))); in printer_read()
497 spin_lock_irqsave(&dev->lock, flags); in printer_read()
498 if (dev->interface < 0) in printer_read()
503 while ((current_rx_bytes || likely(!list_empty(&dev->rx_buffers))) in printer_read()
506 req = container_of(dev->rx_buffers.next, in printer_read()
515 list_add(&req->list, &dev->rx_reqs); in printer_read()
521 spin_unlock_irqrestore(&dev->lock, flags); in printer_read()
533 spin_lock_irqsave(&dev->lock, flags); in printer_read()
536 if (dev->reset_printer) { in printer_read()
537 list_add(&current_rx_req->list, &dev->rx_reqs); in printer_read()
538 spin_unlock_irqrestore(&dev->lock, flags); in printer_read()
539 mutex_unlock(&dev->lock_printer_io); in printer_read()
543 if (dev->interface < 0) in printer_read()
555 list_add(&current_rx_req->list, &dev->rx_reqs); in printer_read()
562 dev->current_rx_req = current_rx_req; in printer_read()
563 dev->current_rx_bytes = current_rx_bytes; in printer_read()
564 dev->current_rx_buf = current_rx_buf; in printer_read()
566 spin_unlock_irqrestore(&dev->lock, flags); in printer_read()
567 mutex_unlock(&dev->lock_printer_io); in printer_read()
569 DBG(dev, "printer_read returned %d bytes\n", (int)bytes_copied); in printer_read()
577 spin_unlock_irqrestore(&dev->lock, flags); in printer_read()
578 mutex_unlock(&dev->lock_printer_io); in printer_read()
585 struct printer_dev *dev = fd->private_data; in printer_write() local
592 DBG(dev, "printer_write trying to send %d bytes\n", (int)len); in printer_write()
597 mutex_lock(&dev->lock_printer_io); in printer_write()
598 spin_lock_irqsave(&dev->lock, flags); in printer_write()
600 if (dev->interface < 0) in printer_write()
604 dev->reset_printer = 0; in printer_write()
607 if (likely(list_empty(&dev->tx_reqs))) { in printer_write()
609 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
616 mutex_unlock(&dev->lock_printer_io); in printer_write()
621 wait_event_interruptible(dev->tx_wait, in printer_write()
622 (likely(!list_empty(&dev->tx_reqs)))); in printer_write()
623 spin_lock_irqsave(&dev->lock, flags); in printer_write()
624 if (dev->interface < 0) in printer_write()
628 while (likely(!list_empty(&dev->tx_reqs)) && len) { in printer_write()
635 req = container_of(dev->tx_reqs.next, struct usb_request, in printer_write()
650 req->zero = ((len % dev->in_ep->maxpacket) == 0); in printer_write()
653 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
656 list_add(&req->list, &dev->tx_reqs); in printer_write()
657 mutex_unlock(&dev->lock_printer_io); in printer_write()
665 spin_lock_irqsave(&dev->lock, flags); in printer_write()
668 if (dev->reset_printer) { in printer_write()
669 list_add(&req->list, &dev->tx_reqs); in printer_write()
670 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
671 mutex_unlock(&dev->lock_printer_io); in printer_write()
675 if (dev->interface < 0) in printer_write()
678 list_add(&req->list, &dev->tx_reqs_active); in printer_write()
681 spin_unlock(&dev->lock); in printer_write()
682 value = usb_ep_queue(dev->in_ep, req, GFP_ATOMIC); in printer_write()
683 spin_lock(&dev->lock); in printer_write()
685 list_move(&req->list, &dev->tx_reqs); in printer_write()
686 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
687 mutex_unlock(&dev->lock_printer_io); in printer_write()
690 if (dev->interface < 0) in printer_write()
694 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
695 mutex_unlock(&dev->lock_printer_io); in printer_write()
697 DBG(dev, "printer_write sent %d bytes\n", (int)bytes_copied); in printer_write()
705 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
706 mutex_unlock(&dev->lock_printer_io); in printer_write()
713 struct printer_dev *dev = fd->private_data; in printer_fsync() local
719 spin_lock_irqsave(&dev->lock, flags); in printer_fsync()
721 if (dev->interface < 0) { in printer_fsync()
722 spin_unlock_irqrestore(&dev->lock, flags); in printer_fsync()
727 tx_list_empty = (likely(list_empty(&dev->tx_reqs))); in printer_fsync()
728 spin_unlock_irqrestore(&dev->lock, flags); in printer_fsync()
732 wait_event_interruptible(dev->tx_flush_wait, in printer_fsync()
733 (likely(list_empty(&dev->tx_reqs_active)))); in printer_fsync()
743 struct printer_dev *dev = fd->private_data; in printer_poll() local
747 mutex_lock(&dev->lock_printer_io); in printer_poll()
748 spin_lock_irqsave(&dev->lock, flags); in printer_poll()
750 if (dev->interface < 0) { in printer_poll()
751 spin_unlock_irqrestore(&dev->lock, flags); in printer_poll()
752 mutex_unlock(&dev->lock_printer_io); in printer_poll()
756 setup_rx_reqs(dev); in printer_poll()
757 spin_unlock_irqrestore(&dev->lock, flags); in printer_poll()
758 mutex_unlock(&dev->lock_printer_io); in printer_poll()
760 poll_wait(fd, &dev->rx_wait, wait); in printer_poll()
761 poll_wait(fd, &dev->tx_wait, wait); in printer_poll()
763 spin_lock_irqsave(&dev->lock, flags); in printer_poll()
764 if (likely(!list_empty(&dev->tx_reqs))) in printer_poll()
767 if (likely(dev->current_rx_bytes) || in printer_poll()
768 likely(!list_empty(&dev->rx_buffers))) in printer_poll()
771 spin_unlock_irqrestore(&dev->lock, flags); in printer_poll()
779 struct printer_dev *dev = fd->private_data; in printer_ioctl() local
783 DBG(dev, "printer_ioctl: cmd=0x%4.4x, arg=%lu\n", code, arg); in printer_ioctl()
787 spin_lock_irqsave(&dev->lock, flags); in printer_ioctl()
789 if (dev->interface < 0) { in printer_ioctl()
790 spin_unlock_irqrestore(&dev->lock, flags); in printer_ioctl()
796 status = (int)dev->printer_status; in printer_ioctl()
799 dev->printer_status = (u8)arg; in printer_ioctl()
803 DBG(dev, "printer_ioctl: ERROR cmd=0x%4.4xis not supported\n", in printer_ioctl()
808 spin_unlock_irqrestore(&dev->lock, flags); in printer_ioctl()
829 set_printer_interface(struct printer_dev *dev) in set_printer_interface() argument
833 dev->in_ep->desc = ep_desc(dev->gadget, &fs_ep_in_desc, &hs_ep_in_desc, in set_printer_interface()
835 dev->in_ep->driver_data = dev; in set_printer_interface()
837 dev->out_ep->desc = ep_desc(dev->gadget, &fs_ep_out_desc, in set_printer_interface()
839 dev->out_ep->driver_data = dev; in set_printer_interface()
841 result = usb_ep_enable(dev->in_ep); in set_printer_interface()
843 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); in set_printer_interface()
847 result = usb_ep_enable(dev->out_ep); in set_printer_interface()
849 DBG(dev, "enable %s --> %d\n", dev->out_ep->name, result); in set_printer_interface()
856 (void) usb_ep_disable(dev->in_ep); in set_printer_interface()
857 (void) usb_ep_disable(dev->out_ep); in set_printer_interface()
858 dev->in_ep->desc = NULL; in set_printer_interface()
859 dev->out_ep->desc = NULL; in set_printer_interface()
866 static void printer_reset_interface(struct printer_dev *dev) in printer_reset_interface() argument
870 if (dev->interface < 0) in printer_reset_interface()
873 if (dev->in_ep->desc) in printer_reset_interface()
874 usb_ep_disable(dev->in_ep); in printer_reset_interface()
876 if (dev->out_ep->desc) in printer_reset_interface()
877 usb_ep_disable(dev->out_ep); in printer_reset_interface()
879 spin_lock_irqsave(&dev->lock, flags); in printer_reset_interface()
880 dev->in_ep->desc = NULL; in printer_reset_interface()
881 dev->out_ep->desc = NULL; in printer_reset_interface()
882 dev->interface = -1; in printer_reset_interface()
883 spin_unlock_irqrestore(&dev->lock, flags); in printer_reset_interface()
887 static int set_interface(struct printer_dev *dev, unsigned number) in set_interface() argument
892 printer_reset_interface(dev); in set_interface()
894 result = set_printer_interface(dev); in set_interface()
896 printer_reset_interface(dev); in set_interface()
898 dev->interface = number; in set_interface()
901 INFO(dev, "Using interface %x\n", number); in set_interface()
906 static void printer_soft_reset(struct printer_dev *dev) in printer_soft_reset() argument
910 if (usb_ep_disable(dev->in_ep)) in printer_soft_reset()
911 DBG(dev, "Failed to disable USB in_ep\n"); in printer_soft_reset()
912 if (usb_ep_disable(dev->out_ep)) in printer_soft_reset()
913 DBG(dev, "Failed to disable USB out_ep\n"); in printer_soft_reset()
915 if (dev->current_rx_req != NULL) { in printer_soft_reset()
916 list_add(&dev->current_rx_req->list, &dev->rx_reqs); in printer_soft_reset()
917 dev->current_rx_req = NULL; in printer_soft_reset()
919 dev->current_rx_bytes = 0; in printer_soft_reset()
920 dev->current_rx_buf = NULL; in printer_soft_reset()
921 dev->reset_printer = 1; in printer_soft_reset()
923 while (likely(!(list_empty(&dev->rx_buffers)))) { in printer_soft_reset()
924 req = container_of(dev->rx_buffers.next, struct usb_request, in printer_soft_reset()
927 list_add(&req->list, &dev->rx_reqs); in printer_soft_reset()
930 while (likely(!(list_empty(&dev->rx_reqs_active)))) { in printer_soft_reset()
931 req = container_of(dev->rx_buffers.next, struct usb_request, in printer_soft_reset()
934 list_add(&req->list, &dev->rx_reqs); in printer_soft_reset()
937 while (likely(!(list_empty(&dev->tx_reqs_active)))) { in printer_soft_reset()
938 req = container_of(dev->tx_reqs_active.next, in printer_soft_reset()
941 list_add(&req->list, &dev->tx_reqs); in printer_soft_reset()
944 if (usb_ep_enable(dev->in_ep)) in printer_soft_reset()
945 DBG(dev, "Failed to enable USB in_ep\n"); in printer_soft_reset()
946 if (usb_ep_enable(dev->out_ep)) in printer_soft_reset()
947 DBG(dev, "Failed to enable USB out_ep\n"); in printer_soft_reset()
949 wake_up_interruptible(&dev->rx_wait); in printer_soft_reset()
950 wake_up_interruptible(&dev->tx_wait); in printer_soft_reset()
951 wake_up_interruptible(&dev->tx_flush_wait); in printer_soft_reset()
960 struct printer_dev *dev = func_to_printer(f); in gprinter_req_match() local
991 return w_index == dev->interface; in gprinter_req_match()
1001 struct printer_dev *dev = func_to_printer(f); in printer_func_setup() local
1010 DBG(dev, "ctrl req%02x.%02x v%04x i%04x l%d\n", in printer_func_setup()
1018 if ((wIndex>>8) != dev->interface) in printer_func_setup()
1021 if (!*dev->pnp_string) { in printer_func_setup()
1025 value = strlen(*dev->pnp_string); in printer_func_setup()
1028 memcpy(buf + 2, *dev->pnp_string, value); in printer_func_setup()
1029 DBG(dev, "1284 PNP String: %x %s\n", value, in printer_func_setup()
1030 *dev->pnp_string); in printer_func_setup()
1035 if (wIndex != dev->interface) in printer_func_setup()
1038 buf[0] = dev->printer_status; in printer_func_setup()
1044 if (wIndex != dev->interface) in printer_func_setup()
1047 printer_soft_reset(dev); in printer_func_setup()
1059 VDBG(dev, in printer_func_setup()
1071 ERROR(dev, "%s:%d Error!\n", __func__, __LINE__); in printer_func_setup()
1082 struct printer_dev *dev = func_to_printer(f); in printer_func_bind() local
1099 dev->gadget = gadget; in printer_func_bind()
1105 dev_err(&cdev->gadget->dev, "can't autoconfigure on %s\n", in printer_func_bind()
1126 dev->in_ep = in_ep; in printer_func_bind()
1127 dev->out_ep = out_ep; in printer_func_bind()
1130 for (i = 0; i < dev->q_len; i++) { in printer_func_bind()
1131 req = printer_req_alloc(dev->in_ep, USB_BUFSIZE, GFP_KERNEL); in printer_func_bind()
1134 list_add(&req->list, &dev->tx_reqs); in printer_func_bind()
1137 for (i = 0; i < dev->q_len; i++) { in printer_func_bind()
1138 req = printer_req_alloc(dev->out_ep, USB_BUFSIZE, GFP_KERNEL); in printer_func_bind()
1141 list_add(&req->list, &dev->rx_reqs); in printer_func_bind()
1145 devt = MKDEV(major, dev->minor); in printer_func_bind()
1147 NULL, "g_printer%d", dev->minor); in printer_func_bind()
1149 ERROR(dev, "Failed to create device: g_printer\n"); in printer_func_bind()
1158 cdev_init(&dev->printer_cdev, &printer_io_operations); in printer_func_bind()
1159 dev->printer_cdev.owner = THIS_MODULE; in printer_func_bind()
1160 ret = cdev_add(&dev->printer_cdev, devt, 1); in printer_func_bind()
1162 ERROR(dev, "Failed to open char device\n"); in printer_func_bind()
1172 while (!list_empty(&dev->rx_reqs)) { in printer_func_bind()
1173 req = container_of(dev->rx_reqs.next, struct usb_request, list); in printer_func_bind()
1175 printer_req_free(dev->out_ep, req); in printer_func_bind()
1179 while (!list_empty(&dev->tx_reqs)) { in printer_func_bind()
1180 req = container_of(dev->tx_reqs.next, struct usb_request, list); in printer_func_bind()
1182 printer_req_free(dev->in_ep, req); in printer_func_bind()
1193 struct printer_dev *dev = func_to_printer(f); in printer_func_set_alt() local
1197 ret = set_interface(dev, intf); in printer_func_set_alt()
1204 struct printer_dev *dev = func_to_printer(f); in printer_func_disable() local
1206 printer_reset_interface(dev); in printer_func_disable()
1417 struct printer_dev *dev = func_to_printer(f); in gprinter_free() local
1422 kref_put(&dev->kref, printer_dev_free); in gprinter_free()
1431 struct printer_dev *dev; in printer_func_unbind() local
1434 dev = func_to_printer(f); in printer_func_unbind()
1436 device_destroy(&usb_gadget_class, MKDEV(major, dev->minor)); in printer_func_unbind()
1439 cdev_del(&dev->printer_cdev); in printer_func_unbind()
1442 WARN_ON(!list_empty(&dev->tx_reqs_active)); in printer_func_unbind()
1443 WARN_ON(!list_empty(&dev->rx_reqs_active)); in printer_func_unbind()
1446 while (!list_empty(&dev->tx_reqs)) { in printer_func_unbind()
1447 req = container_of(dev->tx_reqs.next, struct usb_request, in printer_func_unbind()
1450 printer_req_free(dev->in_ep, req); in printer_func_unbind()
1453 if (dev->current_rx_req != NULL) in printer_func_unbind()
1454 printer_req_free(dev->out_ep, dev->current_rx_req); in printer_func_unbind()
1456 while (!list_empty(&dev->rx_reqs)) { in printer_func_unbind()
1457 req = container_of(dev->rx_reqs.next, in printer_func_unbind()
1460 printer_req_free(dev->out_ep, req); in printer_func_unbind()
1463 while (!list_empty(&dev->rx_buffers)) { in printer_func_unbind()
1464 req = container_of(dev->rx_buffers.next, in printer_func_unbind()
1467 printer_req_free(dev->out_ep, req); in printer_func_unbind()
1474 struct printer_dev *dev; in gprinter_alloc() local
1485 dev = kzalloc(sizeof(*dev), GFP_KERNEL); in gprinter_alloc()
1486 if (!dev) { in gprinter_alloc()
1491 kref_init(&dev->kref); in gprinter_alloc()
1493 dev->minor = opts->minor; in gprinter_alloc()
1494 dev->pnp_string = &opts->pnp_string; in gprinter_alloc()
1495 dev->q_len = opts->q_len; in gprinter_alloc()
1498 dev->function.name = "printer"; in gprinter_alloc()
1499 dev->function.bind = printer_func_bind; in gprinter_alloc()
1500 dev->function.setup = printer_func_setup; in gprinter_alloc()
1501 dev->function.unbind = printer_func_unbind; in gprinter_alloc()
1502 dev->function.set_alt = printer_func_set_alt; in gprinter_alloc()
1503 dev->function.disable = printer_func_disable; in gprinter_alloc()
1504 dev->function.req_match = gprinter_req_match; in gprinter_alloc()
1505 dev->function.free_func = gprinter_free; in gprinter_alloc()
1507 INIT_LIST_HEAD(&dev->tx_reqs); in gprinter_alloc()
1508 INIT_LIST_HEAD(&dev->rx_reqs); in gprinter_alloc()
1509 INIT_LIST_HEAD(&dev->rx_buffers); in gprinter_alloc()
1510 INIT_LIST_HEAD(&dev->tx_reqs_active); in gprinter_alloc()
1511 INIT_LIST_HEAD(&dev->rx_reqs_active); in gprinter_alloc()
1513 spin_lock_init(&dev->lock); in gprinter_alloc()
1514 mutex_init(&dev->lock_printer_io); in gprinter_alloc()
1515 init_waitqueue_head(&dev->rx_wait); in gprinter_alloc()
1516 init_waitqueue_head(&dev->tx_wait); in gprinter_alloc()
1517 init_waitqueue_head(&dev->tx_flush_wait); in gprinter_alloc()
1519 dev->interface = -1; in gprinter_alloc()
1520 dev->printer_cdev_open = 0; in gprinter_alloc()
1521 dev->printer_status = PRINTER_NOT_ERROR; in gprinter_alloc()
1522 dev->current_rx_req = NULL; in gprinter_alloc()
1523 dev->current_rx_bytes = 0; in gprinter_alloc()
1524 dev->current_rx_buf = NULL; in gprinter_alloc()
1526 return &dev->function; in gprinter_alloc()