Lines Matching refs:dev
266 struct printer_dev *dev = ep->driver_data; in rx_complete() local
270 spin_lock_irqsave(&dev->lock, flags); in rx_complete()
279 list_add_tail(&req->list, &dev->rx_buffers); in rx_complete()
280 DBG(dev, "G_Printer : rx length %d\n", req->actual); in rx_complete()
282 list_add(&req->list, &dev->rx_reqs); in rx_complete()
289 VDBG(dev, "rx shutdown, code %d\n", status); in rx_complete()
290 list_add(&req->list, &dev->rx_reqs); in rx_complete()
295 DBG(dev, "rx %s reset\n", ep->name); in rx_complete()
296 list_add(&req->list, &dev->rx_reqs); in rx_complete()
304 DBG(dev, "rx status %d\n", status); in rx_complete()
305 list_add(&req->list, &dev->rx_reqs); in rx_complete()
309 wake_up_interruptible(&dev->rx_wait); in rx_complete()
310 spin_unlock_irqrestore(&dev->lock, flags); in rx_complete()
315 struct printer_dev *dev = ep->driver_data; in tx_complete() local
319 VDBG(dev, "tx err %d\n", req->status); in tx_complete()
328 spin_lock(&dev->lock); in tx_complete()
333 list_add(&req->list, &dev->tx_reqs); in tx_complete()
334 wake_up_interruptible(&dev->tx_wait); in tx_complete()
335 if (likely(list_empty(&dev->tx_reqs_active))) in tx_complete()
336 wake_up_interruptible(&dev->tx_flush_wait); in tx_complete()
338 spin_unlock(&dev->lock); in tx_complete()
346 struct printer_dev *dev; in printer_open() local
350 dev = container_of(inode->i_cdev, struct printer_dev, printer_cdev); in printer_open()
352 spin_lock_irqsave(&dev->lock, flags); in printer_open()
354 if (!dev->printer_cdev_open) { in printer_open()
355 dev->printer_cdev_open = 1; in printer_open()
356 fd->private_data = dev; in printer_open()
359 dev->printer_status |= PRINTER_SELECTED; in printer_open()
362 spin_unlock_irqrestore(&dev->lock, flags); in printer_open()
364 DBG(dev, "printer_open returned %x\n", ret); in printer_open()
371 struct printer_dev *dev = fd->private_data; in printer_close() local
374 spin_lock_irqsave(&dev->lock, flags); in printer_close()
375 dev->printer_cdev_open = 0; in printer_close()
378 dev->printer_status &= ~PRINTER_SELECTED; in printer_close()
379 spin_unlock_irqrestore(&dev->lock, flags); in printer_close()
381 DBG(dev, "printer_close\n"); in printer_close()
388 setup_rx_reqs(struct printer_dev *dev) in setup_rx_reqs() argument
392 while (likely(!list_empty(&dev->rx_reqs))) { in setup_rx_reqs()
395 req = container_of(dev->rx_reqs.next, in setup_rx_reqs()
409 spin_unlock(&dev->lock); in setup_rx_reqs()
410 error = usb_ep_queue(dev->out_ep, req, GFP_ATOMIC); in setup_rx_reqs()
411 spin_lock(&dev->lock); in setup_rx_reqs()
413 DBG(dev, "rx submit --> %d\n", error); in setup_rx_reqs()
414 list_add(&req->list, &dev->rx_reqs); in setup_rx_reqs()
419 list_add(&req->list, &dev->rx_reqs_active); in setup_rx_reqs()
426 struct printer_dev *dev = fd->private_data; in printer_read() local
441 DBG(dev, "printer_read trying to read %d bytes\n", (int)len); in printer_read()
443 mutex_lock(&dev->lock_printer_io); in printer_read()
444 spin_lock_irqsave(&dev->lock, flags); in printer_read()
449 dev->reset_printer = 0; in printer_read()
451 setup_rx_reqs(dev); in printer_read()
454 current_rx_req = dev->current_rx_req; in printer_read()
455 current_rx_bytes = dev->current_rx_bytes; in printer_read()
456 current_rx_buf = dev->current_rx_buf; in printer_read()
457 dev->current_rx_req = NULL; in printer_read()
458 dev->current_rx_bytes = 0; in printer_read()
459 dev->current_rx_buf = NULL; in printer_read()
468 (likely(list_empty(&dev->rx_buffers)))) { in printer_read()
470 spin_unlock_irqrestore(&dev->lock, flags); in printer_read()
477 mutex_unlock(&dev->lock_printer_io); in printer_read()
482 wait_event_interruptible(dev->rx_wait, in printer_read()
483 (likely(!list_empty(&dev->rx_buffers)))); in printer_read()
484 spin_lock_irqsave(&dev->lock, flags); in printer_read()
488 while ((current_rx_bytes || likely(!list_empty(&dev->rx_buffers))) in printer_read()
491 req = container_of(dev->rx_buffers.next, in printer_read()
500 list_add(&req->list, &dev->rx_reqs); in printer_read()
506 spin_unlock_irqrestore(&dev->lock, flags); in printer_read()
518 spin_lock_irqsave(&dev->lock, flags); in printer_read()
521 if (dev->reset_printer) { in printer_read()
522 list_add(¤t_rx_req->list, &dev->rx_reqs); in printer_read()
523 spin_unlock_irqrestore(&dev->lock, flags); in printer_read()
524 mutex_unlock(&dev->lock_printer_io); in printer_read()
537 list_add(¤t_rx_req->list, &dev->rx_reqs); in printer_read()
544 dev->current_rx_req = current_rx_req; in printer_read()
545 dev->current_rx_bytes = current_rx_bytes; in printer_read()
546 dev->current_rx_buf = current_rx_buf; in printer_read()
548 spin_unlock_irqrestore(&dev->lock, flags); in printer_read()
549 mutex_unlock(&dev->lock_printer_io); in printer_read()
551 DBG(dev, "printer_read returned %d bytes\n", (int)bytes_copied); in printer_read()
562 struct printer_dev *dev = fd->private_data; in printer_write() local
568 DBG(dev, "printer_write trying to send %d bytes\n", (int)len); in printer_write()
573 mutex_lock(&dev->lock_printer_io); in printer_write()
574 spin_lock_irqsave(&dev->lock, flags); in printer_write()
577 dev->reset_printer = 0; in printer_write()
580 if (likely(list_empty(&dev->tx_reqs))) { in printer_write()
582 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
589 mutex_unlock(&dev->lock_printer_io); in printer_write()
594 wait_event_interruptible(dev->tx_wait, in printer_write()
595 (likely(!list_empty(&dev->tx_reqs)))); in printer_write()
596 spin_lock_irqsave(&dev->lock, flags); in printer_write()
599 while (likely(!list_empty(&dev->tx_reqs)) && len) { in printer_write()
606 req = container_of(dev->tx_reqs.next, struct usb_request, in printer_write()
621 req->zero = ((len % dev->in_ep->maxpacket) == 0); in printer_write()
624 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
627 list_add(&req->list, &dev->tx_reqs); in printer_write()
628 mutex_unlock(&dev->lock_printer_io); in printer_write()
636 spin_lock_irqsave(&dev->lock, flags); in printer_write()
639 if (dev->reset_printer) { in printer_write()
640 list_add(&req->list, &dev->tx_reqs); in printer_write()
641 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
642 mutex_unlock(&dev->lock_printer_io); in printer_write()
646 if (usb_ep_queue(dev->in_ep, req, GFP_ATOMIC)) { in printer_write()
647 list_add(&req->list, &dev->tx_reqs); in printer_write()
648 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
649 mutex_unlock(&dev->lock_printer_io); in printer_write()
653 list_add(&req->list, &dev->tx_reqs_active); in printer_write()
657 spin_unlock_irqrestore(&dev->lock, flags); in printer_write()
658 mutex_unlock(&dev->lock_printer_io); in printer_write()
660 DBG(dev, "printer_write sent %d bytes\n", (int)bytes_copied); in printer_write()
671 struct printer_dev *dev = fd->private_data; in printer_fsync() local
677 spin_lock_irqsave(&dev->lock, flags); in printer_fsync()
678 tx_list_empty = (likely(list_empty(&dev->tx_reqs))); in printer_fsync()
679 spin_unlock_irqrestore(&dev->lock, flags); in printer_fsync()
683 wait_event_interruptible(dev->tx_flush_wait, in printer_fsync()
684 (likely(list_empty(&dev->tx_reqs_active)))); in printer_fsync()
694 struct printer_dev *dev = fd->private_data; in printer_poll() local
698 mutex_lock(&dev->lock_printer_io); in printer_poll()
699 spin_lock_irqsave(&dev->lock, flags); in printer_poll()
700 setup_rx_reqs(dev); in printer_poll()
701 spin_unlock_irqrestore(&dev->lock, flags); in printer_poll()
702 mutex_unlock(&dev->lock_printer_io); in printer_poll()
704 poll_wait(fd, &dev->rx_wait, wait); in printer_poll()
705 poll_wait(fd, &dev->tx_wait, wait); in printer_poll()
707 spin_lock_irqsave(&dev->lock, flags); in printer_poll()
708 if (likely(!list_empty(&dev->tx_reqs))) in printer_poll()
711 if (likely(dev->current_rx_bytes) || in printer_poll()
712 likely(!list_empty(&dev->rx_buffers))) in printer_poll()
715 spin_unlock_irqrestore(&dev->lock, flags); in printer_poll()
723 struct printer_dev *dev = fd->private_data; in printer_ioctl() local
727 DBG(dev, "printer_ioctl: cmd=0x%4.4x, arg=%lu\n", code, arg); in printer_ioctl()
731 spin_lock_irqsave(&dev->lock, flags); in printer_ioctl()
735 status = (int)dev->printer_status; in printer_ioctl()
738 dev->printer_status = (u8)arg; in printer_ioctl()
742 DBG(dev, "printer_ioctl: ERROR cmd=0x%4.4xis not supported\n", in printer_ioctl()
747 spin_unlock_irqrestore(&dev->lock, flags); in printer_ioctl()
768 set_printer_interface(struct printer_dev *dev) in set_printer_interface() argument
772 dev->in_ep->desc = ep_desc(dev->gadget, &fs_ep_in_desc, &hs_ep_in_desc, in set_printer_interface()
774 dev->in_ep->driver_data = dev; in set_printer_interface()
776 dev->out_ep->desc = ep_desc(dev->gadget, &fs_ep_out_desc, in set_printer_interface()
778 dev->out_ep->driver_data = dev; in set_printer_interface()
780 result = usb_ep_enable(dev->in_ep); in set_printer_interface()
782 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); in set_printer_interface()
786 result = usb_ep_enable(dev->out_ep); in set_printer_interface()
788 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); in set_printer_interface()
795 (void) usb_ep_disable(dev->in_ep); in set_printer_interface()
796 (void) usb_ep_disable(dev->out_ep); in set_printer_interface()
797 dev->in_ep->desc = NULL; in set_printer_interface()
798 dev->out_ep->desc = NULL; in set_printer_interface()
805 static void printer_reset_interface(struct printer_dev *dev) in printer_reset_interface() argument
809 if (dev->interface < 0) in printer_reset_interface()
812 DBG(dev, "%s\n", __func__); in printer_reset_interface()
814 if (dev->in_ep->desc) in printer_reset_interface()
815 usb_ep_disable(dev->in_ep); in printer_reset_interface()
817 if (dev->out_ep->desc) in printer_reset_interface()
818 usb_ep_disable(dev->out_ep); in printer_reset_interface()
820 spin_lock_irqsave(&dev->lock, flags); in printer_reset_interface()
821 dev->in_ep->desc = NULL; in printer_reset_interface()
822 dev->out_ep->desc = NULL; in printer_reset_interface()
823 dev->interface = -1; in printer_reset_interface()
824 spin_unlock_irqrestore(&dev->lock, flags); in printer_reset_interface()
828 static int set_interface(struct printer_dev *dev, unsigned number) in set_interface() argument
833 printer_reset_interface(dev); in set_interface()
835 result = set_printer_interface(dev); in set_interface()
837 printer_reset_interface(dev); in set_interface()
839 dev->interface = number; in set_interface()
842 INFO(dev, "Using interface %x\n", number); in set_interface()
847 static void printer_soft_reset(struct printer_dev *dev) in printer_soft_reset() argument
851 INFO(dev, "Received Printer Reset Request\n"); in printer_soft_reset()
853 if (usb_ep_disable(dev->in_ep)) in printer_soft_reset()
854 DBG(dev, "Failed to disable USB in_ep\n"); in printer_soft_reset()
855 if (usb_ep_disable(dev->out_ep)) in printer_soft_reset()
856 DBG(dev, "Failed to disable USB out_ep\n"); in printer_soft_reset()
858 if (dev->current_rx_req != NULL) { in printer_soft_reset()
859 list_add(&dev->current_rx_req->list, &dev->rx_reqs); in printer_soft_reset()
860 dev->current_rx_req = NULL; in printer_soft_reset()
862 dev->current_rx_bytes = 0; in printer_soft_reset()
863 dev->current_rx_buf = NULL; in printer_soft_reset()
864 dev->reset_printer = 1; in printer_soft_reset()
866 while (likely(!(list_empty(&dev->rx_buffers)))) { in printer_soft_reset()
867 req = container_of(dev->rx_buffers.next, struct usb_request, in printer_soft_reset()
870 list_add(&req->list, &dev->rx_reqs); in printer_soft_reset()
873 while (likely(!(list_empty(&dev->rx_reqs_active)))) { in printer_soft_reset()
874 req = container_of(dev->rx_buffers.next, struct usb_request, in printer_soft_reset()
877 list_add(&req->list, &dev->rx_reqs); in printer_soft_reset()
880 while (likely(!(list_empty(&dev->tx_reqs_active)))) { in printer_soft_reset()
881 req = container_of(dev->tx_reqs_active.next, in printer_soft_reset()
884 list_add(&req->list, &dev->tx_reqs); in printer_soft_reset()
887 if (usb_ep_enable(dev->in_ep)) in printer_soft_reset()
888 DBG(dev, "Failed to enable USB in_ep\n"); in printer_soft_reset()
889 if (usb_ep_enable(dev->out_ep)) in printer_soft_reset()
890 DBG(dev, "Failed to enable USB out_ep\n"); in printer_soft_reset()
892 wake_up_interruptible(&dev->rx_wait); in printer_soft_reset()
893 wake_up_interruptible(&dev->tx_wait); in printer_soft_reset()
894 wake_up_interruptible(&dev->tx_flush_wait); in printer_soft_reset()
902 struct printer_dev *dev = func_to_printer(f); in gprinter_req_match() local
931 return w_index == dev->interface; in gprinter_req_match()
941 struct printer_dev *dev = func_to_printer(f); in printer_func_setup() local
949 DBG(dev, "ctrl req%02x.%02x v%04x i%04x l%d\n", in printer_func_setup()
957 if ((wIndex>>8) != dev->interface) in printer_func_setup()
960 value = (dev->pnp_string[0] << 8) | dev->pnp_string[1]; in printer_func_setup()
961 memcpy(req->buf, dev->pnp_string, value); in printer_func_setup()
962 DBG(dev, "1284 PNP String: %x %s\n", value, in printer_func_setup()
963 &dev->pnp_string[2]); in printer_func_setup()
968 if (wIndex != dev->interface) in printer_func_setup()
971 *(u8 *)req->buf = dev->printer_status; in printer_func_setup()
977 if (wIndex != dev->interface) in printer_func_setup()
980 printer_soft_reset(dev); in printer_func_setup()
992 VDBG(dev, in printer_func_setup()
1004 ERROR(dev, "%s:%d Error!\n", __func__, __LINE__); in printer_func_setup()
1015 struct printer_dev *dev = func_to_printer(f); in printer_func_bind() local
1032 dev->gadget = gadget; in printer_func_bind()
1038 dev_err(&cdev->gadget->dev, "can't autoconfigure on %s\n", in printer_func_bind()
1058 dev->in_ep = in_ep; in printer_func_bind()
1059 dev->out_ep = out_ep; in printer_func_bind()
1062 for (i = 0; i < dev->q_len; i++) { in printer_func_bind()
1063 req = printer_req_alloc(dev->in_ep, USB_BUFSIZE, GFP_KERNEL); in printer_func_bind()
1066 list_add(&req->list, &dev->tx_reqs); in printer_func_bind()
1069 for (i = 0; i < dev->q_len; i++) { in printer_func_bind()
1070 req = printer_req_alloc(dev->out_ep, USB_BUFSIZE, GFP_KERNEL); in printer_func_bind()
1073 list_add(&req->list, &dev->rx_reqs); in printer_func_bind()
1077 devt = MKDEV(major, dev->minor); in printer_func_bind()
1079 NULL, "g_printer%d", dev->minor); in printer_func_bind()
1081 ERROR(dev, "Failed to create device: g_printer\n"); in printer_func_bind()
1090 cdev_init(&dev->printer_cdev, &printer_io_operations); in printer_func_bind()
1091 dev->printer_cdev.owner = THIS_MODULE; in printer_func_bind()
1092 ret = cdev_add(&dev->printer_cdev, devt, 1); in printer_func_bind()
1094 ERROR(dev, "Failed to open char device\n"); in printer_func_bind()
1104 while (!list_empty(&dev->rx_reqs)) { in printer_func_bind()
1105 req = container_of(dev->rx_reqs.next, struct usb_request, list); in printer_func_bind()
1107 printer_req_free(dev->out_ep, req); in printer_func_bind()
1111 while (!list_empty(&dev->tx_reqs)) { in printer_func_bind()
1112 req = container_of(dev->tx_reqs.next, struct usb_request, list); in printer_func_bind()
1114 printer_req_free(dev->in_ep, req); in printer_func_bind()
1124 struct printer_dev *dev = func_to_printer(f); in printer_func_set_alt() local
1128 ret = set_interface(dev, intf); in printer_func_set_alt()
1135 struct printer_dev *dev = func_to_printer(f); in printer_func_disable() local
1137 DBG(dev, "%s\n", __func__); in printer_func_disable()
1139 printer_reset_interface(dev); in printer_func_disable()
1323 struct printer_dev *dev = func_to_printer(f); in gprinter_free() local
1327 kfree(dev); in gprinter_free()
1336 struct printer_dev *dev; in printer_func_unbind() local
1339 dev = func_to_printer(f); in printer_func_unbind()
1341 device_destroy(usb_gadget_class, MKDEV(major, dev->minor)); in printer_func_unbind()
1344 cdev_del(&dev->printer_cdev); in printer_func_unbind()
1347 WARN_ON(!list_empty(&dev->tx_reqs_active)); in printer_func_unbind()
1348 WARN_ON(!list_empty(&dev->rx_reqs_active)); in printer_func_unbind()
1351 while (!list_empty(&dev->tx_reqs)) { in printer_func_unbind()
1352 req = container_of(dev->tx_reqs.next, struct usb_request, in printer_func_unbind()
1355 printer_req_free(dev->in_ep, req); in printer_func_unbind()
1358 if (dev->current_rx_req != NULL) in printer_func_unbind()
1359 printer_req_free(dev->out_ep, dev->current_rx_req); in printer_func_unbind()
1361 while (!list_empty(&dev->rx_reqs)) { in printer_func_unbind()
1362 req = container_of(dev->rx_reqs.next, in printer_func_unbind()
1365 printer_req_free(dev->out_ep, req); in printer_func_unbind()
1368 while (!list_empty(&dev->rx_buffers)) { in printer_func_unbind()
1369 req = container_of(dev->rx_buffers.next, in printer_func_unbind()
1372 printer_req_free(dev->out_ep, req); in printer_func_unbind()
1379 struct printer_dev *dev; in gprinter_alloc() local
1390 dev = kzalloc(sizeof(*dev), GFP_KERNEL); in gprinter_alloc()
1391 if (!dev) { in gprinter_alloc()
1397 dev->minor = opts->minor; in gprinter_alloc()
1398 dev->pnp_string = opts->pnp_string; in gprinter_alloc()
1399 dev->q_len = opts->q_len; in gprinter_alloc()
1402 dev->function.name = "printer"; in gprinter_alloc()
1403 dev->function.bind = printer_func_bind; in gprinter_alloc()
1404 dev->function.setup = printer_func_setup; in gprinter_alloc()
1405 dev->function.unbind = printer_func_unbind; in gprinter_alloc()
1406 dev->function.set_alt = printer_func_set_alt; in gprinter_alloc()
1407 dev->function.disable = printer_func_disable; in gprinter_alloc()
1408 dev->function.req_match = gprinter_req_match; in gprinter_alloc()
1409 dev->function.free_func = gprinter_free; in gprinter_alloc()
1411 INIT_LIST_HEAD(&dev->tx_reqs); in gprinter_alloc()
1412 INIT_LIST_HEAD(&dev->rx_reqs); in gprinter_alloc()
1413 INIT_LIST_HEAD(&dev->rx_buffers); in gprinter_alloc()
1414 INIT_LIST_HEAD(&dev->tx_reqs_active); in gprinter_alloc()
1415 INIT_LIST_HEAD(&dev->rx_reqs_active); in gprinter_alloc()
1417 spin_lock_init(&dev->lock); in gprinter_alloc()
1418 mutex_init(&dev->lock_printer_io); in gprinter_alloc()
1419 init_waitqueue_head(&dev->rx_wait); in gprinter_alloc()
1420 init_waitqueue_head(&dev->tx_wait); in gprinter_alloc()
1421 init_waitqueue_head(&dev->tx_flush_wait); in gprinter_alloc()
1423 dev->interface = -1; in gprinter_alloc()
1424 dev->printer_cdev_open = 0; in gprinter_alloc()
1425 dev->printer_status = PRINTER_NOT_ERROR; in gprinter_alloc()
1426 dev->current_rx_req = NULL; in gprinter_alloc()
1427 dev->current_rx_bytes = 0; in gprinter_alloc()
1428 dev->current_rx_buf = NULL; in gprinter_alloc()
1430 return &dev->function; in gprinter_alloc()