xref: /openbmc/linux/drivers/usb/class/usblp.c (revision b9ccfda2)
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/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;
146 	wait_queue_head_t	rwait, wwait;
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 {
153 		int				alt_setting;
154 		struct usb_endpoint_descriptor	*epwrite;
155 		struct usb_endpoint_descriptor	*epread;
156 	}			protocol[USBLP_MAX_PROTOCOLS];
157 	int			current_protocol;
158 	int			minor;			/* minor number of device */
159 	int			wcomplete, rcomplete;
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 
208 struct quirk_printer_struct {
209 	__u16 vendorId;
210 	__u16 productId;
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 <kernel@zut.de> */
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);
357 		printk_ratelimited(KERN_ERR
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 
584 		case IOCNR_HP_SET_CHANNEL:
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 
592 			err = usblp_hp_channel_change_request(usblp,
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 
608 		case IOCNR_GET_BUS_ADDRESS:
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 (;;) {
873 		set_current_state(TASK_INTERRUPTIBLE);
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 	}
898 	set_current_state(TASK_RUNNING);
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 		}
940 		set_current_state(TASK_INTERRUPTIBLE);
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 	}
950 	set_current_state(TASK_RUNNING);
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. */
1111 	if (!(usblp->device_id_string = kmalloc(USBLP_DEVICE_ID_SIZE, GFP_KERNEL))) {
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 */
1127 	usblp->statusbuf = kmalloc(STATUS_BUF_SIZE, GFP_KERNEL);
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 
1300 	if (protocol < USBLP_FIRST_PROTOCOL || protocol > USBLP_LAST_PROTOCOL)
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 
1429 MODULE_AUTHOR(DRIVER_AUTHOR);
1430 MODULE_DESCRIPTION(DRIVER_DESC);
1431 module_param(proto_bias, int, S_IRUGO | S_IWUSR);
1432 MODULE_PARM_DESC(proto_bias, "Favourite protocol number");
1433 MODULE_LICENSE("GPL");
1434