2 * PROJECT: ReactOS USB Port Driver
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: USBPort USB 2.0 functions
5 * COPYRIGHT: Copyright 2017 Vadim Galyant <vgal@rambler.ru>
15 USB2_InitTtEndpoint(IN PUSB2_TT_ENDPOINT TtEndpoint
,
16 IN UCHAR TransferType
,
20 IN USHORT MaxPacketSize
,
23 RtlZeroMemory(TtEndpoint
, sizeof(USB2_TT_ENDPOINT
));
25 TtEndpoint
->TtEndpointParams
.TransferType
= TransferType
;
26 TtEndpoint
->TtEndpointParams
.Direction
= Direction
;
27 TtEndpoint
->TtEndpointParams
.DeviceSpeed
= DeviceSpeed
;
29 TtEndpoint
->Period
= Period
;
30 TtEndpoint
->MaxPacketSize
= MaxPacketSize
;
36 USBPORT_UpdateAllocatedBwTt(IN PUSB2_TT_EXTENSION TtExtension
)
39 ULONG NewBusBandwidth
;
40 ULONG MaxBusBandwidth
= 0;
41 ULONG MinBusBandwidth
;
44 DPRINT("USBPORT_UpdateAllocatedBwTt: TtExtension - %p\n", TtExtension
);
46 BusBandwidth
= TtExtension
->BusBandwidth
;
47 MinBusBandwidth
= BusBandwidth
;
49 for (ix
= 0; ix
< USB2_FRAMES
; ix
++)
51 NewBusBandwidth
= BusBandwidth
- TtExtension
->Bandwidth
[ix
];
53 if (NewBusBandwidth
> MaxBusBandwidth
)
54 MaxBusBandwidth
= NewBusBandwidth
;
56 if (NewBusBandwidth
< MinBusBandwidth
)
57 MinBusBandwidth
= NewBusBandwidth
;
60 TtExtension
->MaxBandwidth
= MaxBusBandwidth
;
62 if (MinBusBandwidth
== BusBandwidth
)
63 TtExtension
->MinBandwidth
= 0;
65 TtExtension
->MinBandwidth
= MinBusBandwidth
;
70 USBPORT_AllocateBandwidthUSB2(IN PDEVICE_OBJECT FdoDevice
,
71 IN PUSBPORT_ENDPOINT Endpoint
)
73 DPRINT1("USBPORT_AllocateBandwidthUSB2: UNIMPLEMENTED. FIXME. \n");
79 USBPORT_FreeBandwidthUSB2(IN PDEVICE_OBJECT FdoDevice
,
80 IN PUSBPORT_ENDPOINT Endpoint
)
82 DPRINT1("USBPORT_FreeBandwidthUSB2: UNIMPLEMENTED. FIXME. \n");
87 USB2_InitTT(IN PUSB2_HC_EXTENSION HcExtension
,
93 DPRINT("USB2_InitTT: HcExtension - %p, Tt - %p\n", HcExtension
, Tt
);
95 Tt
->HcExtension
= HcExtension
;
97 Tt
->MaxTime
= USB2_FS_MAX_PERIODIC_ALLOCATION
;
99 for (ix
= 0; ix
< USB2_FRAMES
; ix
++)
101 Tt
->FrameBudget
[ix
].TimeUsed
= USB2_MAX_MICROFRAMES
;
102 Tt
->FrameBudget
[ix
].AltEndpoint
= NULL
;
104 for (jx
= 0; jx
< USB2_MICROFRAMES
; jx
++)
106 Tt
->TimeCS
[ix
][jx
] = 0;
107 Tt
->NumStartSplits
[ix
][jx
] = 0;
110 Tt
->FrameBudget
[ix
].IsoEndpoint
= &Tt
->IsoEndpoint
[ix
];
112 USB2_InitTtEndpoint(&Tt
->IsoEndpoint
[ix
],
113 USBPORT_TRANSFER_TYPE_ISOCHRONOUS
,
114 USBPORT_TRANSFER_DIRECTION_OUT
,
120 Tt
->IsoEndpoint
[ix
].ActualPeriod
= USB2_FRAMES
;
121 Tt
->IsoEndpoint
[ix
].CalcBusTime
= USB2_FS_SOF_TIME
+ USB2_HUB_DELAY
;
122 Tt
->IsoEndpoint
[ix
].StartFrame
= ix
;
123 Tt
->IsoEndpoint
[ix
].StartMicroframe
= 0xFF;
125 Tt
->FrameBudget
[ix
].IntEndpoint
= &Tt
->IntEndpoint
[ix
];
127 USB2_InitTtEndpoint(&Tt
->IntEndpoint
[ix
],
128 USBPORT_TRANSFER_TYPE_INTERRUPT
,
129 USBPORT_TRANSFER_DIRECTION_OUT
,
135 Tt
->IntEndpoint
[ix
].ActualPeriod
= USB2_FRAMES
;
136 Tt
->IntEndpoint
[ix
].CalcBusTime
= USB2_FS_SOF_TIME
+ USB2_HUB_DELAY
;
137 Tt
->IntEndpoint
[ix
].StartFrame
= ix
;
138 Tt
->IntEndpoint
[ix
].StartMicroframe
= 0xFF;
144 USB2_InitController(IN PUSB2_HC_EXTENSION HcExtension
)
149 DPRINT("USB2_InitController: HcExtension - %p\n", HcExtension
);
151 HcExtension
->MaxHsBusAllocation
= USB2_MAX_MICROFRAME_ALLOCATION
;
153 for (ix
= 0; ix
< USB2_FRAMES
; ix
++)
155 for (jx
= 0; jx
< USB2_MICROFRAMES
; jx
++)
157 HcExtension
->TimeUsed
[ix
][jx
] = 0;
161 HcExtension
->HcDelayTime
= USB2_CONTROLLER_DELAY
;
163 USB2_InitTT(HcExtension
, &HcExtension
->HcTt
);