Author: tfaber
Date: Sat Sep  2 22:48:45 2017
New Revision: 75745

URL: http://svn.reactos.org/svn/reactos?rev=75745&view=rev
Log:
[USBPORT]
Patch by Vadim Galyant:
- Move isochronous transfer functions to their own file
- Fix return type of PUSBPORT_COMPLETE_TRANSFER
- Improve some debug prints

Added:
    trunk/reactos/drivers/usb/usbport/iso.c
      - copied, changed from r75735, trunk/reactos/drivers/usb/usbport/usbport.c
Modified:
    trunk/reactos/drivers/usb/usbport/CMakeLists.txt
    trunk/reactos/drivers/usb/usbport/queue.c
    trunk/reactos/drivers/usb/usbport/usbport.c
    trunk/reactos/drivers/usb/usbport/usbport.h
    trunk/reactos/sdk/include/reactos/drivers/usbport/usbmport.h

Modified: trunk/reactos/drivers/usb/usbport/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbport/CMakeLists.txt?rev=75745&r1=75744&r2=75745&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbport/CMakeLists.txt    [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbport/CMakeLists.txt    [iso-8859-1] Sat Sep  2 
22:48:45 2017
@@ -7,6 +7,7 @@
     endpoint.c
     iface.c
     ioctl.c
+    iso.c
     pnp.c
     power.c
     queue.c

Copied: trunk/reactos/drivers/usb/usbport/iso.c (from r75735, 
trunk/reactos/drivers/usb/usbport/usbport.c)
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbport/iso.c?p2=trunk/reactos/drivers/usb/usbport/iso.c&p1=trunk/reactos/drivers/usb/usbport/usbport.c&r1=75735&r2=75745&rev=75745&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbport/usbport.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbport/iso.c     [iso-8859-1] Sat Sep  2 
22:48:45 2017
@@ -3,1973 +3,14 @@
 #define NDEBUG
 #include <debug.h>
 
-#define NDEBUG_USBPORT_CORE
-#define NDEBUG_USBPORT_INTERRUPT
-#define NDEBUG_USBPORT_TIMER
-#include "usbdebug.h"
-
-LIST_ENTRY USBPORT_MiniPortDrivers = {NULL, NULL};
-LIST_ENTRY USBPORT_USB1FdoList = {NULL, NULL};
-LIST_ENTRY USBPORT_USB2FdoList = {NULL, NULL};
-
-KSPIN_LOCK USBPORT_SpinLock;
-BOOLEAN USBPORT_Initialized = FALSE;
-
-PDEVICE_OBJECT
+USBD_STATUS
 NTAPI
-USBPORT_FindUSB2Controller(IN PDEVICE_OBJECT FdoDevice)
+USBPORT_InitializeIsoTransfer(PDEVICE_OBJECT FdoDevice,
+                              struct _URB_ISOCH_TRANSFER * Urb,
+                              PUSBPORT_TRANSFER Transfer)
 {
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_DEVICE_EXTENSION USB2FdoExtension;
-    KIRQL OldIrql;
-    PLIST_ENTRY USB2FdoEntry;
-    PDEVICE_OBJECT USB2FdoDevice = NULL;
-
-    DPRINT("USBPORT_FindUSB2Controller: FdoDevice - %p\n", FdoDevice);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    KeAcquireSpinLock(&USBPORT_SpinLock, &OldIrql);
-
-    USB2FdoEntry = USBPORT_USB2FdoList.Flink;
-
-    while (USB2FdoEntry && USB2FdoEntry != &USBPORT_USB2FdoList)
-    {
-        USB2FdoExtension = CONTAINING_RECORD(USB2FdoEntry,
-                                             USBPORT_DEVICE_EXTENSION,
-                                             ControllerLink);
-
-        if (USB2FdoExtension->BusNumber == FdoExtension->BusNumber &&
-            USB2FdoExtension->PciDeviceNumber == FdoExtension->PciDeviceNumber)
-        {
-            USB2FdoDevice = USB2FdoExtension->CommonExtension.SelfDevice;
-            break;
-        }
-
-        USB2FdoEntry = USB2FdoEntry->Flink;
-    }
-
-    KeReleaseSpinLock(&USBPORT_SpinLock, OldIrql);
-
-    return USB2FdoDevice;
-}
-
-VOID
-NTAPI
-USBPORT_AddUSB1Fdo(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-
-    DPRINT("USBPORT_AddUSB1Fdo: FdoDevice - %p\n", FdoDevice);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-    FdoExtension->Flags |= USBPORT_FLAG_REGISTERED_FDO;
-
-    ExInterlockedInsertTailList(&USBPORT_USB1FdoList,
-                                &FdoExtension->ControllerLink,
-                                &USBPORT_SpinLock);
-}
-
-VOID
-NTAPI
-USBPORT_AddUSB2Fdo(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-
-    DPRINT("USBPORT_AddUSB2Fdo: FdoDevice - %p\n", FdoDevice);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-    FdoExtension->Flags |= USBPORT_FLAG_REGISTERED_FDO;
-
-    ExInterlockedInsertTailList(&USBPORT_USB2FdoList,
-                                &FdoExtension->ControllerLink,
-                                &USBPORT_SpinLock);
-}
-
-VOID
-NTAPI
-USBPORT_RemoveUSBxFdo(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    KIRQL OldIrql;
-
-    DPRINT("USBPORT_RemoveUSBxFdo: FdoDevice - %p\n", FdoDevice);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    KeAcquireSpinLock(&USBPORT_SpinLock, &OldIrql);
-    RemoveEntryList(&FdoExtension->ControllerLink);
-    KeReleaseSpinLock(&USBPORT_SpinLock, OldIrql);
-
-    FdoExtension->Flags &= ~USBPORT_FLAG_REGISTERED_FDO;
-
-    FdoExtension->ControllerLink.Flink = NULL;
-    FdoExtension->ControllerLink.Blink = NULL;
-}
-
-BOOLEAN
-NTAPI
-USBPORT_IsCompanionFdoExtension(IN PDEVICE_OBJECT USB2FdoDevice,
-                                IN PUSBPORT_DEVICE_EXTENSION USB1FdoExtension)
-{
-    PUSBPORT_DEVICE_EXTENSION USB2FdoExtension;
-
-    DPRINT("USBPORT_IsCompanionFdoExtension: USB2Fdo - %p, USB1FdoExtension - 
%p\n",
-           USB2FdoDevice,
-           USB1FdoExtension);
-
-    USB2FdoExtension = USB2FdoDevice->DeviceExtension;
-
-    return USB2FdoExtension->BusNumber == USB1FdoExtension->BusNumber &&
-           USB2FdoExtension->PciDeviceNumber == 
USB1FdoExtension->PciDeviceNumber;
-}
-
-PDEVICE_RELATIONS
-NTAPI
-USBPORT_FindCompanionControllers(IN PDEVICE_OBJECT USB2FdoDevice,
-                                 IN BOOLEAN IsObRefer,
-                                 IN BOOLEAN IsFDOsReturned)
-{
-    PLIST_ENTRY USB1FdoList;
-    PUSBPORT_DEVICE_EXTENSION USB1FdoExtension;
-    ULONG NumControllers = 0; 
-    PDEVICE_OBJECT * Entry;
-    PDEVICE_RELATIONS ControllersList = NULL;
-    KIRQL OldIrql;
-
-    DPRINT("USBPORT_FindCompanionControllers: USB2Fdo - %p, IsObRefer - %x, 
IsFDOs - %x\n",
-           USB2FdoDevice,
-           IsObRefer,
-           IsFDOsReturned);
-
-    KeAcquireSpinLock(&USBPORT_SpinLock, &OldIrql);
-
-    USB1FdoList = USBPORT_USB1FdoList.Flink;
-
-    while (USB1FdoList && USB1FdoList != &USBPORT_USB1FdoList)
-    {
-        USB1FdoExtension = CONTAINING_RECORD(USB1FdoList,
-                                             USBPORT_DEVICE_EXTENSION,
-                                             ControllerLink);
-
-        if (USB1FdoExtension->Flags & USBPORT_FLAG_COMPANION_HC &&
-            USBPORT_IsCompanionFdoExtension(USB2FdoDevice, USB1FdoExtension))
-        {
-            ++NumControllers;
-        }
-
-        USB1FdoList = USB1FdoExtension->ControllerLink.Flink;
-    }
-
-    DPRINT("USBPORT_FindCompanionControllers: NumControllers - %x\n",
-           NumControllers);
-
-    if (!NumControllers)
-    {
-        goto Exit;
-    }
-
-    ControllersList = ExAllocatePoolWithTag(NonPagedPool,
-                                            NumControllers * 
sizeof(DEVICE_RELATIONS),
-                                            USB_PORT_TAG);
-
-    if (!ControllersList)
-    {
-        goto Exit;
-    }
-
-    RtlZeroMemory(ControllersList, NumControllers * sizeof(DEVICE_RELATIONS));
-
-    ControllersList->Count = NumControllers;
-
-    USB1FdoList = USBPORT_USB1FdoList.Flink;
-
-    Entry = &ControllersList->Objects[0];
-
-    while (USB1FdoList && USB1FdoList != &USBPORT_USB1FdoList)
-    {
-        USB1FdoExtension = CONTAINING_RECORD(USB1FdoList,
-                                             USBPORT_DEVICE_EXTENSION,
-                                             ControllerLink);
-
-        if (USB1FdoExtension->Flags & USBPORT_FLAG_COMPANION_HC &&
-            USBPORT_IsCompanionFdoExtension(USB2FdoDevice, USB1FdoExtension))
-        {
-            *Entry = USB1FdoExtension->CommonExtension.LowerPdoDevice;
-
-            if (IsObRefer)
-            {
-                
ObReferenceObject(USB1FdoExtension->CommonExtension.LowerPdoDevice);
-            }
-
-            if (IsFDOsReturned)
-            {
-                *Entry = USB1FdoExtension->CommonExtension.SelfDevice;
-            }
-
-            ++Entry;
-        }
-
-        USB1FdoList = USB1FdoExtension->ControllerLink.Flink;
-    }
-
-Exit:
-
-    KeReleaseSpinLock(&USBPORT_SpinLock, OldIrql);
-
-    return ControllersList;
-}
-
-MPSTATUS
-NTAPI
-USBPORT_NtStatusToMpStatus(NTSTATUS NtStatus)
-{
-    DPRINT("USBPORT_NtStatusToMpStatus: NtStatus - %x\n", NtStatus);
-
-    if (NtStatus == STATUS_SUCCESS)
-    {
-        return MP_STATUS_SUCCESS;
-    }
-    else
-    {
-        return MP_STATUS_UNSUCCESSFUL;
-    }
-}
-
-NTSTATUS
-NTAPI
-USBPORT_SetRegistryKeyValue(IN PDEVICE_OBJECT DeviceObject,
-                            IN BOOL UseDriverKey,
-                            IN ULONG Type,
-                            IN PCWSTR ValueNameString,
-                            IN PVOID Data,
-                            IN ULONG DataSize)
-{
-    UNICODE_STRING ValueName;
-    HANDLE KeyHandle;
-    NTSTATUS Status;
-
-    DPRINT("USBPORT_SetRegistryKeyValue: ValueNameString - %S \n",
-           ValueNameString);
-
-    if (UseDriverKey)
-    {
-        Status = IoOpenDeviceRegistryKey(DeviceObject,
-                                         PLUGPLAY_REGKEY_DRIVER,
-                                         STANDARD_RIGHTS_ALL,
-                                         &KeyHandle);
-    }
-    else
-    {
-        Status = IoOpenDeviceRegistryKey(DeviceObject,
-                                         PLUGPLAY_REGKEY_DEVICE,
-                                         STANDARD_RIGHTS_ALL,
-                                         &KeyHandle);
-    }
-
-    if (NT_SUCCESS(Status))
-    {
-        RtlInitUnicodeString(&ValueName, ValueNameString);
-
-        Status = ZwSetValueKey(KeyHandle,
-                               &ValueName,
-                               0,
-                               Type,
-                               Data,
-                               DataSize);
-
-        ZwClose(KeyHandle);
-    }
-
-    return Status;
-}
-
-NTSTATUS
-NTAPI
-USBPORT_GetRegistryKeyValueFullInfo(IN PDEVICE_OBJECT FdoDevice,
-                                    IN PDEVICE_OBJECT PdoDevice,
-                                    IN BOOL UseDriverKey,
-                                    IN PCWSTR SourceString,
-                                    IN ULONG LengthStr,
-                                    IN PVOID Buffer,
-                                    IN ULONG BufferLength)
-{
-    NTSTATUS Status;
-    PKEY_VALUE_FULL_INFORMATION KeyValue;
-    UNICODE_STRING ValueName;
-    HANDLE KeyHandle;
-    ULONG LengthKey;
-
-    DPRINT("USBPORT_GetRegistryKeyValue: UseDriverKey - %x, SourceString - %S, 
LengthStr - %x, Buffer - %p, BufferLength - %x\n",
-           UseDriverKey,
-           SourceString,
-           LengthStr,
-           Buffer,
-           BufferLength);
-
-    if (UseDriverKey)
-    {
-        Status = IoOpenDeviceRegistryKey(PdoDevice,
-                                         PLUGPLAY_REGKEY_DRIVER,
-                                         STANDARD_RIGHTS_ALL,
-                                         &KeyHandle);
-    }
-    else
-    {
-        Status = IoOpenDeviceRegistryKey(PdoDevice,
-                                         PLUGPLAY_REGKEY_DEVICE,
-                                         STANDARD_RIGHTS_ALL,
-                                         &KeyHandle);
-    }
-
-    if (NT_SUCCESS(Status))
-    {
-        RtlInitUnicodeString(&ValueName, SourceString);
-
-        LengthKey = sizeof(KEY_VALUE_FULL_INFORMATION) +
-                    LengthStr +
-                    BufferLength;
-
-        KeyValue = ExAllocatePoolWithTag(PagedPool,
-                                         LengthKey,
-                                         USB_PORT_TAG);
-
-        if (KeyValue)
-        {
-            RtlZeroMemory(KeyValue, LengthKey);
-
-            Status = ZwQueryValueKey(KeyHandle,
-                                     &ValueName,
-                                     KeyValueFullInformation,
-                                     KeyValue,
-                                     LengthKey,
-                                     &LengthKey);
-
-            if (NT_SUCCESS(Status))
-            {
-                RtlCopyMemory(Buffer,
-                              (PUCHAR)KeyValue + KeyValue->DataOffset,
-                              BufferLength);
-            }
-
-            ExFreePoolWithTag(KeyValue, USB_PORT_TAG);
-        }
-
-        ZwClose(KeyHandle);
-    }
-
-    return Status;
-}
-
-MPSTATUS
-NTAPI
-USBPORT_GetMiniportRegistryKeyValue(IN PVOID MiniPortExtension,
-                                    IN BOOL UseDriverKey,
-                                    IN PCWSTR SourceString,
-                                    IN SIZE_T LengthStr,
-                                    IN PVOID Buffer,
-                                    IN SIZE_T BufferLength)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDEVICE_OBJECT FdoDevice;
-    NTSTATUS Status;
-
-    DPRINT("USBPORT_GetMiniportRegistryKeyValue: MiniPortExtension - %p, 
UseDriverKey - %x, SourceString - %S, LengthStr - %x, Buffer - %p, BufferLength 
- %x\n",
-           MiniPortExtension,
-           UseDriverKey,
-           SourceString,
-           LengthStr,
-           Buffer,
-           BufferLength);
-
-    FdoExtension = (PUSBPORT_DEVICE_EXTENSION)((ULONG_PTR)MiniPortExtension -
-                                               
sizeof(USBPORT_DEVICE_EXTENSION));
-
-    FdoDevice = FdoExtension->CommonExtension.SelfDevice;
-
-    Status = USBPORT_GetRegistryKeyValueFullInfo(FdoDevice,
-                                                 
FdoExtension->CommonExtension.LowerPdoDevice,
-                                                 UseDriverKey,
-                                                 SourceString,
-                                                 LengthStr,
-                                                 Buffer,
-                                                 BufferLength);
-
-    return USBPORT_NtStatusToMpStatus(Status);
-}
-
-NTSTATUS
-NTAPI
-USBPORT_GetSetConfigSpaceData(IN PDEVICE_OBJECT FdoDevice,
-                              IN BOOLEAN IsReadData,
-                              IN PVOID Buffer,
-                              IN ULONG Offset,
-                              IN ULONG Length)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    ULONG BytesReadWrite;
-
-    DPRINT("USBPORT_GetSetConfigSpaceData ... \n");
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    BytesReadWrite = Length;
-
-    if (IsReadData)
-    {
-        RtlZeroMemory(Buffer, Length);
-
-        BytesReadWrite = (*FdoExtension->BusInterface.GetBusData)
-                          (FdoExtension->BusInterface.Context,
-                           PCI_WHICHSPACE_CONFIG,
-                           Buffer,
-                           Offset,
-                           Length);
-    }
-    else
-    {
-        BytesReadWrite = (*FdoExtension->BusInterface.SetBusData)
-                          (FdoExtension->BusInterface.Context,
-                           PCI_WHICHSPACE_CONFIG,
-                           Buffer,
-                           Offset,
-                           Length);
-    }
-
-    if (BytesReadWrite == Length)
-    {
-        return STATUS_SUCCESS;
-    }
-
-    return STATUS_UNSUCCESSFUL;
-}
-
-MPSTATUS
-NTAPI
-USBPORT_ReadWriteConfigSpace(IN PVOID MiniPortExtension,
-                             IN BOOLEAN IsReadData,
-                             IN PVOID Buffer,
-                             IN ULONG Offset,
-                             IN ULONG Length)
-{
-    NTSTATUS Status;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDEVICE_OBJECT FdoDevice;
-
-    DPRINT("USBPORT_ReadWriteConfigSpace: ... \n");
-
-    //FdoExtension->MiniPortExt = (PVOID)((ULONG_PTR)FdoExtension + 
sizeof(USBPORT_DEVICE_EXTENSION));
-    FdoExtension = (PUSBPORT_DEVICE_EXTENSION)((ULONG_PTR)MiniPortExtension -
-                                               
sizeof(USBPORT_DEVICE_EXTENSION));
-
-    FdoDevice = FdoExtension->CommonExtension.SelfDevice;
-
-    Status = USBPORT_GetSetConfigSpaceData(FdoDevice,
-                                           IsReadData,
-                                           Buffer,
-                                           Offset,
-                                           Length);
-
-    return USBPORT_NtStatusToMpStatus(Status);
-}
-
-NTSTATUS
-NTAPI
-USBPORT_USBDStatusToNtStatus(IN PURB Urb,
-                             IN USBD_STATUS USBDStatus)
-{
-    NTSTATUS Status;
-
-    if (USBD_ERROR(USBDStatus))
-    {
-        DPRINT1("USBPORT_USBDStatusToNtStatus: Urb - %p, USBDStatus - %x\n",
-                Urb,
-                USBDStatus);
-    }
-
-    if (Urb)
-        Urb->UrbHeader.Status = USBDStatus;
-
-    switch (USBDStatus)
-    {
-        case USBD_STATUS_SUCCESS:
-            Status = STATUS_SUCCESS;
-            break;
-
-        case USBD_STATUS_INSUFFICIENT_RESOURCES:
-            Status = STATUS_INSUFFICIENT_RESOURCES;
-            break;
-
-        case USBD_STATUS_DEVICE_GONE:
-            Status = STATUS_DEVICE_NOT_CONNECTED;
-            break;
-
-        case USBD_STATUS_CANCELED:
-            Status = STATUS_CANCELLED;
-            break;
-
-        case USBD_STATUS_NOT_SUPPORTED:
-            Status = STATUS_NOT_SUPPORTED;
-            break;
-
-        case USBD_STATUS_INVALID_URB_FUNCTION:
-        case USBD_STATUS_INVALID_PARAMETER:
-        case USBD_STATUS_INVALID_PIPE_HANDLE:
-        case USBD_STATUS_BAD_START_FRAME:
-            Status = STATUS_INVALID_PARAMETER;
-            break;
-
-        default:
-            if (USBD_ERROR(USBDStatus))
-                Status = STATUS_UNSUCCESSFUL;
-            else
-                Status = STATUS_SUCCESS;
-
-            break;
-    }
-
-    return Status;
-}
-
-NTSTATUS
-NTAPI
-USBPORT_Wait(IN PVOID MiniPortExtension,
-             IN ULONG Milliseconds)
-{
-    LARGE_INTEGER Interval = {{0, 0}};
-
-    DPRINT("USBPORT_Wait: Milliseconds - %x\n", Milliseconds);
-    Interval.QuadPart -= 10000 * Milliseconds + (KeQueryTimeIncrement() - 1);
-    return KeDelayExecutionThread(KernelMode, FALSE, &Interval);
-}
-
-VOID
-NTAPI
-USBPORT_MiniportInterrupts(IN PDEVICE_OBJECT FdoDevice,
-                           IN BOOLEAN IsEnable)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_REGISTRATION_PACKET Packet;
-    BOOLEAN IsLock;
-    KIRQL OldIrql;
-
-    DPRINT_INT("USBPORT_MiniportInterrupts: IsEnable - %p\n", IsEnable);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-    Packet = &FdoExtension->MiniPortInterface->Packet;
-
-    IsLock = (Packet->MiniPortFlags & USB_MINIPORT_FLAGS_NOT_LOCK_INT) == 0;
-
-    if (IsLock)
-        KeAcquireSpinLock(&FdoExtension->MiniportSpinLock, &OldIrql);
-
-    if (IsEnable)
-    {
-        FdoExtension->Flags |= USBPORT_FLAG_INTERRUPT_ENABLED;
-        Packet->EnableInterrupts(FdoExtension->MiniPortExt);
-    }
-    else
-    {
-        Packet->DisableInterrupts(FdoExtension->MiniPortExt);
-        FdoExtension->Flags &= ~USBPORT_FLAG_INTERRUPT_ENABLED;
-    }
-
-    if (IsLock)
-        KeReleaseSpinLock(&FdoExtension->MiniportSpinLock, OldIrql);
-}
-
-VOID
-NTAPI
-USBPORT_SoftInterruptDpc(IN PRKDPC Dpc,
-                         IN PVOID DeferredContext,
-                         IN PVOID SystemArgument1,
-                         IN PVOID SystemArgument2)
-{
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-
-    DPRINT("USBPORT_SoftInterruptDpc: ... \n");
-
-    FdoDevice = DeferredContext;
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    if (!KeInsertQueueDpc(&FdoExtension->IsrDpc, NULL, (PVOID)1))
-    {
-        InterlockedDecrement(&FdoExtension->IsrDpcCounter);
-    }
-}
-
-VOID
-NTAPI
-USBPORT_SoftInterrupt(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    LARGE_INTEGER DueTime = {{0, 0}};
-
-    DPRINT("USBPORT_SoftInterrupt: ... \n");
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    KeInitializeTimer(&FdoExtension->TimerSoftInterrupt);
-
-    KeInitializeDpc(&FdoExtension->SoftInterruptDpc,
-                    USBPORT_SoftInterruptDpc,
-                    FdoDevice);
-
-    DueTime.QuadPart -= 10000 + (KeQueryTimeIncrement() - 1);
-
-    KeSetTimer(&FdoExtension->TimerSoftInterrupt,
-               DueTime,
-               &FdoExtension->SoftInterruptDpc);
-}
-
-VOID
-NTAPI
-USBPORT_InvalidateControllerHandler(IN PDEVICE_OBJECT FdoDevice,
-                                    IN ULONG Type)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-
-    DPRINT("USBPORT_InvalidateControllerHandler: Invalidate Type - %x\n",
-           Type);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    switch (Type)
-    {
-        case USBPORT_INVALIDATE_CONTROLLER_RESET:
-            DPRINT1("USBPORT_InvalidateControllerHandler: 
INVALIDATE_CONTROLLER_RESET UNIMPLEMENTED. FIXME. \n");
-            break;
-
-        case USBPORT_INVALIDATE_CONTROLLER_SURPRISE_REMOVE:
-            DPRINT1("USBPORT_InvalidateControllerHandler: 
INVALIDATE_CONTROLLER_SURPRISE_REMOVE UNIMPLEMENTED. FIXME. \n");
-            break;
-
-        case USBPORT_INVALIDATE_CONTROLLER_SOFT_INTERRUPT:
-            if (InterlockedIncrement(&FdoExtension->IsrDpcCounter))
-            {
-                InterlockedDecrement(&FdoExtension->IsrDpcCounter);
-            }
-            else
-            {
-                USBPORT_SoftInterrupt(FdoDevice);
-            }
-            break;
-    }
-}
-
-ULONG
-NTAPI
-USBPORT_InvalidateController(IN PVOID MiniPortExtension,
-                             IN ULONG Type)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDEVICE_OBJECT FdoDevice;
-
-    DPRINT("USBPORT_InvalidateController: Invalidate Type - %x\n", Type);
-
-    //FdoExtension->MiniPortExt = (PVOID)((ULONG_PTR)FdoExtension + 
sizeof(USBPORT_DEVICE_EXTENSION));
-    FdoExtension = (PUSBPORT_DEVICE_EXTENSION)((ULONG_PTR)MiniPortExtension -
-                                               
sizeof(USBPORT_DEVICE_EXTENSION));
-    FdoDevice = FdoExtension->CommonExtension.SelfDevice;
-
-    USBPORT_InvalidateControllerHandler(FdoDevice, Type);
-
-    return 0;
-}
-
-ULONG
-NTAPI
-USBPORT_NotifyDoubleBuffer(IN PVOID MiniPortExtension,
-                           IN PVOID MiniPortTransfer,
-                           IN PVOID Buffer,
-                           IN SIZE_T Length)
-{
-    DPRINT1("USBPORT_NotifyDoubleBuffer: UNIMPLEMENTED. FIXME. \n");
-    return 0;
-}
-
-VOID
-NTAPI
-USBPORT_WorkerRequestDpc(IN PRKDPC Dpc,
-                         IN PVOID DeferredContext,
-                         IN PVOID SystemArgument1,
-                         IN PVOID SystemArgument2)
-{
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-
-    DPRINT("USBPORT_WorkerRequestDpc: ... \n");
-
-    FdoDevice = DeferredContext;
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    if (!InterlockedIncrement(&FdoExtension->IsrDpcHandlerCounter))
-    {
-        USBPORT_DpcHandler(FdoDevice);
-    }
-
-    InterlockedDecrement(&FdoExtension->IsrDpcHandlerCounter);
-}
-
-VOID
-NTAPI
-USBPORT_DoneTransfer(IN PUSBPORT_TRANSFER Transfer)
-{
-    PUSBPORT_ENDPOINT          Endpoint;
-    PDEVICE_OBJECT             FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION  FdoExtension;
-    PURB                       Urb;
-    PIRP                       Irp;
-    KIRQL                      CancelIrql;
-    KIRQL                      OldIrql;
-
-    DPRINT_CORE("USBPORT_DoneTransfer: Transfer - %p\n", Transfer);
-
-    Endpoint = Transfer->Endpoint;
-    FdoDevice = Endpoint->FdoDevice;
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    Urb = Transfer->Urb;
-    Irp = Transfer->Irp;
-
-    KeAcquireSpinLock(&FdoExtension->FlushTransferSpinLock, &OldIrql);
-
-    if (Irp)
-    {
-        IoAcquireCancelSpinLock(&CancelIrql);
-        IoSetCancelRoutine(Irp, NULL);
-        IoReleaseCancelSpinLock(CancelIrql);
-
-        USBPORT_RemoveActiveTransferIrp(FdoDevice, Irp);
-    }
-
-    KeReleaseSpinLock(&FdoExtension->FlushTransferSpinLock, OldIrql);
-
-    USBPORT_USBDStatusToNtStatus(Transfer->Urb, Transfer->USBDStatus);
-    USBPORT_CompleteTransfer(Urb, Urb->UrbHeader.Status);
-
-    DPRINT_CORE("USBPORT_DoneTransfer: exit\n");
-}
-
-VOID
-NTAPI
-USBPORT_FlushDoneTransfers(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PLIST_ENTRY DoneTransferList;
-    PUSBPORT_TRANSFER Transfer;
-    PUSBPORT_ENDPOINT Endpoint;
-    ULONG TransferCount;
-    KIRQL OldIrql;
-    BOOLEAN IsHasTransfers;
-
-    DPRINT_CORE("USBPORT_FlushDoneTransfers: ... \n");
-
-    FdoExtension = FdoDevice->DeviceExtension;
-    DoneTransferList = &FdoExtension->DoneTransferList;
-
-    while (TRUE)
-    {
-        KeAcquireSpinLock(&FdoExtension->DoneTransferSpinLock, &OldIrql);
-
-        if (IsListEmpty(DoneTransferList))
-            break;
-
-        Transfer = CONTAINING_RECORD(DoneTransferList->Flink,
-                                     USBPORT_TRANSFER,
-                                     TransferLink);
-
-        RemoveHeadList(DoneTransferList);
-        KeReleaseSpinLock(&FdoExtension->DoneTransferSpinLock, OldIrql);
-
-        if (Transfer)
-        {
-            Endpoint = Transfer->Endpoint;
-
-            if ((Transfer->Flags & TRANSFER_FLAG_SPLITED))
-            {
-                ASSERT(FALSE);// USBPORT_DoneSplitTransfer(Transfer);
-            }
-            else
-            {
-                USBPORT_DoneTransfer(Transfer);
-            }
-
-            IsHasTransfers = USBPORT_EndpointHasQueuedTransfers(FdoDevice,
-                                                                Endpoint,
-                                                                
&TransferCount);
-
-            if (IsHasTransfers && !TransferCount)
-            {
-                USBPORT_InvalidateEndpointHandler(FdoDevice,
-                                                  Endpoint,
-                                                  
INVALIDATE_ENDPOINT_WORKER_DPC);
-            }
-        }
-    }
-
-    KeReleaseSpinLock(&FdoExtension->DoneTransferSpinLock, OldIrql);
-}
-
-
-VOID
-NTAPI
-USBPORT_TransferFlushDpc(IN PRKDPC Dpc,
-                         IN PVOID DeferredContext,
-                         IN PVOID SystemArgument1,
-                         IN PVOID SystemArgument2)
-{
-    PDEVICE_OBJECT FdoDevice;
-
-    DPRINT_CORE("USBPORT_TransferFlushDpc: ... \n");
-    FdoDevice = DeferredContext;
-    USBPORT_FlushDoneTransfers(FdoDevice);
-}
-
-BOOLEAN
-NTAPI
-USBPORT_QueueDoneTransfer(IN PUSBPORT_TRANSFER Transfer,
-                          IN USBD_STATUS USBDStatus)
-{
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION  FdoExtension;
-
-    DPRINT_CORE("USBPORT_QueueDoneTransfer: Transfer - %p, USBDStatus - %p\n",
-                Transfer,
-                USBDStatus);
-
-    FdoDevice = Transfer->Endpoint->FdoDevice;
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    RemoveEntryList(&Transfer->TransferLink);
-    Transfer->USBDStatus = USBDStatus;
-
-    ExInterlockedInsertTailList(&FdoExtension->DoneTransferList,
-                                &Transfer->TransferLink,
-                                &FdoExtension->DoneTransferSpinLock);
-
-    return KeInsertQueueDpc(&FdoExtension->TransferFlushDpc, NULL, NULL);
-}
-
-VOID
-NTAPI
-USBPORT_DpcHandler(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_ENDPOINT Endpoint;
-    PLIST_ENTRY Entry;
-    LIST_ENTRY List;
-    LONG LockCounter;
-
-    DPRINT("USBPORT_DpcHandler: ... \n");
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    InitializeListHead(&List);
-
-    KeAcquireSpinLockAtDpcLevel(&FdoExtension->EndpointListSpinLock);
-    Entry = FdoExtension->EndpointList.Flink;
-
-    while (Entry && Entry != &FdoExtension->EndpointList)
-    {
-        Endpoint = CONTAINING_RECORD(Entry,
-                                     USBPORT_ENDPOINT,
-                                     EndpointLink);
-
-        LockCounter = InterlockedIncrement(&Endpoint->LockCounter);
-
-        if (USBPORT_GetEndpointState(Endpoint) != USBPORT_ENDPOINT_ACTIVE ||
-            LockCounter ||
-            Endpoint->Flags & ENDPOINT_FLAG_ROOTHUB_EP0)
-        {
-            InterlockedDecrement(&Endpoint->LockCounter);
-        }
-        else
-        {
-            InsertTailList(&List, &Endpoint->DispatchLink);
-
-            if (Endpoint->WorkerLink.Flink && Endpoint->WorkerLink.Blink)
-            {
-                RemoveEntryList(&Endpoint->WorkerLink);
-
-                Endpoint->WorkerLink.Flink = NULL;
-                Endpoint->WorkerLink.Blink = NULL;
-            }
-        }
-
-        Entry = Endpoint->EndpointLink.Flink;
-    }
-
-    KeReleaseSpinLockFromDpcLevel(&FdoExtension->EndpointListSpinLock);
-
-    while (!IsListEmpty(&List))
-    {
-        Endpoint = CONTAINING_RECORD(List.Flink,
-                                     USBPORT_ENDPOINT,
-                                     DispatchLink);
-
-        RemoveEntryList(List.Flink);
-        Endpoint->DispatchLink.Flink = NULL;
-        Endpoint->DispatchLink.Blink = NULL;
-
-        USBPORT_EndpointWorker(Endpoint, TRUE);
-        USBPORT_FlushPendingTransfers(Endpoint);
-    }
-
-    KeAcquireSpinLockAtDpcLevel(&FdoExtension->EndpointListSpinLock);
-
-    if (!IsListEmpty(&FdoExtension->WorkerList))
-    {
-        USBPORT_SignalWorkerThread(FdoDevice);
-    }
-
-    KeReleaseSpinLockFromDpcLevel(&FdoExtension->EndpointListSpinLock);
-
-    USBPORT_FlushDoneTransfers(FdoDevice);
-}
-
-VOID
-NTAPI
-USBPORT_IsrDpcHandler(IN PDEVICE_OBJECT FdoDevice,
-                      IN BOOLEAN IsDpcHandler)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_REGISTRATION_PACKET Packet;
-    PUSBPORT_ENDPOINT Endpoint;
-    PLIST_ENTRY List;
-    ULONG FrameNumber;
-
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
-
-    DPRINT_CORE("USBPORT_IsrDpcHandler: IsDpcHandler - %x\n", IsDpcHandler);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-    Packet = &FdoExtension->MiniPortInterface->Packet;
-
-    if (InterlockedIncrement(&FdoExtension->IsrDpcHandlerCounter))
-    {
-        KeInsertQueueDpc(&FdoExtension->IsrDpc, NULL, NULL);
-        InterlockedDecrement(&FdoExtension->IsrDpcHandlerCounter);
-        return;
-    }
-
-    for (List = ExInterlockedRemoveHeadList(&FdoExtension->EpStateChangeList,
-                                            
&FdoExtension->EpStateChangeSpinLock);
-         List != NULL;
-         List = ExInterlockedRemoveHeadList(&FdoExtension->EpStateChangeList,
-                                            
&FdoExtension->EpStateChangeSpinLock))
-    {
-        Endpoint = CONTAINING_RECORD(List,
-                                     USBPORT_ENDPOINT,
-                                     StateChangeLink);
-
-        DPRINT_CORE("USBPORT_IsrDpcHandler: Endpoint - %p\n", Endpoint);
-
-        KeAcquireSpinLockAtDpcLevel(&Endpoint->EndpointSpinLock);
-
-        KeAcquireSpinLockAtDpcLevel(&FdoExtension->MiniportSpinLock);
-        FrameNumber = Packet->Get32BitFrameNumber(FdoExtension->MiniPortExt);
-        KeReleaseSpinLockFromDpcLevel(&FdoExtension->MiniportSpinLock);
-
-        if (FrameNumber <= Endpoint->FrameNumber &&
-            !(Endpoint->Flags & ENDPOINT_FLAG_NUKE))
-        {
-            KeReleaseSpinLockFromDpcLevel(&Endpoint->EndpointSpinLock);
-
-            ExInterlockedInsertHeadList(&FdoExtension->EpStateChangeList,
-                                        &Endpoint->StateChangeLink,
-                                        &FdoExtension->EpStateChangeSpinLock);
-
-            KeAcquireSpinLockAtDpcLevel(&FdoExtension->MiniportSpinLock);
-            Packet->InterruptNextSOF(FdoExtension->MiniPortExt);
-            KeReleaseSpinLockFromDpcLevel(&FdoExtension->MiniportSpinLock);
-
-            break;
-        }
-
-        KeReleaseSpinLockFromDpcLevel(&Endpoint->EndpointSpinLock);
-
-        KeAcquireSpinLockAtDpcLevel(&Endpoint->StateChangeSpinLock);
-        Endpoint->StateLast = Endpoint->StateNext;
-        KeReleaseSpinLockFromDpcLevel(&Endpoint->StateChangeSpinLock);
-
-        DPRINT_CORE("USBPORT_IsrDpcHandler: Endpoint->StateLast - %x\n",
-                    Endpoint->StateLast);
-
-        if (IsDpcHandler)
-        {
-            USBPORT_InvalidateEndpointHandler(FdoDevice,
-                                              Endpoint,
-                                              INVALIDATE_ENDPOINT_ONLY);
-        }
-        else
-        {
-            USBPORT_InvalidateEndpointHandler(FdoDevice,
-                                              Endpoint,
-                                              
INVALIDATE_ENDPOINT_WORKER_THREAD);
-        }
-    }
-
-    if (IsDpcHandler)
-    {
-        USBPORT_DpcHandler(FdoDevice);
-    }
-
-    InterlockedDecrement(&FdoExtension->IsrDpcHandlerCounter);
-}
-
-VOID
-NTAPI
-USBPORT_IsrDpc(IN PRKDPC Dpc,
-               IN PVOID DeferredContext,
-               IN PVOID SystemArgument1,
-               IN PVOID SystemArgument2)
-{
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_REGISTRATION_PACKET Packet;
-    BOOLEAN InterruptEnable;
-
-    DPRINT_INT("USBPORT_IsrDpc: DeferredContext - %p, SystemArgument2 - %p\n",
-               DeferredContext,
-               SystemArgument2);
-
-    FdoDevice = DeferredContext;
-    FdoExtension = FdoDevice->DeviceExtension;
-    Packet = &FdoExtension->MiniPortInterface->Packet;
-
-    if (SystemArgument2)
-    {
-        InterlockedDecrement(&FdoExtension->IsrDpcCounter);
-    }
-
-    KeAcquireSpinLockAtDpcLevel(&FdoExtension->MiniportInterruptsSpinLock);
-    InterruptEnable = (FdoExtension->Flags & USBPORT_FLAG_INTERRUPT_ENABLED) ==
-                       USBPORT_FLAG_INTERRUPT_ENABLED;
-
-    Packet->InterruptDpc(FdoExtension->MiniPortExt, InterruptEnable);
-
-    KeReleaseSpinLockFromDpcLevel(&FdoExtension->MiniportInterruptsSpinLock);
-
-    if (FdoExtension->Flags & USBPORT_FLAG_HC_SUSPEND &&
-        FdoExtension->TimerFlags & USBPORT_TMFLAG_WAKE)
-    {
-        USBPORT_CompletePdoWaitWake(FdoDevice);
-    }
-    else
-    {
-        USBPORT_IsrDpcHandler(FdoDevice, TRUE);
-    }
-
-    DPRINT_INT("USBPORT_IsrDpc: exit\n");
-}
-
-BOOLEAN
-NTAPI
-USBPORT_InterruptService(IN PKINTERRUPT Interrupt,
-                         IN PVOID ServiceContext)
-{
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_REGISTRATION_PACKET Packet;
-    BOOLEAN Result = FALSE;
-
-    FdoDevice = ServiceContext;
-    FdoExtension = FdoDevice->DeviceExtension;
-    Packet = &FdoExtension->MiniPortInterface->Packet;
-
-    DPRINT_INT("USBPORT_InterruptService: FdoExtension->Flags - %lx\n",
-           FdoExtension->Flags);
-
-    if (FdoExtension->Flags & USBPORT_FLAG_INTERRUPT_ENABLED &&
-        FdoExtension->MiniPortFlags & USBPORT_MPFLAG_INTERRUPTS_ENABLED)
-    {
-        Result = Packet->InterruptService(FdoExtension->MiniPortExt);
-
-        if (Result)
-        {
-            KeInsertQueueDpc(&FdoExtension->IsrDpc, NULL, NULL);
-        }
-    }
-
-    DPRINT_INT("USBPORT_InterruptService: return - %x\n", Result);
-
-    return Result;
-}
-
-VOID
-NTAPI
-USBPORT_SignalWorkerThread(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    KIRQL OldIrql;
-
-    DPRINT_CORE("USBPORT_SignalWorkerThread ... \n");
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    KeAcquireSpinLock(&FdoExtension->WorkerThreadEventSpinLock, &OldIrql);
-    KeSetEvent(&FdoExtension->WorkerThreadEvent, EVENT_INCREMENT, FALSE);
-    KeReleaseSpinLock(&FdoExtension->WorkerThreadEventSpinLock, OldIrql);
-}
-
-VOID
-NTAPI
-USBPORT_WorkerThreadHandler(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_REGISTRATION_PACKET Packet;
-    PLIST_ENTRY workerList;
-    KIRQL OldIrql;
-    PUSBPORT_ENDPOINT Endpoint;
-    LIST_ENTRY list;
-    BOOLEAN Result;
-
-    DPRINT_CORE("USBPORT_WorkerThreadHandler: ... \n");
-
-    FdoExtension = FdoDevice->DeviceExtension;
-    Packet = &FdoExtension->MiniPortInterface->Packet;
-
-    KeAcquireSpinLock(&FdoExtension->MiniportSpinLock, &OldIrql);
-
-    if (!(FdoExtension->Flags & USBPORT_FLAG_HC_SUSPEND))
-    {
-        Packet->CheckController(FdoExtension->MiniPortExt);
-    }
-
-    KeReleaseSpinLock(&FdoExtension->MiniportSpinLock, OldIrql);
-
-    InitializeListHead(&list);
-
-    USBPORT_FlushAllEndpoints(FdoDevice);
-
-    while (TRUE)
-    {
-        KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
-        KeAcquireSpinLockAtDpcLevel(&FdoExtension->EndpointListSpinLock);
-
-        workerList = &FdoExtension->WorkerList;
-
-        if (IsListEmpty(workerList))
-            break;
-
-        Endpoint = CONTAINING_RECORD(workerList->Flink,
-                                     USBPORT_ENDPOINT,
-                                     WorkerLink);
-
-        DPRINT_CORE("USBPORT_WorkerThreadHandler: Endpoint - %p\n", Endpoint);
-
-        RemoveHeadList(workerList);
-        Endpoint->WorkerLink.Blink = NULL;
-        Endpoint->WorkerLink.Flink = NULL;
-
-        KeReleaseSpinLockFromDpcLevel(&FdoExtension->EndpointListSpinLock);
-
-        Result = USBPORT_EndpointWorker(Endpoint, FALSE);
-        KeAcquireSpinLockAtDpcLevel(&FdoExtension->EndpointListSpinLock);
-
-        if (Result)
-        {
-            if (Endpoint->FlushAbortLink.Flink == NULL ||
-                Endpoint->FlushAbortLink.Blink == NULL)
-            {
-                InsertTailList(&list, &Endpoint->FlushAbortLink);
-            }
-        }
-
-        while (!IsListEmpty(&list))
-        {
-            Endpoint = CONTAINING_RECORD(list.Flink,
-                                         USBPORT_ENDPOINT,
-                                         FlushAbortLink);
-
-            RemoveHeadList(&list);
-
-            Endpoint->FlushAbortLink.Flink = NULL;
-            Endpoint->FlushAbortLink.Blink = NULL;
-
-            if (Endpoint->WorkerLink.Flink == NULL ||
-                Endpoint->WorkerLink.Blink == NULL)
-            {
-                InsertTailList(&FdoExtension->WorkerList,
-                               &Endpoint->WorkerLink);
-
-                USBPORT_SignalWorkerThread(FdoDevice);
-            }
-        }
-
-        KeReleaseSpinLockFromDpcLevel(&FdoExtension->EndpointListSpinLock);
-        KeLowerIrql(OldIrql);
-    }
-
-    KeReleaseSpinLockFromDpcLevel(&FdoExtension->EndpointListSpinLock);
-    KeLowerIrql(OldIrql);
-
-    USBPORT_FlushClosedEndpointList(FdoDevice);
-}
-
-VOID
-NTAPI
-USBPORT_DoRootHubCallback(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDEVICE_OBJECT PdoDevice;
-    PUSBPORT_RHDEVICE_EXTENSION PdoExtension;
-    PRH_INIT_CALLBACK RootHubInitCallback;
-    PVOID RootHubInitContext;
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    DPRINT("USBPORT_DoRootHubCallback: FdoDevice - %p\n", FdoDevice);
-
-    PdoDevice = FdoExtension->RootHubPdo;
-
-    if (PdoDevice)
-    {
-        PdoExtension = PdoDevice->DeviceExtension;
-
-        RootHubInitContext = PdoExtension->RootHubInitContext;
-        RootHubInitCallback = PdoExtension->RootHubInitCallback;
-
-        PdoExtension->RootHubInitCallback = NULL;
-        PdoExtension->RootHubInitContext = NULL;
-
-        if (RootHubInitCallback)
-        {
-            RootHubInitCallback(RootHubInitContext);
-        }
-    }
-
-    DPRINT("USBPORT_DoRootHubCallback: exit\n");
-}
-
-VOID
-NTAPI
-USBPORT_SynchronizeRootHubCallback(IN PDEVICE_OBJECT FdoDevice,
-                                   IN PDEVICE_OBJECT Usb2FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_REGISTRATION_PACKET Packet;
-    PUSBPORT_DEVICE_EXTENSION Usb2FdoExtension;
-    PDEVICE_RELATIONS CompanionControllersList;
-    PUSBPORT_DEVICE_EXTENSION CompanionFdoExtension;
-    PDEVICE_OBJECT * Entry;
-    ULONG ix;
-
-    DPRINT("USBPORT_SynchronizeRootHubCallback: FdoDevice - %p, Usb2FdoDevice 
- %p\n",
-           FdoDevice,
-           Usb2FdoDevice);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-    Packet = &FdoExtension->MiniPortInterface->Packet;
-
-    if (Usb2FdoDevice == NULL &&
-        !(Packet->MiniPortFlags & USB_MINIPORT_FLAGS_USB2))
-    {
-        /* Not Companion USB11 Controller */
-        USBPORT_DoRootHubCallback(FdoDevice);
-
-        FdoExtension->Flags &= ~USBPORT_FLAG_RH_INIT_CALLBACK;
-        InterlockedCompareExchange(&FdoExtension->RHInitCallBackLock, 0, 1);
-
-        DPRINT("USBPORT_SynchronizeRootHubCallback: exit \n");
-        return;
-    }
-
-    /* USB2 or Companion USB11 */
-
-    DPRINT("USBPORT_SynchronizeRootHubCallback: FdoExtension->Flags - %p\n",
-           FdoExtension->Flags);
-
-    if (!(FdoExtension->Flags & USBPORT_FLAG_COMPANION_HC))
-    {
-        KeWaitForSingleObject(&FdoExtension->ControllerSemaphore,
-                              Executive,
-                              KernelMode,
-                              FALSE,
-                              NULL);
-
-        FdoExtension->Flags |= USBPORT_FLAG_PWR_AND_CHIRP_LOCK;
-
-        if (!(FdoExtension->Flags & (USBPORT_FLAG_HC_SUSPEND |
-                                     USBPORT_FLAG_POWER_AND_CHIRP_OK)))
-        {
-            USBPORT_RootHubPowerAndChirpAllCcPorts(FdoDevice);
-            FdoExtension->Flags |= USBPORT_FLAG_POWER_AND_CHIRP_OK;
-        }
-
-        FdoExtension->Flags &= ~USBPORT_FLAG_PWR_AND_CHIRP_LOCK;
-
-        KeReleaseSemaphore(&FdoExtension->ControllerSemaphore,
-                           LOW_REALTIME_PRIORITY,
-                           1,
-                           FALSE);
-
-        CompanionControllersList = USBPORT_FindCompanionControllers(FdoDevice,
-                                                                    FALSE,
-                                                                    TRUE);
-
-        if (CompanionControllersList)
-        {
-            Entry = &CompanionControllersList->Objects[0];
-
-            for (ix = 0; ix < CompanionControllersList->Count; ++ix)
-            {
-                CompanionFdoExtension = ((*Entry)->DeviceExtension);
-
-                
InterlockedCompareExchange(&CompanionFdoExtension->RHInitCallBackLock,
-                                           0,
-                                           1);
-
-                ++Entry;
-            }
-
-            ExFreePoolWithTag(CompanionControllersList, USB_PORT_TAG);
-        }
-
-        USBPORT_DoRootHubCallback(FdoDevice);
-
-        FdoExtension->Flags &= ~USBPORT_FLAG_RH_INIT_CALLBACK;
-        InterlockedCompareExchange(&FdoExtension->RHInitCallBackLock, 0, 1);
-    }
-    else
-    {
-        Usb2FdoExtension = Usb2FdoDevice->DeviceExtension;
-
-        USBPORT_Wait(FdoDevice, 50);
-
-        while (FdoExtension->RHInitCallBackLock)
-        {
-            USBPORT_Wait(FdoDevice, 10);
-
-            Usb2FdoExtension->Flags |= USBPORT_FLAG_RH_INIT_CALLBACK;
-            USBPORT_SignalWorkerThread(Usb2FdoDevice);
-        }
-
-        USBPORT_DoRootHubCallback(FdoDevice);
-
-        FdoExtension->Flags &= ~USBPORT_FLAG_RH_INIT_CALLBACK;
-    }
-
-    DPRINT("USBPORT_SynchronizeRootHubCallback: exit \n");
-}
-
-VOID
-NTAPI
-USBPORT_WorkerThread(IN PVOID StartContext)
-{
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    LARGE_INTEGER OldTime;
-    LARGE_INTEGER NewTime;
-    KIRQL OldIrql;
-
-    DPRINT_CORE("USBPORT_WorkerThread ... \n");
-
-    FdoDevice = StartContext;
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    FdoExtension->WorkerThread = KeGetCurrentThread();
-
-    do
-    {
-        KeQuerySystemTime(&OldTime);
-
-        KeWaitForSingleObject(&FdoExtension->WorkerThreadEvent,
-                              Suspended,
-                              KernelMode,
-                              FALSE,
-                              NULL);
-
-        KeQuerySystemTime(&NewTime);
-
-        KeAcquireSpinLock(&FdoExtension->WorkerThreadEventSpinLock, &OldIrql);
-        KeResetEvent(&FdoExtension->WorkerThreadEvent);
-        KeReleaseSpinLock(&FdoExtension->WorkerThreadEventSpinLock, OldIrql);
-        DPRINT_CORE("USBPORT_WorkerThread: run \n");
-
-        if (FdoExtension->MiniPortFlags & USBPORT_MPFLAG_INTERRUPTS_ENABLED)
-        {
-            USBPORT_DoSetPowerD0(FdoDevice);
-
-            if (FdoExtension->Flags & USBPORT_FLAG_RH_INIT_CALLBACK)
-            {
-                PDEVICE_OBJECT USB2FdoDevice = NULL;
-
-                USB2FdoDevice = USBPORT_FindUSB2Controller(FdoDevice);
-                USBPORT_SynchronizeRootHubCallback(FdoDevice, USB2FdoDevice);
-            }
-        }
-
-        USBPORT_WorkerThreadHandler(FdoDevice);
-    }
-    while (!(FdoExtension->Flags & USBPORT_FLAG_WORKER_THREAD_ON));
-
-    PsTerminateSystemThread(0);
-}
-
-NTSTATUS
-NTAPI
-USBPORT_CreateWorkerThread(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    NTSTATUS Status;
-
-    DPRINT("USBPORT_CreateWorkerThread ... \n");
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    FdoExtension->Flags &= ~USBPORT_FLAG_WORKER_THREAD_ON;
-
-    KeInitializeEvent(&FdoExtension->WorkerThreadEvent,
-                      NotificationEvent,
-                      FALSE);
-
-    Status = PsCreateSystemThread(&FdoExtension->WorkerThreadHandle,
-                                  THREAD_ALL_ACCESS,
-                                  NULL,
-                                  NULL,
-                                  NULL,
-                                  USBPORT_WorkerThread,
-                                  (PVOID)FdoDevice);
-
-    return Status;
-}
-
-VOID
-NTAPI
-USBPORT_SynchronizeControllersStart(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDEVICE_OBJECT PdoDevice;
-    PUSBPORT_RHDEVICE_EXTENSION PdoExtension;
-    PDEVICE_OBJECT USB2FdoDevice = NULL;
-    PUSBPORT_DEVICE_EXTENSION USB2FdoExtension;
-    BOOLEAN IsOn; 
-
-    DPRINT_TIMER("USBPORT_SynchronizeControllersStart: FdoDevice - %p\n",
-                 FdoDevice);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    PdoDevice = FdoExtension->RootHubPdo;
-
-    if (!PdoDevice)
-    {
-        return;
-    }
-
-    PdoExtension = PdoDevice->DeviceExtension;
-
-    if (PdoExtension->RootHubInitCallback == NULL ||
-        FdoExtension->Flags & USBPORT_FLAG_RH_INIT_CALLBACK)
-    {
-        return;
-    }
-
-    DPRINT_TIMER("USBPORT_SynchronizeControllersStart: Flags - %p\n",
-                 FdoExtension->Flags);
-
-    if (FdoExtension->Flags & USBPORT_FLAG_COMPANION_HC)
-    {
-        IsOn = FALSE;
-
-        USB2FdoDevice = USBPORT_FindUSB2Controller(FdoDevice);
-
-        DPRINT_TIMER("USBPORT_SynchronizeControllersStart: USB2FdoDevice - 
%p\n",
-                     USB2FdoDevice);
-
-        if (USB2FdoDevice)
-        {
-            USB2FdoExtension = USB2FdoDevice->DeviceExtension;
-
-            if (USB2FdoExtension->CommonExtension.PnpStateFlags &
-                USBPORT_PNP_STATE_STARTED)
-            {
-                IsOn = TRUE;
-            }
-        }
-
-        if (!(FdoExtension->Flags & USBPORT_FLAG_NO_HACTION))
-        {
-            goto Start;
-        }
-
-        USB2FdoDevice = NULL;
-    }
-
-    IsOn = TRUE;
-
-  Start:
-
-    if (IsOn &&
-        !InterlockedCompareExchange(&FdoExtension->RHInitCallBackLock, 1, 0))
-    {
-        FdoExtension->Flags |= USBPORT_FLAG_RH_INIT_CALLBACK;
-        USBPORT_SignalWorkerThread(FdoDevice);
-
-        if (USB2FdoDevice)
-        {
-            USB2FdoExtension = USB2FdoDevice->DeviceExtension;
-
-            USB2FdoExtension->Flags |= USBPORT_FLAG_RH_INIT_CALLBACK;
-            USBPORT_SignalWorkerThread(USB2FdoDevice);
-        }
-    }
-
-    DPRINT_TIMER("USBPORT_SynchronizeControllersStart: exit\n");
-}
-
-VOID
-NTAPI
-USBPORT_TimerDpc(IN PRKDPC Dpc,
-                 IN PVOID DeferredContext,
-                 IN PVOID SystemArgument1,
-                 IN PVOID SystemArgument2)
-{
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_REGISTRATION_PACKET Packet;
-    LARGE_INTEGER DueTime = {{0, 0}};
-    ULONG TimerFlags;
-    PTIMER_WORK_QUEUE_ITEM IdleQueueItem;
-    KIRQL OldIrql;
-    KIRQL TimerOldIrql;
-
-    DPRINT_TIMER("USBPORT_TimerDpc: Dpc - %p, DeferredContext - %p\n",
-           Dpc,
-           DeferredContext);
-
-    FdoDevice = DeferredContext;
-    FdoExtension = FdoDevice->DeviceExtension;
-    Packet = &FdoExtension->MiniPortInterface->Packet;
-
-    KeAcquireSpinLock(&FdoExtension->TimerFlagsSpinLock, &TimerOldIrql);
-
-    TimerFlags = FdoExtension->TimerFlags;
-
-    DPRINT_TIMER("USBPORT_TimerDpc: Flags - %p, TimerFlags - %p\n",
-                 FdoExtension->Flags,
-                 TimerFlags);
-
-    if (FdoExtension->Flags & USBPORT_FLAG_HC_SUSPEND &&
-        FdoExtension->Flags & USBPORT_FLAG_HC_WAKE_SUPPORT &&
-        !(TimerFlags & USBPORT_TMFLAG_HC_RESUME))
-    {
-        KeAcquireSpinLock(&FdoExtension->MiniportSpinLock, &OldIrql);
-        Packet->PollController(FdoExtension->MiniPortExt);
-        KeReleaseSpinLock(&FdoExtension->MiniportSpinLock, OldIrql);
-    }
-
-    USBPORT_SynchronizeControllersStart(FdoDevice);
-
-    if (TimerFlags & USBPORT_TMFLAG_HC_SUSPENDED)
-    {
-        USBPORT_BadRequestFlush(FdoDevice);
-        goto Exit;
-    }
-
-    KeAcquireSpinLock(&FdoExtension->MiniportSpinLock, &OldIrql);
-
-    if (!(FdoExtension->Flags & USBPORT_FLAG_HC_SUSPEND))
-    {
-        Packet->CheckController(FdoExtension->MiniPortExt);
-    }
-
-    KeReleaseSpinLock(&FdoExtension->MiniportSpinLock, OldIrql);
-
-    if (FdoExtension->Flags & USBPORT_FLAG_HC_POLLING)
-    {
-        KeAcquireSpinLock(&FdoExtension->MiniportSpinLock, &OldIrql);
-        Packet->PollController(FdoExtension->MiniPortExt);
-        KeReleaseSpinLock(&FdoExtension->MiniportSpinLock, OldIrql);
-    }
-
-    USBPORT_IsrDpcHandler(FdoDevice, FALSE);
-
-    DPRINT_TIMER("USBPORT_TimerDpc: USBPORT_TimeoutAllEndpoints 
UNIMPLEMENTED.\n");
-    //USBPORT_TimeoutAllEndpoints(FdoDevice);
-    DPRINT_TIMER("USBPORT_TimerDpc: USBPORT_CheckIdleEndpoints 
UNIMPLEMENTED.\n");
-    //USBPORT_CheckIdleEndpoints(FdoDevice);
-
-    USBPORT_BadRequestFlush(FdoDevice);
-
-    if (FdoExtension->IdleLockCounter > -1 &&
-        !(TimerFlags & USBPORT_TMFLAG_IDLE_QUEUEITEM_ON))
-    {
-        IdleQueueItem = ExAllocatePoolWithTag(NonPagedPool,
-                                              sizeof(TIMER_WORK_QUEUE_ITEM),
-                                              USB_PORT_TAG);
-
-        DPRINT("USBPORT_TimerDpc: IdleLockCounter - %x, IdleQueueItem - %p\n",
-               FdoExtension->IdleLockCounter,
-               IdleQueueItem);
-
-        if (IdleQueueItem)
-        {
-            RtlZeroMemory(IdleQueueItem, sizeof(TIMER_WORK_QUEUE_ITEM));
-
-            IdleQueueItem->WqItem.List.Flink = NULL;
-            IdleQueueItem->WqItem.WorkerRoutine = 
USBPORT_DoIdleNotificationCallback;
-            IdleQueueItem->WqItem.Parameter = IdleQueueItem;
-
-            IdleQueueItem->FdoDevice = FdoDevice;
-            IdleQueueItem->Context = 0;
-
-            FdoExtension->TimerFlags |= USBPORT_TMFLAG_IDLE_QUEUEITEM_ON;
-
-            ExQueueWorkItem(&IdleQueueItem->WqItem, CriticalWorkQueue);
-        }
-    }
-
-Exit:
-
-    KeReleaseSpinLock(&FdoExtension->TimerFlagsSpinLock, TimerOldIrql);
-
-    if (TimerFlags & USBPORT_TMFLAG_TIMER_QUEUED)
-    {
-        DueTime.QuadPart -= FdoExtension->TimerValue * 10000 +
-                            (KeQueryTimeIncrement() - 1);
-
-        KeSetTimer(&FdoExtension->TimerObject,
-                   DueTime,
-                   &FdoExtension->TimerDpc);
-    }
-
-    DPRINT_TIMER("USBPORT_TimerDpc: exit\n");
-}
-
-BOOLEAN
-NTAPI
-USBPORT_StartTimer(IN PDEVICE_OBJECT FdoDevice,
-                   IN ULONG Time)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    LARGE_INTEGER DueTime = {{0, 0}};
-    ULONG TimeIncrement;
-    BOOLEAN Result;
-
-    DPRINT_TIMER("USBPORT_StartTimer: FdoDevice - %p, Time - %x\n",
-           FdoDevice,
-           Time);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    TimeIncrement = KeQueryTimeIncrement();
-
-    FdoExtension->TimerFlags |= USBPORT_TMFLAG_TIMER_QUEUED;
-    FdoExtension->TimerValue = Time;
-
-    KeInitializeTimer(&FdoExtension->TimerObject);
-    KeInitializeDpc(&FdoExtension->TimerDpc, USBPORT_TimerDpc, FdoDevice);
-
-    DueTime.QuadPart -= 10000 * Time + (TimeIncrement - 1);
-
-    Result = KeSetTimer(&FdoExtension->TimerObject,
-                        DueTime,
-                        &FdoExtension->TimerDpc);
-
-    return Result;
-}
-
-PUSBPORT_COMMON_BUFFER_HEADER
-NTAPI
-USBPORT_AllocateCommonBuffer(IN PDEVICE_OBJECT FdoDevice,
-                             IN SIZE_T BufferLength)
-{
-    PUSBPORT_COMMON_BUFFER_HEADER HeaderBuffer = NULL;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDMA_ADAPTER DmaAdapter;
-    PDMA_OPERATIONS DmaOperations;
-    SIZE_T HeaderSize;
-    ULONG Length = 0;
-    ULONG LengthPadded;
-    PHYSICAL_ADDRESS LogicalAddress;
-    ULONG_PTR BaseVA;
-    ULONG_PTR StartBufferVA;
-    ULONG_PTR StartBufferPA;
-
-    DPRINT("USBPORT_AllocateCommonBuffer: FdoDevice - %p, BufferLength - %p\n",
-           FdoDevice,
-           BufferLength);
-
-    if (BufferLength == 0)
-        goto Exit;
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    DmaAdapter = FdoExtension->DmaAdapter;
-    DmaOperations = DmaAdapter->DmaOperations;
-
-    HeaderSize = sizeof(USBPORT_COMMON_BUFFER_HEADER);
-    Length = ROUND_TO_PAGES(BufferLength + HeaderSize);
-    LengthPadded = Length - (BufferLength + HeaderSize);
-
-    BaseVA = (ULONG_PTR)DmaOperations->AllocateCommonBuffer(DmaAdapter,
-                                                            Length,
-                                                            &LogicalAddress,
-                                                            TRUE);
-
-    if (!BaseVA)
-        goto Exit;
-
-    StartBufferVA = BaseVA & ~(PAGE_SIZE - 1);
-    StartBufferPA = LogicalAddress.LowPart & ~(PAGE_SIZE - 1);
-
-    HeaderBuffer = (PUSBPORT_COMMON_BUFFER_HEADER)(StartBufferVA +
-                                                   BufferLength +
-                                                   LengthPadded);
-
-    HeaderBuffer->Length = Length;
-    HeaderBuffer->BaseVA = BaseVA;
-    HeaderBuffer->LogicalAddress = LogicalAddress;
-
-    HeaderBuffer->BufferLength = BufferLength + LengthPadded;
-    HeaderBuffer->VirtualAddress = StartBufferVA;
-    HeaderBuffer->PhysicalAddress = StartBufferPA;
-
-    RtlZeroMemory((PVOID)StartBufferVA, BufferLength + LengthPadded);
-
-Exit:
-    return HeaderBuffer;
-}
-
-VOID
-NTAPI
-USBPORT_FreeCommonBuffer(IN PDEVICE_OBJECT FdoDevice,
-                         IN PUSBPORT_COMMON_BUFFER_HEADER HeaderBuffer)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDMA_ADAPTER DmaAdapter;
-    PDMA_OPERATIONS DmaOperations;
-
-    DPRINT("USBPORT_FreeCommonBuffer: ... \n");
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    DmaAdapter = FdoExtension->DmaAdapter;
-    DmaOperations = DmaAdapter->DmaOperations;
-
-    DmaOperations->FreeCommonBuffer(FdoExtension->DmaAdapter,
-                                    HeaderBuffer->Length,
-                                    HeaderBuffer->LogicalAddress,
-                                    (PVOID)HeaderBuffer->VirtualAddress,
-                                    TRUE);
-}
-
-PUSBPORT_MINIPORT_INTERFACE
-NTAPI
-USBPORT_FindMiniPort(IN PDRIVER_OBJECT DriverObject)
-{
-    KIRQL OldIrql;
-    PLIST_ENTRY List;
-    PUSBPORT_MINIPORT_INTERFACE MiniPortInterface;
-    BOOLEAN IsFound = FALSE;
-
-    DPRINT("USBPORT_FindMiniPort: ... \n");
-
-    KeAcquireSpinLock(&USBPORT_SpinLock, &OldIrql);
-
-    for (List = USBPORT_MiniPortDrivers.Flink;
-         List != &USBPORT_MiniPortDrivers;
-         List = List->Flink)
-    {
-        MiniPortInterface = CONTAINING_RECORD(List,
-                                              USBPORT_MINIPORT_INTERFACE,
-                                              DriverLink);
-
-        if (MiniPortInterface->DriverObject == DriverObject)
-        {
-            DPRINT("USBPORT_FindMiniPort: find MiniPortInterface - %p\n",
-                   MiniPortInterface);
-
-            IsFound = TRUE;
-            break;
-        }
-    }
-
-    KeReleaseSpinLock(&USBPORT_SpinLock, OldIrql);
-
-    if (IsFound)
-        return MiniPortInterface;
-    else
-        return NULL;
-    
-}
-
-NTSTATUS
-NTAPI
-USBPORT_AddDevice(IN PDRIVER_OBJECT DriverObject,
-                  IN PDEVICE_OBJECT PhysicalDeviceObject)
-{
-    NTSTATUS Status;
-    PUSBPORT_MINIPORT_INTERFACE MiniPortInterface;
-    ULONG DeviceNumber = 0;
-    WCHAR CharDeviceName[64];
-    UNICODE_STRING DeviceName;
-    PDEVICE_OBJECT DeviceObject;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_COMMON_DEVICE_EXTENSION FdoCommonExtension;
-    PDEVICE_OBJECT LowerDevice;
-    ULONG Length;
-
-    DPRINT("USBPORT_AddDevice: DriverObject - %p, PhysicalDeviceObject - %p\n",
-           DriverObject,
-           PhysicalDeviceObject);
-
-    MiniPortInterface = USBPORT_FindMiniPort(DriverObject);
-
-    if (!MiniPortInterface)
-    {
-        DPRINT("USBPORT_AddDevice: USBPORT_FindMiniPort not found 
MiniPortInterface\n");
-        return STATUS_UNSUCCESSFUL;
-    }
-
-    while (TRUE)
-    {
-        /* Construct device name */
-        RtlStringCbPrintfW(CharDeviceName,
-                           sizeof(CharDeviceName),
-                           L"\\Device\\USBFDO-%d",
-                           DeviceNumber);
-
-        RtlInitUnicodeString(&DeviceName, CharDeviceName);
-
-        Length = sizeof(USBPORT_DEVICE_EXTENSION) +
-                 MiniPortInterface->Packet.MiniPortExtensionSize;
-
-        /* Create device */
-        Status = IoCreateDevice(DriverObject,
-                                Length,
-                                &DeviceName,
-                                FILE_DEVICE_CONTROLLER,
-                                0,
-                                FALSE,
-                                &DeviceObject);
-
-        /* Check for success */
-        if (NT_SUCCESS(Status)) break;
-
-        /* Is there a device object with that same name */
-        if ((Status == STATUS_OBJECT_NAME_EXISTS) ||
-            (Status == STATUS_OBJECT_NAME_COLLISION))
-        {
-            /* Try the next name */
-            DeviceNumber++;
-            continue;
-        }
-
-        /* Bail out on other errors */
-        if (!NT_SUCCESS(Status))
-        {
-            DPRINT1("USBPORT_AddDevice: failed to create %wZ, Status %x\n",
-                    &DeviceName,
-                    Status);
-
-            return Status;
-        }
-    }
-
-    DPRINT("USBPORT_AddDevice: created device %p <%wZ>, Status %x\n",
-           DeviceObject,
-           &DeviceName,
-           Status);
-
-    FdoExtension = DeviceObject->DeviceExtension;
-    FdoCommonExtension = &FdoExtension->CommonExtension;
-
-    RtlZeroMemory(FdoExtension, sizeof(USBPORT_DEVICE_EXTENSION));
-
-    FdoCommonExtension->SelfDevice = DeviceObject;
-    FdoCommonExtension->LowerPdoDevice = PhysicalDeviceObject;
-    FdoCommonExtension->IsPDO = FALSE;
-
-    LowerDevice = IoAttachDeviceToDeviceStack(DeviceObject,
-                                              PhysicalDeviceObject);
-
-    FdoCommonExtension->LowerDevice = LowerDevice;
-
-    FdoCommonExtension->DevicePowerState = PowerDeviceD3;
-
-    FdoExtension->MiniPortExt = (PVOID)((ULONG_PTR)FdoExtension +
-                                        sizeof(USBPORT_DEVICE_EXTENSION));
-
-    FdoExtension->MiniPortInterface = MiniPortInterface;
-    FdoExtension->FdoNameNumber = DeviceNumber;
-
-    KeInitializeSemaphore(&FdoExtension->DeviceSemaphore, 1, 1);
-    KeInitializeSemaphore(&FdoExtension->ControllerSemaphore, 1, 1);
-
-    InitializeListHead(&FdoExtension->EndpointList);
-    InitializeListHead(&FdoExtension->DoneTransferList);
-    InitializeListHead(&FdoExtension->WorkerList);
-    InitializeListHead(&FdoExtension->EpStateChangeList);
-    InitializeListHead(&FdoExtension->MapTransferList);
-    InitializeListHead(&FdoExtension->DeviceHandleList);
-    InitializeListHead(&FdoExtension->IdleIrpList);
-    InitializeListHead(&FdoExtension->BadRequestList);
-    InitializeListHead(&FdoExtension->EndpointClosedList);
-
-    DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
-
-    return Status;
-}
-
-VOID
-NTAPI
-USBPORT_Unload(IN PDRIVER_OBJECT DriverObject)
-{
-    PUSBPORT_MINIPORT_INTERFACE MiniPortInterface;
-
-    DPRINT1("USBPORT_Unload: FIXME!\n");
-
-    MiniPortInterface = USBPORT_FindMiniPort(DriverObject);
-
-    if (!MiniPortInterface)
-    {
-        DPRINT("USBPORT_Unload: CRITICAL ERROR!!! USBPORT_FindMiniPort not 
found MiniPortInterface\n");
-        KeBugCheckEx(BUGCODE_USB_DRIVER, 1, 0, 0, 0);
-    }
-
-    DPRINT1("USBPORT_Unload: UNIMPLEMENTED. FIXME. \n");
-    //MiniPortInterface->DriverUnload(DriverObject); // Call MiniPort 
_HCI_Unload
-}
-
-ULONG
-NTAPI
-USBPORT_MiniportCompleteTransfer(IN PVOID MiniPortExtension,
-                                 IN PVOID MiniPortEndpoint,
-                                 IN PVOID TransferParameters,
-                                 IN USBD_STATUS USBDStatus,
-                                 IN ULONG TransferLength)
-{
-    PUSBPORT_TRANSFER Transfer;
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-
-    DPRINT_CORE("USBPORT_MiniportCompleteTransfer: USBDStatus - %x, 
TransferLength - %x\n",
-                USBDStatus,
-                TransferLength);
-
-    Transfer = CONTAINING_RECORD(TransferParameters,
-                                 USBPORT_TRANSFER,
-                                 TransferParameters);
-
-    FdoDevice = Transfer->Endpoint->FdoDevice;
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    Transfer->CompletedTransferLen = TransferLength;
-
-    RemoveEntryList(&Transfer->TransferLink);
-
-    Transfer->USBDStatus = USBDStatus;
-
-    ExInterlockedInsertTailList(&FdoExtension->DoneTransferList,
-                                &Transfer->TransferLink,
-                                &FdoExtension->DoneTransferSpinLock);
-
-    return KeInsertQueueDpc(&FdoExtension->TransferFlushDpc, NULL, NULL);
+    DPRINT1("USBPORT_InitializeIsoTransfer: UNIMPLEMENTED. FIXME.\n");
+    return USBD_STATUS_NOT_SUPPORTED;
 }
 
 ULONG
@@ -1983,789 +24,3 @@
     return 0;
 }
 
-VOID
-NTAPI
-USBPORT_AsyncTimerDpc(IN PRKDPC Dpc,
-                      IN PVOID DeferredContext,
-                      IN PVOID SystemArgument1,
-                      IN PVOID SystemArgument2)
-{
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PUSBPORT_ASYNC_CALLBACK_DATA AsyncCallbackData;
-
-    DPRINT("USBPORT_AsyncTimerDpc: ... \n");
-
-    AsyncCallbackData = DeferredContext;
-    FdoDevice = AsyncCallbackData->FdoDevice;
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    (*AsyncCallbackData->CallbackFunction)(FdoExtension->MiniPortExt,
-                                           
&AsyncCallbackData->CallbackContext);
-
-    ExFreePoolWithTag(AsyncCallbackData, USB_PORT_TAG);
-}
-
-ULONG
-NTAPI
-USBPORT_RequestAsyncCallback(IN PVOID MiniPortExtension,
-                             IN ULONG TimerValue,
-                             IN PVOID Buffer,
-                             IN SIZE_T Length,
-                             IN ASYNC_TIMER_CALLBACK * Callback)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_ASYNC_CALLBACK_DATA AsyncCallbackData;
-    LARGE_INTEGER DueTime = {{0, 0}};
-
-    DPRINT("USBPORT_RequestAsyncCallback: ... \n");
-
-    FdoExtension = (PUSBPORT_DEVICE_EXTENSION)((ULONG_PTR)MiniPortExtension -
-                                               
sizeof(USBPORT_DEVICE_EXTENSION));
-
-    FdoDevice = FdoExtension->CommonExtension.SelfDevice;
-
-    AsyncCallbackData = ExAllocatePoolWithTag(NonPagedPool,
-                                              
sizeof(USBPORT_ASYNC_CALLBACK_DATA) + Length,
-                                              USB_PORT_TAG);
-
-    if (!AsyncCallbackData)
-    {
-        DPRINT1("USBPORT_RequestAsyncCallback: Not allocated 
AsyncCallbackData!\n");
-        return 0;
-    }
-
-    RtlZeroMemory(AsyncCallbackData,
-                  sizeof(USBPORT_ASYNC_CALLBACK_DATA) + Length);
-
-    if (Length)
-    {
-        RtlCopyMemory(&AsyncCallbackData->CallbackContext, Buffer, Length);
-    }
-
-    AsyncCallbackData->FdoDevice = FdoDevice;
-    AsyncCallbackData->CallbackFunction = Callback;
-
-    KeInitializeTimer(&AsyncCallbackData->AsyncTimer);
-
-    KeInitializeDpc(&AsyncCallbackData->AsyncTimerDpc,
-                    USBPORT_AsyncTimerDpc,
-                    AsyncCallbackData);
-
-    DueTime.QuadPart -= (KeQueryTimeIncrement() - 1) + 10000 * TimerValue;
-
-    KeSetTimer(&AsyncCallbackData->AsyncTimer,
-               DueTime,
-               &AsyncCallbackData->AsyncTimerDpc);
-
-    return 0;
-}
-
-PVOID
-NTAPI
-USBPORT_GetMappedVirtualAddress(IN PVOID PhysicalAddress,
-                                IN PVOID MiniPortExtension,
-                                IN PVOID MiniPortEndpoint)
-{
-    PUSBPORT_COMMON_BUFFER_HEADER HeaderBuffer;
-    PUSBPORT_ENDPOINT Endpoint;
-    ULONG Offset;
-    ULONG_PTR VirtualAddress;
-
-    DPRINT_CORE("USBPORT_GetMappedVirtualAddress ... \n");
-
-    Endpoint = (PUSBPORT_ENDPOINT)((ULONG_PTR)MiniPortEndpoint -
-                                   sizeof(USBPORT_ENDPOINT));
-
-    if (!Endpoint)
-    {
-        ASSERT(FALSE);
-    }
-
-    HeaderBuffer = Endpoint->HeaderBuffer;
-
-    Offset = (ULONG_PTR)PhysicalAddress - HeaderBuffer->PhysicalAddress;
-    VirtualAddress = HeaderBuffer->VirtualAddress + Offset;
-
-    return (PVOID)VirtualAddress;
-}
-
-ULONG
-NTAPI
-USBPORT_InvalidateEndpoint(IN PVOID MiniPortExtension,
-                           IN PVOID MiniPortEndpoint)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_ENDPOINT Endpoint;
-
-    DPRINT_CORE("USBPORT_InvalidateEndpoint: ... \n");
-
-    FdoExtension = (PUSBPORT_DEVICE_EXTENSION)((ULONG_PTR)MiniPortExtension -
-                                               
sizeof(USBPORT_DEVICE_EXTENSION));
-
-    FdoDevice = FdoExtension->CommonExtension.SelfDevice;
-
-    if (!MiniPortEndpoint)
-    {
-        USBPORT_InvalidateEndpointHandler(FdoDevice,
-                                          NULL,
-                                          INVALIDATE_ENDPOINT_ONLY);
-        return 0;
-    }
-
-    Endpoint = (PUSBPORT_ENDPOINT)((ULONG_PTR)MiniPortEndpoint -
-                                   sizeof(USBPORT_ENDPOINT));
-
-    USBPORT_InvalidateEndpointHandler(FdoDevice,
-                                      Endpoint,
-                                      INVALIDATE_ENDPOINT_ONLY);
-
-    return 0;
-}
-
-VOID
-NTAPI
-USBPORT_CompleteTransfer(IN PURB Urb,
-                         IN USBD_STATUS TransferStatus)
-{
-    struct _URB_CONTROL_TRANSFER *UrbTransfer;
-    PUSBPORT_TRANSFER Transfer;
-    NTSTATUS Status;
-    PIRP Irp;
-    KIRQL OldIrql;
-    PRKEVENT Event;
-    BOOLEAN WriteToDevice;
-    BOOLEAN IsFlushSuccess;
-    PMDL Mdl;
-    ULONG_PTR CurrentVa;
-    SIZE_T TransferLength;
-    PUSBPORT_ENDPOINT Endpoint;
-    PDEVICE_OBJECT FdoDevice;
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDMA_OPERATIONS DmaOperations;
-
-    DPRINT("USBPORT_CompleteTransfer: Urb - %p, TransferStatus - %X\n",
-           Urb,
-           TransferStatus);
-
-    UrbTransfer = &Urb->UrbControlTransfer;
-    Transfer = UrbTransfer->hca.Reserved8[0];
-
-    Transfer->USBDStatus = TransferStatus;
-    Status = USBPORT_USBDStatusToNtStatus(Urb, TransferStatus);
-
-    UrbTransfer->TransferBufferLength = Transfer->CompletedTransferLen;
-
-    if (Transfer->Flags & TRANSFER_FLAG_DMA_MAPPED)
-    {
-        Endpoint = Transfer->Endpoint;
-        FdoDevice = Endpoint->FdoDevice;
-        FdoExtension = FdoDevice->DeviceExtension;
-        DmaOperations = FdoExtension->DmaAdapter->DmaOperations;
-
-        WriteToDevice = Transfer->Direction == USBPORT_DMA_DIRECTION_TO_DEVICE;
-        Mdl = UrbTransfer->TransferBufferMDL;
-        CurrentVa = (ULONG_PTR)MmGetMdlVirtualAddress(Mdl);
-        TransferLength = UrbTransfer->TransferBufferLength;
-
-        IsFlushSuccess = 
DmaOperations->FlushAdapterBuffers(FdoExtension->DmaAdapter,
-                                                            Mdl,
-                                                            
Transfer->MapRegisterBase,
-                                                            (PVOID)CurrentVa,
-                                                            TransferLength,
-                                                            WriteToDevice);
-
-        if (!IsFlushSuccess)
-        {
-            DPRINT("USBPORT_CompleteTransfer: no FlushAdapterBuffers !!!\n");
-            ASSERT(FALSE);
-        }
-
-        KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
-
-        DmaOperations->FreeMapRegisters(FdoExtension->DmaAdapter,
-                                        Transfer->MapRegisterBase,
-                                        Transfer->NumberOfMapRegisters);
-
-        KeLowerIrql(OldIrql);
-    }
-
-    if (Urb->UrbHeader.UsbdFlags & USBD_FLAG_ALLOCATED_MDL)
-    {
-        IoFreeMdl(Transfer->TransferBufferMDL);
-        Urb->UrbHeader.UsbdFlags |= ~USBD_FLAG_ALLOCATED_MDL;
-    }
-
-    Urb->UrbControlTransfer.hca.Reserved8[0] = NULL;
-    Urb->UrbHeader.UsbdFlags |= ~USBD_FLAG_ALLOCATED_TRANSFER;
-
-    Irp = Transfer->Irp;
-
-    if (Irp)
-    {
-        if (!NT_SUCCESS(Status))
-        {
-            //DbgBreakPoint();
-            DPRINT1("USBPORT_CompleteTransfer: Irp - %p complete with Status - 
%lx\n",
-                    Irp,
-                    Status);
-
-            USBPORT_DumpingURB(Urb);
-        }
-
-        Irp->IoStatus.Status = Status;
-        Irp->IoStatus.Information = 0;
-
-        KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
-        IoCompleteRequest(Irp, IO_NO_INCREMENT);
-        KeLowerIrql(OldIrql);
-    }
-
-    Event = Transfer->Event;
-
-    if (Event)
-    {
-        KeSetEvent(Event, EVENT_INCREMENT, FALSE);
-    }
-
-    ExFreePoolWithTag(Transfer, USB_PORT_TAG);
-
-    DPRINT_CORE("USBPORT_CompleteTransfer: exit\n");
-}
-
-IO_ALLOCATION_ACTION
-NTAPI
-USBPORT_MapTransfer(IN PDEVICE_OBJECT FdoDevice,
-                    IN PIRP Irp,
-                    IN PVOID MapRegisterBase,
-                    IN PVOID Context)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PDMA_ADAPTER DmaAdapter;
-    PUSBPORT_TRANSFER Transfer;
-    PURB Urb;
-    PUSBPORT_ENDPOINT Endpoint;
-    PMDL Mdl;
-    ULONG_PTR CurrentVa;
-    PUSBPORT_SCATTER_GATHER_LIST sgList;
-    SIZE_T CurrentLength;
-    ULONG ix;
-    BOOLEAN WriteToDevice;
-    PHYSICAL_ADDRESS PhAddr = {{0, 0}};
-    PHYSICAL_ADDRESS PhAddress = {{0, 0}};
-    SIZE_T TransferLength;
-    SIZE_T SgCurrentLength;
-    SIZE_T ElementLength;
-    PUSBPORT_DEVICE_HANDLE DeviceHandle;
-    PDMA_OPERATIONS DmaOperations;
-
-    DPRINT_CORE("USBPORT_MapTransfer: ... \n");
-
-    FdoExtension = FdoDevice->DeviceExtension;
-    DmaAdapter = FdoExtension->DmaAdapter;
-    DmaOperations = DmaAdapter->DmaOperations;
-
-    Transfer = Context;
-
-    Urb = Transfer->Urb;
-    Endpoint = Transfer->Endpoint;
-    TransferLength = Transfer->TransferParameters.TransferBufferLength;
-
-    Mdl = Urb->UrbControlTransfer.TransferBufferMDL;
-    CurrentVa = (ULONG_PTR)MmGetMdlVirtualAddress(Mdl);
-
-    Transfer->SgList.CurrentVa = CurrentVa;
-    Transfer->SgList.MappedSystemVa = MmGetSystemAddressForMdlSafe(Mdl, 
NormalPagePriority);
-
-    sgList = &Transfer->SgList;
-    sgList->Flags = 0;
-
-    Transfer->MapRegisterBase = MapRegisterBase;
-
-    ix = 0;
-    CurrentLength = 0;
-
-    do
-    {
-        WriteToDevice = Transfer->Direction == USBPORT_DMA_DIRECTION_TO_DEVICE;
-        ASSERT(Transfer->Direction != 0);
-
-        PhAddress = DmaOperations->MapTransfer(DmaAdapter,
-                                               Mdl,
-                                               MapRegisterBase,
-                                               (PVOID)CurrentVa,
-                                               &TransferLength,
-                                               WriteToDevice);
-
-        DPRINT_CORE("USBPORT_MapTransfer: PhAddress.LowPart - %p, 
PhAddress.HighPart - %x, TransferLength - %x\n",
-               PhAddress.LowPart,
-               PhAddress.HighPart,
-               TransferLength);
-
-        PhAddress.HighPart = 0;
-        SgCurrentLength = TransferLength;
-
-        do
-        {
-            ElementLength = 0x1000 - (PhAddress.LowPart & 0xFFF);
-
-            if (ElementLength > SgCurrentLength)
-                ElementLength = SgCurrentLength;
-
-            DPRINT_CORE("USBPORT_MapTransfer: PhAddress.LowPart - %p, HighPart 
- %x, ElementLength - %x\n",
-                   PhAddress.LowPart,
-                   PhAddress.HighPart,
-                   ElementLength);
-
-            sgList->SgElement[ix].SgPhysicalAddress = PhAddress;
-            sgList->SgElement[ix].SgTransferLength = ElementLength;
-            sgList->SgElement[ix].SgOffset = CurrentLength +
-                                             (TransferLength - 
SgCurrentLength);
-
-            PhAddress.LowPart += ElementLength;
-            SgCurrentLength -= ElementLength;
-
-            ++ix;
-        }
-        while (SgCurrentLength);
-
-        if ((PhAddr.LowPart == PhAddress.LowPart) &&
-            (PhAddr.HighPart == PhAddress.HighPart))
-        {
-            ASSERT(FALSE);
-        }
-
-        PhAddr = PhAddress;
-
-        CurrentLength += TransferLength;
-        CurrentVa += TransferLength;
-
-        TransferLength = Transfer->TransferParameters.TransferBufferLength -
-                         CurrentLength;
-    }
-    while (CurrentLength != Transfer->TransferParameters.TransferBufferLength);
-
-    Transfer->SgList.SgElementCount = ix;
-    Transfer->Flags |= TRANSFER_FLAG_DMA_MAPPED;
-
-    ASSERT(Transfer->TransferParameters.TransferBufferLength <=
-           Endpoint->EndpointProperties.MaxTransferSize);
-
-    KeAcquireSpinLock(&Endpoint->EndpointSpinLock, &Endpoint->EndpointOldIrql);
-    InsertTailList(&Endpoint->TransferList, &Transfer->TransferLink);
-    KeReleaseSpinLock(&Endpoint->EndpointSpinLock, Endpoint->EndpointOldIrql);
-
-    DeviceHandle = Urb->UrbHeader.UsbdDeviceHandle;
-    InterlockedDecrement(&DeviceHandle->DeviceHandleLock);
-
-    if (USBPORT_EndpointWorker(Endpoint, 0))
-    {
-        USBPORT_InvalidateEndpointHandler(FdoDevice,
-                                          Endpoint,
-                                          INVALIDATE_ENDPOINT_WORKER_THREAD);
-    }
-
-    return DeallocateObjectKeepRegisters;
-}
-
-VOID
-NTAPI
-USBPORT_FlushMapTransfers(IN PDEVICE_OBJECT FdoDevice)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    PLIST_ENTRY MapTransferList;
-    PUSBPORT_TRANSFER Transfer;
-    ULONG NumMapRegisters;
-    PMDL Mdl;
-    SIZE_T TransferBufferLength;
-    ULONG_PTR VirtualAddr;
-    KIRQL OldIrql;
-    NTSTATUS Status;
-    PDMA_OPERATIONS DmaOperations;
-
-    DPRINT_CORE("USBPORT_FlushMapTransfers: ... \n");
-
-    FdoExtension = FdoDevice->DeviceExtension;
-    DmaOperations = FdoExtension->DmaAdapter->DmaOperations;
-
-    KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
-
-    while (TRUE)
-    {
-        MapTransferList = &FdoExtension->MapTransferList;
-
-        if (IsListEmpty(&FdoExtension->MapTransferList))
-        {
-            KeLowerIrql(OldIrql);
-            return;
-        }
-
-        Transfer = CONTAINING_RECORD(MapTransferList->Flink,
-                                     USBPORT_TRANSFER,
-                                     TransferLink);
-
-        RemoveHeadList(MapTransferList);
-
-        Mdl = Transfer->Urb->UrbControlTransfer.TransferBufferMDL;
-        TransferBufferLength = 
Transfer->TransferParameters.TransferBufferLength;
-        VirtualAddr = (ULONG_PTR)MmGetMdlVirtualAddress(Mdl);
-
-        NumMapRegisters = ADDRESS_AND_SIZE_TO_SPAN_PAGES(VirtualAddr,
-                                                         TransferBufferLength);
-
-        Transfer->NumberOfMapRegisters = NumMapRegisters;
-
-        Status = 
DmaOperations->AllocateAdapterChannel(FdoExtension->DmaAdapter,
-                                                       FdoDevice,
-                                                       NumMapRegisters,
-                                                       USBPORT_MapTransfer,
-                                                       Transfer);
-
-        if (!NT_SUCCESS(Status))
-            ASSERT(FALSE);
-    }
-
-    KeLowerIrql(OldIrql);
-}
-
-USBD_STATUS
-NTAPI
-USBPORT_AllocateTransfer(IN PDEVICE_OBJECT FdoDevice,
-                         IN PURB Urb,
-                         IN PUSBPORT_DEVICE_HANDLE DeviceHandle,
-                         IN PIRP Irp,
-                         IN PRKEVENT Event)
-{
-    PUSBPORT_DEVICE_EXTENSION FdoExtension;
-    SIZE_T TransferLength;
-    PMDL Mdl;
-    ULONG_PTR VirtualAddr;
-    ULONG PagesNeed = 0;
-    SIZE_T PortTransferLength;
-    SIZE_T FullTransferLength;
-    PUSBPORT_TRANSFER Transfer;
-    PUSBPORT_PIPE_HANDLE PipeHandle;
-    USBD_STATUS USBDStatus;
-
-    DPRINT_CORE("USBPORT_AllocateTransfer: FdoDevice - %p, Urb - %p, 
DeviceHandle - %p, Irp - %p, Event - %p\n",
-           FdoDevice,
-           Urb,
-           DeviceHandle,
-           Irp,
-           Event);
-
-    FdoExtension = FdoDevice->DeviceExtension;
-
-    TransferLength = Urb->UrbControlTransfer.TransferBufferLength;
-    PipeHandle = Urb->UrbControlTransfer.PipeHandle;
-
-    if (TransferLength)
-    {
-        Mdl = Urb->UrbControlTransfer.TransferBufferMDL;
-        VirtualAddr = (ULONG_PTR)MmGetMdlVirtualAddress(Mdl);
-
-        PagesNeed = ADDRESS_AND_SIZE_TO_SPAN_PAGES(VirtualAddr,
-                                                   TransferLength);
-    }
-
-    if (Urb->UrbHeader.Function == URB_FUNCTION_ISOCH_TRANSFER)
-    {
-        DPRINT1("USBPORT_AllocateTransfer: ISOCH_TRANSFER UNIMPLEMENTED. 
FIXME.\n");
-    }
-
-    PortTransferLength = sizeof(USBPORT_TRANSFER) +
-                         PagesNeed * sizeof(USBPORT_SCATTER_GATHER_ELEMENT);
-
-    FullTransferLength = PortTransferLength +
-                         
FdoExtension->MiniPortInterface->Packet.MiniPortTransferSize;
-
-    Transfer = ExAllocatePoolWithTag(NonPagedPool,
-                                     FullTransferLength,
-                                     USB_PORT_TAG);
-
-    if (Transfer)
-    {
-        RtlZeroMemory(Transfer, FullTransferLength);
-
-        Transfer->Irp = Irp;
-        Transfer->Urb = Urb;
-        Transfer->Endpoint = PipeHandle->Endpoint;
-        Transfer->Event = Event;
-        Transfer->PortTransferLength = PortTransferLength;
-        Transfer->FullTransferLength = FullTransferLength;
-
-        Transfer->MiniportTransfer = (PVOID)((ULONG_PTR)Transfer +
-                                             PortTransferLength);
-
-        Urb->UrbControlTransfer.hca.Reserved8[0] = Transfer;
-        Urb->UrbHeader.UsbdFlags |= USBD_FLAG_ALLOCATED_TRANSFER;
-
-        USBDStatus = USBD_STATUS_SUCCESS;
-    }
-    else
-    {
-        USBDStatus = USBD_STATUS_INSUFFICIENT_RESOURCES;
-    }
-
-    DPRINT_CORE("USBPORT_AllocateTransfer: return USBDStatus - %x\n",
-                USBDStatus);
-
-    return USBDStatus;
-}
-
-NTSTATUS
-NTAPI
-USBPORT_Dispatch(IN PDEVICE_OBJECT DeviceObject,
-                 IN PIRP Irp)
-{
-    PUSBPORT_COMMON_DEVICE_EXTENSION DeviceExtension;
-    PIO_STACK_LOCATION IoStack;
-    NTSTATUS Status = STATUS_SUCCESS;
-
-    DeviceExtension = DeviceObject->DeviceExtension;
-    IoStack = IoGetCurrentIrpStackLocation(Irp);
-
-    if (DeviceExtension->PnpStateFlags & USBPORT_PNP_STATE_FAILED)
-    {
-        DPRINT1("USBPORT_Dispatch: USBPORT_PNP_STATE_FAILED\n");
-        DbgBreakPoint();
-    }
-
-    switch (IoStack->MajorFunction)
-    {
-        case IRP_MJ_DEVICE_CONTROL:
-            if (DeviceExtension->IsPDO)
-            {
-                DPRINT("USBPORT_Dispatch: PDO IRP_MJ_DEVICE_CONTROL. Major - 
%d, Minor - %d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-
-                Status = USBPORT_PdoDeviceControl(DeviceObject, Irp);
-            }
-            else
-            {
-                DPRINT("USBPORT_Dispatch: FDO IRP_MJ_DEVICE_CONTROL. Major - 
%d, Minor - %d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-
-                Status = USBPORT_FdoDeviceControl(DeviceObject, Irp);
-            }
-
-            break;
-
-        case IRP_MJ_INTERNAL_DEVICE_CONTROL:
-            if (DeviceExtension->IsPDO)
-            {
-                DPRINT("USBPORT_Dispatch: PDO IRP_MJ_INTERNAL_DEVICE_CONTROL. 
Major - %d, Minor - %d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-
-                Status = USBPORT_PdoInternalDeviceControl(DeviceObject, Irp);
-            }
-            else
-            {
-                DPRINT("USBPORT_Dispatch: FDO IRP_MJ_INTERNAL_DEVICE_CONTROL. 
Major - %d, Minor - %d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-
-                Status = USBPORT_FdoInternalDeviceControl(DeviceObject, Irp);
-            }
-
-            break;
-
-        case IRP_MJ_POWER:
-            if (DeviceExtension->IsPDO)
-            {
-                DPRINT("USBPORT_Dispatch: PDO IRP_MJ_POWER. Major - %d, Minor 
- %d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-
-                Status = USBPORT_PdoPower(DeviceObject, Irp);
-            }
-            else
-            {
-                DPRINT("USBPORT_Dispatch: FDO IRP_MJ_POWER. Major - %d, Minor 
- %d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-
-                Status = USBPORT_FdoPower(DeviceObject, Irp);
-            }
-
-            break;
-
-        case IRP_MJ_SYSTEM_CONTROL:
-            if (DeviceExtension->IsPDO)
-            {
-                DPRINT("USBPORT_Dispatch: PDO IRP_MJ_SYSTEM_CONTROL. Major - 
%d, Minor - %d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-
-                Irp->IoStatus.Status = Status;
-                IoCompleteRequest(Irp, IO_NO_INCREMENT);
-            }
-            else
-            {
-                DPRINT("USBPORT_Dispatch: FDO IRP_MJ_SYSTEM_CONTROL. Major - 
%d, Minor - %d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-
-                IoSkipCurrentIrpStackLocation(Irp);
-                Status = IoCallDriver(DeviceExtension->LowerDevice, Irp);
-            }
-
-            break;
-
-        case IRP_MJ_PNP:
-            if (DeviceExtension->IsPDO)
-            {
-                DPRINT("USBPORT_Dispatch: PDO IRP_MJ_PNP. Major - %d, Minor - 
%d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-
-                Status = USBPORT_PdoPnP(DeviceObject, Irp);
-            }
-            else
-            {
-                DPRINT("USBPORT_Dispatch: FDO IRP_MJ_PNP. Major - %d, Minor - 
%d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-
-                Status = USBPORT_FdoPnP(DeviceObject, Irp);
-            }
-
-            break;
-
-        case IRP_MJ_CREATE:
-        case IRP_MJ_CLOSE:
-            DPRINT("USBPORT_Dispatch: IRP_MJ_CREATE | IRP_MJ_CLOSE\n");
-            Irp->IoStatus.Status = Status;
-            IoCompleteRequest(Irp, IO_NO_INCREMENT);
-            break;
-
-        default:
-            if (DeviceExtension->IsPDO)
-            {
-                DPRINT("USBPORT_Dispatch: PDO unhandled IRP_MJ_???. Major - 
%d, Minor - %d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-            }
-            else
-            {
-                DPRINT("USBPORT_Dispatch: FDO unhandled IRP_MJ_???. Major - 
%d, Minor - %d\n",
-                       IoStack->MajorFunction,
-                       IoStack->MinorFunction);
-            }
-
-            Status = STATUS_INVALID_DEVICE_REQUEST;
-            Irp->IoStatus.Status = Status;
-            IoCompleteRequest(Irp, IO_NO_INCREMENT);
-            break;
-    }
-
-    DPRINT("USBPORT_Dispatch: Status - %x\n", Status);
-    return Status;
-}
-
-ULONG
-NTAPI
-USBPORT_GetHciMn(VOID)
-{
-    return USBPORT_HCI_MN;
-}
-
-NTSTATUS
-NTAPI
-USBPORT_RegisterUSBPortDriver(IN PDRIVER_OBJECT DriverObject,
-                              IN ULONG Version,
-                              IN PUSBPORT_REGISTRATION_PACKET RegPacket)
-{
-    PUSBPORT_MINIPORT_INTERFACE MiniPortInterface;
-
-    DPRINT("USBPORT_RegisterUSBPortDriver: DriverObject - %p, Version - %p, 
RegPacket - %p\n",
-           DriverObject,
-           Version,
-           RegPacket);
-
-    DPRINT("USBPORT_RegisterUSBPortDriver: sizeof(USBPORT_MINIPORT_INTERFACE) 
- %x\n",
-           sizeof(USBPORT_MINIPORT_INTERFACE));
-
-    DPRINT("USBPORT_RegisterUSBPortDriver: sizeof(USBPORT_DEVICE_EXTENSION)   
- %x\n",
-           sizeof(USBPORT_DEVICE_EXTENSION));
-
-    if (Version < USB10_MINIPORT_INTERFACE_VERSION)
-    {
-        return STATUS_UNSUCCESSFUL;
-    }
-
-    if (!USBPORT_Initialized)
-    {
-        InitializeListHead(&USBPORT_MiniPortDrivers);
-        InitializeListHead(&USBPORT_USB1FdoList);
-        InitializeListHead(&USBPORT_USB2FdoList);
-
-        KeInitializeSpinLock(&USBPORT_SpinLock);
-        USBPORT_Initialized = TRUE;
-    }
-
-    MiniPortInterface = ExAllocatePoolWithTag(NonPagedPool,
-                                              
sizeof(USBPORT_MINIPORT_INTERFACE),
-                                              USB_PORT_TAG);
-    if (!MiniPortInterface)
-    {
-        return STATUS_INSUFFICIENT_RESOURCES;
-    }
-
-    RtlZeroMemory(MiniPortInterface, sizeof(USBPORT_MINIPORT_INTERFACE));
-
-    MiniPortInterface->DriverObject = DriverObject;
-    MiniPortInterface->DriverUnload = DriverObject->DriverUnload;
-    MiniPortInterface->Version = Version;
-
-    ExInterlockedInsertTailList(&USBPORT_MiniPortDrivers,
-                                &MiniPortInterface->DriverLink,
-                                &USBPORT_SpinLock);
-
-    DriverObject->DriverExtension->AddDevice = USBPORT_AddDevice;
-    DriverObject->DriverUnload = USBPORT_Unload;
-
-    DriverObject->MajorFunction[IRP_MJ_CREATE] = USBPORT_Dispatch;
-    DriverObject->MajorFunction[IRP_MJ_CLOSE] = USBPORT_Dispatch;
-    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = USBPORT_Dispatch;
-    DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = 
USBPORT_Dispatch;
-    DriverObject->MajorFunction[IRP_MJ_PNP] = USBPORT_Dispatch;
-    DriverObject->MajorFunction[IRP_MJ_POWER] = USBPORT_Dispatch;
-    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = USBPORT_Dispatch;
-
-    RegPacket->UsbPortDbgPrint = USBPORT_DbgPrint;
-    RegPacket->UsbPortTestDebugBreak = USBPORT_TestDebugBreak;
-    RegPacket->UsbPortAssertFailure = USBPORT_AssertFailure;
-    RegPacket->UsbPortGetMiniportRegistryKeyValue = 
USBPORT_GetMiniportRegistryKeyValue;
-    RegPacket->UsbPortInvalidateRootHub = USBPORT_InvalidateRootHub;
-    RegPacket->UsbPortInvalidateEndpoint = USBPORT_InvalidateEndpoint;
-    RegPacket->UsbPortCompleteTransfer = USBPORT_MiniportCompleteTransfer;
-    RegPacket->UsbPortCompleteIsoTransfer = USBPORT_CompleteIsoTransfer;
-    RegPacket->UsbPortLogEntry = USBPORT_LogEntry;
-    RegPacket->UsbPortGetMappedVirtualAddress = 
USBPORT_GetMappedVirtualAddress;
-    RegPacket->UsbPortRequestAsyncCallback = USBPORT_RequestAsyncCallback;
-    RegPacket->UsbPortReadWriteConfigSpace = USBPORT_ReadWriteConfigSpace;
-    RegPacket->UsbPortWait = USBPORT_Wait;
-    RegPacket->UsbPortInvalidateController = USBPORT_InvalidateController;
-    RegPacket->UsbPortBugCheck = USBPORT_BugCheck;
-    RegPacket->UsbPortNotifyDoubleBuffer = USBPORT_NotifyDoubleBuffer;
-
-    RtlCopyMemory(&MiniPortInterface->Packet,
-                  RegPacket,
-                  sizeof(USBPORT_REGISTRATION_PACKET));
-
-    return STATUS_SUCCESS;
-}
-
-NTSTATUS
-NTAPI
-DriverEntry(IN PDRIVER_OBJECT DriverObject,
-            IN PUNICODE_STRING RegistryPath)
-{
-    return STATUS_SUCCESS;
-}

Modified: trunk/reactos/drivers/usb/usbport/queue.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbport/queue.c?rev=75745&r1=75744&r2=75745&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbport/queue.c   [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbport/queue.c   [iso-8859-1] Sat Sep  2 
22:48:45 2017
@@ -531,7 +531,7 @@
     PIRP irp;
     KIRQL OldIrql;
 
-    DPRINT_CORE("USBPORT_CancelTransferIrp: Irp - %p\n", Irp);
+    DPRINT_CORE("USBPORT_CancelActiveTransferIrp: Irp - %p\n", Irp);
 
     PdoExtension = DeviceObject->DeviceExtension;
     FdoDevice = PdoExtension->FdoDevice;
@@ -549,7 +549,7 @@
         Transfer = Urb->UrbControlTransfer.hca.Reserved8[0];
         Endpoint = Transfer->Endpoint;
 
-        DPRINT_CORE("USBPORT_CancelTransferIrp: irp - %p, Urb - %p, Transfer - 
%p\n",
+        DPRINT_CORE("USBPORT_CancelActiveTransferIrp: irp - %p, Urb - %p, 
Transfer - %p\n",
                     irp,
                     Urb,
                     Transfer);

Modified: trunk/reactos/drivers/usb/usbport/usbport.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbport/usbport.c?rev=75745&r1=75744&r2=75745&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbport/usbport.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbport/usbport.c [iso-8859-1] Sat Sep  2 
22:48:45 2017
@@ -588,7 +588,7 @@
     PDEVICE_OBJECT FdoDevice;
     PUSBPORT_DEVICE_EXTENSION FdoExtension;
 
-    DPRINT("USBPORT_SoftInterruptDpc: ... \n");
+    DPRINT_INT("USBPORT_SoftInterruptDpc: ... \n");
 
     FdoDevice = DeferredContext;
     FdoExtension = FdoDevice->DeviceExtension;
@@ -606,7 +606,7 @@
     PUSBPORT_DEVICE_EXTENSION FdoExtension;
     LARGE_INTEGER DueTime = {{0, 0}};
 
-    DPRINT("USBPORT_SoftInterrupt: ... \n");
+    DPRINT_INT("USBPORT_SoftInterrupt: ... \n");
 
     FdoExtension = FdoDevice->DeviceExtension;
 
@@ -1079,7 +1079,8 @@
     FdoExtension = FdoDevice->DeviceExtension;
     Packet = &FdoExtension->MiniPortInterface->Packet;
 
-    DPRINT_INT("USBPORT_InterruptService: FdoExtension->Flags - %lx\n",
+    DPRINT_INT("USBPORT_InterruptService: FdoExtension[%p]->Flags - %08X\n",
+           FdoExtension,
            FdoExtension->Flags);
 
     if (FdoExtension->Flags & USBPORT_FLAG_INTERRUPT_ENABLED &&
@@ -1936,7 +1937,7 @@
     //MiniPortInterface->DriverUnload(DriverObject); // Call MiniPort 
_HCI_Unload
 }
 
-ULONG
+VOID
 NTAPI
 USBPORT_MiniportCompleteTransfer(IN PVOID MiniPortExtension,
                                  IN PVOID MiniPortEndpoint,
@@ -1969,18 +1970,7 @@
                                 &Transfer->TransferLink,
                                 &FdoExtension->DoneTransferSpinLock);
 
-    return KeInsertQueueDpc(&FdoExtension->TransferFlushDpc, NULL, NULL);
-}
-
-ULONG
-NTAPI
-USBPORT_CompleteIsoTransfer(IN PVOID MiniPortExtension,
-                            IN PVOID MiniPortEndpoint,
-                            IN PVOID TransferParameters,
-                            IN ULONG TransferLength)
-{
-    DPRINT1("USBPORT_CompleteIsoTransfer: UNIMPLEMENTED. FIXME.\n");
-    return 0;
+    KeInsertQueueDpc(&FdoExtension->TransferFlushDpc, NULL, NULL);
 }
 
 VOID
@@ -2309,7 +2299,7 @@
 
         do
         {
-            ElementLength = 0x1000 - (PhAddress.LowPart & 0xFFF);
+            ElementLength = PAGE_SIZE - (PhAddress.LowPart & (PAGE_SIZE - 1));
 
             if (ElementLength > SgCurrentLength)
                 ElementLength = SgCurrentLength;
@@ -2331,9 +2321,9 @@
         }
         while (SgCurrentLength);
 
-        if ((PhAddr.LowPart == PhAddress.LowPart) &&
-            (PhAddr.HighPart == PhAddress.HighPart))
-        {
+        if (PhAddr.QuadPart == PhAddress.QuadPart)
+        {
+            DPRINT1("USBPORT_MapTransfer: PhAddr == PhAddress\n");
             ASSERT(FALSE);
         }
 

Modified: trunk/reactos/drivers/usb/usbport/usbport.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbport/usbport.h?rev=75745&r1=75744&r2=75745&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbport/usbport.h [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbport/usbport.h [iso-8859-1] Sat Sep  2 
22:48:45 2017
@@ -862,6 +862,22 @@
   IN PDEVICE_OBJECT RootHubPdo,
   IN PUNICODE_STRING DestinationString);
 
+/* iso.c */
+USBD_STATUS
+NTAPI
+USBPORT_InitializeIsoTransfer(
+  IN PDEVICE_OBJECT FdoDevice,
+  IN struct _URB_ISOCH_TRANSFER * Urb,
+  IN PUSBPORT_TRANSFER Transfer);
+
+ULONG
+NTAPI
+USBPORT_CompleteIsoTransfer(
+  IN PVOID MiniPortExtension,
+  IN PVOID MiniPortEndpoint,
+  IN PVOID TransferParameters,
+  IN ULONG TransferLength);
+
 /* pnp.c */
 NTSTATUS
 NTAPI

Modified: trunk/reactos/sdk/include/reactos/drivers/usbport/usbmport.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/include/reactos/drivers/usbport/usbmport.h?rev=75745&r1=75744&r2=75745&view=diff
==============================================================================
--- trunk/reactos/sdk/include/reactos/drivers/usbport/usbmport.h        
[iso-8859-1] (original)
+++ trunk/reactos/sdk/include/reactos/drivers/usbport/usbmport.h        
[iso-8859-1] Sat Sep  2 22:48:45 2017
@@ -43,7 +43,7 @@
 
 typedef struct _USBPORT_RESOURCES {
   ULONG ResourcesTypes;
-  ULONG HcFlavor;
+  USB_CONTROLLER_FLAVOR HcFlavor;
   ULONG InterruptVector;
   KIRQL InterruptLevel;
   UCHAR Padded1[3];
@@ -364,7 +364,7 @@
   PVOID,
   PVOID);
 
-typedef ULONG
+typedef VOID
 (NTAPI *PUSBPORT_COMPLETE_TRANSFER)(
   PVOID,
   PVOID,
@@ -581,6 +581,8 @@
 C_ASSERT(sizeof(USBPORT_MINIPORT_INTERFACE) == 32 + 76 * sizeof(PVOID));
 
 #define USBPORT_TRANSFER_DIRECTION_OUT  1 // From host to device
+#define USBPORT_MAX_DEVICE_ADDRESS      127
+
 typedef struct _USBPORT_ENDPOINT_PROPERTIES {
   USHORT DeviceAddress;
   USHORT EndpointAddress;


Reply via email to