1 // SPDX-License-Identifier: GPL-2.0+
3 * f_printer.c - USB printer function driver
5 * Copied from drivers/usb/gadget/legacy/printer.c,
8 * printer.c -- Printer gadget driver
10 * Copyright (C) 2003-2005 David Brownell
11 * Copyright (C) 2006 Craig W. Nadler
14 #include <linux/module.h>
15 #include <linux/kernel.h>
16 #include <linux/delay.h>
17 #include <linux/ioport.h>
18 #include <linux/sched.h>
19 #include <linux/slab.h>
20 #include <linux/mutex.h>
21 #include <linux/errno.h>
22 #include <linux/init.h>
23 #include <linux/idr.h>
24 #include <linux/timer.h>
25 #include <linux/list.h>
26 #include <linux/interrupt.h>
27 #include <linux/device.h>
28 #include <linux/moduleparam.h>
30 #include <linux/poll.h>
31 #include <linux/types.h>
32 #include <linux/ctype.h>
33 #include <linux/cdev.h>
34 #include <linux/kref.h>
36 #include <asm/byteorder.h>
38 #include <linux/irq.h>
39 #include <linux/uaccess.h>
40 #include <asm/unaligned.h>
42 #include <linux/usb/ch9.h>
43 #include <linux/usb/composite.h>
44 #include <linux/usb/gadget.h>
45 #include <linux/usb/g_printer.h>
47 #include "u_printer.h"
49 #define PRINTER_MINORS 4
50 #define GET_DEVICE_ID 0
51 #define GET_PORT_STATUS 1
54 static int major
, minors
;
55 static struct class *usb_gadget_class
;
56 static DEFINE_IDA(printer_ida
);
57 static DEFINE_MUTEX(printer_ida_lock
); /* protects access do printer_ida */
59 /*-------------------------------------------------------------------------*/
62 spinlock_t lock
; /* lock this structure */
63 /* lock buffer lists during read/write calls */
64 struct mutex lock_printer_io
;
65 struct usb_gadget
*gadget
;
67 struct usb_ep
*in_ep
, *out_ep
;
69 struct list_head rx_reqs
; /* List of free RX structs */
70 struct list_head rx_reqs_active
; /* List of Active RX xfers */
71 struct list_head rx_buffers
; /* List of completed xfers */
72 /* wait until there is data to be read. */
73 wait_queue_head_t rx_wait
;
74 struct list_head tx_reqs
; /* List of free TX structs */
75 struct list_head tx_reqs_active
; /* List of Active TX xfers */
76 /* Wait until there are write buffers available to use. */
77 wait_queue_head_t tx_wait
;
78 /* Wait until all write buffers have been sent. */
79 wait_queue_head_t tx_flush_wait
;
80 struct usb_request
*current_rx_req
;
81 size_t current_rx_bytes
;
86 struct cdev printer_cdev
;
88 wait_queue_head_t wait
;
90 char *pnp_string
; /* We don't own memory! */
91 struct usb_function function
;
94 static inline struct printer_dev
*func_to_printer(struct usb_function
*f
)
96 return container_of(f
, struct printer_dev
, function
);
99 /*-------------------------------------------------------------------------*/
102 * DESCRIPTORS ... most are static, but strings and (full) configuration
103 * descriptors are built on demand.
106 /* holds our biggest descriptor */
107 #define USB_DESC_BUFSIZE 256
108 #define USB_BUFSIZE 8192
110 static struct usb_interface_descriptor intf_desc
= {
111 .bLength
= sizeof(intf_desc
),
112 .bDescriptorType
= USB_DT_INTERFACE
,
114 .bInterfaceClass
= USB_CLASS_PRINTER
,
115 .bInterfaceSubClass
= 1, /* Printer Sub-Class */
116 .bInterfaceProtocol
= 2, /* Bi-Directional */
120 static struct usb_endpoint_descriptor fs_ep_in_desc
= {
121 .bLength
= USB_DT_ENDPOINT_SIZE
,
122 .bDescriptorType
= USB_DT_ENDPOINT
,
123 .bEndpointAddress
= USB_DIR_IN
,
124 .bmAttributes
= USB_ENDPOINT_XFER_BULK
127 static struct usb_endpoint_descriptor fs_ep_out_desc
= {
128 .bLength
= USB_DT_ENDPOINT_SIZE
,
129 .bDescriptorType
= USB_DT_ENDPOINT
,
130 .bEndpointAddress
= USB_DIR_OUT
,
131 .bmAttributes
= USB_ENDPOINT_XFER_BULK
134 static struct usb_descriptor_header
*fs_printer_function
[] = {
135 (struct usb_descriptor_header
*) &intf_desc
,
136 (struct usb_descriptor_header
*) &fs_ep_in_desc
,
137 (struct usb_descriptor_header
*) &fs_ep_out_desc
,
142 * usb 2.0 devices need to expose both high speed and full speed
143 * descriptors, unless they only run at full speed.
146 static struct usb_endpoint_descriptor hs_ep_in_desc
= {
147 .bLength
= USB_DT_ENDPOINT_SIZE
,
148 .bDescriptorType
= USB_DT_ENDPOINT
,
149 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
150 .wMaxPacketSize
= cpu_to_le16(512)
153 static struct usb_endpoint_descriptor hs_ep_out_desc
= {
154 .bLength
= USB_DT_ENDPOINT_SIZE
,
155 .bDescriptorType
= USB_DT_ENDPOINT
,
156 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
157 .wMaxPacketSize
= cpu_to_le16(512)
160 static struct usb_descriptor_header
*hs_printer_function
[] = {
161 (struct usb_descriptor_header
*) &intf_desc
,
162 (struct usb_descriptor_header
*) &hs_ep_in_desc
,
163 (struct usb_descriptor_header
*) &hs_ep_out_desc
,
168 * Added endpoint descriptors for 3.0 devices
171 static struct usb_endpoint_descriptor ss_ep_in_desc
= {
172 .bLength
= USB_DT_ENDPOINT_SIZE
,
173 .bDescriptorType
= USB_DT_ENDPOINT
,
174 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
175 .wMaxPacketSize
= cpu_to_le16(1024),
178 static struct usb_ss_ep_comp_descriptor ss_ep_in_comp_desc
= {
179 .bLength
= sizeof(ss_ep_in_comp_desc
),
180 .bDescriptorType
= USB_DT_SS_ENDPOINT_COMP
,
183 static struct usb_endpoint_descriptor ss_ep_out_desc
= {
184 .bLength
= USB_DT_ENDPOINT_SIZE
,
185 .bDescriptorType
= USB_DT_ENDPOINT
,
186 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
187 .wMaxPacketSize
= cpu_to_le16(1024),
190 static struct usb_ss_ep_comp_descriptor ss_ep_out_comp_desc
= {
191 .bLength
= sizeof(ss_ep_out_comp_desc
),
192 .bDescriptorType
= USB_DT_SS_ENDPOINT_COMP
,
195 static struct usb_descriptor_header
*ss_printer_function
[] = {
196 (struct usb_descriptor_header
*) &intf_desc
,
197 (struct usb_descriptor_header
*) &ss_ep_in_desc
,
198 (struct usb_descriptor_header
*) &ss_ep_in_comp_desc
,
199 (struct usb_descriptor_header
*) &ss_ep_out_desc
,
200 (struct usb_descriptor_header
*) &ss_ep_out_comp_desc
,
204 /* maxpacket and other transfer characteristics vary by speed. */
205 static inline struct usb_endpoint_descriptor
*ep_desc(struct usb_gadget
*gadget
,
206 struct usb_endpoint_descriptor
*fs
,
207 struct usb_endpoint_descriptor
*hs
,
208 struct usb_endpoint_descriptor
*ss
)
210 switch (gadget
->speed
) {
211 case USB_SPEED_SUPER
:
220 /*-------------------------------------------------------------------------*/
222 static void printer_dev_free(struct kref
*kref
)
224 struct printer_dev
*dev
= container_of(kref
, struct printer_dev
, kref
);
229 static struct usb_request
*
230 printer_req_alloc(struct usb_ep
*ep
, unsigned len
, gfp_t gfp_flags
)
232 struct usb_request
*req
;
234 req
= usb_ep_alloc_request(ep
, gfp_flags
);
238 req
->buf
= kmalloc(len
, gfp_flags
);
239 if (req
->buf
== NULL
) {
240 usb_ep_free_request(ep
, req
);
249 printer_req_free(struct usb_ep
*ep
, struct usb_request
*req
)
251 if (ep
!= NULL
&& req
!= NULL
) {
253 usb_ep_free_request(ep
, req
);
257 /*-------------------------------------------------------------------------*/
259 static void rx_complete(struct usb_ep
*ep
, struct usb_request
*req
)
261 struct printer_dev
*dev
= ep
->driver_data
;
262 int status
= req
->status
;
265 spin_lock_irqsave(&dev
->lock
, flags
);
267 list_del_init(&req
->list
); /* Remode from Active List */
271 /* normal completion */
273 if (req
->actual
> 0) {
274 list_add_tail(&req
->list
, &dev
->rx_buffers
);
275 DBG(dev
, "G_Printer : rx length %d\n", req
->actual
);
277 list_add(&req
->list
, &dev
->rx_reqs
);
281 /* software-driven interface shutdown */
282 case -ECONNRESET
: /* unlink */
283 case -ESHUTDOWN
: /* disconnect etc */
284 VDBG(dev
, "rx shutdown, code %d\n", status
);
285 list_add(&req
->list
, &dev
->rx_reqs
);
288 /* for hardware automagic (such as pxa) */
289 case -ECONNABORTED
: /* endpoint reset */
290 DBG(dev
, "rx %s reset\n", ep
->name
);
291 list_add(&req
->list
, &dev
->rx_reqs
);
299 DBG(dev
, "rx status %d\n", status
);
300 list_add(&req
->list
, &dev
->rx_reqs
);
304 wake_up_interruptible(&dev
->rx_wait
);
305 spin_unlock_irqrestore(&dev
->lock
, flags
);
308 static void tx_complete(struct usb_ep
*ep
, struct usb_request
*req
)
310 struct printer_dev
*dev
= ep
->driver_data
;
312 switch (req
->status
) {
314 VDBG(dev
, "tx err %d\n", req
->status
);
316 case -ECONNRESET
: /* unlink */
317 case -ESHUTDOWN
: /* disconnect etc */
323 spin_lock(&dev
->lock
);
324 /* Take the request struct off the active list and put it on the
327 list_del_init(&req
->list
);
328 list_add(&req
->list
, &dev
->tx_reqs
);
329 wake_up_interruptible(&dev
->tx_wait
);
330 if (likely(list_empty(&dev
->tx_reqs_active
)))
331 wake_up_interruptible(&dev
->tx_flush_wait
);
333 spin_unlock(&dev
->lock
);
336 /*-------------------------------------------------------------------------*/
339 printer_open(struct inode
*inode
, struct file
*fd
)
341 struct printer_dev
*dev
;
345 dev
= container_of(inode
->i_cdev
, struct printer_dev
, printer_cdev
);
347 spin_lock_irqsave(&dev
->lock
, flags
);
349 if (dev
->interface
< 0) {
350 spin_unlock_irqrestore(&dev
->lock
, flags
);
354 if (!dev
->printer_cdev_open
) {
355 dev
->printer_cdev_open
= 1;
356 fd
->private_data
= dev
;
358 /* Change the printer status to show that it's on-line. */
359 dev
->printer_status
|= PRINTER_SELECTED
;
362 spin_unlock_irqrestore(&dev
->lock
, flags
);
364 kref_get(&dev
->kref
);
365 DBG(dev
, "printer_open returned %x\n", ret
);
370 printer_close(struct inode
*inode
, struct file
*fd
)
372 struct printer_dev
*dev
= fd
->private_data
;
375 spin_lock_irqsave(&dev
->lock
, flags
);
376 dev
->printer_cdev_open
= 0;
377 fd
->private_data
= NULL
;
378 /* Change printer status to show that the printer is off-line. */
379 dev
->printer_status
&= ~PRINTER_SELECTED
;
380 spin_unlock_irqrestore(&dev
->lock
, flags
);
382 kref_put(&dev
->kref
, printer_dev_free
);
383 DBG(dev
, "printer_close\n");
388 /* This function must be called with interrupts turned off. */
390 setup_rx_reqs(struct printer_dev
*dev
)
392 struct usb_request
*req
;
394 while (likely(!list_empty(&dev
->rx_reqs
))) {
397 req
= container_of(dev
->rx_reqs
.next
,
398 struct usb_request
, list
);
399 list_del_init(&req
->list
);
401 /* The USB Host sends us whatever amount of data it wants to
402 * so we always set the length field to the full USB_BUFSIZE.
403 * If the amount of data is more than the read() caller asked
404 * for it will be stored in the request buffer until it is
405 * asked for by read().
407 req
->length
= USB_BUFSIZE
;
408 req
->complete
= rx_complete
;
410 /* here, we unlock, and only unlock, to avoid deadlock. */
411 spin_unlock(&dev
->lock
);
412 error
= usb_ep_queue(dev
->out_ep
, req
, GFP_ATOMIC
);
413 spin_lock(&dev
->lock
);
415 DBG(dev
, "rx submit --> %d\n", error
);
416 list_add(&req
->list
, &dev
->rx_reqs
);
419 /* if the req is empty, then add it into dev->rx_reqs_active. */
420 else if (list_empty(&req
->list
))
421 list_add(&req
->list
, &dev
->rx_reqs_active
);
426 printer_read(struct file
*fd
, char __user
*buf
, size_t len
, loff_t
*ptr
)
428 struct printer_dev
*dev
= fd
->private_data
;
432 struct usb_request
*req
;
433 /* This is a pointer to the current USB rx request. */
434 struct usb_request
*current_rx_req
;
435 /* This is the number of bytes in the current rx buffer. */
436 size_t current_rx_bytes
;
437 /* This is a pointer to the current rx buffer. */
443 DBG(dev
, "printer_read trying to read %d bytes\n", (int)len
);
445 mutex_lock(&dev
->lock_printer_io
);
446 spin_lock_irqsave(&dev
->lock
, flags
);
448 if (dev
->interface
< 0) {
449 spin_unlock_irqrestore(&dev
->lock
, flags
);
450 mutex_unlock(&dev
->lock_printer_io
);
454 /* We will use this flag later to check if a printer reset happened
455 * after we turn interrupts back on.
457 dev
->reset_printer
= 0;
462 current_rx_req
= dev
->current_rx_req
;
463 current_rx_bytes
= dev
->current_rx_bytes
;
464 current_rx_buf
= dev
->current_rx_buf
;
465 dev
->current_rx_req
= NULL
;
466 dev
->current_rx_bytes
= 0;
467 dev
->current_rx_buf
= NULL
;
469 /* Check if there is any data in the read buffers. Please note that
470 * current_rx_bytes is the number of bytes in the current rx buffer.
471 * If it is zero then check if there are any other rx_buffers that
472 * are on the completed list. We are only out of data if all rx
475 if ((current_rx_bytes
== 0) &&
476 (likely(list_empty(&dev
->rx_buffers
)))) {
477 /* Turn interrupts back on before sleeping. */
478 spin_unlock_irqrestore(&dev
->lock
, flags
);
481 * If no data is available check if this is a NON-Blocking
484 if (fd
->f_flags
& (O_NONBLOCK
|O_NDELAY
)) {
485 mutex_unlock(&dev
->lock_printer_io
);
489 /* Sleep until data is available */
490 wait_event_interruptible(dev
->rx_wait
,
491 (likely(!list_empty(&dev
->rx_buffers
))));
492 spin_lock_irqsave(&dev
->lock
, flags
);
495 /* We have data to return then copy it to the caller's buffer.*/
496 while ((current_rx_bytes
|| likely(!list_empty(&dev
->rx_buffers
)))
498 if (current_rx_bytes
== 0) {
499 req
= container_of(dev
->rx_buffers
.next
,
500 struct usb_request
, list
);
501 list_del_init(&req
->list
);
503 if (req
->actual
&& req
->buf
) {
504 current_rx_req
= req
;
505 current_rx_bytes
= req
->actual
;
506 current_rx_buf
= req
->buf
;
508 list_add(&req
->list
, &dev
->rx_reqs
);
513 /* Don't leave irqs off while doing memory copies */
514 spin_unlock_irqrestore(&dev
->lock
, flags
);
516 if (len
> current_rx_bytes
)
517 size
= current_rx_bytes
;
521 size
-= copy_to_user(buf
, current_rx_buf
, size
);
522 bytes_copied
+= size
;
526 spin_lock_irqsave(&dev
->lock
, flags
);
528 /* We've disconnected or reset so return. */
529 if (dev
->reset_printer
) {
530 list_add(¤t_rx_req
->list
, &dev
->rx_reqs
);
531 spin_unlock_irqrestore(&dev
->lock
, flags
);
532 mutex_unlock(&dev
->lock_printer_io
);
536 /* If we not returning all the data left in this RX request
537 * buffer then adjust the amount of data left in the buffer.
538 * Othewise if we are done with this RX request buffer then
539 * requeue it to get any incoming data from the USB host.
541 if (size
< current_rx_bytes
) {
542 current_rx_bytes
-= size
;
543 current_rx_buf
+= size
;
545 list_add(¤t_rx_req
->list
, &dev
->rx_reqs
);
546 current_rx_bytes
= 0;
547 current_rx_buf
= NULL
;
548 current_rx_req
= NULL
;
552 dev
->current_rx_req
= current_rx_req
;
553 dev
->current_rx_bytes
= current_rx_bytes
;
554 dev
->current_rx_buf
= current_rx_buf
;
556 spin_unlock_irqrestore(&dev
->lock
, flags
);
557 mutex_unlock(&dev
->lock_printer_io
);
559 DBG(dev
, "printer_read returned %d bytes\n", (int)bytes_copied
);
568 printer_write(struct file
*fd
, const char __user
*buf
, size_t len
, loff_t
*ptr
)
570 struct printer_dev
*dev
= fd
->private_data
;
572 size_t size
; /* Amount of data in a TX request. */
573 size_t bytes_copied
= 0;
574 struct usb_request
*req
;
577 DBG(dev
, "printer_write trying to send %d bytes\n", (int)len
);
582 mutex_lock(&dev
->lock_printer_io
);
583 spin_lock_irqsave(&dev
->lock
, flags
);
585 if (dev
->interface
< 0) {
586 spin_unlock_irqrestore(&dev
->lock
, flags
);
587 mutex_unlock(&dev
->lock_printer_io
);
591 /* Check if a printer reset happens while we have interrupts on */
592 dev
->reset_printer
= 0;
594 /* Check if there is any available write buffers */
595 if (likely(list_empty(&dev
->tx_reqs
))) {
596 /* Turn interrupts back on before sleeping. */
597 spin_unlock_irqrestore(&dev
->lock
, flags
);
600 * If write buffers are available check if this is
601 * a NON-Blocking call or not.
603 if (fd
->f_flags
& (O_NONBLOCK
|O_NDELAY
)) {
604 mutex_unlock(&dev
->lock_printer_io
);
608 /* Sleep until a write buffer is available */
609 wait_event_interruptible(dev
->tx_wait
,
610 (likely(!list_empty(&dev
->tx_reqs
))));
611 spin_lock_irqsave(&dev
->lock
, flags
);
614 while (likely(!list_empty(&dev
->tx_reqs
)) && len
) {
616 if (len
> USB_BUFSIZE
)
621 req
= container_of(dev
->tx_reqs
.next
, struct usb_request
,
623 list_del_init(&req
->list
);
625 req
->complete
= tx_complete
;
628 /* Check if we need to send a zero length packet. */
630 /* They will be more TX requests so no yet. */
633 /* If the data amount is not a multiple of the
634 * maxpacket size then send a zero length packet.
636 req
->zero
= ((len
% dev
->in_ep
->maxpacket
) == 0);
638 /* Don't leave irqs off while doing memory copies */
639 spin_unlock_irqrestore(&dev
->lock
, flags
);
641 if (copy_from_user(req
->buf
, buf
, size
)) {
642 list_add(&req
->list
, &dev
->tx_reqs
);
643 mutex_unlock(&dev
->lock_printer_io
);
647 bytes_copied
+= size
;
651 spin_lock_irqsave(&dev
->lock
, flags
);
653 /* We've disconnected or reset so free the req and buffer */
654 if (dev
->reset_printer
) {
655 list_add(&req
->list
, &dev
->tx_reqs
);
656 spin_unlock_irqrestore(&dev
->lock
, flags
);
657 mutex_unlock(&dev
->lock_printer_io
);
661 list_add(&req
->list
, &dev
->tx_reqs_active
);
663 /* here, we unlock, and only unlock, to avoid deadlock. */
664 spin_unlock(&dev
->lock
);
665 value
= usb_ep_queue(dev
->in_ep
, req
, GFP_ATOMIC
);
666 spin_lock(&dev
->lock
);
668 list_del(&req
->list
);
669 list_add(&req
->list
, &dev
->tx_reqs
);
670 spin_unlock_irqrestore(&dev
->lock
, flags
);
671 mutex_unlock(&dev
->lock_printer_io
);
676 spin_unlock_irqrestore(&dev
->lock
, flags
);
677 mutex_unlock(&dev
->lock_printer_io
);
679 DBG(dev
, "printer_write sent %d bytes\n", (int)bytes_copied
);
688 printer_fsync(struct file
*fd
, loff_t start
, loff_t end
, int datasync
)
690 struct printer_dev
*dev
= fd
->private_data
;
691 struct inode
*inode
= file_inode(fd
);
696 spin_lock_irqsave(&dev
->lock
, flags
);
698 if (dev
->interface
< 0) {
699 spin_unlock_irqrestore(&dev
->lock
, flags
);
704 tx_list_empty
= (likely(list_empty(&dev
->tx_reqs
)));
705 spin_unlock_irqrestore(&dev
->lock
, flags
);
707 if (!tx_list_empty
) {
708 /* Sleep until all data has been sent */
709 wait_event_interruptible(dev
->tx_flush_wait
,
710 (likely(list_empty(&dev
->tx_reqs_active
))));
718 printer_poll(struct file
*fd
, poll_table
*wait
)
720 struct printer_dev
*dev
= fd
->private_data
;
724 mutex_lock(&dev
->lock_printer_io
);
725 spin_lock_irqsave(&dev
->lock
, flags
);
727 if (dev
->interface
< 0) {
728 spin_unlock_irqrestore(&dev
->lock
, flags
);
729 mutex_unlock(&dev
->lock_printer_io
);
730 return EPOLLERR
| EPOLLHUP
;
734 spin_unlock_irqrestore(&dev
->lock
, flags
);
735 mutex_unlock(&dev
->lock_printer_io
);
737 poll_wait(fd
, &dev
->rx_wait
, wait
);
738 poll_wait(fd
, &dev
->tx_wait
, wait
);
740 spin_lock_irqsave(&dev
->lock
, flags
);
741 if (likely(!list_empty(&dev
->tx_reqs
)))
742 status
|= EPOLLOUT
| EPOLLWRNORM
;
744 if (likely(dev
->current_rx_bytes
) ||
745 likely(!list_empty(&dev
->rx_buffers
)))
746 status
|= EPOLLIN
| EPOLLRDNORM
;
748 spin_unlock_irqrestore(&dev
->lock
, flags
);
754 printer_ioctl(struct file
*fd
, unsigned int code
, unsigned long arg
)
756 struct printer_dev
*dev
= fd
->private_data
;
760 DBG(dev
, "printer_ioctl: cmd=0x%4.4x, arg=%lu\n", code
, arg
);
764 spin_lock_irqsave(&dev
->lock
, flags
);
766 if (dev
->interface
< 0) {
767 spin_unlock_irqrestore(&dev
->lock
, flags
);
772 case GADGET_GET_PRINTER_STATUS
:
773 status
= (int)dev
->printer_status
;
775 case GADGET_SET_PRINTER_STATUS
:
776 dev
->printer_status
= (u8
)arg
;
779 /* could not handle ioctl */
780 DBG(dev
, "printer_ioctl: ERROR cmd=0x%4.4xis not supported\n",
785 spin_unlock_irqrestore(&dev
->lock
, flags
);
790 /* used after endpoint configuration */
791 static const struct file_operations printer_io_operations
= {
792 .owner
= THIS_MODULE
,
793 .open
= printer_open
,
794 .read
= printer_read
,
795 .write
= printer_write
,
796 .fsync
= printer_fsync
,
797 .poll
= printer_poll
,
798 .unlocked_ioctl
= printer_ioctl
,
799 .release
= printer_close
,
800 .llseek
= noop_llseek
,
803 /*-------------------------------------------------------------------------*/
806 set_printer_interface(struct printer_dev
*dev
)
810 dev
->in_ep
->desc
= ep_desc(dev
->gadget
, &fs_ep_in_desc
, &hs_ep_in_desc
,
812 dev
->in_ep
->driver_data
= dev
;
814 dev
->out_ep
->desc
= ep_desc(dev
->gadget
, &fs_ep_out_desc
,
815 &hs_ep_out_desc
, &ss_ep_out_desc
);
816 dev
->out_ep
->driver_data
= dev
;
818 result
= usb_ep_enable(dev
->in_ep
);
820 DBG(dev
, "enable %s --> %d\n", dev
->in_ep
->name
, result
);
824 result
= usb_ep_enable(dev
->out_ep
);
826 DBG(dev
, "enable %s --> %d\n", dev
->in_ep
->name
, result
);
831 /* on error, disable any endpoints */
833 (void) usb_ep_disable(dev
->in_ep
);
834 (void) usb_ep_disable(dev
->out_ep
);
835 dev
->in_ep
->desc
= NULL
;
836 dev
->out_ep
->desc
= NULL
;
839 /* caller is responsible for cleanup on error */
843 static void printer_reset_interface(struct printer_dev
*dev
)
847 if (dev
->interface
< 0)
850 DBG(dev
, "%s\n", __func__
);
852 if (dev
->in_ep
->desc
)
853 usb_ep_disable(dev
->in_ep
);
855 if (dev
->out_ep
->desc
)
856 usb_ep_disable(dev
->out_ep
);
858 spin_lock_irqsave(&dev
->lock
, flags
);
859 dev
->in_ep
->desc
= NULL
;
860 dev
->out_ep
->desc
= NULL
;
862 spin_unlock_irqrestore(&dev
->lock
, flags
);
865 /* Change our operational Interface. */
866 static int set_interface(struct printer_dev
*dev
, unsigned number
)
870 /* Free the current interface */
871 printer_reset_interface(dev
);
873 result
= set_printer_interface(dev
);
875 printer_reset_interface(dev
);
877 dev
->interface
= number
;
880 INFO(dev
, "Using interface %x\n", number
);
885 static void printer_soft_reset(struct printer_dev
*dev
)
887 struct usb_request
*req
;
889 INFO(dev
, "Received Printer Reset Request\n");
891 if (usb_ep_disable(dev
->in_ep
))
892 DBG(dev
, "Failed to disable USB in_ep\n");
893 if (usb_ep_disable(dev
->out_ep
))
894 DBG(dev
, "Failed to disable USB out_ep\n");
896 if (dev
->current_rx_req
!= NULL
) {
897 list_add(&dev
->current_rx_req
->list
, &dev
->rx_reqs
);
898 dev
->current_rx_req
= NULL
;
900 dev
->current_rx_bytes
= 0;
901 dev
->current_rx_buf
= NULL
;
902 dev
->reset_printer
= 1;
904 while (likely(!(list_empty(&dev
->rx_buffers
)))) {
905 req
= container_of(dev
->rx_buffers
.next
, struct usb_request
,
907 list_del_init(&req
->list
);
908 list_add(&req
->list
, &dev
->rx_reqs
);
911 while (likely(!(list_empty(&dev
->rx_reqs_active
)))) {
912 req
= container_of(dev
->rx_buffers
.next
, struct usb_request
,
914 list_del_init(&req
->list
);
915 list_add(&req
->list
, &dev
->rx_reqs
);
918 while (likely(!(list_empty(&dev
->tx_reqs_active
)))) {
919 req
= container_of(dev
->tx_reqs_active
.next
,
920 struct usb_request
, list
);
921 list_del_init(&req
->list
);
922 list_add(&req
->list
, &dev
->tx_reqs
);
925 if (usb_ep_enable(dev
->in_ep
))
926 DBG(dev
, "Failed to enable USB in_ep\n");
927 if (usb_ep_enable(dev
->out_ep
))
928 DBG(dev
, "Failed to enable USB out_ep\n");
930 wake_up_interruptible(&dev
->rx_wait
);
931 wake_up_interruptible(&dev
->tx_wait
);
932 wake_up_interruptible(&dev
->tx_flush_wait
);
935 /*-------------------------------------------------------------------------*/
937 static bool gprinter_req_match(struct usb_function
*f
,
938 const struct usb_ctrlrequest
*ctrl
,
941 struct printer_dev
*dev
= func_to_printer(f
);
942 u16 w_index
= le16_to_cpu(ctrl
->wIndex
);
943 u16 w_value
= le16_to_cpu(ctrl
->wValue
);
944 u16 w_length
= le16_to_cpu(ctrl
->wLength
);
949 if ((ctrl
->bRequestType
& USB_RECIP_MASK
) != USB_RECIP_INTERFACE
||
950 (ctrl
->bRequestType
& USB_TYPE_MASK
) != USB_TYPE_CLASS
)
953 switch (ctrl
->bRequest
) {
956 if (USB_DIR_IN
& ctrl
->bRequestType
)
959 case GET_PORT_STATUS
:
960 if (!w_value
&& w_length
== 1 &&
961 (USB_DIR_IN
& ctrl
->bRequestType
))
965 if (!w_value
&& !w_length
&&
966 !(USB_DIR_IN
& ctrl
->bRequestType
))
972 return w_index
== dev
->interface
;
976 * The setup() callback implements all the ep0 functionality that's not
977 * handled lower down.
979 static int printer_func_setup(struct usb_function
*f
,
980 const struct usb_ctrlrequest
*ctrl
)
982 struct printer_dev
*dev
= func_to_printer(f
);
983 struct usb_composite_dev
*cdev
= f
->config
->cdev
;
984 struct usb_request
*req
= cdev
->req
;
986 int value
= -EOPNOTSUPP
;
987 u16 wIndex
= le16_to_cpu(ctrl
->wIndex
);
988 u16 wValue
= le16_to_cpu(ctrl
->wValue
);
989 u16 wLength
= le16_to_cpu(ctrl
->wLength
);
991 DBG(dev
, "ctrl req%02x.%02x v%04x i%04x l%d\n",
992 ctrl
->bRequestType
, ctrl
->bRequest
, wValue
, wIndex
, wLength
);
994 switch (ctrl
->bRequestType
&USB_TYPE_MASK
) {
996 switch (ctrl
->bRequest
) {
997 case GET_DEVICE_ID
: /* Get the IEEE-1284 PNP String */
998 /* Only one printer interface is supported. */
999 if ((wIndex
>>8) != dev
->interface
)
1002 if (!dev
->pnp_string
) {
1006 value
= strlen(dev
->pnp_string
);
1007 buf
[0] = (value
>> 8) & 0xFF;
1008 buf
[1] = value
& 0xFF;
1009 memcpy(buf
+ 2, dev
->pnp_string
, value
);
1010 DBG(dev
, "1284 PNP String: %x %s\n", value
,
1014 case GET_PORT_STATUS
: /* Get Port Status */
1015 /* Only one printer interface is supported. */
1016 if (wIndex
!= dev
->interface
)
1019 buf
[0] = dev
->printer_status
;
1020 value
= min_t(u16
, wLength
, 1);
1023 case SOFT_RESET
: /* Soft Reset */
1024 /* Only one printer interface is supported. */
1025 if (wIndex
!= dev
->interface
)
1028 printer_soft_reset(dev
);
1041 "unknown ctrl req%02x.%02x v%04x i%04x l%d\n",
1042 ctrl
->bRequestType
, ctrl
->bRequest
,
1043 wValue
, wIndex
, wLength
);
1046 /* host either stalls (value < 0) or reports success */
1048 req
->length
= value
;
1049 req
->zero
= value
< wLength
;
1050 value
= usb_ep_queue(cdev
->gadget
->ep0
, req
, GFP_ATOMIC
);
1052 ERROR(dev
, "%s:%d Error!\n", __func__
, __LINE__
);
1059 static int printer_func_bind(struct usb_configuration
*c
,
1060 struct usb_function
*f
)
1062 struct usb_gadget
*gadget
= c
->cdev
->gadget
;
1063 struct printer_dev
*dev
= func_to_printer(f
);
1064 struct device
*pdev
;
1065 struct usb_composite_dev
*cdev
= c
->cdev
;
1066 struct usb_ep
*in_ep
;
1067 struct usb_ep
*out_ep
= NULL
;
1068 struct usb_request
*req
;
1074 id
= usb_interface_id(c
, f
);
1077 intf_desc
.bInterfaceNumber
= id
;
1079 /* finish hookup to lower layer ... */
1080 dev
->gadget
= gadget
;
1082 /* all we really need is bulk IN/OUT */
1083 in_ep
= usb_ep_autoconfig(cdev
->gadget
, &fs_ep_in_desc
);
1086 dev_err(&cdev
->gadget
->dev
, "can't autoconfigure on %s\n",
1087 cdev
->gadget
->name
);
1091 out_ep
= usb_ep_autoconfig(cdev
->gadget
, &fs_ep_out_desc
);
1095 /* assumes that all endpoints are dual-speed */
1096 hs_ep_in_desc
.bEndpointAddress
= fs_ep_in_desc
.bEndpointAddress
;
1097 hs_ep_out_desc
.bEndpointAddress
= fs_ep_out_desc
.bEndpointAddress
;
1098 ss_ep_in_desc
.bEndpointAddress
= fs_ep_in_desc
.bEndpointAddress
;
1099 ss_ep_out_desc
.bEndpointAddress
= fs_ep_out_desc
.bEndpointAddress
;
1101 ret
= usb_assign_descriptors(f
, fs_printer_function
,
1102 hs_printer_function
, ss_printer_function
, NULL
);
1107 dev
->out_ep
= out_ep
;
1110 for (i
= 0; i
< dev
->q_len
; i
++) {
1111 req
= printer_req_alloc(dev
->in_ep
, USB_BUFSIZE
, GFP_KERNEL
);
1114 list_add(&req
->list
, &dev
->tx_reqs
);
1117 for (i
= 0; i
< dev
->q_len
; i
++) {
1118 req
= printer_req_alloc(dev
->out_ep
, USB_BUFSIZE
, GFP_KERNEL
);
1121 list_add(&req
->list
, &dev
->rx_reqs
);
1124 /* Setup the sysfs files for the printer gadget. */
1125 devt
= MKDEV(major
, dev
->minor
);
1126 pdev
= device_create(usb_gadget_class
, NULL
, devt
,
1127 NULL
, "g_printer%d", dev
->minor
);
1129 ERROR(dev
, "Failed to create device: g_printer\n");
1130 ret
= PTR_ERR(pdev
);
1135 * Register a character device as an interface to a user mode
1136 * program that handles the printer specific functionality.
1138 cdev_init(&dev
->printer_cdev
, &printer_io_operations
);
1139 dev
->printer_cdev
.owner
= THIS_MODULE
;
1140 ret
= cdev_add(&dev
->printer_cdev
, devt
, 1);
1142 ERROR(dev
, "Failed to open char device\n");
1149 device_destroy(usb_gadget_class
, devt
);
1152 while (!list_empty(&dev
->rx_reqs
)) {
1153 req
= container_of(dev
->rx_reqs
.next
, struct usb_request
, list
);
1154 list_del(&req
->list
);
1155 printer_req_free(dev
->out_ep
, req
);
1159 while (!list_empty(&dev
->tx_reqs
)) {
1160 req
= container_of(dev
->tx_reqs
.next
, struct usb_request
, list
);
1161 list_del(&req
->list
);
1162 printer_req_free(dev
->in_ep
, req
);
1165 usb_free_all_descriptors(f
);
1170 static int printer_func_set_alt(struct usb_function
*f
,
1171 unsigned intf
, unsigned alt
)
1173 struct printer_dev
*dev
= func_to_printer(f
);
1174 int ret
= -ENOTSUPP
;
1177 ret
= set_interface(dev
, intf
);
1182 static void printer_func_disable(struct usb_function
*f
)
1184 struct printer_dev
*dev
= func_to_printer(f
);
1186 DBG(dev
, "%s\n", __func__
);
1188 printer_reset_interface(dev
);
1191 static inline struct f_printer_opts
1192 *to_f_printer_opts(struct config_item
*item
)
1194 return container_of(to_config_group(item
), struct f_printer_opts
,
1198 static void printer_attr_release(struct config_item
*item
)
1200 struct f_printer_opts
*opts
= to_f_printer_opts(item
);
1202 usb_put_function_instance(&opts
->func_inst
);
1205 static struct configfs_item_operations printer_item_ops
= {
1206 .release
= printer_attr_release
,
1209 static ssize_t
f_printer_opts_pnp_string_show(struct config_item
*item
,
1212 struct f_printer_opts
*opts
= to_f_printer_opts(item
);
1215 mutex_lock(&opts
->lock
);
1216 if (!opts
->pnp_string
)
1219 result
= strlcpy(page
, opts
->pnp_string
, PAGE_SIZE
);
1220 if (result
>= PAGE_SIZE
) {
1222 } else if (page
[result
- 1] != '\n' && result
+ 1 < PAGE_SIZE
) {
1223 page
[result
++] = '\n';
1224 page
[result
] = '\0';
1228 mutex_unlock(&opts
->lock
);
1233 static ssize_t
f_printer_opts_pnp_string_store(struct config_item
*item
,
1234 const char *page
, size_t len
)
1236 struct f_printer_opts
*opts
= to_f_printer_opts(item
);
1240 mutex_lock(&opts
->lock
);
1242 new_pnp
= kstrndup(page
, len
, GFP_KERNEL
);
1248 if (opts
->pnp_string_allocated
)
1249 kfree(opts
->pnp_string
);
1251 opts
->pnp_string_allocated
= true;
1252 opts
->pnp_string
= new_pnp
;
1255 mutex_unlock(&opts
->lock
);
1260 CONFIGFS_ATTR(f_printer_opts_
, pnp_string
);
1262 static ssize_t
f_printer_opts_q_len_show(struct config_item
*item
,
1265 struct f_printer_opts
*opts
= to_f_printer_opts(item
);
1268 mutex_lock(&opts
->lock
);
1269 result
= sprintf(page
, "%d\n", opts
->q_len
);
1270 mutex_unlock(&opts
->lock
);
1275 static ssize_t
f_printer_opts_q_len_store(struct config_item
*item
,
1276 const char *page
, size_t len
)
1278 struct f_printer_opts
*opts
= to_f_printer_opts(item
);
1282 mutex_lock(&opts
->lock
);
1288 ret
= kstrtou16(page
, 0, &num
);
1292 opts
->q_len
= (unsigned)num
;
1295 mutex_unlock(&opts
->lock
);
1299 CONFIGFS_ATTR(f_printer_opts_
, q_len
);
1301 static struct configfs_attribute
*printer_attrs
[] = {
1302 &f_printer_opts_attr_pnp_string
,
1303 &f_printer_opts_attr_q_len
,
1307 static const struct config_item_type printer_func_type
= {
1308 .ct_item_ops
= &printer_item_ops
,
1309 .ct_attrs
= printer_attrs
,
1310 .ct_owner
= THIS_MODULE
,
1313 static inline int gprinter_get_minor(void)
1317 ret
= ida_simple_get(&printer_ida
, 0, 0, GFP_KERNEL
);
1318 if (ret
>= PRINTER_MINORS
) {
1319 ida_simple_remove(&printer_ida
, ret
);
1326 static inline void gprinter_put_minor(int minor
)
1328 ida_simple_remove(&printer_ida
, minor
);
1331 static int gprinter_setup(int);
1332 static void gprinter_cleanup(void);
1334 static void gprinter_free_inst(struct usb_function_instance
*f
)
1336 struct f_printer_opts
*opts
;
1338 opts
= container_of(f
, struct f_printer_opts
, func_inst
);
1340 mutex_lock(&printer_ida_lock
);
1342 gprinter_put_minor(opts
->minor
);
1343 if (ida_is_empty(&printer_ida
))
1346 mutex_unlock(&printer_ida_lock
);
1348 if (opts
->pnp_string_allocated
)
1349 kfree(opts
->pnp_string
);
1353 static struct usb_function_instance
*gprinter_alloc_inst(void)
1355 struct f_printer_opts
*opts
;
1356 struct usb_function_instance
*ret
;
1359 opts
= kzalloc(sizeof(*opts
), GFP_KERNEL
);
1361 return ERR_PTR(-ENOMEM
);
1363 mutex_init(&opts
->lock
);
1364 opts
->func_inst
.free_func_inst
= gprinter_free_inst
;
1365 ret
= &opts
->func_inst
;
1367 mutex_lock(&printer_ida_lock
);
1369 if (ida_is_empty(&printer_ida
)) {
1370 status
= gprinter_setup(PRINTER_MINORS
);
1372 ret
= ERR_PTR(status
);
1378 opts
->minor
= gprinter_get_minor();
1379 if (opts
->minor
< 0) {
1380 ret
= ERR_PTR(opts
->minor
);
1382 if (ida_is_empty(&printer_ida
))
1386 config_group_init_type_name(&opts
->func_inst
.group
, "",
1387 &printer_func_type
);
1390 mutex_unlock(&printer_ida_lock
);
1394 static void gprinter_free(struct usb_function
*f
)
1396 struct printer_dev
*dev
= func_to_printer(f
);
1397 struct f_printer_opts
*opts
;
1399 opts
= container_of(f
->fi
, struct f_printer_opts
, func_inst
);
1401 kref_put(&dev
->kref
, printer_dev_free
);
1402 mutex_lock(&opts
->lock
);
1404 mutex_unlock(&opts
->lock
);
1407 static void printer_func_unbind(struct usb_configuration
*c
,
1408 struct usb_function
*f
)
1410 struct printer_dev
*dev
;
1411 struct usb_request
*req
;
1413 dev
= func_to_printer(f
);
1415 device_destroy(usb_gadget_class
, MKDEV(major
, dev
->minor
));
1417 /* Remove Character Device */
1418 cdev_del(&dev
->printer_cdev
);
1420 /* we must already have been disconnected ... no i/o may be active */
1421 WARN_ON(!list_empty(&dev
->tx_reqs_active
));
1422 WARN_ON(!list_empty(&dev
->rx_reqs_active
));
1424 /* Free all memory for this driver. */
1425 while (!list_empty(&dev
->tx_reqs
)) {
1426 req
= container_of(dev
->tx_reqs
.next
, struct usb_request
,
1428 list_del(&req
->list
);
1429 printer_req_free(dev
->in_ep
, req
);
1432 if (dev
->current_rx_req
!= NULL
)
1433 printer_req_free(dev
->out_ep
, dev
->current_rx_req
);
1435 while (!list_empty(&dev
->rx_reqs
)) {
1436 req
= container_of(dev
->rx_reqs
.next
,
1437 struct usb_request
, list
);
1438 list_del(&req
->list
);
1439 printer_req_free(dev
->out_ep
, req
);
1442 while (!list_empty(&dev
->rx_buffers
)) {
1443 req
= container_of(dev
->rx_buffers
.next
,
1444 struct usb_request
, list
);
1445 list_del(&req
->list
);
1446 printer_req_free(dev
->out_ep
, req
);
1448 usb_free_all_descriptors(f
);
1451 static struct usb_function
*gprinter_alloc(struct usb_function_instance
*fi
)
1453 struct printer_dev
*dev
;
1454 struct f_printer_opts
*opts
;
1456 opts
= container_of(fi
, struct f_printer_opts
, func_inst
);
1458 mutex_lock(&opts
->lock
);
1459 if (opts
->minor
>= minors
) {
1460 mutex_unlock(&opts
->lock
);
1461 return ERR_PTR(-ENOENT
);
1464 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
1466 mutex_unlock(&opts
->lock
);
1467 return ERR_PTR(-ENOMEM
);
1470 kref_init(&dev
->kref
);
1472 dev
->minor
= opts
->minor
;
1473 dev
->pnp_string
= opts
->pnp_string
;
1474 dev
->q_len
= opts
->q_len
;
1475 mutex_unlock(&opts
->lock
);
1477 dev
->function
.name
= "printer";
1478 dev
->function
.bind
= printer_func_bind
;
1479 dev
->function
.setup
= printer_func_setup
;
1480 dev
->function
.unbind
= printer_func_unbind
;
1481 dev
->function
.set_alt
= printer_func_set_alt
;
1482 dev
->function
.disable
= printer_func_disable
;
1483 dev
->function
.req_match
= gprinter_req_match
;
1484 dev
->function
.free_func
= gprinter_free
;
1486 INIT_LIST_HEAD(&dev
->tx_reqs
);
1487 INIT_LIST_HEAD(&dev
->rx_reqs
);
1488 INIT_LIST_HEAD(&dev
->rx_buffers
);
1489 INIT_LIST_HEAD(&dev
->tx_reqs_active
);
1490 INIT_LIST_HEAD(&dev
->rx_reqs_active
);
1492 spin_lock_init(&dev
->lock
);
1493 mutex_init(&dev
->lock_printer_io
);
1494 init_waitqueue_head(&dev
->rx_wait
);
1495 init_waitqueue_head(&dev
->tx_wait
);
1496 init_waitqueue_head(&dev
->tx_flush_wait
);
1498 dev
->interface
= -1;
1499 dev
->printer_cdev_open
= 0;
1500 dev
->printer_status
= PRINTER_NOT_ERROR
;
1501 dev
->current_rx_req
= NULL
;
1502 dev
->current_rx_bytes
= 0;
1503 dev
->current_rx_buf
= NULL
;
1505 return &dev
->function
;
1508 DECLARE_USB_FUNCTION_INIT(printer
, gprinter_alloc_inst
, gprinter_alloc
);
1509 MODULE_LICENSE("GPL");
1510 MODULE_AUTHOR("Craig Nadler");
1512 static int gprinter_setup(int count
)
1517 usb_gadget_class
= class_create(THIS_MODULE
, "usb_printer_gadget");
1518 if (IS_ERR(usb_gadget_class
)) {
1519 status
= PTR_ERR(usb_gadget_class
);
1520 usb_gadget_class
= NULL
;
1521 pr_err("unable to create usb_gadget class %d\n", status
);
1525 status
= alloc_chrdev_region(&devt
, 0, count
, "USB printer gadget");
1527 pr_err("alloc_chrdev_region %d\n", status
);
1528 class_destroy(usb_gadget_class
);
1529 usb_gadget_class
= NULL
;
1533 major
= MAJOR(devt
);
1539 static void gprinter_cleanup(void)
1542 unregister_chrdev_region(MKDEV(major
, 0), minors
);
1545 class_destroy(usb_gadget_class
);
1546 usb_gadget_class
= NULL
;