13#define NDEBUG_UHCI_TRACE
14#define NDEBUG_UHCI_IMPLEMENT
69 DPRINT_UHCI(
"UhciFixDataToggle: UhciExtension - %p, UhciEndpoint - %p, DataToggle - %X\n",
76 TD->HwTD.Token.DataToggle = !TD->HwTD.Token.DataToggle;
77 DataToggle = !DataToggle;
82 UhciEndpoint->DataToggle = DataToggle;
94 UhciResources = UhciExtension->HcResourcesVA;
120 ULONG NewFrameNumber;
121 ULONG OldFrameNumber;
124 DPRINT_UHCI(
"UhciCleanupFrameList: [%p] All - %x\n",
125 UhciExtension, IsAllEntries);
130 OldFrameNumber = UhciExtension->FrameNumber;
133 IsAllEntries ==
FALSE)
150 UhciExtension->FrameNumber = NewFrameNumber;
166 DPRINT_UHCI(
"UhciUpdateCounter: UhciExtension->FrameHighPart - %lX\n",
167 UhciExtension->FrameHighPart);
176 DPRINT_UHCI(
"UhciSetNextQH: QH - %p, NextQH - %p\n", QH, NextQH);
179 QH->NextHcdQH = NextQH;
181 NextQH->PrevHcdQH = QH;
209 UhciEndpoint->
Flags = 0;
211 TransferType = EndpointProperties->TransferType;
213 DPRINT(
"UhciOpenEndpoint: UhciEndpoint - %p, TransferType - %x\n",
223 BufferVA = EndpointProperties->BufferVA;
224 BufferPA = EndpointProperties->BufferPA;
234 QH = UhciEndpoint->
QH;
251 UhciEndpoint->
MaxTDs = TdCount;
258 for (ix = 0; ix < UhciEndpoint->
MaxTDs; ix++)
260 TD = &UhciEndpoint->
FirstTD[ix];
290 DPRINT(
"UhciQueryEndpointRequirements: ... \n");
292 TransferType = EndpointProperties->TransferType;
294 switch (TransferType)
297 DPRINT(
"UhciQueryEndpointRequirements: IsoTransfer\n");
300 EndpointRequirements->HeaderBufferSize = 0 +
307 DPRINT(
"UhciQueryEndpointRequirements: ControlTransfer\n");
308 TdCount = EndpointProperties->MaxTransferSize /
309 EndpointProperties->TotalMaxPacketSize;
313 EndpointRequirements->HeaderBufferSize =
sizeof(
UHCI_HCD_QH) +
316 EndpointRequirements->MaxTransferSize = EndpointProperties->MaxTransferSize;
320 DPRINT(
"UhciQueryEndpointRequirements: BulkTransfer\n");
322 EndpointProperties->TotalMaxPacketSize;
324 EndpointRequirements->HeaderBufferSize =
sizeof(
UHCI_HCD_QH) +
331 DPRINT(
"UhciQueryEndpointRequirements: InterruptTransfer\n");
334 EndpointRequirements->HeaderBufferSize =
sizeof(
UHCI_HCD_QH) +
338 EndpointProperties->TotalMaxPacketSize;
342 DPRINT1(
"UhciQueryEndpointRequirements: Unknown TransferType - %x\n",
355 DPRINT_IMPL(
"UhciCloseEndpoint: UNIMPLEMENTED. FIXME\n");
365 ULONG ResourcesTypes;
374 DPRINT(
"UhciTakeControlHC: Resources->ResourcesTypes - %x\n",
377 ResourcesTypes =
Resources->ResourcesTypes;
382 DPRINT1(
"UhciTakeControlHC: MP_STATUS_ERROR\n");
386 BaseRegister = UhciExtension->BaseRegister;
409 DPRINT(
"UhciTakeControlHC: HcStatus.AsUSHORT - %04X\n", HcStatus.
AsUSHORT);
433 DPRINT(
"UhciTakeControlHC: LegacySupport.AsUSHORT - %04X\n",
463 DPRINT(
"UhciInitializeHardware: UhciExtension - %p\n", UhciExtension);
464 DPRINT(
"UhciInitializeHardware: VIA HW FIXME\n");
466 BaseRegister = UhciExtension->BaseRegister;
493 StatusMask = UhciExtension->StatusMask;
500 UhciExtension->StatusMask = StatusMask;
514 ULONG StaticControlHeadPA;
516 ULONG StaticBulkHeadPA;
518 ULONG StaticBulkTdPA;
528 DPRINT(
"UhciInitializeSchedule: Ext[%p], VA - %p, PA - %lx\n",
537 IntQH = &HcResourcesVA->StaticIntHead[FrameIdx];
545 UhciExtension->IntQH[FrameIdx] = IntQH;
550 UhciSetNextQH(IntQH, UhciExtension->IntQH[(FrameIdx - 1) / 2]);
554 StaticControlHead = &HcResourcesVA->StaticControlHead;
564 UhciExtension->ControlQH = StaticControlHead;
567 StaticBulkHead = &HcResourcesVA->StaticBulkHead;
579 UhciExtension->BulkQH = StaticBulkHead;
580 UhciExtension->BulkTailQH = StaticBulkHead;
583 StaticBulkTD = &HcResourcesVA->StaticBulkTD;
617 StaticTD = &HcResourcesVA->StaticTD;
631 UhciExtension->StaticTD = StaticTD;
634 UhciExtension->SOF_HcdTDs = &HcResourcesVA->StaticSofTD[0];
639 StaticSofTD = UhciExtension->SOF_HcdTDs + Idx;
668 UhciExtension->
Flags &= ~UHCI_EXTENSION_FLAG_SUSPENDED;
671 DPRINT(
"UhciStartController: UhciExtension - %p, BaseRegister - %p\n", UhciExtension, BaseRegister);
733 DPRINT(
"UhciStopController: UhciExtension - %p\n", UhciExtension);
740 if (
Command.AsUSHORT == 0xFFFF)
742 DPRINT(
"UhciStopController: Command == -1\n");
746 DPRINT(
"UhciStopController: Command.AsUSHORT - %p\n",
Command.AsUSHORT);
768 DPRINT1(
"UhciStopController: Failed to reset\n");
779 DPRINT_IMPL(
"UhciSuspendController: UNIMPLEMENTED. FIXME\n");
786 DPRINT_IMPL(
"UhciResumeController: UNIMPLEMENTED. FIXME\n");
797 StatusReg = &UhciExtension->BaseRegister->HcStatus.
AsUSHORT;
801 DPRINT_UHCI(
"UhciHardwarePresent: HW not present\n");
829 DPRINT1(
"UhciInterruptService: return FALSE\n");
837 DPRINT1(
"UhciInterruptService: Error [%p] HcStatus %X\n",
852 DPRINT1(
"UhciInterruptService: HC ProcessError!\n");
853 DPRINT1(
"UhciExtension %p, frame %X\n", UhciExtension,
fn);
863 DPRINT_UHCI(
"UhciInterruptService: Hc Halted [%p] HcStatus %X\n",
876 DPRINT1(
"UhciInterruptService: HostSystemError! HcStatus - %X\n",
895 QH = UhciExtension->
BulkQH;
918 DPRINT1(
"UhciInterruptService: [%p] ScheduleError %X\n",
931 DPRINT1(
"UhciInterruptService: [%p] HcStatus %X\n",
950 DPRINT_UHCI(
"UhciInterruptDpc: [%p] EnableInt %x, HcStatus %X\n",
951 uhciExtension, IsDoEnableInterrupts, UhciExtension->
HcStatus);
961 if (IsDoEnableInterrupts)
980 DPRINT(
"UhciQueueTransfer: FirstTD - %p, LastTD - %p\n", FirstTD, LastTD);
982 TailTD = UhciEndpoint->TailTD;
983 QH = UhciEndpoint->QH;
985 if (UhciEndpoint->HeadTD)
1014 UhciEndpoint->HeadTD = FirstTD;
1018 UhciEndpoint->TailTD =
NULL;
1019 UhciEndpoint->HeadTD =
NULL;
1037 BulkTailQH = UhciExtension->BulkTailQH;
1038 BulkTailQH->
HwQH.
NextQH &= ~UHCI_QH_HEAD_LINK_PTR_TERMINATE;
1041 UhciEndpoint->TailTD = LastTD;
1050 ULONG AllocTdCounter;
1055 AllocTdCounter = UhciEndpoint->AllocTdCounter;
1057 for (ix = 0; ix < UhciEndpoint->MaxTDs; ++ix)
1059 TD = &UhciEndpoint->FirstTD[AllocTdCounter];
1065 UhciEndpoint->AllocatedTDs++;
1066 UhciEndpoint->AllocTdCounter = AllocTdCounter;
1071 if (AllocTdCounter < UhciEndpoint->MaxTDs - 1)
1092 USHORT TotalMaxPacketSize;
1097 SIZE_T TransferLength = 0;
1109 TotalMaxPacketSize = UhciEndpoint->EndpointProperties.TotalMaxPacketSize;
1110 DeviceSpeed = UhciEndpoint->EndpointProperties.DeviceSpeed;
1112 DeviceAddress = UhciEndpoint->EndpointProperties.DeviceAddress;
1113 TransferType = UhciEndpoint->EndpointProperties.TransferType;
1116 ZeroLengthTransfer =
FALSE;
1120 if (UhciTransfer->TransferParameters->TransferFlags &
1139 DataToggle = UhciEndpoint->DataToggle;
1142 for (ix = 0; ix <
SgList->SgElementCount || ZeroLengthTransfer; ix++)
1144 BytesRemaining =
SgList->SgElement[ix].SgTransferLength;
1150 BytesRemaining -= TransferLength;
1156 while (BytesRemaining || ZeroLengthTransfer)
1158 ZeroLengthTransfer =
FALSE;
1160 if (BytesRemaining >= TotalMaxPacketSize)
1162 LengthThisTD = TotalMaxPacketSize;
1163 BytesRemaining -= TotalMaxPacketSize;
1167 if (ix >=
SgList->SgElementCount - 1)
1169 LengthThisTD = BytesRemaining;
1175 DPRINT1(
"UhciMapAsyncTransferToTds: IsLastTd = FALSE. FIXME\n");
1182 UhciTransfer->PendingTds++;
1201 if (LengthThisTD == 0)
1215 LengthMapped += LengthThisTD;
1233 UhciEndpoint->DataToggle = DataToggle;
1235 *OutLastTD = LastTD;
1256 DPRINT_UHCI(
"UhciControlTransfer: UhciTransfer - %p\n", UhciTransfer);
1258 if (UhciEndpoint->EndpointLock > 1)
1262 if (UhciEndpoint->EndpointProperties.TransferType ==
1268 DPRINT(
"UhciControlTransfer: end MP_STATUS_FAILURE\n");
1272 DeviceSpeed = UhciEndpoint->EndpointProperties.DeviceSpeed;
1274 DeviceAddress = UhciEndpoint->EndpointProperties.DeviceAddress;
1277 UhciTransfer->PendingTds++;
1280 DPRINT_UHCI(
"UhciControlTransfer: FirstTD - %p\n", FirstTD);
1300 &TransferParameters->SetupPacket,
1312 DPRINT_UHCI(
"UhciControlTransfer: LastTD - %p\n", LastTD);
1365 if (UhciTransfer->TransferParameters->TransferFlags &
1383 DPRINT_UHCI(
"UhciControlTransfer: end MP_STATUS_SUCCESS\n");
1397 ULONG TotalMaxPacketSize;
1399 ULONG TransferLength;
1403 DPRINT_UHCI(
"UhciBulkOrInterruptTransfer: ...\n");
1405 TotalMaxPacketSize = UhciEndpoint->EndpointProperties.TotalMaxPacketSize;
1407 SgCount =
SgList->SgElementCount;
1411 DPRINT(
"UhciBulkOrInterruptTransfer: SgCount == 0 \n");
1418 for (ix = 0; ix < SgCount; ++ix)
1420 TransferLength +=
SgList->SgElement[ix].SgTransferLength;
1423 DPRINT(
"UhciBulkOrInterruptTransfer: SgCount - %X, TransferLength - %X\n",
1429 TDs = TransferLength + (TotalMaxPacketSize - 1);
1430 TDs /= TotalMaxPacketSize;
1438 if ((UhciEndpoint->MaxTDs - UhciEndpoint->AllocatedTDs) < TDs)
1440 DPRINT1(
"UhciBulkOrInterruptTransfer: Not enough TDs \n");
1454 if (DataLastTD ==
NULL || DataFirstTD ==
NULL)
1456 DPRINT1(
"UhciBulkOrInterruptTransfer: !DataLastTD || !DataFirstTD\n");
1522 DPRINT1(
"UhciSubmitTransfer: Error TransferType - %x\n", TransferType);
1537 TdStatus = TD->HwTD.ControlStatus.Status;
1544 if (TD->HwTD.ControlStatus.ActualLength + 1 >=
1545 TD->HwTD.Token.MaximumLength + 1)
1550 if (TD->HwTD.ControlStatus.InterruptOnComplete == 1)
1559 DPRINT1(
"UhciGetErrorFromTD: USBD_STATUS_BUFFER_OVERRUN, TD - %p\n", TD);
1566 DPRINT1(
"UhciGetErrorFromTD: USBD_STATUS_DEV_NOT_RESPONDING, TD - %p\n", TD);
1574 DPRINT1(
"UhciGetErrorFromTD: USBD_STATUS_DEV_NOT_RESPONDING, TD - %p\n", TD);
1579 DPRINT1(
"UhciGetErrorFromTD: USBD_STATUS_CRC, TD - %p\n", TD);
1585 DPRINT1(
"UhciGetErrorFromTD: USBD_STATUS_DATA_OVERRUN, TD - %p\n", TD);
1590 DPRINT1(
"UhciGetErrorFromTD: USBD_STATUS_STALL_PID, TD - %p\n", TD);
1595 DPRINT1(
"UhciGetErrorFromTD: USBD_STATUS_INTERNAL_HC_ERROR, TD - %p\n", TD);
1613 DPRINT_UHCI(
"UhciProcessDoneNonIsoTD: TD - %p\n", TD);
1615 UhciTransfer = TD->UhciTransfer;
1633 TransferedLen = TD->HwTD.ControlStatus.ActualLength + 1;
1642 DPRINT_IMPL(
"UhciProcessDoneNonIsoTD: UNIMPLEMENTED. FIXME\n");
1650 DPRINT_IMPL(
"UhciProcessDoneNonIsoTD: UNIMPLEMENTED. FIXME\n");
1654 TD->HwTD.NextElement = 0;
1655 TD->UhciTransfer =
NULL;
1684 DPRINT_IMPL(
"UhciIsochTransfer: UNIMPLEMENTED. FIXME\n");
1694 DPRINT_IMPL(
"UhciAbortIsoTransfer: UNIMPLEMENTED. FIXME\n");
1710 DPRINT(
"UhciAbortNonIsoTransfer: UhciExtension - %p, QH - %p, UhciTransfer - %p\n",
1715 for (TD = UhciEndpoint->HeadTD;
1724 if (TD == UhciEndpoint->HeadTD)
1729 DPRINT_UHCI(
"UhciAbortNonIsoTransfer: TD - %p\n", TD);
1734 DPRINT_IMPL(
"UhciAbortNonIsoTransfer: UNIMPLEMENTED. FIXME\n");
1736 UhciEndpoint->AllocatedTDs--;
1738 DPRINT_UHCI(
"UhciAbortNonIsoTransfer: Active TD - %p\n", TD);
1761 UhciEndpoint->HeadTD = TD;
1765 UhciEndpoint->HeadTD =
NULL;
1766 UhciEndpoint->TailTD =
NULL;
1779 DPRINT_UHCI(
"UhciAbortNonIsoTransfer: TD - %p\n", TD);
1782 UhciEndpoint->QH->HwQH.NextElement &= ~UHCI_QH_ELEMENT_LINK_PTR_QH;
1794 UhciEndpoint->TailTD = PrevTD;
1797 *CompletedLength = UhciTransfer->TransferLen;
1812 DPRINT(
"UhciAbortTransfer: ...\n");
1843 DPRINT_IMPL(
"UhciGetEndpointState: UNIMPLEMENTED. FIXME\n");
1855 DPRINT(
"UhciInsertQH: UhciExtension - %p, StaticQH - %p, QH - %p\n", UhciExtension, StaticQH, QH);
1857 QH->HwQH.NextQH = StaticQH->HwQH.NextQH;
1860 QH->PrevHcdQH = StaticQH;
1861 QH->NextHcdQH = NextHcdQH;
1866 UhciExtension->BulkTailQH = QH;
1869 StaticQH->NextHcdQH = QH;
1883 DPRINT(
"UhciUnlinkQH: ... \n");
1888 if (UhciExtension->BulkTailQH == QH)
1889 UhciExtension->BulkTailQH = PrevHcdQH;
1900 if (!(QH->UhciEndpoint->EndpointProperties.TransferType ==
1903 QH->QhFlags &= ~UHCI_HCD_QH_FLAG_ACTIVE;
1910 QH->QhFlags &= ~UHCI_HCD_QH_FLAG_ACTIVE;
1914 BulkQH = UhciExtension->BulkQH;
1925 QH->QhFlags &= ~UHCI_HCD_QH_FLAG_ACTIVE;
1932 QH->QhFlags &= ~UHCI_HCD_QH_FLAG_ACTIVE;
1948 QH = UhciEndpoint->
QH;
1950 DPRINT(
"UhciSetEndpointState: EndpointState - %x, TransferType - %x\n",
1961 DPRINT(
"UhciSetEndpointState: Unknown TransferType - %x\n",
1965 switch (EndpointState)
1972 switch (TransferType)
1991 UhciExtension->
IntQH[Idx - 1],
2018 ULONG EndpointStatus;
2027 return EndpointStatus;
2039 DPRINT(
"UhciSetEndpointStatus: uhciEndpoint - %p, EndpointStatus - %X\n",
2049 UhciEndpoint->
Flags &= ~UHCI_ENDPOINT_FLAG_HALTED;
2054 if (UhciEndpoint->
HeadTD)
2072 DPRINT_IMPL(
"UhciPollIsoEndpoint: UNIMPLEMENTED. FIXME\n");
2089 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: UhciExtension - %p, UhciEndpoint - %p\n",
2095 DPRINT(
"UhciPollNonIsoEndpoint: Ep->Flags & UHCI_ENDPOINT_FLAG_HALTED \n");
2099 QH = UhciEndpoint->QH;
2114 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: NextTD - %p, NextTdPA - %p\n",
2118 for (TD = UhciEndpoint->HeadTD; TD != NextTD && TD !=
NULL; TD = TD->
NextHcdTD)
2120 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: TD - %p, TD->NextHcdTD - %p\n",
2136 if (NextTdPA != TD->
NextHcdTD->PhysicalAddress)
2138 DPRINT(
"UhciPollNonIsoEndpoint: TD->NextHcdTD->PhysicalAddress - %p\n",
2147 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: TD->NextHcdTD == NULL\n");
2151 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: ControlStatus - %X\n",
2152 TD->
NextHcdTD->HwTD.ControlStatus.AsULONG);
2157 UhciEndpoint->HeadTD = NextTD;
2161 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: NextTD == NULL\n");
2163 UhciEndpoint->HeadTD =
NULL;
2164 UhciEndpoint->TailTD =
NULL;
2168 goto ProcessListTDs;
2171 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: NextTD - %p, NextTdPA - %p\n",
2179 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: UHCI_TD_STS_ACTIVE \n");
2180 goto ProcessListTDs;
2190 DPRINT(
"UhciPollNonIsoEndpoint: USBD_STATUS_DEV_NOT_RESPONDING\n");
2205 goto ProcessListTDs;
2215 DPRINT(
"UhciPollNonIsoEndpoint: NextTD UHCI_TD_STS_ - %02X, PIDCode - %02X\n",
2233 DPRINT(
"UhciPollNonIsoEndpoint: Bad TD - %p\n", TD);
2246 if (UhciEndpoint->EndpointProperties.TransferType !=
2267 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: NextTD - %p, TransferedLen - %X\n",
2277 UhciEndpoint->HeadTD = NextTD->
NextHcdTD;
2282 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: NextTD - %p, TD - %p\n",
2287 goto ProcessListTDs;
2290 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: ShortPacket. ControlStatus - %X\n",
2309 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: TD - %p\n", TD);
2321 (UhciEndpoint->EndpointProperties.TransferType !=
2327 NextTD->
NextHcdTD->HwTD.Token.DataToggle);
2341 UhciEndpoint->HeadTD = TD;
2345 UhciEndpoint->HeadTD =
NULL;
2346 UhciEndpoint->TailTD =
NULL;
2359 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: TD - %p\n", TD);
2366 ListTDs = &UhciEndpoint->ListTDs;
2386 DPRINT_UHCI(
"UhciPollNonIsoEndpoint: Halted periodic EP - %p\n",
2431 DPRINT1(
"UhciCheckController: INVALIDATE_CONTROLLER_SURPRISE_REMOVE !!!\n");
2443 ULONG Uhci32BitFrame;
2451 Uhci32BitFrame = Hp;
2453 Uhci32BitFrame |=
Fn;
2455 DPRINT_UHCI(
"UhciGet32BitFrameNumber: Uhci32BitFrame - %lX\n",
2458 return Uhci32BitFrame;
2479 NextFrame = CurrentFrame + 2;
2483 SofFrame = SOF_HcdTDs->
Frame;
2485 if (SofFrame == NextFrame)
2488 if (SofFrame < CurrentFrame)
2490 SOF_HcdTDs->
Frame = NextFrame;
2512 if (SOF_HcdTDs->
Frame &&
2513 (SOF_HcdTDs->
Frame < CurrentFrame ||
2516 SOF_HcdTDs->
Frame = 0;
2529 DPRINT(
"UhciEnableInterrupts: UhciExtension - %p\n", UhciExtension);
2560 DPRINT(
"UhciDisableInterrupts: UhciExtension - %p\n", UhciExtension);
2565 HcFlavor = UhciExtension->
HcFlavor;
2566 DPRINT(
"UhciDisableInterrupts: FIXME HcFlavor - %lx\n", HcFlavor);
2593 DPRINT_UHCI(
"UhciPollController: UhciExtension - %p\n", UhciExtension);
2621 DPRINT_IMPL(
"UhciSetEndpointDataToggle: UNIMPLEMENTED. FIXME\n");
2628 DPRINT_IMPL(
"UhciResetController: UNIMPLEMENTED. FIXME\n");
2642 DPRINT_IMPL(
"UhciStartSendOnePacket: UNIMPLEMENTED. FIXME\n");
2657 DPRINT_IMPL(
"UhciEndSendOnePacket: UNIMPLEMENTED. FIXME\n");
2668 DPRINT_IMPL(
"UhciPassThru: UNIMPLEMENTED. FIXME\n");
2676 DPRINT_IMPL(
"UhciFlushInterrupts: UNIMPLEMENTED. FIXME\n");
2683 DPRINT_IMPL(
"UhciUnload: UNIMPLEMENTED. FIXME\n");
#define InterlockedIncrement
#define InterlockedExchange
#define InterlockedDecrement
DRIVER_INITIALIZE DriverEntry
#define UHCI_TD_PID_SETUP
#define UHCI_TD_PID_DATA0
#define UHCI_TD_LINK_PTR_DEPTH_FIRST
#define UHCI_TD_LINK_PTR_QH
#define UHCI_QH_HEAD_LINK_PTR_QH
#define UHCI_TD_STS_DATA_BUFFER_ERROR
#define UHCI_TD_STS_NAK_RECEIVED
#define UHCI_TD_STS_TIMEOUT_CRC_ERROR
#define UHCI_QH_ELEMENT_LINK_POINTER_MASK
#define UHCI_TD_STS_BITSTUFF_ERROR
#define UHCI_QH_ELEMENT_LINK_PTR_TD
#define UHCI_TD_LINK_POINTER_MASK
#define UHCI_QH_ELEMENT_LINK_PTR_TERMINATE
#define UHCI_FRNUM_FRAME_MASK
#define UHCI_TD_STS_BABBLE_DETECTED
#define UHCI_FRAME_LIST_MAX_ENTRIES
#define UHCI_TD_LINK_PTR_TD
#define UHCI_TD_STS_STALLED
#define UHCI_NUM_ROOT_HUB_PORTS
#define UHCI_TD_LENGTH_NULL
#define UHCI_TD_PID_DATA1
#define UHCI_TD_STS_ACTIVE
#define UHCI_QH_ELEMENT_LINK_PTR_QH
#define UHCI_USB_STATUS_MASK
#define UHCI_QH_HEAD_LINK_PTR_TERMINATE
#define UHCI_FRNUM_OVERFLOW_LIST
#define UHCI_TD_LINK_PTR_TERMINATE
#define InsertTailList(ListHead, Entry)
#define IsListEmpty(ListHead)
#define KeQuerySystemTime(t)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
VOID NTAPI WRITE_PORT_USHORT(IN PUSHORT Port, IN USHORT Value)
VOID NTAPI WRITE_PORT_ULONG(IN PULONG Port, IN ULONG Value)
USHORT NTAPI READ_PORT_USHORT(IN PUSHORT Port)
_In_ PUSBD_PIPE_INFORMATION _In_ USB_DEVICE_SPEED DeviceSpeed
_In_ PUSB_DEVICE_HANDLE _Out_ PUSHORT DeviceAddress
NTSYSAPI void WINAPI DbgBreakPoint(void)
BOOLEAN(* Fn)(ULONG Argc, PCHAR Argv[])
#define READ_PORT_UCHAR(p)
#define WRITE_PORT_UCHAR(p, d)
static BYTE StatusRegister
struct _LIST_ENTRY * Flink
USBPORT_ENDPOINT_PROPERTIES EndpointProperties
UHCI_USB_STATUS StatusMask
PUHCI_HCD_QH IntQH[INTERRUPT_ENDPOINTs]
PUHCI_HW_REGISTERS BaseRegister
PUHCI_HC_RESOURCES HcResourcesVA
USB_CONTROLLER_FLAVOR HcFlavor
struct _UHCI_HCD_QH * NextHcdQH
struct _UHCI_HCD_QH * PrevHcdQH
PUHCI_ENDPOINT UhciEndpoint
PUHCI_TRANSFER UhciTransfer
USB_DEFAULT_PIPE_SETUP_PACKET SetupPacket
struct _UHCI_HCD_TD * NextHcdTD
ULONG FrameList[UHCI_FRAME_LIST_MAX_ENTRIES]
UHCI_USB_COMMAND HcCommand
UHCI_PORT_STATUS_CONTROL PortControl[UHCI_NUM_ROOT_HUB_PORTS]
UHCI_INTERRUPT_ENABLE HcInterruptEnable
UHCI_CONTROL_STATUS ControlStatus
PUSBPORT_TRANSFER_PARAMETERS TransferParameters
PUHCI_ENDPOINT UhciEndpoint
PHCI_STOP_CONTROLLER StopController
PHCI_SUBMIT_ISO_TRANSFER SubmitIsoTransfer
PHCI_RH_CLEAR_FEATURE_PORT_POWER RH_ClearFeaturePortPower
PHCI_SUBMIT_TRANSFER SubmitTransfer
PHCI_SET_ENDPOINT_STATUS SetEndpointStatus
PHCI_RH_GET_HUB_STATUS RH_GetHubStatus
PHCI_ENABLE_INTERRUPTS EnableInterrupts
SIZE_T MiniPortTransferSize
PHCI_GET_ENDPOINT_STATUS GetEndpointStatus
PHCI_RH_ENABLE_IRQ RH_EnableIrq
SIZE_T MiniPortResourcesSize
PUSBPORT_INVALIDATE_CONTROLLER UsbPortInvalidateController
PHCI_RH_CLEAR_FEATURE_PORT_OVERCURRENT_CHANGE RH_ClearFeaturePortOvercurrentChange
PHCI_RH_DISABLE_IRQ RH_DisableIrq
PHCI_DISABLE_INTERRUPTS DisableInterrupts
SIZE_T MiniPortEndpointSize
PHCI_INTERRUPT_NEXT_SOF InterruptNextSOF
PHCI_ABORT_TRANSFER AbortTransfer
PHCI_FLUSH_INTERRUPTS FlushInterrupts
PHCI_RH_CLEAR_FEATURE_PORT_ENABLE_CHANGE RH_ClearFeaturePortEnableChange
PHCI_RH_GET_ROOT_HUB_DATA RH_GetRootHubData
PHCI_RH_SET_FEATURE_PORT_SUSPEND RH_SetFeaturePortSuspend
PHCI_RH_CLEAR_FEATURE_PORT_RESET_CHANGE RH_ClearFeaturePortResetChange
PHCI_RH_GET_PORT_STATUS RH_GetPortStatus
PHCI_OPEN_ENDPOINT OpenEndpoint
SIZE_T MiniPortExtensionSize
PHCI_RH_CLEAR_FEATURE_PORT_ENABLE RH_ClearFeaturePortEnable
PHCI_CHECK_CONTROLLER CheckController
PHCI_SET_ENDPOINT_DATA_TOGGLE SetEndpointDataToggle
PHCI_POLL_CONTROLLER PollController
PHCI_SUSPEND_CONTROLLER SuspendController
PHCI_GET_32BIT_FRAME_NUMBER Get32BitFrameNumber
PUSBPORT_INVALIDATE_ROOT_HUB UsbPortInvalidateRootHub
PHCI_RESUME_CONTROLLER ResumeController
PHCI_SET_ENDPOINT_STATE SetEndpointState
PHCI_START_SEND_ONE_PACKET StartSendOnePacket
PHCI_QUERY_ENDPOINT_REQUIREMENTS QueryEndpointRequirements
PUSBPORT_WAIT UsbPortWait
PHCI_CLOSE_ENDPOINT CloseEndpoint
ULONG MiniPortBusBandwidth
PHCI_RH_CLEAR_FEATURE_PORT_SUSPEND_CHANGE RH_ClearFeaturePortSuspendChange
PHCI_END_SEND_ONE_PACKET EndSendOnePacket
PHCI_RH_SET_FEATURE_PORT_RESET RH_SetFeaturePortReset
PUSBPORT_COMPLETE_TRANSFER UsbPortCompleteTransfer
PHCI_INTERRUPT_SERVICE InterruptService
PHCI_START_CONTROLLER StartController
PUSBPORT_READ_WRITE_CONFIG_SPACE UsbPortReadWriteConfigSpace
PHCI_REOPEN_ENDPOINT ReopenEndpoint
PHCI_INTERRUPT_DPC InterruptDpc
PHCI_RH_CLEAR_FEATURE_PORT_CONNECT_CHANGE RH_ClearFeaturePortConnectChange
PHCI_POLL_ENDPOINT PollEndpoint
PHCI_GET_ENDPOINT_STATE GetEndpointState
PHCI_RH_SET_FEATURE_PORT_ENABLE RH_SetFeaturePortEnable
PUSBPORT_GET_MAPPED_VIRTUAL_ADDRESS UsbPortGetMappedVirtualAddress
PUSBPORT_INVALIDATE_ENDPOINT UsbPortInvalidateEndpoint
PHCI_RH_SET_FEATURE_PORT_POWER RH_SetFeaturePortPower
PHCI_RH_GET_STATUS RH_GetStatus
PHCI_RH_CLEAR_FEATURE_PORT_SUSPEND RH_ClearFeaturePortSuspend
union _USB_DEFAULT_PIPE_SETUP_PACKET::_wValue wValue
union _USB_DEFAULT_PIPE_SETUP_PACKET::_wIndex wIndex
BM_REQUEST_TYPE bmRequestType
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
ULONG InterruptOnComplete
USHORT ConnectStatusChange
#define USB_ENDPOINT_DIRECTION_OUT(x)
enum _USB_DEVICE_SPEED USB_DEVICE_SPEED
struct _USB_DEFAULT_PIPE_SETUP_PACKET USB_DEFAULT_PIPE_SETUP_PACKET
#define USBD_STATUS_INTERNAL_HC_ERROR
#define USBD_STATUS_ERROR_SHORT_TRANSFER
#define USBD_STATUS_STALL_PID
#define USBD_STATUS_SUCCESS
#define USBD_STATUS_DATA_OVERRUN
#define USBD_STATUS_BUFFER_OVERRUN
#define USBD_TRANSFER_DIRECTION_IN
enum _USB_CONTROLLER_FLAVOR USB_CONTROLLER_FLAVOR
#define USBD_SHORT_TRANSFER_OK
#define USBD_STATUS_DEV_NOT_RESPONDING
_In_ ULONG ParameterLength
#define USBPORT_ENDPOINT_REMOVE
#define USBPORT_ENDPOINT_ACTIVE
#define USB_MINIPORT_FLAGS_PORT_IO
#define USBPORT_RESOURCES_PORT
#define INTERRUPT_ENDPOINTs
#define USBPORT_ENDPOINT_RUN
#define ENDPOINT_INTERRUPT_32ms
#define USBPORT_ENDPOINT_HALT
#define USB_MINIPORT_FLAGS_POLLING
#define USBPORT_TRANSFER_TYPE_INTERRUPT
#define USBPORT_ENDPOINT_PAUSED
#define USBPORT_TRANSFER_TYPE_ISOCHRONOUS
#define USB_MINIPORT_FLAGS_INTERRUPT
#define TOTAL_USB11_BUS_BANDWIDTH
#define USB_MINIPORT_FLAGS_WAKE_SUPPORT
#define USBPORT_RESOURCES_INTERRUPT
#define USB_MINIPORT_FLAGS_NOT_LOCK_INT
#define USBPORT_TRANSFER_TYPE_CONTROL
#define USB_MINIPORT_VERSION_UHCI
#define USBPORT_INVALIDATE_CONTROLLER_SURPRISE_REMOVE
#define MP_STATUS_FAILURE
#define MP_STATUS_SUCCESS
#define USB10_MINIPORT_INTERFACE_VERSION
#define USBPORT_TRANSFER_TYPE_BULK
NTSTATUS NTAPI USBPORT_RegisterUSBPortDriver(IN PDRIVER_OBJECT DriverObject, IN ULONG Version, IN PUSBPORT_REGISTRATION_PACKET RegPacket)
VOID NTAPI UhciRHEnableIrq(IN PVOID uhciExtension)
MPSTATUS NTAPI UhciRHClearFeaturePortSuspend(IN PVOID uhciExtension, IN USHORT Port)
MPSTATUS NTAPI UhciRHClearFeaturePortEnableChange(IN PVOID uhciExtension, IN USHORT Port)
MPSTATUS NTAPI UhciRHClearFeaturePortPower(IN PVOID uhciExtension, IN USHORT Port)
MPSTATUS NTAPI UhciRHSetFeaturePortReset(IN PVOID uhciExtension, IN USHORT Port)
MPSTATUS NTAPI UhciRHClearFeaturePortEnable(IN PVOID uhciExtension, IN USHORT Port)
MPSTATUS NTAPI UhciRHSetFeaturePortPower(IN PVOID uhciExtension, IN USHORT Port)
MPSTATUS NTAPI UhciRHSetFeaturePortEnable(IN PVOID uhciExtension, IN USHORT Port)
VOID NTAPI UhciRHGetRootHubData(IN PVOID uhciExtension, IN PVOID rootHubData)
MPSTATUS NTAPI UhciRHClearFeaturePortSuspendChange(IN PVOID uhciExtension, IN USHORT Port)
MPSTATUS NTAPI UhciRHGetPortStatus(IN PVOID uhciExtension, IN USHORT Port, IN PUSB_PORT_STATUS_AND_CHANGE PortStatus)
MPSTATUS NTAPI UhciRHClearFeaturePortConnectChange(IN PVOID uhciExtension, IN USHORT Port)
MPSTATUS NTAPI UhciRHClearFeaturePortResetChange(IN PVOID uhciExtension, IN USHORT Port)
MPSTATUS NTAPI UhciRHGetStatus(IN PVOID uhciExtension, IN PUSHORT Status)
MPSTATUS NTAPI UhciRHSetFeaturePortSuspend(IN PVOID uhciExtension, IN USHORT Port)
MPSTATUS NTAPI UhciRHGetHubStatus(IN PVOID uhciExtension, IN PUSB_HUB_STATUS_AND_CHANGE HubStatus)
MPSTATUS NTAPI UhciRHClearFeaturePortOvercurrentChange(IN PVOID uhciExtension, IN USHORT Port)
VOID NTAPI UhciRHDisableIrq(IN PVOID uhciExtension)
MPSTATUS NTAPI UhciResumeController(IN PVOID uhciExtension)
VOID NTAPI UhciProcessDoneNonIsoTD(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_HCD_TD TD)
VOID NTAPI UhciDumpHcdTD(PUHCI_HCD_TD TD)
BOOLEAN NTAPI UhciHardwarePresent(IN PUHCI_EXTENSION UhciExtension)
VOID NTAPI UhciSetEndpointState(IN PVOID uhciExtension, IN PVOID uhciEndpoint, IN ULONG EndpointState)
VOID NTAPI UhciAbortIsoTransfer(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_ENDPOINT UhciEndpoint, IN PUHCI_TRANSFER UhciTransfer)
VOID NTAPI UhciCleanupFrameList(IN PUHCI_EXTENSION UhciExtension, IN BOOLEAN IsAllEntries)
VOID NTAPI UhciPollController(IN PVOID uhciExtension)
MPSTATUS NTAPI UhciEndSendOnePacket(IN PVOID uhciExtension, IN PVOID PacketParameters, IN PVOID Data, IN PULONG pDataLength, IN PVOID BufferVA, IN PVOID BufferPA, IN ULONG BufferLength, IN USBD_STATUS *pUSBDStatus)
VOID NTAPI UhciAbortTransfer(IN PVOID uhciExtension, IN PVOID uhciEndpoint, IN PVOID uhciTransfer, IN PULONG CompletedLength)
BOOLEAN NTAPI UhciInterruptService(IN PVOID uhciExtension)
VOID NTAPI UhciCheckController(IN PVOID uhciExtension)
ULONG NTAPI UhciGet32BitFrameNumber(IN PVOID uhciExtension)
VOID NTAPI UhciInsertQH(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_HCD_QH StaticQH, IN PUHCI_HCD_QH QH)
MPSTATUS NTAPI UhciStartController(IN PVOID uhciExtension, IN PUSBPORT_RESOURCES Resources)
MPSTATUS NTAPI UhciBulkOrInterruptTransfer(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_ENDPOINT UhciEndpoint, IN PUSBPORT_TRANSFER_PARAMETERS TransferParameters, IN PUHCI_TRANSFER UhciTransfer, IN PUSBPORT_SCATTER_GATHER_LIST SgList)
USBPORT_REGISTRATION_PACKET RegPacket
VOID NTAPI UhciAbortNonIsoTransfer(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_ENDPOINT UhciEndpoint, IN PUHCI_TRANSFER UhciTransfer, IN PULONG CompletedLength)
MPSTATUS NTAPI UhciIsochTransfer(IN PVOID ehciExtension, IN PVOID ehciEndpoint, IN PUSBPORT_TRANSFER_PARAMETERS TransferParameters, IN PVOID ehciTransfer, IN PVOID isoParameters)
VOID NTAPI UhciFlushInterrupts(IN PVOID uhciExtension)
VOID NTAPI UhciPollEndpoint(IN PVOID uhciExtension, IN PVOID uhciEndpoint)
MPSTATUS NTAPI UhciInitializeHardware(IN PUHCI_EXTENSION UhciExtension)
MPSTATUS NTAPI UhciControlTransfer(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_ENDPOINT UhciEndpoint, IN PUSBPORT_TRANSFER_PARAMETERS TransferParameters, IN PUHCI_TRANSFER UhciTransfer, IN PUSBPORT_SCATTER_GATHER_LIST SgList)
MPSTATUS NTAPI UhciOpenEndpoint(IN PVOID uhciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PVOID uhciEndpoint)
MPSTATUS NTAPI UhciSubmitTransfer(IN PVOID uhciExtension, IN PVOID uhciEndpoint, IN PUSBPORT_TRANSFER_PARAMETERS TransferParameters, IN PVOID uhciTransfer, IN PUSBPORT_SCATTER_GATHER_LIST SgList)
MPSTATUS NTAPI UhciReopenEndpoint(IN PVOID uhciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PVOID uhciEndpoint)
MPSTATUS NTAPI UhciInitializeSchedule(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_HC_RESOURCES HcResourcesVA, IN ULONG hcResourcesPA)
ULONG NTAPI UhciGetEndpointStatus(IN PVOID uhciExtension, IN PVOID uhciEndpoint)
MPSTATUS NTAPI UhciTakeControlHC(IN PUHCI_EXTENSION UhciExtension, IN PUSBPORT_RESOURCES Resources)
VOID NTAPI UhciQueueTransfer(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_ENDPOINT UhciEndpoint, IN PUHCI_HCD_TD FirstTD, IN PUHCI_HCD_TD LastTD)
VOID NTAPI UhciMapAsyncTransferToTDs(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_ENDPOINT UhciEndpoint, IN PUHCI_TRANSFER UhciTransfer, OUT PUHCI_HCD_TD *OutFirstTD, OUT PUHCI_HCD_TD *OutLastTD, IN PUSBPORT_SCATTER_GATHER_LIST SgList)
VOID NTAPI UhciStopController(IN PVOID uhciExtension, IN BOOLEAN IsDoDisableInterrupts)
PUHCI_HCD_TD NTAPI UhciAllocateTD(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_ENDPOINT UhciEndpoint)
MPSTATUS NTAPI UhciPassThru(IN PVOID uhciExtension, IN PVOID passThruParameters, IN ULONG ParameterLength, IN PVOID pParameters)
VOID NTAPI UhciCleanupFrameListEntry(IN PUHCI_EXTENSION UhciExtension, IN ULONG Index)
VOID NTAPI UhciInterruptNextSOF(IN PVOID uhciExtension)
VOID NTAPI UhciQueryEndpointRequirements(IN PVOID uhciExtension, IN PUSBPORT_ENDPOINT_PROPERTIES EndpointProperties, IN PUSBPORT_ENDPOINT_REQUIREMENTS EndpointRequirements)
VOID NTAPI UhciDumpHcdQH(PUHCI_HCD_QH QH)
MPSTATUS NTAPI UhciStartSendOnePacket(IN PVOID uhciExtension, IN PVOID PacketParameters, IN PVOID Data, IN PULONG pDataLength, IN PVOID BufferVA, IN PVOID BufferPA, IN ULONG BufferLength, IN USBD_STATUS *pUSBDStatus)
USBD_STATUS NTAPI UhciGetErrorFromTD(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_HCD_TD TD)
VOID NTAPI UhciUpdateCounter(IN PUHCI_EXTENSION UhciExtension)
VOID NTAPI UhciResetController(IN PVOID uhciExtension)
VOID NTAPI UhciFixDataToggle(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_ENDPOINT UhciEndpoint, IN PUHCI_HCD_TD TD, IN BOOL DataToggle)
VOID NTAPI UhciSetEndpointStatus(IN PVOID uhciExtension, IN PVOID uhciEndpoint, IN ULONG EndpointStatus)
MPSTATUS NTAPI UhciUnload(IN PVOID uhciExtension)
ULONG NTAPI UhciGetEndpointState(IN PVOID uhciExtension, IN PVOID uhciEndpoint)
VOID NTAPI UhciSetNextQH(IN PUHCI_HCD_QH QH, IN PUHCI_HCD_QH NextQH)
VOID NTAPI UhciDisableInterrupts(IN PVOID uhciExtension)
VOID NTAPI UhciInterruptDpc(IN PVOID uhciExtension, IN BOOLEAN IsDoEnableInterrupts)
VOID NTAPI UhciPollIsoEndpoint(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_ENDPOINT UhciEndpoint)
VOID NTAPI UhciEnableInterrupts(IN PVOID uhciExtension)
VOID NTAPI UhciCloseEndpoint(IN PVOID uhciExtension, IN PVOID uhciEndpoint, IN BOOLEAN IsDoDisablePeriodic)
VOID NTAPI UhciUnlinkQH(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_HCD_QH QH)
VOID NTAPI UhciSuspendController(IN PVOID uhciExtension)
VOID NTAPI UhciPollNonIsoEndpoint(IN PUHCI_EXTENSION UhciExtension, IN PUHCI_ENDPOINT UhciEndpoint)
VOID NTAPI UhciSetEndpointDataToggle(IN PVOID uhciExtension, IN PVOID uhciEndpoint, IN ULONG DataToggle)
#define UHCI_EXTENSION_FLAG_SUSPENDED
#define UHCI_MAX_STATIC_SOF_TDS
struct _UHCI_HCD_QH * PUHCI_HCD_QH
#define UHCI_FRAME_LIST_INDEX_MASK
struct _UHCI_HC_RESOURCES UHCI_HC_RESOURCES
#define UHCI_HCD_TD_FLAG_STALLED_SETUP
#define UHCI_HCD_QH_FLAG_ACTIVE
#define UHCI_FRAME_LIST_POINTER_QH
struct _UHCI_ENDPOINT UHCI_ENDPOINT
#define UHCI_HCD_TD_FLAG_NOT_ACCESSED
#define UHCI_MAX_BULK_TRANSFER_SIZE
struct _UHCI_HCD_QH UHCI_HCD_QH
struct _UHCI_TRANSFER UHCI_TRANSFER
struct _UHCI_HCD_TD UHCI_HCD_TD
#define UHCI_FRAME_LIST_POINTER_TD
#define UHCI_HCD_TD_FLAG_DATA_BUFFER
#define UHCI_HCD_QH_FLAG_REMOVE
#define UHCI_HCD_TD_FLAG_DONE
#define UHCI_HCD_TD_FLAG_GOOD_FRAME
struct _UHCI_HCD_TD * PUHCI_HCD_TD
#define UHCI_ENDPOINT_FLAG_CONTROL_OR_ISO
#define UHCI_MAX_INTERRUPT_TD_COUNT
struct _UHCI_EXTENSION UHCI_EXTENSION
struct _UHCI_HC_RESOURCES * PUHCI_HC_RESOURCES
#define UHCI_MAX_ISO_TD_COUNT
#define UHCI_HCD_TD_FLAG_CONTROLL
#define UHCI_MAX_HC_SCHEDULE_ERRORS
#define UHCI_MAX_ISO_TRANSFER_SIZE
#define UHCI_HCD_TD_FLAG_ALLOCATED
#define UHCI_ENDPOINT_FLAG_HALTED
#define UHCI_HCD_TD_FLAG_PROCESSED
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
WDF_EXTERN_C_START typedef _In_ WDFDEVICE _In_ WDFCONTEXT _In_ WDF_DMA_DIRECTION _In_ PSCATTER_GATHER_LIST SgList
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _In_ PWDF_USB_CONTROL_SETUP_PACKET SetupPacket
static GLenum _GLUfuncptr fn
_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
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress