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