|
@@ -3053,6 +3053,17 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
|
|
|
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,
|