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