* FILE: drivers/usb/usbehci/urbreq.c
* PURPOSE: URB Related Functions.
* PROGRAMMERS:
- * Michael Martin
+ * Michael Martin (mjmartin@reactos.org)
*/
#include "usbehci.h"
(*CtrlTD2)->NextPointer = TERMINATE_POINTER;
(*CtrlTD2)->AlternateNextPointer = TERMINATE_POINTER;
- (*CtrlTD2)->BufferPointer[0] = (ULONG)MmGetPhysicalAddress((PVOID) (*CtrlData)).LowPart;
+ if (Size == 0)
+ (*CtrlTD2)->BufferPointer[0] = 0;
+ else
+ (*CtrlTD2)->BufferPointer[0] = (ULONG)MmGetPhysicalAddress((PVOID) (*CtrlData)).LowPart;
(*CtrlTD2)->Token.Bits.DataToggle = TRUE;
(*CtrlTD2)->Token.Bits.InterruptOnComplete = TRUE;
(*CtrlTD2)->Token.Bits.TotalBytesToTransfer = Size;
(*CtrlTD3)->Token.Bits.Active = TRUE;
(*CtrlTD3)->Token.Bits.PIDCode = PID_CODE_OUT_TOKEN;
(*CtrlTD3)->Token.Bits.InterruptOnComplete = TRUE;
+ (*CtrlTD3)->Token.Bits.TotalBytesToTransfer = 0;
(*CtrlTD3)->Token.Bits.DataToggle = TRUE;
(*CtrlTD3)->Token.Bits.ErrorCounter = 0x03;
(*CtrlTD2)->NextPointer = (ULONG) MmGetPhysicalAddress((PVOID)(*CtrlTD3)).LowPart;
(PVOID)&CtrlData,
BufferLength);
+ QueueHead->EndPointCapabilities2.PortNumber = Port;
+ QueueHead->EndPointCapabilities1.DeviceAddress = Address;
+
CtrlSetup->bmRequestType._BM.Recipient = SetupPacket->bmRequestType._BM.Recipient;
CtrlSetup->bmRequestType._BM.Type = SetupPacket->bmRequestType._BM.Type;
CtrlSetup->bmRequestType._BM.Dir = SetupPacket->bmRequestType._BM.Dir;
CtrlSetup->wIndex.W = SetupPacket->wIndex.W;
CtrlSetup->wLength = SetupPacket->wLength;
-
- QueueHead->EndPointCapabilities1.DeviceAddress = Address;
- //QueueHead->EndPointCapabilities2.PortNumber = Port;
-
tmp = READ_REGISTER_ULONG((PULONG) (Base + EHCI_USBCMD));
UsbCmd = (PEHCI_USBCMD_CONTENT) &tmp;
UsbCmd->Run = FALSE;
for (;;)
{
- KeStallExecutionProcessor(10);
+ KeStallExecutionProcessor(100);
DPRINT("Waiting for completion!\n");
if (DeviceExtension->AsyncComplete == TRUE)
break;
}
+ UsbCmd->Run = FALSE;
+ WRITE_REGISTER_ULONG((PULONG)(Base + EHCI_USBCMD), tmp);
+
if (CtrlSetup->bmRequestType._BM.Dir == BMREQUEST_DEVICE_TO_HOST)
{
if ((Buffer) && (BufferLength))