https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c6ca2a8f027e22091fd08…
commit c6ca2a8f027e22091fd08b1825a9298ec63ee5d8
Author: Vadim Galyant <vgal(a)rambler.ru>
AuthorDate: Tue Nov 28 14:41:05 2017 +0900
Commit: Amine Khaldi <amine.khaldi(a)reactos.org>
CommitDate: Sun Jan 21 19:35:40 2018 +0100
[USBPORT] Add support for transaction translators in USBPORT_OpenPipe() and
USBPORT_ClosePipe().
---
drivers/usb/usbport/device.c | 2 +-
drivers/usb/usbport/endpoint.c | 44 +++++++++++++++++++++++++++++++++++-------
drivers/usb/usbport/usbport.h | 4 +++-
3 files changed, 41 insertions(+), 9 deletions(-)
diff --git a/drivers/usb/usbport/device.c b/drivers/usb/usbport/device.c
index fdeac97846..f1cb04eb47 100644
--- a/drivers/usb/usbport/device.c
+++ b/drivers/usb/usbport/device.c
@@ -1914,7 +1914,7 @@ USBPORT_InitializeTT(IN PDEVICE_OBJECT FdoDevice,
TtExtension->RootHubPdo = FdoExtension->RootHubPdo;
TtExtension->BusBandwidth = TOTAL_USB11_BUS_BANDWIDTH;
- InitializeListHead(&TtExtension->TtList);
+ InitializeListHead(&TtExtension->EndpointList);
/* 90% maximum allowed for periodic endpoints */
for (ix = 0; ix < USB2_FRAMES; ix++)
diff --git a/drivers/usb/usbport/endpoint.c b/drivers/usb/usbport/endpoint.c
index 2479cf9dea..49124ae763 100644
--- a/drivers/usb/usbport/endpoint.c
+++ b/drivers/usb/usbport/endpoint.c
@@ -471,6 +471,9 @@ USBPORT_ClosePipe(IN PUSBPORT_DEVICE_HANDLE DeviceHandle,
PUSBPORT_DEVICE_EXTENSION FdoExtension;
PUSBPORT_RHDEVICE_EXTENSION PdoExtension;
PUSBPORT_ENDPOINT Endpoint;
+ PUSBPORT_REGISTRATION_PACKET Packet;
+ PUSB2_TT_EXTENSION TtExtension;
+ ULONG ix;
BOOLEAN IsReady;
KIRQL OldIrql;
@@ -492,7 +495,6 @@ USBPORT_ClosePipe(IN PUSBPORT_DEVICE_HANDLE DeviceHandle,
}
Endpoint = PipeHandle->Endpoint;
- DPRINT("USBPORT_ClosePipe: Endpoint - %p\n", Endpoint);
KeAcquireSpinLock(&FdoExtension->EndpointListSpinLock, &OldIrql);
@@ -543,16 +545,44 @@ USBPORT_ClosePipe(IN PUSBPORT_DEVICE_HANDLE DeviceHandle,
}
Endpoint->DeviceHandle = NULL;
+ Packet = &FdoExtension->MiniPortInterface->Packet;
- if (FdoExtension->MiniPortInterface->Packet.MiniPortFlags &
USB_MINIPORT_FLAGS_USB2)
+ if (Packet->MiniPortFlags & USB_MINIPORT_FLAGS_USB2)
{
- DPRINT("USBPORT_ClosePipe: FIXME USBPORT_FreeBandwidthUSB20\n");
- //USBPORT_FreeBandwidthUSB20();
+ USBPORT_FreeBandwidthUSB2(FdoDevice, Endpoint);
+
+ KeAcquireSpinLock(&FdoExtension->TtSpinLock, &OldIrql);
+
+ TtExtension = Endpoint->TtExtension;
+
+ if (TtExtension)
+ {
+ RemoveEntryList(&Endpoint->TtLink);
+
+ Endpoint->TtLink.Flink = NULL;
+ Endpoint->TtLink.Blink = NULL;
+
+ if (TtExtension->Flags & USB2_TT_EXTENSION_FLAG_DELETED)
+ {
+ if (IsListEmpty(&TtExtension->EndpointList))
+ {
+ USBPORT_UpdateAllocatedBwTt(TtExtension);
+
+ for (ix = 0; ix < USB2_FRAMES; ix++)
+ {
+ FdoExtension->Bandwidth[ix] += TtExtension->MaxBandwidth;
+ }
+
+ ExFreePool(TtExtension);
+ }
+ }
+ }
+
+ KeReleaseSpinLock(&FdoExtension->TtSpinLock, OldIrql);
}
else
{
- DPRINT("USBPORT_ClosePipe: FIXME USBPORT_FreeBandwidthUSB11\n");
- //USBPORT_FreeBandwidthUSB11();
+ USBPORT_FreeBandwidth(FdoDevice, Endpoint);
}
KeAcquireSpinLock(&Endpoint->EndpointSpinLock,
&Endpoint->EndpointOldIrql);
@@ -676,7 +706,7 @@ USBPORT_OpenPipe(IN PDEVICE_OBJECT FdoDevice,
if (DeviceHandle->TtExtension)
{
- ExInterlockedInsertTailList(&DeviceHandle->TtExtension->TtList,
+ ExInterlockedInsertTailList(&DeviceHandle->TtExtension->EndpointList,
&Endpoint->TtLink,
&FdoExtension->TtSpinLock);
}
diff --git a/drivers/usb/usbport/usbport.h b/drivers/usb/usbport/usbport.h
index 2f37634468..3bba591f06 100644
--- a/drivers/usb/usbport/usbport.h
+++ b/drivers/usb/usbport/usbport.h
@@ -528,6 +528,8 @@ typedef struct _USB2_TT {
ULONG TimeCS[USB2_FRAMES][USB2_MICROFRAMES];
} USB2_TT, *PUSB2_TT;
+#define USB2_TT_EXTENSION_FLAG_DELETED 1
+
typedef struct _USB2_TT_EXTENSION {
PDEVICE_OBJECT RootHubPdo;
ULONG Flags;
@@ -537,7 +539,7 @@ typedef struct _USB2_TT_EXTENSION {
ULONG MinBandwidth;
USHORT DeviceAddress;
USHORT TtNumber;
- LIST_ENTRY TtList;
+ LIST_ENTRY EndpointList;
LIST_ENTRY Link;
USB2_TT Tt;
} USB2_TT_EXTENSION, *PUSB2_TT_EXTENSION;