at v4.13 37 kB view raw
1/* 2 * f_printer.c - USB printer function driver 3 * 4 * Copied from drivers/usb/gadget/legacy/printer.c, 5 * which was: 6 * 7 * printer.c -- Printer gadget driver 8 * 9 * Copyright (C) 2003-2005 David Brownell 10 * Copyright (C) 2006 Craig W. Nadler 11 * 12 * This program is free software; you can redistribute it and/or modify 13 * it under the terms of the GNU General Public License as published by 14 * the Free Software Foundation; either version 2 of the License, or 15 * (at your option) any later version. 16 */ 17 18#include <linux/module.h> 19#include <linux/kernel.h> 20#include <linux/delay.h> 21#include <linux/ioport.h> 22#include <linux/sched.h> 23#include <linux/slab.h> 24#include <linux/mutex.h> 25#include <linux/errno.h> 26#include <linux/init.h> 27#include <linux/idr.h> 28#include <linux/timer.h> 29#include <linux/list.h> 30#include <linux/interrupt.h> 31#include <linux/device.h> 32#include <linux/moduleparam.h> 33#include <linux/fs.h> 34#include <linux/poll.h> 35#include <linux/types.h> 36#include <linux/ctype.h> 37#include <linux/cdev.h> 38 39#include <asm/byteorder.h> 40#include <linux/io.h> 41#include <linux/irq.h> 42#include <linux/uaccess.h> 43#include <asm/unaligned.h> 44 45#include <linux/usb/ch9.h> 46#include <linux/usb/composite.h> 47#include <linux/usb/gadget.h> 48#include <linux/usb/g_printer.h> 49 50#include "u_printer.h" 51 52#define PRINTER_MINORS 4 53#define GET_DEVICE_ID 0 54#define GET_PORT_STATUS 1 55#define SOFT_RESET 2 56 57static int major, minors; 58static struct class *usb_gadget_class; 59static DEFINE_IDA(printer_ida); 60static DEFINE_MUTEX(printer_ida_lock); /* protects access do printer_ida */ 61 62/*-------------------------------------------------------------------------*/ 63 64struct printer_dev { 65 spinlock_t lock; /* lock this structure */ 66 /* lock buffer lists during read/write calls */ 67 struct mutex lock_printer_io; 68 struct usb_gadget *gadget; 69 s8 interface; 70 struct usb_ep *in_ep, *out_ep; 71 72 struct list_head rx_reqs; /* List of free RX structs */ 73 struct list_head rx_reqs_active; /* List of Active RX xfers */ 74 struct list_head rx_buffers; /* List of completed xfers */ 75 /* wait until there is data to be read. */ 76 wait_queue_head_t rx_wait; 77 struct list_head tx_reqs; /* List of free TX structs */ 78 struct list_head tx_reqs_active; /* List of Active TX xfers */ 79 /* Wait until there are write buffers available to use. */ 80 wait_queue_head_t tx_wait; 81 /* Wait until all write buffers have been sent. */ 82 wait_queue_head_t tx_flush_wait; 83 struct usb_request *current_rx_req; 84 size_t current_rx_bytes; 85 u8 *current_rx_buf; 86 u8 printer_status; 87 u8 reset_printer; 88 int minor; 89 struct cdev printer_cdev; 90 u8 printer_cdev_open; 91 wait_queue_head_t wait; 92 unsigned q_len; 93 char *pnp_string; /* We don't own memory! */ 94 struct usb_function function; 95}; 96 97static inline struct printer_dev *func_to_printer(struct usb_function *f) 98{ 99 return container_of(f, struct printer_dev, function); 100} 101 102/*-------------------------------------------------------------------------*/ 103 104/* 105 * DESCRIPTORS ... most are static, but strings and (full) configuration 106 * descriptors are built on demand. 107 */ 108 109/* holds our biggest descriptor */ 110#define USB_DESC_BUFSIZE 256 111#define USB_BUFSIZE 8192 112 113static struct usb_interface_descriptor intf_desc = { 114 .bLength = sizeof(intf_desc), 115 .bDescriptorType = USB_DT_INTERFACE, 116 .bNumEndpoints = 2, 117 .bInterfaceClass = USB_CLASS_PRINTER, 118 .bInterfaceSubClass = 1, /* Printer Sub-Class */ 119 .bInterfaceProtocol = 2, /* Bi-Directional */ 120 .iInterface = 0 121}; 122 123static struct usb_endpoint_descriptor fs_ep_in_desc = { 124 .bLength = USB_DT_ENDPOINT_SIZE, 125 .bDescriptorType = USB_DT_ENDPOINT, 126 .bEndpointAddress = USB_DIR_IN, 127 .bmAttributes = USB_ENDPOINT_XFER_BULK 128}; 129 130static struct usb_endpoint_descriptor fs_ep_out_desc = { 131 .bLength = USB_DT_ENDPOINT_SIZE, 132 .bDescriptorType = USB_DT_ENDPOINT, 133 .bEndpointAddress = USB_DIR_OUT, 134 .bmAttributes = USB_ENDPOINT_XFER_BULK 135}; 136 137static struct usb_descriptor_header *fs_printer_function[] = { 138 (struct usb_descriptor_header *) &intf_desc, 139 (struct usb_descriptor_header *) &fs_ep_in_desc, 140 (struct usb_descriptor_header *) &fs_ep_out_desc, 141 NULL 142}; 143 144/* 145 * usb 2.0 devices need to expose both high speed and full speed 146 * descriptors, unless they only run at full speed. 147 */ 148 149static struct usb_endpoint_descriptor hs_ep_in_desc = { 150 .bLength = USB_DT_ENDPOINT_SIZE, 151 .bDescriptorType = USB_DT_ENDPOINT, 152 .bmAttributes = USB_ENDPOINT_XFER_BULK, 153 .wMaxPacketSize = cpu_to_le16(512) 154}; 155 156static struct usb_endpoint_descriptor hs_ep_out_desc = { 157 .bLength = USB_DT_ENDPOINT_SIZE, 158 .bDescriptorType = USB_DT_ENDPOINT, 159 .bmAttributes = USB_ENDPOINT_XFER_BULK, 160 .wMaxPacketSize = cpu_to_le16(512) 161}; 162 163static struct usb_descriptor_header *hs_printer_function[] = { 164 (struct usb_descriptor_header *) &intf_desc, 165 (struct usb_descriptor_header *) &hs_ep_in_desc, 166 (struct usb_descriptor_header *) &hs_ep_out_desc, 167 NULL 168}; 169 170/* 171 * Added endpoint descriptors for 3.0 devices 172 */ 173 174static struct usb_endpoint_descriptor ss_ep_in_desc = { 175 .bLength = USB_DT_ENDPOINT_SIZE, 176 .bDescriptorType = USB_DT_ENDPOINT, 177 .bmAttributes = USB_ENDPOINT_XFER_BULK, 178 .wMaxPacketSize = cpu_to_le16(1024), 179}; 180 181static struct usb_ss_ep_comp_descriptor ss_ep_in_comp_desc = { 182 .bLength = sizeof(ss_ep_in_comp_desc), 183 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, 184}; 185 186static struct usb_endpoint_descriptor ss_ep_out_desc = { 187 .bLength = USB_DT_ENDPOINT_SIZE, 188 .bDescriptorType = USB_DT_ENDPOINT, 189 .bmAttributes = USB_ENDPOINT_XFER_BULK, 190 .wMaxPacketSize = cpu_to_le16(1024), 191}; 192 193static struct usb_ss_ep_comp_descriptor ss_ep_out_comp_desc = { 194 .bLength = sizeof(ss_ep_out_comp_desc), 195 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, 196}; 197 198static struct usb_descriptor_header *ss_printer_function[] = { 199 (struct usb_descriptor_header *) &intf_desc, 200 (struct usb_descriptor_header *) &ss_ep_in_desc, 201 (struct usb_descriptor_header *) &ss_ep_in_comp_desc, 202 (struct usb_descriptor_header *) &ss_ep_out_desc, 203 (struct usb_descriptor_header *) &ss_ep_out_comp_desc, 204 NULL 205}; 206 207/* maxpacket and other transfer characteristics vary by speed. */ 208static inline struct usb_endpoint_descriptor *ep_desc(struct usb_gadget *gadget, 209 struct usb_endpoint_descriptor *fs, 210 struct usb_endpoint_descriptor *hs, 211 struct usb_endpoint_descriptor *ss) 212{ 213 switch (gadget->speed) { 214 case USB_SPEED_SUPER: 215 return ss; 216 case USB_SPEED_HIGH: 217 return hs; 218 default: 219 return fs; 220 } 221} 222 223/*-------------------------------------------------------------------------*/ 224 225static struct usb_request * 226printer_req_alloc(struct usb_ep *ep, unsigned len, gfp_t gfp_flags) 227{ 228 struct usb_request *req; 229 230 req = usb_ep_alloc_request(ep, gfp_flags); 231 232 if (req != NULL) { 233 req->length = len; 234 req->buf = kmalloc(len, gfp_flags); 235 if (req->buf == NULL) { 236 usb_ep_free_request(ep, req); 237 return NULL; 238 } 239 } 240 241 return req; 242} 243 244static void 245printer_req_free(struct usb_ep *ep, struct usb_request *req) 246{ 247 if (ep != NULL && req != NULL) { 248 kfree(req->buf); 249 usb_ep_free_request(ep, req); 250 } 251} 252 253/*-------------------------------------------------------------------------*/ 254 255static void rx_complete(struct usb_ep *ep, struct usb_request *req) 256{ 257 struct printer_dev *dev = ep->driver_data; 258 int status = req->status; 259 unsigned long flags; 260 261 spin_lock_irqsave(&dev->lock, flags); 262 263 list_del_init(&req->list); /* Remode from Active List */ 264 265 switch (status) { 266 267 /* normal completion */ 268 case 0: 269 if (req->actual > 0) { 270 list_add_tail(&req->list, &dev->rx_buffers); 271 DBG(dev, "G_Printer : rx length %d\n", req->actual); 272 } else { 273 list_add(&req->list, &dev->rx_reqs); 274 } 275 break; 276 277 /* software-driven interface shutdown */ 278 case -ECONNRESET: /* unlink */ 279 case -ESHUTDOWN: /* disconnect etc */ 280 VDBG(dev, "rx shutdown, code %d\n", status); 281 list_add(&req->list, &dev->rx_reqs); 282 break; 283 284 /* for hardware automagic (such as pxa) */ 285 case -ECONNABORTED: /* endpoint reset */ 286 DBG(dev, "rx %s reset\n", ep->name); 287 list_add(&req->list, &dev->rx_reqs); 288 break; 289 290 /* data overrun */ 291 case -EOVERFLOW: 292 /* FALLTHROUGH */ 293 294 default: 295 DBG(dev, "rx status %d\n", status); 296 list_add(&req->list, &dev->rx_reqs); 297 break; 298 } 299 300 wake_up_interruptible(&dev->rx_wait); 301 spin_unlock_irqrestore(&dev->lock, flags); 302} 303 304static void tx_complete(struct usb_ep *ep, struct usb_request *req) 305{ 306 struct printer_dev *dev = ep->driver_data; 307 308 switch (req->status) { 309 default: 310 VDBG(dev, "tx err %d\n", req->status); 311 /* FALLTHROUGH */ 312 case -ECONNRESET: /* unlink */ 313 case -ESHUTDOWN: /* disconnect etc */ 314 break; 315 case 0: 316 break; 317 } 318 319 spin_lock(&dev->lock); 320 /* Take the request struct off the active list and put it on the 321 * free list. 322 */ 323 list_del_init(&req->list); 324 list_add(&req->list, &dev->tx_reqs); 325 wake_up_interruptible(&dev->tx_wait); 326 if (likely(list_empty(&dev->tx_reqs_active))) 327 wake_up_interruptible(&dev->tx_flush_wait); 328 329 spin_unlock(&dev->lock); 330} 331 332/*-------------------------------------------------------------------------*/ 333 334static int 335printer_open(struct inode *inode, struct file *fd) 336{ 337 struct printer_dev *dev; 338 unsigned long flags; 339 int ret = -EBUSY; 340 341 dev = container_of(inode->i_cdev, struct printer_dev, printer_cdev); 342 343 spin_lock_irqsave(&dev->lock, flags); 344 345 if (!dev->printer_cdev_open) { 346 dev->printer_cdev_open = 1; 347 fd->private_data = dev; 348 ret = 0; 349 /* Change the printer status to show that it's on-line. */ 350 dev->printer_status |= PRINTER_SELECTED; 351 } 352 353 spin_unlock_irqrestore(&dev->lock, flags); 354 355 DBG(dev, "printer_open returned %x\n", ret); 356 return ret; 357} 358 359static int 360printer_close(struct inode *inode, struct file *fd) 361{ 362 struct printer_dev *dev = fd->private_data; 363 unsigned long flags; 364 365 spin_lock_irqsave(&dev->lock, flags); 366 dev->printer_cdev_open = 0; 367 fd->private_data = NULL; 368 /* Change printer status to show that the printer is off-line. */ 369 dev->printer_status &= ~PRINTER_SELECTED; 370 spin_unlock_irqrestore(&dev->lock, flags); 371 372 DBG(dev, "printer_close\n"); 373 374 return 0; 375} 376 377/* This function must be called with interrupts turned off. */ 378static void 379setup_rx_reqs(struct printer_dev *dev) 380{ 381 struct usb_request *req; 382 383 while (likely(!list_empty(&dev->rx_reqs))) { 384 int error; 385 386 req = container_of(dev->rx_reqs.next, 387 struct usb_request, list); 388 list_del_init(&req->list); 389 390 /* The USB Host sends us whatever amount of data it wants to 391 * so we always set the length field to the full USB_BUFSIZE. 392 * If the amount of data is more than the read() caller asked 393 * for it will be stored in the request buffer until it is 394 * asked for by read(). 395 */ 396 req->length = USB_BUFSIZE; 397 req->complete = rx_complete; 398 399 /* here, we unlock, and only unlock, to avoid deadlock. */ 400 spin_unlock(&dev->lock); 401 error = usb_ep_queue(dev->out_ep, req, GFP_ATOMIC); 402 spin_lock(&dev->lock); 403 if (error) { 404 DBG(dev, "rx submit --> %d\n", error); 405 list_add(&req->list, &dev->rx_reqs); 406 break; 407 } 408 /* if the req is empty, then add it into dev->rx_reqs_active. */ 409 else if (list_empty(&req->list)) 410 list_add(&req->list, &dev->rx_reqs_active); 411 } 412} 413 414static ssize_t 415printer_read(struct file *fd, char __user *buf, size_t len, loff_t *ptr) 416{ 417 struct printer_dev *dev = fd->private_data; 418 unsigned long flags; 419 size_t size; 420 size_t bytes_copied; 421 struct usb_request *req; 422 /* This is a pointer to the current USB rx request. */ 423 struct usb_request *current_rx_req; 424 /* This is the number of bytes in the current rx buffer. */ 425 size_t current_rx_bytes; 426 /* This is a pointer to the current rx buffer. */ 427 u8 *current_rx_buf; 428 429 if (len == 0) 430 return -EINVAL; 431 432 DBG(dev, "printer_read trying to read %d bytes\n", (int)len); 433 434 mutex_lock(&dev->lock_printer_io); 435 spin_lock_irqsave(&dev->lock, flags); 436 437 /* We will use this flag later to check if a printer reset happened 438 * after we turn interrupts back on. 439 */ 440 dev->reset_printer = 0; 441 442 setup_rx_reqs(dev); 443 444 bytes_copied = 0; 445 current_rx_req = dev->current_rx_req; 446 current_rx_bytes = dev->current_rx_bytes; 447 current_rx_buf = dev->current_rx_buf; 448 dev->current_rx_req = NULL; 449 dev->current_rx_bytes = 0; 450 dev->current_rx_buf = NULL; 451 452 /* Check if there is any data in the read buffers. Please note that 453 * current_rx_bytes is the number of bytes in the current rx buffer. 454 * If it is zero then check if there are any other rx_buffers that 455 * are on the completed list. We are only out of data if all rx 456 * buffers are empty. 457 */ 458 if ((current_rx_bytes == 0) && 459 (likely(list_empty(&dev->rx_buffers)))) { 460 /* Turn interrupts back on before sleeping. */ 461 spin_unlock_irqrestore(&dev->lock, flags); 462 463 /* 464 * If no data is available check if this is a NON-Blocking 465 * call or not. 466 */ 467 if (fd->f_flags & (O_NONBLOCK|O_NDELAY)) { 468 mutex_unlock(&dev->lock_printer_io); 469 return -EAGAIN; 470 } 471 472 /* Sleep until data is available */ 473 wait_event_interruptible(dev->rx_wait, 474 (likely(!list_empty(&dev->rx_buffers)))); 475 spin_lock_irqsave(&dev->lock, flags); 476 } 477 478 /* We have data to return then copy it to the caller's buffer.*/ 479 while ((current_rx_bytes || likely(!list_empty(&dev->rx_buffers))) 480 && len) { 481 if (current_rx_bytes == 0) { 482 req = container_of(dev->rx_buffers.next, 483 struct usb_request, list); 484 list_del_init(&req->list); 485 486 if (req->actual && req->buf) { 487 current_rx_req = req; 488 current_rx_bytes = req->actual; 489 current_rx_buf = req->buf; 490 } else { 491 list_add(&req->list, &dev->rx_reqs); 492 continue; 493 } 494 } 495 496 /* Don't leave irqs off while doing memory copies */ 497 spin_unlock_irqrestore(&dev->lock, flags); 498 499 if (len > current_rx_bytes) 500 size = current_rx_bytes; 501 else 502 size = len; 503 504 size -= copy_to_user(buf, current_rx_buf, size); 505 bytes_copied += size; 506 len -= size; 507 buf += size; 508 509 spin_lock_irqsave(&dev->lock, flags); 510 511 /* We've disconnected or reset so return. */ 512 if (dev->reset_printer) { 513 list_add(&current_rx_req->list, &dev->rx_reqs); 514 spin_unlock_irqrestore(&dev->lock, flags); 515 mutex_unlock(&dev->lock_printer_io); 516 return -EAGAIN; 517 } 518 519 /* If we not returning all the data left in this RX request 520 * buffer then adjust the amount of data left in the buffer. 521 * Othewise if we are done with this RX request buffer then 522 * requeue it to get any incoming data from the USB host. 523 */ 524 if (size < current_rx_bytes) { 525 current_rx_bytes -= size; 526 current_rx_buf += size; 527 } else { 528 list_add(&current_rx_req->list, &dev->rx_reqs); 529 current_rx_bytes = 0; 530 current_rx_buf = NULL; 531 current_rx_req = NULL; 532 } 533 } 534 535 dev->current_rx_req = current_rx_req; 536 dev->current_rx_bytes = current_rx_bytes; 537 dev->current_rx_buf = current_rx_buf; 538 539 spin_unlock_irqrestore(&dev->lock, flags); 540 mutex_unlock(&dev->lock_printer_io); 541 542 DBG(dev, "printer_read returned %d bytes\n", (int)bytes_copied); 543 544 if (bytes_copied) 545 return bytes_copied; 546 else 547 return -EAGAIN; 548} 549 550static ssize_t 551printer_write(struct file *fd, const char __user *buf, size_t len, loff_t *ptr) 552{ 553 struct printer_dev *dev = fd->private_data; 554 unsigned long flags; 555 size_t size; /* Amount of data in a TX request. */ 556 size_t bytes_copied = 0; 557 struct usb_request *req; 558 559 DBG(dev, "printer_write trying to send %d bytes\n", (int)len); 560 561 if (len == 0) 562 return -EINVAL; 563 564 mutex_lock(&dev->lock_printer_io); 565 spin_lock_irqsave(&dev->lock, flags); 566 567 /* Check if a printer reset happens while we have interrupts on */ 568 dev->reset_printer = 0; 569 570 /* Check if there is any available write buffers */ 571 if (likely(list_empty(&dev->tx_reqs))) { 572 /* Turn interrupts back on before sleeping. */ 573 spin_unlock_irqrestore(&dev->lock, flags); 574 575 /* 576 * If write buffers are available check if this is 577 * a NON-Blocking call or not. 578 */ 579 if (fd->f_flags & (O_NONBLOCK|O_NDELAY)) { 580 mutex_unlock(&dev->lock_printer_io); 581 return -EAGAIN; 582 } 583 584 /* Sleep until a write buffer is available */ 585 wait_event_interruptible(dev->tx_wait, 586 (likely(!list_empty(&dev->tx_reqs)))); 587 spin_lock_irqsave(&dev->lock, flags); 588 } 589 590 while (likely(!list_empty(&dev->tx_reqs)) && len) { 591 592 if (len > USB_BUFSIZE) 593 size = USB_BUFSIZE; 594 else 595 size = len; 596 597 req = container_of(dev->tx_reqs.next, struct usb_request, 598 list); 599 list_del_init(&req->list); 600 601 req->complete = tx_complete; 602 req->length = size; 603 604 /* Check if we need to send a zero length packet. */ 605 if (len > size) 606 /* They will be more TX requests so no yet. */ 607 req->zero = 0; 608 else 609 /* If the data amount is not a multiple of the 610 * maxpacket size then send a zero length packet. 611 */ 612 req->zero = ((len % dev->in_ep->maxpacket) == 0); 613 614 /* Don't leave irqs off while doing memory copies */ 615 spin_unlock_irqrestore(&dev->lock, flags); 616 617 if (copy_from_user(req->buf, buf, size)) { 618 list_add(&req->list, &dev->tx_reqs); 619 mutex_unlock(&dev->lock_printer_io); 620 return bytes_copied; 621 } 622 623 bytes_copied += size; 624 len -= size; 625 buf += size; 626 627 spin_lock_irqsave(&dev->lock, flags); 628 629 /* We've disconnected or reset so free the req and buffer */ 630 if (dev->reset_printer) { 631 list_add(&req->list, &dev->tx_reqs); 632 spin_unlock_irqrestore(&dev->lock, flags); 633 mutex_unlock(&dev->lock_printer_io); 634 return -EAGAIN; 635 } 636 637 if (usb_ep_queue(dev->in_ep, req, GFP_ATOMIC)) { 638 list_add(&req->list, &dev->tx_reqs); 639 spin_unlock_irqrestore(&dev->lock, flags); 640 mutex_unlock(&dev->lock_printer_io); 641 return -EAGAIN; 642 } 643 644 list_add(&req->list, &dev->tx_reqs_active); 645 646 } 647 648 spin_unlock_irqrestore(&dev->lock, flags); 649 mutex_unlock(&dev->lock_printer_io); 650 651 DBG(dev, "printer_write sent %d bytes\n", (int)bytes_copied); 652 653 if (bytes_copied) 654 return bytes_copied; 655 else 656 return -EAGAIN; 657} 658 659static int 660printer_fsync(struct file *fd, loff_t start, loff_t end, int datasync) 661{ 662 struct printer_dev *dev = fd->private_data; 663 struct inode *inode = file_inode(fd); 664 unsigned long flags; 665 int tx_list_empty; 666 667 inode_lock(inode); 668 spin_lock_irqsave(&dev->lock, flags); 669 tx_list_empty = (likely(list_empty(&dev->tx_reqs))); 670 spin_unlock_irqrestore(&dev->lock, flags); 671 672 if (!tx_list_empty) { 673 /* Sleep until all data has been sent */ 674 wait_event_interruptible(dev->tx_flush_wait, 675 (likely(list_empty(&dev->tx_reqs_active)))); 676 } 677 inode_unlock(inode); 678 679 return 0; 680} 681 682static unsigned int 683printer_poll(struct file *fd, poll_table *wait) 684{ 685 struct printer_dev *dev = fd->private_data; 686 unsigned long flags; 687 int status = 0; 688 689 mutex_lock(&dev->lock_printer_io); 690 spin_lock_irqsave(&dev->lock, flags); 691 setup_rx_reqs(dev); 692 spin_unlock_irqrestore(&dev->lock, flags); 693 mutex_unlock(&dev->lock_printer_io); 694 695 poll_wait(fd, &dev->rx_wait, wait); 696 poll_wait(fd, &dev->tx_wait, wait); 697 698 spin_lock_irqsave(&dev->lock, flags); 699 if (likely(!list_empty(&dev->tx_reqs))) 700 status |= POLLOUT | POLLWRNORM; 701 702 if (likely(dev->current_rx_bytes) || 703 likely(!list_empty(&dev->rx_buffers))) 704 status |= POLLIN | POLLRDNORM; 705 706 spin_unlock_irqrestore(&dev->lock, flags); 707 708 return status; 709} 710 711static long 712printer_ioctl(struct file *fd, unsigned int code, unsigned long arg) 713{ 714 struct printer_dev *dev = fd->private_data; 715 unsigned long flags; 716 int status = 0; 717 718 DBG(dev, "printer_ioctl: cmd=0x%4.4x, arg=%lu\n", code, arg); 719 720 /* handle ioctls */ 721 722 spin_lock_irqsave(&dev->lock, flags); 723 724 switch (code) { 725 case GADGET_GET_PRINTER_STATUS: 726 status = (int)dev->printer_status; 727 break; 728 case GADGET_SET_PRINTER_STATUS: 729 dev->printer_status = (u8)arg; 730 break; 731 default: 732 /* could not handle ioctl */ 733 DBG(dev, "printer_ioctl: ERROR cmd=0x%4.4xis not supported\n", 734 code); 735 status = -ENOTTY; 736 } 737 738 spin_unlock_irqrestore(&dev->lock, flags); 739 740 return status; 741} 742 743/* used after endpoint configuration */ 744static const struct file_operations printer_io_operations = { 745 .owner = THIS_MODULE, 746 .open = printer_open, 747 .read = printer_read, 748 .write = printer_write, 749 .fsync = printer_fsync, 750 .poll = printer_poll, 751 .unlocked_ioctl = printer_ioctl, 752 .release = printer_close, 753 .llseek = noop_llseek, 754}; 755 756/*-------------------------------------------------------------------------*/ 757 758static int 759set_printer_interface(struct printer_dev *dev) 760{ 761 int result = 0; 762 763 dev->in_ep->desc = ep_desc(dev->gadget, &fs_ep_in_desc, &hs_ep_in_desc, 764 &ss_ep_in_desc); 765 dev->in_ep->driver_data = dev; 766 767 dev->out_ep->desc = ep_desc(dev->gadget, &fs_ep_out_desc, 768 &hs_ep_out_desc, &ss_ep_out_desc); 769 dev->out_ep->driver_data = dev; 770 771 result = usb_ep_enable(dev->in_ep); 772 if (result != 0) { 773 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); 774 goto done; 775 } 776 777 result = usb_ep_enable(dev->out_ep); 778 if (result != 0) { 779 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); 780 goto done; 781 } 782 783done: 784 /* on error, disable any endpoints */ 785 if (result != 0) { 786 (void) usb_ep_disable(dev->in_ep); 787 (void) usb_ep_disable(dev->out_ep); 788 dev->in_ep->desc = NULL; 789 dev->out_ep->desc = NULL; 790 } 791 792 /* caller is responsible for cleanup on error */ 793 return result; 794} 795 796static void printer_reset_interface(struct printer_dev *dev) 797{ 798 unsigned long flags; 799 800 if (dev->interface < 0) 801 return; 802 803 DBG(dev, "%s\n", __func__); 804 805 if (dev->in_ep->desc) 806 usb_ep_disable(dev->in_ep); 807 808 if (dev->out_ep->desc) 809 usb_ep_disable(dev->out_ep); 810 811 spin_lock_irqsave(&dev->lock, flags); 812 dev->in_ep->desc = NULL; 813 dev->out_ep->desc = NULL; 814 dev->interface = -1; 815 spin_unlock_irqrestore(&dev->lock, flags); 816} 817 818/* Change our operational Interface. */ 819static int set_interface(struct printer_dev *dev, unsigned number) 820{ 821 int result = 0; 822 823 /* Free the current interface */ 824 printer_reset_interface(dev); 825 826 result = set_printer_interface(dev); 827 if (result) 828 printer_reset_interface(dev); 829 else 830 dev->interface = number; 831 832 if (!result) 833 INFO(dev, "Using interface %x\n", number); 834 835 return result; 836} 837 838static void printer_soft_reset(struct printer_dev *dev) 839{ 840 struct usb_request *req; 841 842 INFO(dev, "Received Printer Reset Request\n"); 843 844 if (usb_ep_disable(dev->in_ep)) 845 DBG(dev, "Failed to disable USB in_ep\n"); 846 if (usb_ep_disable(dev->out_ep)) 847 DBG(dev, "Failed to disable USB out_ep\n"); 848 849 if (dev->current_rx_req != NULL) { 850 list_add(&dev->current_rx_req->list, &dev->rx_reqs); 851 dev->current_rx_req = NULL; 852 } 853 dev->current_rx_bytes = 0; 854 dev->current_rx_buf = NULL; 855 dev->reset_printer = 1; 856 857 while (likely(!(list_empty(&dev->rx_buffers)))) { 858 req = container_of(dev->rx_buffers.next, struct usb_request, 859 list); 860 list_del_init(&req->list); 861 list_add(&req->list, &dev->rx_reqs); 862 } 863 864 while (likely(!(list_empty(&dev->rx_reqs_active)))) { 865 req = container_of(dev->rx_buffers.next, struct usb_request, 866 list); 867 list_del_init(&req->list); 868 list_add(&req->list, &dev->rx_reqs); 869 } 870 871 while (likely(!(list_empty(&dev->tx_reqs_active)))) { 872 req = container_of(dev->tx_reqs_active.next, 873 struct usb_request, list); 874 list_del_init(&req->list); 875 list_add(&req->list, &dev->tx_reqs); 876 } 877 878 if (usb_ep_enable(dev->in_ep)) 879 DBG(dev, "Failed to enable USB in_ep\n"); 880 if (usb_ep_enable(dev->out_ep)) 881 DBG(dev, "Failed to enable USB out_ep\n"); 882 883 wake_up_interruptible(&dev->rx_wait); 884 wake_up_interruptible(&dev->tx_wait); 885 wake_up_interruptible(&dev->tx_flush_wait); 886} 887 888/*-------------------------------------------------------------------------*/ 889 890static bool gprinter_req_match(struct usb_function *f, 891 const struct usb_ctrlrequest *ctrl, 892 bool config0) 893{ 894 struct printer_dev *dev = func_to_printer(f); 895 u16 w_index = le16_to_cpu(ctrl->wIndex); 896 u16 w_value = le16_to_cpu(ctrl->wValue); 897 u16 w_length = le16_to_cpu(ctrl->wLength); 898 899 if (config0) 900 return false; 901 902 if ((ctrl->bRequestType & USB_RECIP_MASK) != USB_RECIP_INTERFACE || 903 (ctrl->bRequestType & USB_TYPE_MASK) != USB_TYPE_CLASS) 904 return false; 905 906 switch (ctrl->bRequest) { 907 case GET_DEVICE_ID: 908 w_index >>= 8; 909 if (USB_DIR_IN & ctrl->bRequestType) 910 break; 911 return false; 912 case GET_PORT_STATUS: 913 if (!w_value && w_length == 1 && 914 (USB_DIR_IN & ctrl->bRequestType)) 915 break; 916 return false; 917 case SOFT_RESET: 918 if (!w_value && !w_length && 919 !(USB_DIR_IN & ctrl->bRequestType)) 920 break; 921 /* fall through */ 922 default: 923 return false; 924 } 925 return w_index == dev->interface; 926} 927 928/* 929 * The setup() callback implements all the ep0 functionality that's not 930 * handled lower down. 931 */ 932static int printer_func_setup(struct usb_function *f, 933 const struct usb_ctrlrequest *ctrl) 934{ 935 struct printer_dev *dev = func_to_printer(f); 936 struct usb_composite_dev *cdev = f->config->cdev; 937 struct usb_request *req = cdev->req; 938 u8 *buf = req->buf; 939 int value = -EOPNOTSUPP; 940 u16 wIndex = le16_to_cpu(ctrl->wIndex); 941 u16 wValue = le16_to_cpu(ctrl->wValue); 942 u16 wLength = le16_to_cpu(ctrl->wLength); 943 944 DBG(dev, "ctrl req%02x.%02x v%04x i%04x l%d\n", 945 ctrl->bRequestType, ctrl->bRequest, wValue, wIndex, wLength); 946 947 switch (ctrl->bRequestType&USB_TYPE_MASK) { 948 case USB_TYPE_CLASS: 949 switch (ctrl->bRequest) { 950 case GET_DEVICE_ID: /* Get the IEEE-1284 PNP String */ 951 /* Only one printer interface is supported. */ 952 if ((wIndex>>8) != dev->interface) 953 break; 954 955 if (!dev->pnp_string) { 956 value = 0; 957 break; 958 } 959 value = strlen(dev->pnp_string); 960 buf[0] = (value >> 8) & 0xFF; 961 buf[1] = value & 0xFF; 962 memcpy(buf + 2, dev->pnp_string, value); 963 DBG(dev, "1284 PNP String: %x %s\n", value, 964 dev->pnp_string); 965 break; 966 967 case GET_PORT_STATUS: /* Get Port Status */ 968 /* Only one printer interface is supported. */ 969 if (wIndex != dev->interface) 970 break; 971 972 buf[0] = dev->printer_status; 973 value = min_t(u16, wLength, 1); 974 break; 975 976 case SOFT_RESET: /* Soft Reset */ 977 /* Only one printer interface is supported. */ 978 if (wIndex != dev->interface) 979 break; 980 981 printer_soft_reset(dev); 982 983 value = 0; 984 break; 985 986 default: 987 goto unknown; 988 } 989 break; 990 991 default: 992unknown: 993 VDBG(dev, 994 "unknown ctrl req%02x.%02x v%04x i%04x l%d\n", 995 ctrl->bRequestType, ctrl->bRequest, 996 wValue, wIndex, wLength); 997 break; 998 } 999 /* host either stalls (value < 0) or reports success */ 1000 if (value >= 0) { 1001 req->length = value; 1002 req->zero = value < wLength; 1003 value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC); 1004 if (value < 0) { 1005 ERROR(dev, "%s:%d Error!\n", __func__, __LINE__); 1006 req->status = 0; 1007 } 1008 } 1009 return value; 1010} 1011 1012static int printer_func_bind(struct usb_configuration *c, 1013 struct usb_function *f) 1014{ 1015 struct usb_gadget *gadget = c->cdev->gadget; 1016 struct printer_dev *dev = func_to_printer(f); 1017 struct device *pdev; 1018 struct usb_composite_dev *cdev = c->cdev; 1019 struct usb_ep *in_ep; 1020 struct usb_ep *out_ep = NULL; 1021 struct usb_request *req; 1022 dev_t devt; 1023 int id; 1024 int ret; 1025 u32 i; 1026 1027 id = usb_interface_id(c, f); 1028 if (id < 0) 1029 return id; 1030 intf_desc.bInterfaceNumber = id; 1031 1032 /* finish hookup to lower layer ... */ 1033 dev->gadget = gadget; 1034 1035 /* all we really need is bulk IN/OUT */ 1036 in_ep = usb_ep_autoconfig(cdev->gadget, &fs_ep_in_desc); 1037 if (!in_ep) { 1038autoconf_fail: 1039 dev_err(&cdev->gadget->dev, "can't autoconfigure on %s\n", 1040 cdev->gadget->name); 1041 return -ENODEV; 1042 } 1043 1044 out_ep = usb_ep_autoconfig(cdev->gadget, &fs_ep_out_desc); 1045 if (!out_ep) 1046 goto autoconf_fail; 1047 1048 /* assumes that all endpoints are dual-speed */ 1049 hs_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress; 1050 hs_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress; 1051 ss_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress; 1052 ss_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress; 1053 1054 ret = usb_assign_descriptors(f, fs_printer_function, 1055 hs_printer_function, ss_printer_function, NULL); 1056 if (ret) 1057 return ret; 1058 1059 dev->in_ep = in_ep; 1060 dev->out_ep = out_ep; 1061 1062 ret = -ENOMEM; 1063 for (i = 0; i < dev->q_len; i++) { 1064 req = printer_req_alloc(dev->in_ep, USB_BUFSIZE, GFP_KERNEL); 1065 if (!req) 1066 goto fail_tx_reqs; 1067 list_add(&req->list, &dev->tx_reqs); 1068 } 1069 1070 for (i = 0; i < dev->q_len; i++) { 1071 req = printer_req_alloc(dev->out_ep, USB_BUFSIZE, GFP_KERNEL); 1072 if (!req) 1073 goto fail_rx_reqs; 1074 list_add(&req->list, &dev->rx_reqs); 1075 } 1076 1077 /* Setup the sysfs files for the printer gadget. */ 1078 devt = MKDEV(major, dev->minor); 1079 pdev = device_create(usb_gadget_class, NULL, devt, 1080 NULL, "g_printer%d", dev->minor); 1081 if (IS_ERR(pdev)) { 1082 ERROR(dev, "Failed to create device: g_printer\n"); 1083 ret = PTR_ERR(pdev); 1084 goto fail_rx_reqs; 1085 } 1086 1087 /* 1088 * Register a character device as an interface to a user mode 1089 * program that handles the printer specific functionality. 1090 */ 1091 cdev_init(&dev->printer_cdev, &printer_io_operations); 1092 dev->printer_cdev.owner = THIS_MODULE; 1093 ret = cdev_add(&dev->printer_cdev, devt, 1); 1094 if (ret) { 1095 ERROR(dev, "Failed to open char device\n"); 1096 goto fail_cdev_add; 1097 } 1098 1099 return 0; 1100 1101fail_cdev_add: 1102 device_destroy(usb_gadget_class, devt); 1103 1104fail_rx_reqs: 1105 while (!list_empty(&dev->rx_reqs)) { 1106 req = container_of(dev->rx_reqs.next, struct usb_request, list); 1107 list_del(&req->list); 1108 printer_req_free(dev->out_ep, req); 1109 } 1110 1111fail_tx_reqs: 1112 while (!list_empty(&dev->tx_reqs)) { 1113 req = container_of(dev->tx_reqs.next, struct usb_request, list); 1114 list_del(&req->list); 1115 printer_req_free(dev->in_ep, req); 1116 } 1117 1118 return ret; 1119 1120} 1121 1122static int printer_func_set_alt(struct usb_function *f, 1123 unsigned intf, unsigned alt) 1124{ 1125 struct printer_dev *dev = func_to_printer(f); 1126 int ret = -ENOTSUPP; 1127 1128 if (!alt) 1129 ret = set_interface(dev, intf); 1130 1131 return ret; 1132} 1133 1134static void printer_func_disable(struct usb_function *f) 1135{ 1136 struct printer_dev *dev = func_to_printer(f); 1137 1138 DBG(dev, "%s\n", __func__); 1139 1140 printer_reset_interface(dev); 1141} 1142 1143static inline struct f_printer_opts 1144*to_f_printer_opts(struct config_item *item) 1145{ 1146 return container_of(to_config_group(item), struct f_printer_opts, 1147 func_inst.group); 1148} 1149 1150static void printer_attr_release(struct config_item *item) 1151{ 1152 struct f_printer_opts *opts = to_f_printer_opts(item); 1153 1154 usb_put_function_instance(&opts->func_inst); 1155} 1156 1157static struct configfs_item_operations printer_item_ops = { 1158 .release = printer_attr_release, 1159}; 1160 1161static ssize_t f_printer_opts_pnp_string_show(struct config_item *item, 1162 char *page) 1163{ 1164 struct f_printer_opts *opts = to_f_printer_opts(item); 1165 int result = 0; 1166 1167 mutex_lock(&opts->lock); 1168 if (!opts->pnp_string) 1169 goto unlock; 1170 1171 result = strlcpy(page, opts->pnp_string, PAGE_SIZE); 1172 if (result >= PAGE_SIZE) { 1173 result = PAGE_SIZE; 1174 } else if (page[result - 1] != '\n' && result + 1 < PAGE_SIZE) { 1175 page[result++] = '\n'; 1176 page[result] = '\0'; 1177 } 1178 1179unlock: 1180 mutex_unlock(&opts->lock); 1181 1182 return result; 1183} 1184 1185static ssize_t f_printer_opts_pnp_string_store(struct config_item *item, 1186 const char *page, size_t len) 1187{ 1188 struct f_printer_opts *opts = to_f_printer_opts(item); 1189 char *new_pnp; 1190 int result; 1191 1192 mutex_lock(&opts->lock); 1193 1194 new_pnp = kstrndup(page, len, GFP_KERNEL); 1195 if (!new_pnp) { 1196 result = -ENOMEM; 1197 goto unlock; 1198 } 1199 1200 if (opts->pnp_string_allocated) 1201 kfree(opts->pnp_string); 1202 1203 opts->pnp_string_allocated = true; 1204 opts->pnp_string = new_pnp; 1205 result = len; 1206unlock: 1207 mutex_unlock(&opts->lock); 1208 1209 return result; 1210} 1211 1212CONFIGFS_ATTR(f_printer_opts_, pnp_string); 1213 1214static ssize_t f_printer_opts_q_len_show(struct config_item *item, 1215 char *page) 1216{ 1217 struct f_printer_opts *opts = to_f_printer_opts(item); 1218 int result; 1219 1220 mutex_lock(&opts->lock); 1221 result = sprintf(page, "%d\n", opts->q_len); 1222 mutex_unlock(&opts->lock); 1223 1224 return result; 1225} 1226 1227static ssize_t f_printer_opts_q_len_store(struct config_item *item, 1228 const char *page, size_t len) 1229{ 1230 struct f_printer_opts *opts = to_f_printer_opts(item); 1231 int ret; 1232 u16 num; 1233 1234 mutex_lock(&opts->lock); 1235 if (opts->refcnt) { 1236 ret = -EBUSY; 1237 goto end; 1238 } 1239 1240 ret = kstrtou16(page, 0, &num); 1241 if (ret) 1242 goto end; 1243 1244 opts->q_len = (unsigned)num; 1245 ret = len; 1246end: 1247 mutex_unlock(&opts->lock); 1248 return ret; 1249} 1250 1251CONFIGFS_ATTR(f_printer_opts_, q_len); 1252 1253static struct configfs_attribute *printer_attrs[] = { 1254 &f_printer_opts_attr_pnp_string, 1255 &f_printer_opts_attr_q_len, 1256 NULL, 1257}; 1258 1259static struct config_item_type printer_func_type = { 1260 .ct_item_ops = &printer_item_ops, 1261 .ct_attrs = printer_attrs, 1262 .ct_owner = THIS_MODULE, 1263}; 1264 1265static inline int gprinter_get_minor(void) 1266{ 1267 int ret; 1268 1269 ret = ida_simple_get(&printer_ida, 0, 0, GFP_KERNEL); 1270 if (ret >= PRINTER_MINORS) { 1271 ida_simple_remove(&printer_ida, ret); 1272 ret = -ENODEV; 1273 } 1274 1275 return ret; 1276} 1277 1278static inline void gprinter_put_minor(int minor) 1279{ 1280 ida_simple_remove(&printer_ida, minor); 1281} 1282 1283static int gprinter_setup(int); 1284static void gprinter_cleanup(void); 1285 1286static void gprinter_free_inst(struct usb_function_instance *f) 1287{ 1288 struct f_printer_opts *opts; 1289 1290 opts = container_of(f, struct f_printer_opts, func_inst); 1291 1292 mutex_lock(&printer_ida_lock); 1293 1294 gprinter_put_minor(opts->minor); 1295 if (ida_is_empty(&printer_ida)) 1296 gprinter_cleanup(); 1297 1298 mutex_unlock(&printer_ida_lock); 1299 1300 if (opts->pnp_string_allocated) 1301 kfree(opts->pnp_string); 1302 kfree(opts); 1303} 1304 1305static struct usb_function_instance *gprinter_alloc_inst(void) 1306{ 1307 struct f_printer_opts *opts; 1308 struct usb_function_instance *ret; 1309 int status = 0; 1310 1311 opts = kzalloc(sizeof(*opts), GFP_KERNEL); 1312 if (!opts) 1313 return ERR_PTR(-ENOMEM); 1314 1315 mutex_init(&opts->lock); 1316 opts->func_inst.free_func_inst = gprinter_free_inst; 1317 ret = &opts->func_inst; 1318 1319 mutex_lock(&printer_ida_lock); 1320 1321 if (ida_is_empty(&printer_ida)) { 1322 status = gprinter_setup(PRINTER_MINORS); 1323 if (status) { 1324 ret = ERR_PTR(status); 1325 kfree(opts); 1326 goto unlock; 1327 } 1328 } 1329 1330 opts->minor = gprinter_get_minor(); 1331 if (opts->minor < 0) { 1332 ret = ERR_PTR(opts->minor); 1333 kfree(opts); 1334 if (ida_is_empty(&printer_ida)) 1335 gprinter_cleanup(); 1336 goto unlock; 1337 } 1338 config_group_init_type_name(&opts->func_inst.group, "", 1339 &printer_func_type); 1340 1341unlock: 1342 mutex_unlock(&printer_ida_lock); 1343 return ret; 1344} 1345 1346static void gprinter_free(struct usb_function *f) 1347{ 1348 struct printer_dev *dev = func_to_printer(f); 1349 struct f_printer_opts *opts; 1350 1351 opts = container_of(f->fi, struct f_printer_opts, func_inst); 1352 kfree(dev); 1353 mutex_lock(&opts->lock); 1354 --opts->refcnt; 1355 mutex_unlock(&opts->lock); 1356} 1357 1358static void printer_func_unbind(struct usb_configuration *c, 1359 struct usb_function *f) 1360{ 1361 struct printer_dev *dev; 1362 struct usb_request *req; 1363 1364 dev = func_to_printer(f); 1365 1366 device_destroy(usb_gadget_class, MKDEV(major, dev->minor)); 1367 1368 /* Remove Character Device */ 1369 cdev_del(&dev->printer_cdev); 1370 1371 /* we must already have been disconnected ... no i/o may be active */ 1372 WARN_ON(!list_empty(&dev->tx_reqs_active)); 1373 WARN_ON(!list_empty(&dev->rx_reqs_active)); 1374 1375 /* Free all memory for this driver. */ 1376 while (!list_empty(&dev->tx_reqs)) { 1377 req = container_of(dev->tx_reqs.next, struct usb_request, 1378 list); 1379 list_del(&req->list); 1380 printer_req_free(dev->in_ep, req); 1381 } 1382 1383 if (dev->current_rx_req != NULL) 1384 printer_req_free(dev->out_ep, dev->current_rx_req); 1385 1386 while (!list_empty(&dev->rx_reqs)) { 1387 req = container_of(dev->rx_reqs.next, 1388 struct usb_request, list); 1389 list_del(&req->list); 1390 printer_req_free(dev->out_ep, req); 1391 } 1392 1393 while (!list_empty(&dev->rx_buffers)) { 1394 req = container_of(dev->rx_buffers.next, 1395 struct usb_request, list); 1396 list_del(&req->list); 1397 printer_req_free(dev->out_ep, req); 1398 } 1399 usb_free_all_descriptors(f); 1400} 1401 1402static struct usb_function *gprinter_alloc(struct usb_function_instance *fi) 1403{ 1404 struct printer_dev *dev; 1405 struct f_printer_opts *opts; 1406 1407 opts = container_of(fi, struct f_printer_opts, func_inst); 1408 1409 mutex_lock(&opts->lock); 1410 if (opts->minor >= minors) { 1411 mutex_unlock(&opts->lock); 1412 return ERR_PTR(-ENOENT); 1413 } 1414 1415 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 1416 if (!dev) { 1417 mutex_unlock(&opts->lock); 1418 return ERR_PTR(-ENOMEM); 1419 } 1420 1421 ++opts->refcnt; 1422 dev->minor = opts->minor; 1423 dev->pnp_string = opts->pnp_string; 1424 dev->q_len = opts->q_len; 1425 mutex_unlock(&opts->lock); 1426 1427 dev->function.name = "printer"; 1428 dev->function.bind = printer_func_bind; 1429 dev->function.setup = printer_func_setup; 1430 dev->function.unbind = printer_func_unbind; 1431 dev->function.set_alt = printer_func_set_alt; 1432 dev->function.disable = printer_func_disable; 1433 dev->function.req_match = gprinter_req_match; 1434 dev->function.free_func = gprinter_free; 1435 1436 INIT_LIST_HEAD(&dev->tx_reqs); 1437 INIT_LIST_HEAD(&dev->rx_reqs); 1438 INIT_LIST_HEAD(&dev->rx_buffers); 1439 INIT_LIST_HEAD(&dev->tx_reqs_active); 1440 INIT_LIST_HEAD(&dev->rx_reqs_active); 1441 1442 spin_lock_init(&dev->lock); 1443 mutex_init(&dev->lock_printer_io); 1444 init_waitqueue_head(&dev->rx_wait); 1445 init_waitqueue_head(&dev->tx_wait); 1446 init_waitqueue_head(&dev->tx_flush_wait); 1447 1448 dev->interface = -1; 1449 dev->printer_cdev_open = 0; 1450 dev->printer_status = PRINTER_NOT_ERROR; 1451 dev->current_rx_req = NULL; 1452 dev->current_rx_bytes = 0; 1453 dev->current_rx_buf = NULL; 1454 1455 return &dev->function; 1456} 1457 1458DECLARE_USB_FUNCTION_INIT(printer, gprinter_alloc_inst, gprinter_alloc); 1459MODULE_LICENSE("GPL"); 1460MODULE_AUTHOR("Craig Nadler"); 1461 1462static int gprinter_setup(int count) 1463{ 1464 int status; 1465 dev_t devt; 1466 1467 usb_gadget_class = class_create(THIS_MODULE, "usb_printer_gadget"); 1468 if (IS_ERR(usb_gadget_class)) { 1469 status = PTR_ERR(usb_gadget_class); 1470 usb_gadget_class = NULL; 1471 pr_err("unable to create usb_gadget class %d\n", status); 1472 return status; 1473 } 1474 1475 status = alloc_chrdev_region(&devt, 0, count, "USB printer gadget"); 1476 if (status) { 1477 pr_err("alloc_chrdev_region %d\n", status); 1478 class_destroy(usb_gadget_class); 1479 usb_gadget_class = NULL; 1480 return status; 1481 } 1482 1483 major = MAJOR(devt); 1484 minors = count; 1485 1486 return status; 1487} 1488 1489static void gprinter_cleanup(void) 1490{ 1491 if (major) { 1492 unregister_chrdev_region(MKDEV(major, 0), minors); 1493 major = minors = 0; 1494 } 1495 class_destroy(usb_gadget_class); 1496 usb_gadget_class = NULL; 1497}