field |= TRB_IDT | TRB_TYPE(TRB_SETUP);
        if (start_cycle == 0)
                field |= 0x1;
+
+       /* xHCI 1.0 6.4.1.2.1: Transfer Type field */
+       if (xhci->hci_version == 0x100) {
+               if (urb->transfer_buffer_length > 0) {
+                       if (setup->bRequestType & USB_DIR_IN)
+                               field |= TRB_TX_TYPE(TRB_DATA_IN);
+                       else
+                               field |= TRB_TX_TYPE(TRB_DATA_OUT);
+               }
+       }
+
        queue_trb(xhci, ep_ring, false, true,
                  setup->bRequestType | setup->bRequest << 8 | le16_to_cpu(setup->wValue) << 16,
                  le16_to_cpu(setup->wIndex) | le16_to_cpu(setup->wLength) << 16,
 
 
 /* Control transfer TRB specific fields */
 #define TRB_DIR_IN             (1<<16)
+#define        TRB_TX_TYPE(p)          ((p) << 16)
+#define        TRB_DATA_OUT            2
+#define        TRB_DATA_IN             3
 
 /* Isochronous TRB specific fields */
 #define TRB_SIA                        (1<<31)