printer.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299
  1. /*
  2. * printer.c -- Printer gadget driver
  3. *
  4. * Copyright (C) 2003-2005 David Brownell
  5. * Copyright (C) 2006 Craig W. Nadler
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. */
  12. #include <linux/module.h>
  13. #include <linux/kernel.h>
  14. #include <linux/delay.h>
  15. #include <linux/ioport.h>
  16. #include <linux/sched.h>
  17. #include <linux/slab.h>
  18. #include <linux/mutex.h>
  19. #include <linux/errno.h>
  20. #include <linux/init.h>
  21. #include <linux/timer.h>
  22. #include <linux/list.h>
  23. #include <linux/interrupt.h>
  24. #include <linux/device.h>
  25. #include <linux/moduleparam.h>
  26. #include <linux/fs.h>
  27. #include <linux/poll.h>
  28. #include <linux/types.h>
  29. #include <linux/ctype.h>
  30. #include <linux/cdev.h>
  31. #include <asm/byteorder.h>
  32. #include <linux/io.h>
  33. #include <linux/irq.h>
  34. #include <linux/uaccess.h>
  35. #include <asm/unaligned.h>
  36. #include <linux/usb/ch9.h>
  37. #include <linux/usb/composite.h>
  38. #include <linux/usb/gadget.h>
  39. #include <linux/usb/g_printer.h>
  40. #include "gadget_chips.h"
  41. USB_GADGET_COMPOSITE_OPTIONS();
  42. #define DRIVER_DESC "Printer Gadget"
  43. #define DRIVER_VERSION "2007 OCT 06"
  44. static DEFINE_MUTEX(printer_mutex);
  45. static const char shortname [] = "printer";
  46. static const char driver_desc [] = DRIVER_DESC;
  47. static dev_t g_printer_devno;
  48. static struct class *usb_gadget_class;
  49. /*-------------------------------------------------------------------------*/
  50. struct printer_dev {
  51. spinlock_t lock; /* lock this structure */
  52. /* lock buffer lists during read/write calls */
  53. struct mutex lock_printer_io;
  54. struct usb_gadget *gadget;
  55. s8 interface;
  56. struct usb_ep *in_ep, *out_ep;
  57. struct list_head rx_reqs; /* List of free RX structs */
  58. struct list_head rx_reqs_active; /* List of Active RX xfers */
  59. struct list_head rx_buffers; /* List of completed xfers */
  60. /* wait until there is data to be read. */
  61. wait_queue_head_t rx_wait;
  62. struct list_head tx_reqs; /* List of free TX structs */
  63. struct list_head tx_reqs_active; /* List of Active TX xfers */
  64. /* Wait until there are write buffers available to use. */
  65. wait_queue_head_t tx_wait;
  66. /* Wait until all write buffers have been sent. */
  67. wait_queue_head_t tx_flush_wait;
  68. struct usb_request *current_rx_req;
  69. size_t current_rx_bytes;
  70. u8 *current_rx_buf;
  71. u8 printer_status;
  72. u8 reset_printer;
  73. struct cdev printer_cdev;
  74. struct device *pdev;
  75. u8 printer_cdev_open;
  76. wait_queue_head_t wait;
  77. struct usb_function function;
  78. };
  79. static struct printer_dev usb_printer_gadget;
  80. /*-------------------------------------------------------------------------*/
  81. /* DO NOT REUSE THESE IDs with a protocol-incompatible driver!! Ever!!
  82. * Instead: allocate your own, using normal USB-IF procedures.
  83. */
  84. /* Thanks to NetChip Technologies for donating this product ID.
  85. */
  86. #define PRINTER_VENDOR_NUM 0x0525 /* NetChip */
  87. #define PRINTER_PRODUCT_NUM 0xa4a8 /* Linux-USB Printer Gadget */
  88. /* Some systems will want different product identifiers published in the
  89. * device descriptor, either numbers or strings or both. These string
  90. * parameters are in UTF-8 (superset of ASCII's 7 bit characters).
  91. */
  92. module_param_named(iSerialNum, coverwrite.serial_number, charp, S_IRUGO);
  93. MODULE_PARM_DESC(iSerialNum, "1");
  94. static char *iPNPstring;
  95. module_param(iPNPstring, charp, S_IRUGO);
  96. MODULE_PARM_DESC(iPNPstring, "MFG:linux;MDL:g_printer;CLS:PRINTER;SN:1;");
  97. /* Number of requests to allocate per endpoint, not used for ep0. */
  98. static unsigned qlen = 10;
  99. module_param(qlen, uint, S_IRUGO|S_IWUSR);
  100. #define QLEN qlen
  101. /*-------------------------------------------------------------------------*/
  102. /*
  103. * DESCRIPTORS ... most are static, but strings and (full) configuration
  104. * descriptors are built on demand.
  105. */
  106. /* holds our biggest descriptor */
  107. #define USB_DESC_BUFSIZE 256
  108. #define USB_BUFSIZE 8192
  109. static struct usb_device_descriptor device_desc = {
  110. .bLength = sizeof device_desc,
  111. .bDescriptorType = USB_DT_DEVICE,
  112. .bcdUSB = cpu_to_le16(0x0200),
  113. .bDeviceClass = USB_CLASS_PER_INTERFACE,
  114. .bDeviceSubClass = 0,
  115. .bDeviceProtocol = 0,
  116. .idVendor = cpu_to_le16(PRINTER_VENDOR_NUM),
  117. .idProduct = cpu_to_le16(PRINTER_PRODUCT_NUM),
  118. .bNumConfigurations = 1
  119. };
  120. static struct usb_interface_descriptor intf_desc = {
  121. .bLength = sizeof intf_desc,
  122. .bDescriptorType = USB_DT_INTERFACE,
  123. .bNumEndpoints = 2,
  124. .bInterfaceClass = USB_CLASS_PRINTER,
  125. .bInterfaceSubClass = 1, /* Printer Sub-Class */
  126. .bInterfaceProtocol = 2, /* Bi-Directional */
  127. .iInterface = 0
  128. };
  129. static struct usb_endpoint_descriptor fs_ep_in_desc = {
  130. .bLength = USB_DT_ENDPOINT_SIZE,
  131. .bDescriptorType = USB_DT_ENDPOINT,
  132. .bEndpointAddress = USB_DIR_IN,
  133. .bmAttributes = USB_ENDPOINT_XFER_BULK
  134. };
  135. static struct usb_endpoint_descriptor fs_ep_out_desc = {
  136. .bLength = USB_DT_ENDPOINT_SIZE,
  137. .bDescriptorType = USB_DT_ENDPOINT,
  138. .bEndpointAddress = USB_DIR_OUT,
  139. .bmAttributes = USB_ENDPOINT_XFER_BULK
  140. };
  141. static struct usb_descriptor_header *fs_printer_function[] = {
  142. (struct usb_descriptor_header *) &intf_desc,
  143. (struct usb_descriptor_header *) &fs_ep_in_desc,
  144. (struct usb_descriptor_header *) &fs_ep_out_desc,
  145. NULL
  146. };
  147. /*
  148. * usb 2.0 devices need to expose both high speed and full speed
  149. * descriptors, unless they only run at full speed.
  150. */
  151. static struct usb_endpoint_descriptor hs_ep_in_desc = {
  152. .bLength = USB_DT_ENDPOINT_SIZE,
  153. .bDescriptorType = USB_DT_ENDPOINT,
  154. .bmAttributes = USB_ENDPOINT_XFER_BULK,
  155. .wMaxPacketSize = cpu_to_le16(512)
  156. };
  157. static struct usb_endpoint_descriptor hs_ep_out_desc = {
  158. .bLength = USB_DT_ENDPOINT_SIZE,
  159. .bDescriptorType = USB_DT_ENDPOINT,
  160. .bmAttributes = USB_ENDPOINT_XFER_BULK,
  161. .wMaxPacketSize = cpu_to_le16(512)
  162. };
  163. static struct usb_qualifier_descriptor dev_qualifier = {
  164. .bLength = sizeof dev_qualifier,
  165. .bDescriptorType = USB_DT_DEVICE_QUALIFIER,
  166. .bcdUSB = cpu_to_le16(0x0200),
  167. .bDeviceClass = USB_CLASS_PRINTER,
  168. .bNumConfigurations = 1
  169. };
  170. static struct usb_descriptor_header *hs_printer_function[] = {
  171. (struct usb_descriptor_header *) &intf_desc,
  172. (struct usb_descriptor_header *) &hs_ep_in_desc,
  173. (struct usb_descriptor_header *) &hs_ep_out_desc,
  174. NULL
  175. };
  176. static struct usb_otg_descriptor otg_descriptor = {
  177. .bLength = sizeof otg_descriptor,
  178. .bDescriptorType = USB_DT_OTG,
  179. .bmAttributes = USB_OTG_SRP,
  180. };
  181. static const struct usb_descriptor_header *otg_desc[] = {
  182. (struct usb_descriptor_header *) &otg_descriptor,
  183. NULL,
  184. };
  185. /* maxpacket and other transfer characteristics vary by speed. */
  186. #define ep_desc(g, hs, fs) (((g)->speed == USB_SPEED_HIGH)?(hs):(fs))
  187. /*-------------------------------------------------------------------------*/
  188. /* descriptors that are built on-demand */
  189. static char product_desc [40] = DRIVER_DESC;
  190. static char serial_num [40] = "1";
  191. static char pnp_string [1024] =
  192. "XXMFG:linux;MDL:g_printer;CLS:PRINTER;SN:1;";
  193. /* static strings, in UTF-8 */
  194. static struct usb_string strings [] = {
  195. [USB_GADGET_MANUFACTURER_IDX].s = "",
  196. [USB_GADGET_PRODUCT_IDX].s = product_desc,
  197. [USB_GADGET_SERIAL_IDX].s = serial_num,
  198. { } /* end of list */
  199. };
  200. static struct usb_gadget_strings stringtab_dev = {
  201. .language = 0x0409, /* en-us */
  202. .strings = strings,
  203. };
  204. static struct usb_gadget_strings *dev_strings[] = {
  205. &stringtab_dev,
  206. NULL,
  207. };
  208. /*-------------------------------------------------------------------------*/
  209. static struct usb_request *
  210. printer_req_alloc(struct usb_ep *ep, unsigned len, gfp_t gfp_flags)
  211. {
  212. struct usb_request *req;
  213. req = usb_ep_alloc_request(ep, gfp_flags);
  214. if (req != NULL) {
  215. req->length = len;
  216. req->buf = kmalloc(len, gfp_flags);
  217. if (req->buf == NULL) {
  218. usb_ep_free_request(ep, req);
  219. return NULL;
  220. }
  221. }
  222. return req;
  223. }
  224. static void
  225. printer_req_free(struct usb_ep *ep, struct usb_request *req)
  226. {
  227. if (ep != NULL && req != NULL) {
  228. kfree(req->buf);
  229. usb_ep_free_request(ep, req);
  230. }
  231. }
  232. /*-------------------------------------------------------------------------*/
  233. static void rx_complete(struct usb_ep *ep, struct usb_request *req)
  234. {
  235. struct printer_dev *dev = ep->driver_data;
  236. int status = req->status;
  237. unsigned long flags;
  238. spin_lock_irqsave(&dev->lock, flags);
  239. list_del_init(&req->list); /* Remode from Active List */
  240. switch (status) {
  241. /* normal completion */
  242. case 0:
  243. if (req->actual > 0) {
  244. list_add_tail(&req->list, &dev->rx_buffers);
  245. DBG(dev, "G_Printer : rx length %d\n", req->actual);
  246. } else {
  247. list_add(&req->list, &dev->rx_reqs);
  248. }
  249. break;
  250. /* software-driven interface shutdown */
  251. case -ECONNRESET: /* unlink */
  252. case -ESHUTDOWN: /* disconnect etc */
  253. VDBG(dev, "rx shutdown, code %d\n", status);
  254. list_add(&req->list, &dev->rx_reqs);
  255. break;
  256. /* for hardware automagic (such as pxa) */
  257. case -ECONNABORTED: /* endpoint reset */
  258. DBG(dev, "rx %s reset\n", ep->name);
  259. list_add(&req->list, &dev->rx_reqs);
  260. break;
  261. /* data overrun */
  262. case -EOVERFLOW:
  263. /* FALLTHROUGH */
  264. default:
  265. DBG(dev, "rx status %d\n", status);
  266. list_add(&req->list, &dev->rx_reqs);
  267. break;
  268. }
  269. wake_up_interruptible(&dev->rx_wait);
  270. spin_unlock_irqrestore(&dev->lock, flags);
  271. }
  272. static void tx_complete(struct usb_ep *ep, struct usb_request *req)
  273. {
  274. struct printer_dev *dev = ep->driver_data;
  275. switch (req->status) {
  276. default:
  277. VDBG(dev, "tx err %d\n", req->status);
  278. /* FALLTHROUGH */
  279. case -ECONNRESET: /* unlink */
  280. case -ESHUTDOWN: /* disconnect etc */
  281. break;
  282. case 0:
  283. break;
  284. }
  285. spin_lock(&dev->lock);
  286. /* Take the request struct off the active list and put it on the
  287. * free list.
  288. */
  289. list_del_init(&req->list);
  290. list_add(&req->list, &dev->tx_reqs);
  291. wake_up_interruptible(&dev->tx_wait);
  292. if (likely(list_empty(&dev->tx_reqs_active)))
  293. wake_up_interruptible(&dev->tx_flush_wait);
  294. spin_unlock(&dev->lock);
  295. }
  296. /*-------------------------------------------------------------------------*/
  297. static int
  298. printer_open(struct inode *inode, struct file *fd)
  299. {
  300. struct printer_dev *dev;
  301. unsigned long flags;
  302. int ret = -EBUSY;
  303. mutex_lock(&printer_mutex);
  304. dev = container_of(inode->i_cdev, struct printer_dev, printer_cdev);
  305. spin_lock_irqsave(&dev->lock, flags);
  306. if (!dev->printer_cdev_open) {
  307. dev->printer_cdev_open = 1;
  308. fd->private_data = dev;
  309. ret = 0;
  310. /* Change the printer status to show that it's on-line. */
  311. dev->printer_status |= PRINTER_SELECTED;
  312. }
  313. spin_unlock_irqrestore(&dev->lock, flags);
  314. DBG(dev, "printer_open returned %x\n", ret);
  315. mutex_unlock(&printer_mutex);
  316. return ret;
  317. }
  318. static int
  319. printer_close(struct inode *inode, struct file *fd)
  320. {
  321. struct printer_dev *dev = fd->private_data;
  322. unsigned long flags;
  323. spin_lock_irqsave(&dev->lock, flags);
  324. dev->printer_cdev_open = 0;
  325. fd->private_data = NULL;
  326. /* Change printer status to show that the printer is off-line. */
  327. dev->printer_status &= ~PRINTER_SELECTED;
  328. spin_unlock_irqrestore(&dev->lock, flags);
  329. DBG(dev, "printer_close\n");
  330. return 0;
  331. }
  332. /* This function must be called with interrupts turned off. */
  333. static void
  334. setup_rx_reqs(struct printer_dev *dev)
  335. {
  336. struct usb_request *req;
  337. while (likely(!list_empty(&dev->rx_reqs))) {
  338. int error;
  339. req = container_of(dev->rx_reqs.next,
  340. struct usb_request, list);
  341. list_del_init(&req->list);
  342. /* The USB Host sends us whatever amount of data it wants to
  343. * so we always set the length field to the full USB_BUFSIZE.
  344. * If the amount of data is more than the read() caller asked
  345. * for it will be stored in the request buffer until it is
  346. * asked for by read().
  347. */
  348. req->length = USB_BUFSIZE;
  349. req->complete = rx_complete;
  350. error = usb_ep_queue(dev->out_ep, req, GFP_ATOMIC);
  351. if (error) {
  352. DBG(dev, "rx submit --> %d\n", error);
  353. list_add(&req->list, &dev->rx_reqs);
  354. break;
  355. } else {
  356. list_add(&req->list, &dev->rx_reqs_active);
  357. }
  358. }
  359. }
  360. static ssize_t
  361. printer_read(struct file *fd, char __user *buf, size_t len, loff_t *ptr)
  362. {
  363. struct printer_dev *dev = fd->private_data;
  364. unsigned long flags;
  365. size_t size;
  366. size_t bytes_copied;
  367. struct usb_request *req;
  368. /* This is a pointer to the current USB rx request. */
  369. struct usb_request *current_rx_req;
  370. /* This is the number of bytes in the current rx buffer. */
  371. size_t current_rx_bytes;
  372. /* This is a pointer to the current rx buffer. */
  373. u8 *current_rx_buf;
  374. if (len == 0)
  375. return -EINVAL;
  376. DBG(dev, "printer_read trying to read %d bytes\n", (int)len);
  377. mutex_lock(&dev->lock_printer_io);
  378. spin_lock_irqsave(&dev->lock, flags);
  379. /* We will use this flag later to check if a printer reset happened
  380. * after we turn interrupts back on.
  381. */
  382. dev->reset_printer = 0;
  383. setup_rx_reqs(dev);
  384. bytes_copied = 0;
  385. current_rx_req = dev->current_rx_req;
  386. current_rx_bytes = dev->current_rx_bytes;
  387. current_rx_buf = dev->current_rx_buf;
  388. dev->current_rx_req = NULL;
  389. dev->current_rx_bytes = 0;
  390. dev->current_rx_buf = NULL;
  391. /* Check if there is any data in the read buffers. Please note that
  392. * current_rx_bytes is the number of bytes in the current rx buffer.
  393. * If it is zero then check if there are any other rx_buffers that
  394. * are on the completed list. We are only out of data if all rx
  395. * buffers are empty.
  396. */
  397. if ((current_rx_bytes == 0) &&
  398. (likely(list_empty(&dev->rx_buffers)))) {
  399. /* Turn interrupts back on before sleeping. */
  400. spin_unlock_irqrestore(&dev->lock, flags);
  401. /*
  402. * If no data is available check if this is a NON-Blocking
  403. * call or not.
  404. */
  405. if (fd->f_flags & (O_NONBLOCK|O_NDELAY)) {
  406. mutex_unlock(&dev->lock_printer_io);
  407. return -EAGAIN;
  408. }
  409. /* Sleep until data is available */
  410. wait_event_interruptible(dev->rx_wait,
  411. (likely(!list_empty(&dev->rx_buffers))));
  412. spin_lock_irqsave(&dev->lock, flags);
  413. }
  414. /* We have data to return then copy it to the caller's buffer.*/
  415. while ((current_rx_bytes || likely(!list_empty(&dev->rx_buffers)))
  416. && len) {
  417. if (current_rx_bytes == 0) {
  418. req = container_of(dev->rx_buffers.next,
  419. struct usb_request, list);
  420. list_del_init(&req->list);
  421. if (req->actual && req->buf) {
  422. current_rx_req = req;
  423. current_rx_bytes = req->actual;
  424. current_rx_buf = req->buf;
  425. } else {
  426. list_add(&req->list, &dev->rx_reqs);
  427. continue;
  428. }
  429. }
  430. /* Don't leave irqs off while doing memory copies */
  431. spin_unlock_irqrestore(&dev->lock, flags);
  432. if (len > current_rx_bytes)
  433. size = current_rx_bytes;
  434. else
  435. size = len;
  436. size -= copy_to_user(buf, current_rx_buf, size);
  437. bytes_copied += size;
  438. len -= size;
  439. buf += size;
  440. spin_lock_irqsave(&dev->lock, flags);
  441. /* We've disconnected or reset so return. */
  442. if (dev->reset_printer) {
  443. list_add(&current_rx_req->list, &dev->rx_reqs);
  444. spin_unlock_irqrestore(&dev->lock, flags);
  445. mutex_unlock(&dev->lock_printer_io);
  446. return -EAGAIN;
  447. }
  448. /* If we not returning all the data left in this RX request
  449. * buffer then adjust the amount of data left in the buffer.
  450. * Othewise if we are done with this RX request buffer then
  451. * requeue it to get any incoming data from the USB host.
  452. */
  453. if (size < current_rx_bytes) {
  454. current_rx_bytes -= size;
  455. current_rx_buf += size;
  456. } else {
  457. list_add(&current_rx_req->list, &dev->rx_reqs);
  458. current_rx_bytes = 0;
  459. current_rx_buf = NULL;
  460. current_rx_req = NULL;
  461. }
  462. }
  463. dev->current_rx_req = current_rx_req;
  464. dev->current_rx_bytes = current_rx_bytes;
  465. dev->current_rx_buf = current_rx_buf;
  466. spin_unlock_irqrestore(&dev->lock, flags);
  467. mutex_unlock(&dev->lock_printer_io);
  468. DBG(dev, "printer_read returned %d bytes\n", (int)bytes_copied);
  469. if (bytes_copied)
  470. return bytes_copied;
  471. else
  472. return -EAGAIN;
  473. }
  474. static ssize_t
  475. printer_write(struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
  476. {
  477. struct printer_dev *dev = fd->private_data;
  478. unsigned long flags;
  479. size_t size; /* Amount of data in a TX request. */
  480. size_t bytes_copied = 0;
  481. struct usb_request *req;
  482. DBG(dev, "printer_write trying to send %d bytes\n", (int)len);
  483. if (len == 0)
  484. return -EINVAL;
  485. mutex_lock(&dev->lock_printer_io);
  486. spin_lock_irqsave(&dev->lock, flags);
  487. /* Check if a printer reset happens while we have interrupts on */
  488. dev->reset_printer = 0;
  489. /* Check if there is any available write buffers */
  490. if (likely(list_empty(&dev->tx_reqs))) {
  491. /* Turn interrupts back on before sleeping. */
  492. spin_unlock_irqrestore(&dev->lock, flags);
  493. /*
  494. * If write buffers are available check if this is
  495. * a NON-Blocking call or not.
  496. */
  497. if (fd->f_flags & (O_NONBLOCK|O_NDELAY)) {
  498. mutex_unlock(&dev->lock_printer_io);
  499. return -EAGAIN;
  500. }
  501. /* Sleep until a write buffer is available */
  502. wait_event_interruptible(dev->tx_wait,
  503. (likely(!list_empty(&dev->tx_reqs))));
  504. spin_lock_irqsave(&dev->lock, flags);
  505. }
  506. while (likely(!list_empty(&dev->tx_reqs)) && len) {
  507. if (len > USB_BUFSIZE)
  508. size = USB_BUFSIZE;
  509. else
  510. size = len;
  511. req = container_of(dev->tx_reqs.next, struct usb_request,
  512. list);
  513. list_del_init(&req->list);
  514. req->complete = tx_complete;
  515. req->length = size;
  516. /* Check if we need to send a zero length packet. */
  517. if (len > size)
  518. /* They will be more TX requests so no yet. */
  519. req->zero = 0;
  520. else
  521. /* If the data amount is not a multple of the
  522. * maxpacket size then send a zero length packet.
  523. */
  524. req->zero = ((len % dev->in_ep->maxpacket) == 0);
  525. /* Don't leave irqs off while doing memory copies */
  526. spin_unlock_irqrestore(&dev->lock, flags);
  527. if (copy_from_user(req->buf, buf, size)) {
  528. list_add(&req->list, &dev->tx_reqs);
  529. mutex_unlock(&dev->lock_printer_io);
  530. return bytes_copied;
  531. }
  532. bytes_copied += size;
  533. len -= size;
  534. buf += size;
  535. spin_lock_irqsave(&dev->lock, flags);
  536. /* We've disconnected or reset so free the req and buffer */
  537. if (dev->reset_printer) {
  538. list_add(&req->list, &dev->tx_reqs);
  539. spin_unlock_irqrestore(&dev->lock, flags);
  540. mutex_unlock(&dev->lock_printer_io);
  541. return -EAGAIN;
  542. }
  543. if (usb_ep_queue(dev->in_ep, req, GFP_ATOMIC)) {
  544. list_add(&req->list, &dev->tx_reqs);
  545. spin_unlock_irqrestore(&dev->lock, flags);
  546. mutex_unlock(&dev->lock_printer_io);
  547. return -EAGAIN;
  548. }
  549. list_add(&req->list, &dev->tx_reqs_active);
  550. }
  551. spin_unlock_irqrestore(&dev->lock, flags);
  552. mutex_unlock(&dev->lock_printer_io);
  553. DBG(dev, "printer_write sent %d bytes\n", (int)bytes_copied);
  554. if (bytes_copied) {
  555. return bytes_copied;
  556. } else {
  557. return -EAGAIN;
  558. }
  559. }
  560. static int
  561. printer_fsync(struct file *fd, loff_t start, loff_t end, int datasync)
  562. {
  563. struct printer_dev *dev = fd->private_data;
  564. struct inode *inode = file_inode(fd);
  565. unsigned long flags;
  566. int tx_list_empty;
  567. mutex_lock(&inode->i_mutex);
  568. spin_lock_irqsave(&dev->lock, flags);
  569. tx_list_empty = (likely(list_empty(&dev->tx_reqs)));
  570. spin_unlock_irqrestore(&dev->lock, flags);
  571. if (!tx_list_empty) {
  572. /* Sleep until all data has been sent */
  573. wait_event_interruptible(dev->tx_flush_wait,
  574. (likely(list_empty(&dev->tx_reqs_active))));
  575. }
  576. mutex_unlock(&inode->i_mutex);
  577. return 0;
  578. }
  579. static unsigned int
  580. printer_poll(struct file *fd, poll_table *wait)
  581. {
  582. struct printer_dev *dev = fd->private_data;
  583. unsigned long flags;
  584. int status = 0;
  585. mutex_lock(&dev->lock_printer_io);
  586. spin_lock_irqsave(&dev->lock, flags);
  587. setup_rx_reqs(dev);
  588. spin_unlock_irqrestore(&dev->lock, flags);
  589. mutex_unlock(&dev->lock_printer_io);
  590. poll_wait(fd, &dev->rx_wait, wait);
  591. poll_wait(fd, &dev->tx_wait, wait);
  592. spin_lock_irqsave(&dev->lock, flags);
  593. if (likely(!list_empty(&dev->tx_reqs)))
  594. status |= POLLOUT | POLLWRNORM;
  595. if (likely(dev->current_rx_bytes) ||
  596. likely(!list_empty(&dev->rx_buffers)))
  597. status |= POLLIN | POLLRDNORM;
  598. spin_unlock_irqrestore(&dev->lock, flags);
  599. return status;
  600. }
  601. static long
  602. printer_ioctl(struct file *fd, unsigned int code, unsigned long arg)
  603. {
  604. struct printer_dev *dev = fd->private_data;
  605. unsigned long flags;
  606. int status = 0;
  607. DBG(dev, "printer_ioctl: cmd=0x%4.4x, arg=%lu\n", code, arg);
  608. /* handle ioctls */
  609. spin_lock_irqsave(&dev->lock, flags);
  610. switch (code) {
  611. case GADGET_GET_PRINTER_STATUS:
  612. status = (int)dev->printer_status;
  613. break;
  614. case GADGET_SET_PRINTER_STATUS:
  615. dev->printer_status = (u8)arg;
  616. break;
  617. default:
  618. /* could not handle ioctl */
  619. DBG(dev, "printer_ioctl: ERROR cmd=0x%4.4xis not supported\n",
  620. code);
  621. status = -ENOTTY;
  622. }
  623. spin_unlock_irqrestore(&dev->lock, flags);
  624. return status;
  625. }
  626. /* used after endpoint configuration */
  627. static const struct file_operations printer_io_operations = {
  628. .owner = THIS_MODULE,
  629. .open = printer_open,
  630. .read = printer_read,
  631. .write = printer_write,
  632. .fsync = printer_fsync,
  633. .poll = printer_poll,
  634. .unlocked_ioctl = printer_ioctl,
  635. .release = printer_close,
  636. .llseek = noop_llseek,
  637. };
  638. /*-------------------------------------------------------------------------*/
  639. static int
  640. set_printer_interface(struct printer_dev *dev)
  641. {
  642. int result = 0;
  643. dev->in_ep->desc = ep_desc(dev->gadget, &hs_ep_in_desc, &fs_ep_in_desc);
  644. dev->in_ep->driver_data = dev;
  645. dev->out_ep->desc = ep_desc(dev->gadget, &hs_ep_out_desc,
  646. &fs_ep_out_desc);
  647. dev->out_ep->driver_data = dev;
  648. result = usb_ep_enable(dev->in_ep);
  649. if (result != 0) {
  650. DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result);
  651. goto done;
  652. }
  653. result = usb_ep_enable(dev->out_ep);
  654. if (result != 0) {
  655. DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result);
  656. goto done;
  657. }
  658. done:
  659. /* on error, disable any endpoints */
  660. if (result != 0) {
  661. (void) usb_ep_disable(dev->in_ep);
  662. (void) usb_ep_disable(dev->out_ep);
  663. dev->in_ep->desc = NULL;
  664. dev->out_ep->desc = NULL;
  665. }
  666. /* caller is responsible for cleanup on error */
  667. return result;
  668. }
  669. static void printer_reset_interface(struct printer_dev *dev)
  670. {
  671. if (dev->interface < 0)
  672. return;
  673. DBG(dev, "%s\n", __func__);
  674. if (dev->in_ep->desc)
  675. usb_ep_disable(dev->in_ep);
  676. if (dev->out_ep->desc)
  677. usb_ep_disable(dev->out_ep);
  678. dev->in_ep->desc = NULL;
  679. dev->out_ep->desc = NULL;
  680. dev->interface = -1;
  681. }
  682. /* Change our operational Interface. */
  683. static int set_interface(struct printer_dev *dev, unsigned number)
  684. {
  685. int result = 0;
  686. /* Free the current interface */
  687. printer_reset_interface(dev);
  688. result = set_printer_interface(dev);
  689. if (result)
  690. printer_reset_interface(dev);
  691. else
  692. dev->interface = number;
  693. if (!result)
  694. INFO(dev, "Using interface %x\n", number);
  695. return result;
  696. }
  697. static void printer_soft_reset(struct printer_dev *dev)
  698. {
  699. struct usb_request *req;
  700. INFO(dev, "Received Printer Reset Request\n");
  701. if (usb_ep_disable(dev->in_ep))
  702. DBG(dev, "Failed to disable USB in_ep\n");
  703. if (usb_ep_disable(dev->out_ep))
  704. DBG(dev, "Failed to disable USB out_ep\n");
  705. if (dev->current_rx_req != NULL) {
  706. list_add(&dev->current_rx_req->list, &dev->rx_reqs);
  707. dev->current_rx_req = NULL;
  708. }
  709. dev->current_rx_bytes = 0;
  710. dev->current_rx_buf = NULL;
  711. dev->reset_printer = 1;
  712. while (likely(!(list_empty(&dev->rx_buffers)))) {
  713. req = container_of(dev->rx_buffers.next, struct usb_request,
  714. list);
  715. list_del_init(&req->list);
  716. list_add(&req->list, &dev->rx_reqs);
  717. }
  718. while (likely(!(list_empty(&dev->rx_reqs_active)))) {
  719. req = container_of(dev->rx_buffers.next, struct usb_request,
  720. list);
  721. list_del_init(&req->list);
  722. list_add(&req->list, &dev->rx_reqs);
  723. }
  724. while (likely(!(list_empty(&dev->tx_reqs_active)))) {
  725. req = container_of(dev->tx_reqs_active.next,
  726. struct usb_request, list);
  727. list_del_init(&req->list);
  728. list_add(&req->list, &dev->tx_reqs);
  729. }
  730. if (usb_ep_enable(dev->in_ep))
  731. DBG(dev, "Failed to enable USB in_ep\n");
  732. if (usb_ep_enable(dev->out_ep))
  733. DBG(dev, "Failed to enable USB out_ep\n");
  734. wake_up_interruptible(&dev->rx_wait);
  735. wake_up_interruptible(&dev->tx_wait);
  736. wake_up_interruptible(&dev->tx_flush_wait);
  737. }
  738. /*-------------------------------------------------------------------------*/
  739. /*
  740. * The setup() callback implements all the ep0 functionality that's not
  741. * handled lower down.
  742. */
  743. static int printer_func_setup(struct usb_function *f,
  744. const struct usb_ctrlrequest *ctrl)
  745. {
  746. struct printer_dev *dev = container_of(f, struct printer_dev, function);
  747. struct usb_composite_dev *cdev = f->config->cdev;
  748. struct usb_request *req = cdev->req;
  749. int value = -EOPNOTSUPP;
  750. u16 wIndex = le16_to_cpu(ctrl->wIndex);
  751. u16 wValue = le16_to_cpu(ctrl->wValue);
  752. u16 wLength = le16_to_cpu(ctrl->wLength);
  753. DBG(dev, "ctrl req%02x.%02x v%04x i%04x l%d\n",
  754. ctrl->bRequestType, ctrl->bRequest, wValue, wIndex, wLength);
  755. switch (ctrl->bRequestType&USB_TYPE_MASK) {
  756. case USB_TYPE_CLASS:
  757. switch (ctrl->bRequest) {
  758. case 0: /* Get the IEEE-1284 PNP String */
  759. /* Only one printer interface is supported. */
  760. if ((wIndex>>8) != dev->interface)
  761. break;
  762. value = (pnp_string[0]<<8)|pnp_string[1];
  763. memcpy(req->buf, pnp_string, value);
  764. DBG(dev, "1284 PNP String: %x %s\n", value,
  765. &pnp_string[2]);
  766. break;
  767. case 1: /* Get Port Status */
  768. /* Only one printer interface is supported. */
  769. if (wIndex != dev->interface)
  770. break;
  771. *(u8 *)req->buf = dev->printer_status;
  772. value = min(wLength, (u16) 1);
  773. break;
  774. case 2: /* Soft Reset */
  775. /* Only one printer interface is supported. */
  776. if (wIndex != dev->interface)
  777. break;
  778. printer_soft_reset(dev);
  779. value = 0;
  780. break;
  781. default:
  782. goto unknown;
  783. }
  784. break;
  785. default:
  786. unknown:
  787. VDBG(dev,
  788. "unknown ctrl req%02x.%02x v%04x i%04x l%d\n",
  789. ctrl->bRequestType, ctrl->bRequest,
  790. wValue, wIndex, wLength);
  791. break;
  792. }
  793. /* host either stalls (value < 0) or reports success */
  794. return value;
  795. }
  796. static int __init printer_func_bind(struct usb_configuration *c,
  797. struct usb_function *f)
  798. {
  799. struct printer_dev *dev = container_of(f, struct printer_dev, function);
  800. struct usb_composite_dev *cdev = c->cdev;
  801. struct usb_ep *in_ep;
  802. struct usb_ep *out_ep = NULL;
  803. int id;
  804. int ret;
  805. id = usb_interface_id(c, f);
  806. if (id < 0)
  807. return id;
  808. intf_desc.bInterfaceNumber = id;
  809. /* all we really need is bulk IN/OUT */
  810. in_ep = usb_ep_autoconfig(cdev->gadget, &fs_ep_in_desc);
  811. if (!in_ep) {
  812. autoconf_fail:
  813. dev_err(&cdev->gadget->dev, "can't autoconfigure on %s\n",
  814. cdev->gadget->name);
  815. return -ENODEV;
  816. }
  817. in_ep->driver_data = in_ep; /* claim */
  818. out_ep = usb_ep_autoconfig(cdev->gadget, &fs_ep_out_desc);
  819. if (!out_ep)
  820. goto autoconf_fail;
  821. out_ep->driver_data = out_ep; /* claim */
  822. /* assumes that all endpoints are dual-speed */
  823. hs_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress;
  824. hs_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress;
  825. ret = usb_assign_descriptors(f, fs_printer_function,
  826. hs_printer_function, NULL);
  827. if (ret)
  828. return ret;
  829. dev->in_ep = in_ep;
  830. dev->out_ep = out_ep;
  831. return 0;
  832. }
  833. static void printer_func_unbind(struct usb_configuration *c,
  834. struct usb_function *f)
  835. {
  836. usb_free_all_descriptors(f);
  837. }
  838. static int printer_func_set_alt(struct usb_function *f,
  839. unsigned intf, unsigned alt)
  840. {
  841. struct printer_dev *dev = container_of(f, struct printer_dev, function);
  842. int ret = -ENOTSUPP;
  843. if (!alt)
  844. ret = set_interface(dev, intf);
  845. return ret;
  846. }
  847. static void printer_func_disable(struct usb_function *f)
  848. {
  849. struct printer_dev *dev = container_of(f, struct printer_dev, function);
  850. unsigned long flags;
  851. DBG(dev, "%s\n", __func__);
  852. spin_lock_irqsave(&dev->lock, flags);
  853. printer_reset_interface(dev);
  854. spin_unlock_irqrestore(&dev->lock, flags);
  855. }
  856. static void printer_cfg_unbind(struct usb_configuration *c)
  857. {
  858. struct printer_dev *dev;
  859. struct usb_request *req;
  860. dev = &usb_printer_gadget;
  861. DBG(dev, "%s\n", __func__);
  862. /* Remove sysfs files */
  863. device_destroy(usb_gadget_class, g_printer_devno);
  864. /* Remove Character Device */
  865. cdev_del(&dev->printer_cdev);
  866. /* we must already have been disconnected ... no i/o may be active */
  867. WARN_ON(!list_empty(&dev->tx_reqs_active));
  868. WARN_ON(!list_empty(&dev->rx_reqs_active));
  869. /* Free all memory for this driver. */
  870. while (!list_empty(&dev->tx_reqs)) {
  871. req = container_of(dev->tx_reqs.next, struct usb_request,
  872. list);
  873. list_del(&req->list);
  874. printer_req_free(dev->in_ep, req);
  875. }
  876. if (dev->current_rx_req != NULL)
  877. printer_req_free(dev->out_ep, dev->current_rx_req);
  878. while (!list_empty(&dev->rx_reqs)) {
  879. req = container_of(dev->rx_reqs.next,
  880. struct usb_request, list);
  881. list_del(&req->list);
  882. printer_req_free(dev->out_ep, req);
  883. }
  884. while (!list_empty(&dev->rx_buffers)) {
  885. req = container_of(dev->rx_buffers.next,
  886. struct usb_request, list);
  887. list_del(&req->list);
  888. printer_req_free(dev->out_ep, req);
  889. }
  890. }
  891. static struct usb_configuration printer_cfg_driver = {
  892. .label = "printer",
  893. .unbind = printer_cfg_unbind,
  894. .bConfigurationValue = 1,
  895. .bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
  896. };
  897. static int __init printer_bind_config(struct usb_configuration *c)
  898. {
  899. struct usb_gadget *gadget = c->cdev->gadget;
  900. struct printer_dev *dev;
  901. int status = -ENOMEM;
  902. size_t len;
  903. u32 i;
  904. struct usb_request *req;
  905. usb_ep_autoconfig_reset(gadget);
  906. dev = &usb_printer_gadget;
  907. dev->function.name = shortname;
  908. dev->function.bind = printer_func_bind;
  909. dev->function.setup = printer_func_setup;
  910. dev->function.unbind = printer_func_unbind;
  911. dev->function.set_alt = printer_func_set_alt;
  912. dev->function.disable = printer_func_disable;
  913. status = usb_add_function(c, &dev->function);
  914. if (status)
  915. return status;
  916. /* Setup the sysfs files for the printer gadget. */
  917. dev->pdev = device_create(usb_gadget_class, NULL, g_printer_devno,
  918. NULL, "g_printer");
  919. if (IS_ERR(dev->pdev)) {
  920. ERROR(dev, "Failed to create device: g_printer\n");
  921. goto fail;
  922. }
  923. /*
  924. * Register a character device as an interface to a user mode
  925. * program that handles the printer specific functionality.
  926. */
  927. cdev_init(&dev->printer_cdev, &printer_io_operations);
  928. dev->printer_cdev.owner = THIS_MODULE;
  929. status = cdev_add(&dev->printer_cdev, g_printer_devno, 1);
  930. if (status) {
  931. ERROR(dev, "Failed to open char device\n");
  932. goto fail;
  933. }
  934. if (iPNPstring)
  935. strlcpy(&pnp_string[2], iPNPstring, (sizeof pnp_string)-2);
  936. len = strlen(pnp_string);
  937. pnp_string[0] = (len >> 8) & 0xFF;
  938. pnp_string[1] = len & 0xFF;
  939. usb_gadget_set_selfpowered(gadget);
  940. if (gadget->is_otg) {
  941. otg_descriptor.bmAttributes |= USB_OTG_HNP;
  942. printer_cfg_driver.descriptors = otg_desc;
  943. printer_cfg_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
  944. }
  945. spin_lock_init(&dev->lock);
  946. mutex_init(&dev->lock_printer_io);
  947. INIT_LIST_HEAD(&dev->tx_reqs);
  948. INIT_LIST_HEAD(&dev->tx_reqs_active);
  949. INIT_LIST_HEAD(&dev->rx_reqs);
  950. INIT_LIST_HEAD(&dev->rx_reqs_active);
  951. INIT_LIST_HEAD(&dev->rx_buffers);
  952. init_waitqueue_head(&dev->rx_wait);
  953. init_waitqueue_head(&dev->tx_wait);
  954. init_waitqueue_head(&dev->tx_flush_wait);
  955. dev->interface = -1;
  956. dev->printer_cdev_open = 0;
  957. dev->printer_status = PRINTER_NOT_ERROR;
  958. dev->current_rx_req = NULL;
  959. dev->current_rx_bytes = 0;
  960. dev->current_rx_buf = NULL;
  961. for (i = 0; i < QLEN; i++) {
  962. req = printer_req_alloc(dev->in_ep, USB_BUFSIZE, GFP_KERNEL);
  963. if (!req) {
  964. while (!list_empty(&dev->tx_reqs)) {
  965. req = container_of(dev->tx_reqs.next,
  966. struct usb_request, list);
  967. list_del(&req->list);
  968. printer_req_free(dev->in_ep, req);
  969. }
  970. return -ENOMEM;
  971. }
  972. list_add(&req->list, &dev->tx_reqs);
  973. }
  974. for (i = 0; i < QLEN; i++) {
  975. req = printer_req_alloc(dev->out_ep, USB_BUFSIZE, GFP_KERNEL);
  976. if (!req) {
  977. while (!list_empty(&dev->rx_reqs)) {
  978. req = container_of(dev->rx_reqs.next,
  979. struct usb_request, list);
  980. list_del(&req->list);
  981. printer_req_free(dev->out_ep, req);
  982. }
  983. return -ENOMEM;
  984. }
  985. list_add(&req->list, &dev->rx_reqs);
  986. }
  987. /* finish hookup to lower layer ... */
  988. dev->gadget = gadget;
  989. INFO(dev, "%s, version: " DRIVER_VERSION "\n", driver_desc);
  990. return 0;
  991. fail:
  992. printer_cfg_unbind(c);
  993. return status;
  994. }
  995. static int printer_unbind(struct usb_composite_dev *cdev)
  996. {
  997. return 0;
  998. }
  999. static int __init printer_bind(struct usb_composite_dev *cdev)
  1000. {
  1001. int ret;
  1002. ret = usb_string_ids_tab(cdev, strings);
  1003. if (ret < 0)
  1004. return ret;
  1005. device_desc.iManufacturer = strings[USB_GADGET_MANUFACTURER_IDX].id;
  1006. device_desc.iProduct = strings[USB_GADGET_PRODUCT_IDX].id;
  1007. device_desc.iSerialNumber = strings[USB_GADGET_SERIAL_IDX].id;
  1008. ret = usb_add_config(cdev, &printer_cfg_driver, printer_bind_config);
  1009. if (ret)
  1010. return ret;
  1011. usb_composite_overwrite_options(cdev, &coverwrite);
  1012. return ret;
  1013. }
  1014. static __refdata struct usb_composite_driver printer_driver = {
  1015. .name = shortname,
  1016. .dev = &device_desc,
  1017. .strings = dev_strings,
  1018. .max_speed = USB_SPEED_HIGH,
  1019. .bind = printer_bind,
  1020. .unbind = printer_unbind,
  1021. };
  1022. static int __init
  1023. init(void)
  1024. {
  1025. int status;
  1026. usb_gadget_class = class_create(THIS_MODULE, "usb_printer_gadget");
  1027. if (IS_ERR(usb_gadget_class)) {
  1028. status = PTR_ERR(usb_gadget_class);
  1029. pr_err("unable to create usb_gadget class %d\n", status);
  1030. return status;
  1031. }
  1032. status = alloc_chrdev_region(&g_printer_devno, 0, 1,
  1033. "USB printer gadget");
  1034. if (status) {
  1035. pr_err("alloc_chrdev_region %d\n", status);
  1036. class_destroy(usb_gadget_class);
  1037. return status;
  1038. }
  1039. status = usb_composite_probe(&printer_driver);
  1040. if (status) {
  1041. class_destroy(usb_gadget_class);
  1042. unregister_chrdev_region(g_printer_devno, 1);
  1043. pr_err("usb_gadget_probe_driver %x\n", status);
  1044. }
  1045. return status;
  1046. }
  1047. module_init(init);
  1048. static void __exit
  1049. cleanup(void)
  1050. {
  1051. mutex_lock(&usb_printer_gadget.lock_printer_io);
  1052. usb_composite_unregister(&printer_driver);
  1053. unregister_chrdev_region(g_printer_devno, 1);
  1054. class_destroy(usb_gadget_class);
  1055. mutex_unlock(&usb_printer_gadget.lock_printer_io);
  1056. }
  1057. module_exit(cleanup);
  1058. MODULE_DESCRIPTION(DRIVER_DESC);
  1059. MODULE_AUTHOR("Craig Nadler");
  1060. MODULE_LICENSE("GPL");