Lines Matching defs:usblp
3 * usblp.c
127 * ->mut locks the whole usblp, except [rw]complete, and thus, by indirection,
131 struct usblp {
168 static void usblp_dump(struct usblp *usblp)
170 struct device *dev = &usblp->intf->dev;
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);
181 usblp->protocol[p].alt_setting);
183 usblp->protocol[p].epwrite);
185 usblp->protocol[p].epread);
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);
195 usblp->device_id_string ?
196 usblp->device_id_string + 2 :
233 static int usblp_wwait(struct usblp *usblp, int nonblock);
234 static int usblp_wtest(struct usblp *usblp, int nonblock);
235 static int usblp_rwait_and_lock(struct usblp *usblp, int nonblock);
236 static int usblp_rtest(struct usblp *usblp, int nonblock);
237 static int usblp_submit_read(struct usblp *usblp);
238 static int usblp_select_alts(struct usblp *usblp);
239 static int usblp_set_protocol(struct usblp *usblp, int protocol);
240 static int usblp_cache_device_id_string(struct usblp *usblp);
244 static DEFINE_MUTEX(usblp_mutex); /* locks the existence of usblp's */
247 * Functions for usblp control messages.
250 static int usblp_ctrl_msg(struct usblp *usblp, int request, int type, int dir, int recip, int value, void *buf, int len)
253 int index = usblp->ifnum;
259 index = (usblp->ifnum<<8)|usblp->protocol[usblp->current_protocol].alt_setting;
261 retval = usb_control_msg(usblp->dev,
262 dir ? usb_rcvctrlpipe(usblp->dev, 0) : usb_sndctrlpipe(usblp->dev, 0),
264 dev_dbg(&usblp->intf->dev,
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)
277 static int usblp_hp_channel_change_request(struct usblp *usblp, int channel, u8 *new_channel)
286 ret = usblp_ctrl_msg(usblp, USBLP_REQ_HP_CHANNEL_CHANGE_REQUEST,
310 struct usblp *usblp = urb->context;
314 if (usblp->present && usblp->used) {
316 printk(KERN_WARNING "usblp%d: "
318 usblp->minor, status);
320 spin_lock_irqsave(&usblp->lock, flags);
322 usblp->rstatus = status;
324 usblp->rstatus = urb->actual_length;
325 usblp->rcomplete = 1;
326 wake_up(&usblp->rwait);
327 spin_unlock_irqrestore(&usblp->lock, flags);
334 struct usblp *usblp = urb->context;
338 if (usblp->present && usblp->used) {
340 printk(KERN_WARNING "usblp%d: "
342 usblp->minor, status);
344 spin_lock_irqsave(&usblp->lock, flags);
346 usblp->wstatus = status;
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);
363 static int usblp_check_status(struct usblp *usblp, int err)
368 mutex_lock(&usblp->mut);
369 if ((error = usblp_read_status(usblp, usblp->statusbuf)) < 0) {
370 mutex_unlock(&usblp->mut);
372 "usblp%d: error %d reading printer status\n",
373 usblp->minor, error);
376 status = *usblp->statusbuf;
377 mutex_unlock(&usblp->mut);
387 printk(KERN_INFO "usblp%d: %s\n",
388 usblp->minor, usblp_messages[newerr]);
394 static int handle_bidir(struct usblp *usblp)
396 if (usblp->bidir && usblp->used) {
397 if (usblp_submit_read(usblp) < 0)
410 struct usblp *usblp;
423 usblp = usb_get_intfdata(intf);
424 if (!usblp || !usblp->dev || !usblp->present)
428 if (usblp->used)
440 usblp->used = 1;
441 file->private_data = usblp;
443 usblp->wcomplete = 1; /* we begin writeable */
444 usblp->wstatus = 0;
445 usblp->rcomplete = 0;
447 if (handle_bidir(usblp) < 0) {
449 usblp->used = 0;
458 static void usblp_cleanup(struct usblp *usblp)
460 printk(KERN_INFO "usblp%d: removed\n", usblp->minor);
462 kfree(usblp->readbuf);
463 kfree(usblp->device_id_string);
464 kfree(usblp->statusbuf);
465 usb_put_intf(usblp->intf);
466 kfree(usblp);
469 static void usblp_unlink_urbs(struct usblp *usblp)
471 usb_kill_anchored_urbs(&usblp->urbs);
476 struct usblp *usblp = file->private_data;
478 usblp->flags &= ~LP_ABORT;
481 usblp->used = 0;
482 if (usblp->present)
483 usblp_unlink_urbs(usblp);
485 usb_autopm_put_interface(usblp->intf);
487 if (!usblp->present) /* finish cleanup from disconnect */
488 usblp_cleanup(usblp); /* any URBs must be dead */
497 struct usblp *usblp = file->private_data;
502 poll_wait(file, &usblp->rwait, wait);
503 poll_wait(file, &usblp->wwait, wait);
505 mutex_lock(&usblp->mut);
506 if (!usblp->present)
508 mutex_unlock(&usblp->mut);
510 spin_lock_irqsave(&usblp->lock, flags);
511 if (usblp->bidir && usblp->rcomplete)
513 if (usblp->no_paper || usblp->wcomplete)
515 spin_unlock_irqrestore(&usblp->lock, flags);
521 struct usblp *usblp = file->private_data;
528 mutex_lock(&usblp->mut);
529 if (!usblp->present) {
534 dev_dbg(&usblp->intf->dev,
548 length = usblp_cache_device_id_string(usblp);
557 usblp->device_id_string,
572 twoints[0] = usblp->current_protocol;
576 if (usblp->protocol[i].alt_setting >= 0)
597 usblp_dump(usblp);
602 usblp_unlink_urbs(usblp);
603 retval = usblp_set_protocol(usblp, arg);
605 usblp_set_protocol(usblp,
606 usblp->current_protocol);
612 le16_to_cpu(usblp->dev->descriptor.idVendor) != 0x03F0 ||
613 usblp->quirks & USBLP_QUIRK_BIDIR) {
618 err = usblp_hp_channel_change_request(usblp,
621 dev_err(&usblp->dev->dev,
622 "usblp%d: error = %d setting "
624 usblp->minor, err);
629 dev_dbg(&usblp->intf->dev,
630 "usblp%d requested/got HP channel %ld/%d\n",
631 usblp->minor, arg, newChannel);
641 twoints[0] = usblp->dev->bus->busnum;
642 twoints[1] = usblp->dev->devnum;
650 dev_dbg(&usblp->intf->dev,
651 "usblp%d is bus=%d, device=%d\n",
652 usblp->minor, twoints[0], twoints[1]);
662 twoints[0] = le16_to_cpu(usblp->dev->descriptor.idVendor);
663 twoints[1] = le16_to_cpu(usblp->dev->descriptor.idProduct);
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]);
681 retval = usblp_reset(usblp);
690 retval = usblp_read_status(usblp, usblp->statusbuf);
692 printk_ratelimited(KERN_ERR "usblp%d:"
694 usblp->minor, retval);
698 status = *usblp->statusbuf;
705 usblp->flags |= LP_ABORT;
707 usblp->flags &= ~LP_ABORT;
715 mutex_unlock(&usblp->mut);
719 static struct urb *usblp_new_writeurb(struct usblp *usblp, int transfer_length)
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);
744 struct usblp *usblp = file->private_data;
750 if (mutex_lock_interruptible(&usblp->wmut)) {
754 if ((rv = usblp_wwait(usblp, !!(file->f_flags & O_NONBLOCK))) < 0)
765 writeurb = usblp_new_writeurb(usblp, transfer_length);
768 usb_anchor_urb(writeurb, &usblp->urbs);
776 spin_lock_irq(&usblp->lock);
777 usblp->wcomplete = 0;
778 spin_unlock_irq(&usblp->lock);
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);
794 rv = usblp_wwait(usblp, !!(file->f_flags&O_NONBLOCK));
801 spin_lock_irq(&usblp->lock);
802 usblp->no_paper = 1; /* Mark for poll(2) */
803 spin_unlock_irq(&usblp->lock);
810 if (usblp->wstatus < 0) {
818 writecount += usblp->wstatus;
821 mutex_unlock(&usblp->wmut);
831 mutex_unlock(&usblp->wmut);
843 struct usblp *usblp = file->private_data;
848 if (!usblp->bidir)
851 rv = usblp_rwait_and_lock(usblp, !!(file->f_flags & O_NONBLOCK));
855 if (!usblp->present) {
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);
868 count = len < avail - usblp->readcount ? len : avail - usblp->readcount;
870 copy_to_user(buffer, usblp->readbuf + usblp->readcount, count)) {
875 if ((usblp->readcount += count) == avail) {
876 if (usblp_submit_read(usblp) < 0) {
885 mutex_unlock(&usblp->mut);
900 static int usblp_wwait(struct usblp *usblp, int nonblock)
906 add_wait_queue(&usblp->wwait, &waita);
908 if (mutex_lock_interruptible(&usblp->mut)) {
913 rc = usblp_wtest(usblp, nonblock);
914 mutex_unlock(&usblp->mut);
919 if (usblp->flags & LP_ABORT) {
920 err = usblp_check_status(usblp, err);
927 mutex_lock(&usblp->mut);
928 usblp_read_status(usblp, usblp->statusbuf);
929 mutex_unlock(&usblp->mut);
934 remove_wait_queue(&usblp->wwait, &waita);
938 static int usblp_wtest(struct usblp *usblp, int nonblock)
942 if (!usblp->present)
946 spin_lock_irqsave(&usblp->lock, flags);
947 if (usblp->wcomplete) {
948 spin_unlock_irqrestore(&usblp->lock, flags);
951 spin_unlock_irqrestore(&usblp->lock, flags);
964 static int usblp_rwait_and_lock(struct usblp *usblp, int nonblock)
969 add_wait_queue(&usblp->rwait, &waita);
971 if (mutex_lock_interruptible(&usblp->mut)) {
976 if ((rc = usblp_rtest(usblp, nonblock)) < 0) {
977 mutex_unlock(&usblp->mut);
982 mutex_unlock(&usblp->mut);
986 remove_wait_queue(&usblp->rwait, &waita);
990 static int usblp_rtest(struct usblp *usblp, int nonblock)
994 if (!usblp->present)
998 spin_lock_irqsave(&usblp->lock, flags);
999 if (usblp->rcomplete) {
1000 spin_unlock_irqrestore(&usblp->lock, flags);
1003 spin_unlock_irqrestore(&usblp->lock, flags);
1012 static int usblp_submit_read(struct usblp *usblp)
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);
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);
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);
1108 struct usblp *usblp = usb_get_intfdata(intf);
1110 if (usblp->device_id_string[0] == 0 &&
1111 usblp->device_id_string[1] == 0)
1114 return sprintf(buf, "%s", usblp->device_id_string+2);
1123 ATTRIBUTE_GROUPS(usblp);
1129 struct usblp *usblp;
1133 /* Malloc and start initializing usblp structure so we can use it
1135 usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL);
1136 if (!usblp) {
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);
1153 if (!(usblp->device_id_string = kmalloc(USBLP_DEVICE_ID_SIZE, GFP_KERNEL))) {
1163 if (!(usblp->readbuf = kmalloc(USBLP_BUF_SIZE_IN, GFP_KERNEL))) {
1169 usblp->statusbuf = kmalloc(STATUS_BUF_SIZE, GFP_KERNEL);
1170 if (!usblp->statusbuf) {
1176 usblp->quirks = usblp_quirks(
1181 protocol = usblp_select_alts(usblp);
1192 if (usblp_set_protocol(usblp, protocol) < 0) {
1198 usblp_cache_device_id_string(usblp);
1201 usblp_check_status(usblp, 0);
1204 usb_set_intfdata(intf, usblp);
1206 usblp->present = 1;
1211 "usblp: Not able to get a minor (base %u, slice default): %d\n",
1215 usblp->minor = intf->minor;
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));
1230 kfree(usblp->readbuf);
1231 kfree(usblp->statusbuf);
1232 kfree(usblp->device_id_string);
1233 usb_put_intf(usblp->intf);
1234 kfree(usblp);
1262 static int usblp_select_alts(struct usblp *usblp)
1270 if_alt = usblp->intf;
1273 usblp->protocol[p].alt_setting = -1;
1281 if (!(usblp->quirks & USBLP_QUIRK_BAD_CLASS))
1302 if (usblp->quirks & USBLP_QUIRK_BIDIR) {
1303 printk(KERN_INFO "usblp%d: Disabling reads from "
1305 usblp->minor);
1309 usblp->protocol[ifd->desc.bInterfaceProtocol].alt_setting =
1311 usblp->protocol[ifd->desc.bInterfaceProtocol].epwrite = epwrite;
1312 usblp->protocol[ifd->desc.bInterfaceProtocol].epread = epread;
1318 usblp->protocol[proto_bias].alt_setting != -1)
1322 if (usblp->protocol[2].alt_setting != -1)
1324 if (usblp->protocol[1].alt_setting != -1)
1326 if (usblp->protocol[3].alt_setting != -1)
1333 static int usblp_set_protocol(struct usblp *usblp, int protocol)
1341 if (usblp->intf->num_altsetting > 1) {
1342 alts = usblp->protocol[protocol].alt_setting;
1345 r = usb_set_interface(usblp->dev, usblp->ifnum, alts);
1347 printk(KERN_ERR "usblp: can't set desired altsetting %d on interface %d\n",
1348 alts, usblp->ifnum);
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);
1363 static int usblp_cache_device_id_string(struct usblp *usblp)
1367 err = usblp_get_id(usblp, 0, usblp->device_id_string, USBLP_DEVICE_ID_SIZE - 1);
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';
1379 length = be16_to_cpu(*((__be16 *)usblp->device_id_string));
1384 usblp->device_id_string[length] = '\0';
1386 dev_dbg(&usblp->intf->dev, "usblp%d Device ID string [len=%d]=\"%s\"\n",
1387 usblp->minor, length, &usblp->device_id_string[2]);
1394 struct usblp *usblp = usb_get_intfdata(intf);
1398 if (!usblp || !usblp->dev) {
1404 mutex_lock(&usblp->mut);
1405 usblp->present = 0;
1406 wake_up(&usblp->wwait);
1407 wake_up(&usblp->rwait);
1410 usblp_unlink_urbs(usblp);
1411 mutex_unlock(&usblp->mut);
1412 usb_poison_anchored_urbs(&usblp->urbs);
1414 if (!usblp->used)
1415 usblp_cleanup(usblp);
1422 struct usblp *usblp = usb_get_intfdata(intf);
1424 usblp_unlink_urbs(usblp);
1427 wake_up(&usblp->wwait);
1428 wake_up(&usblp->rwait);
1436 struct usblp *usblp = usb_get_intfdata(intf);
1439 r = handle_bidir(usblp);
1458 .name = "usblp",