Hi Greg,
I'll be releasing patches for scanner.[ch] for both the linus and ac trees to
bring them up to date with each other. Hopefully before the week end.
Regards,
/\/elson
On Tue, 9 Oct 2001, Greg KH wrote:
> Hi all,
>
> Ok, In trying to resolve all of the USB differences between the -ac and
> Linus trees, I'm down to the attached diff. My question to everyone is
> which version of each file is the newer one?
>
> I'm pretty sure the usb.c and usb.h files should be taken from the -ac
> tree like Pete said, but I want to make sure no one minds this before I
> do it.
>
> Here's the diffstat:
>
> include/linux/usb.h | 13 +--
> linux-2.4-ac/drivers/usb/devices.c | 2
> linux-2.4-ac/drivers/usb/inode.c | 14 +---
> linux-2.4-ac/drivers/usb/kaweth.c | 33 +++------
> linux-2.4-ac/drivers/usb/mdc800.c | 12 ---
> linux-2.4-ac/drivers/usb/storage/unusual_devs.h | 25 +++++--
> linux-2.4-ac/drivers/usb/usb.c | 80 ++++++++++++------------
> 7 files changed, 87 insertions, 92 deletions
>
> Any help on any of this diffs is greatly appreciated, otherwise I'm just
> going to guess which one is better :)
>
> thanks,
>
> greg k-h
>
>
> diff -Naur -X dontdiff linux-2.4/drivers/usb/devices.c
>linux-2.4-ac/drivers/usb/devices.c
> --- linux-2.4/drivers/usb/devices.c Tue Sep 11 13:12:51 2001
> +++ linux-2.4-ac/drivers/usb/devices.c Wed Oct 3 10:12:42 2001
> @@ -488,7 +488,6 @@
> return -EFAULT;
>
> /* enumerate busses */
> - read_lock_irq (&usb_bus_list_lock);
> for (buslist = usb_bus_list.next; buslist != &usb_bus_list; buslist =
>buslist->next) {
> /* print devices for this bus */
> bus = list_entry(buslist, struct usb_bus, bus_list);
> @@ -498,7 +497,6 @@
> return ret;
> total_written += ret;
> }
> - read_unlock_irq (&usb_bus_list_lock);
> return total_written;
> }
>
> diff -Naur -X dontdiff linux-2.4/drivers/usb/inode.c linux-2.4-ac/drivers/usb/inode.c
> --- linux-2.4/drivers/usb/inode.c Tue Sep 11 13:12:52 2001
> +++ linux-2.4-ac/drivers/usb/inode.c Wed Oct 3 10:12:43 2001
> @@ -260,15 +260,11 @@
> struct list_head *list;
> struct usb_bus *bus;
>
> - read_lock_irq (&usb_bus_list_lock);
> for (list = usb_bus_list.next; list != &usb_bus_list; list = list->next) {
> bus = list_entry(list, struct usb_bus, bus_list);
> - if (bus->busnum == busnr) {
> - read_unlock_irq (&usb_bus_list_lock);
> + if (bus->busnum == busnr)
> return bus;
> - }
> }
> - read_unlock_irq (&usb_bus_list_lock);
> return NULL;
> }
>
> @@ -416,7 +412,7 @@
> if (i < 2+NRSPECIAL)
> return 0;
> i -= 2+NRSPECIAL;
> - read_lock_irq (&usb_bus_list_lock);
> + lock_kernel();
> for (list = usb_bus_list.next; list != &usb_bus_list; list =
>list->next) {
> if (i > 0) {
> i--;
> @@ -428,7 +424,7 @@
> break;
> filp->f_pos++;
> }
> - read_unlock_irq (&usb_bus_list_lock);
> + unlock_kernel();
> return 0;
> }
> }
> @@ -639,13 +635,13 @@
> list_add_tail(&inode->u.usbdev_i.slist, &s->u.usbdevfs_sb.ilist);
> list_add_tail(&inode->u.usbdev_i.dlist, &special[i].inodes);
> }
> - read_lock_irq (&usb_bus_list_lock);
> + lock_kernel();
> for (blist = usb_bus_list.next; blist != &usb_bus_list; blist = blist->next) {
> bus = list_entry(blist, struct usb_bus, bus_list);
> new_bus_inode(bus, s);
> recurse_new_dev_inode(bus->root_hub, s);
> }
> - read_unlock_irq (&usb_bus_list_lock);
> + unlock_kernel();
> return s;
>
> out_no_root:
> diff -Naur -X dontdiff linux-2.4/drivers/usb/kaweth.c
>linux-2.4-ac/drivers/usb/kaweth.c
> --- linux-2.4/drivers/usb/kaweth.c Mon Sep 17 08:41:29 2001
> +++ linux-2.4-ac/drivers/usb/kaweth.c Wed Oct 3 10:12:45 2001
> @@ -949,12 +949,10 @@
> *-------------------------------------------------------------------*/
> static void usb_api_blocking_completion(urb_t *urb)
> {
> - api_wrapper_data *awd = (api_wrapper_data *)urb->context;
> -
> - if (waitqueue_active(awd->wakeup)) {
> - wake_up(awd->wakeup);
> - }
> + struct usb_api_data *awd = (struct usb_api_data *)urb->context;
>
> + awd->done=1;
> + wake_up(&awd->wqh);
> }
>
> /*-------------------------------------------------------------------*
> @@ -965,36 +963,31 @@
> static int usb_start_wait_urb(urb_t *urb, int timeout, int* actual_length)
> {
> DECLARE_WAITQUEUE(wait, current);
> - DECLARE_WAIT_QUEUE_HEAD(wqh);
> - api_wrapper_data awd;
> + struct usb_api_data awd;
> int status;
>
> - awd.wakeup = &wqh;
> - init_waitqueue_head(&wqh);
> + init_waitqueue_head(&awd.wqh);
> + awd.done = 0;
> +
> current->state = TASK_INTERRUPTIBLE;
> - add_wait_queue(&wqh, &wait);
> + add_wait_queue(&awd.wqh, &wait);
> urb->context = &awd;
> status = usb_submit_urb(urb);
> if (status) {
> // something went wrong
> usb_free_urb(urb);
> current->state = TASK_RUNNING;
> - remove_wait_queue(&wqh, &wait);
> + remove_wait_queue(&awd.wqh, &wait);
> return status;
> }
>
> - if (urb->status == -EINPROGRESS) {
> - while (timeout && urb->status == -EINPROGRESS)
> - status = timeout = schedule_timeout(timeout);
> - }
> - else {
> - status = 1;
> - }
> + while (timeout && !awd.done)
> + timeout = schedule_timeout(timeout);
>
> current->state = TASK_RUNNING;
> - remove_wait_queue(&wqh, &wait);
> + remove_wait_queue(&awd.wqh, &wait);
>
> - if (!status) {
> + if (!timeout) {
> // timeout
> kaweth_warn("usb_control/bulk_msg: timeout");
> usb_unlink_urb(urb); // remove urb safely
> diff -Naur -X dontdiff linux-2.4/drivers/usb/mdc800.c
>linux-2.4-ac/drivers/usb/mdc800.c
> --- linux-2.4/drivers/usb/mdc800.c Tue Oct 9 09:48:52 2001
> +++ linux-2.4-ac/drivers/usb/mdc800.c Wed Oct 3 10:12:45 2001
> @@ -718,7 +718,6 @@
> static ssize_t mdc800_device_write (struct file *file, const char *buf, size_t len,
>loff_t *pos)
> {
> int i=0;
> - char c;
>
> spin_lock (&mdc800->io_lock);
> if (mdc800->state != READY)
> @@ -741,14 +740,7 @@
> }
>
> /* check for command start */
> -
> - if(get_user(c, buf+i))
> - {
> - spin_unlock (&mdc800->io_lock);
> - return -EFAULT;
> - }
> -
> - if (c == (char) 0x55)
> + if (buf [i] == (char) 0x55)
> {
> mdc800->in_count=0;
> mdc800->out_count=0;
> @@ -759,7 +751,7 @@
> /* save command byte */
> if (mdc800->in_count < 8)
> {
> - mdc800->in[mdc800->in_count]=c;
> + mdc800->in[mdc800->in_count]=buf[i];
> mdc800->in_count++;
> }
> else
> diff -Naur -X dontdiff linux-2.4/drivers/usb/storage/unusual_devs.h
>linux-2.4-ac/drivers/usb/storage/unusual_devs.h
> --- linux-2.4/drivers/usb/storage/unusual_devs.h Tue Sep 11 13:12:55 2001
> +++ linux-2.4-ac/drivers/usb/storage/unusual_devs.h Fri Oct 5 09:51:07 2001
> @@ -60,6 +60,11 @@
> US_SC_8070, US_PR_SCM_ATAPI, init_8200e, 0),
> #endif
>
> +UNUSUAL_DEV( 0x04cb, 0x0100, 0x0000, 0x2210,
> + "Fujifilm",
> + "FinePix 1400Zoom",
> + US_SC_8070, US_PR_CBI, NULL, US_FL_FIX_INQUIRY),
> +
> #ifdef CONFIG_USB_STORAGE_DPCM
> UNUSUAL_DEV( 0x0436, 0x0005, 0x0100, 0x0100,
> "Microtech",
> @@ -293,18 +298,17 @@
> US_FL_SINGLE_LUN ),
>
> #ifdef CONFIG_USB_STORAGE_SDDR09
> -UNUSUAL_DEV( 0x0781, 0x0200, 0x0000, 0x9999,
> +UNUSUAL_DEV( 0x0781, 0x0200, 0x0100, 0x0208,
> "Sandisk",
> "ImageMate SDDR-09",
> US_SC_SCSI, US_PR_EUSB_SDDR09, NULL,
> US_FL_SINGLE_LUN | US_FL_START_STOP ),
> -#endif
>
> -#ifdef CONFIG_USB_STORAGE_FREECOM
> -UNUSUAL_DEV( 0x07ab, 0xfc01, 0x0000, 0x9999,
> - "Freecom",
> - "USB-IDE",
> - US_SC_QIC, US_PR_FREECOM, freecom_init, 0),
> +UNUSUAL_DEV( 0x0781, 0x0200, 0x0000, 0x9999,
> + "Sandisk",
> + "ImageMate SDDR-09",
> + US_SC_SCSI, US_PR_EUSB_SDDR09, NULL,
> + US_FL_SINGLE_LUN | US_FL_START_STOP ),
> #endif
>
> UNUSUAL_DEV( 0x07af, 0x0004, 0x0100, 0x0100,
> @@ -312,6 +316,13 @@
> "USB-SCSI-DB25",
> US_SC_SCSI, US_PR_BULK, usb_stor_euscsi_init,
> US_FL_SCM_MULT_TARG ),
> +
> +#ifdef CONFIG_USB_STORAGE_FREECOM
> +UNUSUAL_DEV( 0x07ab, 0xfc01, 0x0000, 0x9999,
> + "Freecom",
> + "USB-IDE",
> + US_SC_QIC, US_PR_FREECOM, freecom_init, 0),
> +#endif
>
> UNUSUAL_DEV( 0x07af, 0x0005, 0x0100, 0x0100,
> "Microtech",
> diff -Naur -X dontdiff linux-2.4/drivers/usb/usb.c linux-2.4-ac/drivers/usb/usb.c
> --- linux-2.4/drivers/usb/usb.c Tue Oct 9 09:46:58 2001
> +++ linux-2.4-ac/drivers/usb/usb.c Tue Oct 9 09:47:49 2001
> @@ -1042,15 +1042,11 @@
> *-------------------------------------------------------------------*/
> static void usb_api_blocking_completion(urb_t *urb)
> {
> - api_wrapper_data *awd = (api_wrapper_data *)urb->context;
> + struct usb_api_data *awd = (struct usb_api_data *)urb->context;
>
> - if (waitqueue_active(awd->wakeup))
> - wake_up(awd->wakeup);
> -#if 0
> - else
> - dbg("(blocking_completion): waitqueue empty!");
> - // even occurs if urb was unlinked by timeout...
> -#endif
> + awd->done = 1;
> + wmb();
> + wake_up(&awd->wqh);
> }
>
> /*-------------------------------------------------------------------*
> @@ -1061,38 +1057,46 @@
> static int usb_start_wait_urb(urb_t *urb, int timeout, int* actual_length)
> {
> DECLARE_WAITQUEUE(wait, current);
> - DECLARE_WAIT_QUEUE_HEAD(wqh);
> - api_wrapper_data awd;
> + struct usb_api_data awd;
> int status;
> -
> - awd.wakeup = &wqh;
> - init_waitqueue_head(&wqh);
> - current->state = TASK_INTERRUPTIBLE;
> - add_wait_queue(&wqh, &wait);
> +
> + init_waitqueue_head(&awd.wqh);
> + awd.done = 0;
> +
> + set_current_state(TASK_UNINTERRUPTIBLE);
> + add_wait_queue(&awd.wqh, &wait);
> +
> urb->context = &awd;
> status = usb_submit_urb(urb);
> if (status) {
> // something went wrong
> usb_free_urb(urb);
> - current->state = TASK_RUNNING;
> - remove_wait_queue(&wqh, &wait);
> + set_current_state(TASK_RUNNING);
> + remove_wait_queue(&awd.wqh, &wait);
> return status;
> }
>
> - if (urb->status == -EINPROGRESS) {
> - while (timeout && urb->status == -EINPROGRESS)
> - status = timeout = schedule_timeout(timeout);
> - } else
> - status = 1;
> -
> - current->state = TASK_RUNNING;
> - remove_wait_queue(&wqh, &wait);
> -
> - if (!status) {
> - // timeout
> - printk("usb_control/bulk_msg: timeout\n");
> - usb_unlink_urb(urb); // remove urb safely
> - status = -ETIMEDOUT;
> + while (timeout && !awd.done)
> + {
> + timeout = schedule_timeout(timeout);
> + set_current_state(TASK_UNINTERRUPTIBLE);
> + rmb();
> + }
> +
> + set_current_state(TASK_RUNNING);
> + remove_wait_queue(&awd.wqh, &wait);
> +
> + if (!timeout && !awd.done) {
> + if (urb->status != -EINPROGRESS) { /* No callback?!! */
> + printk(KERN_ERR "usb: raced timeout, "
> + "pipe 0x%x status %d time left %d\n",
> + urb->pipe, urb->status, timeout);
> + status = urb->status;
> + } else {
> + printk("usb_control/bulk_msg: timeout\n");
> + usb_unlink_urb(urb); // remove urb safely
> + status = -ETIMEDOUT;
> + }
> } else
> status = urb->status;
>
> @@ -1116,15 +1120,14 @@
> if (!urb)
> return -ENOMEM;
>
> - FILL_CONTROL_URB(urb, usb_dev, pipe, (unsigned char*)cmd, data, len, /*
>build urb */
> - (usb_complete_t)usb_api_blocking_completion,0);
> + FILL_CONTROL_URB(urb, usb_dev, pipe, (unsigned char*)cmd, data, len,
> + usb_api_blocking_completion, 0);
>
> retv = usb_start_wait_urb(urb, timeout, &length);
> if (retv < 0)
> return retv;
> else
> return length;
> -
> }
>
> /**
> @@ -1205,8 +1208,8 @@
> if (!urb)
> return -ENOMEM;
>
> - FILL_BULK_URB(urb,usb_dev,pipe,(unsigned char*)data,len, /* build urb */
> - (usb_complete_t)usb_api_blocking_completion,0);
> + FILL_BULK_URB(urb, usb_dev, pipe, data, len,
> + usb_api_blocking_completion, 0);
>
> return usb_start_wait_urb(urb,timeout,actual_length);
> }
> @@ -1767,8 +1770,11 @@
> * These are the actual routines to send
> * and receive control messages.
> */
> -
> +#ifdef CONFIG_USB_LONG_TIMEOUT
> +#define GET_TIMEOUT 4
> +#else
> #define GET_TIMEOUT 3
> +#endif
> #define SET_TIMEOUT 3
>
> int usb_set_address(struct usb_device *dev)
> --- linux-2.4/include/linux/usb.h Mon Oct 8 08:57:55 2001
> +++ linux-2.4-ac/include/linux/usb.h Mon Oct 8 16:31:15 2001
> @@ -539,13 +539,12 @@
> * SYNCHRONOUS CALL SUPPORT *
> *-------------------------------------------------------------------*/
>
> -typedef struct
> +struct usb_api_data
> {
> - wait_queue_head_t *wakeup;
> -
> - void* stuff;
> - /* more to follow */
> -} api_wrapper_data;
> + wait_queue_head_t wqh;
> + int done;
> + /* void* stuff; */ /* Possible extension later. */
> +};
>
> /* -------------------------------------------------------------------------- */
>
> @@ -718,7 +717,7 @@
> * appropriately.
> *
> * NOTE: there's no encoding (yet?) for a "high speed" endpoint; treat them
> - * like full speed devices.
> + * like like full speed devices.
> */
>
> #define PIPE_ISOCHRONOUS 0
>
> _______________________________________________
> [EMAIL PROTECTED]
> To unsubscribe, use the last form field at:
> https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
>
--
~~ ** ~~ UNIX remains, to this very day, a dark endless maze of ~~ ** ~~
catwalks and mantraps, an eternal hard-hat area that
kills the foolish and shelters the brave. (UNIX Manifesto)
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel