13 #define NDEBUG_EHCI_TRACE 98 0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, 6, 22, 14, 30,
99 1, 17, 9, 25, 5, 21, 13, 29, 3, 19, 11, 27, 7, 23, 15, 31
104 255, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,
105 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19,
106 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29,
121 if (EhciEndpoint->MaxTDs == 0)
127 TD = EhciEndpoint->FirstTD;
133 if (ix >= EhciEndpoint->MaxTDs)
142 EhciEndpoint->RemainTDs--;
157 DPRINT_EHCI(
"EHCI_InitializeQH: EhciEndpoint - %p, QH - %p, QhPA - %p\n",
162 EndpointProperties = &EhciEndpoint->EndpointProperties;
168 QH->sqh.PhysicalAddress = QhPA;
170 QH->sqh.HwQH.EndpointParams.DeviceAddress = EndpointProperties->
DeviceAddress;
171 QH->sqh.HwQH.EndpointParams.EndpointNumber = EndpointProperties->
EndpointAddress;
195 QH->sqh.HwQH.EndpointParams.MaximumPacketLength = EndpointProperties->
MaxPacketSize;
196 QH->sqh.HwQH.EndpointCaps.PipeMultiplier = 1;
200 QH->sqh.HwQH.EndpointCaps.HubAddr = 0;
201 QH->sqh.HwQH.EndpointCaps.PortNumber = 0;
205 QH->sqh.HwQH.EndpointCaps.HubAddr = EndpointProperties->
HubAddr;
206 QH->sqh.HwQH.EndpointCaps.PortNumber = EndpointProperties->
PortNumber;
209 QH->sqh.HwQH.EndpointParams.ControlEndpointFlag = 1;
236 DPRINT(
"EHCI_OpenBulkOrControlEndpoint: EhciEndpoint - %p, IsControl - %x\n",
242 EhciEndpoint->DmaBufferVA = (
PVOID)EndpointProperties->BufferVA;
243 EhciEndpoint->DmaBufferPA = EndpointProperties->BufferPA;
248 QhPA = EhciEndpoint->DmaBufferPA +
sizeof(
EHCI_HCD_TD);
252 TdCount = (EndpointProperties->BufferLength -
259 EhciEndpoint->MaxTDs = TdCount;
260 EhciEndpoint->RemainTDs = TdCount;
262 TdVA = EhciEndpoint->FirstTD;
265 for (ix = 0; ix < TdCount; ix++)
267 DPRINT_EHCI(
"EHCI_OpenBulkOrControlEndpoint: TdVA - %p, TdPA - %p\n",
291 EhciEndpoint->HcdHeadP =
NULL;
312 EhciEndpoint->HcdTailP = TD;
313 EhciEndpoint->HcdHeadP = TD;
340 ULONG ScheduleOffset;
344 DPRINT(
"EHCI_OpenInterruptEndpoint: EhciExtension - %p, EndpointProperties - %p, EhciEndpoint - %p\n",
349 Period = EndpointProperties->Period;
350 ScheduleOffset = EndpointProperties->ScheduleOffset;
364 if (EhciEndpoint->EndpointProperties.DeviceSpeed ==
UsbHighSpeed)
367 EhciEndpoint->PeriodTable = PeriodTable;
369 DPRINT(
"EHCI_OpenInterruptEndpoint: EhciEndpoint - %p, ScheduleMask - %X, Index - %X\n",
374 EhciEndpoint->StaticQH = EhciExtension->PeriodicHead[PeriodTable->
PeriodIdx];
378 EhciEndpoint->PeriodTable =
NULL;
380 DPRINT(
"EHCI_OpenInterruptEndpoint: EhciEndpoint - %p, Index - %X\n",
384 EhciEndpoint->StaticQH = EhciExtension->PeriodicHead[
ClassicPeriod[Idx] +
388 EhciEndpoint->DmaBufferVA = (
PVOID)EndpointProperties->BufferVA;
389 EhciEndpoint->DmaBufferPA = EndpointProperties->BufferPA;
394 QhPA = EndpointProperties->BufferPA +
sizeof(
EHCI_HCD_TD);
400 FirstTdPA = EndpointProperties->BufferPA +
404 TdCount = (EndpointProperties->BufferLength -
410 EhciEndpoint->FirstTD = FirstTD;
411 EhciEndpoint->MaxTDs = TdCount;
413 for (ix = 0; ix < TdCount; ix++)
415 TD = EhciEndpoint->FirstTD + ix;
428 EhciEndpoint->RemainTDs = TdCount;
435 if (EhciEndpoint->EndpointProperties.DeviceSpeed ==
UsbHighSpeed)
442 EndpointProperties->InterruptScheduleMask;
445 EndpointProperties->SplitCompletionMask;
459 EhciEndpoint->HcdTailP = DummyTD;
460 EhciEndpoint->HcdHeadP = DummyTD;
478 DPRINT1(
"EHCI_OpenHsIsoEndpoint: UNIMPLEMENTED. FIXME\n");
488 DPRINT1(
"EHCI_OpenIsoEndpoint: UNIMPLEMENTED. FIXME\n");
503 DPRINT(
"EHCI_OpenEndpoint: ... \n");
509 TransferType = EndpointProperties->TransferType;
511 switch (TransferType)
568 EhciEndpoint = ehciEndpoint;
570 TransferType = EndpointProperties->TransferType;
572 DPRINT(
"EHCI_ReopenEndpoint: EhciEndpoint - %p, TransferType - %x\n",
576 switch (TransferType)
581 DPRINT1(
"EHCI_ReopenEndpoint: HS Iso. UNIMPLEMENTED. FIXME\n");
586 DPRINT1(
"EHCI_ReopenEndpoint: Iso. UNIMPLEMENTED. FIXME\n");
599 QH = EhciEndpoint->
QH;
609 DPRINT1(
"EHCI_ReopenEndpoint: Unknown TransferType\n");
625 DPRINT(
"EHCI_QueryEndpointRequirements: ... \n");
627 TransferType = EndpointProperties->TransferType;
629 switch (TransferType)
632 DPRINT(
"EHCI_QueryEndpointRequirements: IsoTransfer\n");
647 DPRINT(
"EHCI_QueryEndpointRequirements: ControlTransfer\n");
648 EndpointRequirements->HeaderBufferSize =
sizeof(
EHCI_HCD_TD) +
656 DPRINT(
"EHCI_QueryEndpointRequirements: BulkTransfer\n");
657 EndpointRequirements->HeaderBufferSize =
sizeof(
EHCI_HCD_TD) +
665 DPRINT(
"EHCI_QueryEndpointRequirements: InterruptTransfer\n");
666 EndpointRequirements->HeaderBufferSize =
sizeof(
EHCI_HCD_TD) +
674 DPRINT1(
"EHCI_QueryEndpointRequirements: Unknown TransferType - %x\n",
688 DPRINT(
"EHCI_DisablePeriodicList: ... \n");
692 OperationalRegs = EhciExtension->OperationalRegs;
710 DPRINT1(
"EHCI_CloseEndpoint: EhciEndpoint - %p, DisablePeriodic - %X\n",
770 VAddress += NewPAddress - PAddress;
771 PAddress = NewPAddress;
773 DPRINT(
"EHCI_AlignHwStructure: VAddress - %X, PAddress - %X\n",
793 DPRINT(
"EHCI_AddDummyQueueHeads: EhciExtension - %p\n", EhciExtension);
795 HcResourcesVA = EhciExtension->HcResourcesVA;
797 DummyQH = EhciExtension->IsoDummyQHListVA;
798 DummyQhPA = EhciExtension->IsoDummyQHListPA;
845 DPRINT(
"EHCI_InitializeInterruptSchedule: ... \n");
849 StaticQH = EhciExtension->PeriodicHead[ix];
858 StaticQH = EhciExtension->PeriodicHead[ix];
864 EhciExtension->PeriodicHead[
LinkTable[ix]]->PhysicalAddress;
875 EhciExtension->PeriodicHead[0]->HwQH.HorizontalLink.Terminate = 1;
893 ULONG PeriodicHeadPA;
900 DPRINT(
"EHCI_InitializeSchedule: BaseVA - %p, BasePA - %p\n",
904 OperationalRegs = EhciExtension->OperationalRegs;
907 HcResourcesPA = BasePA;
909 EhciExtension->HcResourcesVA = HcResourcesVA;
910 EhciExtension->HcResourcesPA = BasePA;
919 NextLink.
AsULONG = AsyncHeadPA;
931 EhciExtension->AsyncHead = AsyncHead;
945 EhciExtension->PeriodicHead[ix] = PeriodicHead;
946 EhciExtension->PeriodicHead[ix]->PhysicalAddress = PeriodicHeadPA;
968 EhciExtension->IsoDummyQHListVA = &HcResourcesVA->
IsoDummyQH[0];
993 DPRINT(
"EHCI_InitializeHardware: ... \n");
995 OperationalRegs = EhciExtension->OperationalRegs;
996 CapabilityRegisters = EhciExtension->CapabilityRegisters;
1005 DPRINT(
"EHCI_InitializeHardware: Start reset ... \n");
1019 DPRINT1(
"EHCI_InitializeHardware: Reset failed!\n");
1027 DPRINT(
"EHCI_InitializeHardware: Reset - OK\n");
1031 EhciExtension->NumberOfPorts = StructuralParams.
PortCount;
1034 DPRINT(
"EHCI_InitializeHardware: StructuralParams - %X\n", StructuralParams.
AsULONG);
1035 DPRINT(
"EHCI_InitializeHardware: PortPowerControl - %x\n", EhciExtension->PortPowerControl);
1036 DPRINT(
"EHCI_InitializeHardware: N_PORTS - %x\n", EhciExtension->NumberOfPorts);
1041 EhciExtension->InterruptMask.AsULONG = 0;
1042 EhciExtension->InterruptMask.Interrupt = 1;
1043 EhciExtension->InterruptMask.ErrorInterrupt = 1;
1044 EhciExtension->InterruptMask.PortChangeInterrupt = 0;
1045 EhciExtension->InterruptMask.FrameListRollover = 1;
1046 EhciExtension->InterruptMask.HostSystemError = 1;
1047 EhciExtension->InterruptMask.InterruptOnAsyncAdvance = 1;
1061 DPRINT(
"EHCI_GetOffsetEECP: CapabilityID - %x\n", CapabilityID);
1063 CapParameters = EhciExtension->CapabilityRegisters->CapParameters;
1076 sizeof(LegacyCapability));
1078 DPRINT(
"EHCI_GetOffsetEECP: OffsetEECP - %x\n", OffsetEECP);
1101 DPRINT(
"EHCI_TakeControlHC: EhciExtension - %p\n", EhciExtension);
1105 if (OffsetEECP == 0)
1108 DPRINT(
"EHCI_TakeControlHC: OffsetEECP - %X\n", OffsetEECP);
1114 sizeof(LegacyCapability));
1125 sizeof(LegacyCapability));
1136 sizeof(LegacyCapability));
1141 DPRINT(
"EHCI_TakeControlHC: Ownership is ok\n");
1154 DPRINT1(
"EHCI_GetRegistryParameters: UNIMPLEMENTED. FIXME\n");
1167 UCHAR CapabilityRegLength;
1170 DPRINT(
"EHCI_StartController: ... \n");
1175 DPRINT1(
"EHCI_StartController: Resources->ResourcesTypes - %x\n",
1187 CapabilityRegLength);
1191 DPRINT(
"EHCI_StartController: CapabilityRegisters - %p\n", CapabilityRegisters);
1192 DPRINT(
"EHCI_StartController: OperationalRegs - %p\n", OperationalRegs);
1208 DPRINT1(
"EHCI_StartController: Unsuccessful TakeControlHC()\n");
1216 DPRINT1(
"EHCI_StartController: Unsuccessful InitializeHardware()\n");
1226 DPRINT1(
"EHCI_StartController: Unsuccessful InitializeSchedule()\n");
1253 Command.InterruptThreshold = 1;
1287 DPRINT1(
"EHCI_StopController: UNIMPLEMENTED. FIXME\n");
1301 DPRINT(
"EHCI_SuspendController: ... \n");
1311 Command.InterruptAdvanceDoorbell = 0;
1324 Status.PeriodicStatus = 0;
1325 Status.AsynchronousStatus = 0;
1332 for (ix = 0; ix < 10; ix++)
1358 ULONG RoutingControl;
1361 DPRINT(
"EHCI_ResumeController: ... \n");
1391 Command.InterruptAdvanceDoorbell = 0;
1393 Command.AsynchronousParkModeCount = 0;
1394 Command.AsynchronousParkModeEnable = 0;
1419 DPRINT1(
"EHCI_HardwarePresent: IsInvalidateController - %x\n",
1420 IsInvalidateController);
1422 if (!IsInvalidateController)
1503 DPRINT_EHCI(
"EHCI_InterruptDpc: [%p] EnableInterrupts - %x\n",
1513 DPRINT_EHCI(
"EHCI_InterruptDpc: [%p] InterruptStatus - %X\n", EhciExtension, iStatus.
AsULONG);
1519 DPRINT_EHCI(
"EHCI_InterruptDpc: [%p] PortChangeInterrupt\n", EhciExtension);
1549 DPRINT_EHCI(
"EHCI_MapAsyncTransferToTd: EhciTransfer - %p, TD - %p, TransferedLen - %x, MaxPacketSize - %x, DataToggle - %x\n",
1556 TransferParameters = EhciTransfer->TransferParameters;
1558 SgElement = &
SgList->SgElement[0];
1560 for (SgIdx = 0; SgIdx <
SgList->SgElementCount; SgIdx++)
1562 if (TransferedLen >= SgElement->
SgOffset &&
1571 SgRemain =
SgList->SgElementCount - SgIdx;
1575 TD->HwTD.Buffer[0] =
SgList->SgElement[SgIdx].SgPhysicalAddress.LowPart -
1576 SgList->SgElement[SgIdx].SgOffset +
1584 TD->HwTD.Buffer[ix] =
SgList->SgElement[SgIdx + ix].SgPhysicalAddress.LowPart;
1587 NumPackets = LengthThisTD / MaxPacketSize;
1588 DiffLength = LengthThisTD - MaxPacketSize * (LengthThisTD / MaxPacketSize);
1590 if (LengthThisTD != MaxPacketSize * (LengthThisTD / MaxPacketSize))
1591 LengthThisTD -= DiffLength;
1593 if (DataToggle && (NumPackets & 1))
1594 *DataToggle = !(*DataToggle);
1600 TD->HwTD.Buffer[0] = TransferedLen +
1601 SgList->SgElement[SgIdx].SgPhysicalAddress.LowPart -
1602 SgList->SgElement[SgIdx].SgOffset;
1606 if ((SgIdx + ix) >=
SgList->SgElementCount)
1609 TD->HwTD.Buffer[ix] =
SgList->SgElement[SgIdx + ix].SgPhysicalAddress.LowPart;
1613 TD->HwTD.Token.TransferBytes = LengthThisTD;
1614 TD->LengthThisTD = LengthThisTD;
1616 return LengthThisTD + TransferedLen;
1628 OperationalRegs = EhciExtension->OperationalRegs;
1642 DPRINT(
"EHCI_DisableAsyncList: ... \n");
1644 OperationalRegs = EhciExtension->OperationalRegs;
1658 DPRINT(
"EHCI_EnablePeriodicList: ... \n");
1660 OperationalRegs = EhciExtension->OperationalRegs;
1678 DPRINT_EHCI(
"EHCI_FlushAsyncCache: EhciExtension - %p\n", EhciExtension);
1680 OperationalRegs = EhciExtension->OperationalRegs;
1684 if (!
Status.AsynchronousStatus && !
Command.AsynchronousEnable)
1687 if (
Status.AsynchronousStatus && !
Command.AsynchronousEnable)
1706 if (!
Status.AsynchronousStatus &&
Command.AsynchronousEnable)
1720 Command.InterruptAdvanceDoorbell = 1;
1728 if (
Cmd.InterruptAdvanceDoorbell)
1732 if (
Cmd.AsULONG == -1)
1739 if (!
Command.InterruptAdvanceDoorbell)
1759 ULONG FrameIndexReg;
1763 DPRINT_EHCI(
"EHCI_LockQH: QH - %p, TransferType - %x\n",
1767 OperationalRegs = EhciExtension->OperationalRegs;
1779 EhciExtension->PrevQH = PrevQH;
1780 EhciExtension->NextQH = NextQH;
1781 EhciExtension->LockQH = QH;
1823 ASSERT(EhciExtension->LockQH);
1824 ASSERT(EhciExtension->LockQH == QH);
1828 EhciExtension->LockQH =
NULL;
1830 QhPA = QH->sqh.PhysicalAddress;
1834 EhciExtension->PrevQH->sqh.HwQH.HorizontalLink.AsULONG = QhPA;
1850 DPRINT_EHCI(
"EHCI_LinkTransferToQueue: EhciEndpoint - %p, NextTD - %p\n",
1857 QH = EhciEndpoint->QH;
1858 TD = EhciEndpoint->HcdHeadP;
1860 if (TD == EhciEndpoint->HcdTailP)
1866 EhciEndpoint->EndpointProperties.TransferType);
1881 EhciEndpoint->HcdHeadP = NextTD;
1885 DPRINT_EHCI(
"EHCI_LinkTransferToQueue: TD - %p, HcdTailP - %p\n",
1886 EhciEndpoint->HcdHeadP,
1887 EhciEndpoint->HcdTailP);
1889 LinkTD = EhciEndpoint->HcdHeadP;
1891 while (TD != EhciEndpoint->HcdTailP)
1897 ASSERT(LinkTD != EhciEndpoint->HcdTailP);
1901 TD = EhciEndpoint->FirstTD;
1903 for (ix = 0; ix < EhciEndpoint->MaxTDs; ix++)
1914 LinkTD->
HwTD.
NextTD = NextTD->PhysicalAddress;
1938 ULONG TransferedLen = 0;
1940 ULONG DataToggle = 1;
1942 DPRINT_EHCI(
"EHCI_ControlTransfer: EhciEndpoint - %p, EhciTransfer - %p\n",
1949 EhciExtension->PendingTransfers++;
1950 EhciEndpoint->PendingTDs++;
1952 EhciTransfer->TransferOnAsyncList = 1;
1962 EhciTransfer->PendingTDs++;
1985 &TransferParameters->SetupPacket,
1996 EhciTransfer->PendingTDs++;
2020 while (TransferedLen < TransferParameters->TransferBufferLength)
2032 EhciTransfer->PendingTDs++;
2071 EhciEndpoint->EndpointProperties.MaxPacketSize,
2089 Token.InterruptOnComplete = 1;
2090 Token.DataToggle = 1;
2099 LastTD->
NextHcdTD = EhciEndpoint->HcdTailP;
2100 LastTD->
HwTD.
NextTD = EhciEndpoint->HcdTailP->PhysicalAddress;
2105 ASSERT(EhciEndpoint->HcdTailP->NextHcdTD ==
NULL);
2106 ASSERT(EhciEndpoint->HcdTailP->AltNextHcdTD ==
NULL);
2122 ULONG TransferedLen;
2124 DPRINT_EHCI(
"EHCI_BulkTransfer: EhciEndpoint - %p, EhciTransfer - %p\n",
2128 if (((TransferParameters->TransferBufferLength /
2131 DPRINT1(
"EHCI_BulkTransfer: return MP_STATUS_FAILURE\n");
2135 EhciExtension->PendingTransfers++;
2136 EhciEndpoint->PendingTDs++;
2138 EhciTransfer->TransferOnAsyncList = 1;
2143 if (TransferParameters->TransferBufferLength)
2145 while (TransferedLen < TransferParameters->TransferBufferLength)
2155 EhciTransfer->PendingTDs++;
2173 if (EhciTransfer->PendingTDs == 1)
2197 EhciEndpoint->EndpointProperties.MaxPacketSize,
2217 EhciTransfer->PendingTDs++;
2236 ASSERT(EhciTransfer->PendingTDs == 1);
2258 TD->
HwTD.
NextTD = EhciEndpoint->HcdTailP->PhysicalAddress;
2264 ASSERT(EhciEndpoint->HcdTailP->NextHcdTD == 0);
2265 ASSERT(EhciEndpoint->HcdTailP->AltNextHcdTD == 0);
2281 ULONG TransferedLen = 0;
2283 DPRINT_EHCI(
"EHCI_InterruptTransfer: EhciEndpoint - %p, EhciTransfer - %p\n",
2287 if (!EhciEndpoint->RemainTDs)
2289 DPRINT1(
"EHCI_InterruptTransfer: EhciEndpoint - %p\n", EhciEndpoint);
2294 EhciEndpoint->PendingTDs++;
2296 if (!TransferParameters->TransferBufferLength)
2298 DPRINT1(
"EHCI_InterruptTransfer: EhciEndpoint - %p\n", EhciEndpoint);
2303 while (TransferedLen < TransferParameters->TransferBufferLength)
2309 DPRINT1(
"EHCI_InterruptTransfer: EhciEndpoint - %p\n", EhciEndpoint);
2314 EhciTransfer->PendingTDs++;
2333 if (EhciTransfer->PendingTDs == 1)
2352 EhciEndpoint->EndpointProperties.TotalMaxPacketSize,
2364 DPRINT_EHCI(
"EHCI_InterruptTransfer: PendingTDs - %x, TD->PhysicalAddress - %p, FirstTD - %p\n",
2365 EhciTransfer->PendingTDs,
2369 TD->
HwTD.
NextTD = EhciEndpoint->HcdTailP->PhysicalAddress;
2374 ASSERT(EhciEndpoint->HcdTailP->NextHcdTD ==
NULL);
2375 ASSERT(EhciEndpoint->HcdTailP->AltNextHcdTD ==
NULL);
2395 DPRINT_EHCI(
"EHCI_SubmitTransfer: EhciEndpoint - %p, EhciTransfer - %p\n",
2448 DPRINT1(
"EHCI_SubmitIsoTransfer: UNIMPLEMENTED. FIXME\n");
2458 DPRINT1(
"EHCI_AbortIsoTransfer: UNIMPLEMENTED. FIXME\n");
2469 ULONG TransferLength;
2477 DPRINT(
"EHCI_AbortAsyncTransfer: EhciEndpoint - %p, EhciTransfer - %p\n",
2481 QH = EhciEndpoint->QH;
2482 TD = EhciEndpoint->HcdHeadP;
2484 ASSERT(EhciEndpoint->PendingTDs);
2485 EhciEndpoint->PendingTDs--;
2491 while (TD != EhciEndpoint->HcdTailP &&
2502 EhciEndpoint->RemainTDs++;
2508 EhciTransfer->TransferLen += TransferLength;
2518 EhciEndpoint->HcdHeadP = TD;
2529 TD = EhciEndpoint->HcdHeadP;
2547 EhciEndpoint->RemainTDs++;
2561 if (CurrentTransfer == EhciTransfer)
2582 for (TD = EhciEndpoint->HcdHeadP;
2608 DPRINT(
"EHCI_AbortTransfer: EhciTransfer - %p, CompletedLength - %x\n",
2625 DPRINT1(
"EHCI_GetEndpointState: UNIMPLEMENTED. FIXME\n");
2639 QH = EhciEndpoint->QH;
2644 DPRINT(
"EHCI_RemoveQhFromPeriodicList: EhciEndpoint - %p, QH - %X, EhciEndpoint->StaticQH - %p\n",
2647 EhciEndpoint->StaticQH);
2687 DPRINT(
"EHCI_RemoveQhFromAsyncList: QH - %p\n", QH);
2694 AsyncHead = EhciExtension->AsyncHead;
2712 QH->sqh.PhysicalAddress)
2733 QH = EhciEndpoint->QH;
2741 QH->
sqh.
Period = EhciEndpoint->EndpointProperties.Period;
2742 QH->
sqh.
Ordinal = EhciEndpoint->EndpointProperties.Reserved6;
2744 DPRINT(
"EHCI_InsertQhInPeriodicList: EhciEndpoint - %p, QH - %X, EhciEndpoint->StaticQH - %p\n",
2747 EhciEndpoint->StaticQH);
2754 DPRINT(
"EHCI_InsertQhInPeriodicList: StaticQH - %p, StaticQH->NextHead - %p\n",
2764 PrevHead = NextHead;
2796 DPRINT(
"EHCI_InsertQhInAsyncList: QH - %p\n", QH);
2801 AsyncHead = EhciExtension->AsyncHead;
2806 QH->sqh.NextHead = NextHead;
2811 QhPA = QH->sqh.PhysicalAddress;
2826 DPRINT1(
"EHCI_SetIsoEndpointState: UNIMPLEMENTED. FIXME\n");
2838 DPRINT(
"EHCI_SetAsyncEndpointState: EhciEndpoint - %p, EndpointState - %x\n",
2842 QH = EhciEndpoint->QH;
2844 TransferType = EhciEndpoint->EndpointProperties.TransferType;
2846 switch (EndpointState)
2879 EhciEndpoint->EndpointState = EndpointState;
2891 DPRINT(
"EHCI_SetEndpointState: ... \n");
2893 EhciEndpoint = ehciEndpoint;
2938 Token = TD->HwTD.Token;
2942 DPRINT(
"EHCI_GetErrorFromTD: TD - %p, TRANSACTION_ERROR\n", TD);
2948 DPRINT(
"EHCI_GetErrorFromTD: TD - %p, BABBLE_DETECTED\n", TD);
2954 DPRINT(
"EHCI_GetErrorFromTD: TD - %p, DATA_BUFFER_ERROR\n", TD);
2960 DPRINT(
"EHCI_GetErrorFromTD: TD - %p, MISSED_MICROFRAME\n", TD);
2964 DPRINT(
"EHCI_GetErrorFromTD: TD - %p, STALL_PID\n", TD);
2977 ULONG LengthTransfered;
2982 DPRINT_EHCI(
"EHCI_ProcessDoneAsyncTd: TD - %p\n", TD);
2984 EhciTransfer = TD->EhciTransfer;
2999 LengthTransfered = TD->LengthThisTD - TD->HwTD.Token.TransferBytes;
3008 TD->HwTD.NextTD = 0;
3009 TD->HwTD.AlternateNextTD = 0;
3012 TD->EhciTransfer =
NULL;
3025 EhciExtension->PendingTransfers--;
3027 if (EhciExtension->PendingTransfers == 0)
3029 OperationalRegs = EhciExtension->OperationalRegs;
3032 if (!
Command.InterruptAdvanceDoorbell &&
3056 ULONG CurrentTDPhys;
3059 DPRINT_EHCI(
"EHCI_PollActiveAsyncEndpoint: ... \n");
3061 QH = EhciEndpoint->QH;
3070 if (CurrentTD == EhciEndpoint->DmaBufferVA)
3078 TD = EhciEndpoint->HcdHeadP;
3080 if (TD == CurrentTD)
3082 if (TD != EhciEndpoint->HcdTailP &&
3108 while (TD != CurrentTD)
3125 EhciEndpoint->HcdHeadP = TD;
3129 if ((CurrentTD->
NextHcdTD != EhciEndpoint->HcdTailP) &&
3134 EhciEndpoint->HcdHeadP = TD;
3142 EhciEndpoint->EndpointProperties.TransferType);
3155 while (TD != EhciEndpoint->HcdTailP)
3168 EhciEndpoint->HcdHeadP = EhciEndpoint->HcdTailP;
3186 DPRINT(
"EHCI_PollHaltedAsyncEndpoint: EhciEndpoint - %p\n", EhciEndpoint);
3188 QH = EhciEndpoint->QH;
3203 DPRINT(
"EHCI_PollHaltedAsyncEndpoint: CurrentTD - %p\n", CurrentTD);
3205 if (CurrentTD == EhciEndpoint->DmaBufferVA)
3208 ASSERT(EhciEndpoint->HcdTailP != CurrentTD);
3214 EhciEndpoint->EndpointProperties.TransferType);
3217 TD = EhciEndpoint->HcdHeadP;
3219 while (TD != CurrentTD)
3221 DPRINT(
"EHCI_PollHaltedAsyncEndpoint: TD - %p\n", TD);
3241 DPRINT(
"EHCI_PollHaltedAsyncEndpoint: TD - %p\n", TD);
3254 EhciEndpoint->HcdHeadP = TD;
3285 if (!EhciEndpoint->PendingTDs)
3288 QH = EhciEndpoint->QH;
3304 DoneList = &EhciEndpoint->ListTDs;
3326 DPRINT1(
"EHCI_PollIsoEndpoint: UNIMPLEMENTED. FIXME\n");
3387 DPRINT(
"EHCI_EnableInterrupts: EhciExtension->InterruptMask - %x\n",
3400 DPRINT(
"EHCI_DisableInterrupts: ... \n");
3446 EhciEndpoint = ehciEndpoint;
3448 DPRINT(
"EHCI_SetEndpointDataToggle: EhciEndpoint - %p, DataToggle - %x\n",
3470 EhciEndpoint = ehciEndpoint;
3472 DPRINT(
"EHCI_GetEndpointStatus: EhciEndpoint - %p\n", EhciEndpoint);
3477 return EndpointStatus;
3482 return EndpointStatus;
3495 EhciEndpoint = ehciEndpoint;
3497 DPRINT(
"EHCI_SetEndpointStatus: EhciEndpoint - %p, EndpointStatus - %x\n",
3510 QH = EhciEndpoint->
QH;
3525 DPRINT1(
"EHCI_ResetController: UNIMPLEMENTED. FIXME\n");
3539 DPRINT1(
"EHCI_StartSendOnePacket: UNIMPLEMENTED. FIXME\n");
3554 DPRINT1(
"EHCI_EndSendOnePacket: UNIMPLEMENTED. FIXME\n");
3565 DPRINT1(
"EHCI_PassThru: UNIMPLEMENTED. FIXME\n");
3575 DPRINT1(
"EHCI_RebalanceEndpoint: UNIMPLEMENTED. FIXME\n");
3586 DPRINT(
"EHCI_FlushInterrupts: ... \n");
3598 DPRINT1(
"EHCI_TakePortControl: UNIMPLEMENTED. FIXME\n");
3606 DPRINT1(
"EHCI_Unload: Not supported\n");
3616 DPRINT(
"DriverEntry: DriverObject - %p, RegistryPath - %wZ\n",
#define USBPORT_ENDPOINT_ACTIVE
ULONG PortChangeInterrupt
ULONG TransferBufferLength
#define KeQuerySystemTime(t)
#define USBPORT_INVALIDATE_CONTROLLER_SOFT_INTERRUPT
VOID NTAPI EHCI_EnableAsyncList(IN PEHCI_EXTENSION EhciExtension)
PHCI_RH_GET_STATUS RH_GetStatus
struct _EHCI_HCD_QH * PrevHead
#define USB_MINIPORT_FLAGS_POLLING
PHCI_RH_GET_PORT_STATUS RH_GetPortStatus
MPSTATUS NTAPI EHCI_ReopenEndpoint(IN PVOID ehciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PVOID ehciEndpoint)
PHCI_RH_CLEAR_FEATURE_PORT_POWER RH_ClearFeaturePortPower
PEHCI_HC_CAPABILITY_REGISTERS CapabilityRegisters
VOID NTAPI EHCI_SetIsoEndpointState(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint, IN ULONG EndpointState)
#define USBPORT_TRANSFER_TYPE_BULK
VOID NTAPI EHCI_CloseEndpoint(IN PVOID ehciExtension, IN PVOID ehciEndpoint, IN BOOLEAN DisablePeriodic)
#define EHCI_FRINDEX_INDEX_MASK
#define USB_MINIPORT_VERSION_EHCI
#define EHCI_QH_EP_FULL_SPEED
VOID NTAPI EHCI_AbortTransfer(IN PVOID ehciExtension, IN PVOID ehciEndpoint, IN PVOID ehciTransfer, IN PULONG CompletedLength)
#define EHCI_MAX_FS_ISO_TRANSFER_SIZE
EHCI_PORT_STATUS_CONTROL PortControl[15]
PEHCI_STATIC_QH NTAPI EHCI_GetQhForFrame(IN PEHCI_EXTENSION EhciExtension, IN ULONG FrameIdx)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN IsPresent
MPSTATUS NTAPI EHCI_OpenHsIsoEndpoint(IN PEHCI_EXTENSION EhciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PEHCI_ENDPOINT EhciEndpoint)
NTKERNELAPI VOID NTAPI WRITE_REGISTER_ULONG(IN PULONG Register, IN ULONG Value)
VOID NTAPI EHCI_AlignHwStructure(IN PEHCI_EXTENSION EhciExtension, IN PULONG PhysicalAddress, IN PULONG_PTR VirtualAddress, IN ULONG Alignment)
PUSBPORT_TRANSFER_PARAMETERS TransferParameters
#define STATUS_INSUFFICIENT_RESOURCES
static const UCHAR Balance[]
USBPORT_REGISTRATION_PACKET RegPacket
ULONG BackupPeriodiclistbase
struct _EHCI_HCD_TD EHCI_HCD_TD
VOID NTAPI EHCI_TakePortControl(IN PVOID ohciExtension)
PHCI_SUBMIT_TRANSFER SubmitTransfer
VOID NTAPI EHCI_RemoveQhFromAsyncList(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_HCD_QH QH)
#define ENDPOINT_INTERRUPT_1ms
#define EHCI_CONFIG_FLAG_CONFIGURED
#define EHCI_MAX_CONTROL_TRANSFER_SIZE
VOID NTAPI EHCI_CheckController(IN PVOID ehciExtension)
#define EHCI_QH_FLAG_STATIC_FAST
VOID NTAPI EHCI_PollHaltedAsyncEndpoint(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint)
PHCI_RH_SET_FEATURE_PORT_ENABLE RH_SetFeaturePortEnable
MPSTATUS NTAPI EHCI_RH_SetFeaturePortReset(IN PVOID ehciExtension, IN USHORT Port)
EHCI_USB_COMMAND HcCommand
PUSBPORT_GET_MAPPED_VIRTUAL_ADDRESS UsbPortGetMappedVirtualAddress
#define USBPORT_ENDPOINT_RUN
NTSTATUS NTAPI DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
PHCI_RH_SET_FEATURE_PORT_POWER RH_SetFeaturePortPower
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _In_ PWDF_USB_CONTROL_SETUP_PACKET SetupPacket
#define EHCI_MAX_HS_ISO_TRANSFER_SIZE
MPSTATUS NTAPI EHCI_EndSendOnePacket(IN PVOID ehciExtension, IN PVOID PacketParameters, IN PVOID Data, IN PULONG pDataLength, IN PVOID BufferVA, IN PVOID BufferPA, IN ULONG BufferLength, IN USBD_STATUS *pUSBDStatus)
ULONG NTAPI USBPORT_GetHciMn(VOID)
#define USBPORT_ENDPOINT_HALT
#define EHCI_FRAME_LIST_MAX_ENTRIES
PHCI_DISABLE_INTERRUPTS DisableInterrupts
VOID NTAPI EHCI_AddDummyQHs(IN PEHCI_EXTENSION EhciExtension)
MPSTATUS NTAPI EHCI_RH_ClearFeaturePortOvercurrentChange(IN PVOID ehciExtension, IN USHORT Port)
PUSBPORT_INVALIDATE_ENDPOINT UsbPortInvalidateEndpoint
VOID NTAPI EHCI_DumpHwQH(IN PEHCI_HCD_QH QH)
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
PHCI_RESUME_CONTROLLER ResumeController
MPSTATUS NTAPI EHCI_StartSendOnePacket(IN PVOID ehciExtension, IN PVOID PacketParameters, IN PVOID Data, IN PULONG pDataLength, IN PVOID BufferVA, IN PVOID BufferPA, IN ULONG BufferLength, IN USBD_STATUS *pUSBDStatus)
_IRQL_requires_same_ _In_ PLSA_STRING _In_ SECURITY_LOGON_TYPE _In_ ULONG _In_ ULONG _In_opt_ PTOKEN_GROUPS _In_ PTOKEN_SOURCE _Out_ PVOID _Out_ PULONG _Inout_ PLUID _Out_ PHANDLE Token
#define USBD_TRANSFER_DIRECTION_IN
MPSTATUS NTAPI EHCI_RH_ClearFeaturePortResetChange(IN PVOID ehciExtension, IN USHORT Port)
VOID NTAPI EHCI_PollController(IN PVOID ehciExtension)
PEHCI_HCD_QH NTAPI EHCI_InitializeQH(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint, IN PEHCI_HCD_QH QH, IN ULONG QhPA)
VOID NTAPI EHCI_FlushInterrupts(IN PVOID ehciExtension)
MPSTATUS NTAPI EHCI_SubmitTransfer(IN PVOID ehciExtension, IN PVOID ehciEndpoint, IN PUSBPORT_TRANSFER_PARAMETERS TransferParameters, IN PVOID ehciTransfer, IN PUSBPORT_SCATTER_GATHER_LIST SgList)
PUSBPORT_COMPLETE_TRANSFER UsbPortCompleteTransfer
VOID NTAPI EHCI_PollEndpoint(IN PVOID ehciExtension, IN PVOID ehciEndpoint)
_In_ LARGE_INTEGER _In_ ULONG Period
MPSTATUS NTAPI EHCI_OpenEndpoint(IN PVOID ehciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PVOID ehciEndpoint)
ULONG NTAPI EHCI_MapAsyncTransferToTd(IN PEHCI_EXTENSION EhciExtension, IN ULONG MaxPacketSize, IN ULONG TransferedLen, IN PULONG DataToggle, IN PEHCI_TRANSFER EhciTransfer, IN PEHCI_HCD_TD TD, IN PUSBPORT_SCATTER_GATHER_LIST SgList)
UCHAR NTAPI EHCI_GetOffsetEECP(IN PEHCI_EXTENSION EhciExtension, IN UCHAR CapabilityID)
#define EHCI_MAX_HS_ISO_HEADER_BUFFER_SIZE
PHCI_RH_SET_FEATURE_PORT_RESET RH_SetFeaturePortReset
VOID NTAPI EHCI_StopController(IN PVOID ehciExtension, IN BOOLEAN DisableInterrupts)
#define USBPORT_INVALIDATE_CONTROLLER_SURPRISE_REMOVE
#define USBPORT_TRANSFER_TYPE_CONTROL
MPSTATUS NTAPI EHCI_StartController(IN PVOID ehciExtension, IN PUSBPORT_RESOURCES Resources)
PHCI_ENABLE_INTERRUPTS EnableInterrupts
struct _EHCI_EXTENSION EHCI_EXTENSION
VOID NTAPI EHCI_InsertQhInPeriodicList(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint)
PHCI_RH_GET_ROOT_HUB_DATA RH_GetRootHubData
#define InsertTailList(ListHead, Entry)
NTKERNELAPI ULONG NTAPI READ_REGISTER_ULONG(IN PULONG Register)
USB_DEVICE_SPEED DeviceSpeed
ULONG NTAPI EHCI_Get32BitFrameNumber(IN PVOID ehciExtension)
ULONG ExtCapabilitiesPointer
MPSTATUS NTAPI EHCI_RH_ChirpRootPort(IN PVOID ehciExtension, IN USHORT Port)
VOID NTAPI EHCI_EnableInterrupts(IN PVOID ehciExtension)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
MPSTATUS NTAPI EHCI_RH_SetFeaturePortSuspend(IN PVOID ehciExtension, IN USHORT Port)
struct _EHCI_HW_REGISTERS * PEHCI_HW_REGISTERS
PUSBPORT_READ_WRITE_CONFIG_SPACE UsbPortReadWriteConfigSpace
#define EHCI_QH_FLAG_UPDATING
VOID NTAPI EHCI_EnablePeriodicList(IN PEHCI_EXTENSION EhciExtension)
ULONG HeadReclamationListFlag
#define EHCI_QH_FLAG_CLOSED
#define EHCI_LINK_TYPE_QH
VOID NTAPI EHCI_LinkTransferToQueue(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint, IN PEHCI_HCD_TD NextTD)
MPSTATUS NTAPI EHCI_OpenBulkOrControlEndpoint(IN PEHCI_EXTENSION EhciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PEHCI_ENDPOINT EhciEndpoint, IN BOOLEAN IsControl)
USBPORT_ENDPOINT_PROPERTIES EndpointProperties
VOID NTAPI EHCI_SetEndpointState(IN PVOID ehciExtension, IN PVOID ehciEndpoint, IN ULONG EndpointState)
VOID NTAPI EHCI_PollActiveAsyncEndpoint(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint)
struct _EHCI_HCD_TD * NextHcdTD
MPSTATUS NTAPI EHCI_RH_SetFeaturePortEnable(IN PVOID ehciExtension, IN USHORT Port)
#define ENDPOINT_INTERRUPT_4ms
#define EHCI_TOKEN_STATUS_ACTIVE
VOID NTAPI EHCI_RH_EnableIrq(IN PVOID ehciExtension)
#define EHCI_TD_TOKEN_PID_SETUP
PEHCI_HW_REGISTERS OperationalRegs
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
PHCI_SET_ENDPOINT_STATE SetEndpointState
struct _EHCI_TRANSFER EHCI_TRANSFER
PHCI_END_SEND_ONE_PACKET EndSendOnePacket
#define USBD_STATUS_BABBLE_DETECTED
VOID NTAPI EHCI_ProcessDoneAsyncTd(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_HCD_TD TD)
VOID NTAPI EHCI_QueryEndpointRequirements(IN PVOID ehciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PUSBPORT_ENDPOINT_REQUIREMENTS EndpointRequirements)
#define USB_MINIPORT_FLAGS_USB2
struct _EHCI_ENDPOINT EHCI_ENDPOINT
ULONG SplitCompletionMask
#define USBPORT_RESOURCES_MEMORY
PHCI_CLOSE_ENDPOINT CloseEndpoint
PHCI_RH_CLEAR_FEATURE_PORT_ENABLE_CHANGE RH_ClearFeaturePortEnableChange
#define EHCI_QH_FLAG_NUKED
#define MP_STATUS_NO_RESOURCES
VOID NTAPI EHCI_AbortAsyncTransfer(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint, IN PEHCI_TRANSFER EhciTransfer)
ULONG PeriodicFrameList[EHCI_FRAME_LIST_MAX_ENTRIES]
PHCI_RH_CLEAR_FEATURE_PORT_SUSPEND_CHANGE RH_ClearFeaturePortSuspendChange
VOID NTAPI EHCI_SetEndpointDataToggle(IN PVOID ehciExtension, IN PVOID ehciEndpoint, IN ULONG DataToggle)
ULONG InterruptOnComplete
#define USBPORT_ENDPOINT_PAUSED
MPSTATUS NTAPI EHCI_InitializeSchedule(IN PEHCI_EXTENSION EhciExtension, IN ULONG_PTR BaseVA, IN ULONG BasePA)
#define EHCI_TD_TOKEN_PID_OUT
PHCI_START_CONTROLLER StartController
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
EHCI_INTERRUPT_ENABLE InterruptMask
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
PHCI_RH_GET_HUB_STATUS RH_GetHubStatus
#define EHCI_FRINDEX_FRAME_MASK
VOID NTAPI EHCI_PollAsyncEndpoint(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint)
#define EHCI_INTERRUPT_MASK
EHCI_LINK_POINTER HorizontalLink
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
#define EHCI_TOKEN_STATUS_MISSED_MICROFRAME
VOID NTAPI EHCI_InterruptNextSOF(IN PVOID ehciExtension)
PHCI_SUBMIT_ISO_TRANSFER SubmitIsoTransfer
PHCI_POLL_CONTROLLER PollController
#define EHCI_HCD_TD_FLAG_DONE
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
PHCI_RH_CLEAR_FEATURE_PORT_SUSPEND RH_ClearFeaturePortSuspend
struct _EHCI_TRANSFER * EhciTransfer
PHCI_INTERRUPT_SERVICE InterruptService
#define ENDPOINT_INTERRUPT_32ms
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
PHCI_OPEN_ENDPOINT OpenEndpoint
struct _EHCI_HCD_TD * AltNextHcdTD
struct _EHCI_HC_RESOURCES EHCI_HC_RESOURCES
ULONG NTAPI EHCI_GetEndpointState(IN PVOID ehciExtension, IN PVOID ehciEndpoint)
USB_DEFAULT_PIPE_SETUP_PACKET SetupPacket
#define MP_STATUS_FAILURE
#define ENDPOINT_INTERRUPT_8ms
MPSTATUS NTAPI EHCI_RH_ClearFeaturePortPower(IN PVOID ehciExtension, IN USHORT Port)
PHCI_SET_ENDPOINT_STATUS SetEndpointStatus
struct _LIST_ENTRY * Flink
struct _EHCI_HCD_QH EHCI_HCD_QH
MPSTATUS NTAPI EHCI_RH_GetPortStatus(IN PVOID ehciExtension, IN USHORT Port, IN PUSB_PORT_STATUS_AND_CHANGE PortStatus)
PHCI_GET_ENDPOINT_STATE GetEndpointState
#define USBD_STATUS_XACT_ERROR
PHCI_RH_CLEAR_FEATURE_PORT_RESET_CHANGE RH_ClearFeaturePortResetChange
PUSBPORT_INVALIDATE_ROOT_HUB UsbPortInvalidateRootHub
MPSTATUS NTAPI EHCI_OpenInterruptEndpoint(IN PEHCI_EXTENSION EhciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PEHCI_ENDPOINT EhciEndpoint)
PHCI_ABORT_TRANSFER AbortTransfer
#define USBPORT_RESOURCES_INTERRUPT
#define USBD_STATUS_DATA_BUFFER_ERROR
#define USBPORT_ENDPOINT_REMOVE
struct _EHCI_STATIC_QH * StaticQH
VOID NTAPI EHCI_SuspendController(IN PVOID ehciExtension)
SIZE_T MiniPortExtensionSize
VOID NTAPI EHCI_FlushAsyncCache(IN PEHCI_EXTENSION EhciExtension)
MPSTATUS NTAPI EHCI_RH_ClearFeaturePortEnableChange(IN PVOID ehciExtension, IN USHORT Port)
MPSTATUS NTAPI EHCI_RH_ClearFeaturePortSuspendChange(IN PVOID ehciExtension, IN USHORT Port)
VOID NTAPI EHCI_InitializeInterruptSchedule(IN PEHCI_EXTENSION EhciExtension)
struct _EHCI_HCD_QH * PEHCI_HCD_QH
#define EHCI_QH_FLAG_IN_SCHEDULE
#define EHCI_HCD_TD_FLAG_ALLOCATED
struct _EHCI_HC_CAPABILITY_REGISTERS * PEHCI_HC_CAPABILITY_REGISTERS
MPSTATUS NTAPI EHCI_RH_ClearFeaturePortEnable(IN PVOID ehciExtension, IN USHORT Port)
EHCI_HC_STRUCTURAL_PARAMS StructParameters
#define EHCI_TOKEN_STATUS_HALTED
PHCI_RH_CHIRP_ROOT_PORT RH_ChirpRootPort
#define TOTAL_USB20_BUS_BANDWIDTH
PHCI_REBALANCE_ENDPOINT RebalanceEndpoint
PHCI_RH_SET_FEATURE_PORT_SUSPEND RH_SetFeaturePortSuspend
static const UCHAR ClassicPeriod[8]
ULONG MaximumPacketLength
MPSTATUS NTAPI EHCI_OpenIsoEndpoint(IN PEHCI_EXTENSION EhciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PEHCI_ENDPOINT EhciEndpoint)
UCHAR FrameLengthAdjustment
VOID NTAPI EHCI_SetEndpointStatus(IN PVOID ehciExtension, IN PVOID ehciEndpoint, IN ULONG EndpointStatus)
MPSTATUS NTAPI EHCI_RH_GetHubStatus(IN PVOID ehciExtension, IN PUSB_HUB_STATUS_AND_CHANGE HubStatus)
#define USBD_STATUS_SUCCESS
VOID NTAPI EHCI_InterruptDpc(IN PVOID ehciExtension, IN BOOLEAN EnableInterrupts)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
MPSTATUS NTAPI EHCI_SubmitIsoTransfer(IN PVOID ehciExtension, IN PVOID ehciEndpoint, IN PUSBPORT_TRANSFER_PARAMETERS TransferParameters, IN PVOID ehciTransfer, IN PVOID isoParameters)
PEHCI_HCD_TD NTAPI EHCI_AllocTd(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint)
PUSBPORT_INVALIDATE_CONTROLLER UsbPortInvalidateController
WDF_EXTERN_C_START typedef _In_ WDFDEVICE _In_ WDFCONTEXT _In_ WDF_DMA_DIRECTION _In_ PSCATTER_GATHER_LIST SgList
VOID NTAPI EHCI_DisableInterrupts(IN PVOID ehciExtension)
VOID NTAPI EHCI_AbortIsoTransfer(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint, IN PEHCI_TRANSFER EhciTransfer)
MPSTATUS NTAPI EHCI_InitializeHardware(IN PEHCI_EXTENSION EhciExtension)
ULONG BackupAsynclistaddr
PHCI_CHECK_CONTROLLER CheckController
#define USBPORT_TRANSFER_TYPE_INTERRUPT
#define EHCI_HCD_TD_FLAG_ACTIVE
SIZE_T MiniPortEndpointSize
SIZE_T MiniPortTransferSize
#define EHCI_TD_TOKEN_PID_IN
NTSTATUS NTAPI USBPORT_RegisterUSBPortDriver(IN PDRIVER_OBJECT DriverObject, IN ULONG Version, IN PUSBPORT_REGISTRATION_PACKET RegPacket)
#define MP_STATUS_HW_ERROR
#define ENDPOINT_INTERRUPT_2ms
PHCI_RH_DISABLE_IRQ RH_DisableIrq
_In_ ULONG ParameterLength
ULONG NTAPI EHCI_GetEndpointStatus(IN PVOID ehciExtension, IN PVOID ehciEndpoint)
VOID NTAPI EHCI_RebalanceEndpoint(IN PVOID ohciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PVOID ohciEndpoint)
VOID NTAPI EHCI_GetRegistryParameters(IN PEHCI_EXTENSION EhciExtension)
#define EHCI_DUMMYQH_MAX_PACKET_LENGTH
#define TERMINATE_POINTER
#define INTERRUPT_ENDPOINTs
#define USBD_STATUS_STALL_PID
EHCI_QH_EP_PARAMS EndpointParams
ULONG BackupCtrlDSSegment
#define USBPORT_TRANSFER_TYPE_ISOCHRONOUS
NTKERNELAPI UCHAR NTAPI READ_REGISTER_UCHAR(IN PUCHAR Register)
#define EHCI_FLAGS_IDLE_SUPPORT
#define LINK_POINTER_MASK
USBD_STATUS NTAPI EHCI_GetErrorFromTD(IN PEHCI_HCD_TD TD)
#define EHCI_MAX_INTERRUPT_TRANSFER_SIZE
VOID NTAPI EHCI_LockQH(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_HCD_QH QH, IN ULONG TransferType)
PHCI_START_SEND_ONE_PACKET StartSendOnePacket
PHCI_POLL_ENDPOINT PollEndpoint
ULONG ConnectStatusChange
#define USB20_MINIPORT_INTERFACE_VERSION
PHCI_SET_ENDPOINT_DATA_TOGGLE SetEndpointDataToggle
EHCI_INTERRUPT_ENABLE HcInterruptEnable
VOID NTAPI EHCI_PollIsoEndpoint(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint)
PHCI_TAKE_PORT_CONTROL TakePortControl
BOOLEAN NTAPI EHCI_InterruptService(IN PVOID ehciExtension)
#define EHCI_MAX_FS_ISO_HEADER_BUFFER_SIZE
#define ENDPOINT_INTERRUPT_16ms
#define EHCI_MAX_HC_SYSTEM_ERRORS
MPSTATUS NTAPI EHCI_ControlTransfer(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint, IN PUSBPORT_TRANSFER_PARAMETERS TransferParameters, IN PEHCI_TRANSFER EhciTransfer, IN PUSBPORT_SCATTER_GATHER_LIST SgList)
PHCI_STOP_CONTROLLER StopController
BOOLEAN NTAPI EHCI_HardwarePresent(IN PEHCI_EXTENSION EhciExtension, IN BOOLEAN IsInvalidateController)
PHCI_GET_ENDPOINT_STATUS GetEndpointStatus
PHCI_INTERRUPT_NEXT_SOF InterruptNextSOF
PHCI_RH_CLEAR_FEATURE_PORT_ENABLE RH_ClearFeaturePortEnable
C_ASSERT(RTL_NUMBER_OF(pTable)==INTERRUPT_ENDPOINTs+1)
struct _EHCI_HCD_TD * PEHCI_HCD_TD
PHCI_SUSPEND_CONTROLLER SuspendController
#define InitializeListHead(ListHead)
MPSTATUS NTAPI EHCI_TakeControlHC(IN PEHCI_EXTENSION EhciExtension)
#define EHCI_MAX_BULK_TD_COUNT
#define EHCI_QH_EP_LOW_SPEED
#define FIELD_OFFSET(t, f)
ULONG InterruptOnAsyncAdvance
PHCI_INTERRUPT_DPC InterruptDpc
VOID NTAPI EHCI_Unload(IN PDRIVER_OBJECT DriverObject)
#define USBPORT_ENDPOINT_CONTROL
#define MP_STATUS_NOT_SUPPORTED
VOID NTAPI EHCI_InsertQhInAsyncList(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_HCD_QH QH)
EHCI_INTERRUPT_ENABLE InterruptStatus
#define MP_STATUS_SUCCESS
#define EHCI_FLAGS_CONTROLLER_SUSPEND
ULONG MiniPortBusBandwidth
#define EHCI_TOKEN_STATUS_TRANSACTION_ERROR
EHCI_HCD_QH IsoDummyQH[EHCI_FRAME_LIST_MAX_ENTRIES]
PHCI_RH_CLEAR_FEATURE_PORT_CONNECT_CHANGE RH_ClearFeaturePortConnectChange
VOID NTAPI EHCI_RH_GetRootHubData(IN PVOID ehciExtension, IN PVOID rootHubData)
#define USB_MINIPORT_FLAGS_INTERRUPT
struct _EHCI_HCD_QH * NextHead
#define EHCI_FLADJ_PCI_CONFIG_OFFSET
#define USB_MINIPORT_FLAGS_MEMORY_IO
struct _EHCI_STATIC_QH EHCI_STATIC_QH
#define EHCI_MAX_CONTROL_TD_COUNT
#define EHCI_HCD_TD_FLAG_PROCESSED
PHCI_QUERY_ENDPOINT_REQUIREMENTS QueryEndpointRequirements
MPSTATUS NTAPI EHCI_RH_ClearFeaturePortConnectChange(IN PVOID ehciExtension, IN USHORT Port)
PHCI_RH_ENABLE_IRQ RH_EnableIrq
PHCI_REOPEN_ENDPOINT ReopenEndpoint
#define RtlZeroMemory(Destination, Length)
#define EHCI_TOKEN_STATUS_DATA_BUFFER_ERROR
static const EHCI_PERIOD pTable[]
MPSTATUS NTAPI EHCI_RH_SetFeaturePortPower(IN PVOID ehciExtension, IN USHORT Port)
#define RtlCopyMemory(Destination, Source, Length)
MPSTATUS NTAPI EHCI_RH_GetStatus(IN PVOID ehciExtension, IN PUSHORT Status)
MPSTATUS NTAPI EHCI_ResumeController(IN PVOID ehciExtension)
MPSTATUS NTAPI EHCI_InterruptTransfer(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint, IN PUSBPORT_TRANSFER_PARAMETERS TransferParameters, IN PEHCI_TRANSFER EhciTransfer, IN PUSBPORT_SCATTER_GATHER_LIST SgList)
static const UCHAR LinkTable[]
#define EHCI_MAX_QTD_BUFFER_PAGES
PUSBPORT_WAIT UsbPortWait
PHCI_GET_32BIT_FRAME_NUMBER Get32BitFrameNumber
SIZE_T MiniPortResourcesSize
VOID NTAPI EHCI_RH_DisableIrq(IN PVOID ehciExtension)
#define USB_MINIPORT_FLAGS_WAKE_SUPPORT
PUSBPORT_BUG_CHECK UsbPortBugCheck
MPSTATUS NTAPI EHCI_RH_ClearFeaturePortSuspend(IN PVOID ehciExtension, IN USHORT Port)
struct _EHCI_ENDPOINT * EhciEndpoint
MPSTATUS NTAPI EHCI_BulkTransfer(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint, IN PUSBPORT_TRANSFER_PARAMETERS TransferParameters, IN PEHCI_TRANSFER EhciTransfer, IN PUSBPORT_SCATTER_GATHER_LIST SgList)
VOID NTAPI EHCI_DisablePeriodicList(IN PEHCI_EXTENSION EhciExtension)
EHCI_STATIC_QH PeriodicHead[64]
#define EHCI_MAX_BULK_TRANSFER_SIZE
PEHCI_ENDPOINT EhciEndpoint
PHCI_FLUSH_INTERRUPTS FlushInterrupts
_In_ PUSBD_PIPE_INFORMATION _In_ USB_DEVICE_SPEED DeviceSpeed
VOID NTAPI EHCI_ResetController(IN PVOID ehciExtension)
#define EHCI_TOKEN_STATUS_BABBLE_DETECTED
VOID NTAPI KeStallExecutionProcessor(IN ULONG MicroSeconds)
MPSTATUS NTAPI EHCI_PassThru(IN PVOID ehciExtension, IN PVOID passThruParameters, IN ULONG ParameterLength, IN PVOID pParameters)
PEHCI_HCD_QH NTAPI EHCI_GetDummyQhForFrame(IN PEHCI_EXTENSION EhciExtension, IN ULONG Idx)
#define EHCI_QH_FLAG_STATIC
VOID NTAPI EHCI_RemoveQhFromPeriodicList(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint)
ULONG NextCapabilityPointer
VOID NTAPI EHCI_DisableAsyncList(IN PEHCI_EXTENSION EhciExtension)
#define EHCI_HCD_TD_FLAG_DUMMY
VOID NTAPI EHCI_SetAsyncEndpointState(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_ENDPOINT EhciEndpoint, IN ULONG EndpointState)
PHCI_RH_CLEAR_FEATURE_PORT_OVERCURRENT_CHANGE RH_ClearFeaturePortOvercurrentChange
VOID NTAPI EHCI_UnlockQH(IN PEHCI_EXTENSION EhciExtension, IN PEHCI_HCD_QH QH)
struct _EHCI_HC_RESOURCES * PEHCI_HC_RESOURCES
EHCI_QH_EP_CAPS EndpointCaps
#define EHCI_QH_EP_HIGH_SPEED
#define EHCI_MAX_INTERRUPT_TD_COUNT