cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

usblp.c (40352B)


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