From: johann d. <jd...@us...> - 2002-03-08 19:34:34
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce In directory usw-pr-cvs1:/tmp/cvs-serv8510 Modified Files: iforce-main.c iforce-packets.c iforce-usb.c iforce.h Log Message: Use usb_alloc_urb. Index: iforce-main.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-main.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- iforce-main.c 10 Feb 2002 23:41:31 -0000 1.14 +++ iforce-main.c 8 Mar 2002 19:34:30 -0000 1.15 @@ -230,8 +230,8 @@ switch (iforce->bus) { #ifdef IFORCE_USB case IFORCE_USB: - iforce->irq.dev = iforce->usbdev; - if (usb_submit_urb(&iforce->irq, GFP_KERNEL)) + iforce->irq->dev = iforce->usbdev; + if (usb_submit_urb(iforce->irq, GFP_KERNEL)) return -EIO; break; #endif @@ -277,7 +277,7 @@ switch (iforce->bus) { #ifdef IFORCE_USB case IFORCE_USB: - usb_unlink_urb(&iforce->irq); + usb_unlink_urb(iforce->irq); /* The device was unplugged before the file * was released */ Index: iforce-packets.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-packets.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- iforce-packets.c 12 Feb 2002 21:54:47 -0000 1.12 +++ iforce-packets.c 8 Mar 2002 19:34:30 -0000 1.13 @@ -238,25 +238,25 @@ case IFORCE_USB: iforce->cr.bRequest = packet[0]; - iforce->ctrl.dev = iforce->usbdev; + iforce->ctrl->dev = iforce->usbdev; set_current_state(TASK_INTERRUPTIBLE); add_wait_queue(&iforce->wait, &wait); - if (usb_submit_urb(&iforce->ctrl, GFP_KERNEL)) { + if (usb_submit_urb(iforce->ctrl, GFP_KERNEL)) { set_current_state(TASK_RUNNING); remove_wait_queue(&iforce->wait, &wait); return -1; } - while (timeout && iforce->ctrl.status == -EINPROGRESS) + while (timeout && iforce->ctrl->status == -EINPROGRESS) timeout = schedule_timeout(timeout); set_current_state(TASK_RUNNING); remove_wait_queue(&iforce->wait, &wait); if (!timeout) { - usb_unlink_urb(&iforce->ctrl); + usb_unlink_urb(iforce->ctrl); return -1; } Index: iforce-usb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce-usb.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- iforce-usb.c 26 Feb 2002 23:07:56 -0000 1.14 +++ iforce-usb.c 8 Mar 2002 19:34:30 -0000 1.15 @@ -1,4 +1,4 @@ -/* + /* * $Id$ * * Copyright (c) 2000-2002 Vojtech Pavlik <vo...@uc...> @@ -42,29 +42,29 @@ return; } - ((char *)iforce->out.transfer_buffer)[0] = iforce->xmit.buf[iforce->xmit.tail]; + ((char *)iforce->out->transfer_buffer)[0] = iforce->xmit.buf[iforce->xmit.tail]; XMIT_INC(iforce->xmit.tail, 1); n = iforce->xmit.buf[iforce->xmit.tail]; XMIT_INC(iforce->xmit.tail, 1); - iforce->out.transfer_buffer_length = n + 1; - iforce->out.dev = iforce->usbdev; + iforce->out->transfer_buffer_length = n + 1; + iforce->out->dev = iforce->usbdev; /* Copy rest of data then */ c = CIRC_CNT_TO_END(iforce->xmit.head, iforce->xmit.tail, XMIT_SIZE); if (n < c) c=n; - memcpy(iforce->out.transfer_buffer + 1, + memcpy(iforce->out->transfer_buffer + 1, &iforce->xmit.buf[iforce->xmit.tail], c); if (n != c) { - memcpy(iforce->out.transfer_buffer + 1 + c, + memcpy(iforce->out->transfer_buffer + 1 + c, &iforce->xmit.buf[0], n-c); } XMIT_INC(iforce->xmit.tail, n); - if ( (n=usb_submit_urb(&iforce->out, GFP_ATOMIC)) ) { + if ( (n=usb_submit_urb(iforce->out, GFP_ATOMIC)) ) { printk(KERN_WARNING "iforce-usb.c: iforce_usb_xmit: usb_submit_urb failed %d\n", n); } @@ -112,9 +112,23 @@ epirq = dev->config[0].interface[ifnum].altsetting[0].endpoint + 0; epout = dev->config[0].interface[ifnum].altsetting[0].endpoint + 1; - if (!(iforce = kmalloc(sizeof(struct iforce) + 32, GFP_KERNEL))) return NULL; + if (!(iforce = kmalloc(sizeof(struct iforce) + 32, GFP_KERNEL))) + goto fail; + memset(iforce, 0, sizeof(struct iforce)); + if (!(iforce->irq = usb_alloc_urb(0, GFP_KERNEL))) { + goto fail; + } + + if (!(iforce->out = usb_alloc_urb(0, GFP_KERNEL))) { + goto fail; + } + + if (!(iforce->ctrl = usb_alloc_urb(0, GFP_KERNEL))) { + goto fail; + } + iforce->bus = IFORCE_USB; iforce->usbdev = dev; @@ -122,29 +136,40 @@ iforce->cr.wIndex = 0; iforce->cr.wLength = 16; - usb_fill_int_urb(&iforce->irq, dev, usb_rcvintpipe(dev, epirq->bEndpointAddress), + usb_fill_int_urb(iforce->irq, dev, usb_rcvintpipe(dev, epirq->bEndpointAddress), iforce->data, 16, iforce_usb_irq, iforce, epirq->bInterval); - usb_fill_bulk_urb(&iforce->out, dev, usb_sndbulkpipe(dev, epout->bEndpointAddress), + usb_fill_bulk_urb(iforce->out, dev, usb_sndbulkpipe(dev, epout->bEndpointAddress), iforce + 1, 32, iforce_usb_out, iforce); - usb_fill_control_urb(&iforce->ctrl, dev, usb_rcvctrlpipe(dev, 0), + usb_fill_control_urb(iforce->ctrl, dev, usb_rcvctrlpipe(dev, 0), (void*) &iforce->cr, iforce->edata, 16, iforce_usb_ctrl, iforce); - if (iforce_init_device(iforce)) { + if (iforce_init_device(iforce)) goto fail; + + return iforce; + +fail: + if (iforce) { + if (iforce->irq) usb_free_urb(iforce->irq); + if (iforce->out) usb_free_urb(iforce->out); + if (iforce->ctrl) usb_free_urb(iforce->ctrl); kfree(iforce); - return NULL; } - return iforce; + return NULL; } /* Called by iforce_delete() */ void iforce_usb_delete(struct iforce* iforce) { - usb_unlink_urb(&iforce->irq); - usb_unlink_urb(&iforce->out); - usb_unlink_urb(&iforce->ctrl); + usb_unlink_urb(iforce->irq); + usb_unlink_urb(iforce->out); + usb_unlink_urb(iforce->ctrl); + + usb_free_urb(iforce->irq); + usb_free_urb(iforce->out); + usb_free_urb(iforce->ctrl); } static void iforce_usb_disconnect(struct usb_device *dev, void *ptr) Index: iforce.h =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/joystick/iforce/iforce.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- iforce.h 12 Feb 2002 21:53:58 -0000 1.10 +++ iforce.h 8 Mar 2002 19:34:30 -0000 1.11 @@ -136,7 +136,7 @@ #endif #ifdef IFORCE_USB struct usb_device *usbdev; /* USB transfer */ - struct urb irq, out, ctrl; /*TODO: Use pointers and usb_alloc_urb */ + struct urb *irq, *out, *ctrl; struct usb_ctrlrequest cr; #endif spinlock_t xmit_lock; |