]> Pileus Git - ~andy/linux/blobdiff - drivers/usb/core/urb.c
Merge branch 'wimax-2.6.35.y' of git://git.kernel.org/pub/scm/linux/kernel/git/inaky...
[~andy/linux] / drivers / usb / core / urb.c
index 45a32dadb40664388169a67d1443cdd6e7cf086c..7c0555548ac862b9606600c38f9b48a94e144f57 100644 (file)
@@ -6,7 +6,7 @@
 #include <linux/log2.h>
 #include <linux/usb.h>
 #include <linux/wait.h>
-#include "hcd.h"
+#include <linux/usb/hcd.h>
 
 #define to_urb(d) container_of(d, struct urb, kref)
 
@@ -308,8 +308,7 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
         * will be required to set urb->ep directly and we will eliminate
         * urb->pipe.
         */
-       ep = (usb_pipein(urb->pipe) ? dev->ep_in : dev->ep_out)
-                       [usb_pipeendpoint(urb->pipe)];
+       ep = usb_pipe_endpoint(dev, urb->pipe);
        if (!ep)
                return -ENOENT;
 
@@ -333,9 +332,12 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
                is_out = usb_endpoint_dir_out(&ep->desc);
        }
 
-       /* Cache the direction for later use */
-       urb->transfer_flags = (urb->transfer_flags & ~URB_DIR_MASK) |
-                       (is_out ? URB_DIR_OUT : URB_DIR_IN);
+       /* Clear the internal flags and cache the direction for later use */
+       urb->transfer_flags &= ~(URB_DIR_MASK | URB_DMA_MAP_SINGLE |
+                       URB_DMA_MAP_PAGE | URB_DMA_MAP_SG | URB_MAP_LOCAL |
+                       URB_SETUP_MAP_SINGLE | URB_SETUP_MAP_LOCAL |
+                       URB_DMA_SG_COMBINED);
+       urb->transfer_flags |= (is_out ? URB_DIR_OUT : URB_DIR_IN);
 
        if (xfertype != USB_ENDPOINT_XFER_CONTROL &&
                        dev->state < USB_STATE_CONFIGURED)
@@ -396,8 +398,8 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
                return -EPIPE;          /* The most suitable error code :-) */
 
        /* enforce simple/standard policy */
-       allowed = (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP |
-                       URB_NO_INTERRUPT | URB_DIR_MASK | URB_FREE_BUFFER);
+       allowed = (URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT | URB_DIR_MASK |
+                       URB_FREE_BUFFER);
        switch (xfertype) {
        case USB_ENDPOINT_XFER_BULK:
                if (is_out)