Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
usblp.c
Go to the documentation of this file.
1 /*
2  * usblp.c
3  *
4  * Copyright (c) 1999 Michael Gee <[email protected]>
5  * Copyright (c) 1999 Pavel Machek <[email protected]>
6  * Copyright (c) 2000 Randy Dunlap <[email protected]>
7  * Copyright (c) 2000 Vojtech Pavlik <[email protected]>
8  # Copyright (c) 2001 Pete Zaitcev <[email protected]>
9  # Copyright (c) 2001 David Paschal <[email protected]>
10  * Copyright (c) 2006 Oliver Neukum <[email protected]>
11  *
12  * USB Printer Device Class driver for USB printers and printer cables
13  *
14  * Sponsored by SuSE
15  *
16  * ChangeLog:
17  * v0.1 - thorough cleaning, URBification, almost a rewrite
18  * v0.2 - some more cleanups
19  * v0.3 - cleaner again, waitqueue fixes
20  * v0.4 - fixes in unidirectional mode
21  * v0.5 - add DEVICE_ID string support
22  * v0.6 - never time out
23  * v0.7 - fixed bulk-IN read and poll (David Paschal)
24  * v0.8 - add devfs support
25  * v0.9 - fix unplug-while-open paths
26  * v0.10- remove sleep_on, fix error on oom ([email protected])
27  * v0.11 - add proto_bias option (Pete Zaitcev)
28  * v0.12 - add hpoj.sourceforge.net ioctls (David Paschal)
29  * v0.13 - alloc space for statusbuf (<status> not on stack);
30  * use usb_alloc_coherent() for read buf & write buf;
31  * none - Maintained in Linux kernel after v0.13
32  */
33 
34 /*
35  * This program is free software; you can redistribute it and/or modify
36  * it under the terms of the GNU General Public License as published by
37  * the Free Software Foundation; either version 2 of the License, or
38  * (at your option) any later version.
39  *
40  * This program is distributed in the hope that it will be useful,
41  * but WITHOUT ANY WARRANTY; without even the implied warranty of
42  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
43  * GNU General Public License for more details.
44  *
45  * You should have received a copy of the GNU General Public License
46  * along with this program; if not, write to the Free Software
47  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
48  */
49 
50 #include <linux/module.h>
51 #include <linux/kernel.h>
52 #include <linux/sched.h>
53 #include <linux/signal.h>
54 #include <linux/poll.h>
55 #include <linux/init.h>
56 #include <linux/slab.h>
57 #include <linux/lp.h>
58 #include <linux/mutex.h>
59 #undef DEBUG
60 #include <linux/usb.h>
61 #include <linux/ratelimit.h>
62 
63 /*
64  * Version Information
65  */
66 #define DRIVER_AUTHOR "Michael Gee, Pavel Machek, Vojtech Pavlik, Randy Dunlap, Pete Zaitcev, David Paschal"
67 #define DRIVER_DESC "USB Printer Device Class driver"
68 
69 #define USBLP_BUF_SIZE 8192
70 #define USBLP_BUF_SIZE_IN 1024
71 #define USBLP_DEVICE_ID_SIZE 1024
72 
73 /* ioctls: */
74 #define IOCNR_GET_DEVICE_ID 1
75 #define IOCNR_GET_PROTOCOLS 2
76 #define IOCNR_SET_PROTOCOL 3
77 #define IOCNR_HP_SET_CHANNEL 4
78 #define IOCNR_GET_BUS_ADDRESS 5
79 #define IOCNR_GET_VID_PID 6
80 #define IOCNR_SOFT_RESET 7
81 /* Get device_id string: */
82 #define LPIOC_GET_DEVICE_ID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
83 /* The following ioctls were added for http://hpoj.sourceforge.net: */
84 /* Get two-int array:
85  * [0]=current protocol (1=7/1/1, 2=7/1/2, 3=7/1/3),
86  * [1]=supported protocol mask (mask&(1<<n)!=0 means 7/1/n supported): */
87 #define LPIOC_GET_PROTOCOLS(len) _IOC(_IOC_READ, 'P', IOCNR_GET_PROTOCOLS, len)
88 /* Set protocol (arg: 1=7/1/1, 2=7/1/2, 3=7/1/3): */
89 #define LPIOC_SET_PROTOCOL _IOC(_IOC_WRITE, 'P', IOCNR_SET_PROTOCOL, 0)
90 /* Set channel number (HP Vendor-specific command): */
91 #define LPIOC_HP_SET_CHANNEL _IOC(_IOC_WRITE, 'P', IOCNR_HP_SET_CHANNEL, 0)
92 /* Get two-int array: [0]=bus number, [1]=device address: */
93 #define LPIOC_GET_BUS_ADDRESS(len) _IOC(_IOC_READ, 'P', IOCNR_GET_BUS_ADDRESS, len)
94 /* Get two-int array: [0]=vendor ID, [1]=product ID: */
95 #define LPIOC_GET_VID_PID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_VID_PID, len)
96 /* Perform class specific soft reset */
97 #define LPIOC_SOFT_RESET _IOC(_IOC_NONE, 'P', IOCNR_SOFT_RESET, 0);
98 
99 /*
100  * A DEVICE_ID string may include the printer's serial number.
101  * It should end with a semi-colon (';').
102  * An example from an HP 970C DeskJet printer is (this is one long string,
103  * with the serial number changed):
104 MFG:HEWLETT-PACKARD;MDL:DESKJET 970C;CMD:MLC,PCL,PML;CLASS:PRINTER;DESCRIPTION:Hewlett-Packard DeskJet 970C;SERN:US970CSEPROF;VSTATUS:$HB0$NC0,ff,DN,IDLE,CUT,K1,C0,DP,NR,KP000,CP027;VP:0800,FL,B0;VJ: ;
105  */
106 
107 /*
108  * USB Printer Requests
109  */
110 
111 #define USBLP_REQ_GET_ID 0x00
112 #define USBLP_REQ_GET_STATUS 0x01
113 #define USBLP_REQ_RESET 0x02
114 #define USBLP_REQ_HP_CHANNEL_CHANGE_REQUEST 0x00 /* HP Vendor-specific */
115 
116 #define USBLP_MINORS 16
117 #define USBLP_MINOR_BASE 0
118 
119 #define USBLP_CTL_TIMEOUT 5000 /* 5 seconds */
120 
121 #define USBLP_FIRST_PROTOCOL 1
122 #define USBLP_LAST_PROTOCOL 3
123 #define USBLP_MAX_PROTOCOLS (USBLP_LAST_PROTOCOL+1)
124 
125 /*
126  * some arbitrary status buffer size;
127  * need a status buffer that is allocated via kmalloc(), not on stack
128  */
129 #define STATUS_BUF_SIZE 8
130 
131 /*
132  * Locks down the locking order:
133  * ->wmut locks wstatus.
134  * ->mut locks the whole usblp, except [rw]complete, and thus, by indirection,
135  * [rw]status. We only touch status when we know the side idle.
136  * ->lock locks what interrupt accesses.
137  */
138 struct usblp {
139  struct usb_device *dev; /* USB device */
140  struct mutex wmut;
141  struct mutex mut;
142  spinlock_t lock; /* locks rcomplete, wcomplete */
143  char *readbuf; /* read transfer_buffer */
144  char *statusbuf; /* status transfer_buffer */
145  struct usb_anchor urbs;
147  int readcount; /* Counter for reads */
148  int ifnum; /* Interface number */
149  struct usb_interface *intf; /* The interface */
150  /* Alternate-setting numbers and endpoints for each protocol
151  * (7/1/{index=1,2,3}) that the device supports: */
152  struct {
158  int minor; /* minor number of device */
160  int wstatus; /* bytes written or error */
161  int rstatus; /* bytes ready or error */
162  unsigned int quirks; /* quirks flags */
163  unsigned int flags; /* mode flags */
164  unsigned char used; /* True if open */
165  unsigned char present; /* True if not disconnected */
166  unsigned char bidir; /* interface is bidirectional */
167  unsigned char no_paper; /* Paper Out happened */
168  unsigned char *device_id_string; /* IEEE 1284 DEVICE ID string (ptr) */
169  /* first 2 bytes are (big-endian) length */
170 };
171 
172 #ifdef DEBUG
173 static void usblp_dump(struct usblp *usblp)
174 {
175  struct device *dev = &usblp->intf->dev;
176  int p;
177 
178  dev_dbg(dev, "usblp=0x%p\n", usblp);
179  dev_dbg(dev, "dev=0x%p\n", usblp->dev);
180  dev_dbg(dev, "present=%d\n", usblp->present);
181  dev_dbg(dev, "readbuf=0x%p\n", usblp->readbuf);
182  dev_dbg(dev, "readcount=%d\n", usblp->readcount);
183  dev_dbg(dev, "ifnum=%d\n", usblp->ifnum);
184  for (p = USBLP_FIRST_PROTOCOL; p <= USBLP_LAST_PROTOCOL; p++) {
185  dev_dbg(dev, "protocol[%d].alt_setting=%d\n", p,
186  usblp->protocol[p].alt_setting);
187  dev_dbg(dev, "protocol[%d].epwrite=%p\n", p,
188  usblp->protocol[p].epwrite);
189  dev_dbg(dev, "protocol[%d].epread=%p\n", p,
190  usblp->protocol[p].epread);
191  }
192  dev_dbg(dev, "current_protocol=%d\n", usblp->current_protocol);
193  dev_dbg(dev, "minor=%d\n", usblp->minor);
194  dev_dbg(dev, "wstatus=%d\n", usblp->wstatus);
195  dev_dbg(dev, "rstatus=%d\n", usblp->rstatus);
196  dev_dbg(dev, "quirks=%d\n", usblp->quirks);
197  dev_dbg(dev, "used=%d\n", usblp->used);
198  dev_dbg(dev, "bidir=%d\n", usblp->bidir);
199  dev_dbg(dev, "device_id_string=\"%s\"\n",
200  usblp->device_id_string ?
201  usblp->device_id_string + 2 :
202  (unsigned char *)"(null)");
203 }
204 #endif
205 
206 /* Quirks: various printer quirks are handled by this table & its flags. */
207 
211  unsigned int quirks;
212 };
213 
214 #define USBLP_QUIRK_BIDIR 0x1 /* reports bidir but requires unidirectional mode (no INs/reads) */
215 #define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */
216 #define USBLP_QUIRK_BAD_CLASS 0x4 /* descriptor uses vendor-specific Class or SubClass */
217 
218 static const struct quirk_printer_struct quirk_printers[] = {
219  { 0x03f0, 0x0004, USBLP_QUIRK_BIDIR }, /* HP DeskJet 895C */
220  { 0x03f0, 0x0104, USBLP_QUIRK_BIDIR }, /* HP DeskJet 880C */
221  { 0x03f0, 0x0204, USBLP_QUIRK_BIDIR }, /* HP DeskJet 815C */
222  { 0x03f0, 0x0304, USBLP_QUIRK_BIDIR }, /* HP DeskJet 810C/812C */
223  { 0x03f0, 0x0404, USBLP_QUIRK_BIDIR }, /* HP DeskJet 830C */
224  { 0x03f0, 0x0504, USBLP_QUIRK_BIDIR }, /* HP DeskJet 885C */
225  { 0x03f0, 0x0604, USBLP_QUIRK_BIDIR }, /* HP DeskJet 840C */
226  { 0x03f0, 0x0804, USBLP_QUIRK_BIDIR }, /* HP DeskJet 816C */
227  { 0x03f0, 0x1104, USBLP_QUIRK_BIDIR }, /* HP Deskjet 959C */
228  { 0x0409, 0xefbe, USBLP_QUIRK_BIDIR }, /* NEC Picty900 (HP OEM) */
229  { 0x0409, 0xbef4, USBLP_QUIRK_BIDIR }, /* NEC Picty760 (HP OEM) */
230  { 0x0409, 0xf0be, USBLP_QUIRK_BIDIR }, /* NEC Picty920 (HP OEM) */
231  { 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */
232  { 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820, by zut <[email protected]> */
233  { 0x04f9, 0x000d, USBLP_QUIRK_BIDIR }, /* Brother Industries, Ltd HL-1440 Laser Printer */
234  { 0x04b8, 0x0202, USBLP_QUIRK_BAD_CLASS }, /* Seiko Epson Receipt Printer M129C */
235  { 0, 0 }
236 };
237 
238 static int usblp_wwait(struct usblp *usblp, int nonblock);
239 static int usblp_wtest(struct usblp *usblp, int nonblock);
240 static int usblp_rwait_and_lock(struct usblp *usblp, int nonblock);
241 static int usblp_rtest(struct usblp *usblp, int nonblock);
242 static int usblp_submit_read(struct usblp *usblp);
243 static int usblp_select_alts(struct usblp *usblp);
244 static int usblp_set_protocol(struct usblp *usblp, int protocol);
245 static int usblp_cache_device_id_string(struct usblp *usblp);
246 
247 /* forward reference to make our lives easier */
248 static struct usb_driver usblp_driver;
249 static DEFINE_MUTEX(usblp_mutex); /* locks the existence of usblp's */
250 
251 /*
252  * Functions for usblp control messages.
253  */
254 
255 static int usblp_ctrl_msg(struct usblp *usblp, int request, int type, int dir, int recip, int value, void *buf, int len)
256 {
257  int retval;
258  int index = usblp->ifnum;
259 
260  /* High byte has the interface index.
261  Low byte has the alternate setting.
262  */
263  if ((request == USBLP_REQ_GET_ID) && (type == USB_TYPE_CLASS))
264  index = (usblp->ifnum<<8)|usblp->protocol[usblp->current_protocol].alt_setting;
265 
266  retval = usb_control_msg(usblp->dev,
267  dir ? usb_rcvctrlpipe(usblp->dev, 0) : usb_sndctrlpipe(usblp->dev, 0),
268  request, type | dir | recip, value, index, buf, len, USBLP_CTL_TIMEOUT);
269  dev_dbg(&usblp->intf->dev,
270  "usblp_control_msg: rq: 0x%02x dir: %d recip: %d value: %d idx: %d len: %#x result: %d\n",
271  request, !!dir, recip, value, index, len, retval);
272  return retval < 0 ? retval : 0;
273 }
274 
275 #define usblp_read_status(usblp, status)\
276  usblp_ctrl_msg(usblp, USBLP_REQ_GET_STATUS, USB_TYPE_CLASS, USB_DIR_IN, USB_RECIP_INTERFACE, 0, status, 1)
277 #define usblp_get_id(usblp, config, id, maxlen)\
278  usblp_ctrl_msg(usblp, USBLP_REQ_GET_ID, USB_TYPE_CLASS, USB_DIR_IN, USB_RECIP_INTERFACE, config, id, maxlen)
279 #define usblp_reset(usblp)\
280  usblp_ctrl_msg(usblp, USBLP_REQ_RESET, USB_TYPE_CLASS, USB_DIR_OUT, USB_RECIP_OTHER, 0, NULL, 0)
281 
282 #define usblp_hp_channel_change_request(usblp, channel, buffer) \
283  usblp_ctrl_msg(usblp, USBLP_REQ_HP_CHANNEL_CHANGE_REQUEST, USB_TYPE_VENDOR, USB_DIR_IN, USB_RECIP_INTERFACE, channel, buffer, 1)
284 
285 /*
286  * See the description for usblp_select_alts() below for the usage
287  * explanation. Look into your /proc/bus/usb/devices and dmesg in
288  * case of any trouble.
289  */
290 static int proto_bias = -1;
291 
292 /*
293  * URB callback.
294  */
295 
296 static void usblp_bulk_read(struct urb *urb)
297 {
298  struct usblp *usblp = urb->context;
299  int status = urb->status;
300 
301  if (usblp->present && usblp->used) {
302  if (status)
303  printk(KERN_WARNING "usblp%d: "
304  "nonzero read bulk status received: %d\n",
305  usblp->minor, status);
306  }
307  spin_lock(&usblp->lock);
308  if (status < 0)
309  usblp->rstatus = status;
310  else
311  usblp->rstatus = urb->actual_length;
312  usblp->rcomplete = 1;
313  wake_up(&usblp->rwait);
314  spin_unlock(&usblp->lock);
315 
316  usb_free_urb(urb);
317 }
318 
319 static void usblp_bulk_write(struct urb *urb)
320 {
321  struct usblp *usblp = urb->context;
322  int status = urb->status;
323 
324  if (usblp->present && usblp->used) {
325  if (status)
326  printk(KERN_WARNING "usblp%d: "
327  "nonzero write bulk status received: %d\n",
328  usblp->minor, status);
329  }
330  spin_lock(&usblp->lock);
331  if (status < 0)
332  usblp->wstatus = status;
333  else
334  usblp->wstatus = urb->actual_length;
335  usblp->no_paper = 0;
336  usblp->wcomplete = 1;
337  wake_up(&usblp->wwait);
338  spin_unlock(&usblp->lock);
339 
340  usb_free_urb(urb);
341 }
342 
343 /*
344  * Get and print printer errors.
345  */
346 
347 static const char *usblp_messages[] = { "ok", "out of paper", "off-line", "on fire" };
348 
349 static int usblp_check_status(struct usblp *usblp, int err)
350 {
351  unsigned char status, newerr = 0;
352  int error;
353 
354  mutex_lock(&usblp->mut);
355  if ((error = usblp_read_status(usblp, usblp->statusbuf)) < 0) {
356  mutex_unlock(&usblp->mut);
358  "usblp%d: error %d reading printer status\n",
359  usblp->minor, error);
360  return 0;
361  }
362  status = *usblp->statusbuf;
363  mutex_unlock(&usblp->mut);
364 
365  if (~status & LP_PERRORP)
366  newerr = 3;
367  if (status & LP_POUTPA)
368  newerr = 1;
369  if (~status & LP_PSELECD)
370  newerr = 2;
371 
372  if (newerr != err) {
373  printk(KERN_INFO "usblp%d: %s\n",
374  usblp->minor, usblp_messages[newerr]);
375  }
376 
377  return newerr;
378 }
379 
380 static int handle_bidir(struct usblp *usblp)
381 {
382  if (usblp->bidir && usblp->used) {
383  if (usblp_submit_read(usblp) < 0)
384  return -EIO;
385  }
386  return 0;
387 }
388 
389 /*
390  * File op functions.
391  */
392 
393 static int usblp_open(struct inode *inode, struct file *file)
394 {
395  int minor = iminor(inode);
396  struct usblp *usblp;
397  struct usb_interface *intf;
398  int retval;
399 
400  if (minor < 0)
401  return -ENODEV;
402 
403  mutex_lock(&usblp_mutex);
404 
405  retval = -ENODEV;
406  intf = usb_find_interface(&usblp_driver, minor);
407  if (!intf)
408  goto out;
409  usblp = usb_get_intfdata(intf);
410  if (!usblp || !usblp->dev || !usblp->present)
411  goto out;
412 
413  retval = -EBUSY;
414  if (usblp->used)
415  goto out;
416 
417  /*
418  * We do not implement LP_ABORTOPEN/LPABORTOPEN for two reasons:
419  * - We do not want persistent state which close(2) does not clear
420  * - It is not used anyway, according to CUPS people
421  */
422 
423  retval = usb_autopm_get_interface(intf);
424  if (retval < 0)
425  goto out;
426  usblp->used = 1;
427  file->private_data = usblp;
428 
429  usblp->wcomplete = 1; /* we begin writeable */
430  usblp->wstatus = 0;
431  usblp->rcomplete = 0;
432 
433  if (handle_bidir(usblp) < 0) {
434  usb_autopm_put_interface(intf);
435  usblp->used = 0;
436  file->private_data = NULL;
437  retval = -EIO;
438  }
439 out:
440  mutex_unlock(&usblp_mutex);
441  return retval;
442 }
443 
444 static void usblp_cleanup(struct usblp *usblp)
445 {
446  printk(KERN_INFO "usblp%d: removed\n", usblp->minor);
447 
448  kfree(usblp->readbuf);
449  kfree(usblp->device_id_string);
450  kfree(usblp->statusbuf);
451  kfree(usblp);
452 }
453 
454 static void usblp_unlink_urbs(struct usblp *usblp)
455 {
456  usb_kill_anchored_urbs(&usblp->urbs);
457 }
458 
459 static int usblp_release(struct inode *inode, struct file *file)
460 {
461  struct usblp *usblp = file->private_data;
462 
463  usblp->flags &= ~LP_ABORT;
464 
465  mutex_lock(&usblp_mutex);
466  usblp->used = 0;
467  if (usblp->present) {
468  usblp_unlink_urbs(usblp);
469  usb_autopm_put_interface(usblp->intf);
470  } else /* finish cleanup from disconnect */
471  usblp_cleanup(usblp);
472  mutex_unlock(&usblp_mutex);
473  return 0;
474 }
475 
476 /* No kernel lock - fine */
477 static unsigned int usblp_poll(struct file *file, struct poll_table_struct *wait)
478 {
479  int ret;
480  unsigned long flags;
481 
482  struct usblp *usblp = file->private_data;
483  /* Should we check file->f_mode & FMODE_WRITE before poll_wait()? */
484  poll_wait(file, &usblp->rwait, wait);
485  poll_wait(file, &usblp->wwait, wait);
486  spin_lock_irqsave(&usblp->lock, flags);
487  ret = ((usblp->bidir && usblp->rcomplete) ? POLLIN | POLLRDNORM : 0) |
488  ((usblp->no_paper || usblp->wcomplete) ? POLLOUT | POLLWRNORM : 0);
489  spin_unlock_irqrestore(&usblp->lock, flags);
490  return ret;
491 }
492 
493 static long usblp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
494 {
495  struct usblp *usblp = file->private_data;
496  int length, err, i;
497  unsigned char newChannel;
498  int status;
499  int twoints[2];
500  int retval = 0;
501 
502  mutex_lock(&usblp->mut);
503  if (!usblp->present) {
504  retval = -ENODEV;
505  goto done;
506  }
507 
508  dev_dbg(&usblp->intf->dev,
509  "usblp_ioctl: cmd=0x%x (%c nr=%d len=%d dir=%d)\n", cmd,
510  _IOC_TYPE(cmd), _IOC_NR(cmd), _IOC_SIZE(cmd), _IOC_DIR(cmd));
511 
512  if (_IOC_TYPE(cmd) == 'P') /* new-style ioctl number */
513 
514  switch (_IOC_NR(cmd)) {
515 
516  case IOCNR_GET_DEVICE_ID: /* get the DEVICE_ID string */
517  if (_IOC_DIR(cmd) != _IOC_READ) {
518  retval = -EINVAL;
519  goto done;
520  }
521 
522  length = usblp_cache_device_id_string(usblp);
523  if (length < 0) {
524  retval = length;
525  goto done;
526  }
527  if (length > _IOC_SIZE(cmd))
528  length = _IOC_SIZE(cmd); /* truncate */
529 
530  if (copy_to_user((void __user *) arg,
531  usblp->device_id_string,
532  (unsigned long) length)) {
533  retval = -EFAULT;
534  goto done;
535  }
536 
537  break;
538 
539  case IOCNR_GET_PROTOCOLS:
540  if (_IOC_DIR(cmd) != _IOC_READ ||
541  _IOC_SIZE(cmd) < sizeof(twoints)) {
542  retval = -EINVAL;
543  goto done;
544  }
545 
546  twoints[0] = usblp->current_protocol;
547  twoints[1] = 0;
548  for (i = USBLP_FIRST_PROTOCOL;
549  i <= USBLP_LAST_PROTOCOL; i++) {
550  if (usblp->protocol[i].alt_setting >= 0)
551  twoints[1] |= (1<<i);
552  }
553 
554  if (copy_to_user((void __user *)arg,
555  (unsigned char *)twoints,
556  sizeof(twoints))) {
557  retval = -EFAULT;
558  goto done;
559  }
560 
561  break;
562 
563  case IOCNR_SET_PROTOCOL:
564  if (_IOC_DIR(cmd) != _IOC_WRITE) {
565  retval = -EINVAL;
566  goto done;
567  }
568 
569 #ifdef DEBUG
570  if (arg == -10) {
571  usblp_dump(usblp);
572  break;
573  }
574 #endif
575 
576  usblp_unlink_urbs(usblp);
577  retval = usblp_set_protocol(usblp, arg);
578  if (retval < 0) {
579  usblp_set_protocol(usblp,
580  usblp->current_protocol);
581  }
582  break;
583 
585  if (_IOC_DIR(cmd) != _IOC_WRITE ||
586  le16_to_cpu(usblp->dev->descriptor.idVendor) != 0x03F0 ||
587  usblp->quirks & USBLP_QUIRK_BIDIR) {
588  retval = -EINVAL;
589  goto done;
590  }
591 
593  arg, &newChannel);
594  if (err < 0) {
595  dev_err(&usblp->dev->dev,
596  "usblp%d: error = %d setting "
597  "HP channel\n",
598  usblp->minor, err);
599  retval = -EIO;
600  goto done;
601  }
602 
603  dev_dbg(&usblp->intf->dev,
604  "usblp%d requested/got HP channel %ld/%d\n",
605  usblp->minor, arg, newChannel);
606  break;
607 
609  if (_IOC_DIR(cmd) != _IOC_READ ||
610  _IOC_SIZE(cmd) < sizeof(twoints)) {
611  retval = -EINVAL;
612  goto done;
613  }
614 
615  twoints[0] = usblp->dev->bus->busnum;
616  twoints[1] = usblp->dev->devnum;
617  if (copy_to_user((void __user *)arg,
618  (unsigned char *)twoints,
619  sizeof(twoints))) {
620  retval = -EFAULT;
621  goto done;
622  }
623 
624  dev_dbg(&usblp->intf->dev,
625  "usblp%d is bus=%d, device=%d\n",
626  usblp->minor, twoints[0], twoints[1]);
627  break;
628 
629  case IOCNR_GET_VID_PID:
630  if (_IOC_DIR(cmd) != _IOC_READ ||
631  _IOC_SIZE(cmd) < sizeof(twoints)) {
632  retval = -EINVAL;
633  goto done;
634  }
635 
636  twoints[0] = le16_to_cpu(usblp->dev->descriptor.idVendor);
637  twoints[1] = le16_to_cpu(usblp->dev->descriptor.idProduct);
638  if (copy_to_user((void __user *)arg,
639  (unsigned char *)twoints,
640  sizeof(twoints))) {
641  retval = -EFAULT;
642  goto done;
643  }
644 
645  dev_dbg(&usblp->intf->dev,
646  "usblp%d is VID=0x%4.4X, PID=0x%4.4X\n",
647  usblp->minor, twoints[0], twoints[1]);
648  break;
649 
650  case IOCNR_SOFT_RESET:
651  if (_IOC_DIR(cmd) != _IOC_NONE) {
652  retval = -EINVAL;
653  goto done;
654  }
655  retval = usblp_reset(usblp);
656  break;
657  default:
658  retval = -ENOTTY;
659  }
660  else /* old-style ioctl value */
661  switch (cmd) {
662 
663  case LPGETSTATUS:
664  if ((retval = usblp_read_status(usblp, usblp->statusbuf))) {
665  printk_ratelimited(KERN_ERR "usblp%d:"
666  "failed reading printer status (%d)\n",
667  usblp->minor, retval);
668  retval = -EIO;
669  goto done;
670  }
671  status = *usblp->statusbuf;
672  if (copy_to_user((void __user *)arg, &status, sizeof(int)))
673  retval = -EFAULT;
674  break;
675 
676  case LPABORT:
677  if (arg)
678  usblp->flags |= LP_ABORT;
679  else
680  usblp->flags &= ~LP_ABORT;
681  break;
682 
683  default:
684  retval = -ENOTTY;
685  }
686 
687 done:
688  mutex_unlock(&usblp->mut);
689  return retval;
690 }
691 
692 static struct urb *usblp_new_writeurb(struct usblp *usblp, int transfer_length)
693 {
694  struct urb *urb;
695  char *writebuf;
696 
697  if ((writebuf = kmalloc(transfer_length, GFP_KERNEL)) == NULL)
698  return NULL;
699  if ((urb = usb_alloc_urb(0, GFP_KERNEL)) == NULL) {
700  kfree(writebuf);
701  return NULL;
702  }
703 
704  usb_fill_bulk_urb(urb, usblp->dev,
705  usb_sndbulkpipe(usblp->dev,
706  usblp->protocol[usblp->current_protocol].epwrite->bEndpointAddress),
707  writebuf, transfer_length, usblp_bulk_write, usblp);
708  urb->transfer_flags |= URB_FREE_BUFFER;
709 
710  return urb;
711 }
712 
713 static ssize_t usblp_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
714 {
715  struct usblp *usblp = file->private_data;
716  struct urb *writeurb;
717  int rv;
718  int transfer_length;
719  ssize_t writecount = 0;
720 
721  if (mutex_lock_interruptible(&usblp->wmut)) {
722  rv = -EINTR;
723  goto raise_biglock;
724  }
725  if ((rv = usblp_wwait(usblp, !!(file->f_flags & O_NONBLOCK))) < 0)
726  goto raise_wait;
727 
728  while (writecount < count) {
729  /*
730  * Step 1: Submit next block.
731  */
732  if ((transfer_length = count - writecount) > USBLP_BUF_SIZE)
733  transfer_length = USBLP_BUF_SIZE;
734 
735  rv = -ENOMEM;
736  if ((writeurb = usblp_new_writeurb(usblp, transfer_length)) == NULL)
737  goto raise_urb;
738  usb_anchor_urb(writeurb, &usblp->urbs);
739 
740  if (copy_from_user(writeurb->transfer_buffer,
741  buffer + writecount, transfer_length)) {
742  rv = -EFAULT;
743  goto raise_badaddr;
744  }
745 
746  spin_lock_irq(&usblp->lock);
747  usblp->wcomplete = 0;
748  spin_unlock_irq(&usblp->lock);
749  if ((rv = usb_submit_urb(writeurb, GFP_KERNEL)) < 0) {
750  usblp->wstatus = 0;
751  spin_lock_irq(&usblp->lock);
752  usblp->no_paper = 0;
753  usblp->wcomplete = 1;
754  wake_up(&usblp->wwait);
755  spin_unlock_irq(&usblp->lock);
756  if (rv != -ENOMEM)
757  rv = -EIO;
758  goto raise_submit;
759  }
760 
761  /*
762  * Step 2: Wait for transfer to end, collect results.
763  */
764  rv = usblp_wwait(usblp, !!(file->f_flags&O_NONBLOCK));
765  if (rv < 0) {
766  if (rv == -EAGAIN) {
767  /* Presume that it's going to complete well. */
768  writecount += transfer_length;
769  }
770  if (rv == -ENOSPC) {
771  spin_lock_irq(&usblp->lock);
772  usblp->no_paper = 1; /* Mark for poll(2) */
773  spin_unlock_irq(&usblp->lock);
774  writecount += transfer_length;
775  }
776  /* Leave URB dangling, to be cleaned on close. */
777  goto collect_error;
778  }
779 
780  if (usblp->wstatus < 0) {
781  rv = -EIO;
782  goto collect_error;
783  }
784  /*
785  * This is critical: it must be our URB, not other writer's.
786  * The wmut exists mainly to cover us here.
787  */
788  writecount += usblp->wstatus;
789  }
790 
791  mutex_unlock(&usblp->wmut);
792  return writecount;
793 
794 raise_submit:
795 raise_badaddr:
796  usb_unanchor_urb(writeurb);
797  usb_free_urb(writeurb);
798 raise_urb:
799 raise_wait:
800 collect_error: /* Out of raise sequence */
801  mutex_unlock(&usblp->wmut);
802 raise_biglock:
803  return writecount ? writecount : rv;
804 }
805 
806 /*
807  * Notice that we fail to restart in a few cases: on EFAULT, on restart
808  * error, etc. This is the historical behaviour. In all such cases we return
809  * EIO, and applications loop in order to get the new read going.
810  */
811 static ssize_t usblp_read(struct file *file, char __user *buffer, size_t len, loff_t *ppos)
812 {
813  struct usblp *usblp = file->private_data;
814  ssize_t count;
815  ssize_t avail;
816  int rv;
817 
818  if (!usblp->bidir)
819  return -EINVAL;
820 
821  rv = usblp_rwait_and_lock(usblp, !!(file->f_flags & O_NONBLOCK));
822  if (rv < 0)
823  return rv;
824 
825  if ((avail = usblp->rstatus) < 0) {
826  printk(KERN_ERR "usblp%d: error %d reading from printer\n",
827  usblp->minor, (int)avail);
828  usblp_submit_read(usblp);
829  count = -EIO;
830  goto done;
831  }
832 
833  count = len < avail - usblp->readcount ? len : avail - usblp->readcount;
834  if (count != 0 &&
835  copy_to_user(buffer, usblp->readbuf + usblp->readcount, count)) {
836  count = -EFAULT;
837  goto done;
838  }
839 
840  if ((usblp->readcount += count) == avail) {
841  if (usblp_submit_read(usblp) < 0) {
842  /* We don't want to leak USB return codes into errno. */
843  if (count == 0)
844  count = -EIO;
845  goto done;
846  }
847  }
848 
849 done:
850  mutex_unlock(&usblp->mut);
851  return count;
852 }
853 
854 /*
855  * Wait for the write path to come idle.
856  * This is called under the ->wmut, so the idle path stays idle.
857  *
858  * Our write path has a peculiar property: it does not buffer like a tty,
859  * but waits for the write to succeed. This allows our ->release to bug out
860  * without waiting for writes to drain. But it obviously does not work
861  * when O_NONBLOCK is set. So, applications setting O_NONBLOCK must use
862  * select(2) or poll(2) to wait for the buffer to drain before closing.
863  * Alternatively, set blocking mode with fcntl and issue a zero-size write.
864  */
865 static int usblp_wwait(struct usblp *usblp, int nonblock)
866 {
867  DECLARE_WAITQUEUE(waita, current);
868  int rc;
869  int err = 0;
870 
871  add_wait_queue(&usblp->wwait, &waita);
872  for (;;) {
874  if (mutex_lock_interruptible(&usblp->mut)) {
875  rc = -EINTR;
876  break;
877  }
878  rc = usblp_wtest(usblp, nonblock);
879  mutex_unlock(&usblp->mut);
880  if (rc <= 0)
881  break;
882 
883  if (schedule_timeout(msecs_to_jiffies(1500)) == 0) {
884  if (usblp->flags & LP_ABORT) {
885  err = usblp_check_status(usblp, err);
886  if (err == 1) { /* Paper out */
887  rc = -ENOSPC;
888  break;
889  }
890  } else {
891  /* Prod the printer, Gentoo#251237. */
892  mutex_lock(&usblp->mut);
893  usblp_read_status(usblp, usblp->statusbuf);
894  mutex_unlock(&usblp->mut);
895  }
896  }
897  }
899  remove_wait_queue(&usblp->wwait, &waita);
900  return rc;
901 }
902 
903 static int usblp_wtest(struct usblp *usblp, int nonblock)
904 {
905  unsigned long flags;
906 
907  if (!usblp->present)
908  return -ENODEV;
909  if (signal_pending(current))
910  return -EINTR;
911  spin_lock_irqsave(&usblp->lock, flags);
912  if (usblp->wcomplete) {
913  spin_unlock_irqrestore(&usblp->lock, flags);
914  return 0;
915  }
916  spin_unlock_irqrestore(&usblp->lock, flags);
917  if (nonblock)
918  return -EAGAIN;
919  return 1;
920 }
921 
922 /*
923  * Wait for read bytes to become available. This probably should have been
924  * called usblp_r_lock_and_wait(), because we lock first. But it's a traditional
925  * name for functions which lock and return.
926  *
927  * We do not use wait_event_interruptible because it makes locking iffy.
928  */
929 static int usblp_rwait_and_lock(struct usblp *usblp, int nonblock)
930 {
931  DECLARE_WAITQUEUE(waita, current);
932  int rc;
933 
934  add_wait_queue(&usblp->rwait, &waita);
935  for (;;) {
936  if (mutex_lock_interruptible(&usblp->mut)) {
937  rc = -EINTR;
938  break;
939  }
941  if ((rc = usblp_rtest(usblp, nonblock)) < 0) {
942  mutex_unlock(&usblp->mut);
943  break;
944  }
945  if (rc == 0) /* Keep it locked */
946  break;
947  mutex_unlock(&usblp->mut);
948  schedule();
949  }
951  remove_wait_queue(&usblp->rwait, &waita);
952  return rc;
953 }
954 
955 static int usblp_rtest(struct usblp *usblp, int nonblock)
956 {
957  unsigned long flags;
958 
959  if (!usblp->present)
960  return -ENODEV;
961  if (signal_pending(current))
962  return -EINTR;
963  spin_lock_irqsave(&usblp->lock, flags);
964  if (usblp->rcomplete) {
965  spin_unlock_irqrestore(&usblp->lock, flags);
966  return 0;
967  }
968  spin_unlock_irqrestore(&usblp->lock, flags);
969  if (nonblock)
970  return -EAGAIN;
971  return 1;
972 }
973 
974 /*
975  * Please check ->bidir and other such things outside for now.
976  */
977 static int usblp_submit_read(struct usblp *usblp)
978 {
979  struct urb *urb;
980  unsigned long flags;
981  int rc;
982 
983  rc = -ENOMEM;
984  if ((urb = usb_alloc_urb(0, GFP_KERNEL)) == NULL)
985  goto raise_urb;
986 
987  usb_fill_bulk_urb(urb, usblp->dev,
988  usb_rcvbulkpipe(usblp->dev,
989  usblp->protocol[usblp->current_protocol].epread->bEndpointAddress),
990  usblp->readbuf, USBLP_BUF_SIZE_IN,
991  usblp_bulk_read, usblp);
992  usb_anchor_urb(urb, &usblp->urbs);
993 
994  spin_lock_irqsave(&usblp->lock, flags);
995  usblp->readcount = 0; /* XXX Why here? */
996  usblp->rcomplete = 0;
997  spin_unlock_irqrestore(&usblp->lock, flags);
998  if ((rc = usb_submit_urb(urb, GFP_KERNEL)) < 0) {
999  dev_dbg(&usblp->intf->dev, "error submitting urb (%d)\n", rc);
1000  spin_lock_irqsave(&usblp->lock, flags);
1001  usblp->rstatus = rc;
1002  usblp->rcomplete = 1;
1003  spin_unlock_irqrestore(&usblp->lock, flags);
1004  goto raise_submit;
1005  }
1006 
1007  return 0;
1008 
1009 raise_submit:
1010  usb_unanchor_urb(urb);
1011  usb_free_urb(urb);
1012 raise_urb:
1013  return rc;
1014 }
1015 
1016 /*
1017  * Checks for printers that have quirks, such as requiring unidirectional
1018  * communication but reporting bidirectional; currently some HP printers
1019  * have this flaw (HP 810, 880, 895, etc.), or needing an init string
1020  * sent at each open (like some Epsons).
1021  * Returns 1 if found, 0 if not found.
1022  *
1023  * HP recommended that we use the bidirectional interface but
1024  * don't attempt any bulk IN transfers from the IN endpoint.
1025  * Here's some more detail on the problem:
1026  * The problem is not that it isn't bidirectional though. The problem
1027  * is that if you request a device ID, or status information, while
1028  * the buffers are full, the return data will end up in the print data
1029  * buffer. For example if you make sure you never request the device ID
1030  * while you are sending print data, and you don't try to query the
1031  * printer status every couple of milliseconds, you will probably be OK.
1032  */
1033 static unsigned int usblp_quirks(__u16 vendor, __u16 product)
1034 {
1035  int i;
1036 
1037  for (i = 0; quirk_printers[i].vendorId; i++) {
1038  if (vendor == quirk_printers[i].vendorId &&
1039  product == quirk_printers[i].productId)
1040  return quirk_printers[i].quirks;
1041  }
1042  return 0;
1043 }
1044 
1045 static const struct file_operations usblp_fops = {
1046  .owner = THIS_MODULE,
1047  .read = usblp_read,
1048  .write = usblp_write,
1049  .poll = usblp_poll,
1050  .unlocked_ioctl = usblp_ioctl,
1051  .compat_ioctl = usblp_ioctl,
1052  .open = usblp_open,
1053  .release = usblp_release,
1054  .llseek = noop_llseek,
1055 };
1056 
1057 static char *usblp_devnode(struct device *dev, umode_t *mode)
1058 {
1059  return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev));
1060 }
1061 
1062 static struct usb_class_driver usblp_class = {
1063  .name = "lp%d",
1064  .devnode = usblp_devnode,
1065  .fops = &usblp_fops,
1066  .minor_base = USBLP_MINOR_BASE,
1067 };
1068 
1069 static ssize_t usblp_show_ieee1284_id(struct device *dev, struct device_attribute *attr, char *buf)
1070 {
1071  struct usb_interface *intf = to_usb_interface(dev);
1072  struct usblp *usblp = usb_get_intfdata(intf);
1073 
1074  if (usblp->device_id_string[0] == 0 &&
1075  usblp->device_id_string[1] == 0)
1076  return 0;
1077 
1078  return sprintf(buf, "%s", usblp->device_id_string+2);
1079 }
1080 
1081 static DEVICE_ATTR(ieee1284_id, S_IRUGO, usblp_show_ieee1284_id, NULL);
1082 
1083 static int usblp_probe(struct usb_interface *intf,
1084  const struct usb_device_id *id)
1085 {
1086  struct usb_device *dev = interface_to_usbdev(intf);
1087  struct usblp *usblp;
1088  int protocol;
1089  int retval;
1090 
1091  /* Malloc and start initializing usblp structure so we can use it
1092  * directly. */
1093  usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL);
1094  if (!usblp) {
1095  retval = -ENOMEM;
1096  goto abort_ret;
1097  }
1098  usblp->dev = dev;
1099  mutex_init(&usblp->wmut);
1100  mutex_init(&usblp->mut);
1101  spin_lock_init(&usblp->lock);
1102  init_waitqueue_head(&usblp->rwait);
1103  init_waitqueue_head(&usblp->wwait);
1104  init_usb_anchor(&usblp->urbs);
1105  usblp->ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
1106  usblp->intf = intf;
1107 
1108  /* Malloc device ID string buffer to the largest expected length,
1109  * since we can re-query it on an ioctl and a dynamic string
1110  * could change in length. */
1112  retval = -ENOMEM;
1113  goto abort;
1114  }
1115 
1116  /*
1117  * Allocate read buffer. We somewhat wastefully
1118  * malloc both regardless of bidirectionality, because the
1119  * alternate setting can be changed later via an ioctl.
1120  */
1121  if (!(usblp->readbuf = kmalloc(USBLP_BUF_SIZE_IN, GFP_KERNEL))) {
1122  retval = -ENOMEM;
1123  goto abort;
1124  }
1125 
1126  /* Allocate buffer for printer status */
1128  if (!usblp->statusbuf) {
1129  retval = -ENOMEM;
1130  goto abort;
1131  }
1132 
1133  /* Lookup quirks for this printer. */
1134  usblp->quirks = usblp_quirks(
1135  le16_to_cpu(dev->descriptor.idVendor),
1136  le16_to_cpu(dev->descriptor.idProduct));
1137 
1138  /* Analyze and pick initial alternate settings and endpoints. */
1139  protocol = usblp_select_alts(usblp);
1140  if (protocol < 0) {
1141  dev_dbg(&intf->dev,
1142  "incompatible printer-class device 0x%4.4X/0x%4.4X\n",
1143  le16_to_cpu(dev->descriptor.idVendor),
1144  le16_to_cpu(dev->descriptor.idProduct));
1145  retval = -ENODEV;
1146  goto abort;
1147  }
1148 
1149  /* Setup the selected alternate setting and endpoints. */
1150  if (usblp_set_protocol(usblp, protocol) < 0) {
1151  retval = -ENODEV; /* ->probe isn't ->ioctl */
1152  goto abort;
1153  }
1154 
1155  /* Retrieve and store the device ID string. */
1156  usblp_cache_device_id_string(usblp);
1157  retval = device_create_file(&intf->dev, &dev_attr_ieee1284_id);
1158  if (retval)
1159  goto abort_intfdata;
1160 
1161 #ifdef DEBUG
1162  usblp_check_status(usblp, 0);
1163 #endif
1164 
1165  usb_set_intfdata(intf, usblp);
1166 
1167  usblp->present = 1;
1168 
1169  retval = usb_register_dev(intf, &usblp_class);
1170  if (retval) {
1171  dev_err(&intf->dev,
1172  "usblp: Not able to get a minor (base %u, slice default): %d\n",
1173  USBLP_MINOR_BASE, retval);
1174  goto abort_intfdata;
1175  }
1176  usblp->minor = intf->minor;
1177  dev_info(&intf->dev,
1178  "usblp%d: USB %sdirectional printer dev %d if %d alt %d proto %d vid 0x%4.4X pid 0x%4.4X\n",
1179  usblp->minor, usblp->bidir ? "Bi" : "Uni", dev->devnum,
1180  usblp->ifnum,
1181  usblp->protocol[usblp->current_protocol].alt_setting,
1182  usblp->current_protocol,
1183  le16_to_cpu(usblp->dev->descriptor.idVendor),
1184  le16_to_cpu(usblp->dev->descriptor.idProduct));
1185 
1186  return 0;
1187 
1188 abort_intfdata:
1189  usb_set_intfdata(intf, NULL);
1190  device_remove_file(&intf->dev, &dev_attr_ieee1284_id);
1191 abort:
1192  kfree(usblp->readbuf);
1193  kfree(usblp->statusbuf);
1194  kfree(usblp->device_id_string);
1195  kfree(usblp);
1196 abort_ret:
1197  return retval;
1198 }
1199 
1200 /*
1201  * We are a "new" style driver with usb_device_id table,
1202  * but our requirements are too intricate for simple match to handle.
1203  *
1204  * The "proto_bias" option may be used to specify the preferred protocol
1205  * for all USB printers (1=7/1/1, 2=7/1/2, 3=7/1/3). If the device
1206  * supports the preferred protocol, then we bind to it.
1207  *
1208  * The best interface for us is 7/1/2, because it is compatible
1209  * with a stream of characters. If we find it, we bind to it.
1210  *
1211  * Note that the people from hpoj.sourceforge.net need to be able to
1212  * bind to 7/1/3 (MLC/1284.4), so we provide them ioctls for this purpose.
1213  *
1214  * Failing 7/1/2, we look for 7/1/3, even though it's probably not
1215  * stream-compatible, because this matches the behaviour of the old code.
1216  *
1217  * If nothing else, we bind to 7/1/1 - the unidirectional interface.
1218  */
1219 static int usblp_select_alts(struct usblp *usblp)
1220 {
1221  struct usb_interface *if_alt;
1222  struct usb_host_interface *ifd;
1223  struct usb_endpoint_descriptor *epd, *epwrite, *epread;
1224  int p, i, e;
1225 
1226  if_alt = usblp->intf;
1227 
1228  for (p = 0; p < USBLP_MAX_PROTOCOLS; p++)
1229  usblp->protocol[p].alt_setting = -1;
1230 
1231  /* Find out what we have. */
1232  for (i = 0; i < if_alt->num_altsetting; i++) {
1233  ifd = &if_alt->altsetting[i];
1234 
1235  if (ifd->desc.bInterfaceClass != 7 || ifd->desc.bInterfaceSubClass != 1)
1236  if (!(usblp->quirks & USBLP_QUIRK_BAD_CLASS))
1237  continue;
1238 
1239  if (ifd->desc.bInterfaceProtocol < USBLP_FIRST_PROTOCOL ||
1240  ifd->desc.bInterfaceProtocol > USBLP_LAST_PROTOCOL)
1241  continue;
1242 
1243  /* Look for bulk OUT and IN endpoints. */
1244  epwrite = epread = NULL;
1245  for (e = 0; e < ifd->desc.bNumEndpoints; e++) {
1246  epd = &ifd->endpoint[e].desc;
1247 
1248  if (usb_endpoint_is_bulk_out(epd))
1249  if (!epwrite)
1250  epwrite = epd;
1251 
1252  if (usb_endpoint_is_bulk_in(epd))
1253  if (!epread)
1254  epread = epd;
1255  }
1256 
1257  /* Ignore buggy hardware without the right endpoints. */
1258  if (!epwrite || (ifd->desc.bInterfaceProtocol > 1 && !epread))
1259  continue;
1260 
1261  /* Turn off reads for 7/1/1 (unidirectional) interfaces
1262  * and buggy bidirectional printers. */
1263  if (ifd->desc.bInterfaceProtocol == 1) {
1264  epread = NULL;
1265  } else if (usblp->quirks & USBLP_QUIRK_BIDIR) {
1266  printk(KERN_INFO "usblp%d: Disabling reads from "
1267  "problematic bidirectional printer\n",
1268  usblp->minor);
1269  epread = NULL;
1270  }
1271 
1272  usblp->protocol[ifd->desc.bInterfaceProtocol].alt_setting =
1273  ifd->desc.bAlternateSetting;
1274  usblp->protocol[ifd->desc.bInterfaceProtocol].epwrite = epwrite;
1275  usblp->protocol[ifd->desc.bInterfaceProtocol].epread = epread;
1276  }
1277 
1278  /* If our requested protocol is supported, then use it. */
1279  if (proto_bias >= USBLP_FIRST_PROTOCOL &&
1280  proto_bias <= USBLP_LAST_PROTOCOL &&
1281  usblp->protocol[proto_bias].alt_setting != -1)
1282  return proto_bias;
1283 
1284  /* Ordering is important here. */
1285  if (usblp->protocol[2].alt_setting != -1)
1286  return 2;
1287  if (usblp->protocol[1].alt_setting != -1)
1288  return 1;
1289  if (usblp->protocol[3].alt_setting != -1)
1290  return 3;
1291 
1292  /* If nothing is available, then don't bind to this device. */
1293  return -1;
1294 }
1295 
1296 static int usblp_set_protocol(struct usblp *usblp, int protocol)
1297 {
1298  int r, alts;
1299 
1301  return -EINVAL;
1302 
1303  alts = usblp->protocol[protocol].alt_setting;
1304  if (alts < 0)
1305  return -EINVAL;
1306  r = usb_set_interface(usblp->dev, usblp->ifnum, alts);
1307  if (r < 0) {
1308  printk(KERN_ERR "usblp: can't set desired altsetting %d on interface %d\n",
1309  alts, usblp->ifnum);
1310  return r;
1311  }
1312 
1313  usblp->bidir = (usblp->protocol[protocol].epread != NULL);
1314  usblp->current_protocol = protocol;
1315  dev_dbg(&usblp->intf->dev, "usblp%d set protocol %d\n",
1316  usblp->minor, protocol);
1317  return 0;
1318 }
1319 
1320 /* Retrieves and caches device ID string.
1321  * Returns length, including length bytes but not null terminator.
1322  * On error, returns a negative errno value. */
1323 static int usblp_cache_device_id_string(struct usblp *usblp)
1324 {
1325  int err, length;
1326 
1327  err = usblp_get_id(usblp, 0, usblp->device_id_string, USBLP_DEVICE_ID_SIZE - 1);
1328  if (err < 0) {
1329  dev_dbg(&usblp->intf->dev,
1330  "usblp%d: error = %d reading IEEE-1284 Device ID string\n",
1331  usblp->minor, err);
1332  usblp->device_id_string[0] = usblp->device_id_string[1] = '\0';
1333  return -EIO;
1334  }
1335 
1336  /* First two bytes are length in big-endian.
1337  * They count themselves, and we copy them into
1338  * the user's buffer. */
1339  length = be16_to_cpu(*((__be16 *)usblp->device_id_string));
1340  if (length < 2)
1341  length = 2;
1342  else if (length >= USBLP_DEVICE_ID_SIZE)
1343  length = USBLP_DEVICE_ID_SIZE - 1;
1344  usblp->device_id_string[length] = '\0';
1345 
1346  dev_dbg(&usblp->intf->dev, "usblp%d Device ID string [len=%d]=\"%s\"\n",
1347  usblp->minor, length, &usblp->device_id_string[2]);
1348 
1349  return length;
1350 }
1351 
1352 static void usblp_disconnect(struct usb_interface *intf)
1353 {
1354  struct usblp *usblp = usb_get_intfdata(intf);
1355 
1356  usb_deregister_dev(intf, &usblp_class);
1357 
1358  if (!usblp || !usblp->dev) {
1359  dev_err(&intf->dev, "bogus disconnect\n");
1360  BUG();
1361  }
1362 
1363  device_remove_file(&intf->dev, &dev_attr_ieee1284_id);
1364 
1365  mutex_lock(&usblp_mutex);
1366  mutex_lock(&usblp->mut);
1367  usblp->present = 0;
1368  wake_up(&usblp->wwait);
1369  wake_up(&usblp->rwait);
1370  usb_set_intfdata(intf, NULL);
1371 
1372  usblp_unlink_urbs(usblp);
1373  mutex_unlock(&usblp->mut);
1374 
1375  if (!usblp->used)
1376  usblp_cleanup(usblp);
1377  mutex_unlock(&usblp_mutex);
1378 }
1379 
1380 static int usblp_suspend(struct usb_interface *intf, pm_message_t message)
1381 {
1382  struct usblp *usblp = usb_get_intfdata(intf);
1383 
1384  usblp_unlink_urbs(usblp);
1385 #if 0 /* XXX Do we want this? What if someone is reading, should we fail? */
1386  /* not strictly necessary, but just in case */
1387  wake_up(&usblp->wwait);
1388  wake_up(&usblp->rwait);
1389 #endif
1390 
1391  return 0;
1392 }
1393 
1394 static int usblp_resume(struct usb_interface *intf)
1395 {
1396  struct usblp *usblp = usb_get_intfdata(intf);
1397  int r;
1398 
1399  r = handle_bidir(usblp);
1400 
1401  return r;
1402 }
1403 
1404 static const struct usb_device_id usblp_ids[] = {
1405  { USB_DEVICE_INFO(7, 1, 1) },
1406  { USB_DEVICE_INFO(7, 1, 2) },
1407  { USB_DEVICE_INFO(7, 1, 3) },
1408  { USB_INTERFACE_INFO(7, 1, 1) },
1409  { USB_INTERFACE_INFO(7, 1, 2) },
1410  { USB_INTERFACE_INFO(7, 1, 3) },
1411  { USB_DEVICE(0x04b8, 0x0202) }, /* Seiko Epson Receipt Printer M129C */
1412  { } /* Terminating entry */
1413 };
1414 
1415 MODULE_DEVICE_TABLE(usb, usblp_ids);
1416 
1417 static struct usb_driver usblp_driver = {
1418  .name = "usblp",
1419  .probe = usblp_probe,
1420  .disconnect = usblp_disconnect,
1421  .suspend = usblp_suspend,
1422  .resume = usblp_resume,
1423  .id_table = usblp_ids,
1424  .supports_autosuspend = 1,
1425 };
1426 
1427 module_usb_driver(usblp_driver);
1428 
1431 module_param(proto_bias, int, S_IRUGO | S_IWUSR);
1432 MODULE_PARM_DESC(proto_bias, "Favourite protocol number");
1433 MODULE_LICENSE("GPL");